Home | History | Annotate | Download | only in info
      1 This is doc/gcc.info, produced by makeinfo version 4.8 from
      2 ../../../toolchain/android-toolchain/gcc-4.3.1/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 Free Software
      6 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.2 or
     10 any later version published by the Free Software Foundation; with the
     11 Invariant Sections being "GNU General Public License" and "Funding Free
     12 Software", the Front-Cover texts being (a) (see below), and with the
     13 Back-Cover Texts being (b) (see below).  A copy of the license is
     14 included in the section entitled "GNU 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 Free Software
     35 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.2 or
     39 any later version published by the Free Software Foundation; with the
     40 Invariant Sections being "GNU General Public License" and "Funding Free
     41 Software", the Front-Cover texts being (a) (see below), and with the
     42 Back-Cover Texts being (b) (see below).  A copy of the license is
     43 included in the section entitled "GNU 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.3.1.  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++ Extensions::  GNU extensions to the C++ language.
     77 * Objective-C::     GNU Objective-C runtime features.
     78 * Compatibility::   Binary Compatibility
     79 * Gcov::            `gcov'---a test coverage program.
     80 * Trouble::         If you have trouble using GCC.
     81 * Bugs::            How, why and where to report bugs.
     82 * Service::         How to find suppliers of support for GCC.
     83 * Contributing::    How to contribute to testing and developing GCC.
     84 
     85 * Funding::         How to help assure funding for free software.
     86 * GNU Project::     The GNU Project and GNU/Linux.
     87 
     88 * Copying::         GNU General Public License says
     89                      how you can copy and share GCC.
     90 * GNU Free Documentation License:: How you can copy and share this manual.
     91 * Contributors::    People who have contributed to GCC.
     92 
     93 * Option Index::    Index to command line options.
     94 * Keyword Index::    Index of concepts and symbol names.
     95 
     96 
     97 File: gcc.info,  Node: G++ and GCC,  Next: Standards,  Prev: Top,  Up: Top
     98 
     99 1 Programming Languages Supported by GCC
    100 ****************************************
    101 
    102 GCC stands for "GNU Compiler Collection".  GCC is an integrated
    103 distribution of compilers for several major programming languages.
    104 These languages currently include C, C++, Objective-C, Objective-C++,
    105 Java, Fortran, and Ada.
    106 
    107  The abbreviation "GCC" has multiple meanings in common use.  The
    108 current official meaning is "GNU Compiler Collection", which refers
    109 generically to the complete suite of tools.  The name historically stood
    110 for "GNU C Compiler", and this usage is still common when the emphasis
    111 is on compiling C programs.  Finally, the name is also used when
    112 speaking of the "language-independent" component of GCC: code shared
    113 among the compilers for all supported languages.
    114 
    115  The language-independent component of GCC includes the majority of the
    116 optimizers, as well as the "back ends" that generate machine code for
    117 various processors.
    118 
    119  The part of a compiler that is specific to a particular language is
    120 called the "front end".  In addition to the front ends that are
    121 integrated components of GCC, there are several other front ends that
    122 are maintained separately.  These support languages such as Pascal,
    123 Mercury, and COBOL.  To use these, they must be built together with GCC
    124 proper.
    125 
    126  Most of the compilers for languages other than C have their own names.
    127 The C++ compiler is G++, the Ada compiler is GNAT, and so on.  When we
    128 talk about compiling one of those languages, we might refer to that
    129 compiler by its own name, or as GCC.  Either is correct.
    130 
    131  Historically, compilers for many languages, including C++ and Fortran,
    132 have been implemented as "preprocessors" which emit another high level
    133 language such as C.  None of the compilers included in GCC are
    134 implemented this way; they all generate machine code directly.  This
    135 sort of preprocessor should not be confused with the "C preprocessor",
    136 which is an integral feature of the C, C++, Objective-C and
    137 Objective-C++ languages.
    138 
    139 
    140 File: gcc.info,  Node: Standards,  Next: Invoking GCC,  Prev: G++ and GCC,  Up: Top
    141 
    142 2 Language Standards Supported by GCC
    143 *************************************
    144 
    145 For each language compiled by GCC for which there is a standard, GCC
    146 attempts to follow one or more versions of that standard, possibly with
    147 some exceptions, and possibly with some extensions.
    148 
    149 2.1 C language
    150 ==============
    151 
    152 GCC supports three versions of the C standard, although support for the
    153 most recent version is not yet complete.
    154 
    155  The original ANSI C standard (X3.159-1989) was ratified in 1989 and
    156 published in 1990.  This standard was ratified as an ISO standard
    157 (ISO/IEC 9899:1990) later in 1990.  There were no technical differences
    158 between these publications, although the sections of the ANSI standard
    159 were renumbered and became clauses in the ISO standard.  This standard,
    160 in both its forms, is commonly known as "C89", or occasionally as
    161 "C90", from the dates of ratification.  The ANSI standard, but not the
    162 ISO standard, also came with a Rationale document.  To select this
    163 standard in GCC, use one of the options `-ansi', `-std=c89' or
    164 `-std=iso9899:1990'; to obtain all the diagnostics required by the
    165 standard, you should also specify `-pedantic' (or `-pedantic-errors' if
    166 you want them to be errors rather than warnings).  *Note Options
    167 Controlling C Dialect: C Dialect Options.
    168 
    169  Errors in the 1990 ISO C standard were corrected in two Technical
    170 Corrigenda published in 1994 and 1996.  GCC does not support the
    171 uncorrected version.
    172 
    173  An amendment to the 1990 standard was published in 1995.  This
    174 amendment added digraphs and `__STDC_VERSION__' to the language, but
    175 otherwise concerned the library.  This amendment is commonly known as
    176 "AMD1"; the amended standard is sometimes known as "C94" or "C95".  To
    177 select this standard in GCC, use the option `-std=iso9899:199409'
    178 (with, as for other standard versions, `-pedantic' to receive all
    179 required diagnostics).
    180 
    181  A new edition of the ISO C standard was published in 1999 as ISO/IEC
    182 9899:1999, and is commonly known as "C99".  GCC has incomplete support
    183 for this standard version; see
    184 `http://gcc.gnu.org/gcc-4.3/c99status.html' for details.  To select this
    185 standard, use `-std=c99' or `-std=iso9899:1999'.  (While in
    186 development, drafts of this standard version were referred to as "C9X".)
    187 
    188  Errors in the 1999 ISO C standard were corrected in three Technical
    189 Corrigenda published in 2001, 2004 and 2007.  GCC does not support the
    190 uncorrected version.
    191 
    192  By default, GCC provides some extensions to the C language that on
    193 rare occasions conflict with the C standard.  *Note Extensions to the C
    194 Language Family: C Extensions.  Use of the `-std' options listed above
    195 will disable these extensions where they conflict with the C standard
    196 version selected.  You may also select an extended version of the C
    197 language explicitly with `-std=gnu89' (for C89 with GNU extensions) or
    198 `-std=gnu99' (for C99 with GNU extensions).  The default, if no C
    199 language dialect options are given, is `-std=gnu89'; this will change to
    200 `-std=gnu99' in some future release when the C99 support is complete.
    201 Some features that are part of the C99 standard are accepted as
    202 extensions in C89 mode.
    203 
    204  The ISO C standard defines (in clause 4) two classes of conforming
    205 implementation.  A "conforming hosted implementation" supports the
    206 whole standard including all the library facilities; a "conforming
    207 freestanding implementation" is only required to provide certain
    208 library facilities: those in `<float.h>', `<limits.h>', `<stdarg.h>',
    209 and `<stddef.h>'; since AMD1, also those in `<iso646.h>'; and in C99,
    210 also those in `<stdbool.h>' and `<stdint.h>'.  In addition, complex
    211 types, added in C99, are not required for freestanding implementations.
    212 The standard also defines two environments for programs, a
    213 "freestanding environment", required of all implementations and which
    214 may not have library facilities beyond those required of freestanding
    215 implementations, where the handling of program startup and termination
    216 are implementation-defined, and a "hosted environment", which is not
    217 required, in which all the library facilities are provided and startup
    218 is through a function `int main (void)' or `int main (int, char *[])'.
    219 An OS kernel would be a freestanding environment; a program using the
    220 facilities of an operating system would normally be in a hosted
    221 implementation.
    222 
    223  GCC aims towards being usable as a conforming freestanding
    224 implementation, or as the compiler for a conforming hosted
    225 implementation.  By default, it will act as the compiler for a hosted
    226 implementation, defining `__STDC_HOSTED__' as `1' and presuming that
    227 when the names of ISO C functions are used, they have the semantics
    228 defined in the standard.  To make it act as a conforming freestanding
    229 implementation for a freestanding environment, use the option
    230 `-ffreestanding'; it will then define `__STDC_HOSTED__' to `0' and not
    231 make assumptions about the meanings of function names from the standard
    232 library, with exceptions noted below.  To build an OS kernel, you may
    233 well still need to make your own arrangements for linking and startup.
    234 *Note Options Controlling C Dialect: C Dialect Options.
    235 
    236  GCC does not provide the library facilities required only of hosted
    237 implementations, nor yet all the facilities required by C99 of
    238 freestanding implementations; to use the facilities of a hosted
    239 environment, you will need to find them elsewhere (for example, in the
    240 GNU C library).  *Note Standard Libraries: Standard Libraries.
    241 
    242  Most of the compiler support routines used by GCC are present in
    243 `libgcc', but there are a few exceptions.  GCC requires the
    244 freestanding environment provide `memcpy', `memmove', `memset' and
    245 `memcmp'.  Finally, if `__builtin_trap' is used, and the target does
    246 not implement the `trap' pattern, then GCC will emit a call to `abort'.
    247 
    248  For references to Technical Corrigenda, Rationale documents and
    249 information concerning the history of C that is available online, see
    250 `http://gcc.gnu.org/readings.html'
    251 
    252 2.2 C++ language
    253 ================
    254 
    255 GCC supports the ISO C++ standard (1998) and contains experimental
    256 support for the upcoming ISO C++ standard (200x).
    257 
    258  The original ISO C++ standard was published as the ISO standard
    259 (ISO/IEC 14882:1998) and amended by a Technical Corrigenda published in
    260 2003 (ISO/IEC 14882:2003). These standards are referred to as C++98 and
    261 C++03, respectively. GCC implements the majority of C++98 (`export' is
    262 a notable exception) and most of the changes in C++03.  To select this
    263 standard in GCC, use one of the options `-ansi' or `-std=c++98'; to
    264 obtain all the diagnostics required by the standard, you should also
    265 specify `-pedantic' (or `-pedantic-errors' if you want them to be
    266 errors rather than warnings).
    267 
    268  The ISO C++ committee is working on a new ISO C++ standard, dubbed
    269 C++0x, that is intended to be published by 2009. C++0x contains several
    270 changes to the C++ language, some of which have been implemented in an
    271 experimental C++0x mode in GCC. The C++0x mode in GCC tracks the draft
    272 working paper for the C++0x standard; the latest working paper is
    273 available on the ISO C++ committee's web site at
    274 `http://www.open-std.org/jtc1/sc22/wg21/'. For information regarding
    275 the C++0x features available in the experimental C++0x mode, see
    276 `http://gcc.gnu.org/gcc-4.3/cxx0x_status.html'. To select this standard
    277 in GCC, use the option `-std=c++0x'; to obtain all the diagnostics
    278 required by the standard, you should also specify `-pedantic' (or
    279 `-pedantic-errors' if you want them to be errors rather than warnings).
    280 
    281  By default, GCC provides some extensions to the C++ language; *Note
    282 Options Controlling C++ Dialect: C++ Dialect Options.  Use of the
    283 `-std' option listed above will disable these extensions.  You may also
    284 select an extended version of the C++ language explicitly with
    285 `-std=gnu++98' (for C++98 with GNU extensions) or `-std=gnu++0x' (for
    286 C++0x with GNU extensions).  The default, if no C++ language dialect
    287 options are given, is `-std=gnu++98'.
    288 
    289 2.3 Objective-C and Objective-C++ languages
    290 ===========================================
    291 
    292 There is no formal written standard for Objective-C or Objective-C++.
    293 The most authoritative manual is "Object-Oriented Programming and the
    294 Objective-C Language", available at a number of web sites:
    295 
    296    *
    297      `http://developer.apple.com/documentation/Cocoa/Conceptual/ObjectiveC/'
    298      is a recent (and periodically updated) version;
    299 
    300    * `http://www.toodarkpark.org/computers/objc/' is an older example;
    301 
    302    * `http://www.gnustep.org' and `http://gcc.gnu.org/readings.html'
    303      have additional useful information.
    304 
    305 2.4 Treelang language
    306 =====================
    307 
    308 There is no standard for treelang, which is a sample language front end
    309 for GCC.  Its only purpose is as a sample for people wishing to write a
    310 new language for GCC.  The language is documented in
    311 `gcc/treelang/treelang.texi' which can be turned into info or HTML
    312 format.
    313 
    314  *Note GNAT Reference Manual: (gnat_rm)Top, for information on standard
    315 conformance and compatibility of the Ada compiler.
    316 
    317  *Note Standards: (gfortran)Standards, for details of standards
    318 supported by GNU Fortran.
    319 
    320  *Note Compatibility with the Java Platform: (gcj)Compatibility, for
    321 details of compatibility between `gcj' and the Java Platform.
    322 
    323 
    324 File: gcc.info,  Node: Invoking GCC,  Next: C Implementation,  Prev: Standards,  Up: Top
    325 
    326 3 GCC Command Options
    327 *********************
    328 
    329 When you invoke GCC, it normally does preprocessing, compilation,
    330 assembly and linking.  The "overall options" allow you to stop this
    331 process at an intermediate stage.  For example, the `-c' option says
    332 not to run the linker.  Then the output consists of object files output
    333 by the assembler.
    334 
    335  Other options are passed on to one stage of processing.  Some options
    336 control the preprocessor and others the compiler itself.  Yet other
    337 options control the assembler and linker; most of these are not
    338 documented here, since you rarely need to use any of them.
    339 
    340  Most of the command line options that you can use with GCC are useful
    341 for C programs; when an option is only useful with another language
    342 (usually C++), the explanation says so explicitly.  If the description
    343 for a particular option does not mention a source language, you can use
    344 that option with all supported languages.
    345 
    346  *Note Compiling C++ Programs: Invoking G++, for a summary of special
    347 options for compiling C++ programs.
    348 
    349  The `gcc' program accepts options and file names as operands.  Many
    350 options have multi-letter names; therefore multiple single-letter
    351 options may _not_ be grouped: `-dr' is very different from `-d -r'.
    352 
    353  You can mix options and other arguments.  For the most part, the order
    354 you use doesn't matter.  Order does matter when you use several options
    355 of the same kind; for example, if you specify `-L' more than once, the
    356 directories are searched in the order specified.  Also, the placement
    357 of the `-l' option is significant.
    358 
    359  Many options have long names starting with `-f' or with `-W'--for
    360 example, `-fmove-loop-invariants', `-Wformat' and so on.  Most of these
    361 have both positive and negative forms; the negative form of `-ffoo'
    362 would be `-fno-foo'.  This manual documents only one of these two
    363 forms, whichever one is not the default.
    364 
    365  *Note Option Index::, for an index to GCC's options.
    366 
    367 * Menu:
    368 
    369 * Option Summary::	Brief list of all options, without explanations.
    370 * Overall Options::     Controlling the kind of output:
    371                         an executable, object files, assembler files,
    372                         or preprocessed source.
    373 * Invoking G++::	Compiling C++ programs.
    374 * C Dialect Options::   Controlling the variant of C language compiled.
    375 * C++ Dialect Options:: Variations on C++.
    376 * Objective-C and Objective-C++ Dialect Options:: Variations on Objective-C
    377                         and Objective-C++.
    378 * Language Independent Options:: Controlling how diagnostics should be
    379                         formatted.
    380 * Warning Options::     How picky should the compiler be?
    381 * Debugging Options::   Symbol tables, measurements, and debugging dumps.
    382 * Optimize Options::    How much optimization?
    383 * Preprocessor Options:: Controlling header files and macro definitions.
    384                          Also, getting dependency information for Make.
    385 * Assembler Options::   Passing options to the assembler.
    386 * Link Options::        Specifying libraries and so on.
    387 * Directory Options::   Where to find header files and libraries.
    388                         Where to find the compiler executable files.
    389 * Spec Files::          How to pass switches to sub-processes.
    390 * Target Options::      Running a cross-compiler, or an old version of GCC.
    391 * Submodel Options::    Specifying minor hardware or convention variations,
    392                         such as 68010 vs 68020.
    393 * Code Gen Options::    Specifying conventions for function calls, data layout
    394                         and register usage.
    395 * Environment Variables:: Env vars that affect GCC.
    396 * Precompiled Headers:: Compiling a header once, and using it many times.
    397 * Running Protoize::    Automatically adding or removing function prototypes.
    398 
    399 
    400 File: gcc.info,  Node: Option Summary,  Next: Overall Options,  Up: Invoking GCC
    401 
    402 3.1 Option Summary
    403 ==================
    404 
    405 Here is a summary of all the options, grouped by type.  Explanations are
    406 in the following sections.
    407 
    408 _Overall Options_
    409      *Note Options Controlling the Kind of Output: Overall Options.
    410           -c  -S  -E  -o FILE  -combine  -pipe  -pass-exit-codes
    411           -x LANGUAGE  -v  -###  --help[=CLASS]  --target-help
    412           --version @FILE
    413 
    414 _C Language Options_
    415      *Note Options Controlling C Dialect: C Dialect Options.
    416           -ansi  -std=STANDARD  -fgnu89-inline
    417           -aux-info FILENAME
    418           -fno-asm  -fno-builtin  -fno-builtin-FUNCTION
    419           -fhosted  -ffreestanding -fopenmp -fms-extensions
    420           -trigraphs  -no-integrated-cpp  -traditional  -traditional-cpp
    421           -fallow-single-precision  -fcond-mismatch -flax-vector-conversions
    422           -fsigned-bitfields  -fsigned-char
    423           -funsigned-bitfields  -funsigned-char
    424 
    425 _C++ Language Options_
    426      *Note Options Controlling C++ Dialect: C++ Dialect Options.
    427           -fabi-version=N  -fno-access-control  -fcheck-new
    428           -fconserve-space  -ffriend-injection
    429           -fno-elide-constructors
    430           -fno-enforce-eh-specs
    431           -ffor-scope  -fno-for-scope  -fno-gnu-keywords
    432           -fno-implicit-templates
    433           -fno-implicit-inline-templates
    434           -fno-implement-inlines  -fms-extensions
    435           -fno-nonansi-builtins  -fno-operator-names
    436           -fno-optional-diags  -fpermissive
    437           -frepo  -fno-rtti  -fstats  -ftemplate-depth-N
    438           -fno-threadsafe-statics -fuse-cxa-atexit  -fno-weak  -nostdinc++
    439           -fno-default-inline  -fvisibility-inlines-hidden
    440           -fvisibility-ms-compat
    441           -Wabi  -Wctor-dtor-privacy
    442           -Wnon-virtual-dtor  -Wreorder
    443           -Weffc++  -Wno-deprecated  -Wstrict-null-sentinel
    444           -Wno-non-template-friend  -Wold-style-cast
    445           -Woverloaded-virtual  -Wno-pmf-conversions
    446           -Wsign-promo
    447 
    448 _Objective-C and Objective-C++ Language Options_
    449      *Note Options Controlling Objective-C and Objective-C++ Dialects:
    450      Objective-C and Objective-C++ Dialect Options.
    451           -fconstant-string-class=CLASS-NAME
    452           -fgnu-runtime  -fnext-runtime
    453           -fno-nil-receivers
    454           -fobjc-call-cxx-cdtors
    455           -fobjc-direct-dispatch
    456           -fobjc-exceptions
    457           -fobjc-gc
    458           -freplace-objc-classes
    459           -fzero-link
    460           -gen-decls
    461           -Wassign-intercept
    462           -Wno-protocol  -Wselector
    463           -Wstrict-selector-match
    464           -Wundeclared-selector
    465 
    466 _Language Independent Options_
    467      *Note Options to Control Diagnostic Messages Formatting: Language
    468      Independent Options.
    469           -fmessage-length=N
    470           -fdiagnostics-show-location=[once|every-line]
    471           -fdiagnostics-show-option
    472 
    473 _Warning Options_
    474      *Note Options to Request or Suppress Warnings: Warning Options.
    475           -fsyntax-only  -pedantic  -pedantic-errors
    476           -w  -Wextra  -Wall  -Waddress  -Waggregate-return  -Warray-bounds
    477           -Wno-attributes -Wc++-compat -Wc++0x-compat -Wcast-align  -Wcast-qual
    478           -Wchar-subscripts -Wclobbered  -Wcomment
    479           -Wconversion  -Wcoverage-mismatch  -Wno-deprecated-declarations
    480           -Wdisabled-optimization  -Wno-div-by-zero
    481           -Wempty-body  -Wno-endif-labels
    482           -Werror  -Werror=*
    483           -Wfatal-errors  -Wfloat-equal  -Wformat  -Wformat=2
    484           -Wno-format-extra-args -Wformat-nonliteral
    485           -Wformat-security  -Wformat-y2k -Wignored-qualifiers
    486           -Wimplicit  -Wimplicit-function-declaration  -Wimplicit-int
    487           -Wimport  -Wno-import  -Winit-self  -Winline
    488           -Wno-int-to-pointer-cast -Wno-invalid-offsetof
    489           -Winvalid-pch -Wlarger-than-LEN  -Wunsafe-loop-optimizations
    490           -Wlogical-op -Wlong-long
    491           -Wmain  -Wmissing-braces  -Wmissing-field-initializers
    492           -Wmissing-format-attribute  -Wmissing-include-dirs
    493           -Wmissing-noreturn
    494           -Wno-multichar  -Wnonnull  -Wno-overflow
    495           -Woverlength-strings  -Wpacked  -Wpadded
    496           -Wparentheses  -Wpointer-arith  -Wno-pointer-to-int-cast
    497           -Wredundant-decls
    498           -Wreturn-type  -Wsequence-point  -Wshadow
    499           -Wsign-compare  -Wsign-conversion  -Wstack-protector
    500           -Wstrict-aliasing -Wstrict-aliasing=n
    501           -Wstrict-overflow -Wstrict-overflow=N
    502           -Wswitch  -Wswitch-default  -Wswitch-enum
    503           -Wsystem-headers  -Wtrigraphs  -Wtype-limits  -Wundef  -Wuninitialized
    504           -Wunknown-pragmas  -Wno-pragmas -Wunreachable-code
    505           -Wunused  -Wunused-function  -Wunused-label  -Wunused-parameter
    506           -Wunused-value  -Wunused-variable
    507           -Wvariadic-macros -Wvla
    508           -Wvolatile-register-var  -Wwrite-strings
    509 
    510 _C and Objective-C-only Warning Options_
    511           -Wbad-function-cast  -Wmissing-declarations
    512           -Wmissing-parameter-type  -Wmissing-prototypes  -Wnested-externs
    513           -Wold-style-declaration  -Wold-style-definition
    514           -Wstrict-prototypes  -Wtraditional  -Wtraditional-conversion
    515           -Wdeclaration-after-statement -Wpointer-sign
    516 
    517 _Debugging Options_
    518      *Note Options for Debugging Your Program or GCC: Debugging Options.
    519           -dLETTERS  -dumpspecs  -dumpmachine  -dumpversion
    520           -fdbg-cnt-list -fdbg-cnt=COUNTER-VALUE-LIST
    521           -fdump-noaddr -fdump-unnumbered  -fdump-translation-unit[-N]
    522           -fdump-class-hierarchy[-N]
    523           -fdump-ipa-all -fdump-ipa-cgraph -fdump-ipa-inline
    524           -fdump-tree-all
    525           -fdump-tree-original[-N]
    526           -fdump-tree-optimized[-N]
    527           -fdump-tree-cfg -fdump-tree-vcg -fdump-tree-alias
    528           -fdump-tree-ch
    529           -fdump-tree-ssa[-N] -fdump-tree-pre[-N]
    530           -fdump-tree-ccp[-N] -fdump-tree-dce[-N]
    531           -fdump-tree-gimple[-raw] -fdump-tree-mudflap[-N]
    532           -fdump-tree-dom[-N]
    533           -fdump-tree-dse[-N]
    534           -fdump-tree-phiopt[-N]
    535           -fdump-tree-forwprop[-N]
    536           -fdump-tree-copyrename[-N]
    537           -fdump-tree-nrv -fdump-tree-vect
    538           -fdump-tree-sink
    539           -fdump-tree-sra[-N]
    540           -fdump-tree-salias
    541           -fdump-tree-fre[-N]
    542           -fdump-tree-vrp[-N]
    543           -ftree-vectorizer-verbose=N
    544           -fdump-tree-storeccp[-N]
    545           -feliminate-dwarf2-dups -feliminate-unused-debug-types
    546           -feliminate-unused-debug-symbols -femit-class-debug-always
    547           -fmem-report -fpre-ipa-mem-report -fpost-ipa-mem-report -fprofile-arcs
    548           -frandom-seed=STRING -fsched-verbose=N
    549           -ftest-coverage  -ftime-report -fvar-tracking
    550           -g  -gLEVEL  -gcoff -gdwarf-2
    551           -ggdb  -gstabs  -gstabs+  -gvms  -gxcoff  -gxcoff+
    552           -fno-merge-debug-strings -fdebug-prefix-map=OLD=NEW
    553           -femit-struct-debug-baseonly -femit-struct-debug-reduced
    554           -femit-struct-debug-detailed[=SPEC-LIST]
    555           -p  -pg  -print-file-name=LIBRARY  -print-libgcc-file-name
    556           -print-multi-directory  -print-multi-lib
    557           -print-prog-name=PROGRAM  -print-search-dirs  -Q
    558           -print-sysroot-headers-suffix
    559           -save-temps  -time
    560 
    561 _Optimization Options_
    562      *Note Options that Control Optimization: Optimize Options.
    563           -falign-functions[=N] -falign-jumps[=N]
    564           -falign-labels[=N] -falign-loops[=N] -fassociative-math
    565           -fauto-inc-dec -fbranch-probabilities -fbranch-target-load-optimize
    566           -fbranch-target-load-optimize2 -fbtr-bb-exclusive -fcaller-saves
    567           -fcheck-data-deps -fcprop-registers -fcrossjumping -fcse-follow-jumps
    568           -fcse-skip-blocks -fcx-limited-range -fdata-sections -fdce -fdce
    569           -fdelayed-branch -fdelete-null-pointer-checks -fdse -fdse
    570           -fearly-inlining -fexpensive-optimizations -ffast-math
    571           -ffinite-math-only -ffloat-store -fforward-propagate
    572           -ffunction-sections -fgcse -fgcse-after-reload -fgcse-las -fgcse-lm
    573           -fgcse-sm -fif-conversion -fif-conversion2 -finline-functions
    574           -finline-functions-called-once -finline-limit=N
    575           -finline-small-functions -fipa-cp -fipa-marix-reorg -fipa-pta
    576           -fipa-pure-const -fipa-reference -fipa-struct-reorg
    577           -fipa-type-escape -fivopts -fkeep-inline-functions -fkeep-static-consts
    578           -fmerge-all-constants -fmerge-constants -fmodulo-sched
    579           -fmodulo-sched-allow-regmoves -fmove-loop-invariants -fmudflap
    580           -fmudflapir -fmudflapth -fno-branch-count-reg -fno-default-inline
    581           -fno-defer-pop -fno-function-cse -fno-guess-branch-probability
    582           -fno-inline -fno-math-errno -fno-peephole -fno-peephole2
    583           -fno-sched-interblock -fno-sched-spec -fno-signed-zeros
    584           -fno-toplevel-reorder -fno-trapping-math -fno-zero-initialized-in-bss
    585           -fomit-frame-pointer -foptimize-register-move -foptimize-sibling-calls
    586           -fpeel-loops -fpredictive-commoning -fprefetch-loop-arrays
    587           -fprofile-generate -fprofile-use -fprofile-values -freciprocal-math
    588           -fregmove -frename-registers -freorder-blocks
    589           -freorder-blocks-and-partition -freorder-functions
    590           -frerun-cse-after-loop -freschedule-modulo-scheduled-loops
    591           -frounding-math -frtl-abstract-sequences -fsched2-use-superblocks
    592           -fsched2-use-traces -fsched-spec-load -fsched-spec-load-dangerous
    593           -fsched-stalled-insns-dep[=N] -fsched-stalled-insns[=N]
    594           -fschedule-insns -fschedule-insns2 -fsection-anchors -fsee
    595           -fsignaling-nans -fsingle-precision-constant -fsplit-ivs-in-unroller
    596           -fsplit-wide-types -fstack-protector -fstack-protector-all
    597           -fstrict-aliasing -fstrict-overflow -fthread-jumps -ftracer -ftree-ccp
    598           -ftree-ch -ftree-copy-prop -ftree-copyrename -ftree-dce
    599           -ftree-dominator-opts -ftree-dse -ftree-fre -ftree-loop-im
    600           -ftree-loop-ivcanon -ftree-loop-linear -ftree-loop-optimize
    601           -ftree-parallelize-loops=N -ftree-pre -ftree-reassoc -ftree-salias
    602           -ftree-sink -ftree-sra -ftree-store-ccp -ftree-ter
    603           -ftree-vect-loop-version -ftree-vectorize -ftree-vrp -funit-at-a-time
    604           -funroll-all-loops -funroll-loops -funsafe-loop-optimizations
    605           -funsafe-math-optimizations -funswitch-loops
    606           -fvariable-expansion-in-unroller -fvect-cost-model -fvpt -fweb
    607           -fwhole-program
    608           --param NAME=VALUE
    609           -O  -O0  -O1  -O2  -O3  -Os
    610 
    611 _Preprocessor Options_
    612      *Note Options Controlling the Preprocessor: Preprocessor Options.
    613           -AQUESTION=ANSWER
    614           -A-QUESTION[=ANSWER]
    615           -C  -dD  -dI  -dM  -dN
    616           -DMACRO[=DEFN]  -E  -H
    617           -idirafter DIR
    618           -include FILE  -imacros FILE
    619           -iprefix FILE  -iwithprefix DIR
    620           -iwithprefixbefore DIR  -isystem DIR
    621           -imultilib DIR -isysroot DIR
    622           -M  -MM  -MF  -MG  -MP  -MQ  -MT  -nostdinc
    623           -P  -fworking-directory  -remap
    624           -trigraphs  -undef  -UMACRO  -Wp,OPTION
    625           -Xpreprocessor OPTION
    626 
    627 _Assembler Option_
    628      *Note Passing Options to the Assembler: Assembler Options.
    629           -Wa,OPTION  -Xassembler OPTION
    630 
    631 _Linker Options_
    632      *Note Options for Linking: Link Options.
    633           OBJECT-FILE-NAME  -lLIBRARY
    634           -nostartfiles  -nodefaultlibs  -nostdlib -pie -rdynamic
    635           -s  -static  -static-libgcc  -shared  -shared-libgcc  -symbolic
    636           -Wl,OPTION  -Xlinker OPTION
    637           -u SYMBOL
    638 
    639 _Directory Options_
    640      *Note Options for Directory Search: Directory Options.
    641           -BPREFIX  -IDIR  -iquoteDIR  -LDIR
    642           -specs=FILE  -I- --sysroot=DIR
    643 
    644 _Target Options_
    645      *Note Target Options::.
    646           -V VERSION  -b MACHINE
    647 
    648 _Machine Dependent Options_
    649      *Note Hardware Models and Configurations: Submodel Options.
    650 
    651      _ARC Options_
    652           -EB  -EL
    653           -mmangle-cpu  -mcpu=CPU  -mtext=TEXT-SECTION
    654           -mdata=DATA-SECTION  -mrodata=READONLY-DATA-SECTION
    655 
    656      _ARM Options_
    657           -mapcs-frame  -mno-apcs-frame
    658           -mabi=NAME
    659           -mapcs-stack-check  -mno-apcs-stack-check
    660           -mapcs-float  -mno-apcs-float
    661           -mapcs-reentrant  -mno-apcs-reentrant
    662           -msched-prolog  -mno-sched-prolog
    663           -mlittle-endian  -mbig-endian  -mwords-little-endian
    664           -mfloat-abi=NAME  -msoft-float  -mhard-float  -mfpe
    665           -mthumb-interwork  -mno-thumb-interwork
    666           -mcpu=NAME  -march=NAME  -mfpu=NAME
    667           -mstructure-size-boundary=N
    668           -mabort-on-noreturn
    669           -mlong-calls  -mno-long-calls
    670           -msingle-pic-base  -mno-single-pic-base
    671           -mpic-register=REG
    672           -mnop-fun-dllimport
    673           -mcirrus-fix-invalid-insns -mno-cirrus-fix-invalid-insns
    674           -mpoke-function-name
    675           -mthumb  -marm
    676           -mtpcs-frame  -mtpcs-leaf-frame
    677           -mcaller-super-interworking  -mcallee-super-interworking
    678           -mtp=NAME
    679           -mandroid
    680 
    681      _AVR Options_
    682           -mmcu=MCU  -msize  -minit-stack=N  -mno-interrupts
    683           -mcall-prologues  -mno-tablejump  -mtiny-stack  -mint8
    684 
    685      _Blackfin Options_
    686           -mcpu=CPU[-SIREVISION]
    687           -msim -momit-leaf-frame-pointer  -mno-omit-leaf-frame-pointer
    688           -mspecld-anomaly  -mno-specld-anomaly  -mcsync-anomaly  -mno-csync-anomaly
    689           -mlow-64k -mno-low64k  -mstack-check-l1  -mid-shared-library
    690           -mno-id-shared-library  -mshared-library-id=N
    691           -mleaf-id-shared-library  -mno-leaf-id-shared-library
    692           -msep-data  -mno-sep-data  -mlong-calls  -mno-long-calls
    693           -mfast-fp -minline-plt
    694 
    695      _CRIS Options_
    696           -mcpu=CPU  -march=CPU  -mtune=CPU
    697           -mmax-stack-frame=N  -melinux-stacksize=N
    698           -metrax4  -metrax100  -mpdebug  -mcc-init  -mno-side-effects
    699           -mstack-align  -mdata-align  -mconst-align
    700           -m32-bit  -m16-bit  -m8-bit  -mno-prologue-epilogue  -mno-gotplt
    701           -melf  -maout  -melinux  -mlinux  -sim  -sim2
    702           -mmul-bug-workaround  -mno-mul-bug-workaround
    703 
    704      _CRX Options_
    705           -mmac -mpush-args
    706 
    707      _Darwin Options_
    708           -all_load  -allowable_client  -arch  -arch_errors_fatal
    709           -arch_only  -bind_at_load  -bundle  -bundle_loader
    710           -client_name  -compatibility_version  -current_version
    711           -dead_strip
    712           -dependency-file  -dylib_file  -dylinker_install_name
    713           -dynamic  -dynamiclib  -exported_symbols_list
    714           -filelist  -flat_namespace  -force_cpusubtype_ALL
    715           -force_flat_namespace  -headerpad_max_install_names
    716           -iframework
    717           -image_base  -init  -install_name  -keep_private_externs
    718           -multi_module  -multiply_defined  -multiply_defined_unused
    719           -noall_load   -no_dead_strip_inits_and_terms
    720           -nofixprebinding -nomultidefs  -noprebind  -noseglinkedit
    721           -pagezero_size  -prebind  -prebind_all_twolevel_modules
    722           -private_bundle  -read_only_relocs  -sectalign
    723           -sectobjectsymbols  -whyload  -seg1addr
    724           -sectcreate  -sectobjectsymbols  -sectorder
    725           -segaddr -segs_read_only_addr -segs_read_write_addr
    726           -seg_addr_table  -seg_addr_table_filename  -seglinkedit
    727           -segprot  -segs_read_only_addr  -segs_read_write_addr
    728           -single_module  -static  -sub_library  -sub_umbrella
    729           -twolevel_namespace  -umbrella  -undefined
    730           -unexported_symbols_list  -weak_reference_mismatches
    731           -whatsloaded -F -gused -gfull -mmacosx-version-min=VERSION
    732           -mkernel -mone-byte-bool
    733 
    734      _DEC Alpha Options_
    735           -mno-fp-regs  -msoft-float  -malpha-as  -mgas
    736           -mieee  -mieee-with-inexact  -mieee-conformant
    737           -mfp-trap-mode=MODE  -mfp-rounding-mode=MODE
    738           -mtrap-precision=MODE  -mbuild-constants
    739           -mcpu=CPU-TYPE  -mtune=CPU-TYPE
    740           -mbwx  -mmax  -mfix  -mcix
    741           -mfloat-vax  -mfloat-ieee
    742           -mexplicit-relocs  -msmall-data  -mlarge-data
    743           -msmall-text  -mlarge-text
    744           -mmemory-latency=TIME
    745 
    746      _DEC Alpha/VMS Options_
    747           -mvms-return-codes
    748 
    749      _FRV Options_
    750           -mgpr-32  -mgpr-64  -mfpr-32  -mfpr-64
    751           -mhard-float  -msoft-float
    752           -malloc-cc  -mfixed-cc  -mdword  -mno-dword
    753           -mdouble  -mno-double
    754           -mmedia  -mno-media  -mmuladd  -mno-muladd
    755           -mfdpic  -minline-plt -mgprel-ro  -multilib-library-pic
    756           -mlinked-fp  -mlong-calls  -malign-labels
    757           -mlibrary-pic  -macc-4  -macc-8
    758           -mpack  -mno-pack  -mno-eflags  -mcond-move  -mno-cond-move
    759           -moptimize-membar -mno-optimize-membar
    760           -mscc  -mno-scc  -mcond-exec  -mno-cond-exec
    761           -mvliw-branch  -mno-vliw-branch
    762           -mmulti-cond-exec  -mno-multi-cond-exec  -mnested-cond-exec
    763           -mno-nested-cond-exec  -mtomcat-stats
    764           -mTLS -mtls
    765           -mcpu=CPU
    766 
    767      _GNU/Linux Options_
    768           -muclibc
    769 
    770      _H8/300 Options_
    771           -mrelax  -mh  -ms  -mn  -mint32  -malign-300
    772 
    773      _HPPA Options_
    774           -march=ARCHITECTURE-TYPE
    775           -mbig-switch  -mdisable-fpregs  -mdisable-indexing
    776           -mfast-indirect-calls  -mgas  -mgnu-ld   -mhp-ld
    777           -mfixed-range=REGISTER-RANGE
    778           -mjump-in-delay -mlinker-opt -mlong-calls
    779           -mlong-load-store  -mno-big-switch  -mno-disable-fpregs
    780           -mno-disable-indexing  -mno-fast-indirect-calls  -mno-gas
    781           -mno-jump-in-delay  -mno-long-load-store
    782           -mno-portable-runtime  -mno-soft-float
    783           -mno-space-regs  -msoft-float  -mpa-risc-1-0
    784           -mpa-risc-1-1  -mpa-risc-2-0  -mportable-runtime
    785           -mschedule=CPU-TYPE  -mspace-regs  -msio  -mwsio
    786           -munix=UNIX-STD  -nolibdld  -static  -threads
    787 
    788      _i386 and x86-64 Options_
    789           -mtune=CPU-TYPE  -march=CPU-TYPE
    790           -mfpmath=UNIT
    791           -masm=DIALECT  -mno-fancy-math-387
    792           -mno-fp-ret-in-387  -msoft-float
    793           -mno-wide-multiply  -mrtd  -malign-double
    794           -mpreferred-stack-boundary=NUM -mcld -mcx16 -msahf -mrecip
    795           -mmmx  -msse  -msse2 -msse3 -mssse3 -msse4.1 -msse4.2 -msse4
    796           -msse4a -m3dnow -mpopcnt -mabm -msse5
    797           -mthreads  -mno-align-stringops  -minline-all-stringops
    798           -mpush-args  -maccumulate-outgoing-args  -m128bit-long-double
    799           -m96bit-long-double  -mregparm=NUM  -msseregparm
    800           -mveclibabi=TYPE -mpc32 -mpc64 -mpc80 -mstackrealign
    801           -momit-leaf-frame-pointer  -mno-red-zone -mno-tls-direct-seg-refs
    802           -mcmodel=CODE-MODEL
    803           -m32  -m64 -mlarge-data-threshold=NUM
    804           -mfused-madd -mno-fused-madd
    805 
    806      _IA-64 Options_
    807           -mbig-endian  -mlittle-endian  -mgnu-as  -mgnu-ld  -mno-pic
    808           -mvolatile-asm-stop  -mregister-names  -mno-sdata
    809           -mconstant-gp  -mauto-pic  -minline-float-divide-min-latency
    810           -minline-float-divide-max-throughput
    811           -minline-int-divide-min-latency
    812           -minline-int-divide-max-throughput
    813           -minline-sqrt-min-latency -minline-sqrt-max-throughput
    814           -mno-dwarf2-asm -mearly-stop-bits
    815           -mfixed-range=REGISTER-RANGE -mtls-size=TLS-SIZE
    816           -mtune=CPU-TYPE -mt -pthread -milp32 -mlp64
    817           -mno-sched-br-data-spec -msched-ar-data-spec -mno-sched-control-spec
    818           -msched-br-in-data-spec -msched-ar-in-data-spec -msched-in-control-spec
    819           -msched-ldc -mno-sched-control-ldc -mno-sched-spec-verbose
    820           -mno-sched-prefer-non-data-spec-insns
    821           -mno-sched-prefer-non-control-spec-insns
    822           -mno-sched-count-spec-in-critical-path
    823 
    824      _M32R/D Options_
    825           -m32r2 -m32rx -m32r
    826           -mdebug
    827           -malign-loops -mno-align-loops
    828           -missue-rate=NUMBER
    829           -mbranch-cost=NUMBER
    830           -mmodel=CODE-SIZE-MODEL-TYPE
    831           -msdata=SDATA-TYPE
    832           -mno-flush-func -mflush-func=NAME
    833           -mno-flush-trap -mflush-trap=NUMBER
    834           -G NUM
    835 
    836      _M32C Options_
    837           -mcpu=CPU -msim -memregs=NUMBER
    838 
    839      _M680x0 Options_
    840           -march=ARCH  -mcpu=CPU  -mtune=TUNE
    841           -m68000  -m68020  -m68020-40  -m68020-60  -m68030  -m68040
    842           -m68060  -mcpu32  -m5200  -m5206e  -m528x  -m5307  -m5407
    843           -mcfv4e  -mbitfield  -mno-bitfield  -mc68000  -mc68020
    844           -mnobitfield  -mrtd  -mno-rtd  -mdiv  -mno-div  -mshort
    845           -mno-short  -mhard-float  -m68881  -msoft-float  -mpcrel
    846           -malign-int  -mstrict-align  -msep-data  -mno-sep-data
    847           -mshared-library-id=n  -mid-shared-library  -mno-id-shared-library
    848 
    849      _M68hc1x Options_
    850           -m6811  -m6812  -m68hc11  -m68hc12   -m68hcs12
    851           -mauto-incdec  -minmax  -mlong-calls  -mshort
    852           -msoft-reg-count=COUNT
    853 
    854      _MCore Options_
    855           -mhardlit  -mno-hardlit  -mdiv  -mno-div  -mrelax-immediates
    856           -mno-relax-immediates  -mwide-bitfields  -mno-wide-bitfields
    857           -m4byte-functions  -mno-4byte-functions  -mcallgraph-data
    858           -mno-callgraph-data  -mslow-bytes  -mno-slow-bytes  -mno-lsim
    859           -mlittle-endian  -mbig-endian  -m210  -m340  -mstack-increment
    860 
    861      _MIPS Options_
    862           -EL  -EB  -march=ARCH  -mtune=ARCH
    863           -mips1  -mips2  -mips3  -mips4  -mips32  -mips32r2  -mips64
    864           -mips16  -mno-mips16  -mflip-mips16
    865           -minterlink-mips16  -mno-interlink-mips16
    866           -mabi=ABI  -mabicalls  -mno-abicalls
    867           -mshared  -mno-shared  -mxgot  -mno-xgot  -mgp32  -mgp64
    868           -mfp32  -mfp64  -mhard-float  -msoft-float
    869           -msingle-float  -mdouble-float  -mdsp  -mno-dsp  -mdspr2  -mno-dspr2
    870           -msmartmips  -mno-smartmips
    871           -mpaired-single  -mno-paired-single  -mdmx  -mno-mdmx
    872           -mips3d  -mno-mips3d  -mmt  -mno-mt  -mllsc  -mno-llsc
    873           -mlong64  -mlong32  -msym32  -mno-sym32
    874           -GNUM  -mlocal-sdata  -mno-local-sdata
    875           -mextern-sdata  -mno-extern-sdata  -mgpopt  -mno-gopt
    876           -membedded-data  -mno-embedded-data
    877           -muninit-const-in-rodata  -mno-uninit-const-in-rodata
    878           -mcode-readable=SETTING
    879           -msplit-addresses  -mno-split-addresses
    880           -mexplicit-relocs  -mno-explicit-relocs
    881           -mcheck-zero-division  -mno-check-zero-division
    882           -mdivide-traps  -mdivide-breaks
    883           -mmemcpy  -mno-memcpy  -mlong-calls  -mno-long-calls
    884           -mmad  -mno-mad  -mfused-madd  -mno-fused-madd  -nocpp
    885           -mfix-r4000  -mno-fix-r4000  -mfix-r4400  -mno-fix-r4400
    886           -mfix-vr4120  -mno-fix-vr4120  -mfix-vr4130  -mno-fix-vr4130
    887           -mfix-sb1  -mno-fix-sb1
    888           -mflush-func=FUNC  -mno-flush-func
    889           -mbranch-cost=NUM  -mbranch-likely  -mno-branch-likely
    890           -mfp-exceptions -mno-fp-exceptions
    891           -mvr4130-align -mno-vr4130-align
    892 
    893      _MMIX Options_
    894           -mlibfuncs  -mno-libfuncs  -mepsilon  -mno-epsilon  -mabi=gnu
    895           -mabi=mmixware  -mzero-extend  -mknuthdiv  -mtoplevel-symbols
    896           -melf  -mbranch-predict  -mno-branch-predict  -mbase-addresses
    897           -mno-base-addresses  -msingle-exit  -mno-single-exit
    898 
    899      _MN10300 Options_
    900           -mmult-bug  -mno-mult-bug
    901           -mam33  -mno-am33
    902           -mam33-2  -mno-am33-2
    903           -mreturn-pointer-on-d0
    904           -mno-crt0  -mrelax
    905 
    906      _MT Options_
    907           -mno-crt0 -mbacc -msim
    908           -march=CPU-TYPE
    909 
    910      _PDP-11 Options_
    911           -mfpu  -msoft-float  -mac0  -mno-ac0  -m40  -m45  -m10
    912           -mbcopy  -mbcopy-builtin  -mint32  -mno-int16
    913           -mint16  -mno-int32  -mfloat32  -mno-float64
    914           -mfloat64  -mno-float32  -mabshi  -mno-abshi
    915           -mbranch-expensive  -mbranch-cheap
    916           -msplit  -mno-split  -munix-asm  -mdec-asm
    917 
    918      _PowerPC Options_ See RS/6000 and PowerPC Options.
    919 
    920      _RS/6000 and PowerPC Options_
    921           -mcpu=CPU-TYPE
    922           -mtune=CPU-TYPE
    923           -mpower  -mno-power  -mpower2  -mno-power2
    924           -mpowerpc  -mpowerpc64  -mno-powerpc
    925           -maltivec  -mno-altivec
    926           -mpowerpc-gpopt  -mno-powerpc-gpopt
    927           -mpowerpc-gfxopt  -mno-powerpc-gfxopt
    928           -mmfcrf  -mno-mfcrf  -mpopcntb  -mno-popcntb  -mfprnd  -mno-fprnd
    929           -mcmpb -mno-cmpb -mmfpgpr -mno-mfpgpr -mhard-dfp -mno-hard-dfp
    930           -mnew-mnemonics  -mold-mnemonics
    931           -mfull-toc   -mminimal-toc  -mno-fp-in-toc  -mno-sum-in-toc
    932           -m64  -m32  -mxl-compat  -mno-xl-compat  -mpe
    933           -malign-power  -malign-natural
    934           -msoft-float  -mhard-float  -mmultiple  -mno-multiple
    935           -mstring  -mno-string  -mupdate  -mno-update
    936           -mfused-madd  -mno-fused-madd  -mbit-align  -mno-bit-align
    937           -mstrict-align  -mno-strict-align  -mrelocatable
    938           -mno-relocatable  -mrelocatable-lib  -mno-relocatable-lib
    939           -mtoc  -mno-toc  -mlittle  -mlittle-endian  -mbig  -mbig-endian
    940           -mdynamic-no-pic  -maltivec  -mswdiv
    941           -mprioritize-restricted-insns=PRIORITY
    942           -msched-costly-dep=DEPENDENCE_TYPE
    943           -minsert-sched-nops=SCHEME
    944           -mcall-sysv  -mcall-netbsd
    945           -maix-struct-return  -msvr4-struct-return
    946           -mabi=ABI-TYPE -msecure-plt -mbss-plt
    947           -misel -mno-isel
    948           -misel=yes  -misel=no
    949           -mspe -mno-spe
    950           -mspe=yes  -mspe=no
    951           -mpaired
    952           -mvrsave -mno-vrsave
    953           -mmulhw -mno-mulhw
    954           -mdlmzb -mno-dlmzb
    955           -mfloat-gprs=yes  -mfloat-gprs=no -mfloat-gprs=single -mfloat-gprs=double
    956           -mprototype  -mno-prototype
    957           -msim  -mmvme  -mads  -myellowknife  -memb  -msdata
    958           -msdata=OPT  -mvxworks  -mwindiss  -G NUM  -pthread
    959 
    960      _S/390 and zSeries Options_
    961           -mtune=CPU-TYPE  -march=CPU-TYPE
    962           -mhard-float  -msoft-float -mlong-double-64 -mlong-double-128
    963           -mbackchain  -mno-backchain -mpacked-stack  -mno-packed-stack
    964           -msmall-exec  -mno-small-exec  -mmvcle -mno-mvcle
    965           -m64  -m31  -mdebug  -mno-debug  -mesa  -mzarch
    966           -mtpf-trace -mno-tpf-trace  -mfused-madd  -mno-fused-madd
    967           -mwarn-framesize  -mwarn-dynamicstack  -mstack-size -mstack-guard
    968 
    969      _Score Options_
    970           -meb -mel
    971           -mnhwloop
    972           -muls
    973           -mmac
    974           -mscore5 -mscore5u -mscore7 -mscore7d
    975 
    976      _SH Options_
    977           -m1  -m2  -m2e  -m3  -m3e
    978           -m4-nofpu  -m4-single-only  -m4-single  -m4
    979           -m4a-nofpu -m4a-single-only -m4a-single -m4a -m4al
    980           -m5-64media  -m5-64media-nofpu
    981           -m5-32media  -m5-32media-nofpu
    982           -m5-compact  -m5-compact-nofpu
    983           -mb  -ml  -mdalign  -mrelax
    984           -mbigtable  -mfmovd  -mhitachi -mrenesas -mno-renesas -mnomacsave
    985           -mieee  -misize  -minline-ic_invalidate -mpadstruct  -mspace
    986           -mprefergot  -musermode -multcost=NUMBER -mdiv=STRATEGY
    987           -mdivsi3_libfunc=NAME
    988           -madjust-unroll -mindexed-addressing -mgettrcost=NUMBER -mpt-fixed
    989            -minvalid-symbols
    990 
    991      _SPARC Options_
    992           -mcpu=CPU-TYPE
    993           -mtune=CPU-TYPE
    994           -mcmodel=CODE-MODEL
    995           -m32  -m64  -mapp-regs  -mno-app-regs
    996           -mfaster-structs  -mno-faster-structs
    997           -mfpu  -mno-fpu  -mhard-float  -msoft-float
    998           -mhard-quad-float  -msoft-quad-float
    999           -mimpure-text  -mno-impure-text  -mlittle-endian
   1000           -mstack-bias  -mno-stack-bias
   1001           -munaligned-doubles  -mno-unaligned-doubles
   1002           -mv8plus  -mno-v8plus  -mvis  -mno-vis
   1003           -threads -pthreads -pthread
   1004 
   1005      _SPU Options_
   1006           -mwarn-reloc -merror-reloc
   1007           -msafe-dma -munsafe-dma
   1008           -mbranch-hints
   1009           -msmall-mem -mlarge-mem -mstdmain
   1010           -mfixed-range=REGISTER-RANGE
   1011 
   1012      _System V Options_
   1013           -Qy  -Qn  -YP,PATHS  -Ym,DIR
   1014 
   1015      _V850 Options_
   1016           -mlong-calls  -mno-long-calls  -mep  -mno-ep
   1017           -mprolog-function  -mno-prolog-function  -mspace
   1018           -mtda=N  -msda=N  -mzda=N
   1019           -mapp-regs  -mno-app-regs
   1020           -mdisable-callt  -mno-disable-callt
   1021           -mv850e1
   1022           -mv850e
   1023           -mv850  -mbig-switch
   1024 
   1025      _VAX Options_
   1026           -mg  -mgnu  -munix
   1027 
   1028      _VxWorks Options_
   1029           -mrtp  -non-static  -Bstatic  -Bdynamic
   1030           -Xbind-lazy  -Xbind-now
   1031 
   1032      _x86-64 Options_ See i386 and x86-64 Options.
   1033 
   1034      _Xstormy16 Options_
   1035           -msim
   1036 
   1037      _Xtensa Options_
   1038           -mconst16 -mno-const16
   1039           -mfused-madd  -mno-fused-madd
   1040           -mtext-section-literals  -mno-text-section-literals
   1041           -mtarget-align  -mno-target-align
   1042           -mlongcalls  -mno-longcalls
   1043 
   1044      _zSeries Options_ See S/390 and zSeries Options.
   1045 
   1046 _Code Generation Options_
   1047      *Note Options for Code Generation Conventions: Code Gen Options.
   1048           -fcall-saved-REG  -fcall-used-REG
   1049           -ffixed-REG  -fexceptions
   1050           -fnon-call-exceptions  -funwind-tables
   1051           -fasynchronous-unwind-tables
   1052           -finhibit-size-directive  -finstrument-functions
   1053           -finstrument-functions-exclude-function-list=SYM,SYM,...
   1054           -finstrument-functions-exclude-file-list=FILE,FILE,...
   1055           -fno-common  -fno-ident
   1056           -fpcc-struct-return  -fpic  -fPIC -fpie -fPIE
   1057           -fno-jump-tables
   1058           -frecord-gcc-switches
   1059           -freg-struct-return  -fshort-enums
   1060           -fshort-double  -fshort-wchar
   1061           -fverbose-asm  -fpack-struct[=N]  -fstack-check
   1062           -fstack-limit-register=REG  -fstack-limit-symbol=SYM
   1063           -fno-stack-limit  -fargument-alias  -fargument-noalias
   1064           -fargument-noalias-global  -fargument-noalias-anything
   1065           -fleading-underscore  -ftls-model=MODEL
   1066           -ftrapv  -fwrapv  -fbounds-check
   1067           -fvisibility
   1068 
   1069 
   1070 * Menu:
   1071 
   1072 * Overall Options::     Controlling the kind of output:
   1073                         an executable, object files, assembler files,
   1074                         or preprocessed source.
   1075 * C Dialect Options::   Controlling the variant of C language compiled.
   1076 * C++ Dialect Options:: Variations on C++.
   1077 * Objective-C and Objective-C++ Dialect Options:: Variations on Objective-C
   1078                         and Objective-C++.
   1079 * Language Independent Options:: Controlling how diagnostics should be
   1080                         formatted.
   1081 * Warning Options::     How picky should the compiler be?
   1082 * Debugging Options::   Symbol tables, measurements, and debugging dumps.
   1083 * Optimize Options::    How much optimization?
   1084 * Preprocessor Options:: Controlling header files and macro definitions.
   1085                          Also, getting dependency information for Make.
   1086 * Assembler Options::   Passing options to the assembler.
   1087 * Link Options::        Specifying libraries and so on.
   1088 * Directory Options::   Where to find header files and libraries.
   1089                         Where to find the compiler executable files.
   1090 * Spec Files::          How to pass switches to sub-processes.
   1091 * Target Options::      Running a cross-compiler, or an old version of GCC.
   1092 
   1093 
   1094 File: gcc.info,  Node: Overall Options,  Next: Invoking G++,  Prev: Option Summary,  Up: Invoking GCC
   1095 
   1096 3.2 Options Controlling the Kind of Output
   1097 ==========================================
   1098 
   1099 Compilation can involve up to four stages: preprocessing, compilation
   1100 proper, assembly and linking, always in that order.  GCC is capable of
   1101 preprocessing and compiling several files either into several assembler
   1102 input files, or into one assembler input file; then each assembler
   1103 input file produces an object file, and linking combines all the object
   1104 files (those newly compiled, and those specified as input) into an
   1105 executable file.
   1106 
   1107  For any given input file, the file name suffix determines what kind of
   1108 compilation is done:
   1109 
   1110 `FILE.c'
   1111      C source code which must be preprocessed.
   1112 
   1113 `FILE.i'
   1114      C source code which should not be preprocessed.
   1115 
   1116 `FILE.ii'
   1117      C++ source code which should not be preprocessed.
   1118 
   1119 `FILE.m'
   1120      Objective-C source code.  Note that you must link with the
   1121      `libobjc' library to make an Objective-C program work.
   1122 
   1123 `FILE.mi'
   1124      Objective-C source code which should not be preprocessed.
   1125 
   1126 `FILE.mm'
   1127 `FILE.M'
   1128      Objective-C++ source code.  Note that you must link with the
   1129      `libobjc' library to make an Objective-C++ program work.  Note
   1130      that `.M' refers to a literal capital M.
   1131 
   1132 `FILE.mii'
   1133      Objective-C++ source code which should not be preprocessed.
   1134 
   1135 `FILE.h'
   1136      C, C++, Objective-C or Objective-C++ header file to be turned into
   1137      a precompiled header.
   1138 
   1139 `FILE.cc'
   1140 `FILE.cp'
   1141 `FILE.cxx'
   1142 `FILE.cpp'
   1143 `FILE.CPP'
   1144 `FILE.c++'
   1145 `FILE.C'
   1146      C++ source code which must be preprocessed.  Note that in `.cxx',
   1147      the last two letters must both be literally `x'.  Likewise, `.C'
   1148      refers to a literal capital C.
   1149 
   1150 `FILE.mm'
   1151 `FILE.M'
   1152      Objective-C++ source code which must be preprocessed.
   1153 
   1154 `FILE.mii'
   1155      Objective-C++ source code which should not be preprocessed.
   1156 
   1157 `FILE.hh'
   1158 `FILE.H'
   1159 `FILE.hp'
   1160 `FILE.hxx'
   1161 `FILE.hpp'
   1162 `FILE.HPP'
   1163 `FILE.h++'
   1164 `FILE.tcc'
   1165      C++ header file to be turned into a precompiled header.
   1166 
   1167 `FILE.f'
   1168 `FILE.for'
   1169 `FILE.FOR'
   1170      Fixed form Fortran source code which should not be preprocessed.
   1171 
   1172 `FILE.F'
   1173 `FILE.fpp'
   1174 `FILE.FPP'
   1175      Fixed form Fortran source code which must be preprocessed (with
   1176      the traditional preprocessor).
   1177 
   1178 `FILE.f90'
   1179 `FILE.f95'
   1180      Free form Fortran source code which should not be preprocessed.
   1181 
   1182 `FILE.F90'
   1183 `FILE.F95'
   1184      Free form Fortran source code which must be preprocessed (with the
   1185      traditional preprocessor).
   1186 
   1187 `FILE.ads'
   1188      Ada source code file which contains a library unit declaration (a
   1189      declaration of a package, subprogram, or generic, or a generic
   1190      instantiation), or a library unit renaming declaration (a package,
   1191      generic, or subprogram renaming declaration).  Such files are also
   1192      called "specs".
   1193 
   1194 `FILE.adb'
   1195      Ada source code file containing a library unit body (a subprogram
   1196      or package body).  Such files are also called "bodies".
   1197 
   1198 `FILE.s'
   1199      Assembler code.
   1200 
   1201 `FILE.S'
   1202 `FILE.sx'
   1203      Assembler code which must be preprocessed.
   1204 
   1205 `OTHER'
   1206      An object file to be fed straight into linking.  Any file name
   1207      with no recognized suffix is treated this way.
   1208 
   1209  You can specify the input language explicitly with the `-x' option:
   1210 
   1211 `-x LANGUAGE'
   1212      Specify explicitly the LANGUAGE for the following input files
   1213      (rather than letting the compiler choose a default based on the
   1214      file name suffix).  This option applies to all following input
   1215      files until the next `-x' option.  Possible values for LANGUAGE
   1216      are:
   1217           c  c-header  c-cpp-output
   1218           c++  c++-header  c++-cpp-output
   1219           objective-c  objective-c-header  objective-c-cpp-output
   1220           objective-c++ objective-c++-header objective-c++-cpp-output
   1221           assembler  assembler-with-cpp
   1222           ada
   1223           f95  f95-cpp-input
   1224           java
   1225           treelang
   1226 
   1227 `-x none'
   1228      Turn off any specification of a language, so that subsequent files
   1229      are handled according to their file name suffixes (as they are if
   1230      `-x' has not been used at all).
   1231 
   1232 `-pass-exit-codes'
   1233      Normally the `gcc' program will exit with the code of 1 if any
   1234      phase of the compiler returns a non-success return code.  If you
   1235      specify `-pass-exit-codes', the `gcc' program will instead return
   1236      with numerically highest error produced by any phase that returned
   1237      an error indication.  The C, C++, and Fortran frontends return 4,
   1238      if an internal compiler error is encountered.
   1239 
   1240  If you only want some of the stages of compilation, you can use `-x'
   1241 (or filename suffixes) to tell `gcc' where to start, and one of the
   1242 options `-c', `-S', or `-E' to say where `gcc' is to stop.  Note that
   1243 some combinations (for example, `-x cpp-output -E') instruct `gcc' to
   1244 do nothing at all.
   1245 
   1246 `-c'
   1247      Compile or assemble the source files, but do not link.  The linking
   1248      stage simply is not done.  The ultimate output is in the form of an
   1249      object file for each source file.
   1250 
   1251      By default, the object file name for a source file is made by
   1252      replacing the suffix `.c', `.i', `.s', etc., with `.o'.
   1253 
   1254      Unrecognized input files, not requiring compilation or assembly,
   1255      are ignored.
   1256 
   1257 `-S'
   1258      Stop after the stage of compilation proper; do not assemble.  The
   1259      output is in the form of an assembler code file for each
   1260      non-assembler input file specified.
   1261 
   1262      By default, the assembler file name for a source file is made by
   1263      replacing the suffix `.c', `.i', etc., with `.s'.
   1264 
   1265      Input files that don't require compilation are ignored.
   1266 
   1267 `-E'
   1268      Stop after the preprocessing stage; do not run the compiler
   1269      proper.  The output is in the form of preprocessed source code,
   1270      which is sent to the standard output.
   1271 
   1272      Input files which don't require preprocessing are ignored.
   1273 
   1274 `-o FILE'
   1275      Place output in file FILE.  This applies regardless to whatever
   1276      sort of output is being produced, whether it be an executable file,
   1277      an object file, an assembler file or preprocessed C code.
   1278 
   1279      If `-o' is not specified, the default is to put an executable file
   1280      in `a.out', the object file for `SOURCE.SUFFIX' in `SOURCE.o', its
   1281      assembler file in `SOURCE.s', a precompiled header file in
   1282      `SOURCE.SUFFIX.gch', and all preprocessed C source on standard
   1283      output.
   1284 
   1285 `-v'
   1286      Print (on standard error output) the commands executed to run the
   1287      stages of compilation.  Also print the version number of the
   1288      compiler driver program and of the preprocessor and the compiler
   1289      proper.
   1290 
   1291 `-###'
   1292      Like `-v' except the commands are not executed and all command
   1293      arguments are quoted.  This is useful for shell scripts to capture
   1294      the driver-generated command lines.
   1295 
   1296 `-pipe'
   1297      Use pipes rather than temporary files for communication between the
   1298      various stages of compilation.  This fails to work on some systems
   1299      where the assembler is unable to read from a pipe; but the GNU
   1300      assembler has no trouble.
   1301 
   1302 `-combine'
   1303      If you are compiling multiple source files, this option tells the
   1304      driver to pass all the source files to the compiler at once (for
   1305      those languages for which the compiler can handle this).  This
   1306      will allow intermodule analysis (IMA) to be performed by the
   1307      compiler.  Currently the only language for which this is supported
   1308      is C.  If you pass source files for multiple languages to the
   1309      driver, using this option, the driver will invoke the compiler(s)
   1310      that support IMA once each, passing each compiler all the source
   1311      files appropriate for it.  For those languages that do not support
   1312      IMA this option will be ignored, and the compiler will be invoked
   1313      once for each source file in that language.  If you use this
   1314      option in conjunction with `-save-temps', the compiler will
   1315      generate multiple pre-processed files (one for each source file),
   1316      but only one (combined) `.o' or `.s' file.
   1317 
   1318 `--help'
   1319      Print (on the standard output) a description of the command line
   1320      options understood by `gcc'.  If the `-v' option is also specified
   1321      then `--help' will also be passed on to the various processes
   1322      invoked by `gcc', so that they can display the command line options
   1323      they accept.  If the `-Wextra' option has also been specified
   1324      (prior to the `--help' option), then command line options which
   1325      have no documentation associated with them will also be displayed.
   1326 
   1327 `--target-help'
   1328      Print (on the standard output) a description of target-specific
   1329      command line options for each tool.  For some targets extra
   1330      target-specific information may also be printed.
   1331 
   1332 `--help=CLASS[,QUALIFIER]'
   1333      Print (on the standard output) a description of the command line
   1334      options understood by the compiler that fit into a specific class.
   1335      The class can be one of `optimizers', `warnings', `target',
   1336      `params', or LANGUAGE:
   1337 
   1338     `optimizers'
   1339           This will display all of the optimization options supported
   1340           by the compiler.
   1341 
   1342     `warnings'
   1343           This will display all of the options controlling warning
   1344           messages produced by the compiler.
   1345 
   1346     `target'
   1347           This will display target-specific options.  Unlike the
   1348           `--target-help' option however, target-specific options of the
   1349           linker and assembler will not be displayed.  This is because
   1350           those tools do not currently support the extended `--help='
   1351           syntax.
   1352 
   1353     `params'
   1354           This will display the values recognized by the `--param'
   1355           option.
   1356 
   1357     LANGUAGE
   1358           This will display the options supported for LANGUAGE, where
   1359           LANGUAGE is the name of one of the languages supported in this
   1360           version of GCC.
   1361 
   1362     `common'
   1363           This will display the options that are common to all
   1364           languages.
   1365 
   1366      It is possible to further refine the output of the `--help='
   1367      option by adding a comma separated list of qualifiers after the
   1368      class.  These can be any from the following list:
   1369 
   1370     `undocumented'
   1371           Display only those options which are undocumented.
   1372 
   1373     `joined'
   1374           Display options which take an argument that appears after an
   1375           equal sign in the same continuous piece of text, such as:
   1376           `--help=target'.
   1377 
   1378     `separate'
   1379           Display options which take an argument that appears as a
   1380           separate word following the original option, such as: `-o
   1381           output-file'.
   1382 
   1383      Thus for example to display all the undocumented target-specific
   1384      switches supported by the compiler the following can be used:
   1385 
   1386           --help=target,undocumented
   1387 
   1388      The sense of a qualifier can be inverted by prefixing it with the
   1389      ^ character, so for example to display all binary warning options
   1390      (i.e., ones that are either on or off and that do not take an
   1391      argument), which have a description the following can be used:
   1392 
   1393           --help=warnings,^joined,^undocumented
   1394 
   1395      A class can also be used as a qualifier, although this usually
   1396      restricts the output by so much that there is nothing to display.
   1397      One case where it does work however is when one of the classes is
   1398      TARGET.  So for example to display all the target-specific
   1399      optimization options the following can be used:
   1400 
   1401           --help=target,optimizers
   1402 
   1403      The `--help=' option can be repeated on the command line.  Each
   1404      successive use will display its requested class of options,
   1405      skipping those that have already been displayed.
   1406 
   1407      If the `-Q' option appears on the command line before the
   1408      `--help=' option, then the descriptive text displayed by `--help='
   1409      is changed.  Instead of describing the displayed options, an
   1410      indication is given as to whether the option is enabled, disabled
   1411      or set to a specific value (assuming that the compiler knows this
   1412      at the point where the `--help=' option is used).
   1413 
   1414      Here is a truncated example from the ARM port of `gcc':
   1415 
   1416             % gcc -Q -mabi=2 --help=target -c
   1417             The following options are target specific:
   1418             -mabi=                                2
   1419             -mabort-on-noreturn                   [disabled]
   1420             -mapcs                                [disabled]
   1421 
   1422      The output is sensitive to the effects of previous command line
   1423      options, so for example it is possible to find out which
   1424      optimizations are enabled at `-O2' by using:
   1425 
   1426           -O2 --help=optimizers
   1427 
   1428      Alternatively you can discover which binary optimizations are
   1429      enabled by `-O3' by using:
   1430 
   1431           gcc -c -Q -O3 --help=optimizers > /tmp/O3-opts
   1432           gcc -c -Q -O2 --help=optimizers > /tmp/O2-opts
   1433           diff /tmp/O2-opts /tmp/O3-opts | grep enabled
   1434 
   1435 `--version'
   1436      Display the version number and copyrights of the invoked GCC.
   1437 
   1438 `@FILE'
   1439      Read command-line options from FILE.  The options read are
   1440      inserted in place of the original @FILE option.  If FILE does not
   1441      exist, or cannot be read, then the option will be treated
   1442      literally, and not removed.
   1443 
   1444      Options in FILE are separated by whitespace.  A whitespace
   1445      character may be included in an option by surrounding the entire
   1446      option in either single or double quotes.  Any character
   1447      (including a backslash) may be included by prefixing the character
   1448      to be included with a backslash.  The FILE may itself contain
   1449      additional @FILE options; any such options will be processed
   1450      recursively.
   1451 
   1452 
   1453 File: gcc.info,  Node: Invoking G++,  Next: C Dialect Options,  Prev: Overall Options,  Up: Invoking GCC
   1454 
   1455 3.3 Compiling C++ Programs
   1456 ==========================
   1457 
   1458 C++ source files conventionally use one of the suffixes `.C', `.cc',
   1459 `.cpp', `.CPP', `.c++', `.cp', or `.cxx'; C++ header files often use
   1460 `.hh', `.hpp', `.H', or (for shared template code) `.tcc'; and
   1461 preprocessed C++ files use the suffix `.ii'.  GCC recognizes files with
   1462 these names and compiles them as C++ programs even if you call the
   1463 compiler the same way as for compiling C programs (usually with the
   1464 name `gcc').
   1465 
   1466  However, the use of `gcc' does not add the C++ library.  `g++' is a
   1467 program that calls GCC and treats `.c', `.h' and `.i' files as C++
   1468 source files instead of C source files unless `-x' is used, and
   1469 automatically specifies linking against the C++ library.  This program
   1470 is also useful when precompiling a C header file with a `.h' extension
   1471 for use in C++ compilations.  On many systems, `g++' is also installed
   1472 with the name `c++'.
   1473 
   1474  When you compile C++ programs, you may specify many of the same
   1475 command-line options that you use for compiling programs in any
   1476 language; or command-line options meaningful for C and related
   1477 languages; or options that are meaningful only for C++ programs.  *Note
   1478 Options Controlling C Dialect: C Dialect Options, for explanations of
   1479 options for languages related to C.  *Note Options Controlling C++
   1480 Dialect: C++ Dialect Options, for explanations of options that are
   1481 meaningful only for C++ programs.
   1482 
   1483 
   1484 File: gcc.info,  Node: C Dialect Options,  Next: C++ Dialect Options,  Prev: Invoking G++,  Up: Invoking GCC
   1485 
   1486 3.4 Options Controlling C Dialect
   1487 =================================
   1488 
   1489 The following options control the dialect of C (or languages derived
   1490 from C, such as C++, Objective-C and Objective-C++) that the compiler
   1491 accepts:
   1492 
   1493 `-ansi'
   1494      In C mode, this is equivalent to `-std=c89'. In C++ mode, it is
   1495      equivalent to `-std=c++98'.
   1496 
   1497      This turns off certain features of GCC that are incompatible with
   1498      ISO C90 (when compiling C code), or of standard C++ (when
   1499      compiling C++ code), such as the `asm' and `typeof' keywords, and
   1500      predefined macros such as `unix' and `vax' that identify the type
   1501      of system you are using.  It also enables the undesirable and
   1502      rarely used ISO trigraph feature.  For the C compiler, it disables
   1503      recognition of C++ style `//' comments as well as the `inline'
   1504      keyword.
   1505 
   1506      The alternate keywords `__asm__', `__extension__', `__inline__'
   1507      and `__typeof__' continue to work despite `-ansi'.  You would not
   1508      want to use them in an ISO C program, of course, but it is useful
   1509      to put them in header files that might be included in compilations
   1510      done with `-ansi'.  Alternate predefined macros such as `__unix__'
   1511      and `__vax__' are also available, with or without `-ansi'.
   1512 
   1513      The `-ansi' option does not cause non-ISO programs to be rejected
   1514      gratuitously.  For that, `-pedantic' is required in addition to
   1515      `-ansi'.  *Note Warning Options::.
   1516 
   1517      The macro `__STRICT_ANSI__' is predefined when the `-ansi' option
   1518      is used.  Some header files may notice this macro and refrain from
   1519      declaring certain functions or defining certain macros that the
   1520      ISO standard doesn't call for; this is to avoid interfering with
   1521      any programs that might use these names for other things.
   1522 
   1523      Functions that would normally be built in but do not have semantics
   1524      defined by ISO C (such as `alloca' and `ffs') are not built-in
   1525      functions when `-ansi' is used.  *Note Other built-in functions
   1526      provided by GCC: Other Builtins, for details of the functions
   1527      affected.
   1528 
   1529 `-std='
   1530      Determine the language standard. *Note Language Standards
   1531      Supported by GCC: Standards, for details of these standard
   1532      versions.  This option is currently only supported when compiling
   1533      C or C++.
   1534 
   1535      The compiler can accept several base standards, such as `c89' or
   1536      `c++98', and GNU dialects of those standards, such as `gnu89' or
   1537      `gnu++98'.  By specifing a base standard, the compiler will accept
   1538      all programs following that standard and those using GNU
   1539      extensions that do not contradict it.  For example, `-std=c89'
   1540      turns off certain features of GCC that are incompatible with ISO
   1541      C90, such as the `asm' and `typeof' keywords, but not other GNU
   1542      extensions that do not have a meaning in ISO C90, such as omitting
   1543      the middle term of a `?:' expression. On the other hand, by
   1544      specifing a GNU dialect of a standard, all features the compiler
   1545      support are enabled, even when those features change the meaning
   1546      of the base standard and some strict-conforming programs may be
   1547      rejected.  The particular standard is used by `-pedantic' to
   1548      identify which features are GNU extensions given that version of
   1549      the standard. For example `-std=gnu89 -pedantic' would warn about
   1550      C++ style `//' comments, while `-std=gnu99 -pedantic' would not.
   1551 
   1552      A value for this option must be provided; possible values are
   1553 
   1554     `c89'
   1555     `iso9899:1990'
   1556           Support all ISO C90 programs (certain GNU extensions that
   1557           conflict with ISO C90 are disabled). Same as `-ansi' for C
   1558           code.
   1559 
   1560     `iso9899:199409'
   1561           ISO C90 as modified in amendment 1.
   1562 
   1563     `c99'
   1564     `c9x'
   1565     `iso9899:1999'
   1566     `iso9899:199x'
   1567           ISO C99.  Note that this standard is not yet fully supported;
   1568           see `http://gcc.gnu.org/gcc-4.3/c99status.html' for more
   1569           information.  The names `c9x' and `iso9899:199x' are
   1570           deprecated.
   1571 
   1572     `gnu89'
   1573           GNU dialect of ISO C90 (including some C99 features). This is
   1574           the default for C code.
   1575 
   1576     `gnu99'
   1577     `gnu9x'
   1578           GNU dialect of ISO C99.  When ISO C99 is fully implemented in
   1579           GCC, this will become the default.  The name `gnu9x' is
   1580           deprecated.
   1581 
   1582     `c++98'
   1583           The 1998 ISO C++ standard plus amendments. Same as `-ansi' for
   1584           C++ code.
   1585 
   1586     `gnu++98'
   1587           GNU dialect of `-std=c++98'.  This is the default for C++
   1588           code.
   1589 
   1590     `c++0x'
   1591           The working draft of the upcoming ISO C++0x standard. This
   1592           option enables experimental features that are likely to be
   1593           included in C++0x. The working draft is constantly changing,
   1594           and any feature that is enabled by this flag may be removed
   1595           from future versions of GCC if it is not part of the C++0x
   1596           standard.
   1597 
   1598     `gnu++0x'
   1599           GNU dialect of `-std=c++0x'. This option enables experimental
   1600           features that may be removed in future versions of GCC.
   1601 
   1602 `-fgnu89-inline'
   1603      The option `-fgnu89-inline' tells GCC to use the traditional GNU
   1604      semantics for `inline' functions when in C99 mode.  *Note An
   1605      Inline Function is As Fast As a Macro: Inline.  This option is
   1606      accepted and ignored by GCC versions 4.1.3 up to but not including
   1607      4.3.  In GCC versions 4.3 and later it changes the behavior of GCC
   1608      in C99 mode.  Using this option is roughly equivalent to adding the
   1609      `gnu_inline' function attribute to all inline functions (*note
   1610      Function Attributes::).
   1611 
   1612      The option `-fno-gnu89-inline' explicitly tells GCC to use the C99
   1613      semantics for `inline' when in C99 or gnu99 mode (i.e., it
   1614      specifies the default behavior).  This option was first supported
   1615      in GCC 4.3.  This option is not supported in C89 or gnu89 mode.
   1616 
   1617      The preprocessor macros `__GNUC_GNU_INLINE__' and
   1618      `__GNUC_STDC_INLINE__' may be used to check which semantics are in
   1619      effect for `inline' functions.  *Note Common Predefined Macros:
   1620      (cpp)Common Predefined Macros.
   1621 
   1622 `-aux-info FILENAME'
   1623      Output to the given filename prototyped declarations for all
   1624      functions declared and/or defined in a translation unit, including
   1625      those in header files.  This option is silently ignored in any
   1626      language other than C.
   1627 
   1628      Besides declarations, the file indicates, in comments, the origin
   1629      of each declaration (source file and line), whether the
   1630      declaration was implicit, prototyped or unprototyped (`I', `N' for
   1631      new or `O' for old, respectively, in the first character after the
   1632      line number and the colon), and whether it came from a declaration
   1633      or a definition (`C' or `F', respectively, in the following
   1634      character).  In the case of function definitions, a K&R-style list
   1635      of arguments followed by their declarations is also provided,
   1636      inside comments, after the declaration.
   1637 
   1638 `-fno-asm'
   1639      Do not recognize `asm', `inline' or `typeof' as a keyword, so that
   1640      code can use these words as identifiers.  You can use the keywords
   1641      `__asm__', `__inline__' and `__typeof__' instead.  `-ansi' implies
   1642      `-fno-asm'.
   1643 
   1644      In C++, this switch only affects the `typeof' keyword, since `asm'
   1645      and `inline' are standard keywords.  You may want to use the
   1646      `-fno-gnu-keywords' flag instead, which has the same effect.  In
   1647      C99 mode (`-std=c99' or `-std=gnu99'), this switch only affects
   1648      the `asm' and `typeof' keywords, since `inline' is a standard
   1649      keyword in ISO C99.
   1650 
   1651 `-fno-builtin'
   1652 `-fno-builtin-FUNCTION'
   1653      Don't recognize built-in functions that do not begin with
   1654      `__builtin_' as prefix.  *Note Other built-in functions provided
   1655      by GCC: Other Builtins, for details of the functions affected,
   1656      including those which are not built-in functions when `-ansi' or
   1657      `-std' options for strict ISO C conformance are used because they
   1658      do not have an ISO standard meaning.
   1659 
   1660      GCC normally generates special code to handle certain built-in
   1661      functions more efficiently; for instance, calls to `alloca' may
   1662      become single instructions that adjust the stack directly, and
   1663      calls to `memcpy' may become inline copy loops.  The resulting
   1664      code is often both smaller and faster, but since the function
   1665      calls no longer appear as such, you cannot set a breakpoint on
   1666      those calls, nor can you change the behavior of the functions by
   1667      linking with a different library.  In addition, when a function is
   1668      recognized as a built-in function, GCC may use information about
   1669      that function to warn about problems with calls to that function,
   1670      or to generate more efficient code, even if the resulting code
   1671      still contains calls to that function.  For example, warnings are
   1672      given with `-Wformat' for bad calls to `printf', when `printf' is
   1673      built in, and `strlen' is known not to modify global memory.
   1674 
   1675      With the `-fno-builtin-FUNCTION' option only the built-in function
   1676      FUNCTION is disabled.  FUNCTION must not begin with `__builtin_'.
   1677      If a function is named this is not built-in in this version of
   1678      GCC, this option is ignored.  There is no corresponding
   1679      `-fbuiltin-FUNCTION' option; if you wish to enable built-in
   1680      functions selectively when using `-fno-builtin' or
   1681      `-ffreestanding', you may define macros such as:
   1682 
   1683           #define abs(n)          __builtin_abs ((n))
   1684           #define strcpy(d, s)    __builtin_strcpy ((d), (s))
   1685 
   1686 `-fhosted'
   1687      Assert that compilation takes place in a hosted environment.  This
   1688      implies `-fbuiltin'.  A hosted environment is one in which the
   1689      entire standard library is available, and in which `main' has a
   1690      return type of `int'.  Examples are nearly everything except a
   1691      kernel.  This is equivalent to `-fno-freestanding'.
   1692 
   1693 `-ffreestanding'
   1694      Assert that compilation takes place in a freestanding environment.
   1695      This implies `-fno-builtin'.  A freestanding environment is one
   1696      in which the standard library may not exist, and program startup
   1697      may not necessarily be at `main'.  The most obvious example is an
   1698      OS kernel.  This is equivalent to `-fno-hosted'.
   1699 
   1700      *Note Language Standards Supported by GCC: Standards, for details
   1701      of freestanding and hosted environments.
   1702 
   1703 `-fopenmp'
   1704      Enable handling of OpenMP directives `#pragma omp' in C/C++ and
   1705      `!$omp' in Fortran.  When `-fopenmp' is specified, the compiler
   1706      generates parallel code according to the OpenMP Application
   1707      Program Interface v2.5 `http://www.openmp.org/'.  This option
   1708      implies `-pthread', and thus is only supported on targets that
   1709      have support for `-pthread'.
   1710 
   1711 `-fms-extensions'
   1712      Accept some non-standard constructs used in Microsoft header files.
   1713 
   1714      Some cases of unnamed fields in structures and unions are only
   1715      accepted with this option.  *Note Unnamed struct/union fields
   1716      within structs/unions: Unnamed Fields, for details.
   1717 
   1718 `-trigraphs'
   1719      Support ISO C trigraphs.  The `-ansi' option (and `-std' options
   1720      for strict ISO C conformance) implies `-trigraphs'.
   1721 
   1722 `-no-integrated-cpp'
   1723      Performs a compilation in two passes: preprocessing and compiling.
   1724      This option allows a user supplied "cc1", "cc1plus", or "cc1obj"
   1725      via the `-B' option.  The user supplied compilation step can then
   1726      add in an additional preprocessing step after normal preprocessing
   1727      but before compiling.  The default is to use the integrated cpp
   1728      (internal cpp)
   1729 
   1730      The semantics of this option will change if "cc1", "cc1plus", and
   1731      "cc1obj" are merged.
   1732 
   1733 `-traditional'
   1734 `-traditional-cpp'
   1735      Formerly, these options caused GCC to attempt to emulate a
   1736      pre-standard C compiler.  They are now only supported with the
   1737      `-E' switch.  The preprocessor continues to support a pre-standard
   1738      mode.  See the GNU CPP manual for details.
   1739 
   1740 `-fcond-mismatch'
   1741      Allow conditional expressions with mismatched types in the second
   1742      and third arguments.  The value of such an expression is void.
   1743      This option is not supported for C++.
   1744 
   1745 `-flax-vector-conversions'
   1746      Allow implicit conversions between vectors with differing numbers
   1747      of elements and/or incompatible element types.  This option should
   1748      not be used for new code.
   1749 
   1750 `-funsigned-char'
   1751      Let the type `char' be unsigned, like `unsigned char'.
   1752 
   1753      Each kind of machine has a default for what `char' should be.  It
   1754      is either like `unsigned char' by default or like `signed char' by
   1755      default.
   1756 
   1757      Ideally, a portable program should always use `signed char' or
   1758      `unsigned char' when it depends on the signedness of an object.
   1759      But many programs have been written to use plain `char' and expect
   1760      it to be signed, or expect it to be unsigned, depending on the
   1761      machines they were written for.  This option, and its inverse, let
   1762      you make such a program work with the opposite default.
   1763 
   1764      The type `char' is always a distinct type from each of `signed
   1765      char' or `unsigned char', even though its behavior is always just
   1766      like one of those two.
   1767 
   1768 `-fsigned-char'
   1769      Let the type `char' be signed, like `signed char'.
   1770 
   1771      Note that this is equivalent to `-fno-unsigned-char', which is the
   1772      negative form of `-funsigned-char'.  Likewise, the option
   1773      `-fno-signed-char' is equivalent to `-funsigned-char'.
   1774 
   1775 `-fsigned-bitfields'
   1776 `-funsigned-bitfields'
   1777 `-fno-signed-bitfields'
   1778 `-fno-unsigned-bitfields'
   1779      These options control whether a bit-field is signed or unsigned,
   1780      when the declaration does not use either `signed' or `unsigned'.
   1781      By default, such a bit-field is signed, because this is
   1782      consistent: the basic integer types such as `int' are signed types.
   1783 
   1784 
   1785 File: gcc.info,  Node: C++ Dialect Options,  Next: Objective-C and Objective-C++ Dialect Options,  Prev: C Dialect Options,  Up: Invoking GCC
   1786 
   1787 3.5 Options Controlling C++ Dialect
   1788 ===================================
   1789 
   1790 This section describes the command-line options that are only meaningful
   1791 for C++ programs; but you can also use most of the GNU compiler options
   1792 regardless of what language your program is in.  For example, you might
   1793 compile a file `firstClass.C' like this:
   1794 
   1795      g++ -g -frepo -O -c firstClass.C
   1796 
   1797 In this example, only `-frepo' is an option meant only for C++
   1798 programs; you can use the other options with any language supported by
   1799 GCC.
   1800 
   1801  Here is a list of options that are _only_ for compiling C++ programs:
   1802 
   1803 `-fabi-version=N'
   1804      Use version N of the C++ ABI.  Version 2 is the version of the C++
   1805      ABI that first appeared in G++ 3.4.  Version 1 is the version of
   1806      the C++ ABI that first appeared in G++ 3.2.  Version 0 will always
   1807      be the version that conforms most closely to the C++ ABI
   1808      specification.  Therefore, the ABI obtained using version 0 will
   1809      change as ABI bugs are fixed.
   1810 
   1811      The default is version 2.
   1812 
   1813 `-fno-access-control'
   1814      Turn off all access checking.  This switch is mainly useful for
   1815      working around bugs in the access control code.
   1816 
   1817 `-fcheck-new'
   1818      Check that the pointer returned by `operator new' is non-null
   1819      before attempting to modify the storage allocated.  This check is
   1820      normally unnecessary because the C++ standard specifies that
   1821      `operator new' will only return `0' if it is declared `throw()',
   1822      in which case the compiler will always check the return value even
   1823      without this option.  In all other cases, when `operator new' has
   1824      a non-empty exception specification, memory exhaustion is
   1825      signalled by throwing `std::bad_alloc'.  See also `new (nothrow)'.
   1826 
   1827 `-fconserve-space'
   1828      Put uninitialized or runtime-initialized global variables into the
   1829      common segment, as C does.  This saves space in the executable at
   1830      the cost of not diagnosing duplicate definitions.  If you compile
   1831      with this flag and your program mysteriously crashes after
   1832      `main()' has completed, you may have an object that is being
   1833      destroyed twice because two definitions were merged.
   1834 
   1835      This option is no longer useful on most targets, now that support
   1836      has been added for putting variables into BSS without making them
   1837      common.
   1838 
   1839 `-ffriend-injection'
   1840      Inject friend functions into the enclosing namespace, so that they
   1841      are visible outside the scope of the class in which they are
   1842      declared.  Friend functions were documented to work this way in
   1843      the old Annotated C++ Reference Manual, and versions of G++ before
   1844      4.1 always worked that way.  However, in ISO C++ a friend function
   1845      which is not declared in an enclosing scope can only be found
   1846      using argument dependent lookup.  This option causes friends to be
   1847      injected as they were in earlier releases.
   1848 
   1849      This option is for compatibility, and may be removed in a future
   1850      release of G++.
   1851 
   1852 `-fno-elide-constructors'
   1853      The C++ standard allows an implementation to omit creating a
   1854      temporary which is only used to initialize another object of the
   1855      same type.  Specifying this option disables that optimization, and
   1856      forces G++ to call the copy constructor in all cases.
   1857 
   1858 `-fno-enforce-eh-specs'
   1859      Don't generate code to check for violation of exception
   1860      specifications at runtime.  This option violates the C++ standard,
   1861      but may be useful for reducing code size in production builds,
   1862      much like defining `NDEBUG'.  This does not give user code
   1863      permission to throw exceptions in violation of the exception
   1864      specifications; the compiler will still optimize based on the
   1865      specifications, so throwing an unexpected exception will result in
   1866      undefined behavior.
   1867 
   1868 `-ffor-scope'
   1869 `-fno-for-scope'
   1870      If `-ffor-scope' is specified, the scope of variables declared in
   1871      a for-init-statement is limited to the `for' loop itself, as
   1872      specified by the C++ standard.  If `-fno-for-scope' is specified,
   1873      the scope of variables declared in a for-init-statement extends to
   1874      the end of the enclosing scope, as was the case in old versions of
   1875      G++, and other (traditional) implementations of C++.
   1876 
   1877      The default if neither flag is given to follow the standard, but
   1878      to allow and give a warning for old-style code that would
   1879      otherwise be invalid, or have different behavior.
   1880 
   1881 `-fno-gnu-keywords'
   1882      Do not recognize `typeof' as a keyword, so that code can use this
   1883      word as an identifier.  You can use the keyword `__typeof__'
   1884      instead.  `-ansi' implies `-fno-gnu-keywords'.
   1885 
   1886 `-fno-implicit-templates'
   1887      Never emit code for non-inline templates which are instantiated
   1888      implicitly (i.e. by use); only emit code for explicit
   1889      instantiations.  *Note Template Instantiation::, for more
   1890      information.
   1891 
   1892 `-fno-implicit-inline-templates'
   1893      Don't emit code for implicit instantiations of inline templates,
   1894      either.  The default is to handle inlines differently so that
   1895      compiles with and without optimization will need the same set of
   1896      explicit instantiations.
   1897 
   1898 `-fno-implement-inlines'
   1899      To save space, do not emit out-of-line copies of inline functions
   1900      controlled by `#pragma implementation'.  This will cause linker
   1901      errors if these functions are not inlined everywhere they are
   1902      called.
   1903 
   1904 `-fms-extensions'
   1905      Disable pedantic warnings about constructs used in MFC, such as
   1906      implicit int and getting a pointer to member function via
   1907      non-standard syntax.
   1908 
   1909 `-fno-nonansi-builtins'
   1910      Disable built-in declarations of functions that are not mandated by
   1911      ANSI/ISO C.  These include `ffs', `alloca', `_exit', `index',
   1912      `bzero', `conjf', and other related functions.
   1913 
   1914 `-fno-operator-names'
   1915      Do not treat the operator name keywords `and', `bitand', `bitor',
   1916      `compl', `not', `or' and `xor' as synonyms as keywords.
   1917 
   1918 `-fno-optional-diags'
   1919      Disable diagnostics that the standard says a compiler does not
   1920      need to issue.  Currently, the only such diagnostic issued by G++
   1921      is the one for a name having multiple meanings within a class.
   1922 
   1923 `-fpermissive'
   1924      Downgrade some diagnostics about nonconformant code from errors to
   1925      warnings.  Thus, using `-fpermissive' will allow some
   1926      nonconforming code to compile.
   1927 
   1928 `-frepo'
   1929      Enable automatic template instantiation at link time.  This option
   1930      also implies `-fno-implicit-templates'.  *Note Template
   1931      Instantiation::, for more information.
   1932 
   1933 `-fno-rtti'
   1934      Disable generation of information about every class with virtual
   1935      functions for use by the C++ runtime type identification features
   1936      (`dynamic_cast' and `typeid').  If you don't use those parts of
   1937      the language, you can save some space by using this flag.  Note
   1938      that exception handling uses the same information, but it will
   1939      generate it as needed. The `dynamic_cast' operator can still be
   1940      used for casts that do not require runtime type information, i.e.
   1941      casts to `void *' or to unambiguous base classes.
   1942 
   1943 `-fstats'
   1944      Emit statistics about front-end processing at the end of the
   1945      compilation.  This information is generally only useful to the G++
   1946      development team.
   1947 
   1948 `-ftemplate-depth-N'
   1949      Set the maximum instantiation depth for template classes to N.  A
   1950      limit on the template instantiation depth is needed to detect
   1951      endless recursions during template class instantiation.  ANSI/ISO
   1952      C++ conforming programs must not rely on a maximum depth greater
   1953      than 17.
   1954 
   1955 `-fno-threadsafe-statics'
   1956      Do not emit the extra code to use the routines specified in the C++
   1957      ABI for thread-safe initialization of local statics.  You can use
   1958      this option to reduce code size slightly in code that doesn't need
   1959      to be thread-safe.
   1960 
   1961 `-fuse-cxa-atexit'
   1962      Register destructors for objects with static storage duration with
   1963      the `__cxa_atexit' function rather than the `atexit' function.
   1964      This option is required for fully standards-compliant handling of
   1965      static destructors, but will only work if your C library supports
   1966      `__cxa_atexit'.
   1967 
   1968 `-fno-use-cxa-get-exception-ptr'
   1969      Don't use the `__cxa_get_exception_ptr' runtime routine.  This
   1970      will cause `std::uncaught_exception' to be incorrect, but is
   1971      necessary if the runtime routine is not available.
   1972 
   1973 `-fvisibility-inlines-hidden'
   1974      This switch declares that the user does not attempt to compare
   1975      pointers to inline methods where the addresses of the two functions
   1976      were taken in different shared objects.
   1977 
   1978      The effect of this is that GCC may, effectively, mark inline
   1979      methods with `__attribute__ ((visibility ("hidden")))' so that
   1980      they do not appear in the export table of a DSO and do not require
   1981      a PLT indirection when used within the DSO.  Enabling this option
   1982      can have a dramatic effect on load and link times of a DSO as it
   1983      massively reduces the size of the dynamic export table when the
   1984      library makes heavy use of templates.
   1985 
   1986      The behavior of this switch is not quite the same as marking the
   1987      methods as hidden directly, because it does not affect static
   1988      variables local to the function or cause the compiler to deduce
   1989      that the function is defined in only one shared object.
   1990 
   1991      You may mark a method as having a visibility explicitly to negate
   1992      the effect of the switch for that method.  For example, if you do
   1993      want to compare pointers to a particular inline method, you might
   1994      mark it as having default visibility.  Marking the enclosing class
   1995      with explicit visibility will have no effect.
   1996 
   1997      Explicitly instantiated inline methods are unaffected by this
   1998      option as their linkage might otherwise cross a shared library
   1999      boundary.  *Note Template Instantiation::.
   2000 
   2001 `-fvisibility-ms-compat'
   2002      This flag attempts to use visibility settings to make GCC's C++
   2003      linkage model compatible with that of Microsoft Visual Studio.
   2004 
   2005      The flag makes these changes to GCC's linkage model:
   2006 
   2007        1. It sets the default visibility to `hidden', like
   2008           `-fvisibility=hidden'.
   2009 
   2010        2. Types, but not their members, are not hidden by default.
   2011 
   2012        3. The One Definition Rule is relaxed for types without explicit
   2013           visibility specifications which are defined in more than one
   2014           different shared object: those declarations are permitted if
   2015           they would have been permitted when this option was not used.
   2016 
   2017      In new code it is better to use `-fvisibility=hidden' and export
   2018      those classes which are intended to be externally visible.
   2019      Unfortunately it is possible for code to rely, perhaps
   2020      accidentally, on the Visual Studio behavior.
   2021 
   2022      Among the consequences of these changes are that static data
   2023      members of the same type with the same name but defined in
   2024      different shared objects will be different, so changing one will
   2025      not change the other; and that pointers to function members
   2026      defined in different shared objects may not compare equal.  When
   2027      this flag is given, it is a violation of the ODR to define types
   2028      with the same name differently.
   2029 
   2030 `-fno-weak'
   2031      Do not use weak symbol support, even if it is provided by the
   2032      linker.  By default, G++ will use weak symbols if they are
   2033      available.  This option exists only for testing, and should not be
   2034      used by end-users; it will result in inferior code and has no
   2035      benefits.  This option may be removed in a future release of G++.
   2036 
   2037 `-nostdinc++'
   2038      Do not search for header files in the standard directories
   2039      specific to C++, but do still search the other standard
   2040      directories.  (This option is used when building the C++ library.)
   2041 
   2042  In addition, these optimization, warning, and code generation options
   2043 have meanings only for C++ programs:
   2044 
   2045 `-fno-default-inline'
   2046      Do not assume `inline' for functions defined inside a class scope.
   2047      *Note Options That Control Optimization: Optimize Options.  Note
   2048      that these functions will have linkage like inline functions; they
   2049      just won't be inlined by default.
   2050 
   2051 `-Wabi (C++ and Objective-C++ only)'
   2052      Warn when G++ generates code that is probably not compatible with
   2053      the vendor-neutral C++ ABI.  Although an effort has been made to
   2054      warn about all such cases, there are probably some cases that are
   2055      not warned about, even though G++ is generating incompatible code.
   2056      There may also be cases where warnings are emitted even though
   2057      the code that is generated will be compatible.
   2058 
   2059      You should rewrite your code to avoid these warnings if you are
   2060      concerned about the fact that code generated by G++ may not be
   2061      binary compatible with code generated by other compilers.
   2062 
   2063      The known incompatibilities at this point include:
   2064 
   2065         * Incorrect handling of tail-padding for bit-fields.  G++ may
   2066           attempt to pack data into the same byte as a base class.  For
   2067           example:
   2068 
   2069                struct A { virtual void f(); int f1 : 1; };
   2070                struct B : public A { int f2 : 1; };
   2071 
   2072           In this case, G++ will place `B::f2' into the same byte
   2073           as`A::f1'; other compilers will not.  You can avoid this
   2074           problem by explicitly padding `A' so that its size is a
   2075           multiple of the byte size on your platform; that will cause
   2076           G++ and other compilers to layout `B' identically.
   2077 
   2078         * Incorrect handling of tail-padding for virtual bases.  G++
   2079           does not use tail padding when laying out virtual bases.  For
   2080           example:
   2081 
   2082                struct A { virtual void f(); char c1; };
   2083                struct B { B(); char c2; };
   2084                struct C : public A, public virtual B {};
   2085 
   2086           In this case, G++ will not place `B' into the tail-padding for
   2087           `A'; other compilers will.  You can avoid this problem by
   2088           explicitly padding `A' so that its size is a multiple of its
   2089           alignment (ignoring virtual base classes); that will cause
   2090           G++ and other compilers to layout `C' identically.
   2091 
   2092         * Incorrect handling of bit-fields with declared widths greater
   2093           than that of their underlying types, when the bit-fields
   2094           appear in a union.  For example:
   2095 
   2096                union U { int i : 4096; };
   2097 
   2098           Assuming that an `int' does not have 4096 bits, G++ will make
   2099           the union too small by the number of bits in an `int'.
   2100 
   2101         * Empty classes can be placed at incorrect offsets.  For
   2102           example:
   2103 
   2104                struct A {};
   2105 
   2106                struct B {
   2107                  A a;
   2108                  virtual void f ();
   2109                };
   2110 
   2111                struct C : public B, public A {};
   2112 
   2113           G++ will place the `A' base class of `C' at a nonzero offset;
   2114           it should be placed at offset zero.  G++ mistakenly believes
   2115           that the `A' data member of `B' is already at offset zero.
   2116 
   2117         * Names of template functions whose types involve `typename' or
   2118           template template parameters can be mangled incorrectly.
   2119 
   2120                template <typename Q>
   2121                void f(typename Q::X) {}
   2122 
   2123                template <template <typename> class Q>
   2124                void f(typename Q<int>::X) {}
   2125 
   2126           Instantiations of these templates may be mangled incorrectly.
   2127 
   2128 
   2129 `-Wctor-dtor-privacy (C++ and Objective-C++ only)'
   2130      Warn when a class seems unusable because all the constructors or
   2131      destructors in that class are private, and it has neither friends
   2132      nor public static member functions.
   2133 
   2134 `-Wnon-virtual-dtor (C++ and Objective-C++ only)'
   2135      Warn when a class has virtual functions and accessible non-virtual
   2136      destructor, in which case it would be possible but unsafe to delete
   2137      an instance of a derived class through a pointer to the base class.
   2138      This warning is also enabled if -Weffc++ is specified.
   2139 
   2140 `-Wreorder (C++ and Objective-C++ only)'
   2141      Warn when the order of member initializers given in the code does
   2142      not match the order in which they must be executed.  For instance:
   2143 
   2144           struct A {
   2145             int i;
   2146             int j;
   2147             A(): j (0), i (1) { }
   2148           };
   2149 
   2150      The compiler will rearrange the member initializers for `i' and
   2151      `j' to match the declaration order of the members, emitting a
   2152      warning to that effect.  This warning is enabled by `-Wall'.
   2153 
   2154  The following `-W...' options are not affected by `-Wall'.
   2155 
   2156 `-Weffc++ (C++ and Objective-C++ only)'
   2157      Warn about violations of the following style guidelines from Scott
   2158      Meyers' `Effective C++' book:
   2159 
   2160         * Item 11:  Define a copy constructor and an assignment
   2161           operator for classes with dynamically allocated memory.
   2162 
   2163         * Item 12:  Prefer initialization to assignment in constructors.
   2164 
   2165         * Item 14:  Make destructors virtual in base classes.
   2166 
   2167         * Item 15:  Have `operator=' return a reference to `*this'.
   2168 
   2169         * Item 23:  Don't try to return a reference when you must
   2170           return an object.
   2171 
   2172 
   2173      Also warn about violations of the following style guidelines from
   2174      Scott Meyers' `More Effective C++' book:
   2175 
   2176         * Item 6:  Distinguish between prefix and postfix forms of
   2177           increment and decrement operators.
   2178 
   2179         * Item 7:  Never overload `&&', `||', or `,'.
   2180 
   2181 
   2182      When selecting this option, be aware that the standard library
   2183      headers do not obey all of these guidelines; use `grep -v' to
   2184      filter out those warnings.
   2185 
   2186 `-Wno-deprecated (C++ and Objective-C++ only)'
   2187      Do not warn about usage of deprecated features.  *Note Deprecated
   2188      Features::.
   2189 
   2190 `-Wstrict-null-sentinel (C++ and Objective-C++ only)'
   2191      Warn also about the use of an uncasted `NULL' as sentinel.  When
   2192      compiling only with GCC this is a valid sentinel, as `NULL' is
   2193      defined to `__null'.  Although it is a null pointer constant not a
   2194      null pointer, it is guaranteed to of the same size as a pointer.
   2195      But this use is not portable across different compilers.
   2196 
   2197 `-Wno-non-template-friend (C++ and Objective-C++ only)'
   2198      Disable warnings when non-templatized friend functions are declared
   2199      within a template.  Since the advent of explicit template
   2200      specification support in G++, if the name of the friend is an
   2201      unqualified-id (i.e., `friend foo(int)'), the C++ language
   2202      specification demands that the friend declare or define an
   2203      ordinary, nontemplate function.  (Section 14.5.3).  Before G++
   2204      implemented explicit specification, unqualified-ids could be
   2205      interpreted as a particular specialization of a templatized
   2206      function.  Because this non-conforming behavior is no longer the
   2207      default behavior for G++, `-Wnon-template-friend' allows the
   2208      compiler to check existing code for potential trouble spots and is
   2209      on by default.  This new compiler behavior can be turned off with
   2210      `-Wno-non-template-friend' which keeps the conformant compiler code
   2211      but disables the helpful warning.
   2212 
   2213 `-Wold-style-cast (C++ and Objective-C++ only)'
   2214      Warn if an old-style (C-style) cast to a non-void type is used
   2215      within a C++ program.  The new-style casts (`dynamic_cast',
   2216      `static_cast', `reinterpret_cast', and `const_cast') are less
   2217      vulnerable to unintended effects and much easier to search for.
   2218 
   2219 `-Woverloaded-virtual (C++ and Objective-C++ only)'
   2220      Warn when a function declaration hides virtual functions from a
   2221      base class.  For example, in:
   2222 
   2223           struct A {
   2224             virtual void f();
   2225           };
   2226 
   2227           struct B: public A {
   2228             void f(int);
   2229           };
   2230 
   2231      the `A' class version of `f' is hidden in `B', and code like:
   2232 
   2233           B* b;
   2234           b->f();
   2235 
   2236      will fail to compile.
   2237 
   2238 `-Wno-pmf-conversions (C++ and Objective-C++ only)'
   2239      Disable the diagnostic for converting a bound pointer to member
   2240      function to a plain pointer.
   2241 
   2242 `-Wsign-promo (C++ and Objective-C++ only)'
   2243      Warn when overload resolution chooses a promotion from unsigned or
   2244      enumerated type to a signed type, over a conversion to an unsigned
   2245      type of the same size.  Previous versions of G++ would try to
   2246      preserve unsignedness, but the standard mandates the current
   2247      behavior.
   2248 
   2249           struct A {
   2250             operator int ();
   2251             A& operator = (int);
   2252           };
   2253 
   2254           main ()
   2255           {
   2256             A a,b;
   2257             a = b;
   2258           }
   2259 
   2260      In this example, G++ will synthesize a default `A& operator =
   2261      (const A&);', while cfront will use the user-defined `operator ='.
   2262 
   2263 
   2264 File: gcc.info,  Node: Objective-C and Objective-C++ Dialect Options,  Next: Language Independent Options,  Prev: C++ Dialect Options,  Up: Invoking GCC
   2265 
   2266 3.6 Options Controlling Objective-C and Objective-C++ Dialects
   2267 ==============================================================
   2268 
   2269 (NOTE: This manual does not describe the Objective-C and Objective-C++
   2270 languages themselves.  See *Note Language Standards Supported by GCC:
   2271 Standards, for references.)
   2272 
   2273  This section describes the command-line options that are only
   2274 meaningful for Objective-C and Objective-C++ programs, but you can also
   2275 use most of the language-independent GNU compiler options.  For
   2276 example, you might compile a file `some_class.m' like this:
   2277 
   2278      gcc -g -fgnu-runtime -O -c some_class.m
   2279 
   2280 In this example, `-fgnu-runtime' is an option meant only for
   2281 Objective-C and Objective-C++ programs; you can use the other options
   2282 with any language supported by GCC.
   2283 
   2284  Note that since Objective-C is an extension of the C language,
   2285 Objective-C compilations may also use options specific to the C
   2286 front-end (e.g., `-Wtraditional').  Similarly, Objective-C++
   2287 compilations may use C++-specific options (e.g., `-Wabi').
   2288 
   2289  Here is a list of options that are _only_ for compiling Objective-C
   2290 and Objective-C++ programs:
   2291 
   2292 `-fconstant-string-class=CLASS-NAME'
   2293      Use CLASS-NAME as the name of the class to instantiate for each
   2294      literal string specified with the syntax `@"..."'.  The default
   2295      class name is `NXConstantString' if the GNU runtime is being used,
   2296      and `NSConstantString' if the NeXT runtime is being used (see
   2297      below).  The `-fconstant-cfstrings' option, if also present, will
   2298      override the `-fconstant-string-class' setting and cause `@"..."'
   2299      literals to be laid out as constant CoreFoundation strings.
   2300 
   2301 `-fgnu-runtime'
   2302      Generate object code compatible with the standard GNU Objective-C
   2303      runtime.  This is the default for most types of systems.
   2304 
   2305 `-fnext-runtime'
   2306      Generate output compatible with the NeXT runtime.  This is the
   2307      default for NeXT-based systems, including Darwin and Mac OS X.
   2308      The macro `__NEXT_RUNTIME__' is predefined if (and only if) this
   2309      option is used.
   2310 
   2311 `-fno-nil-receivers'
   2312      Assume that all Objective-C message dispatches (e.g., `[receiver
   2313      message:arg]') in this translation unit ensure that the receiver
   2314      is not `nil'.  This allows for more efficient entry points in the
   2315      runtime to be used.  Currently, this option is only available in
   2316      conjunction with the NeXT runtime on Mac OS X 10.3 and later.
   2317 
   2318 `-fobjc-call-cxx-cdtors'
   2319      For each Objective-C class, check if any of its instance variables
   2320      is a C++ object with a non-trivial default constructor.  If so,
   2321      synthesize a special `- (id) .cxx_construct' instance method that
   2322      will run non-trivial default constructors on any such instance
   2323      variables, in order, and then return `self'.  Similarly, check if
   2324      any instance variable is a C++ object with a non-trivial
   2325      destructor, and if so, synthesize a special `- (void)
   2326      .cxx_destruct' method that will run all such default destructors,
   2327      in reverse order.
   2328 
   2329      The `- (id) .cxx_construct' and/or `- (void) .cxx_destruct' methods
   2330      thusly generated will only operate on instance variables declared
   2331      in the current Objective-C class, and not those inherited from
   2332      superclasses.  It is the responsibility of the Objective-C runtime
   2333      to invoke all such methods in an object's inheritance hierarchy.
   2334      The `- (id) .cxx_construct' methods will be invoked by the runtime
   2335      immediately after a new object instance is allocated; the `-
   2336      (void) .cxx_destruct' methods will be invoked immediately before
   2337      the runtime deallocates an object instance.
   2338 
   2339      As of this writing, only the NeXT runtime on Mac OS X 10.4 and
   2340      later has support for invoking the `- (id) .cxx_construct' and `-
   2341      (void) .cxx_destruct' methods.
   2342 
   2343 `-fobjc-direct-dispatch'
   2344      Allow fast jumps to the message dispatcher.  On Darwin this is
   2345      accomplished via the comm page.
   2346 
   2347 `-fobjc-exceptions'
   2348      Enable syntactic support for structured exception handling in
   2349      Objective-C, similar to what is offered by C++ and Java.  This
   2350      option is unavailable in conjunction with the NeXT runtime on Mac
   2351      OS X 10.2 and earlier.
   2352 
   2353             @try {
   2354               ...
   2355                  @throw expr;
   2356               ...
   2357             }
   2358             @catch (AnObjCClass *exc) {
   2359               ...
   2360                 @throw expr;
   2361               ...
   2362                 @throw;
   2363               ...
   2364             }
   2365             @catch (AnotherClass *exc) {
   2366               ...
   2367             }
   2368             @catch (id allOthers) {
   2369               ...
   2370             }
   2371             @finally {
   2372               ...
   2373                 @throw expr;
   2374               ...
   2375             }
   2376 
   2377      The `@throw' statement may appear anywhere in an Objective-C or
   2378      Objective-C++ program; when used inside of a `@catch' block, the
   2379      `@throw' may appear without an argument (as shown above), in which
   2380      case the object caught by the `@catch' will be rethrown.
   2381 
   2382      Note that only (pointers to) Objective-C objects may be thrown and
   2383      caught using this scheme.  When an object is thrown, it will be
   2384      caught by the nearest `@catch' clause capable of handling objects
   2385      of that type, analogously to how `catch' blocks work in C++ and
   2386      Java.  A `@catch(id ...)' clause (as shown above) may also be
   2387      provided to catch any and all Objective-C exceptions not caught by
   2388      previous `@catch' clauses (if any).
   2389 
   2390      The `@finally' clause, if present, will be executed upon exit from
   2391      the immediately preceding `@try ... @catch' section.  This will
   2392      happen regardless of whether any exceptions are thrown, caught or
   2393      rethrown inside the `@try ... @catch' section, analogously to the
   2394      behavior of the `finally' clause in Java.
   2395 
   2396      There are several caveats to using the new exception mechanism:
   2397 
   2398         * Although currently designed to be binary compatible with
   2399           `NS_HANDLER'-style idioms provided by the `NSException'
   2400           class, the new exceptions can only be used on Mac OS X 10.3
   2401           (Panther) and later systems, due to additional functionality
   2402           needed in the (NeXT) Objective-C runtime.
   2403 
   2404         * As mentioned above, the new exceptions do not support handling
   2405           types other than Objective-C objects.   Furthermore, when
   2406           used from Objective-C++, the Objective-C exception model does
   2407           not interoperate with C++ exceptions at this time.  This
   2408           means you cannot `@throw' an exception from Objective-C and
   2409           `catch' it in C++, or vice versa (i.e., `throw ... @catch').
   2410 
   2411      The `-fobjc-exceptions' switch also enables the use of
   2412      synchronization blocks for thread-safe execution:
   2413 
   2414             @synchronized (ObjCClass *guard) {
   2415               ...
   2416             }
   2417 
   2418      Upon entering the `@synchronized' block, a thread of execution
   2419      shall first check whether a lock has been placed on the
   2420      corresponding `guard' object by another thread.  If it has, the
   2421      current thread shall wait until the other thread relinquishes its
   2422      lock.  Once `guard' becomes available, the current thread will
   2423      place its own lock on it, execute the code contained in the
   2424      `@synchronized' block, and finally relinquish the lock (thereby
   2425      making `guard' available to other threads).
   2426 
   2427      Unlike Java, Objective-C does not allow for entire methods to be
   2428      marked `@synchronized'.  Note that throwing exceptions out of
   2429      `@synchronized' blocks is allowed, and will cause the guarding
   2430      object to be unlocked properly.
   2431 
   2432 `-fobjc-gc'
   2433      Enable garbage collection (GC) in Objective-C and Objective-C++
   2434      programs.
   2435 
   2436 `-freplace-objc-classes'
   2437      Emit a special marker instructing `ld(1)' not to statically link in
   2438      the resulting object file, and allow `dyld(1)' to load it in at
   2439      run time instead.  This is used in conjunction with the
   2440      Fix-and-Continue debugging mode, where the object file in question
   2441      may be recompiled and dynamically reloaded in the course of
   2442      program execution, without the need to restart the program itself.
   2443      Currently, Fix-and-Continue functionality is only available in
   2444      conjunction with the NeXT runtime on Mac OS X 10.3 and later.
   2445 
   2446 `-fzero-link'
   2447      When compiling for the NeXT runtime, the compiler ordinarily
   2448      replaces calls to `objc_getClass("...")' (when the name of the
   2449      class is known at compile time) with static class references that
   2450      get initialized at load time, which improves run-time performance.
   2451      Specifying the `-fzero-link' flag suppresses this behavior and
   2452      causes calls to `objc_getClass("...")' to be retained.  This is
   2453      useful in Zero-Link debugging mode, since it allows for individual
   2454      class implementations to be modified during program execution.
   2455 
   2456 `-gen-decls'
   2457      Dump interface declarations for all classes seen in the source
   2458      file to a file named `SOURCENAME.decl'.
   2459 
   2460 `-Wassign-intercept (Objective-C and Objective-C++ only)'
   2461      Warn whenever an Objective-C assignment is being intercepted by the
   2462      garbage collector.
   2463 
   2464 `-Wno-protocol (Objective-C and Objective-C++ only)'
   2465      If a class is declared to implement a protocol, a warning is
   2466      issued for every method in the protocol that is not implemented by
   2467      the class.  The default behavior is to issue a warning for every
   2468      method not explicitly implemented in the class, even if a method
   2469      implementation is inherited from the superclass.  If you use the
   2470      `-Wno-protocol' option, then methods inherited from the superclass
   2471      are considered to be implemented, and no warning is issued for
   2472      them.
   2473 
   2474 `-Wselector (Objective-C and Objective-C++ only)'
   2475      Warn if multiple methods of different types for the same selector
   2476      are found during compilation.  The check is performed on the list
   2477      of methods in the final stage of compilation.  Additionally, a
   2478      check is performed for each selector appearing in a
   2479      `@selector(...)'  expression, and a corresponding method for that
   2480      selector has been found during compilation.  Because these checks
   2481      scan the method table only at the end of compilation, these
   2482      warnings are not produced if the final stage of compilation is not
   2483      reached, for example because an error is found during compilation,
   2484      or because the `-fsyntax-only' option is being used.
   2485 
   2486 `-Wstrict-selector-match (Objective-C and Objective-C++ only)'
   2487      Warn if multiple methods with differing argument and/or return
   2488      types are found for a given selector when attempting to send a
   2489      message using this selector to a receiver of type `id' or `Class'.
   2490      When this flag is off (which is the default behavior), the
   2491      compiler will omit such warnings if any differences found are
   2492      confined to types which share the same size and alignment.
   2493 
   2494 `-Wundeclared-selector (Objective-C and Objective-C++ only)'
   2495      Warn if a `@selector(...)' expression referring to an undeclared
   2496      selector is found.  A selector is considered undeclared if no
   2497      method with that name has been declared before the
   2498      `@selector(...)' expression, either explicitly in an `@interface'
   2499      or `@protocol' declaration, or implicitly in an `@implementation'
   2500      section.  This option always performs its checks as soon as a
   2501      `@selector(...)' expression is found, while `-Wselector' only
   2502      performs its checks in the final stage of compilation.  This also
   2503      enforces the coding style convention that methods and selectors
   2504      must be declared before being used.
   2505 
   2506 `-print-objc-runtime-info'
   2507      Generate C header describing the largest structure that is passed
   2508      by value, if any.
   2509 
   2510 
   2511 
   2512 File: gcc.info,  Node: Language Independent Options,  Next: Warning Options,  Prev: Objective-C and Objective-C++ Dialect Options,  Up: Invoking GCC
   2513 
   2514 3.7 Options to Control Diagnostic Messages Formatting
   2515 =====================================================
   2516 
   2517 Traditionally, diagnostic messages have been formatted irrespective of
   2518 the output device's aspect (e.g. its width, ...).  The options described
   2519 below can be used to control the diagnostic messages formatting
   2520 algorithm, e.g. how many characters per line, how often source location
   2521 information should be reported.  Right now, only the C++ front end can
   2522 honor these options.  However it is expected, in the near future, that
   2523 the remaining front ends would be able to digest them correctly.
   2524 
   2525 `-fmessage-length=N'
   2526      Try to format error messages so that they fit on lines of about N
   2527      characters.  The default is 72 characters for `g++' and 0 for the
   2528      rest of the front ends supported by GCC.  If N is zero, then no
   2529      line-wrapping will be done; each error message will appear on a
   2530      single line.
   2531 
   2532 `-fdiagnostics-show-location=once'
   2533      Only meaningful in line-wrapping mode.  Instructs the diagnostic
   2534      messages reporter to emit _once_ source location information; that
   2535      is, in case the message is too long to fit on a single physical
   2536      line and has to be wrapped, the source location won't be emitted
   2537      (as prefix) again, over and over, in subsequent continuation
   2538      lines.  This is the default behavior.
   2539 
   2540 `-fdiagnostics-show-location=every-line'
   2541      Only meaningful in line-wrapping mode.  Instructs the diagnostic
   2542      messages reporter to emit the same source location information (as
   2543      prefix) for physical lines that result from the process of breaking
   2544      a message which is too long to fit on a single line.
   2545 
   2546 `-fdiagnostics-show-option'
   2547      This option instructs the diagnostic machinery to add text to each
   2548      diagnostic emitted, which indicates which command line option
   2549      directly controls that diagnostic, when such an option is known to
   2550      the diagnostic machinery.
   2551 
   2552 `-Wcoverage-mismatch'
   2553      Warn if feedback profiles do not match when using the
   2554      `-fprofile-use' option.  If a source file was changed between
   2555      `-fprofile-gen' and `-fprofile-use', the files with the profile
   2556      feedback can fail to match the source file and GCC can not use the
   2557      profile feedback information.  By default, GCC emits an error
   2558      message in this case.  The option `-Wcoverage-mismatch' emits a
   2559      warning instead of an error.  GCC does not use appropriate
   2560      feedback profiles, so using this option can result in poorly
   2561      optimized code.  This option is useful only in the case of very
   2562      minor changes such as bug fixes to an existing code-base.
   2563 
   2564 
   2565 
   2566 File: gcc.info,  Node: Warning Options,  Next: Debugging Options,  Prev: Language Independent Options,  Up: Invoking GCC
   2567 
   2568 3.8 Options to Request or Suppress Warnings
   2569 ===========================================
   2570 
   2571 Warnings are diagnostic messages that report constructions which are
   2572 not inherently erroneous but which are risky or suggest there may have
   2573 been an error.
   2574 
   2575  The following language-independent options do not enable specific
   2576 warnings but control the kinds of diagnostics produced by GCC.
   2577 
   2578 `-fsyntax-only'
   2579      Check the code for syntax errors, but don't do anything beyond
   2580      that.
   2581 
   2582 `-w'
   2583      Inhibit all warning messages.
   2584 
   2585 `-Werror'
   2586      Make all warnings into errors.
   2587 
   2588 `-Werror='
   2589      Make the specified warning into an error.  The specifier for a
   2590      warning is appended, for example `-Werror=switch' turns the
   2591      warnings controlled by `-Wswitch' into errors.  This switch takes a
   2592      negative form, to be used to negate `-Werror' for specific
   2593      warnings, for example `-Wno-error=switch' makes `-Wswitch'
   2594      warnings not be errors, even when `-Werror' is in effect.  You can
   2595      use the `-fdiagnostics-show-option' option to have each
   2596      controllable warning amended with the option which controls it, to
   2597      determine what to use with this option.
   2598 
   2599      Note that specifying `-Werror='FOO automatically implies `-W'FOO.
   2600      However, `-Wno-error='FOO does not imply anything.
   2601 
   2602 `-Wfatal-errors'
   2603      This option causes the compiler to abort compilation on the first
   2604      error occurred rather than trying to keep going and printing
   2605      further error messages.
   2606 
   2607 
   2608  You can request many specific warnings with options beginning `-W',
   2609 for example `-Wimplicit' to request warnings on implicit declarations.
   2610 Each of these specific warning options also has a negative form
   2611 beginning `-Wno-' to turn off warnings; for example, `-Wno-implicit'.
   2612 This manual lists only one of the two forms, whichever is not the
   2613 default.  For further, language-specific options also refer to *Note
   2614 C++ Dialect Options:: and *Note Objective-C and Objective-C++ Dialect
   2615 Options::.
   2616 
   2617 `-pedantic'
   2618      Issue all the warnings demanded by strict ISO C and ISO C++;
   2619      reject all programs that use forbidden extensions, and some other
   2620      programs that do not follow ISO C and ISO C++.  For ISO C, follows
   2621      the version of the ISO C standard specified by any `-std' option
   2622      used.
   2623 
   2624      Valid ISO C and ISO C++ programs should compile properly with or
   2625      without this option (though a rare few will require `-ansi' or a
   2626      `-std' option specifying the required version of ISO C).  However,
   2627      without this option, certain GNU extensions and traditional C and
   2628      C++ features are supported as well.  With this option, they are
   2629      rejected.
   2630 
   2631      `-pedantic' does not cause warning messages for use of the
   2632      alternate keywords whose names begin and end with `__'.  Pedantic
   2633      warnings are also disabled in the expression that follows
   2634      `__extension__'.  However, only system header files should use
   2635      these escape routes; application programs should avoid them.
   2636      *Note Alternate Keywords::.
   2637 
   2638      Some users try to use `-pedantic' to check programs for strict ISO
   2639      C conformance.  They soon find that it does not do quite what they
   2640      want: it finds some non-ISO practices, but not all--only those for
   2641      which ISO C _requires_ a diagnostic, and some others for which
   2642      diagnostics have been added.
   2643 
   2644      A feature to report any failure to conform to ISO C might be
   2645      useful in some instances, but would require considerable
   2646      additional work and would be quite different from `-pedantic'.  We
   2647      don't have plans to support such a feature in the near future.
   2648 
   2649      Where the standard specified with `-std' represents a GNU extended
   2650      dialect of C, such as `gnu89' or `gnu99', there is a corresponding
   2651      "base standard", the version of ISO C on which the GNU extended
   2652      dialect is based.  Warnings from `-pedantic' are given where they
   2653      are required by the base standard.  (It would not make sense for
   2654      such warnings to be given only for features not in the specified
   2655      GNU C dialect, since by definition the GNU dialects of C include
   2656      all features the compiler supports with the given option, and
   2657      there would be nothing to warn about.)
   2658 
   2659 `-pedantic-errors'
   2660      Like `-pedantic', except that errors are produced rather than
   2661      warnings.
   2662 
   2663 `-Wall'
   2664      This enables all the warnings about constructions that some users
   2665      consider questionable, and that are easy to avoid (or modify to
   2666      prevent the warning), even in conjunction with macros.  This also
   2667      enables some language-specific warnings described in *Note C++
   2668      Dialect Options:: and *Note Objective-C and Objective-C++ Dialect
   2669      Options::.
   2670 
   2671      `-Wall' turns on the following warning flags:
   2672 
   2673           -Waddress
   2674           -Warray-bounds (only with `-O2')
   2675           -Wc++0x-compat
   2676           -Wchar-subscripts
   2677           -Wimplicit-int
   2678           -Wimplicit-function-declaration
   2679           -Wcomment
   2680           -Wformat
   2681           -Wmain (only for C/ObjC and unless `-ffreestanding')
   2682           -Wmissing-braces
   2683           -Wnonnull
   2684           -Wparentheses
   2685           -Wpointer-sign
   2686           -Wreorder
   2687           -Wreturn-type
   2688           -Wsequence-point
   2689           -Wsign-compare (only in C++)
   2690           -Wstrict-aliasing
   2691           -Wstrict-overflow=1
   2692           -Wswitch
   2693           -Wtrigraphs
   2694           -Wuninitialized (only with `-O1' and above)
   2695           -Wunknown-pragmas
   2696           -Wunused-function
   2697           -Wunused-label
   2698           -Wunused-value
   2699           -Wunused-variable
   2700 
   2701      Note that some warning flags are not implied by `-Wall'.  Some of
   2702      them warn about constructions that users generally do not consider
   2703      questionable, but which occasionally you might wish to check for;
   2704      others warn about constructions that are necessary or hard to
   2705      avoid in some cases, and there is no simple way to modify the code
   2706      to suppress the warning. Some of them are enabled by `-Wextra' but
   2707      many of them must be enabled individually.
   2708 
   2709 `-Wextra'
   2710      This enables some extra warning flags that are not enabled by
   2711      `-Wall'. (This option used to be called `-W'.  The older name is
   2712      still supported, but the newer name is more descriptive.)
   2713 
   2714           -Wclobbered
   2715           -Wempty-body
   2716           -Wignored-qualifiers
   2717           -Wmissing-field-initializers
   2718           -Wmissing-parameter-type (C only)
   2719           -Wold-style-declaration (C only)
   2720           -Woverride-init
   2721           -Wsign-compare
   2722           -Wtype-limits
   2723           -Wuninitialized (only with `-O1' and above)
   2724           -Wunused-parameter (only with `-Wunused' or `-Wall')
   2725 
   2726      The option `-Wextra' also prints warning messages for the
   2727      following cases:
   2728 
   2729         * A pointer is compared against integer zero with `<', `<=',
   2730           `>', or `>='.
   2731 
   2732         * (C++ only) An enumerator and a non-enumerator both appear in a
   2733           conditional expression.
   2734 
   2735         * (C++ only) A non-static reference or non-static `const' member
   2736           appears in a class without constructors.
   2737 
   2738         * (C++ only) Ambiguous virtual bases.
   2739 
   2740         * (C++ only) Subscripting an array which has been declared
   2741           `register'.
   2742 
   2743         * (C++ only) Taking the address of a variable which has been
   2744           declared `register'.
   2745 
   2746         * (C++ only) A base class is not initialized in a derived
   2747           class' copy constructor.
   2748 
   2749 
   2750 `-Wno-import'
   2751      Inhibit warning messages about the use of `#import'.
   2752 
   2753 `-Wchar-subscripts'
   2754      Warn if an array subscript has type `char'.  This is a common cause
   2755      of error, as programmers often forget that this type is signed on
   2756      some machines.  This warning is enabled by `-Wall'.
   2757 
   2758 `-Wcomment'
   2759      Warn whenever a comment-start sequence `/*' appears in a `/*'
   2760      comment, or whenever a Backslash-Newline appears in a `//' comment.
   2761      This warning is enabled by `-Wall'.
   2762 
   2763 `-Wformat'
   2764      Check calls to `printf' and `scanf', etc., to make sure that the
   2765      arguments supplied have types appropriate to the format string
   2766      specified, and that the conversions specified in the format string
   2767      make sense.  This includes standard functions, and others
   2768      specified by format attributes (*note Function Attributes::), in
   2769      the `printf', `scanf', `strftime' and `strfmon' (an X/Open
   2770      extension, not in the C standard) families (or other
   2771      target-specific families).  Which functions are checked without
   2772      format attributes having been specified depends on the standard
   2773      version selected, and such checks of functions without the
   2774      attribute specified are disabled by `-ffreestanding' or
   2775      `-fno-builtin'.
   2776 
   2777      The formats are checked against the format features supported by
   2778      GNU libc version 2.2.  These include all ISO C90 and C99 features,
   2779      as well as features from the Single Unix Specification and some
   2780      BSD and GNU extensions.  Other library implementations may not
   2781      support all these features; GCC does not support warning about
   2782      features that go beyond a particular library's limitations.
   2783      However, if `-pedantic' is used with `-Wformat', warnings will be
   2784      given about format features not in the selected standard version
   2785      (but not for `strfmon' formats, since those are not in any version
   2786      of the C standard).  *Note Options Controlling C Dialect: C
   2787      Dialect Options.
   2788 
   2789      Since `-Wformat' also checks for null format arguments for several
   2790      functions, `-Wformat' also implies `-Wnonnull'.
   2791 
   2792      `-Wformat' is included in `-Wall'.  For more control over some
   2793      aspects of format checking, the options `-Wformat-y2k',
   2794      `-Wno-format-extra-args', `-Wno-format-zero-length',
   2795      `-Wformat-nonliteral', `-Wformat-security', and `-Wformat=2' are
   2796      available, but are not included in `-Wall'.
   2797 
   2798 `-Wformat-y2k'
   2799      If `-Wformat' is specified, also warn about `strftime' formats
   2800      which may yield only a two-digit year.
   2801 
   2802 `-Wno-format-extra-args'
   2803      If `-Wformat' is specified, do not warn about excess arguments to a
   2804      `printf' or `scanf' format function.  The C standard specifies
   2805      that such arguments are ignored.
   2806 
   2807      Where the unused arguments lie between used arguments that are
   2808      specified with `$' operand number specifications, normally
   2809      warnings are still given, since the implementation could not know
   2810      what type to pass to `va_arg' to skip the unused arguments.
   2811      However, in the case of `scanf' formats, this option will suppress
   2812      the warning if the unused arguments are all pointers, since the
   2813      Single Unix Specification says that such unused arguments are
   2814      allowed.
   2815 
   2816 `-Wno-format-zero-length (C and Objective-C only)'
   2817      If `-Wformat' is specified, do not warn about zero-length formats.
   2818      The C standard specifies that zero-length formats are allowed.
   2819 
   2820 `-Wformat-nonliteral'
   2821      If `-Wformat' is specified, also warn if the format string is not a
   2822      string literal and so cannot be checked, unless the format function
   2823      takes its format arguments as a `va_list'.
   2824 
   2825 `-Wformat-security'
   2826      If `-Wformat' is specified, also warn about uses of format
   2827      functions that represent possible security problems.  At present,
   2828      this warns about calls to `printf' and `scanf' functions where the
   2829      format string is not a string literal and there are no format
   2830      arguments, as in `printf (foo);'.  This may be a security hole if
   2831      the format string came from untrusted input and contains `%n'.
   2832      (This is currently a subset of what `-Wformat-nonliteral' warns
   2833      about, but in future warnings may be added to `-Wformat-security'
   2834      that are not included in `-Wformat-nonliteral'.)
   2835 
   2836 `-Wformat=2'
   2837      Enable `-Wformat' plus format checks not included in `-Wformat'.
   2838      Currently equivalent to `-Wformat -Wformat-nonliteral
   2839      -Wformat-security -Wformat-y2k'.
   2840 
   2841 `-Wnonnull (C and Objective-C only)'
   2842      Warn about passing a null pointer for arguments marked as
   2843      requiring a non-null value by the `nonnull' function attribute.
   2844 
   2845      `-Wnonnull' is included in `-Wall' and `-Wformat'.  It can be
   2846      disabled with the `-Wno-nonnull' option.
   2847 
   2848 `-Winit-self (C, C++, Objective-C and Objective-C++ only)'
   2849      Warn about uninitialized variables which are initialized with
   2850      themselves.  Note this option can only be used with the
   2851      `-Wuninitialized' option, which in turn only works with `-O1' and
   2852      above.
   2853 
   2854      For example, GCC will warn about `i' being uninitialized in the
   2855      following snippet only when `-Winit-self' has been specified:
   2856           int f()
   2857           {
   2858             int i = i;
   2859             return i;
   2860           }
   2861 
   2862 `-Wimplicit-int (C and Objective-C only)'
   2863      Warn when a declaration does not specify a type.  This warning is
   2864      enabled by `-Wall'.
   2865 
   2866 `-Wimplicit-function-declaration (C and Objective-C only)'
   2867      Give a warning whenever a function is used before being declared.
   2868      In C99 mode (`-std=c99' or `-std=gnu99'), this warning is enabled
   2869      by default and it is made into an error by `-pedantic-errors'.
   2870      This warning is also enabled by `-Wall'.
   2871 
   2872 `-Wimplicit'
   2873      Same as `-Wimplicit-int' and `-Wimplicit-function-declaration'.
   2874      This warning is enabled by `-Wall'.
   2875 
   2876 `-Wignored-qualifiers (C and C++ only)'
   2877      Warn if the return type of a function has a type qualifier such as
   2878      `const'.  For ISO C such a type qualifier has no effect, since the
   2879      value returned by a function is not an lvalue.  For C++, the
   2880      warning is only emitted for scalar types or `void'.  ISO C
   2881      prohibits qualified `void' return types on function definitions,
   2882      so such return types always receive a warning even without this
   2883      option.
   2884 
   2885      This warning is also enabled by `-Wextra'.
   2886 
   2887 `-Wmain'
   2888      Warn if the type of `main' is suspicious.  `main' should be a
   2889      function with external linkage, returning int, taking either zero
   2890      arguments, two, or three arguments of appropriate types.  This
   2891      warning is enabled by `-Wall'.
   2892 
   2893 `-Wmissing-braces'
   2894      Warn if an aggregate or union initializer is not fully bracketed.
   2895      In the following example, the initializer for `a' is not fully
   2896      bracketed, but that for `b' is fully bracketed.
   2897 
   2898           int a[2][2] = { 0, 1, 2, 3 };
   2899           int b[2][2] = { { 0, 1 }, { 2, 3 } };
   2900 
   2901      This warning is enabled by `-Wall'.
   2902 
   2903 `-Wmissing-include-dirs (C, C++, Objective-C and Objective-C++ only)'
   2904      Warn if a user-supplied include directory does not exist.
   2905 
   2906 `-Wparentheses'
   2907      Warn if parentheses are omitted in certain contexts, such as when
   2908      there is an assignment in a context where a truth value is
   2909      expected, or when operators are nested whose precedence people
   2910      often get confused about.
   2911 
   2912      Also warn if a comparison like `x<=y<=z' appears; this is
   2913      equivalent to `(x<=y ? 1 : 0) <= z', which is a different
   2914      interpretation from that of ordinary mathematical notation.
   2915 
   2916      Also warn about constructions where there may be confusion to which
   2917      `if' statement an `else' branch belongs.  Here is an example of
   2918      such a case:
   2919 
   2920           {
   2921             if (a)
   2922               if (b)
   2923                 foo ();
   2924             else
   2925               bar ();
   2926           }
   2927 
   2928      In C/C++, every `else' branch belongs to the innermost possible
   2929      `if' statement, which in this example is `if (b)'.  This is often
   2930      not what the programmer expected, as illustrated in the above
   2931      example by indentation the programmer chose.  When there is the
   2932      potential for this confusion, GCC will issue a warning when this
   2933      flag is specified.  To eliminate the warning, add explicit braces
   2934      around the innermost `if' statement so there is no way the `else'
   2935      could belong to the enclosing `if'.  The resulting code would look
   2936      like this:
   2937 
   2938           {
   2939             if (a)
   2940               {
   2941                 if (b)
   2942                   foo ();
   2943                 else
   2944                   bar ();
   2945               }
   2946           }
   2947 
   2948      This warning is enabled by `-Wall'.
   2949 
   2950 `-Wsequence-point'
   2951      Warn about code that may have undefined semantics because of
   2952      violations of sequence point rules in the C and C++ standards.
   2953 
   2954      The C and C++ standards defines the order in which expressions in
   2955      a C/C++ program are evaluated in terms of "sequence points", which
   2956      represent a partial ordering between the execution of parts of the
   2957      program: those executed before the sequence point, and those
   2958      executed after it.  These occur after the evaluation of a full
   2959      expression (one which is not part of a larger expression), after
   2960      the evaluation of the first operand of a `&&', `||', `? :' or `,'
   2961      (comma) operator, before a function is called (but after the
   2962      evaluation of its arguments and the expression denoting the called
   2963      function), and in certain other places.  Other than as expressed
   2964      by the sequence point rules, the order of evaluation of
   2965      subexpressions of an expression is not specified.  All these rules
   2966      describe only a partial order rather than a total order, since,
   2967      for example, if two functions are called within one expression
   2968      with no sequence point between them, the order in which the
   2969      functions are called is not specified.  However, the standards
   2970      committee have ruled that function calls do not overlap.
   2971 
   2972      It is not specified when between sequence points modifications to
   2973      the values of objects take effect.  Programs whose behavior
   2974      depends on this have undefined behavior; the C and C++ standards
   2975      specify that "Between the previous and next sequence point an
   2976      object shall have its stored value modified at most once by the
   2977      evaluation of an expression.  Furthermore, the prior value shall
   2978      be read only to determine the value to be stored.".  If a program
   2979      breaks these rules, the results on any particular implementation
   2980      are entirely unpredictable.
   2981 
   2982      Examples of code with undefined behavior are `a = a++;', `a[n] =
   2983      b[n++]' and `a[i++] = i;'.  Some more complicated cases are not
   2984      diagnosed by this option, and it may give an occasional false
   2985      positive result, but in general it has been found fairly effective
   2986      at detecting this sort of problem in programs.
   2987 
   2988      The standard is worded confusingly, therefore there is some debate
   2989      over the precise meaning of the sequence point rules in subtle
   2990      cases.  Links to discussions of the problem, including proposed
   2991      formal definitions, may be found on the GCC readings page, at
   2992      `http://gcc.gnu.org/readings.html'.
   2993 
   2994      This warning is enabled by `-Wall' for C and C++.
   2995 
   2996 `-Wreturn-type'
   2997      Warn whenever a function is defined with a return-type that
   2998      defaults to `int'.  Also warn about any `return' statement with no
   2999      return-value in a function whose return-type is not `void'
   3000      (falling off the end of the function body is considered returning
   3001      without a value), and about a `return' statement with a expression
   3002      in a function whose return-type is `void'.
   3003 
   3004      For C++, a function without return type always produces a
   3005      diagnostic message, even when `-Wno-return-type' is specified.
   3006      The only exceptions are `main' and functions defined in system
   3007      headers.
   3008 
   3009      This warning is enabled by `-Wall'.
   3010 
   3011 `-Wswitch'
   3012      Warn whenever a `switch' statement has an index of enumerated type
   3013      and lacks a `case' for one or more of the named codes of that
   3014      enumeration.  (The presence of a `default' label prevents this
   3015      warning.)  `case' labels outside the enumeration range also
   3016      provoke warnings when this option is used.  This warning is
   3017      enabled by `-Wall'.
   3018 
   3019 `-Wswitch-default'
   3020      Warn whenever a `switch' statement does not have a `default' case.
   3021 
   3022 `-Wswitch-enum'
   3023      Warn whenever a `switch' statement has an index of enumerated type
   3024      and lacks a `case' for one or more of the named codes of that
   3025      enumeration.  `case' labels outside the enumeration range also
   3026      provoke warnings when this option is used.
   3027 
   3028 `-Wtrigraphs'
   3029      Warn if any trigraphs are encountered that might change the
   3030      meaning of the program (trigraphs within comments are not warned
   3031      about).  This warning is enabled by `-Wall'.
   3032 
   3033 `-Wunused-function'
   3034      Warn whenever a static function is declared but not defined or a
   3035      non-inline static function is unused.  This warning is enabled by
   3036      `-Wall'.
   3037 
   3038 `-Wunused-label'
   3039      Warn whenever a label is declared but not used.  This warning is
   3040      enabled by `-Wall'.
   3041 
   3042      To suppress this warning use the `unused' attribute (*note
   3043      Variable Attributes::).
   3044 
   3045 `-Wunused-parameter'
   3046      Warn whenever a function parameter is unused aside from its
   3047      declaration.
   3048 
   3049      To suppress this warning use the `unused' attribute (*note
   3050      Variable Attributes::).
   3051 
   3052 `-Wunused-variable'
   3053      Warn whenever a local variable or non-constant static variable is
   3054      unused aside from its declaration.  This warning is enabled by
   3055      `-Wall'.
   3056 
   3057      To suppress this warning use the `unused' attribute (*note
   3058      Variable Attributes::).
   3059 
   3060 `-Wunused-value'
   3061      Warn whenever a statement computes a result that is explicitly not
   3062      used. To suppress this warning cast the unused expression to
   3063      `void'. This includes an expression-statement or the left-hand
   3064      side of a comma expression that contains no side effects. For
   3065      example, an expression such as `x[i,j]' will cause a warning, while
   3066      `x[(void)i,j]' will not.
   3067 
   3068      This warning is enabled by `-Wall'.
   3069 
   3070 `-Wunused'
   3071      All the above `-Wunused' options combined.
   3072 
   3073      In order to get a warning about an unused function parameter, you
   3074      must either specify `-Wextra -Wunused' (note that `-Wall' implies
   3075      `-Wunused'), or separately specify `-Wunused-parameter'.
   3076 
   3077 `-Wuninitialized'
   3078      Warn if an automatic variable is used without first being
   3079      initialized or if a variable may be clobbered by a `setjmp' call.
   3080 
   3081      These warnings are possible only in optimizing compilation,
   3082      because they require data flow information that is computed only
   3083      when optimizing.  If you do not specify `-O', you will not get
   3084      these warnings. Instead, GCC will issue a warning about
   3085      `-Wuninitialized' requiring `-O'.
   3086 
   3087      If you want to warn about code which uses the uninitialized value
   3088      of the variable in its own initializer, use the `-Winit-self'
   3089      option.
   3090 
   3091      These warnings occur for individual uninitialized or clobbered
   3092      elements of structure, union or array variables as well as for
   3093      variables which are uninitialized or clobbered as a whole.  They do
   3094      not occur for variables or elements declared `volatile'.  Because
   3095      these warnings depend on optimization, the exact variables or
   3096      elements for which there are warnings will depend on the precise
   3097      optimization options and version of GCC used.
   3098 
   3099      Note that there may be no warning about a variable that is used
   3100      only to compute a value that itself is never used, because such
   3101      computations may be deleted by data flow analysis before the
   3102      warnings are printed.
   3103 
   3104      These warnings are made optional because GCC is not smart enough
   3105      to see all the reasons why the code might be correct despite
   3106      appearing to have an error.  Here is one example of how this can
   3107      happen:
   3108 
   3109           {
   3110             int x;
   3111             switch (y)
   3112               {
   3113               case 1: x = 1;
   3114                 break;
   3115               case 2: x = 4;
   3116                 break;
   3117               case 3: x = 5;
   3118               }
   3119             foo (x);
   3120           }
   3121 
   3122      If the value of `y' is always 1, 2 or 3, then `x' is always
   3123      initialized, but GCC doesn't know this.  Here is another common
   3124      case:
   3125 
   3126           {
   3127             int save_y;
   3128             if (change_y) save_y = y, y = new_y;
   3129             ...
   3130             if (change_y) y = save_y;
   3131           }
   3132 
   3133      This has no bug because `save_y' is used only if it is set.
   3134 
   3135      This option also warns when a non-volatile automatic variable
   3136      might be changed by a call to `longjmp'.  These warnings as well
   3137      are possible only in optimizing compilation.
   3138 
   3139      The compiler sees only the calls to `setjmp'.  It cannot know
   3140      where `longjmp' will be called; in fact, a signal handler could
   3141      call it at any point in the code.  As a result, you may get a
   3142      warning even when there is in fact no problem because `longjmp'
   3143      cannot in fact be called at the place which would cause a problem.
   3144 
   3145      Some spurious warnings can be avoided if you declare all the
   3146      functions you use that never return as `noreturn'.  *Note Function
   3147      Attributes::.
   3148 
   3149      This warning is enabled by `-Wall' or `-Wextra' in optimizing
   3150      compilations (`-O1' and above).
   3151 
   3152 `-Wunknown-pragmas'
   3153      Warn when a #pragma directive is encountered which is not
   3154      understood by GCC.  If this command line option is used, warnings
   3155      will even be issued for unknown pragmas in system header files.
   3156      This is not the case if the warnings were only enabled by the
   3157      `-Wall' command line option.
   3158 
   3159 `-Wno-pragmas'
   3160      Do not warn about misuses of pragmas, such as incorrect parameters,
   3161      invalid syntax, or conflicts between pragmas.  See also
   3162      `-Wunknown-pragmas'.
   3163 
   3164 `-Wstrict-aliasing'
   3165      This option is only active when `-fstrict-aliasing' is active.  It
   3166      warns about code which might break the strict aliasing rules that
   3167      the compiler is using for optimization.  The warning does not
   3168      catch all cases, but does attempt to catch the more common
   3169      pitfalls.  It is included in `-Wall'.  It is equivalent to
   3170      `-Wstrict-aliasing=3'
   3171 
   3172 `-Wstrict-aliasing=n'
   3173      This option is only active when `-fstrict-aliasing' is active.  It
   3174      warns about code which might break the strict aliasing rules that
   3175      the compiler is using for optimization.  Higher levels correspond
   3176      to higher accuracy (fewer false positives).  Higher levels also
   3177      correspond to more effort, similar to the way -O works.
   3178      `-Wstrict-aliasing' is equivalent to `-Wstrict-aliasing=n', with
   3179      n=3.
   3180 
   3181      Level 1: Most aggressive, quick, least accurate.  Possibly useful
   3182      when higher levels do not warn but -fstrict-aliasing still breaks
   3183      the code, as it has very few false negatives.  However, it has
   3184      many false positives.  Warns for all pointer conversions between
   3185      possibly incompatible types, even if never dereferenced.  Runs in
   3186      the frontend only.
   3187 
   3188      Level 2: Aggressive, quick, not too precise.  May still have many
   3189      false positives (not as many as level 1 though), and few false
   3190      negatives (but possibly more than level 1).  Unlike level 1, it
   3191      only warns when an address is taken.  Warns about incomplete
   3192      types.  Runs in the frontend only.
   3193 
   3194      Level 3 (default for `-Wstrict-aliasing'): Should have very few
   3195      false positives and few false negatives.  Slightly slower than
   3196      levels 1 or 2 when optimization is enabled.  Takes care of the
   3197      common punn+dereference pattern in the frontend:
   3198      `*(int*)&some_float'.  If optimization is enabled, it also runs in
   3199      the backend, where it deals with multiple statement cases using
   3200      flow-sensitive points-to information.  Only warns when the
   3201      converted pointer is dereferenced.  Does not warn about incomplete
   3202      types.
   3203 
   3204 `-Wstrict-overflow'
   3205 `-Wstrict-overflow=N'
   3206      This option is only active when `-fstrict-overflow' is active.  It
   3207      warns about cases where the compiler optimizes based on the
   3208      assumption that signed overflow does not occur.  Note that it does
   3209      not warn about all cases where the code might overflow: it only
   3210      warns about cases where the compiler implements some optimization.
   3211      Thus this warning depends on the optimization level.
   3212 
   3213      An optimization which assumes that signed overflow does not occur
   3214      is perfectly safe if the values of the variables involved are such
   3215      that overflow never does, in fact, occur.  Therefore this warning
   3216      can easily give a false positive: a warning about code which is not
   3217      actually a problem.  To help focus on important issues, several
   3218      warning levels are defined.  No warnings are issued for the use of
   3219      undefined signed overflow when estimating how many iterations a
   3220      loop will require, in particular when determining whether a loop
   3221      will be executed at all.
   3222 
   3223     `-Wstrict-overflow=1'
   3224           Warn about cases which are both questionable and easy to
   3225           avoid.  For example: `x + 1 > x'; with `-fstrict-overflow',
   3226           the compiler will simplify this to `1'.  This level of
   3227           `-Wstrict-overflow' is enabled by `-Wall'; higher levels are
   3228           not, and must be explicitly requested.
   3229 
   3230     `-Wstrict-overflow=2'
   3231           Also warn about other cases where a comparison is simplified
   3232           to a constant.  For example: `abs (x) >= 0'.  This can only be
   3233           simplified when `-fstrict-overflow' is in effect, because
   3234           `abs (INT_MIN)' overflows to `INT_MIN', which is less than
   3235           zero.  `-Wstrict-overflow' (with no level) is the same as
   3236           `-Wstrict-overflow=2'.
   3237 
   3238     `-Wstrict-overflow=3'
   3239           Also warn about other cases where a comparison is simplified.
   3240           For example: `x + 1 > 1' will be simplified to `x > 0'.
   3241 
   3242     `-Wstrict-overflow=4'
   3243           Also warn about other simplifications not covered by the
   3244           above cases.  For example: `(x * 10) / 5' will be simplified
   3245           to `x * 2'.
   3246 
   3247     `-Wstrict-overflow=5'
   3248           Also warn about cases where the compiler reduces the
   3249           magnitude of a constant involved in a comparison.  For
   3250           example: `x + 2 > y' will be simplified to `x + 1 >= y'.
   3251           This is reported only at the highest warning level because
   3252           this simplification applies to many comparisons, so this
   3253           warning level will give a very large number of false
   3254           positives.
   3255 
   3256 `-Warray-bounds'
   3257      This option is only active when `-ftree-vrp' is active (default
   3258      for -O2 and above). It warns about subscripts to arrays that are
   3259      always out of bounds. This warning is enabled by `-Wall'.
   3260 
   3261 `-Wno-div-by-zero'
   3262      Do not warn about compile-time integer division by zero.  Floating
   3263      point division by zero is not warned about, as it can be a
   3264      legitimate way of obtaining infinities and NaNs.
   3265 
   3266 `-Wsystem-headers'
   3267      Print warning messages for constructs found in system header files.
   3268      Warnings from system headers are normally suppressed, on the
   3269      assumption that they usually do not indicate real problems and
   3270      would only make the compiler output harder to read.  Using this
   3271      command line option tells GCC to emit warnings from system headers
   3272      as if they occurred in user code.  However, note that using
   3273      `-Wall' in conjunction with this option will _not_ warn about
   3274      unknown pragmas in system headers--for that, `-Wunknown-pragmas'
   3275      must also be used.
   3276 
   3277 `-Wfloat-equal'
   3278      Warn if floating point values are used in equality comparisons.
   3279 
   3280      The idea behind this is that sometimes it is convenient (for the
   3281      programmer) to consider floating-point values as approximations to
   3282      infinitely precise real numbers.  If you are doing this, then you
   3283      need to compute (by analyzing the code, or in some other way) the
   3284      maximum or likely maximum error that the computation introduces,
   3285      and allow for it when performing comparisons (and when producing
   3286      output, but that's a different problem).  In particular, instead
   3287      of testing for equality, you would check to see whether the two
   3288      values have ranges that overlap; and this is done with the
   3289      relational operators, so equality comparisons are probably
   3290      mistaken.
   3291 
   3292 `-Wtraditional (C and Objective-C only)'
   3293      Warn about certain constructs that behave differently in
   3294      traditional and ISO C.  Also warn about ISO C constructs that have
   3295      no traditional C equivalent, and/or problematic constructs which
   3296      should be avoided.
   3297 
   3298         * Macro parameters that appear within string literals in the
   3299           macro body.  In traditional C macro replacement takes place
   3300           within string literals, but does not in ISO C.
   3301 
   3302         * In traditional C, some preprocessor directives did not exist.
   3303           Traditional preprocessors would only consider a line to be a
   3304           directive if the `#' appeared in column 1 on the line.
   3305           Therefore `-Wtraditional' warns about directives that
   3306           traditional C understands but would ignore because the `#'
   3307           does not appear as the first character on the line.  It also
   3308           suggests you hide directives like `#pragma' not understood by
   3309           traditional C by indenting them.  Some traditional
   3310           implementations would not recognize `#elif', so it suggests
   3311           avoiding it altogether.
   3312 
   3313         * A function-like macro that appears without arguments.
   3314 
   3315         * The unary plus operator.
   3316 
   3317         * The `U' integer constant suffix, or the `F' or `L' floating
   3318           point constant suffixes.  (Traditional C does support the `L'
   3319           suffix on integer constants.)  Note, these suffixes appear in
   3320           macros defined in the system headers of most modern systems,
   3321           e.g. the `_MIN'/`_MAX' macros in `<limits.h>'.  Use of these
   3322           macros in user code might normally lead to spurious warnings,
   3323           however GCC's integrated preprocessor has enough context to
   3324           avoid warning in these cases.
   3325 
   3326         * A function declared external in one block and then used after
   3327           the end of the block.
   3328 
   3329         * A `switch' statement has an operand of type `long'.
   3330 
   3331         * A non-`static' function declaration follows a `static' one.
   3332           This construct is not accepted by some traditional C
   3333           compilers.
   3334 
   3335         * The ISO type of an integer constant has a different width or
   3336           signedness from its traditional type.  This warning is only
   3337           issued if the base of the constant is ten.  I.e. hexadecimal
   3338           or octal values, which typically represent bit patterns, are
   3339           not warned about.
   3340 
   3341         * Usage of ISO string concatenation is detected.
   3342 
   3343         * Initialization of automatic aggregates.
   3344 
   3345         * Identifier conflicts with labels.  Traditional C lacks a
   3346           separate namespace for labels.
   3347 
   3348         * Initialization of unions.  If the initializer is zero, the
   3349           warning is omitted.  This is done under the assumption that
   3350           the zero initializer in user code appears conditioned on e.g.
   3351           `__STDC__' to avoid missing initializer warnings and relies
   3352           on default initialization to zero in the traditional C case.
   3353 
   3354         * Conversions by prototypes between fixed/floating point values
   3355           and vice versa.  The absence of these prototypes when
   3356           compiling with traditional C would cause serious problems.
   3357           This is a subset of the possible conversion warnings, for the
   3358           full set use `-Wtraditional-conversion'.
   3359 
   3360         * Use of ISO C style function definitions.  This warning
   3361           intentionally is _not_ issued for prototype declarations or
   3362           variadic functions because these ISO C features will appear
   3363           in your code when using libiberty's traditional C
   3364           compatibility macros, `PARAMS' and `VPARAMS'.  This warning
   3365           is also bypassed for nested functions because that feature is
   3366           already a GCC extension and thus not relevant to traditional
   3367           C compatibility.
   3368 
   3369 `-Wtraditional-conversion (C and Objective-C only)'
   3370      Warn if a prototype causes a type conversion that is different
   3371      from what would happen to the same argument in the absence of a
   3372      prototype.  This includes conversions of fixed point to floating
   3373      and vice versa, and conversions changing the width or signedness
   3374      of a fixed point argument except when the same as the default
   3375      promotion.
   3376 
   3377 `-Wdeclaration-after-statement (C and Objective-C only)'
   3378      Warn when a declaration is found after a statement in a block.
   3379      This construct, known from C++, was introduced with ISO C99 and is
   3380      by default allowed in GCC.  It is not supported by ISO C90 and was
   3381      not supported by GCC versions before GCC 3.0.  *Note Mixed
   3382      Declarations::.
   3383 
   3384 `-Wundef'
   3385      Warn if an undefined identifier is evaluated in an `#if' directive.
   3386 
   3387 `-Wno-endif-labels'
   3388      Do not warn whenever an `#else' or an `#endif' are followed by
   3389      text.
   3390 
   3391 `-Wshadow'
   3392      Warn whenever a local variable shadows another local variable,
   3393      parameter or global variable or whenever a built-in function is
   3394      shadowed.
   3395 
   3396 `-Wlarger-than-LEN'
   3397      Warn whenever an object of larger than LEN bytes is defined.
   3398 
   3399 `-Wunsafe-loop-optimizations'
   3400      Warn if the loop cannot be optimized because the compiler could not
   3401      assume anything on the bounds of the loop indices.  With
   3402      `-funsafe-loop-optimizations' warn if the compiler made such
   3403      assumptions.
   3404 
   3405 `-Wpointer-arith'
   3406      Warn about anything that depends on the "size of" a function type
   3407      or of `void'.  GNU C assigns these types a size of 1, for
   3408      convenience in calculations with `void *' pointers and pointers to
   3409      functions.  In C++, warn also when an arithmetic operation involves
   3410      `NULL'.  This warning is also enabled by `-pedantic'.
   3411 
   3412 `-Wtype-limits'
   3413      Warn if a comparison is always true or always false due to the
   3414      limited range of the data type, but do not warn for constant
   3415      expressions.  For example, warn if an unsigned variable is
   3416      compared against zero with `<' or `>='.  This warning is also
   3417      enabled by `-Wextra'.
   3418 
   3419 `-Wbad-function-cast (C and Objective-C only)'
   3420      Warn whenever a function call is cast to a non-matching type.  For
   3421      example, warn if `int malloc()' is cast to `anything *'.
   3422 
   3423 `-Wc++-compat (C and Objective-C only)'
   3424      Warn about ISO C constructs that are outside of the common subset
   3425      of ISO C and ISO C++, e.g. request for implicit conversion from
   3426      `void *' to a pointer to non-`void' type.
   3427 
   3428 `-Wc++0x-compat (C++ and Objective-C++ only)'
   3429      Warn about C++ constructs whose meaning differs between ISO C++
   3430      1998 and ISO C++ 200x, e.g., identifiers in ISO C++ 1998 that will
   3431      become keywords in ISO C++ 200x.  This warning is enabled by
   3432      `-Wall'.
   3433 
   3434 `-Wcast-qual'
   3435      Warn whenever a pointer is cast so as to remove a type qualifier
   3436      from the target type.  For example, warn if a `const char *' is
   3437      cast to an ordinary `char *'.
   3438 
   3439 `-Wcast-align'
   3440      Warn whenever a pointer is cast such that the required alignment
   3441      of the target is increased.  For example, warn if a `char *' is
   3442      cast to an `int *' on machines where integers can only be accessed
   3443      at two- or four-byte boundaries.
   3444 
   3445 `-Wwrite-strings'
   3446      When compiling C, give string constants the type `const
   3447      char[LENGTH]' so that copying the address of one into a
   3448      non-`const' `char *' pointer will get a warning; when compiling
   3449      C++, warn about the deprecated conversion from string literals to
   3450      `char *'.  This warning, by default, is enabled for C++ programs.
   3451      These warnings will help you find at compile time code that can
   3452      try to write into a string constant, but only if you have been
   3453      very careful about using `const' in declarations and prototypes.
   3454      Otherwise, it will just be a nuisance; this is why we did not make
   3455      `-Wall' request these warnings.
   3456 
   3457 `-Wclobbered'
   3458      Warn for variables that might be changed by `longjmp' or `vfork'.
   3459      This warning is also enabled by `-Wextra'.
   3460 
   3461 `-Wconversion'
   3462      Warn for implicit conversions that may alter a value. This includes
   3463      conversions between real and integer, like `abs (x)' when `x' is
   3464      `double'; conversions between signed and unsigned, like `unsigned
   3465      ui = -1'; and conversions to smaller types, like `sqrtf (M_PI)'.
   3466      Do not warn for explicit casts like `abs ((int) x)' and `ui =
   3467      (unsigned) -1', or if the value is not changed by the conversion
   3468      like in `abs (2.0)'.  Warnings about conversions between signed
   3469      and unsigned integers can be disabled by using
   3470      `-Wno-sign-conversion'.
   3471 
   3472      For C++, also warn for conversions between `NULL' and non-pointer
   3473      types; confusing overload resolution for user-defined conversions;
   3474      and conversions that will never use a type conversion operator:
   3475      conversions to `void', the same type, a base class or a reference
   3476      to them. Warnings about conversions between signed and unsigned
   3477      integers are disabled by default in C++ unless `-Wsign-conversion'
   3478      is explicitly enabled.
   3479 
   3480 `-Wempty-body'
   3481      Warn if an empty body occurs in an `if', `else' or `do while'
   3482      statement.  Additionally, in C++, warn when an empty body occurs
   3483      in a `while' or `for' statement with no whitespacing before the
   3484      semicolon.  This warning is also enabled by `-Wextra'.
   3485 
   3486 `-Wsign-compare'
   3487      Warn when a comparison between signed and unsigned values could
   3488      produce an incorrect result when the signed value is converted to
   3489      unsigned.  This warning is also enabled by `-Wextra'; to get the
   3490      other warnings of `-Wextra' without this warning, use `-Wextra
   3491      -Wno-sign-compare'.
   3492 
   3493 `-Wsign-conversion'
   3494      Warn for implicit conversions that may change the sign of an
   3495      integer value, like assigning a signed integer expression to an
   3496      unsigned integer variable. An explicit cast silences the warning.
   3497      In C, this option is enabled also by `-Wconversion'.
   3498 
   3499 `-Waddress'
   3500      Warn about suspicious uses of memory addresses. These include using
   3501      the address of a function in a conditional expression, such as
   3502      `void func(void); if (func)', and comparisons against the memory
   3503      address of a string literal, such as `if (x == "abc")'.  Such uses
   3504      typically indicate a programmer error: the address of a function
   3505      always evaluates to true, so their use in a conditional usually
   3506      indicate that the programmer forgot the parentheses in a function
   3507      call; and comparisons against string literals result in unspecified
   3508      behavior and are not portable in C, so they usually indicate that
   3509      the programmer intended to use `strcmp'.  This warning is enabled
   3510      by `-Wall'.
   3511 
   3512 `-Wlogical-op'
   3513      Warn about suspicious uses of logical operators in expressions.
   3514      This includes using logical operators in contexts where a bit-wise
   3515      operator is likely to be expected.
   3516 
   3517 `-Waggregate-return'
   3518      Warn if any functions that return structures or unions are defined
   3519      or called.  (In languages where you can return an array, this also
   3520      elicits a warning.)
   3521 
   3522 `-Wno-attributes'
   3523      Do not warn if an unexpected `__attribute__' is used, such as
   3524      unrecognized attributes, function attributes applied to variables,
   3525      etc.  This will not stop errors for incorrect use of supported
   3526      attributes.
   3527 
   3528 `-Wstrict-prototypes (C and Objective-C only)'
   3529      Warn if a function is declared or defined without specifying the
   3530      argument types.  (An old-style function definition is permitted
   3531      without a warning if preceded by a declaration which specifies the
   3532      argument types.)
   3533 
   3534 `-Wold-style-declaration (C and Objective-C only)'
   3535      Warn for obsolescent usages, according to the C Standard, in a
   3536      declaration. For example, warn if storage-class specifiers like
   3537      `static' are not the first things in a declaration.  This warning
   3538      is also enabled by `-Wextra'.
   3539 
   3540 `-Wold-style-definition (C and Objective-C only)'
   3541      Warn if an old-style function definition is used.  A warning is
   3542      given even if there is a previous prototype.
   3543 
   3544 `-Wmissing-parameter-type (C and Objective-C only)'
   3545      A function parameter is declared without a type specifier in
   3546      K&R-style functions:
   3547 
   3548           void foo(bar) { }
   3549 
   3550      This warning is also enabled by `-Wextra'.
   3551 
   3552 `-Wmissing-prototypes (C and Objective-C only)'
   3553      Warn if a global function is defined without a previous prototype
   3554      declaration.  This warning is issued even if the definition itself
   3555      provides a prototype.  The aim is to detect global functions that
   3556      fail to be declared in header files.
   3557 
   3558 `-Wmissing-declarations'
   3559      Warn if a global function is defined without a previous
   3560      declaration.  Do so even if the definition itself provides a
   3561      prototype.  Use this option to detect global functions that are
   3562      not declared in header files.  In C++, no warnings are issued for
   3563      function templates, or for inline functions, or for functions in
   3564      anonymous namespaces.
   3565 
   3566 `-Wmissing-field-initializers'
   3567      Warn if a structure's initializer has some fields missing.  For
   3568      example, the following code would cause such a warning, because
   3569      `x.h' is implicitly zero:
   3570 
   3571           struct s { int f, g, h; };
   3572           struct s x = { 3, 4 };
   3573 
   3574      This option does not warn about designated initializers, so the
   3575      following modification would not trigger a warning:
   3576 
   3577           struct s { int f, g, h; };
   3578           struct s x = { .f = 3, .g = 4 };
   3579 
   3580      This warning is included in `-Wextra'.  To get other `-Wextra'
   3581      warnings without this one, use `-Wextra
   3582      -Wno-missing-field-initializers'.
   3583 
   3584 `-Wmissing-noreturn'
   3585      Warn about functions which might be candidates for attribute
   3586      `noreturn'.  Note these are only possible candidates, not absolute
   3587      ones.  Care should be taken to manually verify functions actually
   3588      do not ever return before adding the `noreturn' attribute,
   3589      otherwise subtle code generation bugs could be introduced.  You
   3590      will not get a warning for `main' in hosted C environments.
   3591 
   3592 `-Wmissing-format-attribute'
   3593      Warn about function pointers which might be candidates for `format'
   3594      attributes.  Note these are only possible candidates, not absolute
   3595      ones.  GCC will guess that function pointers with `format'
   3596      attributes that are used in assignment, initialization, parameter
   3597      passing or return statements should have a corresponding `format'
   3598      attribute in the resulting type.  I.e. the left-hand side of the
   3599      assignment or initialization, the type of the parameter variable,
   3600      or the return type of the containing function respectively should
   3601      also have a `format' attribute to avoid the warning.
   3602 
   3603      GCC will also warn about function definitions which might be
   3604      candidates for `format' attributes.  Again, these are only
   3605      possible candidates.  GCC will guess that `format' attributes
   3606      might be appropriate for any function that calls a function like
   3607      `vprintf' or `vscanf', but this might not always be the case, and
   3608      some functions for which `format' attributes are appropriate may
   3609      not be detected.
   3610 
   3611 `-Wno-multichar'
   3612      Do not warn if a multicharacter constant (`'FOOF'') is used.
   3613      Usually they indicate a typo in the user's code, as they have
   3614      implementation-defined values, and should not be used in portable
   3615      code.
   3616 
   3617 `-Wnormalized=<none|id|nfc|nfkc>'
   3618      In ISO C and ISO C++, two identifiers are different if they are
   3619      different sequences of characters.  However, sometimes when
   3620      characters outside the basic ASCII character set are used, you can
   3621      have two different character sequences that look the same.  To
   3622      avoid confusion, the ISO 10646 standard sets out some
   3623      "normalization rules" which when applied ensure that two sequences
   3624      that look the same are turned into the same sequence.  GCC can
   3625      warn you if you are using identifiers which have not been
   3626      normalized; this option controls that warning.
   3627 
   3628      There are four levels of warning that GCC supports.  The default is
   3629      `-Wnormalized=nfc', which warns about any identifier which is not
   3630      in the ISO 10646 "C" normalized form, "NFC".  NFC is the
   3631      recommended form for most uses.
   3632 
   3633      Unfortunately, there are some characters which ISO C and ISO C++
   3634      allow in identifiers that when turned into NFC aren't allowable as
   3635      identifiers.  That is, there's no way to use these symbols in
   3636      portable ISO C or C++ and have all your identifiers in NFC.
   3637      `-Wnormalized=id' suppresses the warning for these characters.  It
   3638      is hoped that future versions of the standards involved will
   3639      correct this, which is why this option is not the default.
   3640 
   3641      You can switch the warning off for all characters by writing
   3642      `-Wnormalized=none'.  You would only want to do this if you were
   3643      using some other normalization scheme (like "D"), because
   3644      otherwise you can easily create bugs that are literally impossible
   3645      to see.
   3646 
   3647      Some characters in ISO 10646 have distinct meanings but look
   3648      identical in some fonts or display methodologies, especially once
   3649      formatting has been applied.  For instance `\u207F', "SUPERSCRIPT
   3650      LATIN SMALL LETTER N", will display just like a regular `n' which
   3651      has been placed in a superscript.  ISO 10646 defines the "NFKC"
   3652      normalization scheme to convert all these into a standard form as
   3653      well, and GCC will warn if your code is not in NFKC if you use
   3654      `-Wnormalized=nfkc'.  This warning is comparable to warning about
   3655      every identifier that contains the letter O because it might be
   3656      confused with the digit 0, and so is not the default, but may be
   3657      useful as a local coding convention if the programming environment
   3658      is unable to be fixed to display these characters distinctly.
   3659 
   3660 `-Wno-deprecated-declarations'
   3661      Do not warn about uses of functions (*note Function Attributes::),
   3662      variables (*note Variable Attributes::), and types (*note Type
   3663      Attributes::) marked as deprecated by using the `deprecated'
   3664      attribute.
   3665 
   3666 `-Wno-overflow'
   3667      Do not warn about compile-time overflow in constant expressions.
   3668 
   3669 `-Woverride-init (C and Objective-C only)'
   3670      Warn if an initialized field without side effects is overridden
   3671      when using designated initializers (*note Designated Initializers:
   3672      Designated Inits.).
   3673 
   3674      This warning is included in `-Wextra'.  To get other `-Wextra'
   3675      warnings without this one, use `-Wextra -Wno-override-init'.
   3676 
   3677 `-Wpacked'
   3678      Warn if a structure is given the packed attribute, but the packed
   3679      attribute has no effect on the layout or size of the structure.
   3680      Such structures may be mis-aligned for little benefit.  For
   3681      instance, in this code, the variable `f.x' in `struct bar' will be
   3682      misaligned even though `struct bar' does not itself have the
   3683      packed attribute:
   3684 
   3685           struct foo {
   3686             int x;
   3687             char a, b, c, d;
   3688           } __attribute__((packed));
   3689           struct bar {
   3690             char z;
   3691             struct foo f;
   3692           };
   3693 
   3694 `-Wpadded'
   3695      Warn if padding is included in a structure, either to align an
   3696      element of the structure or to align the whole structure.
   3697      Sometimes when this happens it is possible to rearrange the fields
   3698      of the structure to reduce the padding and so make the structure
   3699      smaller.
   3700 
   3701 `-Wredundant-decls'
   3702      Warn if anything is declared more than once in the same scope,
   3703      even in cases where multiple declaration is valid and changes
   3704      nothing.
   3705 
   3706 `-Wnested-externs (C and Objective-C only)'
   3707      Warn if an `extern' declaration is encountered within a function.
   3708 
   3709 `-Wunreachable-code'
   3710      Warn if the compiler detects that code will never be executed.
   3711 
   3712      This option is intended to warn when the compiler detects that at
   3713      least a whole line of source code will never be executed, because
   3714      some condition is never satisfied or because it is after a
   3715      procedure that never returns.
   3716 
   3717      It is possible for this option to produce a warning even though
   3718      there are circumstances under which part of the affected line can
   3719      be executed, so care should be taken when removing
   3720      apparently-unreachable code.
   3721 
   3722      For instance, when a function is inlined, a warning may mean that
   3723      the line is unreachable in only one inlined copy of the function.
   3724 
   3725      This option is not made part of `-Wall' because in a debugging
   3726      version of a program there is often substantial code which checks
   3727      correct functioning of the program and is, hopefully, unreachable
   3728      because the program does work.  Another common use of unreachable
   3729      code is to provide behavior which is selectable at compile-time.
   3730 
   3731 `-Winline'
   3732      Warn if a function can not be inlined and it was declared as
   3733      inline.  Even with this option, the compiler will not warn about
   3734      failures to inline functions declared in system headers.
   3735 
   3736      The compiler uses a variety of heuristics to determine whether or
   3737      not to inline a function.  For example, the compiler takes into
   3738      account the size of the function being inlined and the amount of
   3739      inlining that has already been done in the current function.
   3740      Therefore, seemingly insignificant changes in the source program
   3741      can cause the warnings produced by `-Winline' to appear or
   3742      disappear.
   3743 
   3744 `-Wno-invalid-offsetof (C++ and Objective-C++ only)'
   3745      Suppress warnings from applying the `offsetof' macro to a non-POD
   3746      type.  According to the 1998 ISO C++ standard, applying `offsetof'
   3747      to a non-POD type is undefined.  In existing C++ implementations,
   3748      however, `offsetof' typically gives meaningful results even when
   3749      applied to certain kinds of non-POD types. (Such as a simple
   3750      `struct' that fails to be a POD type only by virtue of having a
   3751      constructor.)  This flag is for users who are aware that they are
   3752      writing nonportable code and who have deliberately chosen to
   3753      ignore the warning about it.
   3754 
   3755      The restrictions on `offsetof' may be relaxed in a future version
   3756      of the C++ standard.
   3757 
   3758 `-Wno-int-to-pointer-cast (C and Objective-C only)'
   3759      Suppress warnings from casts to pointer type of an integer of a
   3760      different size.
   3761 
   3762 `-Wno-pointer-to-int-cast (C and Objective-C only)'
   3763      Suppress warnings from casts from a pointer to an integer type of a
   3764      different size.
   3765 
   3766 `-Winvalid-pch'
   3767      Warn if a precompiled header (*note Precompiled Headers::) is
   3768      found in the search path but can't be used.
   3769 
   3770 `-Wlong-long'
   3771      Warn if `long long' type is used.  This is default.  To inhibit
   3772      the warning messages, use `-Wno-long-long'.  Flags `-Wlong-long'
   3773      and `-Wno-long-long' are taken into account only when `-pedantic'
   3774      flag is used.
   3775 
   3776 `-Wvariadic-macros'
   3777      Warn if variadic macros are used in pedantic ISO C90 mode, or the
   3778      GNU alternate syntax when in pedantic ISO C99 mode.  This is
   3779      default.  To inhibit the warning messages, use
   3780      `-Wno-variadic-macros'.
   3781 
   3782 `-Wvla'
   3783      Warn if variable length array is used in the code.  `-Wno-vla'
   3784      will prevent the `-pedantic' warning of the variable length array.
   3785 
   3786 `-Wvolatile-register-var'
   3787      Warn if a register variable is declared volatile.  The volatile
   3788      modifier does not inhibit all optimizations that may eliminate
   3789      reads and/or writes to register variables.
   3790 
   3791 `-Wdisabled-optimization'
   3792      Warn if a requested optimization pass is disabled.  This warning
   3793      does not generally indicate that there is anything wrong with your
   3794      code; it merely indicates that GCC's optimizers were unable to
   3795      handle the code effectively.  Often, the problem is that your code
   3796      is too big or too complex; GCC will refuse to optimize programs
   3797      when the optimization itself is likely to take inordinate amounts
   3798      of time.
   3799 
   3800 `-Wpointer-sign (C and Objective-C only)'
   3801      Warn for pointer argument passing or assignment with different
   3802      signedness.  This option is only supported for C and Objective-C.
   3803      It is implied by `-Wall' and by `-pedantic', which can be disabled
   3804      with `-Wno-pointer-sign'.
   3805 
   3806 `-Wstack-protector'
   3807      This option is only active when `-fstack-protector' is active.  It
   3808      warns about functions that will not be protected against stack
   3809      smashing.
   3810 
   3811 `-Woverlength-strings'
   3812      Warn about string constants which are longer than the "minimum
   3813      maximum" length specified in the C standard.  Modern compilers
   3814      generally allow string constants which are much longer than the
   3815      standard's minimum limit, but very portable programs should avoid
   3816      using longer strings.
   3817 
   3818      The limit applies _after_ string constant concatenation, and does
   3819      not count the trailing NUL.  In C89, the limit was 509 characters;
   3820      in C99, it was raised to 4095.  C++98 does not specify a normative
   3821      minimum maximum, so we do not diagnose overlength strings in C++.
   3822 
   3823      This option is implied by `-pedantic', and can be disabled with
   3824      `-Wno-overlength-strings'.
   3825 
   3826 
   3827 File: gcc.info,  Node: Debugging Options,  Next: Optimize Options,  Prev: Warning Options,  Up: Invoking GCC
   3828 
   3829 3.9 Options for Debugging Your Program or GCC
   3830 =============================================
   3831 
   3832 GCC has various special options that are used for debugging either your
   3833 program or GCC:
   3834 
   3835 `-g'
   3836      Produce debugging information in the operating system's native
   3837      format (stabs, COFF, XCOFF, or DWARF 2).  GDB can work with this
   3838      debugging information.
   3839 
   3840      On most systems that use stabs format, `-g' enables use of extra
   3841      debugging information that only GDB can use; this extra information
   3842      makes debugging work better in GDB but will probably make other
   3843      debuggers crash or refuse to read the program.  If you want to
   3844      control for certain whether to generate the extra information, use
   3845      `-gstabs+', `-gstabs', `-gxcoff+', `-gxcoff', or `-gvms' (see
   3846      below).
   3847 
   3848      GCC allows you to use `-g' with `-O'.  The shortcuts taken by
   3849      optimized code may occasionally produce surprising results: some
   3850      variables you declared may not exist at all; flow of control may
   3851      briefly move where you did not expect it; some statements may not
   3852      be executed because they compute constant results or their values
   3853      were already at hand; some statements may execute in different
   3854      places because they were moved out of loops.
   3855 
   3856      Nevertheless it proves possible to debug optimized output.  This
   3857      makes it reasonable to use the optimizer for programs that might
   3858      have bugs.
   3859 
   3860      The following options are useful when GCC is generated with the
   3861      capability for more than one debugging format.
   3862 
   3863 `-ggdb'
   3864      Produce debugging information for use by GDB.  This means to use
   3865      the most expressive format available (DWARF 2, stabs, or the
   3866      native format if neither of those are supported), including GDB
   3867      extensions if at all possible.
   3868 
   3869 `-gstabs'
   3870      Produce debugging information in stabs format (if that is
   3871      supported), without GDB extensions.  This is the format used by
   3872      DBX on most BSD systems.  On MIPS, Alpha and System V Release 4
   3873      systems this option produces stabs debugging output which is not
   3874      understood by DBX or SDB.  On System V Release 4 systems this
   3875      option requires the GNU assembler.
   3876 
   3877 `-feliminate-unused-debug-symbols'
   3878      Produce debugging information in stabs format (if that is
   3879      supported), for only symbols that are actually used.
   3880 
   3881 `-femit-class-debug-always'
   3882      Instead of emitting debugging information for a C++ class in only
   3883      one object file, emit it in all object files using the class.
   3884      This option should be used only with debuggers that are unable to
   3885      handle the way GCC normally emits debugging information for
   3886      classes because using this option will increase the size of
   3887      debugging information by as much as a factor of two.
   3888 
   3889 `-gstabs+'
   3890      Produce debugging information in stabs format (if that is
   3891      supported), using GNU extensions understood only by the GNU
   3892      debugger (GDB).  The use of these extensions is likely to make
   3893      other debuggers crash or refuse to read the program.
   3894 
   3895 `-gcoff'
   3896      Produce debugging information in COFF format (if that is
   3897      supported).  This is the format used by SDB on most System V
   3898      systems prior to System V Release 4.
   3899 
   3900 `-gxcoff'
   3901      Produce debugging information in XCOFF format (if that is
   3902      supported).  This is the format used by the DBX debugger on IBM
   3903      RS/6000 systems.
   3904 
   3905 `-gxcoff+'
   3906      Produce debugging information in XCOFF format (if that is
   3907      supported), using GNU extensions understood only by the GNU
   3908      debugger (GDB).  The use of these extensions is likely to make
   3909      other debuggers crash or refuse to read the program, and may cause
   3910      assemblers other than the GNU assembler (GAS) to fail with an
   3911      error.
   3912 
   3913 `-gdwarf-2'
   3914      Produce debugging information in DWARF version 2 format (if that is
   3915      supported).  This is the format used by DBX on IRIX 6.  With this
   3916      option, GCC uses features of DWARF version 3 when they are useful;
   3917      version 3 is upward compatible with version 2, but may still cause
   3918      problems for older debuggers.
   3919 
   3920 `-gvms'
   3921      Produce debugging information in VMS debug format (if that is
   3922      supported).  This is the format used by DEBUG on VMS systems.
   3923 
   3924 `-gLEVEL'
   3925 `-ggdbLEVEL'
   3926 `-gstabsLEVEL'
   3927 `-gcoffLEVEL'
   3928 `-gxcoffLEVEL'
   3929 `-gvmsLEVEL'
   3930      Request debugging information and also use LEVEL to specify how
   3931      much information.  The default level is 2.
   3932 
   3933      Level 0 produces no debug information at all.  Thus, `-g0' negates
   3934      `-g'.
   3935 
   3936      Level 1 produces minimal information, enough for making backtraces
   3937      in parts of the program that you don't plan to debug.  This
   3938      includes descriptions of functions and external variables, but no
   3939      information about local variables and no line numbers.
   3940 
   3941      Level 3 includes extra information, such as all the macro
   3942      definitions present in the program.  Some debuggers support macro
   3943      expansion when you use `-g3'.
   3944 
   3945      `-gdwarf-2' does not accept a concatenated debug level, because
   3946      GCC used to support an option `-gdwarf' that meant to generate
   3947      debug information in version 1 of the DWARF format (which is very
   3948      different from version 2), and it would have been too confusing.
   3949      That debug format is long obsolete, but the option cannot be
   3950      changed now.  Instead use an additional `-gLEVEL' option to change
   3951      the debug level for DWARF2.
   3952 
   3953 `-feliminate-dwarf2-dups'
   3954      Compress DWARF2 debugging information by eliminating duplicated
   3955      information about each symbol.  This option only makes sense when
   3956      generating DWARF2 debugging information with `-gdwarf-2'.
   3957 
   3958 `-femit-struct-debug-baseonly'
   3959      Emit debug information for struct-like types only when the base
   3960      name of the compilation source file matches the base name of file
   3961      in which the struct was defined.
   3962 
   3963      This option substantially reduces the size of debugging
   3964      information, but at significant potential loss in type information
   3965      to the debugger.  See `-femit-struct-debug-reduced' for a less
   3966      aggressive option.  See `-femit-struct-debug-detailed' for more
   3967      detailed control.
   3968 
   3969      This option works only with DWARF 2.
   3970 
   3971 `-femit-struct-debug-reduced'
   3972      Emit debug information for struct-like types only when the base
   3973      name of the compilation source file matches the base name of file
   3974      in which the type was defined, unless the struct is a template or
   3975      defined in a system header.
   3976 
   3977      This option significantly reduces the size of debugging
   3978      information, with some potential loss in type information to the
   3979      debugger.  See `-femit-struct-debug-baseonly' for a more
   3980      aggressive option.  See `-femit-struct-debug-detailed' for more
   3981      detailed control.
   3982 
   3983      This option works only with DWARF 2.
   3984 
   3985 `-femit-struct-debug-detailed[=SPEC-LIST]'
   3986      Specify the struct-like types for which the compiler will generate
   3987      debug information.  The intent is to reduce duplicate struct debug
   3988      information between different object files within the same program.
   3989 
   3990      This option is a detailed version of `-femit-struct-debug-reduced'
   3991      and `-femit-struct-debug-baseonly', which will serve for most
   3992      needs.
   3993 
   3994      A specification has the syntax
   3995      [`dir:'|`ind:'][`ord:'|`gen:'](`any'|`sys'|`base'|`none')
   3996 
   3997      The optional first word limits the specification to structs that
   3998      are used directly (`dir:') or used indirectly (`ind:').  A struct
   3999      type is used directly when it is the type of a variable, member.
   4000      Indirect uses arise through pointers to structs.  That is, when
   4001      use of an incomplete struct would be legal, the use is indirect.
   4002      An example is `struct one direct; struct two * indirect;'.
   4003 
   4004      The optional second word limits the specification to ordinary
   4005      structs (`ord:') or generic structs (`gen:').  Generic structs are
   4006      a bit complicated to explain.  For C++, these are non-explicit
   4007      specializations of template classes, or non-template classes
   4008      within the above.  Other programming languages have generics, but
   4009      `-femit-struct-debug-detailed' does not yet implement them.
   4010 
   4011      The third word specifies the source files for those structs for
   4012      which the compiler will emit debug information.  The values `none'
   4013      and `any' have the normal meaning.  The value `base' means that
   4014      the base of name of the file in which the type declaration appears
   4015      must match the base of the name of the main compilation file.  In
   4016      practice, this means that types declared in `foo.c' and `foo.h'
   4017      will have debug information, but types declared in other header
   4018      will not.  The value `sys' means those types satisfying `base' or
   4019      declared in system or compiler headers.
   4020 
   4021      You may need to experiment to determine the best settings for your
   4022      application.
   4023 
   4024      The default is `-femit-struct-debug-detailed=all'.
   4025 
   4026      This option works only with DWARF 2.
   4027 
   4028 `-fno-merge-debug-strings'
   4029      Direct the linker to merge together strings which are identical in
   4030      different object files.  This is not supported by all assemblers or
   4031      linker.  This decreases the size of the debug information in the
   4032      output file at the cost of increasing link processing time.  This
   4033      is on by default.
   4034 
   4035 `-fdebug-prefix-map=OLD=NEW'
   4036      When compiling files in directory `OLD', record debugging
   4037      information describing them as in `NEW' instead.
   4038 
   4039 `-p'
   4040      Generate extra code to write profile information suitable for the
   4041      analysis program `prof'.  You must use this option when compiling
   4042      the source files you want data about, and you must also use it when
   4043      linking.
   4044 
   4045 `-pg'
   4046      Generate extra code to write profile information suitable for the
   4047      analysis program `gprof'.  You must use this option when compiling
   4048      the source files you want data about, and you must also use it when
   4049      linking.
   4050 
   4051 `-Q'
   4052      Makes the compiler print out each function name as it is compiled,
   4053      and print some statistics about each pass when it finishes.
   4054 
   4055 `-ftime-report'
   4056      Makes the compiler print some statistics about the time consumed
   4057      by each pass when it finishes.
   4058 
   4059 `-fmem-report'
   4060      Makes the compiler print some statistics about permanent memory
   4061      allocation when it finishes.
   4062 
   4063 `-fpre-ipa-mem-report'
   4064 
   4065 `-fpost-ipa-mem-report'
   4066      Makes the compiler print some statistics about permanent memory
   4067      allocation before or after interprocedural optimization.
   4068 
   4069 `-fprofile-arcs'
   4070      Add code so that program flow "arcs" are instrumented.  During
   4071      execution the program records how many times each branch and call
   4072      is executed and how many times it is taken or returns.  When the
   4073      compiled program exits it saves this data to a file called
   4074      `AUXNAME.gcda' for each source file.  The data may be used for
   4075      profile-directed optimizations (`-fbranch-probabilities'), or for
   4076      test coverage analysis (`-ftest-coverage').  Each object file's
   4077      AUXNAME is generated from the name of the output file, if
   4078      explicitly specified and it is not the final executable, otherwise
   4079      it is the basename of the source file.  In both cases any suffix
   4080      is removed (e.g. `foo.gcda' for input file `dir/foo.c', or
   4081      `dir/foo.gcda' for output file specified as `-o dir/foo.o').
   4082      *Note Cross-profiling::.
   4083 
   4084 `--coverage'
   4085      This option is used to compile and link code instrumented for
   4086      coverage analysis.  The option is a synonym for `-fprofile-arcs'
   4087      `-ftest-coverage' (when compiling) and `-lgcov' (when linking).
   4088      See the documentation for those options for more details.
   4089 
   4090         * Compile the source files with `-fprofile-arcs' plus
   4091           optimization and code generation options.  For test coverage
   4092           analysis, use the additional `-ftest-coverage' option.  You
   4093           do not need to profile every source file in a program.
   4094 
   4095         * Link your object files with `-lgcov' or `-fprofile-arcs' (the
   4096           latter implies the former).
   4097 
   4098         * Run the program on a representative workload to generate the
   4099           arc profile information.  This may be repeated any number of
   4100           times.  You can run concurrent instances of your program, and
   4101           provided that the file system supports locking, the data
   4102           files will be correctly updated.  Also `fork' calls are
   4103           detected and correctly handled (double counting will not
   4104           happen).
   4105 
   4106         * For profile-directed optimizations, compile the source files
   4107           again with the same optimization and code generation options
   4108           plus `-fbranch-probabilities' (*note Options that Control
   4109           Optimization: Optimize Options.).
   4110 
   4111         * For test coverage analysis, use `gcov' to produce human
   4112           readable information from the `.gcno' and `.gcda' files.
   4113           Refer to the `gcov' documentation for further information.
   4114 
   4115 
   4116      With `-fprofile-arcs', for each function of your program GCC
   4117      creates a program flow graph, then finds a spanning tree for the
   4118      graph.  Only arcs that are not on the spanning tree have to be
   4119      instrumented: the compiler adds code to count the number of times
   4120      that these arcs are executed.  When an arc is the only exit or
   4121      only entrance to a block, the instrumentation code can be added to
   4122      the block; otherwise, a new basic block must be created to hold
   4123      the instrumentation code.
   4124 
   4125 `-ftest-coverage'
   4126      Produce a notes file that the `gcov' code-coverage utility (*note
   4127      `gcov'--a Test Coverage Program: Gcov.) can use to show program
   4128      coverage.  Each source file's note file is called `AUXNAME.gcno'.
   4129      Refer to the `-fprofile-arcs' option above for a description of
   4130      AUXNAME and instructions on how to generate test coverage data.
   4131      Coverage data will match the source files more closely, if you do
   4132      not optimize.
   4133 
   4134 `-fdbg-cnt-list'
   4135      Print the name and the counter upperbound for all debug counters.
   4136 
   4137 `-fdbg-cnt=COUNTER-VALUE-LIST'
   4138      Set the internal debug counter upperbound. COUNTER-VALUE-LIST is a
   4139      comma-separated list of NAME:VALUE pairs which sets the upperbound
   4140      of each debug counter NAME to VALUE.  All debug counters have the
   4141      initial upperbound of UINT_MAX, thus dbg_cnt() returns true always
   4142      unless the upperbound is set by this option.  e.g. With
   4143      -fdbg-cnt=dce:10,tail_call:0 dbg_cnt(dce) will return true only
   4144      for first 10 invocations and dbg_cnt(tail_call) will return false
   4145      always.
   4146 
   4147 `-dLETTERS'
   4148 
   4149 `-fdump-rtl-PASS'
   4150      Says to make debugging dumps during compilation at times specified
   4151      by LETTERS.    This is used for debugging the RTL-based passes of
   4152      the compiler.  The file names for most of the dumps are made by
   4153      appending a pass number and a word to the DUMPNAME.  DUMPNAME is
   4154      generated from the name of the output file, if explicitly
   4155      specified and it is not an executable, otherwise it is the
   4156      basename of the source file. These switches may have different
   4157      effects when `-E' is used for preprocessing.
   4158 
   4159      Most debug dumps can be enabled either passing a letter to the `-d'
   4160      option, or with a long `-fdump-rtl' switch; here are the possible
   4161      letters for use in LETTERS and PASS, and their meanings:
   4162 
   4163     `-dA'
   4164           Annotate the assembler output with miscellaneous debugging
   4165           information.
   4166 
   4167     `-dB'
   4168     `-fdump-rtl-bbro'
   4169           Dump after block reordering, to `FILE.148r.bbro'.
   4170 
   4171     `-dc'
   4172     `-fdump-rtl-combine'
   4173           Dump after the RTL instruction combination pass, to the file
   4174           `FILE.129r.combine'.
   4175 
   4176     `-dC'
   4177     `-fdump-rtl-ce1'
   4178     `-fdump-rtl-ce2'
   4179           `-dC' and `-fdump-rtl-ce1' enable dumping after the first if
   4180           conversion, to the file `FILE.117r.ce1'.  `-dC' and
   4181           `-fdump-rtl-ce2' enable dumping after the second if
   4182           conversion, to the file `FILE.130r.ce2'.
   4183 
   4184     `-dd'
   4185     `-fdump-rtl-btl'
   4186     `-fdump-rtl-dbr'
   4187           `-dd' and `-fdump-rtl-btl' enable dumping after branch target
   4188           load optimization, to `FILE.31.btl'.  `-dd' and
   4189           `-fdump-rtl-dbr' enable dumping after delayed branch
   4190           scheduling, to `FILE.36.dbr'.
   4191 
   4192     `-dD'
   4193           Dump all macro definitions, at the end of preprocessing, in
   4194           addition to normal output.
   4195 
   4196     `-dE'
   4197     `-fdump-rtl-ce3'
   4198           Dump after the third if conversion, to `FILE.146r.ce3'.
   4199 
   4200     `-df'
   4201     `-fdump-rtl-cfg'
   4202     `-fdump-rtl-life'
   4203           `-df' and `-fdump-rtl-cfg' enable dumping after control and
   4204           data flow analysis, to `FILE.116r.cfg'.  `-df' and
   4205           `-fdump-rtl-cfg' enable dumping dump after life analysis, to
   4206           `FILE.128r.life1' and `FILE.135r.life2'.
   4207 
   4208     `-dg'
   4209     `-fdump-rtl-greg'
   4210           Dump after global register allocation, to `FILE.139r.greg'.
   4211 
   4212     `-dG'
   4213     `-fdump-rtl-gcse'
   4214     `-fdump-rtl-bypass'
   4215           `-dG' and `-fdump-rtl-gcse' enable dumping after GCSE, to
   4216           `FILE.114r.gcse'.  `-dG' and `-fdump-rtl-bypass' enable
   4217           dumping after jump bypassing and control flow optimizations,
   4218           to `FILE.115r.bypass'.
   4219 
   4220     `-dh'
   4221     `-fdump-rtl-eh'
   4222           Dump after finalization of EH handling code, to `FILE.02.eh'.
   4223 
   4224     `-di'
   4225     `-fdump-rtl-sibling'
   4226           Dump after sibling call optimizations, to `FILE.106r.sibling'.
   4227 
   4228     `-dj'
   4229     `-fdump-rtl-jump'
   4230           Dump after the first jump optimization, to `FILE.112r.jump'.
   4231 
   4232     `-dk'
   4233     `-fdump-rtl-stack'
   4234           Dump after conversion from GCC's "flat register file"
   4235           registers to the x87's stack-like registers, to
   4236           `FILE.152r.stack'.
   4237 
   4238     `-dl'
   4239     `-fdump-rtl-lreg'
   4240           Dump after local register allocation, to `FILE.138r.lreg'.
   4241 
   4242     `-dL'
   4243     `-fdump-rtl-loop2'
   4244           `-dL' and `-fdump-rtl-loop2' enable dumping after the loop
   4245           optimization pass, to `FILE.119r.loop2',
   4246           `FILE.120r.loop2_init', `FILE.121r.loop2_invariant', and
   4247           `FILE.125r.loop2_done'.
   4248 
   4249     `-dm'
   4250     `-fdump-rtl-sms'
   4251           Dump after modulo scheduling, to `FILE.136r.sms'.
   4252 
   4253     `-dM'
   4254     `-fdump-rtl-mach'
   4255           Dump after performing the machine dependent reorganization
   4256           pass, to `FILE.155r.mach' if that pass exists.
   4257 
   4258     `-dn'
   4259     `-fdump-rtl-rnreg'
   4260           Dump after register renumbering, to `FILE.147r.rnreg'.
   4261 
   4262     `-dN'
   4263     `-fdump-rtl-regmove'
   4264           Dump after the register move pass, to `FILE.132r.regmove'.
   4265 
   4266     `-do'
   4267     `-fdump-rtl-postreload'
   4268           Dump after post-reload optimizations, to `FILE.24.postreload'.
   4269 
   4270     `-dr'
   4271     `-fdump-rtl-expand'
   4272           Dump after RTL generation, to `FILE.104r.expand'.
   4273 
   4274     `-dR'
   4275     `-fdump-rtl-sched2'
   4276           Dump after the second scheduling pass, to `FILE.149r.sched2'.
   4277 
   4278     `-ds'
   4279     `-fdump-rtl-cse'
   4280           Dump after CSE (including the jump optimization that
   4281           sometimes follows CSE), to `FILE.113r.cse'.
   4282 
   4283     `-dS'
   4284     `-fdump-rtl-sched1'
   4285           Dump after the first scheduling pass, to `FILE.136r.sched1'.
   4286 
   4287     `-dt'
   4288     `-fdump-rtl-cse2'
   4289           Dump after the second CSE pass (including the jump
   4290           optimization that sometimes follows CSE), to `FILE.127r.cse2'.
   4291 
   4292     `-dT'
   4293     `-fdump-rtl-tracer'
   4294           Dump after running tracer, to `FILE.118r.tracer'.
   4295 
   4296     `-dV'
   4297     `-fdump-rtl-vpt'
   4298     `-fdump-rtl-vartrack'
   4299           `-dV' and `-fdump-rtl-vpt' enable dumping after the value
   4300           profile transformations, to `FILE.10.vpt'.  `-dV' and
   4301           `-fdump-rtl-vartrack' enable dumping after variable tracking,
   4302           to `FILE.154r.vartrack'.
   4303 
   4304     `-dw'
   4305     `-fdump-rtl-flow2'
   4306           Dump after the second flow pass, to `FILE.142r.flow2'.
   4307 
   4308     `-dz'
   4309     `-fdump-rtl-peephole2'
   4310           Dump after the peephole pass, to `FILE.145r.peephole2'.
   4311 
   4312     `-dZ'
   4313     `-fdump-rtl-web'
   4314           Dump after live range splitting, to `FILE.126r.web'.
   4315 
   4316     `-da'
   4317     `-fdump-rtl-all'
   4318           Produce all the dumps listed above.
   4319 
   4320     `-dH'
   4321           Produce a core dump whenever an error occurs.
   4322 
   4323     `-dm'
   4324           Print statistics on memory usage, at the end of the run, to
   4325           standard error.
   4326 
   4327     `-dp'
   4328           Annotate the assembler output with a comment indicating which
   4329           pattern and alternative was used.  The length of each
   4330           instruction is also printed.
   4331 
   4332     `-dP'
   4333           Dump the RTL in the assembler output as a comment before each
   4334           instruction.  Also turns on `-dp' annotation.
   4335 
   4336     `-dv'
   4337           For each of the other indicated dump files (either with `-d'
   4338           or `-fdump-rtl-PASS'), dump a representation of the control
   4339           flow graph suitable for viewing with VCG to `FILE.PASS.vcg'.
   4340 
   4341     `-dx'
   4342           Just generate RTL for a function instead of compiling it.
   4343           Usually used with `r' (`-fdump-rtl-expand').
   4344 
   4345     `-dy'
   4346           Dump debugging information during parsing, to standard error.
   4347 
   4348 `-fdump-noaddr'
   4349      When doing debugging dumps (see `-d' option above), suppress
   4350      address output.  This makes it more feasible to use diff on
   4351      debugging dumps for compiler invocations with different compiler
   4352      binaries and/or different text / bss / data / heap / stack / dso
   4353      start locations.
   4354 
   4355 `-fdump-unnumbered'
   4356      When doing debugging dumps (see `-d' option above), suppress
   4357      instruction numbers and address output.  This makes it more
   4358      feasible to use diff on debugging dumps for compiler invocations
   4359      with different options, in particular with and without `-g'.
   4360 
   4361 `-fdump-translation-unit (C++ only)'
   4362 `-fdump-translation-unit-OPTIONS (C++ only)'
   4363      Dump a representation of the tree structure for the entire
   4364      translation unit to a file.  The file name is made by appending
   4365      `.tu' to the source file name.  If the `-OPTIONS' form is used,
   4366      OPTIONS controls the details of the dump as described for the
   4367      `-fdump-tree' options.
   4368 
   4369 `-fdump-class-hierarchy (C++ only)'
   4370 `-fdump-class-hierarchy-OPTIONS (C++ only)'
   4371      Dump a representation of each class's hierarchy and virtual
   4372      function table layout to a file.  The file name is made by
   4373      appending `.class' to the source file name.  If the `-OPTIONS'
   4374      form is used, OPTIONS controls the details of the dump as
   4375      described for the `-fdump-tree' options.
   4376 
   4377 `-fdump-ipa-SWITCH'
   4378      Control the dumping at various stages of inter-procedural analysis
   4379      language tree to a file.  The file name is generated by appending
   4380      a switch specific suffix to the source file name.  The following
   4381      dumps are possible:
   4382 
   4383     `all'
   4384           Enables all inter-procedural analysis dumps.
   4385 
   4386     `cgraph'
   4387           Dumps information about call-graph optimization, unused
   4388           function removal, and inlining decisions.
   4389 
   4390     `inline'
   4391           Dump after function inlining.
   4392 
   4393 
   4394 `-fdump-tree-SWITCH'
   4395 `-fdump-tree-SWITCH-OPTIONS'
   4396      Control the dumping at various stages of processing the
   4397      intermediate language tree to a file.  The file name is generated
   4398      by appending a switch specific suffix to the source file name.  If
   4399      the `-OPTIONS' form is used, OPTIONS is a list of `-' separated
   4400      options that control the details of the dump.  Not all options are
   4401      applicable to all dumps, those which are not meaningful will be
   4402      ignored.  The following options are available
   4403 
   4404     `address'
   4405           Print the address of each node.  Usually this is not
   4406           meaningful as it changes according to the environment and
   4407           source file.  Its primary use is for tying up a dump file
   4408           with a debug environment.
   4409 
   4410     `slim'
   4411           Inhibit dumping of members of a scope or body of a function
   4412           merely because that scope has been reached.  Only dump such
   4413           items when they are directly reachable by some other path.
   4414           When dumping pretty-printed trees, this option inhibits
   4415           dumping the bodies of control structures.
   4416 
   4417     `raw'
   4418           Print a raw representation of the tree.  By default, trees are
   4419           pretty-printed into a C-like representation.
   4420 
   4421     `details'
   4422           Enable more detailed dumps (not honored by every dump option).
   4423 
   4424     `stats'
   4425           Enable dumping various statistics about the pass (not honored
   4426           by every dump option).
   4427 
   4428     `blocks'
   4429           Enable showing basic block boundaries (disabled in raw dumps).
   4430 
   4431     `vops'
   4432           Enable showing virtual operands for every statement.
   4433 
   4434     `lineno'
   4435           Enable showing line numbers for statements.
   4436 
   4437     `uid'
   4438           Enable showing the unique ID (`DECL_UID') for each variable.
   4439 
   4440     `all'
   4441           Turn on all options, except `raw', `slim' and `lineno'.
   4442 
   4443      The following tree dumps are possible:
   4444     `original'
   4445           Dump before any tree based optimization, to `FILE.original'.
   4446 
   4447     `optimized'
   4448           Dump after all tree based optimization, to `FILE.optimized'.
   4449 
   4450     `gimple'
   4451           Dump each function before and after the gimplification pass
   4452           to a file.  The file name is made by appending `.gimple' to
   4453           the source file name.
   4454 
   4455     `cfg'
   4456           Dump the control flow graph of each function to a file.  The
   4457           file name is made by appending `.cfg' to the source file name.
   4458 
   4459     `vcg'
   4460           Dump the control flow graph of each function to a file in VCG
   4461           format.  The file name is made by appending `.vcg' to the
   4462           source file name.  Note that if the file contains more than
   4463           one function, the generated file cannot be used directly by
   4464           VCG.  You will need to cut and paste each function's graph
   4465           into its own separate file first.
   4466 
   4467     `ch'
   4468           Dump each function after copying loop headers.  The file name
   4469           is made by appending `.ch' to the source file name.
   4470 
   4471     `ssa'
   4472           Dump SSA related information to a file.  The file name is
   4473           made by appending `.ssa' to the source file name.
   4474 
   4475     `salias'
   4476           Dump structure aliasing variable information to a file.  This
   4477           file name is made by appending `.salias' to the source file
   4478           name.
   4479 
   4480     `alias'
   4481           Dump aliasing information for each function.  The file name
   4482           is made by appending `.alias' to the source file name.
   4483 
   4484     `ccp'
   4485           Dump each function after CCP.  The file name is made by
   4486           appending `.ccp' to the source file name.
   4487 
   4488     `storeccp'
   4489           Dump each function after STORE-CCP.  The file name is made by
   4490           appending `.storeccp' to the source file name.
   4491 
   4492     `pre'
   4493           Dump trees after partial redundancy elimination.  The file
   4494           name is made by appending `.pre' to the source file name.
   4495 
   4496     `fre'
   4497           Dump trees after full redundancy elimination.  The file name
   4498           is made by appending `.fre' to the source file name.
   4499 
   4500     `copyprop'
   4501           Dump trees after copy propagation.  The file name is made by
   4502           appending `.copyprop' to the source file name.
   4503 
   4504     `store_copyprop'
   4505           Dump trees after store copy-propagation.  The file name is
   4506           made by appending `.store_copyprop' to the source file name.
   4507 
   4508     `dce'
   4509           Dump each function after dead code elimination.  The file
   4510           name is made by appending `.dce' to the source file name.
   4511 
   4512     `mudflap'
   4513           Dump each function after adding mudflap instrumentation.  The
   4514           file name is made by appending `.mudflap' to the source file
   4515           name.
   4516 
   4517     `sra'
   4518           Dump each function after performing scalar replacement of
   4519           aggregates.  The file name is made by appending `.sra' to the
   4520           source file name.
   4521 
   4522     `sink'
   4523           Dump each function after performing code sinking.  The file
   4524           name is made by appending `.sink' to the source file name.
   4525 
   4526     `dom'
   4527           Dump each function after applying dominator tree
   4528           optimizations.  The file name is made by appending `.dom' to
   4529           the source file name.
   4530 
   4531     `dse'
   4532           Dump each function after applying dead store elimination.
   4533           The file name is made by appending `.dse' to the source file
   4534           name.
   4535 
   4536     `phiopt'
   4537           Dump each function after optimizing PHI nodes into
   4538           straightline code.  The file name is made by appending
   4539           `.phiopt' to the source file name.
   4540 
   4541     `forwprop'
   4542           Dump each function after forward propagating single use
   4543           variables.  The file name is made by appending `.forwprop' to
   4544           the source file name.
   4545 
   4546     `copyrename'
   4547           Dump each function after applying the copy rename
   4548           optimization.  The file name is made by appending
   4549           `.copyrename' to the source file name.
   4550 
   4551     `nrv'
   4552           Dump each function after applying the named return value
   4553           optimization on generic trees.  The file name is made by
   4554           appending `.nrv' to the source file name.
   4555 
   4556     `vect'
   4557           Dump each function after applying vectorization of loops.
   4558           The file name is made by appending `.vect' to the source file
   4559           name.
   4560 
   4561     `vrp'
   4562           Dump each function after Value Range Propagation (VRP).  The
   4563           file name is made by appending `.vrp' to the source file name.
   4564 
   4565     `all'
   4566           Enable all the available tree dumps with the flags provided
   4567           in this option.
   4568 
   4569 `-ftree-vectorizer-verbose=N'
   4570      This option controls the amount of debugging output the vectorizer
   4571      prints.  This information is written to standard error, unless
   4572      `-fdump-tree-all' or `-fdump-tree-vect' is specified, in which
   4573      case it is output to the usual dump listing file, `.vect'.  For
   4574      N=0 no diagnostic information is reported.  If N=1 the vectorizer
   4575      reports each loop that got vectorized, and the total number of
   4576      loops that got vectorized.  If N=2 the vectorizer also reports
   4577      non-vectorized loops that passed the first analysis phase
   4578      (vect_analyze_loop_form) - i.e. countable, inner-most, single-bb,
   4579      single-entry/exit loops.  This is the same verbosity level that
   4580      `-fdump-tree-vect-stats' uses.  Higher verbosity levels mean
   4581      either more information dumped for each reported loop, or same
   4582      amount of information reported for more loops: If N=3, alignment
   4583      related information is added to the reports.  If N=4,
   4584      data-references related information (e.g. memory dependences,
   4585      memory access-patterns) is added to the reports.  If N=5, the
   4586      vectorizer reports also non-vectorized inner-most loops that did
   4587      not pass the first analysis phase (i.e., may not be countable, or
   4588      may have complicated control-flow).  If N=6, the vectorizer
   4589      reports also non-vectorized nested loops.  For N=7, all the
   4590      information the vectorizer generates during its analysis and
   4591      transformation is reported.  This is the same verbosity level that
   4592      `-fdump-tree-vect-details' uses.
   4593 
   4594 `-frandom-seed=STRING'
   4595      This option provides a seed that GCC uses when it would otherwise
   4596      use random numbers.  It is used to generate certain symbol names
   4597      that have to be different in every compiled file.  It is also used
   4598      to place unique stamps in coverage data files and the object files
   4599      that produce them.  You can use the `-frandom-seed' option to
   4600      produce reproducibly identical object files.
   4601 
   4602      The STRING should be different for every file you compile.
   4603 
   4604 `-fsched-verbose=N'
   4605      On targets that use instruction scheduling, this option controls
   4606      the amount of debugging output the scheduler prints.  This
   4607      information is written to standard error, unless `-dS' or `-dR' is
   4608      specified, in which case it is output to the usual dump listing
   4609      file, `.sched' or `.sched2' respectively.  However for N greater
   4610      than nine, the output is always printed to standard error.
   4611 
   4612      For N greater than zero, `-fsched-verbose' outputs the same
   4613      information as `-dRS'.  For N greater than one, it also output
   4614      basic block probabilities, detailed ready list information and
   4615      unit/insn info.  For N greater than two, it includes RTL at abort
   4616      point, control-flow and regions info.  And for N over four,
   4617      `-fsched-verbose' also includes dependence info.
   4618 
   4619 `-save-temps'
   4620      Store the usual "temporary" intermediate files permanently; place
   4621      them in the current directory and name them based on the source
   4622      file.  Thus, compiling `foo.c' with `-c -save-temps' would produce
   4623      files `foo.i' and `foo.s', as well as `foo.o'.  This creates a
   4624      preprocessed `foo.i' output file even though the compiler now
   4625      normally uses an integrated preprocessor.
   4626 
   4627      When used in combination with the `-x' command line option,
   4628      `-save-temps' is sensible enough to avoid over writing an input
   4629      source file with the same extension as an intermediate file.  The
   4630      corresponding intermediate file may be obtained by renaming the
   4631      source file before using `-save-temps'.
   4632 
   4633 `-time'
   4634      Report the CPU time taken by each subprocess in the compilation
   4635      sequence.  For C source files, this is the compiler proper and
   4636      assembler (plus the linker if linking is done).  The output looks
   4637      like this:
   4638 
   4639           # cc1 0.12 0.01
   4640           # as 0.00 0.01
   4641 
   4642      The first number on each line is the "user time", that is time
   4643      spent executing the program itself.  The second number is "system
   4644      time", time spent executing operating system routines on behalf of
   4645      the program.  Both numbers are in seconds.
   4646 
   4647 `-fvar-tracking'
   4648      Run variable tracking pass.  It computes where variables are
   4649      stored at each position in code.  Better debugging information is
   4650      then generated (if the debugging information format supports this
   4651      information).
   4652 
   4653      It is enabled by default when compiling with optimization (`-Os',
   4654      `-O', `-O2', ...), debugging information (`-g') and the debug info
   4655      format supports it.
   4656 
   4657 `-print-file-name=LIBRARY'
   4658      Print the full absolute name of the library file LIBRARY that
   4659      would be used when linking--and don't do anything else.  With this
   4660      option, GCC does not compile or link anything; it just prints the
   4661      file name.
   4662 
   4663 `-print-multi-directory'
   4664      Print the directory name corresponding to the multilib selected by
   4665      any other switches present in the command line.  This directory is
   4666      supposed to exist in `GCC_EXEC_PREFIX'.
   4667 
   4668 `-print-multi-lib'
   4669      Print the mapping from multilib directory names to compiler
   4670      switches that enable them.  The directory name is separated from
   4671      the switches by `;', and each switch starts with an `@' instead of
   4672      the `-', without spaces between multiple switches.  This is
   4673      supposed to ease shell-processing.
   4674 
   4675 `-print-prog-name=PROGRAM'
   4676      Like `-print-file-name', but searches for a program such as `cpp'.
   4677 
   4678 `-print-libgcc-file-name'
   4679      Same as `-print-file-name=libgcc.a'.
   4680 
   4681      This is useful when you use `-nostdlib' or `-nodefaultlibs' but
   4682      you do want to link with `libgcc.a'.  You can do
   4683 
   4684           gcc -nostdlib FILES... `gcc -print-libgcc-file-name`
   4685 
   4686 `-print-search-dirs'
   4687      Print the name of the configured installation directory and a list
   4688      of program and library directories `gcc' will search--and don't do
   4689      anything else.
   4690 
   4691      This is useful when `gcc' prints the error message `installation
   4692      problem, cannot exec cpp0: No such file or directory'.  To resolve
   4693      this you either need to put `cpp0' and the other compiler
   4694      components where `gcc' expects to find them, or you can set the
   4695      environment variable `GCC_EXEC_PREFIX' to the directory where you
   4696      installed them.  Don't forget the trailing `/'.  *Note Environment
   4697      Variables::.
   4698 
   4699 `-print-sysroot-headers-suffix'
   4700      Print the suffix added to the target sysroot when searching for
   4701      headers, or give an error if the compiler is not configured with
   4702      such a suffix--and don't do anything else.
   4703 
   4704 `-dumpmachine'
   4705      Print the compiler's target machine (for example,
   4706      `i686-pc-linux-gnu')--and don't do anything else.
   4707 
   4708 `-dumpversion'
   4709      Print the compiler version (for example, `3.0')--and don't do
   4710      anything else.
   4711 
   4712 `-dumpspecs'
   4713      Print the compiler's built-in specs--and don't do anything else.
   4714      (This is used when GCC itself is being built.)  *Note Spec Files::.
   4715 
   4716 `-feliminate-unused-debug-types'
   4717      Normally, when producing DWARF2 output, GCC will emit debugging
   4718      information for all types declared in a compilation unit,
   4719      regardless of whether or not they are actually used in that
   4720      compilation unit.  Sometimes this is useful, such as if, in the
   4721      debugger, you want to cast a value to a type that is not actually
   4722      used in your program (but is declared).  More often, however, this
   4723      results in a significant amount of wasted space.  With this
   4724      option, GCC will avoid producing debug symbol output for types
   4725      that are nowhere used in the source file being compiled.
   4726 
   4727 
   4728 File: gcc.info,  Node: Optimize Options,  Next: Preprocessor Options,  Prev: Debugging Options,  Up: Invoking GCC
   4729 
   4730 3.10 Options That Control Optimization
   4731 ======================================
   4732 
   4733 These options control various sorts of optimizations.
   4734 
   4735  Without any optimization option, the compiler's goal is to reduce the
   4736 cost of compilation and to make debugging produce the expected results.
   4737 Statements are independent: if you stop the program with a breakpoint
   4738 between statements, you can then assign a new value to any variable or
   4739 change the program counter to any other statement in the function and
   4740 get exactly the results you would expect from the source code.
   4741 
   4742  Turning on optimization flags makes the compiler attempt to improve
   4743 the performance and/or code size at the expense of compilation time and
   4744 possibly the ability to debug the program.
   4745 
   4746  The compiler performs optimization based on the knowledge it has of
   4747 the program.  Optimization levels `-O' and above, in particular, enable
   4748 _unit-at-a-time_ mode, which allows the compiler to consider
   4749 information gained from later functions in the file when compiling a
   4750 function.  Compiling multiple files at once to a single output file in
   4751 _unit-at-a-time_ mode allows the compiler to use information gained
   4752 from all of the files when compiling each of them.
   4753 
   4754  Not all optimizations are controlled directly by a flag.  Only
   4755 optimizations that have a flag are listed.
   4756 
   4757 `-O'
   4758 `-O1'
   4759      Optimize.  Optimizing compilation takes somewhat more time, and a
   4760      lot more memory for a large function.
   4761 
   4762      With `-O', the compiler tries to reduce code size and execution
   4763      time, without performing any optimizations that take a great deal
   4764      of compilation time.
   4765 
   4766      `-O' turns on the following optimization flags:
   4767           -fauto-inc-dec
   4768           -fcprop-registers
   4769           -fdce
   4770           -fdefer-pop
   4771           -fdelayed-branch
   4772           -fdse
   4773           -fguess-branch-probability
   4774           -fif-conversion2
   4775           -fif-conversion
   4776           -finline-small-functions
   4777           -fipa-pure-const
   4778           -fipa-reference
   4779           -fmerge-constants
   4780           -fsplit-wide-types
   4781           -ftree-ccp
   4782           -ftree-ch
   4783           -ftree-copyrename
   4784           -ftree-dce
   4785           -ftree-dominator-opts
   4786           -ftree-dse
   4787           -ftree-fre
   4788           -ftree-sra
   4789           -ftree-ter
   4790           -funit-at-a-time
   4791 
   4792      `-O' also turns on `-fomit-frame-pointer' on machines where doing
   4793      so does not interfere with debugging.
   4794 
   4795 `-O2'
   4796      Optimize even more.  GCC performs nearly all supported
   4797      optimizations that do not involve a space-speed tradeoff.  The
   4798      compiler does not perform loop unrolling or function inlining when
   4799      you specify `-O2'.  As compared to `-O', this option increases
   4800      both compilation time and the performance of the generated code.
   4801 
   4802      `-O2' turns on all optimization flags specified by `-O'.  It also
   4803      turns on the following optimization flags:
   4804           -fthread-jumps
   4805           -falign-functions  -falign-jumps
   4806           -falign-loops  -falign-labels
   4807           -fcaller-saves
   4808           -fcrossjumping
   4809           -fcse-follow-jumps  -fcse-skip-blocks
   4810           -fdelete-null-pointer-checks
   4811           -fexpensive-optimizations
   4812           -fgcse  -fgcse-lm
   4813           -foptimize-sibling-calls
   4814           -fpeephole2
   4815           -fregmove
   4816           -freorder-blocks  -freorder-functions
   4817           -frerun-cse-after-loop
   4818           -fsched-interblock  -fsched-spec
   4819           -fschedule-insns  -fschedule-insns2
   4820           -fstrict-aliasing -fstrict-overflow
   4821           -ftree-pre
   4822           -ftree-vrp
   4823 
   4824      Please note the warning under `-fgcse' about invoking `-O2' on
   4825      programs that use computed gotos.
   4826 
   4827 `-O3'
   4828      Optimize yet more.  `-O3' turns on all optimizations specified by
   4829      `-O2' and also turns on the `-finline-functions',
   4830      `-funswitch-loops', `-fpredictive-commoning',
   4831      `-fgcse-after-reload' and `-ftree-vectorize' options.
   4832 
   4833 `-O0'
   4834      Reduce compilation time and make debugging produce the expected
   4835      results.  This is the default.
   4836 
   4837 `-Os'
   4838      Optimize for size.  `-Os' enables all `-O2' optimizations that do
   4839      not typically increase code size.  It also performs further
   4840      optimizations designed to reduce code size.
   4841 
   4842      `-Os' disables the following optimization flags:
   4843           -falign-functions  -falign-jumps  -falign-loops
   4844           -falign-labels  -freorder-blocks  -freorder-blocks-and-partition
   4845           -fprefetch-loop-arrays  -ftree-vect-loop-version
   4846 
   4847      If you use multiple `-O' options, with or without level numbers,
   4848      the last such option is the one that is effective.
   4849 
   4850  Options of the form `-fFLAG' specify machine-independent flags.  Most
   4851 flags have both positive and negative forms; the negative form of
   4852 `-ffoo' would be `-fno-foo'.  In the table below, only one of the forms
   4853 is listed--the one you typically will use.  You can figure out the
   4854 other form by either removing `no-' or adding it.
   4855 
   4856  The following options control specific optimizations.  They are either
   4857 activated by `-O' options or are related to ones that are.  You can use
   4858 the following flags in the rare cases when "fine-tuning" of
   4859 optimizations to be performed is desired.
   4860 
   4861 `-fno-default-inline'
   4862      Do not make member functions inline by default merely because they
   4863      are defined inside the class scope (C++ only).  Otherwise, when
   4864      you specify `-O', member functions defined inside class scope are
   4865      compiled inline by default; i.e., you don't need to add `inline'
   4866      in front of the member function name.
   4867 
   4868 `-fno-defer-pop'
   4869      Always pop the arguments to each function call as soon as that
   4870      function returns.  For machines which must pop arguments after a
   4871      function call, the compiler normally lets arguments accumulate on
   4872      the stack for several function calls and pops them all at once.
   4873 
   4874      Disabled at levels `-O', `-O2', `-O3', `-Os'.
   4875 
   4876 `-fforward-propagate'
   4877      Perform a forward propagation pass on RTL.  The pass tries to
   4878      combine two instructions and checks if the result can be
   4879      simplified.  If loop unrolling is active, two passes are performed
   4880      and the second is scheduled after loop unrolling.
   4881 
   4882      This option is enabled by default at optimization levels `-O2',
   4883      `-O3', `-Os'.
   4884 
   4885 `-fomit-frame-pointer'
   4886      Don't keep the frame pointer in a register for functions that
   4887      don't need one.  This avoids the instructions to save, set up and
   4888      restore frame pointers; it also makes an extra register available
   4889      in many functions.  *It also makes debugging impossible on some
   4890      machines.*
   4891 
   4892      On some machines, such as the VAX, this flag has no effect, because
   4893      the standard calling sequence automatically handles the frame
   4894      pointer and nothing is saved by pretending it doesn't exist.  The
   4895      machine-description macro `FRAME_POINTER_REQUIRED' controls
   4896      whether a target machine supports this flag.  *Note Register
   4897      Usage: (gccint)Registers.
   4898 
   4899      Enabled at levels `-O', `-O2', `-O3', `-Os'.
   4900 
   4901 `-foptimize-sibling-calls'
   4902      Optimize sibling and tail recursive calls.
   4903 
   4904      Enabled at levels `-O2', `-O3', `-Os'.
   4905 
   4906 `-fno-inline'
   4907      Don't pay attention to the `inline' keyword.  Normally this option
   4908      is used to keep the compiler from expanding any functions inline.
   4909      Note that if you are not optimizing, no functions can be expanded
   4910      inline.
   4911 
   4912 `-finline-small-functions'
   4913      Integrate functions into their callers when their body is smaller
   4914      than expected function call code (so overall size of program gets
   4915      smaller).  The compiler heuristically decides which functions are
   4916      simple enough to be worth integrating in this way.
   4917 
   4918      Enabled at level `-O2'.
   4919 
   4920 `-finline-functions'
   4921      Integrate all simple functions into their callers.  The compiler
   4922      heuristically decides which functions are simple enough to be worth
   4923      integrating in this way.
   4924 
   4925      If all calls to a given function are integrated, and the function
   4926      is declared `static', then the function is normally not output as
   4927      assembler code in its own right.
   4928 
   4929      Enabled at level `-O3'.
   4930 
   4931 `-finline-functions-called-once'
   4932      Consider all `static' functions called once for inlining into their
   4933      caller even if they are not marked `inline'.  If a call to a given
   4934      function is integrated, then the function is not output as
   4935      assembler code in its own right.
   4936 
   4937      Enabled if `-funit-at-a-time' is enabled.
   4938 
   4939 `-fearly-inlining'
   4940      Inline functions marked by `always_inline' and functions whose
   4941      body seems smaller than the function call overhead early before
   4942      doing `-fprofile-generate' instrumentation and real inlining pass.
   4943      Doing so makes profiling significantly cheaper and usually
   4944      inlining faster on programs having large chains of nested wrapper
   4945      functions.
   4946 
   4947      Enabled by default.
   4948 
   4949 `-finline-limit=N'
   4950      By default, GCC limits the size of functions that can be inlined.
   4951      This flag allows coarse control of this limit.  N is the size of
   4952      functions that can be inlined in number of pseudo instructions.
   4953 
   4954      Inlining is actually controlled by a number of parameters, which
   4955      may be specified individually by using `--param NAME=VALUE'.  The
   4956      `-finline-limit=N' option sets some of these parameters as follows:
   4957 
   4958     `max-inline-insns-single'
   4959           is set to N/2.
   4960 
   4961     `max-inline-insns-auto'
   4962           is set to N/2.
   4963 
   4964      See below for a documentation of the individual parameters
   4965      controlling inlining and for the defaults of these parameters.
   4966 
   4967      _Note:_ there may be no value to `-finline-limit' that results in
   4968      default behavior.
   4969 
   4970      _Note:_ pseudo instruction represents, in this particular context,
   4971      an abstract measurement of function's size.  In no way does it
   4972      represent a count of assembly instructions and as such its exact
   4973      meaning might change from one release to an another.
   4974 
   4975 `-fkeep-inline-functions'
   4976      In C, emit `static' functions that are declared `inline' into the
   4977      object file, even if the function has been inlined into all of its
   4978      callers.  This switch does not affect functions using the `extern
   4979      inline' extension in GNU C89.  In C++, emit any and all inline
   4980      functions into the object file.
   4981 
   4982 `-fkeep-static-consts'
   4983      Emit variables declared `static const' when optimization isn't
   4984      turned on, even if the variables aren't referenced.
   4985 
   4986      GCC enables this option by default.  If you want to force the
   4987      compiler to check if the variable was referenced, regardless of
   4988      whether or not optimization is turned on, use the
   4989      `-fno-keep-static-consts' option.
   4990 
   4991 `-fmerge-constants'
   4992      Attempt to merge identical constants (string constants and
   4993      floating point constants) across compilation units.
   4994 
   4995      This option is the default for optimized compilation if the
   4996      assembler and linker support it.  Use `-fno-merge-constants' to
   4997      inhibit this behavior.
   4998 
   4999      Enabled at levels `-O', `-O2', `-O3', `-Os'.
   5000 
   5001 `-fmerge-all-constants'
   5002      Attempt to merge identical constants and identical variables.
   5003 
   5004      This option implies `-fmerge-constants'.  In addition to
   5005      `-fmerge-constants' this considers e.g. even constant initialized
   5006      arrays or initialized constant variables with integral or floating
   5007      point types.  Languages like C or C++ require each non-automatic
   5008      variable to have distinct location, so using this option will
   5009      result in non-conforming behavior.
   5010 
   5011 `-fmodulo-sched'
   5012      Perform swing modulo scheduling immediately before the first
   5013      scheduling pass.  This pass looks at innermost loops and reorders
   5014      their instructions by overlapping different iterations.
   5015 
   5016 `-fmodulo-sched-allow-regmoves'
   5017      Perform more aggressive SMS based modulo scheduling with register
   5018      moves allowed.  By setting this flag certain anti-dependences
   5019      edges will be deleted which will trigger the generation of
   5020      reg-moves based on the life-range analysis.  This option is
   5021      effective only with `-fmodulo-sched' enabled.
   5022 
   5023 `-fno-branch-count-reg'
   5024      Do not use "decrement and branch" instructions on a count register,
   5025      but instead generate a sequence of instructions that decrement a
   5026      register, compare it against zero, then branch based upon the
   5027      result.  This option is only meaningful on architectures that
   5028      support such instructions, which include x86, PowerPC, IA-64 and
   5029      S/390.
   5030 
   5031      The default is `-fbranch-count-reg'.
   5032 
   5033 `-fno-function-cse'
   5034      Do not put function addresses in registers; make each instruction
   5035      that calls a constant function contain the function's address
   5036      explicitly.
   5037 
   5038      This option results in less efficient code, but some strange hacks
   5039      that alter the assembler output may be confused by the
   5040      optimizations performed when this option is not used.
   5041 
   5042      The default is `-ffunction-cse'
   5043 
   5044 `-fno-zero-initialized-in-bss'
   5045      If the target supports a BSS section, GCC by default puts
   5046      variables that are initialized to zero into BSS.  This can save
   5047      space in the resulting code.
   5048 
   5049      This option turns off this behavior because some programs
   5050      explicitly rely on variables going to the data section.  E.g., so
   5051      that the resulting executable can find the beginning of that
   5052      section and/or make assumptions based on that.
   5053 
   5054      The default is `-fzero-initialized-in-bss'.
   5055 
   5056 `-fmudflap -fmudflapth -fmudflapir'
   5057      For front-ends that support it (C and C++), instrument all risky
   5058      pointer/array dereferencing operations, some standard library
   5059      string/heap functions, and some other associated constructs with
   5060      range/validity tests.  Modules so instrumented should be immune to
   5061      buffer overflows, invalid heap use, and some other classes of C/C++
   5062      programming errors.  The instrumentation relies on a separate
   5063      runtime library (`libmudflap'), which will be linked into a
   5064      program if `-fmudflap' is given at link time.  Run-time behavior
   5065      of the instrumented program is controlled by the `MUDFLAP_OPTIONS'
   5066      environment variable.  See `env MUDFLAP_OPTIONS=-help a.out' for
   5067      its options.
   5068 
   5069      Use `-fmudflapth' instead of `-fmudflap' to compile and to link if
   5070      your program is multi-threaded.  Use `-fmudflapir', in addition to
   5071      `-fmudflap' or `-fmudflapth', if instrumentation should ignore
   5072      pointer reads.  This produces less instrumentation (and therefore
   5073      faster execution) and still provides some protection against
   5074      outright memory corrupting writes, but allows erroneously read
   5075      data to propagate within a program.
   5076 
   5077 `-fthread-jumps'
   5078      Perform optimizations where we check to see if a jump branches to a
   5079      location where another comparison subsumed by the first is found.
   5080      If so, the first branch is redirected to either the destination of
   5081      the second branch or a point immediately following it, depending
   5082      on whether the condition is known to be true or false.
   5083 
   5084      Enabled at levels `-O2', `-O3', `-Os'.
   5085 
   5086 `-fsplit-wide-types'
   5087      When using a type that occupies multiple registers, such as `long
   5088      long' on a 32-bit system, split the registers apart and allocate
   5089      them independently.  This normally generates better code for those
   5090      types, but may make debugging more difficult.
   5091 
   5092      Enabled at levels `-O', `-O2', `-O3', `-Os'.
   5093 
   5094 `-fcse-follow-jumps'
   5095      In common subexpression elimination (CSE), scan through jump
   5096      instructions when the target of the jump is not reached by any
   5097      other path.  For example, when CSE encounters an `if' statement
   5098      with an `else' clause, CSE will follow the jump when the condition
   5099      tested is false.
   5100 
   5101      Enabled at levels `-O2', `-O3', `-Os'.
   5102 
   5103 `-fcse-skip-blocks'
   5104      This is similar to `-fcse-follow-jumps', but causes CSE to follow
   5105      jumps which conditionally skip over blocks.  When CSE encounters a
   5106      simple `if' statement with no else clause, `-fcse-skip-blocks'
   5107      causes CSE to follow the jump around the body of the `if'.
   5108 
   5109      Enabled at levels `-O2', `-O3', `-Os'.
   5110 
   5111 `-frerun-cse-after-loop'
   5112      Re-run common subexpression elimination after loop optimizations
   5113      has been performed.
   5114 
   5115      Enabled at levels `-O2', `-O3', `-Os'.
   5116 
   5117 `-fgcse'
   5118      Perform a global common subexpression elimination pass.  This pass
   5119      also performs global constant and copy propagation.
   5120 
   5121      _Note:_ When compiling a program using computed gotos, a GCC
   5122      extension, you may get better runtime performance if you disable
   5123      the global common subexpression elimination pass by adding
   5124      `-fno-gcse' to the command line.
   5125 
   5126      Enabled at levels `-O2', `-O3', `-Os'.
   5127 
   5128 `-fgcse-lm'
   5129      When `-fgcse-lm' is enabled, global common subexpression
   5130      elimination will attempt to move loads which are only killed by
   5131      stores into themselves.  This allows a loop containing a
   5132      load/store sequence to be changed to a load outside the loop, and
   5133      a copy/store within the loop.
   5134 
   5135      Enabled by default when gcse is enabled.
   5136 
   5137 `-fgcse-sm'
   5138      When `-fgcse-sm' is enabled, a store motion pass is run after
   5139      global common subexpression elimination.  This pass will attempt
   5140      to move stores out of loops.  When used in conjunction with
   5141      `-fgcse-lm', loops containing a load/store sequence can be changed
   5142      to a load before the loop and a store after the loop.
   5143 
   5144      Not enabled at any optimization level.
   5145 
   5146 `-fgcse-las'
   5147      When `-fgcse-las' is enabled, the global common subexpression
   5148      elimination pass eliminates redundant loads that come after stores
   5149      to the same memory location (both partial and full redundancies).
   5150 
   5151      Not enabled at any optimization level.
   5152 
   5153 `-fgcse-after-reload'
   5154      When `-fgcse-after-reload' is enabled, a redundant load elimination
   5155      pass is performed after reload.  The purpose of this pass is to
   5156      cleanup redundant spilling.
   5157 
   5158 `-funsafe-loop-optimizations'
   5159      If given, the loop optimizer will assume that loop indices do not
   5160      overflow, and that the loops with nontrivial exit condition are not
   5161      infinite.  This enables a wider range of loop optimizations even if
   5162      the loop optimizer itself cannot prove that these assumptions are
   5163      valid.  Using `-Wunsafe-loop-optimizations', the compiler will
   5164      warn you if it finds this kind of loop.
   5165 
   5166 `-fcrossjumping'
   5167      Perform cross-jumping transformation.  This transformation unifies
   5168      equivalent code and save code size.  The resulting code may or may
   5169      not perform better than without cross-jumping.
   5170 
   5171      Enabled at levels `-O2', `-O3', `-Os'.
   5172 
   5173 `-fauto-inc-dec'
   5174      Combine increments or decrements of addresses with memory accesses.
   5175      This pass is always skipped on architectures that do not have
   5176      instructions to support this.  Enabled by default at `-O' and
   5177      higher on architectures that support this.
   5178 
   5179 `-fdce'
   5180      Perform dead code elimination (DCE) on RTL.  Enabled by default at
   5181      `-O' and higher.
   5182 
   5183 `-fdse'
   5184      Perform dead store elimination (DSE) on RTL.  Enabled by default
   5185      at `-O' and higher.
   5186 
   5187 `-fif-conversion'
   5188      Attempt to transform conditional jumps into branch-less
   5189      equivalents.  This include use of conditional moves, min, max, set
   5190      flags and abs instructions, and some tricks doable by standard
   5191      arithmetics.  The use of conditional execution on chips where it
   5192      is available is controlled by `if-conversion2'.
   5193 
   5194      Enabled at levels `-O', `-O2', `-O3', `-Os'.
   5195 
   5196 `-fif-conversion2'
   5197      Use conditional execution (where available) to transform
   5198      conditional jumps into branch-less equivalents.
   5199 
   5200      Enabled at levels `-O', `-O2', `-O3', `-Os'.
   5201 
   5202 `-fdelete-null-pointer-checks'
   5203      Use global dataflow analysis to identify and eliminate useless
   5204      checks for null pointers.  The compiler assumes that dereferencing
   5205      a null pointer would have halted the program.  If a pointer is
   5206      checked after it has already been dereferenced, it cannot be null.
   5207 
   5208      In some environments, this assumption is not true, and programs can
   5209      safely dereference null pointers.  Use
   5210      `-fno-delete-null-pointer-checks' to disable this optimization for
   5211      programs which depend on that behavior.
   5212 
   5213      Enabled at levels `-O2', `-O3', `-Os'.
   5214 
   5215 `-fexpensive-optimizations'
   5216      Perform a number of minor optimizations that are relatively
   5217      expensive.
   5218 
   5219      Enabled at levels `-O2', `-O3', `-Os'.
   5220 
   5221 `-foptimize-register-move'
   5222 `-fregmove'
   5223      Attempt to reassign register numbers in move instructions and as
   5224      operands of other simple instructions in order to maximize the
   5225      amount of register tying.  This is especially helpful on machines
   5226      with two-operand instructions.
   5227 
   5228      Note `-fregmove' and `-foptimize-register-move' are the same
   5229      optimization.
   5230 
   5231      Enabled at levels `-O2', `-O3', `-Os'.
   5232 
   5233 `-fdelayed-branch'
   5234      If supported for the target machine, attempt to reorder
   5235      instructions to exploit instruction slots available after delayed
   5236      branch instructions.
   5237 
   5238      Enabled at levels `-O', `-O2', `-O3', `-Os'.
   5239 
   5240 `-fschedule-insns'
   5241      If supported for the target machine, attempt to reorder
   5242      instructions to eliminate execution stalls due to required data
   5243      being unavailable.  This helps machines that have slow floating
   5244      point or memory load instructions by allowing other instructions
   5245      to be issued until the result of the load or floating point
   5246      instruction is required.
   5247 
   5248      Enabled at levels `-O2', `-O3', `-Os'.
   5249 
   5250 `-fschedule-insns2'
   5251      Similar to `-fschedule-insns', but requests an additional pass of
   5252      instruction scheduling after register allocation has been done.
   5253      This is especially useful on machines with a relatively small
   5254      number of registers and where memory load instructions take more
   5255      than one cycle.
   5256 
   5257      Enabled at levels `-O2', `-O3', `-Os'.
   5258 
   5259 `-fno-sched-interblock'
   5260      Don't schedule instructions across basic blocks.  This is normally
   5261      enabled by default when scheduling before register allocation, i.e.
   5262      with `-fschedule-insns' or at `-O2' or higher.
   5263 
   5264 `-fno-sched-spec'
   5265      Don't allow speculative motion of non-load instructions.  This is
   5266      normally enabled by default when scheduling before register
   5267      allocation, i.e.  with `-fschedule-insns' or at `-O2' or higher.
   5268 
   5269 `-fsched-spec-load'
   5270      Allow speculative motion of some load instructions.  This only
   5271      makes sense when scheduling before register allocation, i.e. with
   5272      `-fschedule-insns' or at `-O2' or higher.
   5273 
   5274 `-fsched-spec-load-dangerous'
   5275      Allow speculative motion of more load instructions.  This only
   5276      makes sense when scheduling before register allocation, i.e. with
   5277      `-fschedule-insns' or at `-O2' or higher.
   5278 
   5279 `-fsched-stalled-insns'
   5280 `-fsched-stalled-insns=N'
   5281      Define how many insns (if any) can be moved prematurely from the
   5282      queue of stalled insns into the ready list, during the second
   5283      scheduling pass.  `-fno-sched-stalled-insns' means that no insns
   5284      will be moved prematurely, `-fsched-stalled-insns=0' means there
   5285      is no limit on how many queued insns can be moved prematurely.
   5286      `-fsched-stalled-insns' without a value is equivalent to
   5287      `-fsched-stalled-insns=1'.
   5288 
   5289 `-fsched-stalled-insns-dep'
   5290 `-fsched-stalled-insns-dep=N'
   5291      Define how many insn groups (cycles) will be examined for a
   5292      dependency on a stalled insn that is candidate for premature
   5293      removal from the queue of stalled insns.  This has an effect only
   5294      during the second scheduling pass, and only if
   5295      `-fsched-stalled-insns' is used.  `-fno-sched-stalled-insns-dep'
   5296      is equivalent to `-fsched-stalled-insns-dep=0'.
   5297      `-fsched-stalled-insns-dep' without a value is equivalent to
   5298      `-fsched-stalled-insns-dep=1'.
   5299 
   5300 `-fsched2-use-superblocks'
   5301      When scheduling after register allocation, do use superblock
   5302      scheduling algorithm.  Superblock scheduling allows motion across
   5303      basic block boundaries resulting on faster schedules.  This option
   5304      is experimental, as not all machine descriptions used by GCC model
   5305      the CPU closely enough to avoid unreliable results from the
   5306      algorithm.
   5307 
   5308      This only makes sense when scheduling after register allocation,
   5309      i.e. with `-fschedule-insns2' or at `-O2' or higher.
   5310 
   5311 `-fsched2-use-traces'
   5312      Use `-fsched2-use-superblocks' algorithm when scheduling after
   5313      register allocation and additionally perform code duplication in
   5314      order to increase the size of superblocks using tracer pass.  See
   5315      `-ftracer' for details on trace formation.
   5316 
   5317      This mode should produce faster but significantly longer programs.
   5318      Also without `-fbranch-probabilities' the traces constructed may
   5319      not match the reality and hurt the performance.  This only makes
   5320      sense when scheduling after register allocation, i.e. with
   5321      `-fschedule-insns2' or at `-O2' or higher.
   5322 
   5323 `-fsee'
   5324      Eliminate redundant sign extension instructions and move the
   5325      non-redundant ones to optimal placement using lazy code motion
   5326      (LCM).
   5327 
   5328 `-freschedule-modulo-scheduled-loops'
   5329      The modulo scheduling comes before the traditional scheduling, if
   5330      a loop was modulo scheduled we may want to prevent the later
   5331      scheduling passes from changing its schedule, we use this option
   5332      to control that.
   5333 
   5334 `-fcaller-saves'
   5335      Enable values to be allocated in registers that will be clobbered
   5336      by function calls, by emitting extra instructions to save and
   5337      restore the registers around such calls.  Such allocation is done
   5338      only when it seems to result in better code than would otherwise
   5339      be produced.
   5340 
   5341      This option is always enabled by default on certain machines,
   5342      usually those which have no call-preserved registers to use
   5343      instead.
   5344 
   5345      Enabled at levels `-O2', `-O3', `-Os'.
   5346 
   5347 `-ftree-reassoc'
   5348      Perform reassociation on trees.  This flag is enabled by default
   5349      at `-O' and higher.
   5350 
   5351 `-ftree-pre'
   5352      Perform partial redundancy elimination (PRE) on trees.  This flag
   5353      is enabled by default at `-O2' and `-O3'.
   5354 
   5355 `-ftree-fre'
   5356      Perform full redundancy elimination (FRE) on trees.  The difference
   5357      between FRE and PRE is that FRE only considers expressions that
   5358      are computed on all paths leading to the redundant computation.
   5359      This analysis is faster than PRE, though it exposes fewer
   5360      redundancies.  This flag is enabled by default at `-O' and higher.
   5361 
   5362 `-ftree-copy-prop'
   5363      Perform copy propagation on trees.  This pass eliminates
   5364      unnecessary copy operations.  This flag is enabled by default at
   5365      `-O' and higher.
   5366 
   5367 `-ftree-salias'
   5368      Perform structural alias analysis on trees.  This flag is enabled
   5369      by default at `-O' and higher.
   5370 
   5371 `-fipa-pure-const'
   5372      Discover which functions are pure or constant.  Enabled by default
   5373      at `-O' and higher.
   5374 
   5375 `-fipa-reference'
   5376      Discover which static variables do not escape cannot escape the
   5377      compilation unit.  Enabled by default at `-O' and higher.
   5378 
   5379 `-fipa-struct-reorg'
   5380      Perform structure reorganization optimization, that change C-like
   5381      structures layout in order to better utilize spatial locality.
   5382      This transformation is affective for programs containing arrays of
   5383      structures.  Available in two compilation modes: profile-based
   5384      (enabled with `-fprofile-generate') or static (which uses built-in
   5385      heuristics).  Require `-fipa-type-escape' to provide the safety of
   5386      this transformation.  It works only in whole program mode, so it
   5387      requires `-fwhole-program' and `-combine' to be enabled.
   5388      Structures considered `cold' by this transformation are not
   5389      affected (see `--param struct-reorg-cold-struct-ratio=VALUE').
   5390 
   5391      With this flag, the program debug info reflects a new structure
   5392      layout.
   5393 
   5394 `-fipa-pta'
   5395      Perform interprocedural pointer analysis.
   5396 
   5397 `-fipa-cp'
   5398      Perform interprocedural constant propagation.  This optimization
   5399      analyzes the program to determine when values passed to functions
   5400      are constants and then optimizes accordingly.  This optimization
   5401      can substantially increase performance if the application has
   5402      constants passed to functions, but because this optimization can
   5403      create multiple copies of functions, it may significantly increase
   5404      code size.
   5405 
   5406 `-fipa-matrix-reorg'
   5407      Perform matrix flattening and transposing.  Matrix flattening
   5408      tries to replace a m-dimensional matrix with its equivalent
   5409      n-dimensional matrix, where n < m.  This reduces the level of
   5410      indirection needed for accessing the elements of the matrix. The
   5411      second optimization is matrix transposing that attemps to change
   5412      the order of the matrix's dimensions in order to improve cache
   5413      locality.  Both optimizations need fwhole-program flag.
   5414      Transposing is enabled only if profiling information is avaliable.
   5415 
   5416 `-ftree-sink'
   5417      Perform forward store motion  on trees.  This flag is enabled by
   5418      default at `-O' and higher.
   5419 
   5420 `-ftree-ccp'
   5421      Perform sparse conditional constant propagation (CCP) on trees.
   5422      This pass only operates on local scalar variables and is enabled
   5423      by default at `-O' and higher.
   5424 
   5425 `-ftree-store-ccp'
   5426      Perform sparse conditional constant propagation (CCP) on trees.
   5427      This pass operates on both local scalar variables and memory
   5428      stores and loads (global variables, structures, arrays, etc).
   5429      This flag is enabled by default at `-O2' and higher.
   5430 
   5431 `-ftree-dce'
   5432      Perform dead code elimination (DCE) on trees.  This flag is
   5433      enabled by default at `-O' and higher.
   5434 
   5435 `-ftree-dominator-opts'
   5436      Perform a variety of simple scalar cleanups (constant/copy
   5437      propagation, redundancy elimination, range propagation and
   5438      expression simplification) based on a dominator tree traversal.
   5439      This also performs jump threading (to reduce jumps to jumps). This
   5440      flag is enabled by default at `-O' and higher.
   5441 
   5442 `-ftree-dse'
   5443      Perform dead store elimination (DSE) on trees.  A dead store is a
   5444      store into a memory location which will later be overwritten by
   5445      another store without any intervening loads.  In this case the
   5446      earlier store can be deleted.  This flag is enabled by default at
   5447      `-O' and higher.
   5448 
   5449 `-ftree-ch'
   5450      Perform loop header copying on trees.  This is beneficial since it
   5451      increases effectiveness of code motion optimizations.  It also
   5452      saves one jump.  This flag is enabled by default at `-O' and
   5453      higher.  It is not enabled for `-Os', since it usually increases
   5454      code size.
   5455 
   5456 `-ftree-loop-optimize'
   5457      Perform loop optimizations on trees.  This flag is enabled by
   5458      default at `-O' and higher.
   5459 
   5460 `-ftree-loop-linear'
   5461      Perform linear loop transformations on tree.  This flag can
   5462      improve cache performance and allow further loop optimizations to
   5463      take place.
   5464 
   5465 `-fcheck-data-deps'
   5466      Compare the results of several data dependence analyzers.  This
   5467      option is used for debugging the data dependence analyzers.
   5468 
   5469 `-ftree-loop-im'
   5470      Perform loop invariant motion on trees.  This pass moves only
   5471      invariants that would be hard to handle at RTL level (function
   5472      calls, operations that expand to nontrivial sequences of insns).
   5473      With `-funswitch-loops' it also moves operands of conditions that
   5474      are invariant out of the loop, so that we can use just trivial
   5475      invariantness analysis in loop unswitching.  The pass also includes
   5476      store motion.
   5477 
   5478 `-ftree-loop-ivcanon'
   5479      Create a canonical counter for number of iterations in the loop
   5480      for that determining number of iterations requires complicated
   5481      analysis.  Later optimizations then may determine the number
   5482      easily.  Useful especially in connection with unrolling.
   5483 
   5484 `-fivopts'
   5485      Perform induction variable optimizations (strength reduction,
   5486      induction variable merging and induction variable elimination) on
   5487      trees.
   5488 
   5489 `-ftree-parallelize-loops=n'
   5490      Parallelize loops, i.e., split their iteration space to run in n
   5491      threads.  This is only possible for loops whose iterations are
   5492      independent and can be arbitrarily reordered.  The optimization is
   5493      only profitable on multiprocessor machines, for loops that are
   5494      CPU-intensive, rather than constrained e.g. by memory bandwidth.
   5495      This option implies `-pthread', and thus is only supported on
   5496      targets that have support for `-pthread'.
   5497 
   5498 `-ftree-sra'
   5499      Perform scalar replacement of aggregates.  This pass replaces
   5500      structure references with scalars to prevent committing structures
   5501      to memory too early.  This flag is enabled by default at `-O' and
   5502      higher.
   5503 
   5504 `-ftree-copyrename'
   5505      Perform copy renaming on trees.  This pass attempts to rename
   5506      compiler temporaries to other variables at copy locations, usually
   5507      resulting in variable names which more closely resemble the
   5508      original variables.  This flag is enabled by default at `-O' and
   5509      higher.
   5510 
   5511 `-ftree-ter'
   5512      Perform temporary expression replacement during the SSA->normal
   5513      phase.  Single use/single def temporaries are replaced at their
   5514      use location with their defining expression.  This results in
   5515      non-GIMPLE code, but gives the expanders much more complex trees
   5516      to work on resulting in better RTL generation.  This is enabled by
   5517      default at `-O' and higher.
   5518 
   5519 `-ftree-vectorize'
   5520      Perform loop vectorization on trees. This flag is enabled by
   5521      default at `-O3'.
   5522 
   5523 `-ftree-vect-loop-version'
   5524      Perform loop versioning when doing loop vectorization on trees.
   5525      When a loop appears to be vectorizable except that data alignment
   5526      or data dependence cannot be determined at compile time then
   5527      vectorized and non-vectorized versions of the loop are generated
   5528      along with runtime checks for alignment or dependence to control
   5529      which version is executed.  This option is enabled by default
   5530      except at level `-Os' where it is disabled.
   5531 
   5532 `-fvect-cost-model'
   5533      Enable cost model for vectorization.
   5534 
   5535 `-ftree-vrp'
   5536      Perform Value Range Propagation on trees.  This is similar to the
   5537      constant propagation pass, but instead of values, ranges of values
   5538      are propagated.  This allows the optimizers to remove unnecessary
   5539      range checks like array bound checks and null pointer checks.
   5540      This is enabled by default at `-O2' and higher.  Null pointer check
   5541      elimination is only done if `-fdelete-null-pointer-checks' is
   5542      enabled.
   5543 
   5544 `-ftracer'
   5545      Perform tail duplication to enlarge superblock size.  This
   5546      transformation simplifies the control flow of the function
   5547      allowing other optimizations to do better job.
   5548 
   5549 `-funroll-loops'
   5550      Unroll loops whose number of iterations can be determined at
   5551      compile time or upon entry to the loop.  `-funroll-loops' implies
   5552      `-frerun-cse-after-loop'.  This option makes code larger, and may
   5553      or may not make it run faster.
   5554 
   5555 `-funroll-all-loops'
   5556      Unroll all loops, even if their number of iterations is uncertain
   5557      when the loop is entered.  This usually makes programs run more
   5558      slowly.  `-funroll-all-loops' implies the same options as
   5559      `-funroll-loops',
   5560 
   5561 `-fsplit-ivs-in-unroller'
   5562      Enables expressing of values of induction variables in later
   5563      iterations of the unrolled loop using the value in the first
   5564      iteration.  This breaks long dependency chains, thus improving
   5565      efficiency of the scheduling passes.
   5566 
   5567      Combination of `-fweb' and CSE is often sufficient to obtain the
   5568      same effect.  However in cases the loop body is more complicated
   5569      than a single basic block, this is not reliable.  It also does not
   5570      work at all on some of the architectures due to restrictions in
   5571      the CSE pass.
   5572 
   5573      This optimization is enabled by default.
   5574 
   5575 `-fvariable-expansion-in-unroller'
   5576      With this option, the compiler will create multiple copies of some
   5577      local variables when unrolling a loop which can result in superior
   5578      code.
   5579 
   5580 `-fpredictive-commoning'
   5581      Perform predictive commoning optimization, i.e., reusing
   5582      computations (especially memory loads and stores) performed in
   5583      previous iterations of loops.
   5584 
   5585      This option is enabled at level `-O3'.
   5586 
   5587 `-fprefetch-loop-arrays'
   5588      If supported by the target machine, generate instructions to
   5589      prefetch memory to improve the performance of loops that access
   5590      large arrays.
   5591 
   5592      This option may generate better or worse code; results are highly
   5593      dependent on the structure of loops within the source code.
   5594 
   5595      Disabled at level `-Os'.
   5596 
   5597 `-fno-peephole'
   5598 `-fno-peephole2'
   5599      Disable any machine-specific peephole optimizations.  The
   5600      difference between `-fno-peephole' and `-fno-peephole2' is in how
   5601      they are implemented in the compiler; some targets use one, some
   5602      use the other, a few use both.
   5603 
   5604      `-fpeephole' is enabled by default.  `-fpeephole2' enabled at
   5605      levels `-O2', `-O3', `-Os'.
   5606 
   5607 `-fno-guess-branch-probability'
   5608      Do not guess branch probabilities using heuristics.
   5609 
   5610      GCC will use heuristics to guess branch probabilities if they are
   5611      not provided by profiling feedback (`-fprofile-arcs').  These
   5612      heuristics are based on the control flow graph.  If some branch
   5613      probabilities are specified by `__builtin_expect', then the
   5614      heuristics will be used to guess branch probabilities for the rest
   5615      of the control flow graph, taking the `__builtin_expect' info into
   5616      account.  The interactions between the heuristics and
   5617      `__builtin_expect' can be complex, and in some cases, it may be
   5618      useful to disable the heuristics so that the effects of
   5619      `__builtin_expect' are easier to understand.
   5620 
   5621      The default is `-fguess-branch-probability' at levels `-O', `-O2',
   5622      `-O3', `-Os'.
   5623 
   5624 `-freorder-blocks'
   5625      Reorder basic blocks in the compiled function in order to reduce
   5626      number of taken branches and improve code locality.
   5627 
   5628      Enabled at levels `-O2', `-O3'.
   5629 
   5630 `-freorder-blocks-and-partition'
   5631      In addition to reordering basic blocks in the compiled function,
   5632      in order to reduce number of taken branches, partitions hot and
   5633      cold basic blocks into separate sections of the assembly and .o
   5634      files, to improve paging and cache locality performance.
   5635 
   5636      This optimization is automatically turned off in the presence of
   5637      exception handling, for linkonce sections, for functions with a
   5638      user-defined section attribute and on any architecture that does
   5639      not support named sections.
   5640 
   5641 `-freorder-functions'
   5642      Reorder functions in the object file in order to improve code
   5643      locality.  This is implemented by using special subsections
   5644      `.text.hot' for most frequently executed functions and
   5645      `.text.unlikely' for unlikely executed functions.  Reordering is
   5646      done by the linker so object file format must support named
   5647      sections and linker must place them in a reasonable way.
   5648 
   5649      Also profile feedback must be available in to make this option
   5650      effective.  See `-fprofile-arcs' for details.
   5651 
   5652      Enabled at levels `-O2', `-O3', `-Os'.
   5653 
   5654 `-fstrict-aliasing'
   5655      Allows the compiler to assume the strictest aliasing rules
   5656      applicable to the language being compiled.  For C (and C++), this
   5657      activates optimizations based on the type of expressions.  In
   5658      particular, an object of one type is assumed never to reside at
   5659      the same address as an object of a different type, unless the
   5660      types are almost the same.  For example, an `unsigned int' can
   5661      alias an `int', but not a `void*' or a `double'.  A character type
   5662      may alias any other type.
   5663 
   5664      Pay special attention to code like this:
   5665           union a_union {
   5666             int i;
   5667             double d;
   5668           };
   5669 
   5670           int f() {
   5671             a_union t;
   5672             t.d = 3.0;
   5673             return t.i;
   5674           }
   5675      The practice of reading from a different union member than the one
   5676      most recently written to (called "type-punning") is common.  Even
   5677      with `-fstrict-aliasing', type-punning is allowed, provided the
   5678      memory is accessed through the union type.  So, the code above
   5679      will work as expected.  However, this code might not:
   5680           int f() {
   5681             a_union t;
   5682             int* ip;
   5683             t.d = 3.0;
   5684             ip = &t.i;
   5685             return *ip;
   5686           }
   5687 
   5688      Enabled at levels `-O2', `-O3', `-Os'.
   5689 
   5690 `-fstrict-overflow'
   5691      Allow the compiler to assume strict signed overflow rules,
   5692      depending on the language being compiled.  For C (and C++) this
   5693      means that overflow when doing arithmetic with signed numbers is
   5694      undefined, which means that the compiler may assume that it will
   5695      not happen.  This permits various optimizations.  For example, the
   5696      compiler will assume that an expression like `i + 10 > i' will
   5697      always be true for signed `i'.  This assumption is only valid if
   5698      signed overflow is undefined, as the expression is false if `i +
   5699      10' overflows when using twos complement arithmetic.  When this
   5700      option is in effect any attempt to determine whether an operation
   5701      on signed numbers will overflow must be written carefully to not
   5702      actually involve overflow.
   5703 
   5704      This option also allows the compiler to assume strict pointer
   5705      semantics: given a pointer to an object, if adding an offset to
   5706      that pointer does not produce a pointer to the same object, the
   5707      addition is undefined.  This permits the compiler to conclude that
   5708      `p + u > p' is always true for a pointer `p' and unsigned integer
   5709      `u'.  This assumption is only valid because pointer wraparound is
   5710      undefined, as the expression is false if `p + u' overflows using
   5711      twos complement arithmetic.
   5712 
   5713      See also the `-fwrapv' option.  Using `-fwrapv' means that integer
   5714      signed overflow is fully defined: it wraps.  When `-fwrapv' is
   5715      used, there is no difference between `-fstrict-overflow' and
   5716      `-fno-strict-overflow' for integers.  With `-fwrapv' certain types
   5717      of overflow are permitted.  For example, if the compiler gets an
   5718      overflow when doing arithmetic on constants, the overflowed value
   5719      can still be used with `-fwrapv', but not otherwise.
   5720 
   5721      The `-fstrict-overflow' option is enabled at levels `-O2', `-O3',
   5722      `-Os'.
   5723 
   5724 `-falign-functions'
   5725 `-falign-functions=N'
   5726      Align the start of functions to the next power-of-two greater than
   5727      N, skipping up to N bytes.  For instance, `-falign-functions=32'
   5728      aligns functions to the next 32-byte boundary, but
   5729      `-falign-functions=24' would align to the next 32-byte boundary
   5730      only if this can be done by skipping 23 bytes or less.
   5731 
   5732      `-fno-align-functions' and `-falign-functions=1' are equivalent
   5733      and mean that functions will not be aligned.
   5734 
   5735      Some assemblers only support this flag when N is a power of two;
   5736      in that case, it is rounded up.
   5737 
   5738      If N is not specified or is zero, use a machine-dependent default.
   5739 
   5740      Enabled at levels `-O2', `-O3'.
   5741 
   5742 `-falign-labels'
   5743 `-falign-labels=N'
   5744      Align all branch targets to a power-of-two boundary, skipping up to
   5745      N bytes like `-falign-functions'.  This option can easily make
   5746      code slower, because it must insert dummy operations for when the
   5747      branch target is reached in the usual flow of the code.
   5748 
   5749      `-fno-align-labels' and `-falign-labels=1' are equivalent and mean
   5750      that labels will not be aligned.
   5751 
   5752      If `-falign-loops' or `-falign-jumps' are applicable and are
   5753      greater than this value, then their values are used instead.
   5754 
   5755      If N is not specified or is zero, use a machine-dependent default
   5756      which is very likely to be `1', meaning no alignment.
   5757 
   5758      Enabled at levels `-O2', `-O3'.
   5759 
   5760 `-falign-loops'
   5761 `-falign-loops=N'
   5762      Align loops to a power-of-two boundary, skipping up to N bytes
   5763      like `-falign-functions'.  The hope is that the loop will be
   5764      executed many times, which will make up for any execution of the
   5765      dummy operations.
   5766 
   5767      `-fno-align-loops' and `-falign-loops=1' are equivalent and mean
   5768      that loops will not be aligned.
   5769 
   5770      If N is not specified or is zero, use a machine-dependent default.
   5771 
   5772      Enabled at levels `-O2', `-O3'.
   5773 
   5774 `-falign-jumps'
   5775 `-falign-jumps=N'
   5776      Align branch targets to a power-of-two boundary, for branch targets
   5777      where the targets can only be reached by jumping, skipping up to N
   5778      bytes like `-falign-functions'.  In this case, no dummy operations
   5779      need be executed.
   5780 
   5781      `-fno-align-jumps' and `-falign-jumps=1' are equivalent and mean
   5782      that loops will not be aligned.
   5783 
   5784      If N is not specified or is zero, use a machine-dependent default.
   5785 
   5786      Enabled at levels `-O2', `-O3'.
   5787 
   5788 `-funit-at-a-time'
   5789      Parse the whole compilation unit before starting to produce code.
   5790      This allows some extra optimizations to take place but consumes
   5791      more memory (in general).  There are some compatibility issues
   5792      with _unit-at-a-time_ mode:
   5793         * enabling _unit-at-a-time_ mode may change the order in which
   5794           functions, variables, and top-level `asm' statements are
   5795           emitted, and will likely break code relying on some particular
   5796           ordering.  The majority of such top-level `asm' statements,
   5797           though, can be replaced by `section' attributes.  The
   5798           `fno-toplevel-reorder' option may be used to keep the ordering
   5799           used in the input file, at the cost of some optimizations.
   5800 
   5801         * _unit-at-a-time_ mode removes unreferenced static variables
   5802           and functions.  This may result in undefined references when
   5803           an `asm' statement refers directly to variables or functions
   5804           that are otherwise unused.  In that case either the
   5805           variable/function shall be listed as an operand of the `asm'
   5806           statement operand or, in the case of top-level `asm'
   5807           statements the attribute `used' shall be used on the
   5808           declaration.
   5809 
   5810         * Static functions now can use non-standard passing conventions
   5811           that may break `asm' statements calling functions directly.
   5812           Again, attribute `used' will prevent this behavior.
   5813 
   5814      As a temporary workaround, `-fno-unit-at-a-time' can be used, but
   5815      this scheme may not be supported by future releases of GCC.
   5816 
   5817      Enabled at levels `-O', `-O2', `-O3', `-Os'.
   5818 
   5819 `-fno-toplevel-reorder'
   5820      Do not reorder top-level functions, variables, and `asm'
   5821      statements.  Output them in the same order that they appear in the
   5822      input file.  When this option is used, unreferenced static
   5823      variables will not be removed.  This option is intended to support
   5824      existing code which relies on a particular ordering.  For new
   5825      code, it is better to use attributes.
   5826 
   5827 `-fweb'
   5828      Constructs webs as commonly used for register allocation purposes
   5829      and assign each web individual pseudo register.  This allows the
   5830      register allocation pass to operate on pseudos directly, but also
   5831      strengthens several other optimization passes, such as CSE, loop
   5832      optimizer and trivial dead code remover.  It can, however, make
   5833      debugging impossible, since variables will no longer stay in a
   5834      "home register".
   5835 
   5836      Enabled by default with `-funroll-loops'.
   5837 
   5838 `-fwhole-program'
   5839      Assume that the current compilation unit represents whole program
   5840      being compiled.  All public functions and variables with the
   5841      exception of `main' and those merged by attribute
   5842      `externally_visible' become static functions and in a affect gets
   5843      more aggressively optimized by interprocedural optimizers.  While
   5844      this option is equivalent to proper use of `static' keyword for
   5845      programs consisting of single file, in combination with option
   5846      `--combine' this flag can be used to compile most of smaller scale
   5847      C programs since the functions and variables become local for the
   5848      whole combined compilation unit, not for the single source file
   5849      itself.
   5850 
   5851      This option is not supported for Fortran programs.
   5852 
   5853 `-fcprop-registers'
   5854      After register allocation and post-register allocation instruction
   5855      splitting, we perform a copy-propagation pass to try to reduce
   5856      scheduling dependencies and occasionally eliminate the copy.
   5857 
   5858      Enabled at levels `-O', `-O2', `-O3', `-Os'.
   5859 
   5860 `-fprofile-generate'
   5861      Enable options usually used for instrumenting application to
   5862      produce profile useful for later recompilation with profile
   5863      feedback based optimization.  You must use `-fprofile-generate'
   5864      both when compiling and when linking your program.
   5865 
   5866      The following options are enabled: `-fprofile-arcs',
   5867      `-fprofile-values', `-fvpt'.
   5868 
   5869 `-fprofile-use'
   5870      Enable profile feedback directed optimizations, and optimizations
   5871      generally profitable only with profile feedback available.
   5872 
   5873      The following options are enabled: `-fbranch-probabilities',
   5874      `-fvpt', `-funroll-loops', `-fpeel-loops', `-ftracer'
   5875 
   5876      By default, GCC emits an error message if the feedback profiles do
   5877      not match the source code.  This error can be turned into a
   5878      warning by using `-Wcoverage-mismatch'.  Note this may result in
   5879      poorly optimized code.
   5880 
   5881  The following options control compiler behavior regarding floating
   5882 point arithmetic.  These options trade off between speed and
   5883 correctness.  All must be specifically enabled.
   5884 
   5885 `-ffloat-store'
   5886      Do not store floating point variables in registers, and inhibit
   5887      other options that might change whether a floating point value is
   5888      taken from a register or memory.
   5889 
   5890      This option prevents undesirable excess precision on machines such
   5891      as the 68000 where the floating registers (of the 68881) keep more
   5892      precision than a `double' is supposed to have.  Similarly for the
   5893      x86 architecture.  For most programs, the excess precision does
   5894      only good, but a few programs rely on the precise definition of
   5895      IEEE floating point.  Use `-ffloat-store' for such programs, after
   5896      modifying them to store all pertinent intermediate computations
   5897      into variables.
   5898 
   5899 `-ffast-math'
   5900      Sets `-fno-math-errno', `-funsafe-math-optimizations',
   5901      `-ffinite-math-only', `-fno-rounding-math', `-fno-signaling-nans'
   5902      and `-fcx-limited-range'.
   5903 
   5904      This option causes the preprocessor macro `__FAST_MATH__' to be
   5905      defined.
   5906 
   5907      This option is not turned on by any `-O' option since it can
   5908      result in incorrect output for programs which depend on an exact
   5909      implementation of IEEE or ISO rules/specifications for math
   5910      functions. It may, however, yield faster code for programs that do
   5911      not require the guarantees of these specifications.
   5912 
   5913 `-fno-math-errno'
   5914      Do not set ERRNO after calling math functions that are executed
   5915      with a single instruction, e.g., sqrt.  A program that relies on
   5916      IEEE exceptions for math error handling may want to use this flag
   5917      for speed while maintaining IEEE arithmetic compatibility.
   5918 
   5919      This option is not turned on by any `-O' option since it can
   5920      result in incorrect output for programs which depend on an exact
   5921      implementation of IEEE or ISO rules/specifications for math
   5922      functions. It may, however, yield faster code for programs that do
   5923      not require the guarantees of these specifications.
   5924 
   5925      The default is `-fmath-errno'.
   5926 
   5927      On Darwin systems, the math library never sets `errno'.  There is
   5928      therefore no reason for the compiler to consider the possibility
   5929      that it might, and `-fno-math-errno' is the default.
   5930 
   5931 `-funsafe-math-optimizations'
   5932      Allow optimizations for floating-point arithmetic that (a) assume
   5933      that arguments and results are valid and (b) may violate IEEE or
   5934      ANSI standards.  When used at link-time, it may include libraries
   5935      or startup files that change the default FPU control word or other
   5936      similar optimizations.
   5937 
   5938      This option is not turned on by any `-O' option since it can
   5939      result in incorrect output for programs which depend on an exact
   5940      implementation of IEEE or ISO rules/specifications for math
   5941      functions. It may, however, yield faster code for programs that do
   5942      not require the guarantees of these specifications.  Enables
   5943      `-fno-signed-zeros', `-fno-trapping-math', `-fassociative-math'
   5944      and `-freciprocal-math'.
   5945 
   5946      The default is `-fno-unsafe-math-optimizations'.
   5947 
   5948 `-fassociative-math'
   5949      Allow re-association of operands in series of floating-point
   5950      operations.  This violates the ISO C and C++ language standard by
   5951      possibly changing computation result.  NOTE: re-ordering may
   5952      change the sign of zero as well as ignore NaNs and inhibit or
   5953      create underflow or overflow (and thus cannot be used on a code
   5954      which relies on rounding behavior like `(x + 2**52) - 2**52)'.
   5955      May also reorder floating-point comparisons and thus may not be
   5956      used when ordered comparisons are required.  This option requires
   5957      that both `-fno-signed-zeros' and `-fno-trapping-math' be in
   5958      effect.  Moreover, it doesn't make much sense with
   5959      `-frounding-math'.
   5960 
   5961      The default is `-fno-associative-math'.
   5962 
   5963 `-freciprocal-math'
   5964      Allow the reciprocal of a value to be used instead of dividing by
   5965      the value if this enables optimizations.  For example `x / y' can
   5966      be replaced with `x * (1/y)' which is useful if `(1/y)' is subject
   5967      to common subexpression elimination.  Note that this loses
   5968      precision and increases the number of flops operating on the value.
   5969 
   5970      The default is `-fno-reciprocal-math'.
   5971 
   5972 `-ffinite-math-only'
   5973      Allow optimizations for floating-point arithmetic that assume that
   5974      arguments and results are not NaNs or +-Infs.
   5975 
   5976      This option is not turned on by any `-O' option since it can
   5977      result in incorrect output for programs which depend on an exact
   5978      implementation of IEEE or ISO rules/specifications for math
   5979      functions. It may, however, yield faster code for programs that do
   5980      not require the guarantees of these specifications.
   5981 
   5982      The default is `-fno-finite-math-only'.
   5983 
   5984 `-fno-signed-zeros'
   5985      Allow optimizations for floating point arithmetic that ignore the
   5986      signedness of zero.  IEEE arithmetic specifies the behavior of
   5987      distinct +0.0 and -0.0 values, which then prohibits simplification
   5988      of expressions such as x+0.0 or 0.0*x (even with
   5989      `-ffinite-math-only').  This option implies that the sign of a
   5990      zero result isn't significant.
   5991 
   5992      The default is `-fsigned-zeros'.
   5993 
   5994 `-fno-trapping-math'
   5995      Compile code assuming that floating-point operations cannot
   5996      generate user-visible traps.  These traps include division by
   5997      zero, overflow, underflow, inexact result and invalid operation.
   5998      This option requires that `-fno-signaling-nans' be in effect.
   5999      Setting this option may allow faster code if one relies on
   6000      "non-stop" IEEE arithmetic, for example.
   6001 
   6002      This option should never be turned on by any `-O' option since it
   6003      can result in incorrect output for programs which depend on an
   6004      exact implementation of IEEE or ISO rules/specifications for math
   6005      functions.
   6006 
   6007      The default is `-ftrapping-math'.
   6008 
   6009 `-frounding-math'
   6010      Disable transformations and optimizations that assume default
   6011      floating point rounding behavior.  This is round-to-zero for all
   6012      floating point to integer conversions, and round-to-nearest for
   6013      all other arithmetic truncations.  This option should be specified
   6014      for programs that change the FP rounding mode dynamically, or that
   6015      may be executed with a non-default rounding mode.  This option
   6016      disables constant folding of floating point expressions at
   6017      compile-time (which may be affected by rounding mode) and
   6018      arithmetic transformations that are unsafe in the presence of
   6019      sign-dependent rounding modes.
   6020 
   6021      The default is `-fno-rounding-math'.
   6022 
   6023      This option is experimental and does not currently guarantee to
   6024      disable all GCC optimizations that are affected by rounding mode.
   6025      Future versions of GCC may provide finer control of this setting
   6026      using C99's `FENV_ACCESS' pragma.  This command line option will
   6027      be used to specify the default state for `FENV_ACCESS'.
   6028 
   6029 `-frtl-abstract-sequences'
   6030      It is a size optimization method. This option is to find identical
   6031      sequences of code, which can be turned into pseudo-procedures  and
   6032      then  replace  all  occurrences with  calls to  the  newly created
   6033      subroutine. It is kind of an opposite of `-finline-functions'.
   6034      This optimization runs at RTL level.
   6035 
   6036 `-fsignaling-nans'
   6037      Compile code assuming that IEEE signaling NaNs may generate
   6038      user-visible traps during floating-point operations.  Setting this
   6039      option disables optimizations that may change the number of
   6040      exceptions visible with signaling NaNs.  This option implies
   6041      `-ftrapping-math'.
   6042 
   6043      This option causes the preprocessor macro `__SUPPORT_SNAN__' to be
   6044      defined.
   6045 
   6046      The default is `-fno-signaling-nans'.
   6047 
   6048      This option is experimental and does not currently guarantee to
   6049      disable all GCC optimizations that affect signaling NaN behavior.
   6050 
   6051 `-fsingle-precision-constant'
   6052      Treat floating point constant as single precision constant instead
   6053      of implicitly converting it to double precision constant.
   6054 
   6055 `-fcx-limited-range'
   6056      When enabled, this option states that a range reduction step is not
   6057      needed when performing complex division.  The default is
   6058      `-fno-cx-limited-range', but is enabled by `-ffast-math'.
   6059 
   6060      This option controls the default setting of the ISO C99
   6061      `CX_LIMITED_RANGE' pragma.  Nevertheless, the option applies to
   6062      all languages.
   6063 
   6064 
   6065  The following options control optimizations that may improve
   6066 performance, but are not enabled by any `-O' options.  This section
   6067 includes experimental options that may produce broken code.
   6068 
   6069 `-fbranch-probabilities'
   6070      After running a program compiled with `-fprofile-arcs' (*note
   6071      Options for Debugging Your Program or `gcc': Debugging Options.),
   6072      you can compile it a second time using `-fbranch-probabilities',
   6073      to improve optimizations based on the number of times each branch
   6074      was taken.  When the program compiled with `-fprofile-arcs' exits
   6075      it saves arc execution counts to a file called `SOURCENAME.gcda'
   6076      for each source file.  The information in this data file is very
   6077      dependent on the structure of the generated code, so you must use
   6078      the same source code and the same optimization options for both
   6079      compilations.
   6080 
   6081      With `-fbranch-probabilities', GCC puts a `REG_BR_PROB' note on
   6082      each `JUMP_INSN' and `CALL_INSN'.  These can be used to improve
   6083      optimization.  Currently, they are only used in one place: in
   6084      `reorg.c', instead of guessing which path a branch is mostly to
   6085      take, the `REG_BR_PROB' values are used to exactly determine which
   6086      path is taken more often.
   6087 
   6088 `-fprofile-values'
   6089      If combined with `-fprofile-arcs', it adds code so that some data
   6090      about values of expressions in the program is gathered.
   6091 
   6092      With `-fbranch-probabilities', it reads back the data gathered
   6093      from profiling values of expressions and adds `REG_VALUE_PROFILE'
   6094      notes to instructions for their later usage in optimizations.
   6095 
   6096      Enabled with `-fprofile-generate' and `-fprofile-use'.
   6097 
   6098 `-fvpt'
   6099      If combined with `-fprofile-arcs', it instructs the compiler to add
   6100      a code to gather information about values of expressions.
   6101 
   6102      With `-fbranch-probabilities', it reads back the data gathered and
   6103      actually performs the optimizations based on them.  Currently the
   6104      optimizations include specialization of division operation using
   6105      the knowledge about the value of the denominator.
   6106 
   6107 `-frename-registers'
   6108      Attempt to avoid false dependencies in scheduled code by making use
   6109      of registers left over after register allocation.  This
   6110      optimization will most benefit processors with lots of registers.
   6111      Depending on the debug information format adopted by the target,
   6112      however, it can make debugging impossible, since variables will no
   6113      longer stay in a "home register".
   6114 
   6115      Enabled by default with `-funroll-loops'.
   6116 
   6117 `-ftracer'
   6118      Perform tail duplication to enlarge superblock size.  This
   6119      transformation simplifies the control flow of the function
   6120      allowing other optimizations to do better job.
   6121 
   6122      Enabled with `-fprofile-use'.
   6123 
   6124 `-funroll-loops'
   6125      Unroll loops whose number of iterations can be determined at
   6126      compile time or upon entry to the loop.  `-funroll-loops' implies
   6127      `-frerun-cse-after-loop', `-fweb' and `-frename-registers'.  It
   6128      also turns on complete loop peeling (i.e. complete removal of
   6129      loops with small constant number of iterations).  This option
   6130      makes code larger, and may or may not make it run faster.
   6131 
   6132      Enabled with `-fprofile-use'.
   6133 
   6134 `-funroll-all-loops'
   6135      Unroll all loops, even if their number of iterations is uncertain
   6136      when the loop is entered.  This usually makes programs run more
   6137      slowly.  `-funroll-all-loops' implies the same options as
   6138      `-funroll-loops'.
   6139 
   6140 `-fpeel-loops'
   6141      Peels the loops for that there is enough information that they do
   6142      not roll much (from profile feedback).  It also turns on complete
   6143      loop peeling (i.e. complete removal of loops with small constant
   6144      number of iterations).
   6145 
   6146      Enabled with `-fprofile-use'.
   6147 
   6148 `-fmove-loop-invariants'
   6149      Enables the loop invariant motion pass in the RTL loop optimizer.
   6150      Enabled at level `-O1'
   6151 
   6152 `-funswitch-loops'
   6153      Move branches with loop invariant conditions out of the loop, with
   6154      duplicates of the loop on both branches (modified according to
   6155      result of the condition).
   6156 
   6157 `-ffunction-sections'
   6158 `-fdata-sections'
   6159      Place each function or data item into its own section in the output
   6160      file if the target supports arbitrary sections.  The name of the
   6161      function or the name of the data item determines the section's name
   6162      in the output file.
   6163 
   6164      Use these options on systems where the linker can perform
   6165      optimizations to improve locality of reference in the instruction
   6166      space.  Most systems using the ELF object format and SPARC
   6167      processors running Solaris 2 have linkers with such optimizations.
   6168      AIX may have these optimizations in the future.
   6169 
   6170      Only use these options when there are significant benefits from
   6171      doing so.  When you specify these options, the assembler and
   6172      linker will create larger object and executable files and will
   6173      also be slower.  You will not be able to use `gprof' on all
   6174      systems if you specify this option and you may have problems with
   6175      debugging if you specify both this option and `-g'.
   6176 
   6177 `-fbranch-target-load-optimize'
   6178      Perform branch target register load optimization before prologue /
   6179      epilogue threading.  The use of target registers can typically be
   6180      exposed only during reload, thus hoisting loads out of loops and
   6181      doing inter-block scheduling needs a separate optimization pass.
   6182 
   6183 `-fbranch-target-load-optimize2'
   6184      Perform branch target register load optimization after prologue /
   6185      epilogue threading.
   6186 
   6187 `-fbtr-bb-exclusive'
   6188      When performing branch target register load optimization, don't
   6189      reuse branch target registers in within any basic block.
   6190 
   6191 `-fstack-protector'
   6192      Emit extra code to check for buffer overflows, such as stack
   6193      smashing attacks.  This is done by adding a guard variable to
   6194      functions with vulnerable objects.  This includes functions that
   6195      call alloca, and functions with buffers larger than 8 bytes.  The
   6196      guards are initialized when a function is entered and then checked
   6197      when the function exits.  If a guard check fails, an error message
   6198      is printed and the program exits.
   6199 
   6200 `-fstack-protector-all'
   6201      Like `-fstack-protector' except that all functions are protected.
   6202 
   6203 `-fsection-anchors'
   6204      Try to reduce the number of symbolic address calculations by using
   6205      shared "anchor" symbols to address nearby objects.  This
   6206      transformation can help to reduce the number of GOT entries and
   6207      GOT accesses on some targets.
   6208 
   6209      For example, the implementation of the following function `foo':
   6210 
   6211           static int a, b, c;
   6212           int foo (void) { return a + b + c; }
   6213 
   6214      would usually calculate the addresses of all three variables, but
   6215      if you compile it with `-fsection-anchors', it will access the
   6216      variables from a common anchor point instead.  The effect is
   6217      similar to the following pseudocode (which isn't valid C):
   6218 
   6219           int foo (void)
   6220           {
   6221             register int *xr = &x;
   6222             return xr[&a - &x] + xr[&b - &x] + xr[&c - &x];
   6223           }
   6224 
   6225      Not all targets support this option.
   6226 
   6227 `--param NAME=VALUE'
   6228      In some places, GCC uses various constants to control the amount of
   6229      optimization that is done.  For example, GCC will not inline
   6230      functions that contain more that a certain number of instructions.
   6231      You can control some of these constants on the command-line using
   6232      the `--param' option.
   6233 
   6234      The names of specific parameters, and the meaning of the values,
   6235      are tied to the internals of the compiler, and are subject to
   6236      change without notice in future releases.
   6237 
   6238      In each case, the VALUE is an integer.  The allowable choices for
   6239      NAME are given in the following table:
   6240 
   6241     `salias-max-implicit-fields'
   6242           The maximum number of fields in a variable without direct
   6243           structure accesses for which structure aliasing will consider
   6244           trying to track each field.  The default is 5
   6245 
   6246     `salias-max-array-elements'
   6247           The maximum number of elements an array can have and its
   6248           elements still be tracked individually by structure aliasing.
   6249           The default is 4
   6250 
   6251     `sra-max-structure-size'
   6252           The maximum structure size, in bytes, at which the scalar
   6253           replacement of aggregates (SRA) optimization will perform
   6254           block copies.  The default value, 0, implies that GCC will
   6255           select the most appropriate size itself.
   6256 
   6257     `sra-field-structure-ratio'
   6258           The threshold ratio (as a percentage) between instantiated
   6259           fields and the complete structure size.  We say that if the
   6260           ratio of the number of bytes in instantiated fields to the
   6261           number of bytes in the complete structure exceeds this
   6262           parameter, then block copies are not used.  The default is 75.
   6263 
   6264     `struct-reorg-cold-struct-ratio'
   6265           The threshold ratio (as a percentage) between a structure
   6266           frequency and the frequency of the hottest structure in the
   6267           program.  This parameter is used by struct-reorg optimization
   6268           enabled by `-fipa-struct-reorg'.  We say that if the ratio of
   6269           a structure frequency, calculated by profiling, to the
   6270           hottest structure frequency in the program is less than this
   6271           parameter, then structure reorganization is not applied to
   6272           this structure.  The default is 10.
   6273 
   6274     `max-crossjump-edges'
   6275           The maximum number of incoming edges to consider for
   6276           crossjumping.  The algorithm used by `-fcrossjumping' is
   6277           O(N^2) in the number of edges incoming to each block.
   6278           Increasing values mean more aggressive optimization, making
   6279           the compile time increase with probably small improvement in
   6280           executable size.
   6281 
   6282     `min-crossjump-insns'
   6283           The minimum number of instructions which must be matched at
   6284           the end of two blocks before crossjumping will be performed
   6285           on them.  This value is ignored in the case where all
   6286           instructions in the block being crossjumped from are matched.
   6287           The default value is 5.
   6288 
   6289     `max-grow-copy-bb-insns'
   6290           The maximum code size expansion factor when copying basic
   6291           blocks instead of jumping.  The expansion is relative to a
   6292           jump instruction.  The default value is 8.
   6293 
   6294     `max-goto-duplication-insns'
   6295           The maximum number of instructions to duplicate to a block
   6296           that jumps to a computed goto.  To avoid O(N^2) behavior in a
   6297           number of passes, GCC factors computed gotos early in the
   6298           compilation process, and unfactors them as late as possible.
   6299           Only computed jumps at the end of a basic blocks with no more
   6300           than max-goto-duplication-insns are unfactored.  The default
   6301           value is 8.
   6302 
   6303     `max-delay-slot-insn-search'
   6304           The maximum number of instructions to consider when looking
   6305           for an instruction to fill a delay slot.  If more than this
   6306           arbitrary number of instructions is searched, the time
   6307           savings from filling the delay slot will be minimal so stop
   6308           searching.  Increasing values mean more aggressive
   6309           optimization, making the compile time increase with probably
   6310           small improvement in executable run time.
   6311 
   6312     `max-delay-slot-live-search'
   6313           When trying to fill delay slots, the maximum number of
   6314           instructions to consider when searching for a block with
   6315           valid live register information.  Increasing this arbitrarily
   6316           chosen value means more aggressive optimization, increasing
   6317           the compile time.  This parameter should be removed when the
   6318           delay slot code is rewritten to maintain the control-flow
   6319           graph.
   6320 
   6321     `max-gcse-memory'
   6322           The approximate maximum amount of memory that will be
   6323           allocated in order to perform the global common subexpression
   6324           elimination optimization.  If more memory than specified is
   6325           required, the optimization will not be done.
   6326 
   6327     `max-gcse-passes'
   6328           The maximum number of passes of GCSE to run.  The default is
   6329           1.
   6330 
   6331     `max-pending-list-length'
   6332           The maximum number of pending dependencies scheduling will
   6333           allow before flushing the current state and starting over.
   6334           Large functions with few branches or calls can create
   6335           excessively large lists which needlessly consume memory and
   6336           resources.
   6337 
   6338     `max-inline-insns-single'
   6339           Several parameters control the tree inliner used in gcc.
   6340           This number sets the maximum number of instructions (counted
   6341           in GCC's internal representation) in a single function that
   6342           the tree inliner will consider for inlining.  This only
   6343           affects functions declared inline and methods implemented in
   6344           a class declaration (C++).  The default value is 450.
   6345 
   6346     `max-inline-insns-auto'
   6347           When you use `-finline-functions' (included in `-O3'), a lot
   6348           of functions that would otherwise not be considered for
   6349           inlining by the compiler will be investigated.  To those
   6350           functions, a different (more restrictive) limit compared to
   6351           functions declared inline can be applied.  The default value
   6352           is 90.
   6353 
   6354     `large-function-insns'
   6355           The limit specifying really large functions.  For functions
   6356           larger than this limit after inlining inlining is constrained
   6357           by `--param large-function-growth'.  This parameter is useful
   6358           primarily to avoid extreme compilation time caused by
   6359           non-linear algorithms used by the backend.  This parameter is
   6360           ignored when `-funit-at-a-time' is not used.  The default
   6361           value is 2700.
   6362 
   6363     `large-function-growth'
   6364           Specifies maximal growth of large function caused by inlining
   6365           in percents.  This parameter is ignored when
   6366           `-funit-at-a-time' is not used.  The default value is 100
   6367           which limits large function growth to 2.0 times the original
   6368           size.
   6369 
   6370     `large-unit-insns'
   6371           The limit specifying large translation unit.  Growth caused
   6372           by inlining of units larger than this limit is limited by
   6373           `--param inline-unit-growth'.  For small units this might be
   6374           too tight (consider unit consisting of function A that is
   6375           inline and B that just calls A three time.  If B is small
   6376           relative to A, the growth of unit is 300\% and yet such
   6377           inlining is very sane.  For very large units consisting of
   6378           small inlineable functions however the overall unit growth
   6379           limit is needed to avoid exponential explosion of code size.
   6380           Thus for smaller units, the size is increased to `--param
   6381           large-unit-insns' before applying `--param
   6382           inline-unit-growth'.  The default is 10000
   6383 
   6384     `inline-unit-growth'
   6385           Specifies maximal overall growth of the compilation unit
   6386           caused by inlining.  This parameter is ignored when
   6387           `-funit-at-a-time' is not used.  The default value is 30
   6388           which limits unit growth to 1.3 times the original size.
   6389 
   6390     `large-stack-frame'
   6391           The limit specifying large stack frames.  While inlining the
   6392           algorithm is trying to not grow past this limit too much.
   6393           Default value is 256 bytes.
   6394 
   6395     `large-stack-frame-growth'
   6396           Specifies maximal growth of large stack frames caused by
   6397           inlining in percents.  The default value is 1000 which limits
   6398           large stack frame growth to 11 times the original size.
   6399 
   6400     `max-inline-insns-recursive'
   6401     `max-inline-insns-recursive-auto'
   6402           Specifies maximum number of instructions out-of-line copy of
   6403           self recursive inline function can grow into by performing
   6404           recursive inlining.
   6405 
   6406           For functions declared inline `--param
   6407           max-inline-insns-recursive' is taken into account.  For
   6408           function not declared inline, recursive inlining happens only
   6409           when `-finline-functions' (included in `-O3') is enabled and
   6410           `--param max-inline-insns-recursive-auto' is used.  The
   6411           default value is 450.
   6412 
   6413     `max-inline-recursive-depth'
   6414     `max-inline-recursive-depth-auto'
   6415           Specifies maximum recursion depth used by the recursive
   6416           inlining.
   6417 
   6418           For functions declared inline `--param
   6419           max-inline-recursive-depth' is taken into account.  For
   6420           function not declared inline, recursive inlining happens only
   6421           when `-finline-functions' (included in `-O3') is enabled and
   6422           `--param max-inline-recursive-depth-auto' is used.  The
   6423           default value is 8.
   6424 
   6425     `min-inline-recursive-probability'
   6426           Recursive inlining is profitable only for function having
   6427           deep recursion in average and can hurt for function having
   6428           little recursion depth by increasing the prologue size or
   6429           complexity of function body to other optimizers.
   6430 
   6431           When profile feedback is available (see `-fprofile-generate')
   6432           the actual recursion depth can be guessed from probability
   6433           that function will recurse via given call expression.  This
   6434           parameter limits inlining only to call expression whose
   6435           probability exceeds given threshold (in percents).  The
   6436           default value is 10.
   6437 
   6438     `inline-call-cost'
   6439           Specify cost of call instruction relative to simple
   6440           arithmetics operations (having cost of 1).  Increasing this
   6441           cost disqualifies inlining of non-leaf functions and at the
   6442           same time increases size of leaf function that is believed to
   6443           reduce function size by being inlined.  In effect it
   6444           increases amount of inlining for code having large
   6445           abstraction penalty (many functions that just pass the
   6446           arguments to other functions) and decrease inlining for code
   6447           with low abstraction penalty.  The default value is 12.
   6448 
   6449     `min-vect-loop-bound'
   6450           The minimum number of iterations under which a loop will not
   6451           get vectorized when `-ftree-vectorize' is used.  The number
   6452           of iterations after vectorization needs to be greater than
   6453           the value specified by this option to allow vectorization.
   6454           The default value is 0.
   6455 
   6456     `max-unrolled-insns'
   6457           The maximum number of instructions that a loop should have if
   6458           that loop is unrolled, and if the loop is unrolled, it
   6459           determines how many times the loop code is unrolled.
   6460 
   6461     `max-average-unrolled-insns'
   6462           The maximum number of instructions biased by probabilities of
   6463           their execution that a loop should have if that loop is
   6464           unrolled, and if the loop is unrolled, it determines how many
   6465           times the loop code is unrolled.
   6466 
   6467     `max-unroll-times'
   6468           The maximum number of unrollings of a single loop.
   6469 
   6470     `max-peeled-insns'
   6471           The maximum number of instructions that a loop should have if
   6472           that loop is peeled, and if the loop is peeled, it determines
   6473           how many times the loop code is peeled.
   6474 
   6475     `max-peel-times'
   6476           The maximum number of peelings of a single loop.
   6477 
   6478     `max-completely-peeled-insns'
   6479           The maximum number of insns of a completely peeled loop.
   6480 
   6481     `max-completely-peel-times'
   6482           The maximum number of iterations of a loop to be suitable for
   6483           complete peeling.
   6484 
   6485     `max-unswitch-insns'
   6486           The maximum number of insns of an unswitched loop.
   6487 
   6488     `max-unswitch-level'
   6489           The maximum number of branches unswitched in a single loop.
   6490 
   6491     `lim-expensive'
   6492           The minimum cost of an expensive expression in the loop
   6493           invariant motion.
   6494 
   6495     `iv-consider-all-candidates-bound'
   6496           Bound on number of candidates for induction variables below
   6497           that all candidates are considered for each use in induction
   6498           variable optimizations.  Only the most relevant candidates
   6499           are considered if there are more candidates, to avoid
   6500           quadratic time complexity.
   6501 
   6502     `iv-max-considered-uses'
   6503           The induction variable optimizations give up on loops that
   6504           contain more induction variable uses.
   6505 
   6506     `iv-always-prune-cand-set-bound'
   6507           If number of candidates in the set is smaller than this value,
   6508           we always try to remove unnecessary ivs from the set during
   6509           its optimization when a new iv is added to the set.
   6510 
   6511     `scev-max-expr-size'
   6512           Bound on size of expressions used in the scalar evolutions
   6513           analyzer.  Large expressions slow the analyzer.
   6514 
   6515     `omega-max-vars'
   6516           The maximum number of variables in an Omega constraint system.
   6517           The default value is 128.
   6518 
   6519     `omega-max-geqs'
   6520           The maximum number of inequalities in an Omega constraint
   6521           system.  The default value is 256.
   6522 
   6523     `omega-max-eqs'
   6524           The maximum number of equalities in an Omega constraint
   6525           system.  The default value is 128.
   6526 
   6527     `omega-max-wild-cards'
   6528           The maximum number of wildcard variables that the Omega
   6529           solver will be able to insert.  The default value is 18.
   6530 
   6531     `omega-hash-table-size'
   6532           The size of the hash table in the Omega solver.  The default
   6533           value is 550.
   6534 
   6535     `omega-max-keys'
   6536           The maximal number of keys used by the Omega solver.  The
   6537           default value is 500.
   6538 
   6539     `omega-eliminate-redundant-constraints'
   6540           When set to 1, use expensive methods to eliminate all
   6541           redundant constraints.  The default value is 0.
   6542 
   6543     `vect-max-version-for-alignment-checks'
   6544           The maximum number of runtime checks that can be performed
   6545           when doing loop versioning for alignment in the vectorizer.
   6546           See option ftree-vect-loop-version for more information.
   6547 
   6548     `vect-max-version-for-alias-checks'
   6549           The maximum number of runtime checks that can be performed
   6550           when doing loop versioning for alias in the vectorizer.  See
   6551           option ftree-vect-loop-version for more information.
   6552 
   6553     `max-iterations-to-track'
   6554           The maximum number of iterations of a loop the brute force
   6555           algorithm for analysis of # of iterations of the loop tries
   6556           to evaluate.
   6557 
   6558     `hot-bb-count-fraction'
   6559           Select fraction of the maximal count of repetitions of basic
   6560           block in program given basic block needs to have to be
   6561           considered hot.
   6562 
   6563     `hot-bb-frequency-fraction'
   6564           Select fraction of the maximal frequency of executions of
   6565           basic block in function given basic block needs to have to be
   6566           considered hot
   6567 
   6568     `max-predicted-iterations'
   6569           The maximum number of loop iterations we predict statically.
   6570           This is useful in cases where function contain single loop
   6571           with known bound and other loop with unknown.  We predict the
   6572           known number of iterations correctly, while the unknown
   6573           number of iterations average to roughly 10.  This means that
   6574           the loop without bounds would appear artificially cold
   6575           relative to the other one.
   6576 
   6577     `align-threshold'
   6578           Select fraction of the maximal frequency of executions of
   6579           basic block in function given basic block will get aligned.
   6580 
   6581     `align-loop-iterations'
   6582           A loop expected to iterate at lest the selected number of
   6583           iterations will get aligned.
   6584 
   6585     `tracer-dynamic-coverage'
   6586     `tracer-dynamic-coverage-feedback'
   6587           This value is used to limit superblock formation once the
   6588           given percentage of executed instructions is covered.  This
   6589           limits unnecessary code size expansion.
   6590 
   6591           The `tracer-dynamic-coverage-feedback' is used only when
   6592           profile feedback is available.  The real profiles (as opposed
   6593           to statically estimated ones) are much less balanced allowing
   6594           the threshold to be larger value.
   6595 
   6596     `tracer-max-code-growth'
   6597           Stop tail duplication once code growth has reached given
   6598           percentage.  This is rather hokey argument, as most of the
   6599           duplicates will be eliminated later in cross jumping, so it
   6600           may be set to much higher values than is the desired code
   6601           growth.
   6602 
   6603     `tracer-min-branch-ratio'
   6604           Stop reverse growth when the reverse probability of best edge
   6605           is less than this threshold (in percent).
   6606 
   6607     `tracer-min-branch-ratio'
   6608     `tracer-min-branch-ratio-feedback'
   6609           Stop forward growth if the best edge do have probability
   6610           lower than this threshold.
   6611 
   6612           Similarly to `tracer-dynamic-coverage' two values are
   6613           present, one for compilation for profile feedback and one for
   6614           compilation without.  The value for compilation with profile
   6615           feedback needs to be more conservative (higher) in order to
   6616           make tracer effective.
   6617 
   6618     `max-cse-path-length'
   6619           Maximum number of basic blocks on path that cse considers.
   6620           The default is 10.
   6621 
   6622     `max-cse-insns'
   6623           The maximum instructions CSE process before flushing. The
   6624           default is 1000.
   6625 
   6626     `max-aliased-vops'
   6627           Maximum number of virtual operands per function allowed to
   6628           represent aliases before triggering the alias partitioning
   6629           heuristic.  Alias partitioning reduces compile times and
   6630           memory consumption needed for aliasing at the expense of
   6631           precision loss in alias information.  The default value for
   6632           this parameter is 100 for -O1, 500 for -O2 and 1000 for -O3.
   6633 
   6634           Notice that if a function contains more memory statements
   6635           than the value of this parameter, it is not really possible
   6636           to achieve this reduction.  In this case, the compiler will
   6637           use the number of memory statements as the value for
   6638           `max-aliased-vops'.
   6639 
   6640     `avg-aliased-vops'
   6641           Average number of virtual operands per statement allowed to
   6642           represent aliases before triggering the alias partitioning
   6643           heuristic.  This works in conjunction with
   6644           `max-aliased-vops'.  If a function contains more than
   6645           `max-aliased-vops' virtual operators, then memory symbols
   6646           will be grouped into memory partitions until either the total
   6647           number of virtual operators is below `max-aliased-vops' or
   6648           the average number of virtual operators per memory statement
   6649           is below `avg-aliased-vops'.  The default value for this
   6650           parameter is 1 for -O1 and -O2, and 3 for -O3.
   6651 
   6652     `ggc-min-expand'
   6653           GCC uses a garbage collector to manage its own memory
   6654           allocation.  This parameter specifies the minimum percentage
   6655           by which the garbage collector's heap should be allowed to
   6656           expand between collections.  Tuning this may improve
   6657           compilation speed; it has no effect on code generation.
   6658 
   6659           The default is 30% + 70% * (RAM/1GB) with an upper bound of
   6660           100% when RAM >= 1GB.  If `getrlimit' is available, the
   6661           notion of "RAM" is the smallest of actual RAM and
   6662           `RLIMIT_DATA' or `RLIMIT_AS'.  If GCC is not able to
   6663           calculate RAM on a particular platform, the lower bound of
   6664           30% is used.  Setting this parameter and `ggc-min-heapsize'
   6665           to zero causes a full collection to occur at every
   6666           opportunity.  This is extremely slow, but can be useful for
   6667           debugging.
   6668 
   6669     `ggc-min-heapsize'
   6670           Minimum size of the garbage collector's heap before it begins
   6671           bothering to collect garbage.  The first collection occurs
   6672           after the heap expands by `ggc-min-expand'% beyond
   6673           `ggc-min-heapsize'.  Again, tuning this may improve
   6674           compilation speed, and has no effect on code generation.
   6675 
   6676           The default is the smaller of RAM/8, RLIMIT_RSS, or a limit
   6677           which tries to ensure that RLIMIT_DATA or RLIMIT_AS are not
   6678           exceeded, but with a lower bound of 4096 (four megabytes) and
   6679           an upper bound of 131072 (128 megabytes).  If GCC is not able
   6680           to calculate RAM on a particular platform, the lower bound is
   6681           used.  Setting this parameter very large effectively disables
   6682           garbage collection.  Setting this parameter and
   6683           `ggc-min-expand' to zero causes a full collection to occur at
   6684           every opportunity.
   6685 
   6686     `max-reload-search-insns'
   6687           The maximum number of instruction reload should look backward
   6688           for equivalent register.  Increasing values mean more
   6689           aggressive optimization, making the compile time increase
   6690           with probably slightly better performance.  The default value
   6691           is 100.
   6692 
   6693     `max-cselib-memory-locations'
   6694           The maximum number of memory locations cselib should take
   6695           into account.  Increasing values mean more aggressive
   6696           optimization, making the compile time increase with probably
   6697           slightly better performance.  The default value is 500.
   6698 
   6699     `max-flow-memory-locations'
   6700           Similar as `max-cselib-memory-locations' but for dataflow
   6701           liveness.  The default value is 100.
   6702 
   6703     `reorder-blocks-duplicate'
   6704     `reorder-blocks-duplicate-feedback'
   6705           Used by basic block reordering pass to decide whether to use
   6706           unconditional branch or duplicate the code on its
   6707           destination.  Code is duplicated when its estimated size is
   6708           smaller than this value multiplied by the estimated size of
   6709           unconditional jump in the hot spots of the program.
   6710 
   6711           The `reorder-block-duplicate-feedback' is used only when
   6712           profile feedback is available and may be set to higher values
   6713           than `reorder-block-duplicate' since information about the
   6714           hot spots is more accurate.
   6715 
   6716     `max-sched-ready-insns'
   6717           The maximum number of instructions ready to be issued the
   6718           scheduler should consider at any given time during the first
   6719           scheduling pass.  Increasing values mean more thorough
   6720           searches, making the compilation time increase with probably
   6721           little benefit.  The default value is 100.
   6722 
   6723     `max-sched-region-blocks'
   6724           The maximum number of blocks in a region to be considered for
   6725           interblock scheduling.  The default value is 10.
   6726 
   6727     `max-sched-region-insns'
   6728           The maximum number of insns in a region to be considered for
   6729           interblock scheduling.  The default value is 100.
   6730 
   6731     `min-spec-prob'
   6732           The minimum probability (in percents) of reaching a source
   6733           block for interblock speculative scheduling.  The default
   6734           value is 40.
   6735 
   6736     `max-sched-extend-regions-iters'
   6737           The maximum number of iterations through CFG to extend
   6738           regions.  0 - disable region extension, N - do at most N
   6739           iterations.  The default value is 0.
   6740 
   6741     `max-sched-insn-conflict-delay'
   6742           The maximum conflict delay for an insn to be considered for
   6743           speculative motion.  The default value is 3.
   6744 
   6745     `sched-spec-prob-cutoff'
   6746           The minimal probability of speculation success (in percents),
   6747           so that speculative insn will be scheduled.  The default
   6748           value is 40.
   6749 
   6750     `max-last-value-rtl'
   6751           The maximum size measured as number of RTLs that can be
   6752           recorded in an expression in combiner for a pseudo register
   6753           as last known value of that register.  The default is 10000.
   6754 
   6755     `integer-share-limit'
   6756           Small integer constants can use a shared data structure,
   6757           reducing the compiler's memory usage and increasing its
   6758           speed.  This sets the maximum value of a shared integer
   6759           constant.  The default value is 256.
   6760 
   6761     `min-virtual-mappings'
   6762           Specifies the minimum number of virtual mappings in the
   6763           incremental SSA updater that should be registered to trigger
   6764           the virtual mappings heuristic defined by
   6765           virtual-mappings-ratio.  The default value is 100.
   6766 
   6767     `virtual-mappings-ratio'
   6768           If the number of virtual mappings is virtual-mappings-ratio
   6769           bigger than the number of virtual symbols to be updated, then
   6770           the incremental SSA updater switches to a full update for
   6771           those symbols.  The default ratio is 3.
   6772 
   6773     `ssp-buffer-size'
   6774           The minimum size of buffers (i.e. arrays) that will receive
   6775           stack smashing protection when `-fstack-protection' is used.
   6776 
   6777     `max-jump-thread-duplication-stmts'
   6778           Maximum number of statements allowed in a block that needs to
   6779           be duplicated when threading jumps.
   6780 
   6781     `max-fields-for-field-sensitive'
   6782           Maximum number of fields in a structure we will treat in a
   6783           field sensitive manner during pointer analysis.
   6784 
   6785     `prefetch-latency'
   6786           Estimate on average number of instructions that are executed
   6787           before prefetch finishes.  The distance we prefetch ahead is
   6788           proportional to this constant.  Increasing this number may
   6789           also lead to less streams being prefetched (see
   6790           `simultaneous-prefetches').
   6791 
   6792     `simultaneous-prefetches'
   6793           Maximum number of prefetches that can run at the same time.
   6794 
   6795     `l1-cache-line-size'
   6796           The size of cache line in L1 cache, in bytes.
   6797 
   6798     `l1-cache-size'
   6799           The size of L1 cache, in kilobytes.
   6800 
   6801     `l2-cache-size'
   6802           The size of L2 cache, in kilobytes.
   6803 
   6804     `use-canonical-types'
   6805           Whether the compiler should use the "canonical" type system.
   6806           By default, this should always be 1, which uses a more
   6807           efficient internal mechanism for comparing types in C++ and
   6808           Objective-C++.  However, if bugs in the canonical type system
   6809           are causing compilation failures, set this value to 0 to
   6810           disable canonical types.
   6811 
   6812     `max-partial-antic-length'
   6813           Maximum length of the partial antic set computed during the
   6814           tree partial redundancy elimination optimization
   6815           (`-ftree-pre') when optimizing at `-O3' and above.  For some
   6816           sorts of source code the enhanced partial redundancy
   6817           elimination optimization can run away, consuming all of the
   6818           memory available on the host machine.  This parameter sets a
   6819           limit on the length of the sets that are computed, which
   6820           prevents the runaway behaviour.  Setting a value of 0 for
   6821           this paramter will allow an unlimited set length.
   6822 
   6823     `sccvn-max-scc-size'
   6824           Maximum size of a strongly connected component (SCC) during
   6825           SCCVN processing.  If this limit is hit, SCCVN processing for
   6826           the whole function will not be done and optimizations
   6827           depending on it will be disabled.  The default maximum SCC
   6828           size is 10000.
   6829 
   6830 
   6831 
   6832 File: gcc.info,  Node: Preprocessor Options,  Next: Assembler Options,  Prev: Optimize Options,  Up: Invoking GCC
   6833 
   6834 3.11 Options Controlling the Preprocessor
   6835 =========================================
   6836 
   6837 These options control the C preprocessor, which is run on each C source
   6838 file before actual compilation.
   6839 
   6840  If you use the `-E' option, nothing is done except preprocessing.
   6841 Some of these options make sense only together with `-E' because they
   6842 cause the preprocessor output to be unsuitable for actual compilation.
   6843 
   6844      You can use `-Wp,OPTION' to bypass the compiler driver and pass
   6845      OPTION directly through to the preprocessor.  If OPTION contains
   6846      commas, it is split into multiple options at the commas.  However,
   6847      many options are modified, translated or interpreted by the
   6848      compiler driver before being passed to the preprocessor, and `-Wp'
   6849      forcibly bypasses this phase.  The preprocessor's direct interface
   6850      is undocumented and subject to change, so whenever possible you
   6851      should avoid using `-Wp' and let the driver handle the options
   6852      instead.
   6853 
   6854 `-Xpreprocessor OPTION'
   6855      Pass OPTION as an option to the preprocessor.  You can use this to
   6856      supply system-specific preprocessor options which GCC does not
   6857      know how to recognize.
   6858 
   6859      If you want to pass an option that takes an argument, you must use
   6860      `-Xpreprocessor' twice, once for the option and once for the
   6861      argument.
   6862 
   6863 `-D NAME'
   6864      Predefine NAME as a macro, with definition `1'.
   6865 
   6866 `-D NAME=DEFINITION'
   6867      The contents of DEFINITION are tokenized and processed as if they
   6868      appeared during translation phase three in a `#define' directive.
   6869      In particular, the definition will be truncated by embedded
   6870      newline characters.
   6871 
   6872      If you are invoking the preprocessor from a shell or shell-like
   6873      program you may need to use the shell's quoting syntax to protect
   6874      characters such as spaces that have a meaning in the shell syntax.
   6875 
   6876      If you wish to define a function-like macro on the command line,
   6877      write its argument list with surrounding parentheses before the
   6878      equals sign (if any).  Parentheses are meaningful to most shells,
   6879      so you will need to quote the option.  With `sh' and `csh',
   6880      `-D'NAME(ARGS...)=DEFINITION'' works.
   6881 
   6882      `-D' and `-U' options are processed in the order they are given on
   6883      the command line.  All `-imacros FILE' and `-include FILE' options
   6884      are processed after all `-D' and `-U' options.
   6885 
   6886 `-U NAME'
   6887      Cancel any previous definition of NAME, either built in or
   6888      provided with a `-D' option.
   6889 
   6890 `-undef'
   6891      Do not predefine any system-specific or GCC-specific macros.  The
   6892      standard predefined macros remain defined.
   6893 
   6894 `-I DIR'
   6895      Add the directory DIR to the list of directories to be searched
   6896      for header files.  Directories named by `-I' are searched before
   6897      the standard system include directories.  If the directory DIR is
   6898      a standard system include directory, the option is ignored to
   6899      ensure that the default search order for system directories and
   6900      the special treatment of system headers are not defeated .  If DIR
   6901      begins with `=', then the `=' will be replaced by the sysroot
   6902      prefix; see `--sysroot' and `-isysroot'.
   6903 
   6904 `-o FILE'
   6905      Write output to FILE.  This is the same as specifying FILE as the
   6906      second non-option argument to `cpp'.  `gcc' has a different
   6907      interpretation of a second non-option argument, so you must use
   6908      `-o' to specify the output file.
   6909 
   6910 `-Wall'
   6911      Turns on all optional warnings which are desirable for normal code.
   6912      At present this is `-Wcomment', `-Wtrigraphs', `-Wmultichar' and a
   6913      warning about integer promotion causing a change of sign in `#if'
   6914      expressions.  Note that many of the preprocessor's warnings are on
   6915      by default and have no options to control them.
   6916 
   6917 `-Wcomment'
   6918 `-Wcomments'
   6919      Warn whenever a comment-start sequence `/*' appears in a `/*'
   6920      comment, or whenever a backslash-newline appears in a `//' comment.
   6921      (Both forms have the same effect.)
   6922 
   6923 `-Wtrigraphs'
   6924      Most trigraphs in comments cannot affect the meaning of the
   6925      program.  However, a trigraph that would form an escaped newline
   6926      (`??/' at the end of a line) can, by changing where the comment
   6927      begins or ends.  Therefore, only trigraphs that would form escaped
   6928      newlines produce warnings inside a comment.
   6929 
   6930      This option is implied by `-Wall'.  If `-Wall' is not given, this
   6931      option is still enabled unless trigraphs are enabled.  To get
   6932      trigraph conversion without warnings, but get the other `-Wall'
   6933      warnings, use `-trigraphs -Wall -Wno-trigraphs'.
   6934 
   6935 `-Wtraditional'
   6936      Warn about certain constructs that behave differently in
   6937      traditional and ISO C.  Also warn about ISO C constructs that have
   6938      no traditional C equivalent, and problematic constructs which
   6939      should be avoided.
   6940 
   6941 `-Wimport'
   6942      Warn the first time `#import' is used.
   6943 
   6944 `-Wundef'
   6945      Warn whenever an identifier which is not a macro is encountered in
   6946      an `#if' directive, outside of `defined'.  Such identifiers are
   6947      replaced with zero.
   6948 
   6949 `-Wunused-macros'
   6950      Warn about macros defined in the main file that are unused.  A
   6951      macro is "used" if it is expanded or tested for existence at least
   6952      once.  The preprocessor will also warn if the macro has not been
   6953      used at the time it is redefined or undefined.
   6954 
   6955      Built-in macros, macros defined on the command line, and macros
   6956      defined in include files are not warned about.
   6957 
   6958      _Note:_ If a macro is actually used, but only used in skipped
   6959      conditional blocks, then CPP will report it as unused.  To avoid
   6960      the warning in such a case, you might improve the scope of the
   6961      macro's definition by, for example, moving it into the first
   6962      skipped block.  Alternatively, you could provide a dummy use with
   6963      something like:
   6964 
   6965           #if defined the_macro_causing_the_warning
   6966           #endif
   6967 
   6968 `-Wendif-labels'
   6969      Warn whenever an `#else' or an `#endif' are followed by text.
   6970      This usually happens in code of the form
   6971 
   6972           #if FOO
   6973           ...
   6974           #else FOO
   6975           ...
   6976           #endif FOO
   6977 
   6978      The second and third `FOO' should be in comments, but often are not
   6979      in older programs.  This warning is on by default.
   6980 
   6981 `-Werror'
   6982      Make all warnings into hard errors.  Source code which triggers
   6983      warnings will be rejected.
   6984 
   6985 `-Wsystem-headers'
   6986      Issue warnings for code in system headers.  These are normally
   6987      unhelpful in finding bugs in your own code, therefore suppressed.
   6988      If you are responsible for the system library, you may want to see
   6989      them.
   6990 
   6991 `-w'
   6992      Suppress all warnings, including those which GNU CPP issues by
   6993      default.
   6994 
   6995 `-pedantic'
   6996      Issue all the mandatory diagnostics listed in the C standard.
   6997      Some of them are left out by default, since they trigger
   6998      frequently on harmless code.
   6999 
   7000 `-pedantic-errors'
   7001      Issue all the mandatory diagnostics, and make all mandatory
   7002      diagnostics into errors.  This includes mandatory diagnostics that
   7003      GCC issues without `-pedantic' but treats as warnings.
   7004 
   7005 `-M'
   7006      Instead of outputting the result of preprocessing, output a rule
   7007      suitable for `make' describing the dependencies of the main source
   7008      file.  The preprocessor outputs one `make' rule containing the
   7009      object file name for that source file, a colon, and the names of
   7010      all the included files, including those coming from `-include' or
   7011      `-imacros' command line options.
   7012 
   7013      Unless specified explicitly (with `-MT' or `-MQ'), the object file
   7014      name consists of the name of the source file with any suffix
   7015      replaced with object file suffix and with any leading directory
   7016      parts removed.  If there are many included files then the rule is
   7017      split into several lines using `\'-newline.  The rule has no
   7018      commands.
   7019 
   7020      This option does not suppress the preprocessor's debug output,
   7021      such as `-dM'.  To avoid mixing such debug output with the
   7022      dependency rules you should explicitly specify the dependency
   7023      output file with `-MF', or use an environment variable like
   7024      `DEPENDENCIES_OUTPUT' (*note Environment Variables::).  Debug
   7025      output will still be sent to the regular output stream as normal.
   7026 
   7027      Passing `-M' to the driver implies `-E', and suppresses warnings
   7028      with an implicit `-w'.
   7029 
   7030 `-MM'
   7031      Like `-M' but do not mention header files that are found in system
   7032      header directories, nor header files that are included, directly
   7033      or indirectly, from such a header.
   7034 
   7035      This implies that the choice of angle brackets or double quotes in
   7036      an `#include' directive does not in itself determine whether that
   7037      header will appear in `-MM' dependency output.  This is a slight
   7038      change in semantics from GCC versions 3.0 and earlier.
   7039 
   7040 `-MF FILE'
   7041      When used with `-M' or `-MM', specifies a file to write the
   7042      dependencies to.  If no `-MF' switch is given the preprocessor
   7043      sends the rules to the same place it would have sent preprocessed
   7044      output.
   7045 
   7046      When used with the driver options `-MD' or `-MMD', `-MF' overrides
   7047      the default dependency output file.
   7048 
   7049 `-MG'
   7050      In conjunction with an option such as `-M' requesting dependency
   7051      generation, `-MG' assumes missing header files are generated files
   7052      and adds them to the dependency list without raising an error.
   7053      The dependency filename is taken directly from the `#include'
   7054      directive without prepending any path.  `-MG' also suppresses
   7055      preprocessed output, as a missing header file renders this useless.
   7056 
   7057      This feature is used in automatic updating of makefiles.
   7058 
   7059 `-MP'
   7060      This option instructs CPP to add a phony target for each dependency
   7061      other than the main file, causing each to depend on nothing.  These
   7062      dummy rules work around errors `make' gives if you remove header
   7063      files without updating the `Makefile' to match.
   7064 
   7065      This is typical output:
   7066 
   7067           test.o: test.c test.h
   7068 
   7069           test.h:
   7070 
   7071 `-MT TARGET'
   7072      Change the target of the rule emitted by dependency generation.  By
   7073      default CPP takes the name of the main input file, deletes any
   7074      directory components and any file suffix such as `.c', and appends
   7075      the platform's usual object suffix.  The result is the target.
   7076 
   7077      An `-MT' option will set the target to be exactly the string you
   7078      specify.  If you want multiple targets, you can specify them as a
   7079      single argument to `-MT', or use multiple `-MT' options.
   7080 
   7081      For example, `-MT '$(objpfx)foo.o'' might give
   7082 
   7083           $(objpfx)foo.o: foo.c
   7084 
   7085 `-MQ TARGET'
   7086      Same as `-MT', but it quotes any characters which are special to
   7087      Make.  `-MQ '$(objpfx)foo.o'' gives
   7088 
   7089           $$(objpfx)foo.o: foo.c
   7090 
   7091      The default target is automatically quoted, as if it were given
   7092      with `-MQ'.
   7093 
   7094 `-MD'
   7095      `-MD' is equivalent to `-M -MF FILE', except that `-E' is not
   7096      implied.  The driver determines FILE based on whether an `-o'
   7097      option is given.  If it is, the driver uses its argument but with
   7098      a suffix of `.d', otherwise it takes the name of the input file,
   7099      removes any directory components and suffix, and applies a `.d'
   7100      suffix.
   7101 
   7102      If `-MD' is used in conjunction with `-E', any `-o' switch is
   7103      understood to specify the dependency output file (*note -MF:
   7104      dashMF.), but if used without `-E', each `-o' is understood to
   7105      specify a target object file.
   7106 
   7107      Since `-E' is not implied, `-MD' can be used to generate a
   7108      dependency output file as a side-effect of the compilation process.
   7109 
   7110 `-MMD'
   7111      Like `-MD' except mention only user header files, not system
   7112      header files.
   7113 
   7114 `-fpch-deps'
   7115      When using precompiled headers (*note Precompiled Headers::), this
   7116      flag will cause the dependency-output flags to also list the files
   7117      from the precompiled header's dependencies.  If not specified only
   7118      the precompiled header would be listed and not the files that were
   7119      used to create it because those files are not consulted when a
   7120      precompiled header is used.
   7121 
   7122 `-fpch-preprocess'
   7123      This option allows use of a precompiled header (*note Precompiled
   7124      Headers::) together with `-E'.  It inserts a special `#pragma',
   7125      `#pragma GCC pch_preprocess "<filename>"' in the output to mark
   7126      the place where the precompiled header was found, and its
   7127      filename.  When `-fpreprocessed' is in use, GCC recognizes this
   7128      `#pragma' and loads the PCH.
   7129 
   7130      This option is off by default, because the resulting preprocessed
   7131      output is only really suitable as input to GCC.  It is switched on
   7132      by `-save-temps'.
   7133 
   7134      You should not write this `#pragma' in your own code, but it is
   7135      safe to edit the filename if the PCH file is available in a
   7136      different location.  The filename may be absolute or it may be
   7137      relative to GCC's current directory.
   7138 
   7139 `-x c'
   7140 `-x c++'
   7141 `-x objective-c'
   7142 `-x assembler-with-cpp'
   7143      Specify the source language: C, C++, Objective-C, or assembly.
   7144      This has nothing to do with standards conformance or extensions;
   7145      it merely selects which base syntax to expect.  If you give none
   7146      of these options, cpp will deduce the language from the extension
   7147      of the source file: `.c', `.cc', `.m', or `.S'.  Some other common
   7148      extensions for C++ and assembly are also recognized.  If cpp does
   7149      not recognize the extension, it will treat the file as C; this is
   7150      the most generic mode.
   7151 
   7152      _Note:_ Previous versions of cpp accepted a `-lang' option which
   7153      selected both the language and the standards conformance level.
   7154      This option has been removed, because it conflicts with the `-l'
   7155      option.
   7156 
   7157 `-std=STANDARD'
   7158 `-ansi'
   7159      Specify the standard to which the code should conform.  Currently
   7160      CPP knows about C and C++ standards; others may be added in the
   7161      future.
   7162 
   7163      STANDARD may be one of:
   7164     `iso9899:1990'
   7165     `c89'
   7166           The ISO C standard from 1990.  `c89' is the customary
   7167           shorthand for this version of the standard.
   7168 
   7169           The `-ansi' option is equivalent to `-std=c89'.
   7170 
   7171     `iso9899:199409'
   7172           The 1990 C standard, as amended in 1994.
   7173 
   7174     `iso9899:1999'
   7175     `c99'
   7176     `iso9899:199x'
   7177     `c9x'
   7178           The revised ISO C standard, published in December 1999.
   7179           Before publication, this was known as C9X.
   7180 
   7181     `gnu89'
   7182           The 1990 C standard plus GNU extensions.  This is the default.
   7183 
   7184     `gnu99'
   7185     `gnu9x'
   7186           The 1999 C standard plus GNU extensions.
   7187 
   7188     `c++98'
   7189           The 1998 ISO C++ standard plus amendments.
   7190 
   7191     `gnu++98'
   7192           The same as `-std=c++98' plus GNU extensions.  This is the
   7193           default for C++ code.
   7194 
   7195 `-I-'
   7196      Split the include path.  Any directories specified with `-I'
   7197      options before `-I-' are searched only for headers requested with
   7198      `#include "FILE"'; they are not searched for `#include <FILE>'.
   7199      If additional directories are specified with `-I' options after
   7200      the `-I-', those directories are searched for all `#include'
   7201      directives.
   7202 
   7203      In addition, `-I-' inhibits the use of the directory of the current
   7204      file directory as the first search directory for `#include "FILE"'.
   7205      This option has been deprecated.
   7206 
   7207 `-nostdinc'
   7208      Do not search the standard system directories for header files.
   7209      Only the directories you have specified with `-I' options (and the
   7210      directory of the current file, if appropriate) are searched.
   7211 
   7212 `-nostdinc++'
   7213      Do not search for header files in the C++-specific standard
   7214      directories, but do still search the other standard directories.
   7215      (This option is used when building the C++ library.)
   7216 
   7217 `-include FILE'
   7218      Process FILE as if `#include "file"' appeared as the first line of
   7219      the primary source file.  However, the first directory searched
   7220      for FILE is the preprocessor's working directory _instead of_ the
   7221      directory containing the main source file.  If not found there, it
   7222      is searched for in the remainder of the `#include "..."' search
   7223      chain as normal.
   7224 
   7225      If multiple `-include' options are given, the files are included
   7226      in the order they appear on the command line.
   7227 
   7228 `-imacros FILE'
   7229      Exactly like `-include', except that any output produced by
   7230      scanning FILE is thrown away.  Macros it defines remain defined.
   7231      This allows you to acquire all the macros from a header without
   7232      also processing its declarations.
   7233 
   7234      All files specified by `-imacros' are processed before all files
   7235      specified by `-include'.
   7236 
   7237 `-idirafter DIR'
   7238      Search DIR for header files, but do it _after_ all directories
   7239      specified with `-I' and the standard system directories have been
   7240      exhausted.  DIR is treated as a system include directory.  If DIR
   7241      begins with `=', then the `=' will be replaced by the sysroot
   7242      prefix; see `--sysroot' and `-isysroot'.
   7243 
   7244 `-iprefix PREFIX'
   7245      Specify PREFIX as the prefix for subsequent `-iwithprefix'
   7246      options.  If the prefix represents a directory, you should include
   7247      the final `/'.
   7248 
   7249 `-iwithprefix DIR'
   7250 `-iwithprefixbefore DIR'
   7251      Append DIR to the prefix specified previously with `-iprefix', and
   7252      add the resulting directory to the include search path.
   7253      `-iwithprefixbefore' puts it in the same place `-I' would;
   7254      `-iwithprefix' puts it where `-idirafter' would.
   7255 
   7256 `-isysroot DIR'
   7257      This option is like the `--sysroot' option, but applies only to
   7258      header files.  See the `--sysroot' option for more information.
   7259 
   7260 `-imultilib DIR'
   7261      Use DIR as a subdirectory of the directory containing
   7262      target-specific C++ headers.
   7263 
   7264 `-isystem DIR'
   7265      Search DIR for header files, after all directories specified by
   7266      `-I' but before the standard system directories.  Mark it as a
   7267      system directory, so that it gets the same special treatment as is
   7268      applied to the standard system directories.  If DIR begins with
   7269      `=', then the `=' will be replaced by the sysroot prefix; see
   7270      `--sysroot' and `-isysroot'.
   7271 
   7272 `-iquote DIR'
   7273      Search DIR only for header files requested with `#include "FILE"';
   7274      they are not searched for `#include <FILE>', before all
   7275      directories specified by `-I' and before the standard system
   7276      directories.  If DIR begins with `=', then the `=' will be replaced
   7277      by the sysroot prefix; see `--sysroot' and `-isysroot'.
   7278 
   7279 `-fdirectives-only'
   7280      When preprocessing, handle directives, but do not expand macros.
   7281 
   7282      The option's behavior depends on the `-E' and `-fpreprocessed'
   7283      options.
   7284 
   7285      With `-E', preprocessing is limited to the handling of directives
   7286      such as `#define', `#ifdef', and `#error'.  Other preprocessor
   7287      operations, such as macro expansion and trigraph conversion are
   7288      not performed.  In addition, the `-dD' option is implicitly
   7289      enabled.
   7290 
   7291      With `-fpreprocessed', predefinition of command line and most
   7292      builtin macros is disabled.  Macros such as `__LINE__', which are
   7293      contextually dependent, are handled normally.  This enables
   7294      compilation of files previously preprocessed with `-E
   7295      -fdirectives-only'.
   7296 
   7297      With both `-E' and `-fpreprocessed', the rules for
   7298      `-fpreprocessed' take precedence.  This enables full preprocessing
   7299      of files previously preprocessed with `-E -fdirectives-only'.
   7300 
   7301 `-fdollars-in-identifiers'
   7302      Accept `$' in identifiers.
   7303 
   7304 `-fextended-identifiers'
   7305      Accept universal character names in identifiers.  This option is
   7306      experimental; in a future version of GCC, it will be enabled by
   7307      default for C99 and C++.
   7308 
   7309 `-fpreprocessed'
   7310      Indicate to the preprocessor that the input file has already been
   7311      preprocessed.  This suppresses things like macro expansion,
   7312      trigraph conversion, escaped newline splicing, and processing of
   7313      most directives.  The preprocessor still recognizes and removes
   7314      comments, so that you can pass a file preprocessed with `-C' to
   7315      the compiler without problems.  In this mode the integrated
   7316      preprocessor is little more than a tokenizer for the front ends.
   7317 
   7318      `-fpreprocessed' is implicit if the input file has one of the
   7319      extensions `.i', `.ii' or `.mi'.  These are the extensions that
   7320      GCC uses for preprocessed files created by `-save-temps'.
   7321 
   7322 `-ftabstop=WIDTH'
   7323      Set the distance between tab stops.  This helps the preprocessor
   7324      report correct column numbers in warnings or errors, even if tabs
   7325      appear on the line.  If the value is less than 1 or greater than
   7326      100, the option is ignored.  The default is 8.
   7327 
   7328 `-fexec-charset=CHARSET'
   7329      Set the execution character set, used for string and character
   7330      constants.  The default is UTF-8.  CHARSET can be any encoding
   7331      supported by the system's `iconv' library routine.
   7332 
   7333 `-fwide-exec-charset=CHARSET'
   7334      Set the wide execution character set, used for wide string and
   7335      character constants.  The default is UTF-32 or UTF-16, whichever
   7336      corresponds to the width of `wchar_t'.  As with `-fexec-charset',
   7337      CHARSET can be any encoding supported by the system's `iconv'
   7338      library routine; however, you will have problems with encodings
   7339      that do not fit exactly in `wchar_t'.
   7340 
   7341 `-finput-charset=CHARSET'
   7342      Set the input character set, used for translation from the
   7343      character set of the input file to the source character set used
   7344      by GCC.  If the locale does not specify, or GCC cannot get this
   7345      information from the locale, the default is UTF-8.  This can be
   7346      overridden by either the locale or this command line option.
   7347      Currently the command line option takes precedence if there's a
   7348      conflict.  CHARSET can be any encoding supported by the system's
   7349      `iconv' library routine.
   7350 
   7351 `-fworking-directory'
   7352      Enable generation of linemarkers in the preprocessor output that
   7353      will let the compiler know the current working directory at the
   7354      time of preprocessing.  When this option is enabled, the
   7355      preprocessor will emit, after the initial linemarker, a second
   7356      linemarker with the current working directory followed by two
   7357      slashes.  GCC will use this directory, when it's present in the
   7358      preprocessed input, as the directory emitted as the current
   7359      working directory in some debugging information formats.  This
   7360      option is implicitly enabled if debugging information is enabled,
   7361      but this can be inhibited with the negated form
   7362      `-fno-working-directory'.  If the `-P' flag is present in the
   7363      command line, this option has no effect, since no `#line'
   7364      directives are emitted whatsoever.
   7365 
   7366 `-fno-show-column'
   7367      Do not print column numbers in diagnostics.  This may be necessary
   7368      if diagnostics are being scanned by a program that does not
   7369      understand the column numbers, such as `dejagnu'.
   7370 
   7371 `-A PREDICATE=ANSWER'
   7372      Make an assertion with the predicate PREDICATE and answer ANSWER.
   7373      This form is preferred to the older form `-A PREDICATE(ANSWER)',
   7374      which is still supported, because it does not use shell special
   7375      characters.
   7376 
   7377 `-A -PREDICATE=ANSWER'
   7378      Cancel an assertion with the predicate PREDICATE and answer ANSWER.
   7379 
   7380 `-dCHARS'
   7381      CHARS is a sequence of one or more of the following characters,
   7382      and must not be preceded by a space.  Other characters are
   7383      interpreted by the compiler proper, or reserved for future
   7384      versions of GCC, and so are silently ignored.  If you specify
   7385      characters whose behavior conflicts, the result is undefined.
   7386 
   7387     `M'
   7388           Instead of the normal output, generate a list of `#define'
   7389           directives for all the macros defined during the execution of
   7390           the preprocessor, including predefined macros.  This gives
   7391           you a way of finding out what is predefined in your version
   7392           of the preprocessor.  Assuming you have no file `foo.h', the
   7393           command
   7394 
   7395                touch foo.h; cpp -dM foo.h
   7396 
   7397           will show all the predefined macros.
   7398 
   7399           If you use `-dM' without the `-E' option, `-dM' is
   7400           interpreted as a synonym for `-fdump-rtl-mach'.  *Note
   7401           Debugging Options: (gcc)Debugging Options.
   7402 
   7403     `D'
   7404           Like `M' except in two respects: it does _not_ include the
   7405           predefined macros, and it outputs _both_ the `#define'
   7406           directives and the result of preprocessing.  Both kinds of
   7407           output go to the standard output file.
   7408 
   7409     `N'
   7410           Like `D', but emit only the macro names, not their expansions.
   7411 
   7412     `I'
   7413           Output `#include' directives in addition to the result of
   7414           preprocessing.
   7415 
   7416 `-P'
   7417      Inhibit generation of linemarkers in the output from the
   7418      preprocessor.  This might be useful when running the preprocessor
   7419      on something that is not C code, and will be sent to a program
   7420      which might be confused by the linemarkers.
   7421 
   7422 `-C'
   7423      Do not discard comments.  All comments are passed through to the
   7424      output file, except for comments in processed directives, which
   7425      are deleted along with the directive.
   7426 
   7427      You should be prepared for side effects when using `-C'; it causes
   7428      the preprocessor to treat comments as tokens in their own right.
   7429      For example, comments appearing at the start of what would be a
   7430      directive line have the effect of turning that line into an
   7431      ordinary source line, since the first token on the line is no
   7432      longer a `#'.
   7433 
   7434 `-CC'
   7435      Do not discard comments, including during macro expansion.  This is
   7436      like `-C', except that comments contained within macros are also
   7437      passed through to the output file where the macro is expanded.
   7438 
   7439      In addition to the side-effects of the `-C' option, the `-CC'
   7440      option causes all C++-style comments inside a macro to be
   7441      converted to C-style comments.  This is to prevent later use of
   7442      that macro from inadvertently commenting out the remainder of the
   7443      source line.
   7444 
   7445      The `-CC' option is generally used to support lint comments.
   7446 
   7447 `-traditional-cpp'
   7448      Try to imitate the behavior of old-fashioned C preprocessors, as
   7449      opposed to ISO C preprocessors.
   7450 
   7451 `-trigraphs'
   7452      Process trigraph sequences.  These are three-character sequences,
   7453      all starting with `??', that are defined by ISO C to stand for
   7454      single characters.  For example, `??/' stands for `\', so `'??/n''
   7455      is a character constant for a newline.  By default, GCC ignores
   7456      trigraphs, but in standard-conforming modes it converts them.  See
   7457      the `-std' and `-ansi' options.
   7458 
   7459      The nine trigraphs and their replacements are
   7460 
   7461           Trigraph:       ??(  ??)  ??<  ??>  ??=  ??/  ??'  ??!  ??-
   7462           Replacement:      [    ]    {    }    #    \    ^    |    ~
   7463 
   7464 `-remap'
   7465      Enable special code to work around file systems which only permit
   7466      very short file names, such as MS-DOS.
   7467 
   7468 `--help'
   7469 `--target-help'
   7470      Print text describing all the command line options instead of
   7471      preprocessing anything.
   7472 
   7473 `-v'
   7474      Verbose mode.  Print out GNU CPP's version number at the beginning
   7475      of execution, and report the final form of the include path.
   7476 
   7477 `-H'
   7478      Print the name of each header file used, in addition to other
   7479      normal activities.  Each name is indented to show how deep in the
   7480      `#include' stack it is.  Precompiled header files are also
   7481      printed, even if they are found to be invalid; an invalid
   7482      precompiled header file is printed with `...x' and a valid one
   7483      with `...!' .
   7484 
   7485 `-version'
   7486 `--version'
   7487      Print out GNU CPP's version number.  With one dash, proceed to
   7488      preprocess as normal.  With two dashes, exit immediately.
   7489 
   7490 
   7491 File: gcc.info,  Node: Assembler Options,  Next: Link Options,  Prev: Preprocessor Options,  Up: Invoking GCC
   7492 
   7493 3.12 Passing Options to the Assembler
   7494 =====================================
   7495 
   7496 You can pass options to the assembler.
   7497 
   7498 `-Wa,OPTION'
   7499      Pass OPTION as an option to the assembler.  If OPTION contains
   7500      commas, it is split into multiple options at the commas.
   7501 
   7502 `-Xassembler OPTION'
   7503      Pass OPTION as an option to the assembler.  You can use this to
   7504      supply system-specific assembler options which GCC does not know
   7505      how to recognize.
   7506 
   7507      If you want to pass an option that takes an argument, you must use
   7508      `-Xassembler' twice, once for the option and once for the argument.
   7509 
   7510 
   7511 
   7512 File: gcc.info,  Node: Link Options,  Next: Directory Options,  Prev: Assembler Options,  Up: Invoking GCC
   7513 
   7514 3.13 Options for Linking
   7515 ========================
   7516 
   7517 These options come into play when the compiler links object files into
   7518 an executable output file.  They are meaningless if the compiler is not
   7519 doing a link step.
   7520 
   7521 `OBJECT-FILE-NAME'
   7522      A file name that does not end in a special recognized suffix is
   7523      considered to name an object file or library.  (Object files are
   7524      distinguished from libraries by the linker according to the file
   7525      contents.)  If linking is done, these object files are used as
   7526      input to the linker.
   7527 
   7528 `-c'
   7529 `-S'
   7530 `-E'
   7531      If any of these options is used, then the linker is not run, and
   7532      object file names should not be used as arguments.  *Note Overall
   7533      Options::.
   7534 
   7535 `-lLIBRARY'
   7536 `-l LIBRARY'
   7537      Search the library named LIBRARY when linking.  (The second
   7538      alternative with the library as a separate argument is only for
   7539      POSIX compliance and is not recommended.)
   7540 
   7541      It makes a difference where in the command you write this option;
   7542      the linker searches and processes libraries and object files in
   7543      the order they are specified.  Thus, `foo.o -lz bar.o' searches
   7544      library `z' after file `foo.o' but before `bar.o'.  If `bar.o'
   7545      refers to functions in `z', those functions may not be loaded.
   7546 
   7547      The linker searches a standard list of directories for the library,
   7548      which is actually a file named `libLIBRARY.a'.  The linker then
   7549      uses this file as if it had been specified precisely by name.
   7550 
   7551      The directories searched include several standard system
   7552      directories plus any that you specify with `-L'.
   7553 
   7554      Normally the files found this way are library files--archive files
   7555      whose members are object files.  The linker handles an archive
   7556      file by scanning through it for members which define symbols that
   7557      have so far been referenced but not defined.  But if the file that
   7558      is found is an ordinary object file, it is linked in the usual
   7559      fashion.  The only difference between using an `-l' option and
   7560      specifying a file name is that `-l' surrounds LIBRARY with `lib'
   7561      and `.a' and searches several directories.
   7562 
   7563 `-lobjc'
   7564      You need this special case of the `-l' option in order to link an
   7565      Objective-C or Objective-C++ program.
   7566 
   7567 `-nostartfiles'
   7568      Do not use the standard system startup files when linking.  The
   7569      standard system libraries are used normally, unless `-nostdlib' or
   7570      `-nodefaultlibs' is used.
   7571 
   7572 `-nodefaultlibs'
   7573      Do not use the standard system libraries when linking.  Only the
   7574      libraries you specify will be passed to the linker.  The standard
   7575      startup files are used normally, unless `-nostartfiles' is used.
   7576      The compiler may generate calls to `memcmp', `memset', `memcpy'
   7577      and `memmove'.  These entries are usually resolved by entries in
   7578      libc.  These entry points should be supplied through some other
   7579      mechanism when this option is specified.
   7580 
   7581 `-nostdlib'
   7582      Do not use the standard system startup files or libraries when
   7583      linking.  No startup files and only the libraries you specify will
   7584      be passed to the linker.  The compiler may generate calls to
   7585      `memcmp', `memset', `memcpy' and `memmove'.  These entries are
   7586      usually resolved by entries in libc.  These entry points should be
   7587      supplied through some other mechanism when this option is
   7588      specified.
   7589 
   7590      One of the standard libraries bypassed by `-nostdlib' and
   7591      `-nodefaultlibs' is `libgcc.a', a library of internal subroutines
   7592      that GCC uses to overcome shortcomings of particular machines, or
   7593      special needs for some languages.  (*Note Interfacing to GCC
   7594      Output: (gccint)Interface, for more discussion of `libgcc.a'.)  In
   7595      most cases, you need `libgcc.a' even when you want to avoid other
   7596      standard libraries.  In other words, when you specify `-nostdlib'
   7597      or `-nodefaultlibs' you should usually specify `-lgcc' as well.
   7598      This ensures that you have no unresolved references to internal GCC
   7599      library subroutines.  (For example, `__main', used to ensure C++
   7600      constructors will be called; *note `collect2': (gccint)Collect2.)
   7601 
   7602 `-pie'
   7603      Produce a position independent executable on targets which support
   7604      it.  For predictable results, you must also specify the same set
   7605      of options that were used to generate code (`-fpie', `-fPIE', or
   7606      model suboptions) when you specify this option.
   7607 
   7608 `-rdynamic'
   7609      Pass the flag `-export-dynamic' to the ELF linker, on targets that
   7610      support it. This instructs the linker to add all symbols, not only
   7611      used ones, to the dynamic symbol table. This option is needed for
   7612      some uses of `dlopen' or to allow obtaining backtraces from within
   7613      a program.
   7614 
   7615 `-s'
   7616      Remove all symbol table and relocation information from the
   7617      executable.
   7618 
   7619 `-static'
   7620      On systems that support dynamic linking, this prevents linking
   7621      with the shared libraries.  On other systems, this option has no
   7622      effect.
   7623 
   7624 `-shared'
   7625      Produce a shared object which can then be linked with other
   7626      objects to form an executable.  Not all systems support this
   7627      option.  For predictable results, you must also specify the same
   7628      set of options that were used to generate code (`-fpic', `-fPIC',
   7629      or model suboptions) when you specify this option.(1)
   7630 
   7631 `-shared-libgcc'
   7632 `-static-libgcc'
   7633      On systems that provide `libgcc' as a shared library, these options
   7634      force the use of either the shared or static version respectively.
   7635      If no shared version of `libgcc' was built when the compiler was
   7636      configured, these options have no effect.
   7637 
   7638      There are several situations in which an application should use the
   7639      shared `libgcc' instead of the static version.  The most common of
   7640      these is when the application wishes to throw and catch exceptions
   7641      across different shared libraries.  In that case, each of the
   7642      libraries as well as the application itself should use the shared
   7643      `libgcc'.
   7644 
   7645      Therefore, the G++ and GCJ drivers automatically add
   7646      `-shared-libgcc' whenever you build a shared library or a main
   7647      executable, because C++ and Java programs typically use
   7648      exceptions, so this is the right thing to do.
   7649 
   7650      If, instead, you use the GCC driver to create shared libraries,
   7651      you may find that they will not always be linked with the shared
   7652      `libgcc'.  If GCC finds, at its configuration time, that you have
   7653      a non-GNU linker or a GNU linker that does not support option
   7654      `--eh-frame-hdr', it will link the shared version of `libgcc' into
   7655      shared libraries by default.  Otherwise, it will take advantage of
   7656      the linker and optimize away the linking with the shared version
   7657      of `libgcc', linking with the static version of libgcc by default.
   7658      This allows exceptions to propagate through such shared
   7659      libraries, without incurring relocation costs at library load time.
   7660 
   7661      However, if a library or main executable is supposed to throw or
   7662      catch exceptions, you must link it using the G++ or GCJ driver, as
   7663      appropriate for the languages used in the program, or using the
   7664      option `-shared-libgcc', such that it is linked with the shared
   7665      `libgcc'.
   7666 
   7667 `-symbolic'
   7668      Bind references to global symbols when building a shared object.
   7669      Warn about any unresolved references (unless overridden by the
   7670      link editor option `-Xlinker -z -Xlinker defs').  Only a few
   7671      systems support this option.
   7672 
   7673 `-Xlinker OPTION'
   7674      Pass OPTION as an option to the linker.  You can use this to
   7675      supply system-specific linker options which GCC does not know how
   7676      to recognize.
   7677 
   7678      If you want to pass an option that takes an argument, you must use
   7679      `-Xlinker' twice, once for the option and once for the argument.
   7680      For example, to pass `-assert definitions', you must write
   7681      `-Xlinker -assert -Xlinker definitions'.  It does not work to write
   7682      `-Xlinker "-assert definitions"', because this passes the entire
   7683      string as a single argument, which is not what the linker expects.
   7684 
   7685 `-Wl,OPTION'
   7686      Pass OPTION as an option to the linker.  If OPTION contains
   7687      commas, it is split into multiple options at the commas.
   7688 
   7689 `-u SYMBOL'
   7690      Pretend the symbol SYMBOL is undefined, to force linking of
   7691      library modules to define it.  You can use `-u' multiple times with
   7692      different symbols to force loading of additional library modules.
   7693 
   7694  ---------- Footnotes ----------
   7695 
   7696  (1) On some systems, `gcc -shared' needs to build supplementary stub
   7697 code for constructors to work.  On multi-libbed systems, `gcc -shared'
   7698 must select the correct support libraries to link against.  Failing to
   7699 supply the correct flags may lead to subtle defects.  Supplying them in
   7700 cases where they are not necessary is innocuous.
   7701 
   7702 
   7703 File: gcc.info,  Node: Directory Options,  Next: Spec Files,  Prev: Link Options,  Up: Invoking GCC
   7704 
   7705 3.14 Options for Directory Search
   7706 =================================
   7707 
   7708 These options specify directories to search for header files, for
   7709 libraries and for parts of the compiler:
   7710 
   7711 `-IDIR'
   7712      Add the directory DIR to the head of the list of directories to be
   7713      searched for header files.  This can be used to override a system
   7714      header file, substituting your own version, since these
   7715      directories are searched before the system header file
   7716      directories.  However, you should not use this option to add
   7717      directories that contain vendor-supplied system header files (use
   7718      `-isystem' for that).  If you use more than one `-I' option, the
   7719      directories are scanned in left-to-right order; the standard
   7720      system directories come after.
   7721 
   7722      If a standard system include directory, or a directory specified
   7723      with `-isystem', is also specified with `-I', the `-I' option will
   7724      be ignored.  The directory will still be searched but as a system
   7725      directory at its normal position in the system include chain.
   7726      This is to ensure that GCC's procedure to fix buggy system headers
   7727      and the ordering for the include_next directive are not
   7728      inadvertently changed.  If you really need to change the search
   7729      order for system directories, use the `-nostdinc' and/or
   7730      `-isystem' options.
   7731 
   7732 `-iquoteDIR'
   7733      Add the directory DIR to the head of the list of directories to be
   7734      searched for header files only for the case of `#include "FILE"';
   7735      they are not searched for `#include <FILE>', otherwise just like
   7736      `-I'.
   7737 
   7738 `-LDIR'
   7739      Add directory DIR to the list of directories to be searched for
   7740      `-l'.
   7741 
   7742 `-BPREFIX'
   7743      This option specifies where to find the executables, libraries,
   7744      include files, and data files of the compiler itself.
   7745 
   7746      The compiler driver program runs one or more of the subprograms
   7747      `cpp', `cc1', `as' and `ld'.  It tries PREFIX as a prefix for each
   7748      program it tries to run, both with and without `MACHINE/VERSION/'
   7749      (*note Target Options::).
   7750 
   7751      For each subprogram to be run, the compiler driver first tries the
   7752      `-B' prefix, if any.  If that name is not found, or if `-B' was
   7753      not specified, the driver tries two standard prefixes, which are
   7754      `/usr/lib/gcc/' and `/usr/local/lib/gcc/'.  If neither of those
   7755      results in a file name that is found, the unmodified program name
   7756      is searched for using the directories specified in your `PATH'
   7757      environment variable.
   7758 
   7759      The compiler will check to see if the path provided by the `-B'
   7760      refers to a directory, and if necessary it will add a directory
   7761      separator character at the end of the path.
   7762 
   7763      `-B' prefixes that effectively specify directory names also apply
   7764      to libraries in the linker, because the compiler translates these
   7765      options into `-L' options for the linker.  They also apply to
   7766      includes files in the preprocessor, because the compiler
   7767      translates these options into `-isystem' options for the
   7768      preprocessor.  In this case, the compiler appends `include' to the
   7769      prefix.
   7770 
   7771      The run-time support file `libgcc.a' can also be searched for using
   7772      the `-B' prefix, if needed.  If it is not found there, the two
   7773      standard prefixes above are tried, and that is all.  The file is
   7774      left out of the link if it is not found by those means.
   7775 
   7776      Another way to specify a prefix much like the `-B' prefix is to use
   7777      the environment variable `GCC_EXEC_PREFIX'.  *Note Environment
   7778      Variables::.
   7779 
   7780      As a special kludge, if the path provided by `-B' is
   7781      `[dir/]stageN/', where N is a number in the range 0 to 9, then it
   7782      will be replaced by `[dir/]include'.  This is to help with
   7783      boot-strapping the compiler.
   7784 
   7785 `-specs=FILE'
   7786      Process FILE after the compiler reads in the standard `specs'
   7787      file, in order to override the defaults that the `gcc' driver
   7788      program uses when determining what switches to pass to `cc1',
   7789      `cc1plus', `as', `ld', etc.  More than one `-specs=FILE' can be
   7790      specified on the command line, and they are processed in order,
   7791      from left to right.
   7792 
   7793 `--sysroot=DIR'
   7794      Use DIR as the logical root directory for headers and libraries.
   7795      For example, if the compiler would normally search for headers in
   7796      `/usr/include' and libraries in `/usr/lib', it will instead search
   7797      `DIR/usr/include' and `DIR/usr/lib'.
   7798 
   7799      If you use both this option and the `-isysroot' option, then the
   7800      `--sysroot' option will apply to libraries, but the `-isysroot'
   7801      option will apply to header files.
   7802 
   7803      The GNU linker (beginning with version 2.16) has the necessary
   7804      support for this option.  If your linker does not support this
   7805      option, the header file aspect of `--sysroot' will still work, but
   7806      the library aspect will not.
   7807 
   7808 `-I-'
   7809      This option has been deprecated.  Please use `-iquote' instead for
   7810      `-I' directories before the `-I-' and remove the `-I-'.  Any
   7811      directories you specify with `-I' options before the `-I-' option
   7812      are searched only for the case of `#include "FILE"'; they are not
   7813      searched for `#include <FILE>'.
   7814 
   7815      If additional directories are specified with `-I' options after
   7816      the `-I-', these directories are searched for all `#include'
   7817      directives.  (Ordinarily _all_ `-I' directories are used this way.)
   7818 
   7819      In addition, the `-I-' option inhibits the use of the current
   7820      directory (where the current input file came from) as the first
   7821      search directory for `#include "FILE"'.  There is no way to
   7822      override this effect of `-I-'.  With `-I.' you can specify
   7823      searching the directory which was current when the compiler was
   7824      invoked.  That is not exactly the same as what the preprocessor
   7825      does by default, but it is often satisfactory.
   7826 
   7827      `-I-' does not inhibit the use of the standard system directories
   7828      for header files.  Thus, `-I-' and `-nostdinc' are independent.
   7829 
   7830 
   7831 File: gcc.info,  Node: Spec Files,  Next: Target Options,  Prev: Directory Options,  Up: Invoking GCC
   7832 
   7833 3.15 Specifying subprocesses and the switches to pass to them
   7834 =============================================================
   7835 
   7836 `gcc' is a driver program.  It performs its job by invoking a sequence
   7837 of other programs to do the work of compiling, assembling and linking.
   7838 GCC interprets its command-line parameters and uses these to deduce
   7839 which programs it should invoke, and which command-line options it
   7840 ought to place on their command lines.  This behavior is controlled by
   7841 "spec strings".  In most cases there is one spec string for each
   7842 program that GCC can invoke, but a few programs have multiple spec
   7843 strings to control their behavior.  The spec strings built into GCC can
   7844 be overridden by using the `-specs=' command-line switch to specify a
   7845 spec file.
   7846 
   7847  "Spec files" are plaintext files that are used to construct spec
   7848 strings.  They consist of a sequence of directives separated by blank
   7849 lines.  The type of directive is determined by the first non-whitespace
   7850 character on the line and it can be one of the following:
   7851 
   7852 `%COMMAND'
   7853      Issues a COMMAND to the spec file processor.  The commands that can
   7854      appear here are:
   7855 
   7856     `%include <FILE>'
   7857           Search for FILE and insert its text at the current point in
   7858           the specs file.
   7859 
   7860     `%include_noerr <FILE>'
   7861           Just like `%include', but do not generate an error message if
   7862           the include file cannot be found.
   7863 
   7864     `%rename OLD_NAME NEW_NAME'
   7865           Rename the spec string OLD_NAME to NEW_NAME.
   7866 
   7867 
   7868 `*[SPEC_NAME]:'
   7869      This tells the compiler to create, override or delete the named
   7870      spec string.  All lines after this directive up to the next
   7871      directive or blank line are considered to be the text for the spec
   7872      string.  If this results in an empty string then the spec will be
   7873      deleted.  (Or, if the spec did not exist, then nothing will
   7874      happened.)  Otherwise, if the spec does not currently exist a new
   7875      spec will be created.  If the spec does exist then its contents
   7876      will be overridden by the text of this directive, unless the first
   7877      character of that text is the `+' character, in which case the
   7878      text will be appended to the spec.
   7879 
   7880 `[SUFFIX]:'
   7881      Creates a new `[SUFFIX] spec' pair.  All lines after this directive
   7882      and up to the next directive or blank line are considered to make
   7883      up the spec string for the indicated suffix.  When the compiler
   7884      encounters an input file with the named suffix, it will processes
   7885      the spec string in order to work out how to compile that file.
   7886      For example:
   7887 
   7888           .ZZ:
   7889           z-compile -input %i
   7890 
   7891      This says that any input file whose name ends in `.ZZ' should be
   7892      passed to the program `z-compile', which should be invoked with the
   7893      command-line switch `-input' and with the result of performing the
   7894      `%i' substitution.  (See below.)
   7895 
   7896      As an alternative to providing a spec string, the text that
   7897      follows a suffix directive can be one of the following:
   7898 
   7899     `@LANGUAGE'
   7900           This says that the suffix is an alias for a known LANGUAGE.
   7901           This is similar to using the `-x' command-line switch to GCC
   7902           to specify a language explicitly.  For example:
   7903 
   7904                .ZZ:
   7905                @c++
   7906 
   7907           Says that .ZZ files are, in fact, C++ source files.
   7908 
   7909     `#NAME'
   7910           This causes an error messages saying:
   7911 
   7912                NAME compiler not installed on this system.
   7913 
   7914      GCC already has an extensive list of suffixes built into it.  This
   7915      directive will add an entry to the end of the list of suffixes, but
   7916      since the list is searched from the end backwards, it is
   7917      effectively possible to override earlier entries using this
   7918      technique.
   7919 
   7920 
   7921  GCC has the following spec strings built into it.  Spec files can
   7922 override these strings or create their own.  Note that individual
   7923 targets can also add their own spec strings to this list.
   7924 
   7925      asm          Options to pass to the assembler
   7926      asm_final    Options to pass to the assembler post-processor
   7927      cpp          Options to pass to the C preprocessor
   7928      cc1          Options to pass to the C compiler
   7929      cc1plus      Options to pass to the C++ compiler
   7930      endfile      Object files to include at the end of the link
   7931      link         Options to pass to the linker
   7932      lib          Libraries to include on the command line to the linker
   7933      libgcc       Decides which GCC support library to pass to the linker
   7934      linker       Sets the name of the linker
   7935      predefines   Defines to be passed to the C preprocessor
   7936      signed_char  Defines to pass to CPP to say whether `char' is signed
   7937                   by default
   7938      startfile    Object files to include at the start of the link
   7939 
   7940  Here is a small example of a spec file:
   7941 
   7942      %rename lib                 old_lib
   7943 
   7944      *lib:
   7945      --start-group -lgcc -lc -leval1 --end-group %(old_lib)
   7946 
   7947  This example renames the spec called `lib' to `old_lib' and then
   7948 overrides the previous definition of `lib' with a new one.  The new
   7949 definition adds in some extra command-line options before including the
   7950 text of the old definition.
   7951 
   7952  "Spec strings" are a list of command-line options to be passed to their
   7953 corresponding program.  In addition, the spec strings can contain
   7954 `%'-prefixed sequences to substitute variable text or to conditionally
   7955 insert text into the command line.  Using these constructs it is
   7956 possible to generate quite complex command lines.
   7957 
   7958  Here is a table of all defined `%'-sequences for spec strings.  Note
   7959 that spaces are not generated automatically around the results of
   7960 expanding these sequences.  Therefore you can concatenate them together
   7961 or combine them with constant text in a single argument.
   7962 
   7963 `%%'
   7964      Substitute one `%' into the program name or argument.
   7965 
   7966 `%i'
   7967      Substitute the name of the input file being processed.
   7968 
   7969 `%b'
   7970      Substitute the basename of the input file being processed.  This
   7971      is the substring up to (and not including) the last period and not
   7972      including the directory.
   7973 
   7974 `%B'
   7975      This is the same as `%b', but include the file suffix (text after
   7976      the last period).
   7977 
   7978 `%d'
   7979      Marks the argument containing or following the `%d' as a temporary
   7980      file name, so that that file will be deleted if GCC exits
   7981      successfully.  Unlike `%g', this contributes no text to the
   7982      argument.
   7983 
   7984 `%gSUFFIX'
   7985      Substitute a file name that has suffix SUFFIX and is chosen once
   7986      per compilation, and mark the argument in the same way as `%d'.
   7987      To reduce exposure to denial-of-service attacks, the file name is
   7988      now chosen in a way that is hard to predict even when previously
   7989      chosen file names are known.  For example, `%g.s ... %g.o ... %g.s'
   7990      might turn into `ccUVUUAU.s ccXYAXZ12.o ccUVUUAU.s'.  SUFFIX
   7991      matches the regexp `[.A-Za-z]*' or the special string `%O', which
   7992      is treated exactly as if `%O' had been preprocessed.  Previously,
   7993      `%g' was simply substituted with a file name chosen once per
   7994      compilation, without regard to any appended suffix (which was
   7995      therefore treated just like ordinary text), making such attacks
   7996      more likely to succeed.
   7997 
   7998 `%uSUFFIX'
   7999      Like `%g', but generates a new temporary file name even if
   8000      `%uSUFFIX' was already seen.
   8001 
   8002 `%USUFFIX'
   8003      Substitutes the last file name generated with `%uSUFFIX',
   8004      generating a new one if there is no such last file name.  In the
   8005      absence of any `%uSUFFIX', this is just like `%gSUFFIX', except
   8006      they don't share the same suffix _space_, so `%g.s ... %U.s ...
   8007      %g.s ... %U.s' would involve the generation of two distinct file
   8008      names, one for each `%g.s' and another for each `%U.s'.
   8009      Previously, `%U' was simply substituted with a file name chosen
   8010      for the previous `%u', without regard to any appended suffix.
   8011 
   8012 `%jSUFFIX'
   8013      Substitutes the name of the `HOST_BIT_BUCKET', if any, and if it is
   8014      writable, and if save-temps is off; otherwise, substitute the name
   8015      of a temporary file, just like `%u'.  This temporary file is not
   8016      meant for communication between processes, but rather as a junk
   8017      disposal mechanism.
   8018 
   8019 `%|SUFFIX'
   8020 `%mSUFFIX'
   8021      Like `%g', except if `-pipe' is in effect.  In that case `%|'
   8022      substitutes a single dash and `%m' substitutes nothing at all.
   8023      These are the two most common ways to instruct a program that it
   8024      should read from standard input or write to standard output.  If
   8025      you need something more elaborate you can use an `%{pipe:`X'}'
   8026      construct: see for example `f/lang-specs.h'.
   8027 
   8028 `%.SUFFIX'
   8029      Substitutes .SUFFIX for the suffixes of a matched switch's args
   8030      when it is subsequently output with `%*'.  SUFFIX is terminated by
   8031      the next space or %.
   8032 
   8033 `%w'
   8034      Marks the argument containing or following the `%w' as the
   8035      designated output file of this compilation.  This puts the argument
   8036      into the sequence of arguments that `%o' will substitute later.
   8037 
   8038 `%o'
   8039      Substitutes the names of all the output files, with spaces
   8040      automatically placed around them.  You should write spaces around
   8041      the `%o' as well or the results are undefined.  `%o' is for use in
   8042      the specs for running the linker.  Input files whose names have no
   8043      recognized suffix are not compiled at all, but they are included
   8044      among the output files, so they will be linked.
   8045 
   8046 `%O'
   8047      Substitutes the suffix for object files.  Note that this is
   8048      handled specially when it immediately follows `%g, %u, or %U',
   8049      because of the need for those to form complete file names.  The
   8050      handling is such that `%O' is treated exactly as if it had already
   8051      been substituted, except that `%g, %u, and %U' do not currently
   8052      support additional SUFFIX characters following `%O' as they would
   8053      following, for example, `.o'.
   8054 
   8055 `%p'
   8056      Substitutes the standard macro predefinitions for the current
   8057      target machine.  Use this when running `cpp'.
   8058 
   8059 `%P'
   8060      Like `%p', but puts `__' before and after the name of each
   8061      predefined macro, except for macros that start with `__' or with
   8062      `_L', where L is an uppercase letter.  This is for ISO C.
   8063 
   8064 `%I'
   8065      Substitute any of `-iprefix' (made from `GCC_EXEC_PREFIX'),
   8066      `-isysroot' (made from `TARGET_SYSTEM_ROOT'), `-isystem' (made
   8067      from `COMPILER_PATH' and `-B' options) and `-imultilib' as
   8068      necessary.
   8069 
   8070 `%s'
   8071      Current argument is the name of a library or startup file of some
   8072      sort.  Search for that file in a standard list of directories and
   8073      substitute the full name found.
   8074 
   8075 `%eSTR'
   8076      Print STR as an error message.  STR is terminated by a newline.
   8077      Use this when inconsistent options are detected.
   8078 
   8079 `%(NAME)'
   8080      Substitute the contents of spec string NAME at this point.
   8081 
   8082 `%[NAME]'
   8083      Like `%(...)' but put `__' around `-D' arguments.
   8084 
   8085 `%x{OPTION}'
   8086      Accumulate an option for `%X'.
   8087 
   8088 `%X'
   8089      Output the accumulated linker options specified by `-Wl' or a `%x'
   8090      spec string.
   8091 
   8092 `%Y'
   8093      Output the accumulated assembler options specified by `-Wa'.
   8094 
   8095 `%Z'
   8096      Output the accumulated preprocessor options specified by `-Wp'.
   8097 
   8098 `%a'
   8099      Process the `asm' spec.  This is used to compute the switches to
   8100      be passed to the assembler.
   8101 
   8102 `%A'
   8103      Process the `asm_final' spec.  This is a spec string for passing
   8104      switches to an assembler post-processor, if such a program is
   8105      needed.
   8106 
   8107 `%l'
   8108      Process the `link' spec.  This is the spec for computing the
   8109      command line passed to the linker.  Typically it will make use of
   8110      the `%L %G %S %D and %E' sequences.
   8111 
   8112 `%D'
   8113      Dump out a `-L' option for each directory that GCC believes might
   8114      contain startup files.  If the target supports multilibs then the
   8115      current multilib directory will be prepended to each of these
   8116      paths.
   8117 
   8118 `%L'
   8119      Process the `lib' spec.  This is a spec string for deciding which
   8120      libraries should be included on the command line to the linker.
   8121 
   8122 `%G'
   8123      Process the `libgcc' spec.  This is a spec string for deciding
   8124      which GCC support library should be included on the command line
   8125      to the linker.
   8126 
   8127 `%S'
   8128      Process the `startfile' spec.  This is a spec for deciding which
   8129      object files should be the first ones passed to the linker.
   8130      Typically this might be a file named `crt0.o'.
   8131 
   8132 `%E'
   8133      Process the `endfile' spec.  This is a spec string that specifies
   8134      the last object files that will be passed to the linker.
   8135 
   8136 `%C'
   8137      Process the `cpp' spec.  This is used to construct the arguments
   8138      to be passed to the C preprocessor.
   8139 
   8140 `%1'
   8141      Process the `cc1' spec.  This is used to construct the options to
   8142      be passed to the actual C compiler (`cc1').
   8143 
   8144 `%2'
   8145      Process the `cc1plus' spec.  This is used to construct the options
   8146      to be passed to the actual C++ compiler (`cc1plus').
   8147 
   8148 `%*'
   8149      Substitute the variable part of a matched option.  See below.
   8150      Note that each comma in the substituted string is replaced by a
   8151      single space.
   8152 
   8153 `%<`S''
   8154      Remove all occurrences of `-S' from the command line.  Note--this
   8155      command is position dependent.  `%' commands in the spec string
   8156      before this one will see `-S', `%' commands in the spec string
   8157      after this one will not.
   8158 
   8159 `%:FUNCTION(ARGS)'
   8160      Call the named function FUNCTION, passing it ARGS.  ARGS is first
   8161      processed as a nested spec string, then split into an argument
   8162      vector in the usual fashion.  The function returns a string which
   8163      is processed as if it had appeared literally as part of the
   8164      current spec.
   8165 
   8166      The following built-in spec functions are provided:
   8167 
   8168     ``getenv''
   8169           The `getenv' spec function takes two arguments: an environment
   8170           variable name and a string.  If the environment variable is
   8171           not defined, a fatal error is issued.  Otherwise, the return
   8172           value is the value of the environment variable concatenated
   8173           with the string.  For example, if `TOPDIR' is defined as
   8174           `/path/to/top', then:
   8175 
   8176                %:getenv(TOPDIR /include)
   8177 
   8178           expands to `/path/to/top/include'.
   8179 
   8180     ``if-exists''
   8181           The `if-exists' spec function takes one argument, an absolute
   8182           pathname to a file.  If the file exists, `if-exists' returns
   8183           the pathname.  Here is a small example of its usage:
   8184 
   8185                *startfile:
   8186                crt0%O%s %:if-exists(crti%O%s) crtbegin%O%s
   8187 
   8188     ``if-exists-else''
   8189           The `if-exists-else' spec function is similar to the
   8190           `if-exists' spec function, except that it takes two
   8191           arguments.  The first argument is an absolute pathname to a
   8192           file.  If the file exists, `if-exists-else' returns the
   8193           pathname.  If it does not exist, it returns the second
   8194           argument.  This way, `if-exists-else' can be used to select
   8195           one file or another, based on the existence of the first.
   8196           Here is a small example of its usage:
   8197 
   8198                *startfile:
   8199                crt0%O%s %:if-exists(crti%O%s) \
   8200                %:if-exists-else(crtbeginT%O%s crtbegin%O%s)
   8201 
   8202     ``replace-outfile''
   8203           The `replace-outfile' spec function takes two arguments.  It
   8204           looks for the first argument in the outfiles array and
   8205           replaces it with the second argument.  Here is a small
   8206           example of its usage:
   8207 
   8208                %{fgnu-runtime:%:replace-outfile(-lobjc -lobjc-gnu)}
   8209 
   8210     ``print-asm-header''
   8211           The `print-asm-header' function takes no arguments and simply
   8212           prints a banner like:
   8213 
   8214                Assembler options
   8215                =================
   8216 
   8217                Use "-Wa,OPTION" to pass "OPTION" to the assembler.
   8218 
   8219           It is used to separate compiler options from assembler options
   8220           in the `--target-help' output.
   8221 
   8222 `%{`S'}'
   8223      Substitutes the `-S' switch, if that switch was given to GCC.  If
   8224      that switch was not specified, this substitutes nothing.  Note that
   8225      the leading dash is omitted when specifying this option, and it is
   8226      automatically inserted if the substitution is performed.  Thus the
   8227      spec string `%{foo}' would match the command-line option `-foo'
   8228      and would output the command line option `-foo'.
   8229 
   8230 `%W{`S'}'
   8231      Like %{`S'} but mark last argument supplied within as a file to be
   8232      deleted on failure.
   8233 
   8234 `%{`S'*}'
   8235      Substitutes all the switches specified to GCC whose names start
   8236      with `-S', but which also take an argument.  This is used for
   8237      switches like `-o', `-D', `-I', etc.  GCC considers `-o foo' as
   8238      being one switch whose names starts with `o'.  %{o*} would
   8239      substitute this text, including the space.  Thus two arguments
   8240      would be generated.
   8241 
   8242 `%{`S'*&`T'*}'
   8243      Like %{`S'*}, but preserve order of `S' and `T' options (the order
   8244      of `S' and `T' in the spec is not significant).  There can be any
   8245      number of ampersand-separated variables; for each the wild card is
   8246      optional.  Useful for CPP as `%{D*&U*&A*}'.
   8247 
   8248 `%{`S':`X'}'
   8249      Substitutes `X', if the `-S' switch was given to GCC.
   8250 
   8251 `%{!`S':`X'}'
   8252      Substitutes `X', if the `-S' switch was _not_ given to GCC.
   8253 
   8254 `%{`S'*:`X'}'
   8255      Substitutes `X' if one or more switches whose names start with
   8256      `-S' are specified to GCC.  Normally `X' is substituted only once,
   8257      no matter how many such switches appeared.  However, if `%*'
   8258      appears somewhere in `X', then `X' will be substituted once for
   8259      each matching switch, with the `%*' replaced by the part of that
   8260      switch that matched the `*'.
   8261 
   8262 `%{.`S':`X'}'
   8263      Substitutes `X', if processing a file with suffix `S'.
   8264 
   8265 `%{!.`S':`X'}'
   8266      Substitutes `X', if _not_ processing a file with suffix `S'.
   8267 
   8268 `%{,`S':`X'}'
   8269      Substitutes `X', if processing a file for language `S'.
   8270 
   8271 `%{!,`S':`X'}'
   8272      Substitutes `X', if not processing a file for language `S'.
   8273 
   8274 `%{`S'|`P':`X'}'
   8275      Substitutes `X' if either `-S' or `-P' was given to GCC.  This may
   8276      be combined with `!', `.', `,', and `*' sequences as well,
   8277      although they have a stronger binding than the `|'.  If `%*'
   8278      appears in `X', all of the alternatives must be starred, and only
   8279      the first matching alternative is substituted.
   8280 
   8281      For example, a spec string like this:
   8282 
   8283           %{.c:-foo} %{!.c:-bar} %{.c|d:-baz} %{!.c|d:-boggle}
   8284 
   8285      will output the following command-line options from the following
   8286      input command-line options:
   8287 
   8288           fred.c        -foo -baz
   8289           jim.d         -bar -boggle
   8290           -d fred.c     -foo -baz -boggle
   8291           -d jim.d      -bar -baz -boggle
   8292 
   8293 `%{S:X; T:Y; :D}'
   8294      If `S' was given to GCC, substitutes `X'; else if `T' was given to
   8295      GCC, substitutes `Y'; else substitutes `D'.  There can be as many
   8296      clauses as you need.  This may be combined with `.', `,', `!',
   8297      `|', and `*' as needed.
   8298 
   8299 
   8300  The conditional text `X' in a %{`S':`X'} or similar construct may
   8301 contain other nested `%' constructs or spaces, or even newlines.  They
   8302 are processed as usual, as described above.  Trailing white space in
   8303 `X' is ignored.  White space may also appear anywhere on the left side
   8304 of the colon in these constructs, except between `.' or `*' and the
   8305 corresponding word.
   8306 
   8307  The `-O', `-f', `-m', and `-W' switches are handled specifically in
   8308 these constructs.  If another value of `-O' or the negated form of a
   8309 `-f', `-m', or `-W' switch is found later in the command line, the
   8310 earlier switch value is ignored, except with {`S'*} where `S' is just
   8311 one letter, which passes all matching options.
   8312 
   8313  The character `|' at the beginning of the predicate text is used to
   8314 indicate that a command should be piped to the following command, but
   8315 only if `-pipe' is specified.
   8316 
   8317  It is built into GCC which switches take arguments and which do not.
   8318 (You might think it would be useful to generalize this to allow each
   8319 compiler's spec to say which switches take arguments.  But this cannot
   8320 be done in a consistent fashion.  GCC cannot even decide which input
   8321 files have been specified without knowing which switches take arguments,
   8322 and it must know which input files to compile in order to tell which
   8323 compilers to run).
   8324 
   8325  GCC also knows implicitly that arguments starting in `-l' are to be
   8326 treated as compiler output files, and passed to the linker in their
   8327 proper position among the other output files.
   8328 
   8329 
   8330 File: gcc.info,  Node: Target Options,  Next: Submodel Options,  Prev: Spec Files,  Up: Invoking GCC
   8331 
   8332 3.16 Specifying Target Machine and Compiler Version
   8333 ===================================================
   8334 
   8335 The usual way to run GCC is to run the executable called `gcc', or
   8336 `<machine>-gcc' when cross-compiling, or `<machine>-gcc-<version>' to
   8337 run a version other than the one that was installed last.  Sometimes
   8338 this is inconvenient, so GCC provides options that will switch to
   8339 another cross-compiler or version.
   8340 
   8341 `-b MACHINE'
   8342      The argument MACHINE specifies the target machine for compilation.
   8343 
   8344      The value to use for MACHINE is the same as was specified as the
   8345      machine type when configuring GCC as a cross-compiler.  For
   8346      example, if a cross-compiler was configured with `configure
   8347      arm-elf', meaning to compile for an arm processor with elf
   8348      binaries, then you would specify `-b arm-elf' to run that cross
   8349      compiler.  Because there are other options beginning with `-b', the
   8350      configuration must contain a hyphen.
   8351 
   8352 `-V VERSION'
   8353      The argument VERSION specifies which version of GCC to run.  This
   8354      is useful when multiple versions are installed.  For example,
   8355      VERSION might be `4.0', meaning to run GCC version 4.0.
   8356 
   8357  The `-V' and `-b' options work by running the
   8358 `<machine>-gcc-<version>' executable, so there's no real reason to use
   8359 them if you can just run that directly.
   8360 
   8361 
   8362 File: gcc.info,  Node: Submodel Options,  Next: Code Gen Options,  Prev: Target Options,  Up: Invoking GCC
   8363 
   8364 3.17 Hardware Models and Configurations
   8365 =======================================
   8366 
   8367 Earlier we discussed the standard option `-b' which chooses among
   8368 different installed compilers for completely different target machines,
   8369 such as VAX vs. 68000 vs. 80386.
   8370 
   8371  In addition, each of these target machine types can have its own
   8372 special options, starting with `-m', to choose among various hardware
   8373 models or configurations--for example, 68010 vs 68020, floating
   8374 coprocessor or none.  A single installed version of the compiler can
   8375 compile for any model or configuration, according to the options
   8376 specified.
   8377 
   8378  Some configurations of the compiler also support additional special
   8379 options, usually for compatibility with other compilers on the same
   8380 platform.
   8381 
   8382 * Menu:
   8383 
   8384 * ARC Options::
   8385 * ARM Options::
   8386 * AVR Options::
   8387 * Blackfin Options::
   8388 * CRIS Options::
   8389 * CRX Options::
   8390 * Darwin Options::
   8391 * DEC Alpha Options::
   8392 * DEC Alpha/VMS Options::
   8393 * FRV Options::
   8394 * GNU/Linux Options::
   8395 * H8/300 Options::
   8396 * HPPA Options::
   8397 * i386 and x86-64 Options::
   8398 * IA-64 Options::
   8399 * M32C Options::
   8400 * M32R/D Options::
   8401 * M680x0 Options::
   8402 * M68hc1x Options::
   8403 * MCore Options::
   8404 * MIPS Options::
   8405 * MMIX Options::
   8406 * MN10300 Options::
   8407 * MT Options::
   8408 * PDP-11 Options::
   8409 * PowerPC Options::
   8410 * RS/6000 and PowerPC Options::
   8411 * S/390 and zSeries Options::
   8412 * Score Options::
   8413 * SH Options::
   8414 * SPARC Options::
   8415 * SPU Options::
   8416 * System V Options::
   8417 * V850 Options::
   8418 * VAX Options::
   8419 * VxWorks Options::
   8420 * x86-64 Options::
   8421 * Xstormy16 Options::
   8422 * Xtensa Options::
   8423 * zSeries Options::
   8424 
   8425 
   8426 File: gcc.info,  Node: ARC Options,  Next: ARM Options,  Up: Submodel Options
   8427 
   8428 3.17.1 ARC Options
   8429 ------------------
   8430 
   8431 These options are defined for ARC implementations:
   8432 
   8433 `-EL'
   8434      Compile code for little endian mode.  This is the default.
   8435 
   8436 `-EB'
   8437      Compile code for big endian mode.
   8438 
   8439 `-mmangle-cpu'
   8440      Prepend the name of the cpu to all public symbol names.  In
   8441      multiple-processor systems, there are many ARC variants with
   8442      different instruction and register set characteristics.  This flag
   8443      prevents code compiled for one cpu to be linked with code compiled
   8444      for another.  No facility exists for handling variants that are
   8445      "almost identical".  This is an all or nothing option.
   8446 
   8447 `-mcpu=CPU'
   8448      Compile code for ARC variant CPU.  Which variants are supported
   8449      depend on the configuration.  All variants support `-mcpu=base',
   8450      this is the default.
   8451 
   8452 `-mtext=TEXT-SECTION'
   8453 `-mdata=DATA-SECTION'
   8454 `-mrodata=READONLY-DATA-SECTION'
   8455      Put functions, data, and readonly data in TEXT-SECTION,
   8456      DATA-SECTION, and READONLY-DATA-SECTION respectively by default.
   8457      This can be overridden with the `section' attribute.  *Note
   8458      Variable Attributes::.
   8459 
   8460 
   8461 
   8462 File: gcc.info,  Node: ARM Options,  Next: AVR Options,  Prev: ARC Options,  Up: Submodel Options
   8463 
   8464 3.17.2 ARM Options
   8465 ------------------
   8466 
   8467 These `-m' options are defined for Advanced RISC Machines (ARM)
   8468 architectures:
   8469 
   8470 `-mabi=NAME'
   8471      Generate code for the specified ABI.  Permissible values are:
   8472      `apcs-gnu', `atpcs', `aapcs', `aapcs-linux' and `iwmmxt'.
   8473 
   8474 `-mapcs-frame'
   8475      Generate a stack frame that is compliant with the ARM Procedure
   8476      Call Standard for all functions, even if this is not strictly
   8477      necessary for correct execution of the code.  Specifying
   8478      `-fomit-frame-pointer' with this option will cause the stack
   8479      frames not to be generated for leaf functions.  The default is
   8480      `-mno-apcs-frame'.
   8481 
   8482 `-mapcs'
   8483      This is a synonym for `-mapcs-frame'.
   8484 
   8485 `-mthumb-interwork'
   8486      Generate code which supports calling between the ARM and Thumb
   8487      instruction sets.  Without this option the two instruction sets
   8488      cannot be reliably used inside one program.  The default is
   8489      `-mno-thumb-interwork', since slightly larger code is generated
   8490      when `-mthumb-interwork' is specified.
   8491 
   8492 `-mno-sched-prolog'
   8493      Prevent the reordering of instructions in the function prolog, or
   8494      the merging of those instruction with the instructions in the
   8495      function's body.  This means that all functions will start with a
   8496      recognizable set of instructions (or in fact one of a choice from
   8497      a small set of different function prologues), and this information
   8498      can be used to locate the start if functions inside an executable
   8499      piece of code.  The default is `-msched-prolog'.
   8500 
   8501 `-mhard-float'
   8502      Generate output containing floating point instructions.  This is
   8503      the default.
   8504 
   8505 `-msoft-float'
   8506      Generate output containing library calls for floating point.
   8507      *Warning:* the requisite libraries are not available for all ARM
   8508      targets.  Normally the facilities of the machine's usual C
   8509      compiler are used, but this cannot be done directly in
   8510      cross-compilation.  You must make your own arrangements to provide
   8511      suitable library functions for cross-compilation.
   8512 
   8513      `-msoft-float' changes the calling convention in the output file;
   8514      therefore, it is only useful if you compile _all_ of a program with
   8515      this option.  In particular, you need to compile `libgcc.a', the
   8516      library that comes with GCC, with `-msoft-float' in order for this
   8517      to work.
   8518 
   8519 `-mfloat-abi=NAME'
   8520      Specifies which ABI to use for floating point values.  Permissible
   8521      values are: `soft', `softfp' and `hard'.
   8522 
   8523      `soft' and `hard' are equivalent to `-msoft-float' and
   8524      `-mhard-float' respectively.  `softfp' allows the generation of
   8525      floating point instructions, but still uses the soft-float calling
   8526      conventions.
   8527 
   8528 `-mlittle-endian'
   8529      Generate code for a processor running in little-endian mode.  This
   8530      is the default for all standard configurations.
   8531 
   8532 `-mbig-endian'
   8533      Generate code for a processor running in big-endian mode; the
   8534      default is to compile code for a little-endian processor.
   8535 
   8536 `-mwords-little-endian'
   8537      This option only applies when generating code for big-endian
   8538      processors.  Generate code for a little-endian word order but a
   8539      big-endian byte order.  That is, a byte order of the form
   8540      `32107654'.  Note: this option should only be used if you require
   8541      compatibility with code for big-endian ARM processors generated by
   8542      versions of the compiler prior to 2.8.
   8543 
   8544 `-mcpu=NAME'
   8545      This specifies the name of the target ARM processor.  GCC uses
   8546      this name to determine what kind of instructions it can emit when
   8547      generating assembly code.  Permissible names are: `arm2', `arm250',
   8548      `arm3', `arm6', `arm60', `arm600', `arm610', `arm620', `arm7',
   8549      `arm7m', `arm7d', `arm7dm', `arm7di', `arm7dmi', `arm70', `arm700',
   8550      `arm700i', `arm710', `arm710c', `arm7100', `arm7500', `arm7500fe',
   8551      `arm7tdmi', `arm7tdmi-s', `arm8', `strongarm', `strongarm110',
   8552      `strongarm1100', `arm8', `arm810', `arm9', `arm9e', `arm920',
   8553      `arm920t', `arm922t', `arm946e-s', `arm966e-s', `arm968e-s',
   8554      `arm926ej-s', `arm940t', `arm9tdmi', `arm10tdmi', `arm1020t',
   8555      `arm1026ej-s', `arm10e', `arm1020e', `arm1022e', `arm1136j-s',
   8556      `arm1136jf-s', `mpcore', `mpcorenovfp', `arm1156t2-s',
   8557      `arm1176jz-s', `arm1176jzf-s', `cortex-a8', `cortex-r4',
   8558      `cortex-m3', `xscale', `iwmmxt', `ep9312'.
   8559 
   8560 `-mtune=NAME'
   8561      This option is very similar to the `-mcpu=' option, except that
   8562      instead of specifying the actual target processor type, and hence
   8563      restricting which instructions can be used, it specifies that GCC
   8564      should tune the performance of the code as if the target were of
   8565      the type specified in this option, but still choosing the
   8566      instructions that it will generate based on the cpu specified by a
   8567      `-mcpu=' option.  For some ARM implementations better performance
   8568      can be obtained by using this option.
   8569 
   8570 `-march=NAME'
   8571      This specifies the name of the target ARM architecture.  GCC uses
   8572      this name to determine what kind of instructions it can emit when
   8573      generating assembly code.  This option can be used in conjunction
   8574      with or instead of the `-mcpu=' option.  Permissible names are:
   8575      `armv2', `armv2a', `armv3', `armv3m', `armv4', `armv4t', `armv5',
   8576      `armv5t', `armv5te', `armv6', `armv6j', `armv6t2', `armv6z',
   8577      `armv6zk', `armv7', `armv7-a', `armv7-r', `armv7-m', `iwmmxt',
   8578      `ep9312'.
   8579 
   8580 `-mfpu=NAME'
   8581 `-mfpe=NUMBER'
   8582 `-mfp=NUMBER'
   8583      This specifies what floating point hardware (or hardware
   8584      emulation) is available on the target.  Permissible names are:
   8585      `fpa', `fpe2', `fpe3', `maverick', `vfp'.  `-mfp' and `-mfpe' are
   8586      synonyms for `-mfpu'=`fpe'NUMBER, for compatibility with older
   8587      versions of GCC.
   8588 
   8589      If `-msoft-float' is specified this specifies the format of
   8590      floating point values.
   8591 
   8592 `-mstructure-size-boundary=N'
   8593      The size of all structures and unions will be rounded up to a
   8594      multiple of the number of bits set by this option.  Permissible
   8595      values are 8, 32 and 64.  The default value varies for different
   8596      toolchains.  For the COFF targeted toolchain the default value is
   8597      8.  A value of 64 is only allowed if the underlying ABI supports
   8598      it.
   8599 
   8600      Specifying the larger number can produce faster, more efficient
   8601      code, but can also increase the size of the program.  Different
   8602      values are potentially incompatible.  Code compiled with one value
   8603      cannot necessarily expect to work with code or libraries compiled
   8604      with another value, if they exchange information using structures
   8605      or unions.
   8606 
   8607 `-mabort-on-noreturn'
   8608      Generate a call to the function `abort' at the end of a `noreturn'
   8609      function.  It will be executed if the function tries to return.
   8610 
   8611 `-mlong-calls'
   8612 `-mno-long-calls'
   8613      Tells the compiler to perform function calls by first loading the
   8614      address of the function into a register and then performing a
   8615      subroutine call on this register.  This switch is needed if the
   8616      target function will lie outside of the 64 megabyte addressing
   8617      range of the offset based version of subroutine call instruction.
   8618 
   8619      Even if this switch is enabled, not all function calls will be
   8620      turned into long calls.  The heuristic is that static functions,
   8621      functions which have the `short-call' attribute, functions that
   8622      are inside the scope of a `#pragma no_long_calls' directive and
   8623      functions whose definitions have already been compiled within the
   8624      current compilation unit, will not be turned into long calls.  The
   8625      exception to this rule is that weak function definitions,
   8626      functions with the `long-call' attribute or the `section'
   8627      attribute, and functions that are within the scope of a `#pragma
   8628      long_calls' directive, will always be turned into long calls.
   8629 
   8630      This feature is not enabled by default.  Specifying
   8631      `-mno-long-calls' will restore the default behavior, as will
   8632      placing the function calls within the scope of a `#pragma
   8633      long_calls_off' directive.  Note these switches have no effect on
   8634      how the compiler generates code to handle function calls via
   8635      function pointers.
   8636 
   8637 `-mnop-fun-dllimport'
   8638      Disable support for the `dllimport' attribute.
   8639 
   8640 `-msingle-pic-base'
   8641      Treat the register used for PIC addressing as read-only, rather
   8642      than loading it in the prologue for each function.  The run-time
   8643      system is responsible for initializing this register with an
   8644      appropriate value before execution begins.
   8645 
   8646 `-mpic-register=REG'
   8647      Specify the register to be used for PIC addressing.  The default
   8648      is R10 unless stack-checking is enabled, when R9 is used.
   8649 
   8650 `-mcirrus-fix-invalid-insns'
   8651      Insert NOPs into the instruction stream to in order to work around
   8652      problems with invalid Maverick instruction combinations.  This
   8653      option is only valid if the `-mcpu=ep9312' option has been used to
   8654      enable generation of instructions for the Cirrus Maverick floating
   8655      point co-processor.  This option is not enabled by default, since
   8656      the problem is only present in older Maverick implementations.
   8657      The default can be re-enabled by use of the
   8658      `-mno-cirrus-fix-invalid-insns' switch.
   8659 
   8660 `-mpoke-function-name'
   8661      Write the name of each function into the text section, directly
   8662      preceding the function prologue.  The generated code is similar to
   8663      this:
   8664 
   8665                t0
   8666                    .ascii "arm_poke_function_name", 0
   8667                    .align
   8668                t1
   8669                    .word 0xff000000 + (t1 - t0)
   8670                arm_poke_function_name
   8671                    mov     ip, sp
   8672                    stmfd   sp!, {fp, ip, lr, pc}
   8673                    sub     fp, ip, #4
   8674 
   8675      When performing a stack backtrace, code can inspect the value of
   8676      `pc' stored at `fp + 0'.  If the trace function then looks at
   8677      location `pc - 12' and the top 8 bits are set, then we know that
   8678      there is a function name embedded immediately preceding this
   8679      location and has length `((pc[-3]) & 0xff000000)'.
   8680 
   8681 `-mthumb'
   8682      Generate code for the Thumb instruction set.  The default is to
   8683      use the 32-bit ARM instruction set.  This option automatically
   8684      enables either 16-bit Thumb-1 or mixed 16/32-bit Thumb-2
   8685      instructions based on the `-mcpu=NAME' and `-march=NAME' options.
   8686 
   8687 `-mtpcs-frame'
   8688      Generate a stack frame that is compliant with the Thumb Procedure
   8689      Call Standard for all non-leaf functions.  (A leaf function is one
   8690      that does not call any other functions.)  The default is
   8691      `-mno-tpcs-frame'.
   8692 
   8693 `-mtpcs-leaf-frame'
   8694      Generate a stack frame that is compliant with the Thumb Procedure
   8695      Call Standard for all leaf functions.  (A leaf function is one
   8696      that does not call any other functions.)  The default is
   8697      `-mno-apcs-leaf-frame'.
   8698 
   8699 `-mcallee-super-interworking'
   8700      Gives all externally visible functions in the file being compiled
   8701      an ARM instruction set header which switches to Thumb mode before
   8702      executing the rest of the function.  This allows these functions
   8703      to be called from non-interworking code.
   8704 
   8705 `-mcaller-super-interworking'
   8706      Allows calls via function pointers (including virtual functions) to
   8707      execute correctly regardless of whether the target code has been
   8708      compiled for interworking or not.  There is a small overhead in
   8709      the cost of executing a function pointer if this option is enabled.
   8710 
   8711 `-mtp=NAME'
   8712      Specify the access model for the thread local storage pointer.
   8713      The valid models are `soft', which generates calls to
   8714      `__aeabi_read_tp', `cp15', which fetches the thread pointer from
   8715      `cp15' directly (supported in the arm6k architecture), and `auto',
   8716      which uses the best available method for the selected processor.
   8717      The default setting is `auto'.
   8718 
   8719 `-mandroid'
   8720      Enable Android specific compilier options.
   8721 
   8722      If this option is used, a preprocessor macro `__ANDROID__' is
   8723      defined and has the value 1 during compilation. The option also
   8724      implies C/C++ options `-fno-exceptions' `-fpic' `-mthumb-interwork'
   8725      `-fno-short-enums' and C++ option `-fno-rtti'.  These implied
   8726      options can be overridden.  For example RTTI in C++ code can still
   8727      be enabled with -frtti even when -mandroid is also used.
   8728 
   8729      Linking options depend on whether a static executable, a dynamic
   8730      executable or a shared library is built.  When `-static' is given,
   8731      `-mandroid' implies linking flag `-Bstatic', start file
   8732      `crtbegin_static.o' and end file `crtend_android.o'.
   8733 
   8734      When `-shared' is given, `-mandroid' implies the linking flag
   8735      `-Bsymbolic' and no start and end files.
   8736 
   8737      When none of `-static' and `-shared' is given, `-mandroid' implies
   8738      linking flags `-Bdynamic -dynamic-linker /system/bin/linker',
   8739      start file `crtbegin_dynamic.o' and end file `crtend_android.o'.
   8740      The dynamic linker used can be overriden by another
   8741      `-dynamic-linker' in command line.
   8742 
   8743      The linking option `-ldl' is also added if `-static' is not given.
   8744 
   8745      If more than one of `-dynamic', `-static' and `-shared' are given,
   8746      behaviour of `-mandroid' is undefined.
   8747 
   8748 
   8749 
   8750 File: gcc.info,  Node: AVR Options,  Next: Blackfin Options,  Prev: ARM Options,  Up: Submodel Options
   8751 
   8752 3.17.3 AVR Options
   8753 ------------------
   8754 
   8755 These options are defined for AVR implementations:
   8756 
   8757 `-mmcu=MCU'
   8758      Specify ATMEL AVR instruction set or MCU type.
   8759 
   8760      Instruction set avr1 is for the minimal AVR core, not supported by
   8761      the C compiler, only for assembler programs (MCU types: at90s1200,
   8762      attiny10, attiny11, attiny12, attiny15, attiny28).
   8763 
   8764      Instruction set avr2 (default) is for the classic AVR core with up
   8765      to 8K program memory space (MCU types: at90s2313, at90s2323,
   8766      attiny22, at90s2333, at90s2343, at90s4414, at90s4433, at90s4434,
   8767      at90s8515, at90c8534, at90s8535).
   8768 
   8769      Instruction set avr3 is for the classic AVR core with up to 128K
   8770      program memory space (MCU types: atmega103, atmega603, at43usb320,
   8771      at76c711).
   8772 
   8773      Instruction set avr4 is for the enhanced AVR core with up to 8K
   8774      program memory space (MCU types: atmega8, atmega83, atmega85).
   8775 
   8776      Instruction set avr5 is for the enhanced AVR core with up to 128K
   8777      program memory space (MCU types: atmega16, atmega161, atmega163,
   8778      atmega32, atmega323, atmega64, atmega128, at43usb355, at94k).
   8779 
   8780 `-msize'
   8781      Output instruction sizes to the asm file.
   8782 
   8783 `-minit-stack=N'
   8784      Specify the initial stack address, which may be a symbol or
   8785      numeric value, `__stack' is the default.
   8786 
   8787 `-mno-interrupts'
   8788      Generated code is not compatible with hardware interrupts.  Code
   8789      size will be smaller.
   8790 
   8791 `-mcall-prologues'
   8792      Functions prologues/epilogues expanded as call to appropriate
   8793      subroutines.  Code size will be smaller.
   8794 
   8795 `-mno-tablejump'
   8796      Do not generate tablejump insns which sometimes increase code size.
   8797 
   8798 `-mtiny-stack'
   8799      Change only the low 8 bits of the stack pointer.
   8800 
   8801 `-mint8'
   8802      Assume int to be 8 bit integer.  This affects the sizes of all
   8803      types: A char will be 1 byte, an int will be 1 byte, an long will
   8804      be 2 bytes and long long will be 4 bytes.  Please note that this
   8805      option does not comply to the C standards, but it will provide you
   8806      with smaller code size.
   8807 
   8808 
   8809 File: gcc.info,  Node: Blackfin Options,  Next: CRIS Options,  Prev: AVR Options,  Up: Submodel Options
   8810 
   8811 3.17.4 Blackfin Options
   8812 -----------------------
   8813 
   8814 `-mcpu=CPU[-SIREVISION]'
   8815      Specifies the name of the target Blackfin processor.  Currently,
   8816      CPU can be one of `bf522', `bf523', `bf524', `bf525', `bf526',
   8817      `bf527', `bf531', `bf532', `bf533', `bf534', `bf536', `bf537',
   8818      `bf538', `bf539', `bf542', `bf544', `bf547', `bf548', `bf549',
   8819      `bf561'.  The optional SIREVISION specifies the silicon revision
   8820      of the target Blackfin processor.  Any workarounds available for
   8821      the targeted silicon revision will be enabled.  If SIREVISION is
   8822      `none', no workarounds are enabled.  If SIREVISION is `any', all
   8823      workarounds for the targeted processor will be enabled.  The
   8824      `__SILICON_REVISION__' macro is defined to two hexadecimal digits
   8825      representing the major and minor numbers in the silicon revision.
   8826      If SIREVISION is `none', the `__SILICON_REVISION__' is not
   8827      defined.  If SIREVISION is `any', the `__SILICON_REVISION__' is
   8828      defined to be `0xffff'.  If this optional SIREVISION is not used,
   8829      GCC assumes the latest known silicon revision of the targeted
   8830      Blackfin processor.
   8831 
   8832      Support for `bf561' is incomplete.  For `bf561', Only the
   8833      processor macro is defined.  Without this option, `bf532' is used
   8834      as the processor by default.  The corresponding predefined
   8835      processor macros for CPU is to be defined.  And for `bfin-elf'
   8836      toolchain, this causes the hardware BSP provided by libgloss to be
   8837      linked in if `-msim' is not given.
   8838 
   8839 `-msim'
   8840      Specifies that the program will be run on the simulator.  This
   8841      causes the simulator BSP provided by libgloss to be linked in.
   8842      This option has effect only for `bfin-elf' toolchain.  Certain
   8843      other options, such as `-mid-shared-library' and `-mfdpic', imply
   8844      `-msim'.
   8845 
   8846 `-momit-leaf-frame-pointer'
   8847      Don't keep the frame pointer in a register for leaf functions.
   8848      This avoids the instructions to save, set up and restore frame
   8849      pointers and makes an extra register available in leaf functions.
   8850      The option `-fomit-frame-pointer' removes the frame pointer for
   8851      all functions which might make debugging harder.
   8852 
   8853 `-mspecld-anomaly'
   8854      When enabled, the compiler will ensure that the generated code
   8855      does not contain speculative loads after jump instructions. If
   8856      this option is used, `__WORKAROUND_SPECULATIVE_LOADS' is defined.
   8857 
   8858 `-mno-specld-anomaly'
   8859      Don't generate extra code to prevent speculative loads from
   8860      occurring.
   8861 
   8862 `-mcsync-anomaly'
   8863      When enabled, the compiler will ensure that the generated code
   8864      does not contain CSYNC or SSYNC instructions too soon after
   8865      conditional branches.  If this option is used,
   8866      `__WORKAROUND_SPECULATIVE_SYNCS' is defined.
   8867 
   8868 `-mno-csync-anomaly'
   8869      Don't generate extra code to prevent CSYNC or SSYNC instructions
   8870      from occurring too soon after a conditional branch.
   8871 
   8872 `-mlow-64k'
   8873      When enabled, the compiler is free to take advantage of the
   8874      knowledge that the entire program fits into the low 64k of memory.
   8875 
   8876 `-mno-low-64k'
   8877      Assume that the program is arbitrarily large.  This is the default.
   8878 
   8879 `-mstack-check-l1'
   8880      Do stack checking using information placed into L1 scratchpad
   8881      memory by the uClinux kernel.
   8882 
   8883 `-mid-shared-library'
   8884      Generate code that supports shared libraries via the library ID
   8885      method.  This allows for execute in place and shared libraries in
   8886      an environment without virtual memory management.  This option
   8887      implies `-fPIC'.  With a `bfin-elf' target, this option implies
   8888      `-msim'.
   8889 
   8890 `-mno-id-shared-library'
   8891      Generate code that doesn't assume ID based shared libraries are
   8892      being used.  This is the default.
   8893 
   8894 `-mleaf-id-shared-library'
   8895      Generate code that supports shared libraries via the library ID
   8896      method, but assumes that this library or executable won't link
   8897      against any other ID shared libraries.  That allows the compiler
   8898      to use faster code for jumps and calls.
   8899 
   8900 `-mno-leaf-id-shared-library'
   8901      Do not assume that the code being compiled won't link against any
   8902      ID shared libraries.  Slower code will be generated for jump and
   8903      call insns.
   8904 
   8905 `-mshared-library-id=n'
   8906      Specified the identification number of the ID based shared library
   8907      being compiled.  Specifying a value of 0 will generate more
   8908      compact code, specifying other values will force the allocation of
   8909      that number to the current library but is no more space or time
   8910      efficient than omitting this option.
   8911 
   8912 `-msep-data'
   8913      Generate code that allows the data segment to be located in a
   8914      different area of memory from the text segment.  This allows for
   8915      execute in place in an environment without virtual memory
   8916      management by eliminating relocations against the text section.
   8917 
   8918 `-mno-sep-data'
   8919      Generate code that assumes that the data segment follows the text
   8920      segment.  This is the default.
   8921 
   8922 `-mlong-calls'
   8923 `-mno-long-calls'
   8924      Tells the compiler to perform function calls by first loading the
   8925      address of the function into a register and then performing a
   8926      subroutine call on this register.  This switch is needed if the
   8927      target function will lie outside of the 24 bit addressing range of
   8928      the offset based version of subroutine call instruction.
   8929 
   8930      This feature is not enabled by default.  Specifying
   8931      `-mno-long-calls' will restore the default behavior.  Note these
   8932      switches have no effect on how the compiler generates code to
   8933      handle function calls via function pointers.
   8934 
   8935 `-mfast-fp'
   8936      Link with the fast floating-point library. This library relaxes
   8937      some of the IEEE floating-point standard's rules for checking
   8938      inputs against Not-a-Number (NAN), in the interest of performance.
   8939 
   8940 `-minline-plt'
   8941      Enable inlining of PLT entries in function calls to functions that
   8942      are not known to bind locally.  It has no effect without `-mfdpic'.
   8943 
   8944 
   8945 File: gcc.info,  Node: CRIS Options,  Next: CRX Options,  Prev: Blackfin Options,  Up: Submodel Options
   8946 
   8947 3.17.5 CRIS Options
   8948 -------------------
   8949 
   8950 These options are defined specifically for the CRIS ports.
   8951 
   8952 `-march=ARCHITECTURE-TYPE'
   8953 `-mcpu=ARCHITECTURE-TYPE'
   8954      Generate code for the specified architecture.  The choices for
   8955      ARCHITECTURE-TYPE are `v3', `v8' and `v10' for respectively
   8956      ETRAX 4, ETRAX 100, and ETRAX 100 LX.  Default is `v0' except for
   8957      cris-axis-linux-gnu, where the default is `v10'.
   8958 
   8959 `-mtune=ARCHITECTURE-TYPE'
   8960      Tune to ARCHITECTURE-TYPE everything applicable about the generated
   8961      code, except for the ABI and the set of available instructions.
   8962      The choices for ARCHITECTURE-TYPE are the same as for
   8963      `-march=ARCHITECTURE-TYPE'.
   8964 
   8965 `-mmax-stack-frame=N'
   8966      Warn when the stack frame of a function exceeds N bytes.
   8967 
   8968 `-melinux-stacksize=N'
   8969      Only available with the `cris-axis-aout' target.  Arranges for
   8970      indications in the program to the kernel loader that the stack of
   8971      the program should be set to N bytes.
   8972 
   8973 `-metrax4'
   8974 `-metrax100'
   8975      The options `-metrax4' and `-metrax100' are synonyms for
   8976      `-march=v3' and `-march=v8' respectively.
   8977 
   8978 `-mmul-bug-workaround'
   8979 `-mno-mul-bug-workaround'
   8980      Work around a bug in the `muls' and `mulu' instructions for CPU
   8981      models where it applies.  This option is active by default.
   8982 
   8983 `-mpdebug'
   8984      Enable CRIS-specific verbose debug-related information in the
   8985      assembly code.  This option also has the effect to turn off the
   8986      `#NO_APP' formatted-code indicator to the assembler at the
   8987      beginning of the assembly file.
   8988 
   8989 `-mcc-init'
   8990      Do not use condition-code results from previous instruction;
   8991      always emit compare and test instructions before use of condition
   8992      codes.
   8993 
   8994 `-mno-side-effects'
   8995      Do not emit instructions with side-effects in addressing modes
   8996      other than post-increment.
   8997 
   8998 `-mstack-align'
   8999 `-mno-stack-align'
   9000 `-mdata-align'
   9001 `-mno-data-align'
   9002 `-mconst-align'
   9003 `-mno-const-align'
   9004      These options (no-options) arranges (eliminate arrangements) for
   9005      the stack-frame, individual data and constants to be aligned for
   9006      the maximum single data access size for the chosen CPU model.  The
   9007      default is to arrange for 32-bit alignment.  ABI details such as
   9008      structure layout are not affected by these options.
   9009 
   9010 `-m32-bit'
   9011 `-m16-bit'
   9012 `-m8-bit'
   9013      Similar to the stack- data- and const-align options above, these
   9014      options arrange for stack-frame, writable data and constants to
   9015      all be 32-bit, 16-bit or 8-bit aligned.  The default is 32-bit
   9016      alignment.
   9017 
   9018 `-mno-prologue-epilogue'
   9019 `-mprologue-epilogue'
   9020      With `-mno-prologue-epilogue', the normal function prologue and
   9021      epilogue that sets up the stack-frame are omitted and no return
   9022      instructions or return sequences are generated in the code.  Use
   9023      this option only together with visual inspection of the compiled
   9024      code: no warnings or errors are generated when call-saved
   9025      registers must be saved, or storage for local variable needs to be
   9026      allocated.
   9027 
   9028 `-mno-gotplt'
   9029 `-mgotplt'
   9030      With `-fpic' and `-fPIC', don't generate (do generate) instruction
   9031      sequences that load addresses for functions from the PLT part of
   9032      the GOT rather than (traditional on other architectures) calls to
   9033      the PLT.  The default is `-mgotplt'.
   9034 
   9035 `-maout'
   9036      Legacy no-op option only recognized with the cris-axis-aout target.
   9037 
   9038 `-melf'
   9039      Legacy no-op option only recognized with the cris-axis-elf and
   9040      cris-axis-linux-gnu targets.
   9041 
   9042 `-melinux'
   9043      Only recognized with the cris-axis-aout target, where it selects a
   9044      GNU/linux-like multilib, include files and instruction set for
   9045      `-march=v8'.
   9046 
   9047 `-mlinux'
   9048      Legacy no-op option only recognized with the cris-axis-linux-gnu
   9049      target.
   9050 
   9051 `-sim'
   9052      This option, recognized for the cris-axis-aout and cris-axis-elf
   9053      arranges to link with input-output functions from a simulator
   9054      library.  Code, initialized data and zero-initialized data are
   9055      allocated consecutively.
   9056 
   9057 `-sim2'
   9058      Like `-sim', but pass linker options to locate initialized data at
   9059      0x40000000 and zero-initialized data at 0x80000000.
   9060 
   9061 
   9062 File: gcc.info,  Node: CRX Options,  Next: Darwin Options,  Prev: CRIS Options,  Up: Submodel Options
   9063 
   9064 3.17.6 CRX Options
   9065 ------------------
   9066 
   9067 These options are defined specifically for the CRX ports.
   9068 
   9069 `-mmac'
   9070      Enable the use of multiply-accumulate instructions. Disabled by
   9071      default.
   9072 
   9073 `-mpush-args'
   9074      Push instructions will be used to pass outgoing arguments when
   9075      functions are called. Enabled by default.
   9076 
   9077 
   9078 File: gcc.info,  Node: Darwin Options,  Next: DEC Alpha Options,  Prev: CRX Options,  Up: Submodel Options
   9079 
   9080 3.17.7 Darwin Options
   9081 ---------------------
   9082 
   9083 These options are defined for all architectures running the Darwin
   9084 operating system.
   9085 
   9086  FSF GCC on Darwin does not create "fat" object files; it will create
   9087 an object file for the single architecture that it was built to target.
   9088 Apple's GCC on Darwin does create "fat" files if multiple `-arch'
   9089 options are used; it does so by running the compiler or linker multiple
   9090 times and joining the results together with `lipo'.
   9091 
   9092  The subtype of the file created (like `ppc7400' or `ppc970' or `i686')
   9093 is determined by the flags that specify the ISA that GCC is targetting,
   9094 like `-mcpu' or `-march'.  The `-force_cpusubtype_ALL' option can be
   9095 used to override this.
   9096 
   9097  The Darwin tools vary in their behavior when presented with an ISA
   9098 mismatch.  The assembler, `as', will only permit instructions to be
   9099 used that are valid for the subtype of the file it is generating, so
   9100 you cannot put 64-bit instructions in an `ppc750' object file.  The
   9101 linker for shared libraries, `/usr/bin/libtool', will fail and print an
   9102 error if asked to create a shared library with a less restrictive
   9103 subtype than its input files (for instance, trying to put a `ppc970'
   9104 object file in a `ppc7400' library).  The linker for executables, `ld',
   9105 will quietly give the executable the most restrictive subtype of any of
   9106 its input files.
   9107 
   9108 `-FDIR'
   9109      Add the framework directory DIR to the head of the list of
   9110      directories to be searched for header files.  These directories are
   9111      interleaved with those specified by `-I' options and are scanned
   9112      in a left-to-right order.
   9113 
   9114      A framework directory is a directory with frameworks in it.  A
   9115      framework is a directory with a `"Headers"' and/or
   9116      `"PrivateHeaders"' directory contained directly in it that ends in
   9117      `".framework"'.  The name of a framework is the name of this
   9118      directory excluding the `".framework"'.  Headers associated with
   9119      the framework are found in one of those two directories, with
   9120      `"Headers"' being searched first.  A subframework is a framework
   9121      directory that is in a framework's `"Frameworks"' directory.
   9122      Includes of subframework headers can only appear in a header of a
   9123      framework that contains the subframework, or in a sibling
   9124      subframework header.  Two subframeworks are siblings if they occur
   9125      in the same framework.  A subframework should not have the same
   9126      name as a framework, a warning will be issued if this is violated.
   9127      Currently a subframework cannot have subframeworks, in the
   9128      future, the mechanism may be extended to support this.  The
   9129      standard frameworks can be found in `"/System/Library/Frameworks"'
   9130      and `"/Library/Frameworks"'.  An example include looks like
   9131      `#include <Framework/header.h>', where `Framework' denotes the
   9132      name of the framework and header.h is found in the
   9133      `"PrivateHeaders"' or `"Headers"' directory.
   9134 
   9135 `-iframeworkDIR'
   9136      Like `-F' except the directory is a treated as a system directory.
   9137      The main difference between this `-iframework' and `-F' is that
   9138      with `-iframework' the compiler does not warn about constructs
   9139      contained within header files found via DIR.  This option is valid
   9140      only for the C family of languages.
   9141 
   9142 `-gused'
   9143      Emit debugging information for symbols that are used.  For STABS
   9144      debugging format, this enables `-feliminate-unused-debug-symbols'.
   9145      This is by default ON.
   9146 
   9147 `-gfull'
   9148      Emit debugging information for all symbols and types.
   9149 
   9150 `-mmacosx-version-min=VERSION'
   9151      The earliest version of MacOS X that this executable will run on
   9152      is VERSION.  Typical values of VERSION include `10.1', `10.2', and
   9153      `10.3.9'.
   9154 
   9155      If the compiler was built to use the system's headers by default,
   9156      then the default for this option is the system version on which the
   9157      compiler is running, otherwise the default is to make choices which
   9158      are compatible with as many systems and code bases as possible.
   9159 
   9160 `-mkernel'
   9161      Enable kernel development mode.  The `-mkernel' option sets
   9162      `-static', `-fno-common', `-fno-cxa-atexit', `-fno-exceptions',
   9163      `-fno-non-call-exceptions', `-fapple-kext', `-fno-weak' and
   9164      `-fno-rtti' where applicable.  This mode also sets `-mno-altivec',
   9165      `-msoft-float', `-fno-builtin' and `-mlong-branch' for PowerPC
   9166      targets.
   9167 
   9168 `-mone-byte-bool'
   9169      Override the defaults for `bool' so that `sizeof(bool)==1'.  By
   9170      default `sizeof(bool)' is `4' when compiling for Darwin/PowerPC
   9171      and `1' when compiling for Darwin/x86, so this option has no
   9172      effect on x86.
   9173 
   9174      *Warning:* The `-mone-byte-bool' switch causes GCC to generate
   9175      code that is not binary compatible with code generated without
   9176      that switch.  Using this switch may require recompiling all other
   9177      modules in a program, including system libraries.  Use this switch
   9178      to conform to a non-default data model.
   9179 
   9180 `-mfix-and-continue'
   9181 `-ffix-and-continue'
   9182 `-findirect-data'
   9183      Generate code suitable for fast turn around development.  Needed to
   9184      enable gdb to dynamically load `.o' files into already running
   9185      programs.  `-findirect-data' and `-ffix-and-continue' are provided
   9186      for backwards compatibility.
   9187 
   9188 `-all_load'
   9189      Loads all members of static archive libraries.  See man ld(1) for
   9190      more information.
   9191 
   9192 `-arch_errors_fatal'
   9193      Cause the errors having to do with files that have the wrong
   9194      architecture to be fatal.
   9195 
   9196 `-bind_at_load'
   9197      Causes the output file to be marked such that the dynamic linker
   9198      will bind all undefined references when the file is loaded or
   9199      launched.
   9200 
   9201 `-bundle'
   9202      Produce a Mach-o bundle format file.  See man ld(1) for more
   9203      information.
   9204 
   9205 `-bundle_loader EXECUTABLE'
   9206      This option specifies the EXECUTABLE that will be loading the build
   9207      output file being linked.  See man ld(1) for more information.
   9208 
   9209 `-dynamiclib'
   9210      When passed this option, GCC will produce a dynamic library
   9211      instead of an executable when linking, using the Darwin `libtool'
   9212      command.
   9213 
   9214 `-force_cpusubtype_ALL'
   9215      This causes GCC's output file to have the ALL subtype, instead of
   9216      one controlled by the `-mcpu' or `-march' option.
   9217 
   9218 `-allowable_client  CLIENT_NAME'
   9219 `-client_name'
   9220 `-compatibility_version'
   9221 `-current_version'
   9222 `-dead_strip'
   9223 `-dependency-file'
   9224 `-dylib_file'
   9225 `-dylinker_install_name'
   9226 `-dynamic'
   9227 `-exported_symbols_list'
   9228 `-filelist'
   9229 `-flat_namespace'
   9230 `-force_flat_namespace'
   9231 `-headerpad_max_install_names'
   9232 `-image_base'
   9233 `-init'
   9234 `-install_name'
   9235 `-keep_private_externs'
   9236 `-multi_module'
   9237 `-multiply_defined'
   9238 `-multiply_defined_unused'
   9239 `-noall_load'
   9240 `-no_dead_strip_inits_and_terms'
   9241 `-nofixprebinding'
   9242 `-nomultidefs'
   9243 `-noprebind'
   9244 `-noseglinkedit'
   9245 `-pagezero_size'
   9246 `-prebind'
   9247 `-prebind_all_twolevel_modules'
   9248 `-private_bundle'
   9249 `-read_only_relocs'
   9250 `-sectalign'
   9251 `-sectobjectsymbols'
   9252 `-whyload'
   9253 `-seg1addr'
   9254 `-sectcreate'
   9255 `-sectobjectsymbols'
   9256 `-sectorder'
   9257 `-segaddr'
   9258 `-segs_read_only_addr'
   9259 `-segs_read_write_addr'
   9260 `-seg_addr_table'
   9261 `-seg_addr_table_filename'
   9262 `-seglinkedit'
   9263 `-segprot'
   9264 `-segs_read_only_addr'
   9265 `-segs_read_write_addr'
   9266 `-single_module'
   9267 `-static'
   9268 `-sub_library'
   9269 `-sub_umbrella'
   9270 `-twolevel_namespace'
   9271 `-umbrella'
   9272 `-undefined'
   9273 `-unexported_symbols_list'
   9274 `-weak_reference_mismatches'
   9275 `-whatsloaded'
   9276      These options are passed to the Darwin linker.  The Darwin linker
   9277      man page describes them in detail.
   9278 
   9279 
   9280 File: gcc.info,  Node: DEC Alpha Options,  Next: DEC Alpha/VMS Options,  Prev: Darwin Options,  Up: Submodel Options
   9281 
   9282 3.17.8 DEC Alpha Options
   9283 ------------------------
   9284 
   9285 These `-m' options are defined for the DEC Alpha implementations:
   9286 
   9287 `-mno-soft-float'
   9288 `-msoft-float'
   9289      Use (do not use) the hardware floating-point instructions for
   9290      floating-point operations.  When `-msoft-float' is specified,
   9291      functions in `libgcc.a' will be used to perform floating-point
   9292      operations.  Unless they are replaced by routines that emulate the
   9293      floating-point operations, or compiled in such a way as to call
   9294      such emulations routines, these routines will issue floating-point
   9295      operations.   If you are compiling for an Alpha without
   9296      floating-point operations, you must ensure that the library is
   9297      built so as not to call them.
   9298 
   9299      Note that Alpha implementations without floating-point operations
   9300      are required to have floating-point registers.
   9301 
   9302 `-mfp-reg'
   9303 `-mno-fp-regs'
   9304      Generate code that uses (does not use) the floating-point register
   9305      set.  `-mno-fp-regs' implies `-msoft-float'.  If the floating-point
   9306      register set is not used, floating point operands are passed in
   9307      integer registers as if they were integers and floating-point
   9308      results are passed in `$0' instead of `$f0'.  This is a
   9309      non-standard calling sequence, so any function with a
   9310      floating-point argument or return value called by code compiled
   9311      with `-mno-fp-regs' must also be compiled with that option.
   9312 
   9313      A typical use of this option is building a kernel that does not
   9314      use, and hence need not save and restore, any floating-point
   9315      registers.
   9316 
   9317 `-mieee'
   9318      The Alpha architecture implements floating-point hardware
   9319      optimized for maximum performance.  It is mostly compliant with
   9320      the IEEE floating point standard.  However, for full compliance,
   9321      software assistance is required.  This option generates code fully
   9322      IEEE compliant code _except_ that the INEXACT-FLAG is not
   9323      maintained (see below).  If this option is turned on, the
   9324      preprocessor macro `_IEEE_FP' is defined during compilation.  The
   9325      resulting code is less efficient but is able to correctly support
   9326      denormalized numbers and exceptional IEEE values such as
   9327      not-a-number and plus/minus infinity.  Other Alpha compilers call
   9328      this option `-ieee_with_no_inexact'.
   9329 
   9330 `-mieee-with-inexact'
   9331      This is like `-mieee' except the generated code also maintains the
   9332      IEEE INEXACT-FLAG.  Turning on this option causes the generated
   9333      code to implement fully-compliant IEEE math.  In addition to
   9334      `_IEEE_FP', `_IEEE_FP_EXACT' is defined as a preprocessor macro.
   9335      On some Alpha implementations the resulting code may execute
   9336      significantly slower than the code generated by default.  Since
   9337      there is very little code that depends on the INEXACT-FLAG, you
   9338      should normally not specify this option.  Other Alpha compilers
   9339      call this option `-ieee_with_inexact'.
   9340 
   9341 `-mfp-trap-mode=TRAP-MODE'
   9342      This option controls what floating-point related traps are enabled.
   9343      Other Alpha compilers call this option `-fptm TRAP-MODE'.  The
   9344      trap mode can be set to one of four values:
   9345 
   9346     `n'
   9347           This is the default (normal) setting.  The only traps that
   9348           are enabled are the ones that cannot be disabled in software
   9349           (e.g., division by zero trap).
   9350 
   9351     `u'
   9352           In addition to the traps enabled by `n', underflow traps are
   9353           enabled as well.
   9354 
   9355     `su'
   9356           Like `u', but the instructions are marked to be safe for
   9357           software completion (see Alpha architecture manual for
   9358           details).
   9359 
   9360     `sui'
   9361           Like `su', but inexact traps are enabled as well.
   9362 
   9363 `-mfp-rounding-mode=ROUNDING-MODE'
   9364      Selects the IEEE rounding mode.  Other Alpha compilers call this
   9365      option `-fprm ROUNDING-MODE'.  The ROUNDING-MODE can be one of:
   9366 
   9367     `n'
   9368           Normal IEEE rounding mode.  Floating point numbers are
   9369           rounded towards the nearest machine number or towards the
   9370           even machine number in case of a tie.
   9371 
   9372     `m'
   9373           Round towards minus infinity.
   9374 
   9375     `c'
   9376           Chopped rounding mode.  Floating point numbers are rounded
   9377           towards zero.
   9378 
   9379     `d'
   9380           Dynamic rounding mode.  A field in the floating point control
   9381           register (FPCR, see Alpha architecture reference manual)
   9382           controls the rounding mode in effect.  The C library
   9383           initializes this register for rounding towards plus infinity.
   9384           Thus, unless your program modifies the FPCR, `d' corresponds
   9385           to round towards plus infinity.
   9386 
   9387 `-mtrap-precision=TRAP-PRECISION'
   9388      In the Alpha architecture, floating point traps are imprecise.
   9389      This means without software assistance it is impossible to recover
   9390      from a floating trap and program execution normally needs to be
   9391      terminated.  GCC can generate code that can assist operating
   9392      system trap handlers in determining the exact location that caused
   9393      a floating point trap.  Depending on the requirements of an
   9394      application, different levels of precisions can be selected:
   9395 
   9396     `p'
   9397           Program precision.  This option is the default and means a
   9398           trap handler can only identify which program caused a
   9399           floating point exception.
   9400 
   9401     `f'
   9402           Function precision.  The trap handler can determine the
   9403           function that caused a floating point exception.
   9404 
   9405     `i'
   9406           Instruction precision.  The trap handler can determine the
   9407           exact instruction that caused a floating point exception.
   9408 
   9409      Other Alpha compilers provide the equivalent options called
   9410      `-scope_safe' and `-resumption_safe'.
   9411 
   9412 `-mieee-conformant'
   9413      This option marks the generated code as IEEE conformant.  You must
   9414      not use this option unless you also specify `-mtrap-precision=i'
   9415      and either `-mfp-trap-mode=su' or `-mfp-trap-mode=sui'.  Its only
   9416      effect is to emit the line `.eflag 48' in the function prologue of
   9417      the generated assembly file.  Under DEC Unix, this has the effect
   9418      that IEEE-conformant math library routines will be linked in.
   9419 
   9420 `-mbuild-constants'
   9421      Normally GCC examines a 32- or 64-bit integer constant to see if
   9422      it can construct it from smaller constants in two or three
   9423      instructions.  If it cannot, it will output the constant as a
   9424      literal and generate code to load it from the data segment at
   9425      runtime.
   9426 
   9427      Use this option to require GCC to construct _all_ integer constants
   9428      using code, even if it takes more instructions (the maximum is
   9429      six).
   9430 
   9431      You would typically use this option to build a shared library
   9432      dynamic loader.  Itself a shared library, it must relocate itself
   9433      in memory before it can find the variables and constants in its
   9434      own data segment.
   9435 
   9436 `-malpha-as'
   9437 `-mgas'
   9438      Select whether to generate code to be assembled by the
   9439      vendor-supplied assembler (`-malpha-as') or by the GNU assembler
   9440      `-mgas'.
   9441 
   9442 `-mbwx'
   9443 `-mno-bwx'
   9444 `-mcix'
   9445 `-mno-cix'
   9446 `-mfix'
   9447 `-mno-fix'
   9448 `-mmax'
   9449 `-mno-max'
   9450      Indicate whether GCC should generate code to use the optional BWX,
   9451      CIX, FIX and MAX instruction sets.  The default is to use the
   9452      instruction sets supported by the CPU type specified via `-mcpu='
   9453      option or that of the CPU on which GCC was built if none was
   9454      specified.
   9455 
   9456 `-mfloat-vax'
   9457 `-mfloat-ieee'
   9458      Generate code that uses (does not use) VAX F and G floating point
   9459      arithmetic instead of IEEE single and double precision.
   9460 
   9461 `-mexplicit-relocs'
   9462 `-mno-explicit-relocs'
   9463      Older Alpha assemblers provided no way to generate symbol
   9464      relocations except via assembler macros.  Use of these macros does
   9465      not allow optimal instruction scheduling.  GNU binutils as of
   9466      version 2.12 supports a new syntax that allows the compiler to
   9467      explicitly mark which relocations should apply to which
   9468      instructions.  This option is mostly useful for debugging, as GCC
   9469      detects the capabilities of the assembler when it is built and
   9470      sets the default accordingly.
   9471 
   9472 `-msmall-data'
   9473 `-mlarge-data'
   9474      When `-mexplicit-relocs' is in effect, static data is accessed via
   9475      "gp-relative" relocations.  When `-msmall-data' is used, objects 8
   9476      bytes long or smaller are placed in a "small data area" (the
   9477      `.sdata' and `.sbss' sections) and are accessed via 16-bit
   9478      relocations off of the `$gp' register.  This limits the size of
   9479      the small data area to 64KB, but allows the variables to be
   9480      directly accessed via a single instruction.
   9481 
   9482      The default is `-mlarge-data'.  With this option the data area is
   9483      limited to just below 2GB.  Programs that require more than 2GB of
   9484      data must use `malloc' or `mmap' to allocate the data in the heap
   9485      instead of in the program's data segment.
   9486 
   9487      When generating code for shared libraries, `-fpic' implies
   9488      `-msmall-data' and `-fPIC' implies `-mlarge-data'.
   9489 
   9490 `-msmall-text'
   9491 `-mlarge-text'
   9492      When `-msmall-text' is used, the compiler assumes that the code of
   9493      the entire program (or shared library) fits in 4MB, and is thus
   9494      reachable with a branch instruction.  When `-msmall-data' is used,
   9495      the compiler can assume that all local symbols share the same
   9496      `$gp' value, and thus reduce the number of instructions required
   9497      for a function call from 4 to 1.
   9498 
   9499      The default is `-mlarge-text'.
   9500 
   9501 `-mcpu=CPU_TYPE'
   9502      Set the instruction set and instruction scheduling parameters for
   9503      machine type CPU_TYPE.  You can specify either the `EV' style name
   9504      or the corresponding chip number.  GCC supports scheduling
   9505      parameters for the EV4, EV5 and EV6 family of processors and will
   9506      choose the default values for the instruction set from the
   9507      processor you specify.  If you do not specify a processor type,
   9508      GCC will default to the processor on which the compiler was built.
   9509 
   9510      Supported values for CPU_TYPE are
   9511 
   9512     `ev4'
   9513     `ev45'
   9514     `21064'
   9515           Schedules as an EV4 and has no instruction set extensions.
   9516 
   9517     `ev5'
   9518     `21164'
   9519           Schedules as an EV5 and has no instruction set extensions.
   9520 
   9521     `ev56'
   9522     `21164a'
   9523           Schedules as an EV5 and supports the BWX extension.
   9524 
   9525     `pca56'
   9526     `21164pc'
   9527     `21164PC'
   9528           Schedules as an EV5 and supports the BWX and MAX extensions.
   9529 
   9530     `ev6'
   9531     `21264'
   9532           Schedules as an EV6 and supports the BWX, FIX, and MAX
   9533           extensions.
   9534 
   9535     `ev67'
   9536     `21264a'
   9537           Schedules as an EV6 and supports the BWX, CIX, FIX, and MAX
   9538           extensions.
   9539 
   9540 `-mtune=CPU_TYPE'
   9541      Set only the instruction scheduling parameters for machine type
   9542      CPU_TYPE.  The instruction set is not changed.
   9543 
   9544 `-mmemory-latency=TIME'
   9545      Sets the latency the scheduler should assume for typical memory
   9546      references as seen by the application.  This number is highly
   9547      dependent on the memory access patterns used by the application
   9548      and the size of the external cache on the machine.
   9549 
   9550      Valid options for TIME are
   9551 
   9552     `NUMBER'
   9553           A decimal number representing clock cycles.
   9554 
   9555     `L1'
   9556     `L2'
   9557     `L3'
   9558     `main'
   9559           The compiler contains estimates of the number of clock cycles
   9560           for "typical" EV4 & EV5 hardware for the Level 1, 2 & 3 caches
   9561           (also called Dcache, Scache, and Bcache), as well as to main
   9562           memory.  Note that L3 is only valid for EV5.
   9563 
   9564 
   9565 
   9566 File: gcc.info,  Node: DEC Alpha/VMS Options,  Next: FRV Options,  Prev: DEC Alpha Options,  Up: Submodel Options
   9567 
   9568 3.17.9 DEC Alpha/VMS Options
   9569 ----------------------------
   9570 
   9571 These `-m' options are defined for the DEC Alpha/VMS implementations:
   9572 
   9573 `-mvms-return-codes'
   9574      Return VMS condition codes from main.  The default is to return
   9575      POSIX style condition (e.g. error) codes.
   9576 
   9577 
   9578 File: gcc.info,  Node: FRV Options,  Next: GNU/Linux Options,  Prev: DEC Alpha/VMS Options,  Up: Submodel Options
   9579 
   9580 3.17.10 FRV Options
   9581 -------------------
   9582 
   9583 `-mgpr-32'
   9584      Only use the first 32 general purpose registers.
   9585 
   9586 `-mgpr-64'
   9587      Use all 64 general purpose registers.
   9588 
   9589 `-mfpr-32'
   9590      Use only the first 32 floating point registers.
   9591 
   9592 `-mfpr-64'
   9593      Use all 64 floating point registers
   9594 
   9595 `-mhard-float'
   9596      Use hardware instructions for floating point operations.
   9597 
   9598 `-msoft-float'
   9599      Use library routines for floating point operations.
   9600 
   9601 `-malloc-cc'
   9602      Dynamically allocate condition code registers.
   9603 
   9604 `-mfixed-cc'
   9605      Do not try to dynamically allocate condition code registers, only
   9606      use `icc0' and `fcc0'.
   9607 
   9608 `-mdword'
   9609      Change ABI to use double word insns.
   9610 
   9611 `-mno-dword'
   9612      Do not use double word instructions.
   9613 
   9614 `-mdouble'
   9615      Use floating point double instructions.
   9616 
   9617 `-mno-double'
   9618      Do not use floating point double instructions.
   9619 
   9620 `-mmedia'
   9621      Use media instructions.
   9622 
   9623 `-mno-media'
   9624      Do not use media instructions.
   9625 
   9626 `-mmuladd'
   9627      Use multiply and add/subtract instructions.
   9628 
   9629 `-mno-muladd'
   9630      Do not use multiply and add/subtract instructions.
   9631 
   9632 `-mfdpic'
   9633      Select the FDPIC ABI, that uses function descriptors to represent
   9634      pointers to functions.  Without any PIC/PIE-related options, it
   9635      implies `-fPIE'.  With `-fpic' or `-fpie', it assumes GOT entries
   9636      and small data are within a 12-bit range from the GOT base
   9637      address; with `-fPIC' or `-fPIE', GOT offsets are computed with 32
   9638      bits.  With a `bfin-elf' target, this option implies `-msim'.
   9639 
   9640 `-minline-plt'
   9641      Enable inlining of PLT entries in function calls to functions that
   9642      are not known to bind locally.  It has no effect without `-mfdpic'.
   9643      It's enabled by default if optimizing for speed and compiling for
   9644      shared libraries (i.e., `-fPIC' or `-fpic'), or when an
   9645      optimization option such as `-O3' or above is present in the
   9646      command line.
   9647 
   9648 `-mTLS'
   9649      Assume a large TLS segment when generating thread-local code.
   9650 
   9651 `-mtls'
   9652      Do not assume a large TLS segment when generating thread-local
   9653      code.
   9654 
   9655 `-mgprel-ro'
   9656      Enable the use of `GPREL' relocations in the FDPIC ABI for data
   9657      that is known to be in read-only sections.  It's enabled by
   9658      default, except for `-fpic' or `-fpie': even though it may help
   9659      make the global offset table smaller, it trades 1 instruction for
   9660      4.  With `-fPIC' or `-fPIE', it trades 3 instructions for 4, one
   9661      of which may be shared by multiple symbols, and it avoids the need
   9662      for a GOT entry for the referenced symbol, so it's more likely to
   9663      be a win.  If it is not, `-mno-gprel-ro' can be used to disable it.
   9664 
   9665 `-multilib-library-pic'
   9666      Link with the (library, not FD) pic libraries.  It's implied by
   9667      `-mlibrary-pic', as well as by `-fPIC' and `-fpic' without
   9668      `-mfdpic'.  You should never have to use it explicitly.
   9669 
   9670 `-mlinked-fp'
   9671      Follow the EABI requirement of always creating a frame pointer
   9672      whenever a stack frame is allocated.  This option is enabled by
   9673      default and can be disabled with `-mno-linked-fp'.
   9674 
   9675 `-mlong-calls'
   9676      Use indirect addressing to call functions outside the current
   9677      compilation unit.  This allows the functions to be placed anywhere
   9678      within the 32-bit address space.
   9679 
   9680 `-malign-labels'
   9681      Try to align labels to an 8-byte boundary by inserting nops into
   9682      the previous packet.  This option only has an effect when VLIW
   9683      packing is enabled.  It doesn't create new packets; it merely adds
   9684      nops to existing ones.
   9685 
   9686 `-mlibrary-pic'
   9687      Generate position-independent EABI code.
   9688 
   9689 `-macc-4'
   9690      Use only the first four media accumulator registers.
   9691 
   9692 `-macc-8'
   9693      Use all eight media accumulator registers.
   9694 
   9695 `-mpack'
   9696      Pack VLIW instructions.
   9697 
   9698 `-mno-pack'
   9699      Do not pack VLIW instructions.
   9700 
   9701 `-mno-eflags'
   9702      Do not mark ABI switches in e_flags.
   9703 
   9704 `-mcond-move'
   9705      Enable the use of conditional-move instructions (default).
   9706 
   9707      This switch is mainly for debugging the compiler and will likely
   9708      be removed in a future version.
   9709 
   9710 `-mno-cond-move'
   9711      Disable the use of conditional-move instructions.
   9712 
   9713      This switch is mainly for debugging the compiler and will likely
   9714      be removed in a future version.
   9715 
   9716 `-mscc'
   9717      Enable the use of conditional set instructions (default).
   9718 
   9719      This switch is mainly for debugging the compiler and will likely
   9720      be removed in a future version.
   9721 
   9722 `-mno-scc'
   9723      Disable the use of conditional set instructions.
   9724 
   9725      This switch is mainly for debugging the compiler and will likely
   9726      be removed in a future version.
   9727 
   9728 `-mcond-exec'
   9729      Enable the use of conditional execution (default).
   9730 
   9731      This switch is mainly for debugging the compiler and will likely
   9732      be removed in a future version.
   9733 
   9734 `-mno-cond-exec'
   9735      Disable the use of conditional execution.
   9736 
   9737      This switch is mainly for debugging the compiler and will likely
   9738      be removed in a future version.
   9739 
   9740 `-mvliw-branch'
   9741      Run a pass to pack branches into VLIW instructions (default).
   9742 
   9743      This switch is mainly for debugging the compiler and will likely
   9744      be removed in a future version.
   9745 
   9746 `-mno-vliw-branch'
   9747      Do not run a pass to pack branches into VLIW instructions.
   9748 
   9749      This switch is mainly for debugging the compiler and will likely
   9750      be removed in a future version.
   9751 
   9752 `-mmulti-cond-exec'
   9753      Enable optimization of `&&' and `||' in conditional execution
   9754      (default).
   9755 
   9756      This switch is mainly for debugging the compiler and will likely
   9757      be removed in a future version.
   9758 
   9759 `-mno-multi-cond-exec'
   9760      Disable optimization of `&&' and `||' in conditional execution.
   9761 
   9762      This switch is mainly for debugging the compiler and will likely
   9763      be removed in a future version.
   9764 
   9765 `-mnested-cond-exec'
   9766      Enable nested conditional execution optimizations (default).
   9767 
   9768      This switch is mainly for debugging the compiler and will likely
   9769      be removed in a future version.
   9770 
   9771 `-mno-nested-cond-exec'
   9772      Disable nested conditional execution optimizations.
   9773 
   9774      This switch is mainly for debugging the compiler and will likely
   9775      be removed in a future version.
   9776 
   9777 `-moptimize-membar'
   9778      This switch removes redundant `membar' instructions from the
   9779      compiler generated code.  It is enabled by default.
   9780 
   9781 `-mno-optimize-membar'
   9782      This switch disables the automatic removal of redundant `membar'
   9783      instructions from the generated code.
   9784 
   9785 `-mtomcat-stats'
   9786      Cause gas to print out tomcat statistics.
   9787 
   9788 `-mcpu=CPU'
   9789      Select the processor type for which to generate code.  Possible
   9790      values are `frv', `fr550', `tomcat', `fr500', `fr450', `fr405',
   9791      `fr400', `fr300' and `simple'.
   9792 
   9793 
   9794 
   9795 File: gcc.info,  Node: GNU/Linux Options,  Next: H8/300 Options,  Prev: FRV Options,  Up: Submodel Options
   9796 
   9797 3.17.11 GNU/Linux Options
   9798 -------------------------
   9799 
   9800 These `-m' options are defined for GNU/Linux targets:
   9801 
   9802 `-mglibc'
   9803      Use the GNU C library instead of uClibc.  This is the default
   9804      except on `*-*-linux-*uclibc*' targets.
   9805 
   9806 `-muclibc'
   9807      Use uClibc instead of the GNU C library.  This is the default on
   9808      `*-*-linux-*uclibc*' targets.
   9809 
   9810 
   9811 File: gcc.info,  Node: H8/300 Options,  Next: HPPA Options,  Prev: GNU/Linux Options,  Up: Submodel Options
   9812 
   9813 3.17.12 H8/300 Options
   9814 ----------------------
   9815 
   9816 These `-m' options are defined for the H8/300 implementations:
   9817 
   9818 `-mrelax'
   9819      Shorten some address references at link time, when possible; uses
   9820      the linker option `-relax'.  *Note `ld' and the H8/300:
   9821      (ld)H8/300, for a fuller description.
   9822 
   9823 `-mh'
   9824      Generate code for the H8/300H.
   9825 
   9826 `-ms'
   9827      Generate code for the H8S.
   9828 
   9829 `-mn'
   9830      Generate code for the H8S and H8/300H in the normal mode.  This
   9831      switch must be used either with `-mh' or `-ms'.
   9832 
   9833 `-ms2600'
   9834      Generate code for the H8S/2600.  This switch must be used with
   9835      `-ms'.
   9836 
   9837 `-mint32'
   9838      Make `int' data 32 bits by default.
   9839 
   9840 `-malign-300'
   9841      On the H8/300H and H8S, use the same alignment rules as for the
   9842      H8/300.  The default for the H8/300H and H8S is to align longs and
   9843      floats on 4 byte boundaries.  `-malign-300' causes them to be
   9844      aligned on 2 byte boundaries.  This option has no effect on the
   9845      H8/300.
   9846 
   9847 
   9848 File: gcc.info,  Node: HPPA Options,  Next: i386 and x86-64 Options,  Prev: H8/300 Options,  Up: Submodel Options
   9849 
   9850 3.17.13 HPPA Options
   9851 --------------------
   9852 
   9853 These `-m' options are defined for the HPPA family of computers:
   9854 
   9855 `-march=ARCHITECTURE-TYPE'
   9856      Generate code for the specified architecture.  The choices for
   9857      ARCHITECTURE-TYPE are `1.0' for PA 1.0, `1.1' for PA 1.1, and
   9858      `2.0' for PA 2.0 processors.  Refer to `/usr/lib/sched.models' on
   9859      an HP-UX system to determine the proper architecture option for
   9860      your machine.  Code compiled for lower numbered architectures will
   9861      run on higher numbered architectures, but not the other way around.
   9862 
   9863 `-mpa-risc-1-0'
   9864 `-mpa-risc-1-1'
   9865 `-mpa-risc-2-0'
   9866      Synonyms for `-march=1.0', `-march=1.1', and `-march=2.0'
   9867      respectively.
   9868 
   9869 `-mbig-switch'
   9870      Generate code suitable for big switch tables.  Use this option
   9871      only if the assembler/linker complain about out of range branches
   9872      within a switch table.
   9873 
   9874 `-mjump-in-delay'
   9875      Fill delay slots of function calls with unconditional jump
   9876      instructions by modifying the return pointer for the function call
   9877      to be the target of the conditional jump.
   9878 
   9879 `-mdisable-fpregs'
   9880      Prevent floating point registers from being used in any manner.
   9881      This is necessary for compiling kernels which perform lazy context
   9882      switching of floating point registers.  If you use this option and
   9883      attempt to perform floating point operations, the compiler will
   9884      abort.
   9885 
   9886 `-mdisable-indexing'
   9887      Prevent the compiler from using indexing address modes.  This
   9888      avoids some rather obscure problems when compiling MIG generated
   9889      code under MACH.
   9890 
   9891 `-mno-space-regs'
   9892      Generate code that assumes the target has no space registers.
   9893      This allows GCC to generate faster indirect calls and use unscaled
   9894      index address modes.
   9895 
   9896      Such code is suitable for level 0 PA systems and kernels.
   9897 
   9898 `-mfast-indirect-calls'
   9899      Generate code that assumes calls never cross space boundaries.
   9900      This allows GCC to emit code which performs faster indirect calls.
   9901 
   9902      This option will not work in the presence of shared libraries or
   9903      nested functions.
   9904 
   9905 `-mfixed-range=REGISTER-RANGE'
   9906      Generate code treating the given register range as fixed registers.
   9907      A fixed register is one that the register allocator can not use.
   9908      This is useful when compiling kernel code.  A register range is
   9909      specified as two registers separated by a dash.  Multiple register
   9910      ranges can be specified separated by a comma.
   9911 
   9912 `-mlong-load-store'
   9913      Generate 3-instruction load and store sequences as sometimes
   9914      required by the HP-UX 10 linker.  This is equivalent to the `+k'
   9915      option to the HP compilers.
   9916 
   9917 `-mportable-runtime'
   9918      Use the portable calling conventions proposed by HP for ELF
   9919      systems.
   9920 
   9921 `-mgas'
   9922      Enable the use of assembler directives only GAS understands.
   9923 
   9924 `-mschedule=CPU-TYPE'
   9925      Schedule code according to the constraints for the machine type
   9926      CPU-TYPE.  The choices for CPU-TYPE are `700' `7100', `7100LC',
   9927      `7200', `7300' and `8000'.  Refer to `/usr/lib/sched.models' on an
   9928      HP-UX system to determine the proper scheduling option for your
   9929      machine.  The default scheduling is `8000'.
   9930 
   9931 `-mlinker-opt'
   9932      Enable the optimization pass in the HP-UX linker.  Note this makes
   9933      symbolic debugging impossible.  It also triggers a bug in the
   9934      HP-UX 8 and HP-UX 9 linkers in which they give bogus error
   9935      messages when linking some programs.
   9936 
   9937 `-msoft-float'
   9938      Generate output containing library calls for floating point.
   9939      *Warning:* the requisite libraries are not available for all HPPA
   9940      targets.  Normally the facilities of the machine's usual C
   9941      compiler are used, but this cannot be done directly in
   9942      cross-compilation.  You must make your own arrangements to provide
   9943      suitable library functions for cross-compilation.  The embedded
   9944      target `hppa1.1-*-pro' does provide software floating point
   9945      support.
   9946 
   9947      `-msoft-float' changes the calling convention in the output file;
   9948      therefore, it is only useful if you compile _all_ of a program with
   9949      this option.  In particular, you need to compile `libgcc.a', the
   9950      library that comes with GCC, with `-msoft-float' in order for this
   9951      to work.
   9952 
   9953 `-msio'
   9954      Generate the predefine, `_SIO', for server IO.  The default is
   9955      `-mwsio'.  This generates the predefines, `__hp9000s700',
   9956      `__hp9000s700__' and `_WSIO', for workstation IO.  These options
   9957      are available under HP-UX and HI-UX.
   9958 
   9959 `-mgnu-ld'
   9960      Use GNU ld specific options.  This passes `-shared' to ld when
   9961      building a shared library.  It is the default when GCC is
   9962      configured, explicitly or implicitly, with the GNU linker.  This
   9963      option does not have any affect on which ld is called, it only
   9964      changes what parameters are passed to that ld.  The ld that is
   9965      called is determined by the `--with-ld' configure option, GCC's
   9966      program search path, and finally by the user's `PATH'.  The linker
   9967      used by GCC can be printed using `which `gcc
   9968      -print-prog-name=ld`'.  This option is only available on the 64
   9969      bit HP-UX GCC, i.e. configured with `hppa*64*-*-hpux*'.
   9970 
   9971 `-mhp-ld'
   9972      Use HP ld specific options.  This passes `-b' to ld when building
   9973      a shared library and passes `+Accept TypeMismatch' to ld on all
   9974      links.  It is the default when GCC is configured, explicitly or
   9975      implicitly, with the HP linker.  This option does not have any
   9976      affect on which ld is called, it only changes what parameters are
   9977      passed to that ld.  The ld that is called is determined by the
   9978      `--with-ld' configure option, GCC's program search path, and
   9979      finally by the user's `PATH'.  The linker used by GCC can be
   9980      printed using `which `gcc -print-prog-name=ld`'.  This option is
   9981      only available on the 64 bit HP-UX GCC, i.e. configured with
   9982      `hppa*64*-*-hpux*'.
   9983 
   9984 `-mlong-calls'
   9985      Generate code that uses long call sequences.  This ensures that a
   9986      call is always able to reach linker generated stubs.  The default
   9987      is to generate long calls only when the distance from the call
   9988      site to the beginning of the function or translation unit, as the
   9989      case may be, exceeds a predefined limit set by the branch type
   9990      being used.  The limits for normal calls are 7,600,000 and 240,000
   9991      bytes, respectively for the PA 2.0 and PA 1.X architectures.
   9992      Sibcalls are always limited at 240,000 bytes.
   9993 
   9994      Distances are measured from the beginning of functions when using
   9995      the `-ffunction-sections' option, or when using the `-mgas' and
   9996      `-mno-portable-runtime' options together under HP-UX with the SOM
   9997      linker.
   9998 
   9999      It is normally not desirable to use this option as it will degrade
   10000      performance.  However, it may be useful in large applications,
   10001      particularly when partial linking is used to build the application.
   10002 
   10003      The types of long calls used depends on the capabilities of the
   10004      assembler and linker, and the type of code being generated.  The
   10005      impact on systems that support long absolute calls, and long pic
   10006      symbol-difference or pc-relative calls should be relatively small.
   10007      However, an indirect call is used on 32-bit ELF systems in pic code
   10008      and it is quite long.
   10009 
   10010 `-munix=UNIX-STD'
   10011      Generate compiler predefines and select a startfile for the
   10012      specified UNIX standard.  The choices for UNIX-STD are `93', `95'
   10013      and `98'.  `93' is supported on all HP-UX versions.  `95' is
   10014      available on HP-UX 10.10 and later.  `98' is available on HP-UX
   10015      11.11 and later.  The default values are `93' for HP-UX 10.00,
   10016      `95' for HP-UX 10.10 though to 11.00, and `98' for HP-UX 11.11 and
   10017      later.
   10018 
   10019      `-munix=93' provides the same predefines as GCC 3.3 and 3.4.
   10020      `-munix=95' provides additional predefines for `XOPEN_UNIX' and
   10021      `_XOPEN_SOURCE_EXTENDED', and the startfile `unix95.o'.
   10022      `-munix=98' provides additional predefines for `_XOPEN_UNIX',
   10023      `_XOPEN_SOURCE_EXTENDED', `_INCLUDE__STDC_A1_SOURCE' and
   10024      `_INCLUDE_XOPEN_SOURCE_500', and the startfile `unix98.o'.
   10025 
   10026      It is _important_ to note that this option changes the interfaces
   10027      for various library routines.  It also affects the operational
   10028      behavior of the C library.  Thus, _extreme_ care is needed in
   10029      using this option.
   10030 
   10031      Library code that is intended to operate with more than one UNIX
   10032      standard must test, set and restore the variable
   10033      __XPG4_EXTENDED_MASK as appropriate.  Most GNU software doesn't
   10034      provide this capability.
   10035 
   10036 `-nolibdld'
   10037      Suppress the generation of link options to search libdld.sl when
   10038      the `-static' option is specified on HP-UX 10 and later.
   10039 
   10040 `-static'
   10041      The HP-UX implementation of setlocale in libc has a dependency on
   10042      libdld.sl.  There isn't an archive version of libdld.sl.  Thus,
   10043      when the `-static' option is specified, special link options are
   10044      needed to resolve this dependency.
   10045 
   10046      On HP-UX 10 and later, the GCC driver adds the necessary options to
   10047      link with libdld.sl when the `-static' option is specified.  This
   10048      causes the resulting binary to be dynamic.  On the 64-bit port,
   10049      the linkers generate dynamic binaries by default in any case.  The
   10050      `-nolibdld' option can be used to prevent the GCC driver from
   10051      adding these link options.
   10052 
   10053 `-threads'
   10054      Add support for multithreading with the "dce thread" library under
   10055      HP-UX.  This option sets flags for both the preprocessor and
   10056      linker.
   10057 
   10058 
   10059 File: gcc.info,  Node: i386 and x86-64 Options,  Next: IA-64 Options,  Prev: HPPA Options,  Up: Submodel Options
   10060 
   10061 3.17.14 Intel 386 and AMD x86-64 Options
   10062 ----------------------------------------
   10063 
   10064 These `-m' options are defined for the i386 and x86-64 family of
   10065 computers:
   10066 
   10067 `-mtune=CPU-TYPE'
   10068      Tune to CPU-TYPE everything applicable about the generated code,
   10069      except for the ABI and the set of available instructions.  The
   10070      choices for CPU-TYPE are:
   10071     _generic_
   10072           Produce code optimized for the most common IA32/AMD64/EM64T
   10073           processors.  If you know the CPU on which your code will run,
   10074           then you should use the corresponding `-mtune' option instead
   10075           of `-mtune=generic'.  But, if you do not know exactly what
   10076           CPU users of your application will have, then you should use
   10077           this option.
   10078 
   10079           As new processors are deployed in the marketplace, the
   10080           behavior of this option will change.  Therefore, if you
   10081           upgrade to a newer version of GCC, the code generated option
   10082           will change to reflect the processors that were most common
   10083           when that version of GCC was released.
   10084 
   10085           There is no `-march=generic' option because `-march'
   10086           indicates the instruction set the compiler can use, and there
   10087           is no generic instruction set applicable to all processors.
   10088           In contrast, `-mtune' indicates the processor (or, in this
   10089           case, collection of processors) for which the code is
   10090           optimized.
   10091 
   10092     _native_
   10093           This selects the CPU to tune for at compilation time by
   10094           determining the processor type of the compiling machine.
   10095           Using `-mtune=native' will produce code optimized for the
   10096           local machine under the constraints of the selected
   10097           instruction set.  Using `-march=native' will enable all
   10098           instruction subsets supported by the local machine (hence the
   10099           result might not run on different machines).
   10100 
   10101     _i386_
   10102           Original Intel's i386 CPU.
   10103 
   10104     _i486_
   10105           Intel's i486 CPU.  (No scheduling is implemented for this
   10106           chip.)
   10107 
   10108     _i586, pentium_
   10109           Intel Pentium CPU with no MMX support.
   10110 
   10111     _pentium-mmx_
   10112           Intel PentiumMMX CPU based on Pentium core with MMX
   10113           instruction set support.
   10114 
   10115     _pentiumpro_
   10116           Intel PentiumPro CPU.
   10117 
   10118     _i686_
   10119           Same as `generic', but when used as `march' option, PentiumPro
   10120           instruction set will be used, so the code will run on all
   10121           i686 family chips.
   10122 
   10123     _pentium2_
   10124           Intel Pentium2 CPU based on PentiumPro core with MMX
   10125           instruction set support.
   10126 
   10127     _pentium3, pentium3m_
   10128           Intel Pentium3 CPU based on PentiumPro core with MMX and SSE
   10129           instruction set support.
   10130 
   10131     _pentium-m_
   10132           Low power version of Intel Pentium3 CPU with MMX, SSE and
   10133           SSE2 instruction set support.  Used by Centrino notebooks.
   10134 
   10135     _pentium4, pentium4m_
   10136           Intel Pentium4 CPU with MMX, SSE and SSE2 instruction set
   10137           support.
   10138 
   10139     _prescott_
   10140           Improved version of Intel Pentium4 CPU with MMX, SSE, SSE2
   10141           and SSE3 instruction set support.
   10142 
   10143     _nocona_
   10144           Improved version of Intel Pentium4 CPU with 64-bit
   10145           extensions, MMX, SSE, SSE2 and SSE3 instruction set support.
   10146 
   10147     _core2_
   10148           Intel Core2 CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3
   10149           and SSSE3 instruction set support.
   10150 
   10151     _k6_
   10152           AMD K6 CPU with MMX instruction set support.
   10153 
   10154     _k6-2, k6-3_
   10155           Improved versions of AMD K6 CPU with MMX and 3dNOW!
   10156           instruction set support.
   10157 
   10158     _athlon, athlon-tbird_
   10159           AMD Athlon CPU with MMX, 3dNOW!, enhanced 3dNOW! and SSE
   10160           prefetch instructions support.
   10161 
   10162     _athlon-4, athlon-xp, athlon-mp_
   10163           Improved AMD Athlon CPU with MMX, 3dNOW!, enhanced 3dNOW! and
   10164           full SSE instruction set support.
   10165 
   10166     _k8, opteron, athlon64, athlon-fx_
   10167           AMD K8 core based CPUs with x86-64 instruction set support.
   10168           (This supersets MMX, SSE, SSE2, 3dNOW!, enhanced 3dNOW! and
   10169           64-bit instruction set extensions.)
   10170 
   10171     _k8-sse3, opteron-sse3, athlon64-sse3_
   10172           Improved versions of k8, opteron and athlon64 with SSE3
   10173           instruction set support.
   10174 
   10175     _amdfam10, barcelona_
   10176           AMD Family 10h core based CPUs with x86-64 instruction set
   10177           support.  (This supersets MMX, SSE, SSE2, SSE3, SSE4A,
   10178           3dNOW!, enhanced 3dNOW!, ABM and 64-bit instruction set
   10179           extensions.)
   10180 
   10181     _winchip-c6_
   10182           IDT Winchip C6 CPU, dealt in same way as i486 with additional
   10183           MMX instruction set support.
   10184 
   10185     _winchip2_
   10186           IDT Winchip2 CPU, dealt in same way as i486 with additional
   10187           MMX and 3dNOW!  instruction set support.
   10188 
   10189     _c3_
   10190           Via C3 CPU with MMX and 3dNOW! instruction set support.  (No
   10191           scheduling is implemented for this chip.)
   10192 
   10193     _c3-2_
   10194           Via C3-2 CPU with MMX and SSE instruction set support.  (No
   10195           scheduling is implemented for this chip.)
   10196 
   10197     _geode_
   10198           Embedded AMD CPU with MMX and 3dNOW! instruction set support.
   10199 
   10200      While picking a specific CPU-TYPE will schedule things
   10201      appropriately for that particular chip, the compiler will not
   10202      generate any code that does not run on the i386 without the
   10203      `-march=CPU-TYPE' option being used.
   10204 
   10205 `-march=CPU-TYPE'
   10206      Generate instructions for the machine type CPU-TYPE.  The choices
   10207      for CPU-TYPE are the same as for `-mtune'.  Moreover, specifying
   10208      `-march=CPU-TYPE' implies `-mtune=CPU-TYPE'.
   10209 
   10210 `-mcpu=CPU-TYPE'
   10211      A deprecated synonym for `-mtune'.
   10212 
   10213 `-mfpmath=UNIT'
   10214      Generate floating point arithmetics for selected unit UNIT.  The
   10215      choices for UNIT are:
   10216 
   10217     `387'
   10218           Use the standard 387 floating point coprocessor present
   10219           majority of chips and emulated otherwise.  Code compiled with
   10220           this option will run almost everywhere.  The temporary
   10221           results are computed in 80bit precision instead of precision
   10222           specified by the type resulting in slightly different results
   10223           compared to most of other chips.  See `-ffloat-store' for
   10224           more detailed description.
   10225 
   10226           This is the default choice for i386 compiler.
   10227 
   10228     `sse'
   10229           Use scalar floating point instructions present in the SSE
   10230           instruction set.  This instruction set is supported by
   10231           Pentium3 and newer chips, in the AMD line by Athlon-4,
   10232           Athlon-xp and Athlon-mp chips.  The earlier version of SSE
   10233           instruction set supports only single precision arithmetics,
   10234           thus the double and extended precision arithmetics is still
   10235           done using 387.  Later version, present only in Pentium4 and
   10236           the future AMD x86-64 chips supports double precision
   10237           arithmetics too.
   10238 
   10239           For the i386 compiler, you need to use `-march=CPU-TYPE',
   10240           `-msse' or `-msse2' switches to enable SSE extensions and
   10241           make this option effective.  For the x86-64 compiler, these
   10242           extensions are enabled by default.
   10243 
   10244           The resulting code should be considerably faster in the
   10245           majority of cases and avoid the numerical instability
   10246           problems of 387 code, but may break some existing code that
   10247           expects temporaries to be 80bit.
   10248 
   10249           This is the default choice for the x86-64 compiler.
   10250 
   10251     `sse,387'
   10252           Attempt to utilize both instruction sets at once.  This
   10253           effectively double the amount of available registers and on
   10254           chips with separate execution units for 387 and SSE the
   10255           execution resources too.  Use this option with care, as it is
   10256           still experimental, because the GCC register allocator does
   10257           not model separate functional units well resulting in
   10258           instable performance.
   10259 
   10260 `-masm=DIALECT'
   10261      Output asm instructions using selected DIALECT.  Supported choices
   10262      are `intel' or `att' (the default one).  Darwin does not support
   10263      `intel'.
   10264 
   10265 `-mieee-fp'
   10266 `-mno-ieee-fp'
   10267      Control whether or not the compiler uses IEEE floating point
   10268      comparisons.  These handle correctly the case where the result of a
   10269      comparison is unordered.
   10270 
   10271 `-msoft-float'
   10272      Generate output containing library calls for floating point.
   10273      *Warning:* the requisite libraries are not part of GCC.  Normally
   10274      the facilities of the machine's usual C compiler are used, but
   10275      this can't be done directly in cross-compilation.  You must make
   10276      your own arrangements to provide suitable library functions for
   10277      cross-compilation.
   10278 
   10279      On machines where a function returns floating point results in the
   10280      80387 register stack, some floating point opcodes may be emitted
   10281      even if `-msoft-float' is used.
   10282 
   10283 `-mno-fp-ret-in-387'
   10284      Do not use the FPU registers for return values of functions.
   10285 
   10286      The usual calling convention has functions return values of types
   10287      `float' and `double' in an FPU register, even if there is no FPU.
   10288      The idea is that the operating system should emulate an FPU.
   10289 
   10290      The option `-mno-fp-ret-in-387' causes such values to be returned
   10291      in ordinary CPU registers instead.
   10292 
   10293 `-mno-fancy-math-387'
   10294      Some 387 emulators do not support the `sin', `cos' and `sqrt'
   10295      instructions for the 387.  Specify this option to avoid generating
   10296      those instructions.  This option is the default on FreeBSD,
   10297      OpenBSD and NetBSD.  This option is overridden when `-march'
   10298      indicates that the target cpu will always have an FPU and so the
   10299      instruction will not need emulation.  As of revision 2.6.1, these
   10300      instructions are not generated unless you also use the
   10301      `-funsafe-math-optimizations' switch.
   10302 
   10303 `-malign-double'
   10304 `-mno-align-double'
   10305      Control whether GCC aligns `double', `long double', and `long
   10306      long' variables on a two word boundary or a one word boundary.
   10307      Aligning `double' variables on a two word boundary will produce
   10308      code that runs somewhat faster on a `Pentium' at the expense of
   10309      more memory.
   10310 
   10311      On x86-64, `-malign-double' is enabled by default.
   10312 
   10313      *Warning:* if you use the `-malign-double' switch, structures
   10314      containing the above types will be aligned differently than the
   10315      published application binary interface specifications for the 386
   10316      and will not be binary compatible with structures in code compiled
   10317      without that switch.
   10318 
   10319 `-m96bit-long-double'
   10320 `-m128bit-long-double'
   10321      These switches control the size of `long double' type.  The i386
   10322      application binary interface specifies the size to be 96 bits, so
   10323      `-m96bit-long-double' is the default in 32 bit mode.
   10324 
   10325      Modern architectures (Pentium and newer) would prefer `long double'
   10326      to be aligned to an 8 or 16 byte boundary.  In arrays or structures
   10327      conforming to the ABI, this would not be possible.  So specifying a
   10328      `-m128bit-long-double' will align `long double' to a 16 byte
   10329      boundary by padding the `long double' with an additional 32 bit
   10330      zero.
   10331 
   10332      In the x86-64 compiler, `-m128bit-long-double' is the default
   10333      choice as its ABI specifies that `long double' is to be aligned on
   10334      16 byte boundary.
   10335 
   10336      Notice that neither of these options enable any extra precision
   10337      over the x87 standard of 80 bits for a `long double'.
   10338 
   10339      *Warning:* if you override the default value for your target ABI,
   10340      the structures and arrays containing `long double' variables will
   10341      change their size as well as function calling convention for
   10342      function taking `long double' will be modified.  Hence they will
   10343      not be binary compatible with arrays or structures in code
   10344      compiled without that switch.
   10345 
   10346 `-mmlarge-data-threshold=NUMBER'
   10347      When `-mcmodel=medium' is specified, the data greater than
   10348      THRESHOLD are placed in large data section.  This value must be the
   10349      same across all object linked into the binary and defaults to
   10350      65535.
   10351 
   10352 `-mrtd'
   10353      Use a different function-calling convention, in which functions
   10354      that take a fixed number of arguments return with the `ret' NUM
   10355      instruction, which pops their arguments while returning.  This
   10356      saves one instruction in the caller since there is no need to pop
   10357      the arguments there.
   10358 
   10359      You can specify that an individual function is called with this
   10360      calling sequence with the function attribute `stdcall'.  You can
   10361      also override the `-mrtd' option by using the function attribute
   10362      `cdecl'.  *Note Function Attributes::.
   10363 
   10364      *Warning:* this calling convention is incompatible with the one
   10365      normally used on Unix, so you cannot use it if you need to call
   10366      libraries compiled with the Unix compiler.
   10367 
   10368      Also, you must provide function prototypes for all functions that
   10369      take variable numbers of arguments (including `printf'); otherwise
   10370      incorrect code will be generated for calls to those functions.
   10371 
   10372      In addition, seriously incorrect code will result if you call a
   10373      function with too many arguments.  (Normally, extra arguments are
   10374      harmlessly ignored.)
   10375 
   10376 `-mregparm=NUM'
   10377      Control how many registers are used to pass integer arguments.  By
   10378      default, no registers are used to pass arguments, and at most 3
   10379      registers can be used.  You can control this behavior for a
   10380      specific function by using the function attribute `regparm'.
   10381      *Note Function Attributes::.
   10382 
   10383      *Warning:* if you use this switch, and NUM is nonzero, then you
   10384      must build all modules with the same value, including any
   10385      libraries.  This includes the system libraries and startup modules.
   10386 
   10387 `-msseregparm'
   10388      Use SSE register passing conventions for float and double arguments
   10389      and return values.  You can control this behavior for a specific
   10390      function by using the function attribute `sseregparm'.  *Note
   10391      Function Attributes::.
   10392 
   10393      *Warning:* if you use this switch then you must build all modules
   10394      with the same value, including any libraries.  This includes the
   10395      system libraries and startup modules.
   10396 
   10397 `-mpc32'
   10398 `-mpc64'
   10399 `-mpc80'
   10400      Set 80387 floating-point precision to 32, 64 or 80 bits.  When
   10401      `-mpc32' is specified, the significands of results of
   10402      floating-point operations are rounded to 24 bits (single
   10403      precision); `-mpc64' rounds the the significands of results of
   10404      floating-point operations to 53 bits (double precision) and
   10405      `-mpc80' rounds the significands of results of floating-point
   10406      operations to 64 bits (extended double precision), which is the
   10407      default.  When this option is used, floating-point operations in
   10408      higher precisions are not available to the programmer without
   10409      setting the FPU control word explicitly.
   10410 
   10411      Setting the rounding of floating-point operations to less than the
   10412      default 80 bits can speed some programs by 2% or more.  Note that
   10413      some mathematical libraries assume that extended precision (80
   10414      bit) floating-point operations are enabled by default; routines in
   10415      such libraries could suffer significant loss of accuracy,
   10416      typically through so-called "catastrophic cancellation", when this
   10417      option is used to set the precision to less than extended
   10418      precision.
   10419 
   10420 `-mstackrealign'
   10421      Realign the stack at entry.  On the Intel x86, the
   10422      `-mstackrealign' option will generate an alternate prologue and
   10423      epilogue that realigns the runtime stack.  This supports mixing
   10424      legacy codes that keep a 4-byte aligned stack with modern codes
   10425      that keep a 16-byte stack for SSE compatibility.  The alternate
   10426      prologue and epilogue are slower and bigger than the regular ones,
   10427      and the alternate prologue requires an extra scratch register;
   10428      this lowers the number of registers available if used in
   10429      conjunction with the `regparm' attribute.  The `-mstackrealign'
   10430      option is incompatible with the nested function prologue; this is
   10431      considered a hard error.  See also the attribute
   10432      `force_align_arg_pointer', applicable to individual functions.
   10433 
   10434 `-mpreferred-stack-boundary=NUM'
   10435      Attempt to keep the stack boundary aligned to a 2 raised to NUM
   10436      byte boundary.  If `-mpreferred-stack-boundary' is not specified,
   10437      the default is 4 (16 bytes or 128 bits).
   10438 
   10439      On Pentium and PentiumPro, `double' and `long double' values
   10440      should be aligned to an 8 byte boundary (see `-malign-double') or
   10441      suffer significant run time performance penalties.  On Pentium
   10442      III, the Streaming SIMD Extension (SSE) data type `__m128' may not
   10443      work properly if it is not 16 byte aligned.
   10444 
   10445      To ensure proper alignment of this values on the stack, the stack
   10446      boundary must be as aligned as that required by any value stored
   10447      on the stack.  Further, every function must be generated such that
   10448      it keeps the stack aligned.  Thus calling a function compiled with
   10449      a higher preferred stack boundary from a function compiled with a
   10450      lower preferred stack boundary will most likely misalign the
   10451      stack.  It is recommended that libraries that use callbacks always
   10452      use the default setting.
   10453 
   10454      This extra alignment does consume extra stack space, and generally
   10455      increases code size.  Code that is sensitive to stack space usage,
   10456      such as embedded systems and operating system kernels, may want to
   10457      reduce the preferred alignment to `-mpreferred-stack-boundary=2'.
   10458 
   10459 `-mmmx'
   10460 `-mno-mmx'
   10461 
   10462 `-msse'
   10463 `-mno-sse'
   10464 
   10465 `-msse2'
   10466 `-mno-sse2'
   10467 
   10468 `-msse3'
   10469 `-mno-sse3'
   10470 
   10471 `-mssse3'
   10472 `-mno-ssse3'
   10473 
   10474 `-msse4.1'
   10475 `-mno-sse4.1'
   10476 
   10477 `-msse4.2'
   10478 `-mno-sse4.2'
   10479 
   10480 `-msse4'
   10481 `-mno-sse4'
   10482 
   10483 `-msse4a'
   10484 
   10485 `-mno-sse4a'
   10486 
   10487 `-msse5'
   10488 `-mno-sse5'
   10489 
   10490 `-m3dnow'
   10491 `-mno-3dnow'
   10492 
   10493 `-mpopcnt'
   10494 `-mno-popcnt'
   10495 
   10496 `-mabm'
   10497 `-mno-abm'
   10498      These switches enable or disable the use of instructions in the
   10499      MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4A, SSE5, ABM or 3DNow!
   10500      extended instruction sets.  These extensions are also available as
   10501      built-in functions: see *Note X86 Built-in Functions::, for
   10502      details of the functions enabled and disabled by these switches.
   10503 
   10504      To have SSE/SSE2 instructions generated automatically from
   10505      floating-point code (as opposed to 387 instructions), see
   10506      `-mfpmath=sse'.
   10507 
   10508      These options will enable GCC to use these extended instructions in
   10509      generated code, even without `-mfpmath=sse'.  Applications which
   10510      perform runtime CPU detection must compile separate files for each
   10511      supported architecture, using the appropriate flags.  In
   10512      particular, the file containing the CPU detection code should be
   10513      compiled without these options.
   10514 
   10515 `-mcld'
   10516      This option instructs GCC to emit a `cld' instruction in the
   10517      prologue of functions that use string instructions.  String
   10518      instructions depend on the DF flag to select between autoincrement
   10519      or autodecrement mode.  While the ABI specifies the DF flag to be
   10520      cleared on function entry, some operating systems violate this
   10521      specification by not clearing the DF flag in their exception
   10522      dispatchers.  The exception handler can be invoked with the DF flag
   10523      set which leads to wrong direction mode, when string instructions
   10524      are used.  This option can be enabled by default on 32-bit x86
   10525      targets by configuring GCC with the `--enable-cld' configure
   10526      option.  Generation of `cld' instructions can be suppressed with
   10527      the `-mno-cld' compiler option in this case.
   10528 
   10529 `-mcx16'
   10530      This option will enable GCC to use CMPXCHG16B instruction in
   10531      generated code.  CMPXCHG16B allows for atomic operations on
   10532      128-bit double quadword (or oword) data types.  This is useful for
   10533      high resolution counters that could be updated by multiple
   10534      processors (or cores).  This instruction is generated as part of
   10535      atomic built-in functions: see *Note Atomic Builtins:: for details.
   10536 
   10537 `-msahf'
   10538      This option will enable GCC to use SAHF instruction in generated
   10539      64-bit code.  Early Intel CPUs with Intel 64 lacked LAHF and SAHF
   10540      instructions supported by AMD64 until introduction of Pentium 4 G1
   10541      step in December 2005.  LAHF and SAHF are load and store
   10542      instructions, respectively, for certain status flags.  In 64-bit
   10543      mode, SAHF instruction is used to optimize `fmod', `drem' or
   10544      `remainder' built-in functions: see *Note Other Builtins:: for
   10545      details.
   10546 
   10547 `-mrecip'
   10548      This option will enable GCC to use RCPSS and RSQRTSS instructions
   10549      (and their vectorized variants RCPPS and RSQRTPS) with an
   10550      additional Newton-Rhapson step to increase precision instead of
   10551      DIVSS and SQRTSS (and their vectorized variants) for single
   10552      precision floating point arguments.  These instructions are
   10553      generated only when `-funsafe-math-optimizations' is enabled
   10554      together with `-finite-math-only' and `-fno-trapping-math'.  Note
   10555      that while the throughput of the sequence is higher than the
   10556      throughput of the non-reciprocal instruction, the precision of the
   10557      sequence can be decreased by up to 2 ulp (i.e. the inverse of 1.0
   10558      equals 0.99999994).
   10559 
   10560 `-mveclibabi=TYPE'
   10561      Specifies the ABI type to use for vectorizing intrinsics using an
   10562      external library.  Supported types are `acml' for the AMD math
   10563      core library style of interfacing.  GCC will currently emit calls
   10564      to `__vrd2_sin', `__vrd2_cos', `__vrd2_exp', `__vrd2_log',
   10565      `__vrd2_log2', `__vrd2_log10', `__vrs4_sinf', `__vrs4_cosf',
   10566      `__vrs4_expf', `__vrs4_logf', `__vrs4_log2f', `__vrs4_log10f' and
   10567      `__vrs4_powf' when using this type and `-ftree-vectorize' is
   10568      enabled.  A ACML ABI compatible library will have to be specified
   10569      at link time.
   10570 
   10571 `-mpush-args'
   10572 `-mno-push-args'
   10573      Use PUSH operations to store outgoing parameters.  This method is
   10574      shorter and usually equally fast as method using SUB/MOV
   10575      operations and is enabled by default.  In some cases disabling it
   10576      may improve performance because of improved scheduling and reduced
   10577      dependencies.
   10578 
   10579 `-maccumulate-outgoing-args'
   10580      If enabled, the maximum amount of space required for outgoing
   10581      arguments will be computed in the function prologue.  This is
   10582      faster on most modern CPUs because of reduced dependencies,
   10583      improved scheduling and reduced stack usage when preferred stack
   10584      boundary is not equal to 2.  The drawback is a notable increase in
   10585      code size.  This switch implies `-mno-push-args'.
   10586 
   10587 `-mthreads'
   10588      Support thread-safe exception handling on `Mingw32'.  Code that
   10589      relies on thread-safe exception handling must compile and link all
   10590      code with the `-mthreads' option.  When compiling, `-mthreads'
   10591      defines `-D_MT'; when linking, it links in a special thread helper
   10592      library `-lmingwthrd' which cleans up per thread exception
   10593      handling data.
   10594 
   10595 `-mno-align-stringops'
   10596      Do not align destination of inlined string operations.  This
   10597      switch reduces code size and improves performance in case the
   10598      destination is already aligned, but GCC doesn't know about it.
   10599 
   10600 `-minline-all-stringops'
   10601      By default GCC inlines string operations only when destination is
   10602      known to be aligned at least to 4 byte boundary.  This enables
   10603      more inlining, increase code size, but may improve performance of
   10604      code that depends on fast memcpy, strlen and memset for short
   10605      lengths.
   10606 
   10607 `-minline-stringops-dynamically'
   10608      For string operation of unknown size, inline runtime checks so for
   10609      small blocks inline code is used, while for large blocks library
   10610      call is used.
   10611 
   10612 `-mstringop-strategy=ALG'
   10613      Overwrite internal decision heuristic about particular algorithm
   10614      to inline string operation with.  The allowed values are
   10615      `rep_byte', `rep_4byte', `rep_8byte' for expanding using i386
   10616      `rep' prefix of specified size, `byte_loop', `loop',
   10617      `unrolled_loop' for expanding inline loop, `libcall' for always
   10618      expanding library call.
   10619 
   10620 `-momit-leaf-frame-pointer'
   10621      Don't keep the frame pointer in a register for leaf functions.
   10622      This avoids the instructions to save, set up and restore frame
   10623      pointers and makes an extra register available in leaf functions.
   10624      The option `-fomit-frame-pointer' removes the frame pointer for
   10625      all functions which might make debugging harder.
   10626 
   10627 `-mtls-direct-seg-refs'
   10628 `-mno-tls-direct-seg-refs'
   10629      Controls whether TLS variables may be accessed with offsets from
   10630      the TLS segment register (`%gs' for 32-bit, `%fs' for 64-bit), or
   10631      whether the thread base pointer must be added.  Whether or not this
   10632      is legal depends on the operating system, and whether it maps the
   10633      segment to cover the entire TLS area.
   10634 
   10635      For systems that use GNU libc, the default is on.
   10636 
   10637 `-mfused-madd'
   10638 `-mno-fused-madd'
   10639      Enable automatic generation of fused floating point multiply-add
   10640      instructions if the ISA supports such instructions.  The
   10641      -mfused-madd option is on by default.  The fused multiply-add
   10642      instructions have a different rounding behavior compared to
   10643      executing a multiply followed by an add.
   10644 
   10645  These `-m' switches are supported in addition to the above on AMD
   10646 x86-64 processors in 64-bit environments.
   10647 
   10648 `-m32'
   10649 `-m64'
   10650      Generate code for a 32-bit or 64-bit environment.  The 32-bit
   10651      environment sets int, long and pointer to 32 bits and generates
   10652      code that runs on any i386 system.  The 64-bit environment sets
   10653      int to 32 bits and long and pointer to 64 bits and generates code
   10654      for AMD's x86-64 architecture. For darwin only the -m64 option
   10655      turns off the `-fno-pic' and `-mdynamic-no-pic' options.
   10656 
   10657 `-mno-red-zone'
   10658      Do not use a so called red zone for x86-64 code.  The red zone is
   10659      mandated by the x86-64 ABI, it is a 128-byte area beyond the
   10660      location of the stack pointer that will not be modified by signal
   10661      or interrupt handlers and therefore can be used for temporary data
   10662      without adjusting the stack pointer.  The flag `-mno-red-zone'
   10663      disables this red zone.
   10664 
   10665 `-mcmodel=small'
   10666      Generate code for the small code model: the program and its
   10667      symbols must be linked in the lower 2 GB of the address space.
   10668      Pointers are 64 bits.  Programs can be statically or dynamically
   10669      linked.  This is the default code model.
   10670 
   10671 `-mcmodel=kernel'
   10672      Generate code for the kernel code model.  The kernel runs in the
   10673      negative 2 GB of the address space.  This model has to be used for
   10674      Linux kernel code.
   10675 
   10676 `-mcmodel=medium'
   10677      Generate code for the medium model: The program is linked in the
   10678      lower 2 GB of the address space but symbols can be located
   10679      anywhere in the address space.  Programs can be statically or
   10680      dynamically linked, but building of shared libraries are not
   10681      supported with the medium model.
   10682 
   10683 `-mcmodel=large'
   10684      Generate code for the large model: This model makes no assumptions
   10685      about addresses and sizes of sections.
   10686 
   10687 
   10688 File: gcc.info,  Node: IA-64 Options,  Next: M32C Options,  Prev: i386 and x86-64 Options,  Up: Submodel Options
   10689 
   10690 3.17.15 IA-64 Options
   10691 ---------------------
   10692 
   10693 These are the `-m' options defined for the Intel IA-64 architecture.
   10694 
   10695 `-mbig-endian'
   10696      Generate code for a big endian target.  This is the default for
   10697      HP-UX.
   10698 
   10699 `-mlittle-endian'
   10700      Generate code for a little endian target.  This is the default for
   10701      AIX5 and GNU/Linux.
   10702 
   10703 `-mgnu-as'
   10704 `-mno-gnu-as'
   10705      Generate (or don't) code for the GNU assembler.  This is the
   10706      default.
   10707 
   10708 `-mgnu-ld'
   10709 `-mno-gnu-ld'
   10710      Generate (or don't) code for the GNU linker.  This is the default.
   10711 
   10712 `-mno-pic'
   10713      Generate code that does not use a global pointer register.  The
   10714      result is not position independent code, and violates the IA-64
   10715      ABI.
   10716 
   10717 `-mvolatile-asm-stop'
   10718 `-mno-volatile-asm-stop'
   10719      Generate (or don't) a stop bit immediately before and after
   10720      volatile asm statements.
   10721 
   10722 `-mregister-names'
   10723 `-mno-register-names'
   10724      Generate (or don't) `in', `loc', and `out' register names for the
   10725      stacked registers.  This may make assembler output more readable.
   10726 
   10727 `-mno-sdata'
   10728 `-msdata'
   10729      Disable (or enable) optimizations that use the small data section.
   10730      This may be useful for working around optimizer bugs.
   10731 
   10732 `-mconstant-gp'
   10733      Generate code that uses a single constant global pointer value.
   10734      This is useful when compiling kernel code.
   10735 
   10736 `-mauto-pic'
   10737      Generate code that is self-relocatable.  This implies
   10738      `-mconstant-gp'.  This is useful when compiling firmware code.
   10739 
   10740 `-minline-float-divide-min-latency'
   10741      Generate code for inline divides of floating point values using
   10742      the minimum latency algorithm.
   10743 
   10744 `-minline-float-divide-max-throughput'
   10745      Generate code for inline divides of floating point values using
   10746      the maximum throughput algorithm.
   10747 
   10748 `-minline-int-divide-min-latency'
   10749      Generate code for inline divides of integer values using the
   10750      minimum latency algorithm.
   10751 
   10752 `-minline-int-divide-max-throughput'
   10753      Generate code for inline divides of integer values using the
   10754      maximum throughput algorithm.
   10755 
   10756 `-minline-sqrt-min-latency'
   10757      Generate code for inline square roots using the minimum latency
   10758      algorithm.
   10759 
   10760 `-minline-sqrt-max-throughput'
   10761      Generate code for inline square roots using the maximum throughput
   10762      algorithm.
   10763 
   10764 `-mno-dwarf2-asm'
   10765 `-mdwarf2-asm'
   10766      Don't (or do) generate assembler code for the DWARF2 line number
   10767      debugging info.  This may be useful when not using the GNU
   10768      assembler.
   10769 
   10770 `-mearly-stop-bits'
   10771 `-mno-early-stop-bits'
   10772      Allow stop bits to be placed earlier than immediately preceding the
   10773      instruction that triggered the stop bit.  This can improve
   10774      instruction scheduling, but does not always do so.
   10775 
   10776 `-mfixed-range=REGISTER-RANGE'
   10777      Generate code treating the given register range as fixed registers.
   10778      A fixed register is one that the register allocator can not use.
   10779      This is useful when compiling kernel code.  A register range is
   10780      specified as two registers separated by a dash.  Multiple register
   10781      ranges can be specified separated by a comma.
   10782 
   10783 `-mtls-size=TLS-SIZE'
   10784      Specify bit size of immediate TLS offsets.  Valid values are 14,
   10785      22, and 64.
   10786 
   10787 `-mtune=CPU-TYPE'
   10788      Tune the instruction scheduling for a particular CPU, Valid values
   10789      are itanium, itanium1, merced, itanium2, and mckinley.
   10790 
   10791 `-mt'
   10792 `-pthread'
   10793      Add support for multithreading using the POSIX threads library.
   10794      This option sets flags for both the preprocessor and linker.  It
   10795      does not affect the thread safety of object code produced by the
   10796      compiler or that of libraries supplied with it.  These are HP-UX
   10797      specific flags.
   10798 
   10799 `-milp32'
   10800 `-mlp64'
   10801      Generate code for a 32-bit or 64-bit environment.  The 32-bit
   10802      environment sets int, long and pointer to 32 bits.  The 64-bit
   10803      environment sets int to 32 bits and long and pointer to 64 bits.
   10804      These are HP-UX specific flags.
   10805 
   10806 `-mno-sched-br-data-spec'
   10807 `-msched-br-data-spec'
   10808      (Dis/En)able data speculative scheduling before reload.  This will
   10809      result in generation of the ld.a instructions and the
   10810      corresponding check instructions (ld.c / chk.a).  The default is
   10811      'disable'.
   10812 
   10813 `-msched-ar-data-spec'
   10814 `-mno-sched-ar-data-spec'
   10815      (En/Dis)able data speculative scheduling after reload.  This will
   10816      result in generation of the ld.a instructions and the
   10817      corresponding check instructions (ld.c / chk.a).  The default is
   10818      'enable'.
   10819 
   10820 `-mno-sched-control-spec'
   10821 `-msched-control-spec'
   10822      (Dis/En)able control speculative scheduling.  This feature is
   10823      available only during region scheduling (i.e. before reload).
   10824      This will result in generation of the ld.s instructions and the
   10825      corresponding check instructions chk.s .  The default is 'disable'.
   10826 
   10827 `-msched-br-in-data-spec'
   10828 `-mno-sched-br-in-data-spec'
   10829      (En/Dis)able speculative scheduling of the instructions that are
   10830      dependent on the data speculative loads before reload.  This is
   10831      effective only with `-msched-br-data-spec' enabled.  The default
   10832      is 'enable'.
   10833 
   10834 `-msched-ar-in-data-spec'
   10835 `-mno-sched-ar-in-data-spec'
   10836      (En/Dis)able speculative scheduling of the instructions that are
   10837      dependent on the data speculative loads after reload.  This is
   10838      effective only with `-msched-ar-data-spec' enabled.  The default
   10839      is 'enable'.
   10840 
   10841 `-msched-in-control-spec'
   10842 `-mno-sched-in-control-spec'
   10843      (En/Dis)able speculative scheduling of the instructions that are
   10844      dependent on the control speculative loads.  This is effective
   10845      only with `-msched-control-spec' enabled.  The default is 'enable'.
   10846 
   10847 `-msched-ldc'
   10848 `-mno-sched-ldc'
   10849      (En/Dis)able use of simple data speculation checks ld.c .  If
   10850      disabled, only chk.a instructions will be emitted to check data
   10851      speculative loads.  The default is 'enable'.
   10852 
   10853 `-mno-sched-control-ldc'
   10854 `-msched-control-ldc'
   10855      (Dis/En)able use of ld.c instructions to check control speculative
   10856      loads.  If enabled, in case of control speculative load with no
   10857      speculatively scheduled dependent instructions this load will be
   10858      emitted as ld.sa and ld.c will be used to check it.  The default
   10859      is 'disable'.
   10860 
   10861 `-mno-sched-spec-verbose'
   10862 `-msched-spec-verbose'
   10863      (Dis/En)able printing of the information about speculative motions.
   10864 
   10865 `-mno-sched-prefer-non-data-spec-insns'
   10866 `-msched-prefer-non-data-spec-insns'
   10867      If enabled, data speculative instructions will be chosen for
   10868      schedule only if there are no other choices at the moment.  This
   10869      will make the use of the data speculation much more conservative.
   10870      The default is 'disable'.
   10871 
   10872 `-mno-sched-prefer-non-control-spec-insns'
   10873 `-msched-prefer-non-control-spec-insns'
   10874      If enabled, control speculative instructions will be chosen for
   10875      schedule only if there are no other choices at the moment.  This
   10876      will make the use of the control speculation much more
   10877      conservative.  The default is 'disable'.
   10878 
   10879 `-mno-sched-count-spec-in-critical-path'
   10880 `-msched-count-spec-in-critical-path'
   10881      If enabled, speculative dependencies will be considered during
   10882      computation of the instructions priorities.  This will make the
   10883      use of the speculation a bit more conservative.  The default is
   10884      'disable'.
   10885 
   10886 
   10887 
   10888 File: gcc.info,  Node: M32C Options,  Next: M32R/D Options,  Prev: IA-64 Options,  Up: Submodel Options
   10889 
   10890 3.17.16 M32C Options
   10891 --------------------
   10892 
   10893 `-mcpu=NAME'
   10894      Select the CPU for which code is generated.  NAME may be one of
   10895      `r8c' for the R8C/Tiny series, `m16c' for the M16C (up to /60)
   10896      series, `m32cm' for the M16C/80 series, or `m32c' for the M32C/80
   10897      series.
   10898 
   10899 `-msim'
   10900      Specifies that the program will be run on the simulator.  This
   10901      causes an alternate runtime library to be linked in which
   10902      supports, for example, file I/O.  You must not use this option
   10903      when generating programs that will run on real hardware; you must
   10904      provide your own runtime library for whatever I/O functions are
   10905      needed.
   10906 
   10907 `-memregs=NUMBER'
   10908      Specifies the number of memory-based pseudo-registers GCC will use
   10909      during code generation.  These pseudo-registers will be used like
   10910      real registers, so there is a tradeoff between GCC's ability to
   10911      fit the code into available registers, and the performance penalty
   10912      of using memory instead of registers.  Note that all modules in a
   10913      program must be compiled with the same value for this option.
   10914      Because of that, you must not use this option with the default
   10915      runtime libraries gcc builds.
   10916 
   10917 
   10918 
   10919 File: gcc.info,  Node: M32R/D Options,  Next: M680x0 Options,  Prev: M32C Options,  Up: Submodel Options
   10920 
   10921 3.17.17 M32R/D Options
   10922 ----------------------
   10923 
   10924 These `-m' options are defined for Renesas M32R/D architectures:
   10925 
   10926 `-m32r2'
   10927      Generate code for the M32R/2.
   10928 
   10929 `-m32rx'
   10930      Generate code for the M32R/X.
   10931 
   10932 `-m32r'
   10933      Generate code for the M32R.  This is the default.
   10934 
   10935 `-mmodel=small'
   10936      Assume all objects live in the lower 16MB of memory (so that their
   10937      addresses can be loaded with the `ld24' instruction), and assume
   10938      all subroutines are reachable with the `bl' instruction.  This is
   10939      the default.
   10940 
   10941      The addressability of a particular object can be set with the
   10942      `model' attribute.
   10943 
   10944 `-mmodel=medium'
   10945      Assume objects may be anywhere in the 32-bit address space (the
   10946      compiler will generate `seth/add3' instructions to load their
   10947      addresses), and assume all subroutines are reachable with the `bl'
   10948      instruction.
   10949 
   10950 `-mmodel=large'
   10951      Assume objects may be anywhere in the 32-bit address space (the
   10952      compiler will generate `seth/add3' instructions to load their
   10953      addresses), and assume subroutines may not be reachable with the
   10954      `bl' instruction (the compiler will generate the much slower
   10955      `seth/add3/jl' instruction sequence).
   10956 
   10957 `-msdata=none'
   10958      Disable use of the small data area.  Variables will be put into
   10959      one of `.data', `bss', or `.rodata' (unless the `section'
   10960      attribute has been specified).  This is the default.
   10961 
   10962      The small data area consists of sections `.sdata' and `.sbss'.
   10963      Objects may be explicitly put in the small data area with the
   10964      `section' attribute using one of these sections.
   10965 
   10966 `-msdata=sdata'
   10967      Put small global and static data in the small data area, but do not
   10968      generate special code to reference them.
   10969 
   10970 `-msdata=use'
   10971      Put small global and static data in the small data area, and
   10972      generate special instructions to reference them.
   10973 
   10974 `-G NUM'
   10975      Put global and static objects less than or equal to NUM bytes into
   10976      the small data or bss sections instead of the normal data or bss
   10977      sections.  The default value of NUM is 8.  The `-msdata' option
   10978      must be set to one of `sdata' or `use' for this option to have any
   10979      effect.
   10980 
   10981      All modules should be compiled with the same `-G NUM' value.
   10982      Compiling with different values of NUM may or may not work; if it
   10983      doesn't the linker will give an error message--incorrect code will
   10984      not be generated.
   10985 
   10986 `-mdebug'
   10987      Makes the M32R specific code in the compiler display some
   10988      statistics that might help in debugging programs.
   10989 
   10990 `-malign-loops'
   10991      Align all loops to a 32-byte boundary.
   10992 
   10993 `-mno-align-loops'
   10994      Do not enforce a 32-byte alignment for loops.  This is the default.
   10995 
   10996 `-missue-rate=NUMBER'
   10997      Issue NUMBER instructions per cycle.  NUMBER can only be 1 or 2.
   10998 
   10999 `-mbranch-cost=NUMBER'
   11000      NUMBER can only be 1 or 2.  If it is 1 then branches will be
   11001      preferred over conditional code, if it is 2, then the opposite will
   11002      apply.
   11003 
   11004 `-mflush-trap=NUMBER'
   11005      Specifies the trap number to use to flush the cache.  The default
   11006      is 12.  Valid numbers are between 0 and 15 inclusive.
   11007 
   11008 `-mno-flush-trap'
   11009      Specifies that the cache cannot be flushed by using a trap.
   11010 
   11011 `-mflush-func=NAME'
   11012      Specifies the name of the operating system function to call to
   11013      flush the cache.  The default is __flush_cache_, but a function
   11014      call will only be used if a trap is not available.
   11015 
   11016 `-mno-flush-func'
   11017      Indicates that there is no OS function for flushing the cache.
   11018 
   11019 
   11020 
   11021 File: gcc.info,  Node: M680x0 Options,  Next: M68hc1x Options,  Prev: M32R/D Options,  Up: Submodel Options
   11022 
   11023 3.17.18 M680x0 Options
   11024 ----------------------
   11025 
   11026 These are the `-m' options defined for M680x0 and ColdFire processors.
   11027 The default settings depend on which architecture was selected when the
   11028 compiler was configured; the defaults for the most common choices are
   11029 given below.
   11030 
   11031 `-march=ARCH'
   11032      Generate code for a specific M680x0 or ColdFire instruction set
   11033      architecture.  Permissible values of ARCH for M680x0 architectures
   11034      are: `68000', `68010', `68020', `68030', `68040', `68060' and
   11035      `cpu32'.  ColdFire architectures are selected according to
   11036      Freescale's ISA classification and the permissible values are:
   11037      `isaa', `isaaplus', `isab' and `isac'.
   11038 
   11039      gcc defines a macro `__mcfARCH__' whenever it is generating code
   11040      for a ColdFire target.  The ARCH in this macro is one of the
   11041      `-march' arguments given above.
   11042 
   11043      When used together, `-march' and `-mtune' select code that runs on
   11044      a family of similar processors but that is optimized for a
   11045      particular microarchitecture.
   11046 
   11047 `-mcpu=CPU'
   11048      Generate code for a specific M680x0 or ColdFire processor.  The
   11049      M680x0 CPUs are: `68000', `68010', `68020', `68030', `68040',
   11050      `68060', `68302', `68332' and `cpu32'.  The ColdFire CPUs are
   11051      given by the table below, which also classifies the CPUs into
   11052      families:
   11053 
   11054      *Family*      *`-mcpu' arguments*
   11055      `51qe'        `51qe'
   11056      `5206'        `5202' `5204' `5206'
   11057      `5206e'       `5206e'
   11058      `5208'        `5207' `5208'
   11059      `5211a'       `5210a' `5211a'
   11060      `5213'        `5211' `5212' `5213'
   11061      `5216'        `5214' `5216'
   11062      `52235'       `52230' `52231' `52232' `52233' `52234' `52235'
   11063      `5225'        `5224' `5225'
   11064      `5235'        `5232' `5233' `5234' `5235' `523x'
   11065      `5249'        `5249'
   11066      `5250'        `5250'
   11067      `5271'        `5270' `5271'
   11068      `5272'        `5272'
   11069      `5275'        `5274' `5275'
   11070      `5282'        `5280' `5281' `5282' `528x'
   11071      `5307'        `5307'
   11072      `5329'        `5327' `5328' `5329' `532x'
   11073      `5373'        `5372' `5373' `537x'
   11074      `5407'        `5407'
   11075      `5475'        `5470' `5471' `5472' `5473' `5474' `5475' `547x'
   11076                    `5480' `5481' `5482' `5483' `5484' `5485'
   11077 
   11078      `-mcpu=CPU' overrides `-march=ARCH' if ARCH is compatible with
   11079      CPU.  Other combinations of `-mcpu' and `-march' are rejected.
   11080 
   11081      gcc defines the macro `__mcf_cpu_CPU' when ColdFire target CPU is
   11082      selected.  It also defines `__mcf_family_FAMILY', where the value
   11083      of FAMILY is given by the table above.
   11084 
   11085 `-mtune=TUNE'
   11086      Tune the code for a particular microarchitecture, within the
   11087      constraints set by `-march' and `-mcpu'.  The M680x0
   11088      microarchitectures are: `68000', `68010', `68020', `68030',
   11089      `68040', `68060' and `cpu32'.  The ColdFire microarchitectures
   11090      are: `cfv1', `cfv2', `cfv3', `cfv4' and `cfv4e'.
   11091 
   11092      You can also use `-mtune=68020-40' for code that needs to run
   11093      relatively well on 68020, 68030 and 68040 targets.
   11094      `-mtune=68020-60' is similar but includes 68060 targets as well.
   11095      These two options select the same tuning decisions as `-m68020-40'
   11096      and `-m68020-60' respectively.
   11097 
   11098      gcc defines the macros `__mcARCH' and `__mcARCH__' when tuning for
   11099      680x0 architecture ARCH.  It also defines `mcARCH' unless either
   11100      `-ansi' or a non-GNU `-std' option is used.  If gcc is tuning for
   11101      a range of architectures, as selected by `-mtune=68020-40' or
   11102      `-mtune=68020-60', it defines the macros for every architecture in
   11103      the range.
   11104 
   11105      gcc also defines the macro `__mUARCH__' when tuning for ColdFire
   11106      microarchitecture UARCH, where UARCH is one of the arguments given
   11107      above.
   11108 
   11109 `-m68000'
   11110 `-mc68000'
   11111      Generate output for a 68000.  This is the default when the
   11112      compiler is configured for 68000-based systems.  It is equivalent
   11113      to `-march=68000'.
   11114 
   11115      Use this option for microcontrollers with a 68000 or EC000 core,
   11116      including the 68008, 68302, 68306, 68307, 68322, 68328 and 68356.
   11117 
   11118 `-m68010'
   11119      Generate output for a 68010.  This is the default when the
   11120      compiler is configured for 68010-based systems.  It is equivalent
   11121      to `-march=68010'.
   11122 
   11123 `-m68020'
   11124 `-mc68020'
   11125      Generate output for a 68020.  This is the default when the
   11126      compiler is configured for 68020-based systems.  It is equivalent
   11127      to `-march=68020'.
   11128 
   11129 `-m68030'
   11130      Generate output for a 68030.  This is the default when the
   11131      compiler is configured for 68030-based systems.  It is equivalent
   11132      to `-march=68030'.
   11133 
   11134 `-m68040'
   11135      Generate output for a 68040.  This is the default when the
   11136      compiler is configured for 68040-based systems.  It is equivalent
   11137      to `-march=68040'.
   11138 
   11139      This option inhibits the use of 68881/68882 instructions that have
   11140      to be emulated by software on the 68040.  Use this option if your
   11141      68040 does not have code to emulate those instructions.
   11142 
   11143 `-m68060'
   11144      Generate output for a 68060.  This is the default when the
   11145      compiler is configured for 68060-based systems.  It is equivalent
   11146      to `-march=68060'.
   11147 
   11148      This option inhibits the use of 68020 and 68881/68882 instructions
   11149      that have to be emulated by software on the 68060.  Use this
   11150      option if your 68060 does not have code to emulate those
   11151      instructions.
   11152 
   11153 `-mcpu32'
   11154      Generate output for a CPU32.  This is the default when the
   11155      compiler is configured for CPU32-based systems.  It is equivalent
   11156      to `-march=cpu32'.
   11157 
   11158      Use this option for microcontrollers with a CPU32 or CPU32+ core,
   11159      including the 68330, 68331, 68332, 68333, 68334, 68336, 68340,
   11160      68341, 68349 and 68360.
   11161 
   11162 `-m5200'
   11163      Generate output for a 520X ColdFire CPU.  This is the default when
   11164      the compiler is configured for 520X-based systems.  It is
   11165      equivalent to `-mcpu=5206', and is now deprecated in favor of that
   11166      option.
   11167 
   11168      Use this option for microcontroller with a 5200 core, including
   11169      the MCF5202, MCF5203, MCF5204 and MCF5206.
   11170 
   11171 `-m5206e'
   11172      Generate output for a 5206e ColdFire CPU.  The option is now
   11173      deprecated in favor of the equivalent `-mcpu=5206e'.
   11174 
   11175 `-m528x'
   11176      Generate output for a member of the ColdFire 528X family.  The
   11177      option is now deprecated in favor of the equivalent `-mcpu=528x'.
   11178 
   11179 `-m5307'
   11180      Generate output for a ColdFire 5307 CPU.  The option is now
   11181      deprecated in favor of the equivalent `-mcpu=5307'.
   11182 
   11183 `-m5407'
   11184      Generate output for a ColdFire 5407 CPU.  The option is now
   11185      deprecated in favor of the equivalent `-mcpu=5407'.
   11186 
   11187 `-mcfv4e'
   11188      Generate output for a ColdFire V4e family CPU (e.g. 547x/548x).
   11189      This includes use of hardware floating point instructions.  The
   11190      option is equivalent to `-mcpu=547x', and is now deprecated in
   11191      favor of that option.
   11192 
   11193 `-m68020-40'
   11194      Generate output for a 68040, without using any of the new
   11195      instructions.  This results in code which can run relatively
   11196      efficiently on either a 68020/68881 or a 68030 or a 68040.  The
   11197      generated code does use the 68881 instructions that are emulated
   11198      on the 68040.
   11199 
   11200      The option is equivalent to `-march=68020' `-mtune=68020-40'.
   11201 
   11202 `-m68020-60'
   11203      Generate output for a 68060, without using any of the new
   11204      instructions.  This results in code which can run relatively
   11205      efficiently on either a 68020/68881 or a 68030 or a 68040.  The
   11206      generated code does use the 68881 instructions that are emulated
   11207      on the 68060.
   11208 
   11209      The option is equivalent to `-march=68020' `-mtune=68020-60'.
   11210 
   11211 `-mhard-float'
   11212 `-m68881'
   11213      Generate floating-point instructions.  This is the default for
   11214      68020 and above, and for ColdFire devices that have an FPU.  It
   11215      defines the macro `__HAVE_68881__' on M680x0 targets and
   11216      `__mcffpu__' on ColdFire targets.
   11217 
   11218 `-msoft-float'
   11219      Do not generate floating-point instructions; use library calls
   11220      instead.  This is the default for 68000, 68010, and 68832 targets.
   11221      It is also the default for ColdFire devices that have no FPU.
   11222 
   11223 `-mdiv'
   11224 `-mno-div'
   11225      Generate (do not generate) ColdFire hardware divide and remainder
   11226      instructions.  If `-march' is used without `-mcpu', the default is
   11227      "on" for ColdFire architectures and "off" for M680x0
   11228      architectures.  Otherwise, the default is taken from the target CPU
   11229      (either the default CPU, or the one specified by `-mcpu').  For
   11230      example, the default is "off" for `-mcpu=5206' and "on" for
   11231      `-mcpu=5206e'.
   11232 
   11233      gcc defines the macro `__mcfhwdiv__' when this option is enabled.
   11234 
   11235 `-mshort'
   11236      Consider type `int' to be 16 bits wide, like `short int'.
   11237      Additionally, parameters passed on the stack are also aligned to a
   11238      16-bit boundary even on targets whose API mandates promotion to
   11239      32-bit.
   11240 
   11241 `-mno-short'
   11242      Do not consider type `int' to be 16 bits wide.  This is the
   11243      default.
   11244 
   11245 `-mnobitfield'
   11246 `-mno-bitfield'
   11247      Do not use the bit-field instructions.  The `-m68000', `-mcpu32'
   11248      and `-m5200' options imply `-mnobitfield'.
   11249 
   11250 `-mbitfield'
   11251      Do use the bit-field instructions.  The `-m68020' option implies
   11252      `-mbitfield'.  This is the default if you use a configuration
   11253      designed for a 68020.
   11254 
   11255 `-mrtd'
   11256      Use a different function-calling convention, in which functions
   11257      that take a fixed number of arguments return with the `rtd'
   11258      instruction, which pops their arguments while returning.  This
   11259      saves one instruction in the caller since there is no need to pop
   11260      the arguments there.
   11261 
   11262      This calling convention is incompatible with the one normally used
   11263      on Unix, so you cannot use it if you need to call libraries
   11264      compiled with the Unix compiler.
   11265 
   11266      Also, you must provide function prototypes for all functions that
   11267      take variable numbers of arguments (including `printf'); otherwise
   11268      incorrect code will be generated for calls to those functions.
   11269 
   11270      In addition, seriously incorrect code will result if you call a
   11271      function with too many arguments.  (Normally, extra arguments are
   11272      harmlessly ignored.)
   11273 
   11274      The `rtd' instruction is supported by the 68010, 68020, 68030,
   11275      68040, 68060 and CPU32 processors, but not by the 68000 or 5200.
   11276 
   11277 `-mno-rtd'
   11278      Do not use the calling conventions selected by `-mrtd'.  This is
   11279      the default.
   11280 
   11281 `-malign-int'
   11282 `-mno-align-int'
   11283      Control whether GCC aligns `int', `long', `long long', `float',
   11284      `double', and `long double' variables on a 32-bit boundary
   11285      (`-malign-int') or a 16-bit boundary (`-mno-align-int').  Aligning
   11286      variables on 32-bit boundaries produces code that runs somewhat
   11287      faster on processors with 32-bit busses at the expense of more
   11288      memory.
   11289 
   11290      *Warning:* if you use the `-malign-int' switch, GCC will align
   11291      structures containing the above types  differently than most
   11292      published application binary interface specifications for the m68k.
   11293 
   11294 `-mpcrel'
   11295      Use the pc-relative addressing mode of the 68000 directly, instead
   11296      of using a global offset table.  At present, this option implies
   11297      `-fpic', allowing at most a 16-bit offset for pc-relative
   11298      addressing.  `-fPIC' is not presently supported with `-mpcrel',
   11299      though this could be supported for 68020 and higher processors.
   11300 
   11301 `-mno-strict-align'
   11302 `-mstrict-align'
   11303      Do not (do) assume that unaligned memory references will be
   11304      handled by the system.
   11305 
   11306 `-msep-data'
   11307      Generate code that allows the data segment to be located in a
   11308      different area of memory from the text segment.  This allows for
   11309      execute in place in an environment without virtual memory
   11310      management.  This option implies `-fPIC'.
   11311 
   11312 `-mno-sep-data'
   11313      Generate code that assumes that the data segment follows the text
   11314      segment.  This is the default.
   11315 
   11316 `-mid-shared-library'
   11317      Generate code that supports shared libraries via the library ID
   11318      method.  This allows for execute in place and shared libraries in
   11319      an environment without virtual memory management.  This option
   11320      implies `-fPIC'.
   11321 
   11322 `-mno-id-shared-library'
   11323      Generate code that doesn't assume ID based shared libraries are
   11324      being used.  This is the default.
   11325 
   11326 `-mshared-library-id=n'
   11327      Specified the identification number of the ID based shared library
   11328      being compiled.  Specifying a value of 0 will generate more
   11329      compact code, specifying other values will force the allocation of
   11330      that number to the current library but is no more space or time
   11331      efficient than omitting this option.
   11332 
   11333 
   11334 
   11335 File: gcc.info,  Node: M68hc1x Options,  Next: MCore Options,  Prev: M680x0 Options,  Up: Submodel Options
   11336 
   11337 3.17.19 M68hc1x Options
   11338 -----------------------
   11339 
   11340 These are the `-m' options defined for the 68hc11 and 68hc12
   11341 microcontrollers.  The default values for these options depends on
   11342 which style of microcontroller was selected when the compiler was
   11343 configured; the defaults for the most common choices are given below.
   11344 
   11345 `-m6811'
   11346 `-m68hc11'
   11347      Generate output for a 68HC11.  This is the default when the
   11348      compiler is configured for 68HC11-based systems.
   11349 
   11350 `-m6812'
   11351 `-m68hc12'
   11352      Generate output for a 68HC12.  This is the default when the
   11353      compiler is configured for 68HC12-based systems.
   11354 
   11355 `-m68S12'
   11356 `-m68hcs12'
   11357      Generate output for a 68HCS12.
   11358 
   11359 `-mauto-incdec'
   11360      Enable the use of 68HC12 pre and post auto-increment and
   11361      auto-decrement addressing modes.
   11362 
   11363 `-minmax'
   11364 `-nominmax'
   11365      Enable the use of 68HC12 min and max instructions.
   11366 
   11367 `-mlong-calls'
   11368 `-mno-long-calls'
   11369      Treat all calls as being far away (near).  If calls are assumed to
   11370      be far away, the compiler will use the `call' instruction to call
   11371      a function and the `rtc' instruction for returning.
   11372 
   11373 `-mshort'
   11374      Consider type `int' to be 16 bits wide, like `short int'.
   11375 
   11376 `-msoft-reg-count=COUNT'
   11377      Specify the number of pseudo-soft registers which are used for the
   11378      code generation.  The maximum number is 32.  Using more pseudo-soft
   11379      register may or may not result in better code depending on the
   11380      program.  The default is 4 for 68HC11 and 2 for 68HC12.
   11381 
   11382 
   11383 
   11384 File: gcc.info,  Node: MCore Options,  Next: MIPS Options,  Prev: M68hc1x Options,  Up: Submodel Options
   11385 
   11386 3.17.20 MCore Options
   11387 ---------------------
   11388 
   11389 These are the `-m' options defined for the Motorola M*Core processors.
   11390 
   11391 `-mhardlit'
   11392 `-mno-hardlit'
   11393      Inline constants into the code stream if it can be done in two
   11394      instructions or less.
   11395 
   11396 `-mdiv'
   11397 `-mno-div'
   11398      Use the divide instruction.  (Enabled by default).
   11399 
   11400 `-mrelax-immediate'
   11401 `-mno-relax-immediate'
   11402      Allow arbitrary sized immediates in bit operations.
   11403 
   11404 `-mwide-bitfields'
   11405 `-mno-wide-bitfields'
   11406      Always treat bit-fields as int-sized.
   11407 
   11408 `-m4byte-functions'
   11409 `-mno-4byte-functions'
   11410      Force all functions to be aligned to a four byte boundary.
   11411 
   11412 `-mcallgraph-data'
   11413 `-mno-callgraph-data'
   11414      Emit callgraph information.
   11415 
   11416 `-mslow-bytes'
   11417 `-mno-slow-bytes'
   11418      Prefer word access when reading byte quantities.
   11419 
   11420 `-mlittle-endian'
   11421 `-mbig-endian'
   11422      Generate code for a little endian target.
   11423 
   11424 `-m210'
   11425 `-m340'
   11426      Generate code for the 210 processor.
   11427 
   11428 
   11429 File: gcc.info,  Node: MIPS Options,  Next: MMIX Options,  Prev: MCore Options,  Up: Submodel Options
   11430 
   11431 3.17.21 MIPS Options
   11432 --------------------
   11433 
   11434 `-EB'
   11435      Generate big-endian code.
   11436 
   11437 `-EL'
   11438      Generate little-endian code.  This is the default for `mips*el-*-*'
   11439      configurations.
   11440 
   11441 `-march=ARCH'
   11442      Generate code that will run on ARCH, which can be the name of a
   11443      generic MIPS ISA, or the name of a particular processor.  The ISA
   11444      names are: `mips1', `mips2', `mips3', `mips4', `mips32',
   11445      `mips32r2', and `mips64'.  The processor names are: `4kc', `4km',
   11446      `4kp', `4ksc', `4kec', `4kem', `4kep', `4ksd', `5kc', `5kf',
   11447      `20kc', `24kc', `24kf2_1', `24kf1_1', `24kec', `24kef2_1',
   11448      `24kef1_1', `34kc', `34kf2_1', `34kf1_1', `74kc', `74kf2_1',
   11449      `74kf1_1', `74kf3_2', `m4k', `orion', `r2000', `r3000', `r3900',
   11450      `r4000', `r4400', `r4600', `r4650', `r6000', `r8000', `rm7000',
   11451      `rm9000', `sb1', `sr71000', `vr4100', `vr4111', `vr4120',
   11452      `vr4130', `vr4300', `vr5000', `vr5400' and `vr5500'.  The special
   11453      value `from-abi' selects the most compatible architecture for the
   11454      selected ABI (that is, `mips1' for 32-bit ABIs and `mips3' for
   11455      64-bit ABIs).
   11456 
   11457      In processor names, a final `000' can be abbreviated as `k' (for
   11458      example, `-march=r2k').  Prefixes are optional, and `vr' may be
   11459      written `r'.
   11460 
   11461      Names of the form `Nf2_1' refer to processors with FPUs clocked at
   11462      half the rate of the core, names of the form `Nf1_1' refer to
   11463      processors with FPUs clocked at the same rate as the core, and
   11464      names of the form `Nf3_2' refer to processors with FPUs clocked a
   11465      ratio of 3:2 with respect to the core.  For compatibility reasons,
   11466      `Nf' is accepted as a synonym for `Nf2_1' while `Nx' and `Bfx' are
   11467      accepted as synonyms for `Nf1_1'.
   11468 
   11469      GCC defines two macros based on the value of this option.  The
   11470      first is `_MIPS_ARCH', which gives the name of target
   11471      architecture, as a string.  The second has the form
   11472      `_MIPS_ARCH_FOO', where FOO is the capitalized value of
   11473      `_MIPS_ARCH'.  For example, `-march=r2000' will set `_MIPS_ARCH'
   11474      to `"r2000"' and define the macro `_MIPS_ARCH_R2000'.
   11475 
   11476      Note that the `_MIPS_ARCH' macro uses the processor names given
   11477      above.  In other words, it will have the full prefix and will not
   11478      abbreviate `000' as `k'.  In the case of `from-abi', the macro
   11479      names the resolved architecture (either `"mips1"' or `"mips3"').
   11480      It names the default architecture when no `-march' option is given.
   11481 
   11482 `-mtune=ARCH'
   11483      Optimize for ARCH.  Among other things, this option controls the
   11484      way instructions are scheduled, and the perceived cost of
   11485      arithmetic operations.  The list of ARCH values is the same as for
   11486      `-march'.
   11487 
   11488      When this option is not used, GCC will optimize for the processor
   11489      specified by `-march'.  By using `-march' and `-mtune' together,
   11490      it is possible to generate code that will run on a family of
   11491      processors, but optimize the code for one particular member of
   11492      that family.
   11493 
   11494      `-mtune' defines the macros `_MIPS_TUNE' and `_MIPS_TUNE_FOO',
   11495      which work in the same way as the `-march' ones described above.
   11496 
   11497 `-mips1'
   11498      Equivalent to `-march=mips1'.
   11499 
   11500 `-mips2'
   11501      Equivalent to `-march=mips2'.
   11502 
   11503 `-mips3'
   11504      Equivalent to `-march=mips3'.
   11505 
   11506 `-mips4'
   11507      Equivalent to `-march=mips4'.
   11508 
   11509 `-mips32'
   11510      Equivalent to `-march=mips32'.
   11511 
   11512 `-mips32r2'
   11513      Equivalent to `-march=mips32r2'.
   11514 
   11515 `-mips64'
   11516      Equivalent to `-march=mips64'.
   11517 
   11518 `-mips16'
   11519 `-mno-mips16'
   11520      Generate (do not generate) MIPS16 code.  If GCC is targetting a
   11521      MIPS32 or MIPS64 architecture, it will make use of the MIPS16e ASE.
   11522 
   11523      MIPS16 code generation can also be controlled on a per-function
   11524      basis by means of `mips16' and `nomips16' attributes.  *Note
   11525      Function Attributes::, for more information.
   11526 
   11527 `-mflip-mips16'
   11528      Generate MIPS16 code on alternating functions.  This option is
   11529      provided for regression testing of mixed MIPS16/non-MIPS16 code
   11530      generation, and is not intended for ordinary use in compiling user
   11531      code.
   11532 
   11533 `-minterlink-mips16'
   11534 `-mno-interlink-mips16'
   11535      Require (do not require) that non-MIPS16 code be link-compatible
   11536      with MIPS16 code.
   11537 
   11538      For example, non-MIPS16 code cannot jump directly to MIPS16 code;
   11539      it must either use a call or an indirect jump.
   11540      `-minterlink-mips16' therefore disables direct jumps unless GCC
   11541      knows that the target of the jump is not MIPS16.
   11542 
   11543 `-mabi=32'
   11544 `-mabi=o64'
   11545 `-mabi=n32'
   11546 `-mabi=64'
   11547 `-mabi=eabi'
   11548      Generate code for the given ABI.
   11549 
   11550      Note that the EABI has a 32-bit and a 64-bit variant.  GCC normally
   11551      generates 64-bit code when you select a 64-bit architecture, but
   11552      you can use `-mgp32' to get 32-bit code instead.
   11553 
   11554      For information about the O64 ABI, see
   11555      `http://gcc.gnu.org/projects/mipso64-abi.html'.
   11556 
   11557      GCC supports a variant of the o32 ABI in which floating-point
   11558      registers are 64 rather than 32 bits wide.  You can select this
   11559      combination with `-mabi=32' `-mfp64'.  This ABI relies on the
   11560      `mthc1' and `mfhc1' instructions and is therefore only supported
   11561      for MIPS32R2 processors.
   11562 
   11563      The register assignments for arguments and return values remain the
   11564      same, but each scalar value is passed in a single 64-bit register
   11565      rather than a pair of 32-bit registers.  For example, scalar
   11566      floating-point values are returned in `$f0' only, not a
   11567      `$f0'/`$f1' pair.  The set of call-saved registers also remains
   11568      the same, but all 64 bits are saved.
   11569 
   11570 `-mabicalls'
   11571 `-mno-abicalls'
   11572      Generate (do not generate) code that is suitable for SVR4-style
   11573      dynamic objects.  `-mabicalls' is the default for SVR4-based
   11574      systems.
   11575 
   11576 `-mshared'
   11577 `-mno-shared'
   11578      Generate (do not generate) code that is fully position-independent,
   11579      and that can therefore be linked into shared libraries.  This
   11580      option only affects `-mabicalls'.
   11581 
   11582      All `-mabicalls' code has traditionally been position-independent,
   11583      regardless of options like `-fPIC' and `-fpic'.  However, as an
   11584      extension, the GNU toolchain allows executables to use absolute
   11585      accesses for locally-binding symbols.  It can also use shorter GP
   11586      initialization sequences and generate direct calls to
   11587      locally-defined functions.  This mode is selected by `-mno-shared'.
   11588 
   11589      `-mno-shared' depends on binutils 2.16 or higher and generates
   11590      objects that can only be linked by the GNU linker.  However, the
   11591      option does not affect the ABI of the final executable; it only
   11592      affects the ABI of relocatable objects.  Using `-mno-shared' will
   11593      generally make executables both smaller and quicker.
   11594 
   11595      `-mshared' is the default.
   11596 
   11597 `-mxgot'
   11598 `-mno-xgot'
   11599      Lift (do not lift) the usual restrictions on the size of the global
   11600      offset table.
   11601 
   11602      GCC normally uses a single instruction to load values from the GOT.
   11603      While this is relatively efficient, it will only work if the GOT
   11604      is smaller than about 64k.  Anything larger will cause the linker
   11605      to report an error such as:
   11606 
   11607           relocation truncated to fit: R_MIPS_GOT16 foobar
   11608 
   11609      If this happens, you should recompile your code with `-mxgot'.  It
   11610      should then work with very large GOTs, although it will also be
   11611      less efficient, since it will take three instructions to fetch the
   11612      value of a global symbol.
   11613 
   11614      Note that some linkers can create multiple GOTs.  If you have such
   11615      a linker, you should only need to use `-mxgot' when a single object
   11616      file accesses more than 64k's worth of GOT entries.  Very few do.
   11617 
   11618      These options have no effect unless GCC is generating position
   11619      independent code.
   11620 
   11621 `-mgp32'
   11622      Assume that general-purpose registers are 32 bits wide.
   11623 
   11624 `-mgp64'
   11625      Assume that general-purpose registers are 64 bits wide.
   11626 
   11627 `-mfp32'
   11628      Assume that floating-point registers are 32 bits wide.
   11629 
   11630 `-mfp64'
   11631      Assume that floating-point registers are 64 bits wide.
   11632 
   11633 `-mhard-float'
   11634      Use floating-point coprocessor instructions.
   11635 
   11636 `-msoft-float'
   11637      Do not use floating-point coprocessor instructions.  Implement
   11638      floating-point calculations using library calls instead.
   11639 
   11640 `-msingle-float'
   11641      Assume that the floating-point coprocessor only supports
   11642      single-precision operations.
   11643 
   11644 `-mdouble-float'
   11645      Assume that the floating-point coprocessor supports
   11646      double-precision operations.  This is the default.
   11647 
   11648 `-mllsc'
   11649 `-mno-llsc'
   11650      Use (do not use) `ll', `sc', and `sync' instructions to implement
   11651      atomic memory built-in functions.  When neither option is
   11652      specified, GCC will use the instructions if the target architecture
   11653      supports them.
   11654 
   11655      `-mllsc' is useful if the runtime environment can emulate the
   11656      instructions and `-mno-llsc' can be useful when compiling for
   11657      nonstandard ISAs.  You can make either option the default by
   11658      configuring GCC with `--with-llsc' and `--without-llsc'
   11659      respectively.  `--with-llsc' is the default for some
   11660      configurations; see the installation documentation for details.
   11661 
   11662 `-mdsp'
   11663 `-mno-dsp'
   11664      Use (do not use) revision 1 of the MIPS DSP ASE.  *Note MIPS DSP
   11665      Built-in Functions::.  This option defines the preprocessor macro
   11666      `__mips_dsp'.  It also defines `__mips_dsp_rev' to 1.
   11667 
   11668 `-mdspr2'
   11669 `-mno-dspr2'
   11670      Use (do not use) revision 2 of the MIPS DSP ASE.  *Note MIPS DSP
   11671      Built-in Functions::.  This option defines the preprocessor macros
   11672      `__mips_dsp' and `__mips_dspr2'.  It also defines `__mips_dsp_rev'
   11673      to 2.
   11674 
   11675 `-msmartmips'
   11676 `-mno-smartmips'
   11677      Use (do not use) the MIPS SmartMIPS ASE.
   11678 
   11679 `-mpaired-single'
   11680 `-mno-paired-single'
   11681      Use (do not use) paired-single floating-point instructions.  *Note
   11682      MIPS Paired-Single Support::.  This option requires hardware
   11683      floating-point support to be enabled.
   11684 
   11685 `-mdmx'
   11686 `-mno-mdmx'
   11687      Use (do not use) MIPS Digital Media Extension instructions.  This
   11688      option can only be used when generating 64-bit code and requires
   11689      hardware floating-point support to be enabled.
   11690 
   11691 `-mips3d'
   11692 `-mno-mips3d'
   11693      Use (do not use) the MIPS-3D ASE.  *Note MIPS-3D Built-in
   11694      Functions::.  The option `-mips3d' implies `-mpaired-single'.
   11695 
   11696 `-mmt'
   11697 `-mno-mt'
   11698      Use (do not use) MT Multithreading instructions.
   11699 
   11700 `-mlong64'
   11701      Force `long' types to be 64 bits wide.  See `-mlong32' for an
   11702      explanation of the default and the way that the pointer size is
   11703      determined.
   11704 
   11705 `-mlong32'
   11706      Force `long', `int', and pointer types to be 32 bits wide.
   11707 
   11708      The default size of `int's, `long's and pointers depends on the
   11709      ABI.  All the supported ABIs use 32-bit `int's.  The n64 ABI uses
   11710      64-bit `long's, as does the 64-bit EABI; the others use 32-bit
   11711      `long's.  Pointers are the same size as `long's, or the same size
   11712      as integer registers, whichever is smaller.
   11713 
   11714 `-msym32'
   11715 `-mno-sym32'
   11716      Assume (do not assume) that all symbols have 32-bit values,
   11717      regardless of the selected ABI.  This option is useful in
   11718      combination with `-mabi=64' and `-mno-abicalls' because it allows
   11719      GCC to generate shorter and faster references to symbolic
   11720      addresses.
   11721 
   11722 `-G NUM'
   11723      Put definitions of externally-visible data in a small data section
   11724      if that data is no bigger than NUM bytes.  GCC can then access the
   11725      data more efficiently; see `-mgpopt' for details.
   11726 
   11727      The default `-G' option depends on the configuration.
   11728 
   11729 `-mlocal-sdata'
   11730 `-mno-local-sdata'
   11731      Extend (do not extend) the `-G' behavior to local data too, such
   11732      as to static variables in C.  `-mlocal-sdata' is the default for
   11733      all configurations.
   11734 
   11735      If the linker complains that an application is using too much
   11736      small data, you might want to try rebuilding the less
   11737      performance-critical parts with `-mno-local-sdata'.  You might
   11738      also want to build large libraries with `-mno-local-sdata', so
   11739      that the libraries leave more room for the main program.
   11740 
   11741 `-mextern-sdata'
   11742 `-mno-extern-sdata'
   11743      Assume (do not assume) that externally-defined data will be in a
   11744      small data section if that data is within the `-G' limit.
   11745      `-mextern-sdata' is the default for all configurations.
   11746 
   11747      If you compile a module MOD with `-mextern-sdata' `-G NUM'
   11748      `-mgpopt', and MOD references a variable VAR that is no bigger
   11749      than NUM bytes, you must make sure that VAR is placed in a small
   11750      data section.  If VAR is defined by another module, you must
   11751      either compile that module with a high-enough `-G' setting or
   11752      attach a `section' attribute to VAR's definition.  If VAR is
   11753      common, you must link the application with a high-enough `-G'
   11754      setting.
   11755 
   11756      The easiest way of satisfying these restrictions is to compile and
   11757      link every module with the same `-G' option.  However, you may
   11758      wish to build a library that supports several different small data
   11759      limits.  You can do this by compiling the library with the highest
   11760      supported `-G' setting and additionally using `-mno-extern-sdata'
   11761      to stop the library from making assumptions about
   11762      externally-defined data.
   11763 
   11764 `-mgpopt'
   11765 `-mno-gpopt'
   11766      Use (do not use) GP-relative accesses for symbols that are known
   11767      to be in a small data section; see `-G', `-mlocal-sdata' and
   11768      `-mextern-sdata'.  `-mgpopt' is the default for all configurations.
   11769 
   11770      `-mno-gpopt' is useful for cases where the `$gp' register might
   11771      not hold the value of `_gp'.  For example, if the code is part of
   11772      a library that might be used in a boot monitor, programs that call
   11773      boot monitor routines will pass an unknown value in `$gp'.  (In
   11774      such situations, the boot monitor itself would usually be compiled
   11775      with `-G0'.)
   11776 
   11777      `-mno-gpopt' implies `-mno-local-sdata' and `-mno-extern-sdata'.
   11778 
   11779 `-membedded-data'
   11780 `-mno-embedded-data'
   11781      Allocate variables to the read-only data section first if
   11782      possible, then next in the small data section if possible,
   11783      otherwise in data.  This gives slightly slower code than the
   11784      default, but reduces the amount of RAM required when executing,
   11785      and thus may be preferred for some embedded systems.
   11786 
   11787 `-muninit-const-in-rodata'
   11788 `-mno-uninit-const-in-rodata'
   11789      Put uninitialized `const' variables in the read-only data section.
   11790      This option is only meaningful in conjunction with
   11791      `-membedded-data'.
   11792 
   11793 `-mcode-readable=SETTING'
   11794      Specify whether GCC may generate code that reads from executable
   11795      sections.  There are three possible settings:
   11796 
   11797     `-mcode-readable=yes'
   11798           Instructions may freely access executable sections.  This is
   11799           the default setting.
   11800 
   11801     `-mcode-readable=pcrel'
   11802           MIPS16 PC-relative load instructions can access executable
   11803           sections, but other instructions must not do so.  This option
   11804           is useful on 4KSc and 4KSd processors when the code TLBs have
   11805           the Read Inhibit bit set.  It is also useful on processors
   11806           that can be configured to have a dual instruction/data SRAM
   11807           interface and that, like the M4K, automatically redirect
   11808           PC-relative loads to the instruction RAM.
   11809 
   11810     `-mcode-readable=no'
   11811           Instructions must not access executable sections.  This
   11812           option can be useful on targets that are configured to have a
   11813           dual instruction/data SRAM interface but that (unlike the
   11814           M4K) do not automatically redirect PC-relative loads to the
   11815           instruction RAM.
   11816 
   11817 `-msplit-addresses'
   11818 `-mno-split-addresses'
   11819      Enable (disable) use of the `%hi()' and `%lo()' assembler
   11820      relocation operators.  This option has been superseded by
   11821      `-mexplicit-relocs' but is retained for backwards compatibility.
   11822 
   11823 `-mexplicit-relocs'
   11824 `-mno-explicit-relocs'
   11825      Use (do not use) assembler relocation operators when dealing with
   11826      symbolic addresses.  The alternative, selected by
   11827      `-mno-explicit-relocs', is to use assembler macros instead.
   11828 
   11829      `-mexplicit-relocs' is the default if GCC was configured to use an
   11830      assembler that supports relocation operators.
   11831 
   11832 `-mcheck-zero-division'
   11833 `-mno-check-zero-division'
   11834      Trap (do not trap) on integer division by zero.
   11835 
   11836      The default is `-mcheck-zero-division'.
   11837 
   11838 `-mdivide-traps'
   11839 `-mdivide-breaks'
   11840      MIPS systems check for division by zero by generating either a
   11841      conditional trap or a break instruction.  Using traps results in
   11842      smaller code, but is only supported on MIPS II and later.  Also,
   11843      some versions of the Linux kernel have a bug that prevents trap
   11844      from generating the proper signal (`SIGFPE').  Use
   11845      `-mdivide-traps' to allow conditional traps on architectures that
   11846      support them and `-mdivide-breaks' to force the use of breaks.
   11847 
   11848      The default is usually `-mdivide-traps', but this can be
   11849      overridden at configure time using `--with-divide=breaks'.
   11850      Divide-by-zero checks can be completely disabled using
   11851      `-mno-check-zero-division'.
   11852 
   11853 `-mmemcpy'
   11854 `-mno-memcpy'
   11855      Force (do not force) the use of `memcpy()' for non-trivial block
   11856      moves.  The default is `-mno-memcpy', which allows GCC to inline
   11857      most constant-sized copies.
   11858 
   11859 `-mlong-calls'
   11860 `-mno-long-calls'
   11861      Disable (do not disable) use of the `jal' instruction.  Calling
   11862      functions using `jal' is more efficient but requires the caller
   11863      and callee to be in the same 256 megabyte segment.
   11864 
   11865      This option has no effect on abicalls code.  The default is
   11866      `-mno-long-calls'.
   11867 
   11868 `-mmad'
   11869 `-mno-mad'
   11870      Enable (disable) use of the `mad', `madu' and `mul' instructions,
   11871      as provided by the R4650 ISA.
   11872 
   11873 `-mfused-madd'
   11874 `-mno-fused-madd'
   11875      Enable (disable) use of the floating point multiply-accumulate
   11876      instructions, when they are available.  The default is
   11877      `-mfused-madd'.
   11878 
   11879      When multiply-accumulate instructions are used, the intermediate
   11880      product is calculated to infinite precision and is not subject to
   11881      the FCSR Flush to Zero bit.  This may be undesirable in some
   11882      circumstances.
   11883 
   11884 `-nocpp'
   11885      Tell the MIPS assembler to not run its preprocessor over user
   11886      assembler files (with a `.s' suffix) when assembling them.
   11887 
   11888 `-mfix-r4000'
   11889 `-mno-fix-r4000'
   11890      Work around certain R4000 CPU errata:
   11891         - A double-word or a variable shift may give an incorrect
   11892           result if executed immediately after starting an integer
   11893           division.
   11894 
   11895         - A double-word or a variable shift may give an incorrect
   11896           result if executed while an integer multiplication is in
   11897           progress.
   11898 
   11899         - An integer division may give an incorrect result if started
   11900           in a delay slot of a taken branch or a jump.
   11901 
   11902 `-mfix-r4400'
   11903 `-mno-fix-r4400'
   11904      Work around certain R4400 CPU errata:
   11905         - A double-word or a variable shift may give an incorrect
   11906           result if executed immediately after starting an integer
   11907           division.
   11908 
   11909 `-mfix-vr4120'
   11910 `-mno-fix-vr4120'
   11911      Work around certain VR4120 errata:
   11912         - `dmultu' does not always produce the correct result.
   11913 
   11914         - `div' and `ddiv' do not always produce the correct result if
   11915           one of the operands is negative.
   11916      The workarounds for the division errata rely on special functions
   11917      in `libgcc.a'.  At present, these functions are only provided by
   11918      the `mips64vr*-elf' configurations.
   11919 
   11920      Other VR4120 errata require a nop to be inserted between certain
   11921      pairs of instructions.  These errata are handled by the assembler,
   11922      not by GCC itself.
   11923 
   11924 `-mfix-vr4130'
   11925      Work around the VR4130 `mflo'/`mfhi' errata.  The workarounds are
   11926      implemented by the assembler rather than by GCC, although GCC will
   11927      avoid using `mflo' and `mfhi' if the VR4130 `macc', `macchi',
   11928      `dmacc' and `dmacchi' instructions are available instead.
   11929 
   11930 `-mfix-sb1'
   11931 `-mno-fix-sb1'
   11932      Work around certain SB-1 CPU core errata.  (This flag currently
   11933      works around the SB-1 revision 2 "F1" and "F2" floating point
   11934      errata.)
   11935 
   11936 `-mflush-func=FUNC'
   11937 `-mno-flush-func'
   11938      Specifies the function to call to flush the I and D caches, or to
   11939      not call any such function.  If called, the function must take the
   11940      same arguments as the common `_flush_func()', that is, the address
   11941      of the memory range for which the cache is being flushed, the size
   11942      of the memory range, and the number 3 (to flush both caches).  The
   11943      default depends on the target GCC was configured for, but commonly
   11944      is either `_flush_func' or `__cpu_flush'.
   11945 
   11946 `mbranch-cost=NUM'
   11947      Set the cost of branches to roughly NUM "simple" instructions.
   11948      This cost is only a heuristic and is not guaranteed to produce
   11949      consistent results across releases.  A zero cost redundantly
   11950      selects the default, which is based on the `-mtune' setting.
   11951 
   11952 `-mbranch-likely'
   11953 `-mno-branch-likely'
   11954      Enable or disable use of Branch Likely instructions, regardless of
   11955      the default for the selected architecture.  By default, Branch
   11956      Likely instructions may be generated if they are supported by the
   11957      selected architecture.  An exception is for the MIPS32 and MIPS64
   11958      architectures and processors which implement those architectures;
   11959      for those, Branch Likely instructions will not be generated by
   11960      default because the MIPS32 and MIPS64 architectures specifically
   11961      deprecate their use.
   11962 
   11963 `-mfp-exceptions'
   11964 `-mno-fp-exceptions'
   11965      Specifies whether FP exceptions are enabled.  This affects how we
   11966      schedule FP instructions for some processors.  The default is that
   11967      FP exceptions are enabled.
   11968 
   11969      For instance, on the SB-1, if FP exceptions are disabled, and we
   11970      are emitting 64-bit code, then we can use both FP pipes.
   11971      Otherwise, we can only use one FP pipe.
   11972 
   11973 `-mvr4130-align'
   11974 `-mno-vr4130-align'
   11975      The VR4130 pipeline is two-way superscalar, but can only issue two
   11976      instructions together if the first one is 8-byte aligned.  When
   11977      this option is enabled, GCC will align pairs of instructions that
   11978      it thinks should execute in parallel.
   11979 
   11980      This option only has an effect when optimizing for the VR4130.  It
   11981      normally makes code faster, but at the expense of making it bigger.
   11982      It is enabled by default at optimization level `-O3'.
   11983 
   11984 
   11985 File: gcc.info,  Node: MMIX Options,  Next: MN10300 Options,  Prev: MIPS Options,  Up: Submodel Options
   11986 
   11987 3.17.22 MMIX Options
   11988 --------------------
   11989 
   11990 These options are defined for the MMIX:
   11991 
   11992 `-mlibfuncs'
   11993 `-mno-libfuncs'
   11994      Specify that intrinsic library functions are being compiled,
   11995      passing all values in registers, no matter the size.
   11996 
   11997 `-mepsilon'
   11998 `-mno-epsilon'
   11999      Generate floating-point comparison instructions that compare with
   12000      respect to the `rE' epsilon register.
   12001 
   12002 `-mabi=mmixware'
   12003 `-mabi=gnu'
   12004      Generate code that passes function parameters and return values
   12005      that (in the called function) are seen as registers `$0' and up,
   12006      as opposed to the GNU ABI which uses global registers `$231' and
   12007      up.
   12008 
   12009 `-mzero-extend'
   12010 `-mno-zero-extend'
   12011      When reading data from memory in sizes shorter than 64 bits, use
   12012      (do not use) zero-extending load instructions by default, rather
   12013      than sign-extending ones.
   12014 
   12015 `-mknuthdiv'
   12016 `-mno-knuthdiv'
   12017      Make the result of a division yielding a remainder have the same
   12018      sign as the divisor.  With the default, `-mno-knuthdiv', the sign
   12019      of the remainder follows the sign of the dividend.  Both methods
   12020      are arithmetically valid, the latter being almost exclusively used.
   12021 
   12022 `-mtoplevel-symbols'
   12023 `-mno-toplevel-symbols'
   12024      Prepend (do not prepend) a `:' to all global symbols, so the
   12025      assembly code can be used with the `PREFIX' assembly directive.
   12026 
   12027 `-melf'
   12028      Generate an executable in the ELF format, rather than the default
   12029      `mmo' format used by the `mmix' simulator.
   12030 
   12031 `-mbranch-predict'
   12032 `-mno-branch-predict'
   12033      Use (do not use) the probable-branch instructions, when static
   12034      branch prediction indicates a probable branch.
   12035 
   12036 `-mbase-addresses'
   12037 `-mno-base-addresses'
   12038      Generate (do not generate) code that uses _base addresses_.  Using
   12039      a base address automatically generates a request (handled by the
   12040      assembler and the linker) for a constant to be set up in a global
   12041      register.  The register is used for one or more base address
   12042      requests within the range 0 to 255 from the value held in the
   12043      register.  The generally leads to short and fast code, but the
   12044      number of different data items that can be addressed is limited.
   12045      This means that a program that uses lots of static data may
   12046      require `-mno-base-addresses'.
   12047 
   12048 `-msingle-exit'
   12049 `-mno-single-exit'
   12050      Force (do not force) generated code to have a single exit point in
   12051      each function.
   12052 
   12053 
   12054 File: gcc.info,  Node: MN10300 Options,  Next: MT Options,  Prev: MMIX Options,  Up: Submodel Options
   12055 
   12056 3.17.23 MN10300 Options
   12057 -----------------------
   12058 
   12059 These `-m' options are defined for Matsushita MN10300 architectures:
   12060 
   12061 `-mmult-bug'
   12062      Generate code to avoid bugs in the multiply instructions for the
   12063      MN10300 processors.  This is the default.
   12064 
   12065 `-mno-mult-bug'
   12066      Do not generate code to avoid bugs in the multiply instructions
   12067      for the MN10300 processors.
   12068 
   12069 `-mam33'
   12070      Generate code which uses features specific to the AM33 processor.
   12071 
   12072 `-mno-am33'
   12073      Do not generate code which uses features specific to the AM33
   12074      processor.  This is the default.
   12075 
   12076 `-mreturn-pointer-on-d0'
   12077      When generating a function which returns a pointer, return the
   12078      pointer in both `a0' and `d0'.  Otherwise, the pointer is returned
   12079      only in a0, and attempts to call such functions without a prototype
   12080      would result in errors.  Note that this option is on by default;
   12081      use `-mno-return-pointer-on-d0' to disable it.
   12082 
   12083 `-mno-crt0'
   12084      Do not link in the C run-time initialization object file.
   12085 
   12086 `-mrelax'
   12087      Indicate to the linker that it should perform a relaxation
   12088      optimization pass to shorten branches, calls and absolute memory
   12089      addresses.  This option only has an effect when used on the
   12090      command line for the final link step.
   12091 
   12092      This option makes symbolic debugging impossible.
   12093 
   12094 
   12095 File: gcc.info,  Node: MT Options,  Next: PDP-11 Options,  Prev: MN10300 Options,  Up: Submodel Options
   12096 
   12097 3.17.24 MT Options
   12098 ------------------
   12099 
   12100 These `-m' options are defined for Morpho MT architectures:
   12101 
   12102 `-march=CPU-TYPE'
   12103      Generate code that will run on CPU-TYPE, which is the name of a
   12104      system representing a certain processor type.  Possible values for
   12105      CPU-TYPE are `ms1-64-001', `ms1-16-002', `ms1-16-003' and `ms2'.
   12106 
   12107      When this option is not used, the default is `-march=ms1-16-002'.
   12108 
   12109 `-mbacc'
   12110      Use byte loads and stores when generating code.
   12111 
   12112 `-mno-bacc'
   12113      Do not use byte loads and stores when generating code.
   12114 
   12115 `-msim'
   12116      Use simulator runtime
   12117 
   12118 `-mno-crt0'
   12119      Do not link in the C run-time initialization object file `crti.o'.
   12120      Other run-time initialization and termination files such as
   12121      `startup.o' and `exit.o' are still included on the linker command
   12122      line.
   12123 
   12124 
   12125 
   12126 File: gcc.info,  Node: PDP-11 Options,  Next: PowerPC Options,  Prev: MT Options,  Up: Submodel Options
   12127 
   12128 3.17.25 PDP-11 Options
   12129 ----------------------
   12130 
   12131 These options are defined for the PDP-11:
   12132 
   12133 `-mfpu'
   12134      Use hardware FPP floating point.  This is the default.  (FIS
   12135      floating point on the PDP-11/40 is not supported.)
   12136 
   12137 `-msoft-float'
   12138      Do not use hardware floating point.
   12139 
   12140 `-mac0'
   12141      Return floating-point results in ac0 (fr0 in Unix assembler
   12142      syntax).
   12143 
   12144 `-mno-ac0'
   12145      Return floating-point results in memory.  This is the default.
   12146 
   12147 `-m40'
   12148      Generate code for a PDP-11/40.
   12149 
   12150 `-m45'
   12151      Generate code for a PDP-11/45.  This is the default.
   12152 
   12153 `-m10'
   12154      Generate code for a PDP-11/10.
   12155 
   12156 `-mbcopy-builtin'
   12157      Use inline `movmemhi' patterns for copying memory.  This is the
   12158      default.
   12159 
   12160 `-mbcopy'
   12161      Do not use inline `movmemhi' patterns for copying memory.
   12162 
   12163 `-mint16'
   12164 `-mno-int32'
   12165      Use 16-bit `int'.  This is the default.
   12166 
   12167 `-mint32'
   12168 `-mno-int16'
   12169      Use 32-bit `int'.
   12170 
   12171 `-mfloat64'
   12172 `-mno-float32'
   12173      Use 64-bit `float'.  This is the default.
   12174 
   12175 `-mfloat32'
   12176 `-mno-float64'
   12177      Use 32-bit `float'.
   12178 
   12179 `-mabshi'
   12180      Use `abshi2' pattern.  This is the default.
   12181 
   12182 `-mno-abshi'
   12183      Do not use `abshi2' pattern.
   12184 
   12185 `-mbranch-expensive'
   12186      Pretend that branches are expensive.  This is for experimenting
   12187      with code generation only.
   12188 
   12189 `-mbranch-cheap'
   12190      Do not pretend that branches are expensive.  This is the default.
   12191 
   12192 `-msplit'
   12193      Generate code for a system with split I&D.
   12194 
   12195 `-mno-split'
   12196      Generate code for a system without split I&D.  This is the default.
   12197 
   12198 `-munix-asm'
   12199      Use Unix assembler syntax.  This is the default when configured for
   12200      `pdp11-*-bsd'.
   12201 
   12202 `-mdec-asm'
   12203      Use DEC assembler syntax.  This is the default when configured for
   12204      any PDP-11 target other than `pdp11-*-bsd'.
   12205 
   12206 
   12207 File: gcc.info,  Node: PowerPC Options,  Next: RS/6000 and PowerPC Options,  Prev: PDP-11 Options,  Up: Submodel Options
   12208 
   12209 3.17.26 PowerPC Options
   12210 -----------------------
   12211 
   12212 These are listed under *Note RS/6000 and PowerPC Options::.
   12213 
   12214 
   12215 File: gcc.info,  Node: RS/6000 and PowerPC Options,  Next: S/390 and zSeries Options,  Prev: PowerPC Options,  Up: Submodel Options
   12216 
   12217 3.17.27 IBM RS/6000 and PowerPC Options
   12218 ---------------------------------------
   12219 
   12220 These `-m' options are defined for the IBM RS/6000 and PowerPC:
   12221 `-mpower'
   12222 `-mno-power'
   12223 `-mpower2'
   12224 `-mno-power2'
   12225 `-mpowerpc'
   12226 `-mno-powerpc'
   12227 `-mpowerpc-gpopt'
   12228 `-mno-powerpc-gpopt'
   12229 `-mpowerpc-gfxopt'
   12230 `-mno-powerpc-gfxopt'
   12231 `-mpowerpc64'
   12232 `-mno-powerpc64'
   12233 `-mmfcrf'
   12234 `-mno-mfcrf'
   12235 `-mpopcntb'
   12236 `-mno-popcntb'
   12237 `-mfprnd'
   12238 `-mno-fprnd'
   12239 `-mcmpb'
   12240 `-mno-cmpb'
   12241 `-mmfpgpr'
   12242 `-mno-mfpgpr'
   12243 `-mhard-dfp'
   12244 `-mno-hard-dfp'
   12245      GCC supports two related instruction set architectures for the
   12246      RS/6000 and PowerPC.  The "POWER" instruction set are those
   12247      instructions supported by the `rios' chip set used in the original
   12248      RS/6000 systems and the "PowerPC" instruction set is the
   12249      architecture of the Freescale MPC5xx, MPC6xx, MPC8xx
   12250      microprocessors, and the IBM 4xx, 6xx, and follow-on
   12251      microprocessors.
   12252 
   12253      Neither architecture is a subset of the other.  However there is a
   12254      large common subset of instructions supported by both.  An MQ
   12255      register is included in processors supporting the POWER
   12256      architecture.
   12257 
   12258      You use these options to specify which instructions are available
   12259      on the processor you are using.  The default value of these
   12260      options is determined when configuring GCC.  Specifying the
   12261      `-mcpu=CPU_TYPE' overrides the specification of these options.  We
   12262      recommend you use the `-mcpu=CPU_TYPE' option rather than the
   12263      options listed above.
   12264 
   12265      The `-mpower' option allows GCC to generate instructions that are
   12266      found only in the POWER architecture and to use the MQ register.
   12267      Specifying `-mpower2' implies `-power' and also allows GCC to
   12268      generate instructions that are present in the POWER2 architecture
   12269      but not the original POWER architecture.
   12270 
   12271      The `-mpowerpc' option allows GCC to generate instructions that
   12272      are found only in the 32-bit subset of the PowerPC architecture.
   12273      Specifying `-mpowerpc-gpopt' implies `-mpowerpc' and also allows
   12274      GCC to use the optional PowerPC architecture instructions in the
   12275      General Purpose group, including floating-point square root.
   12276      Specifying `-mpowerpc-gfxopt' implies `-mpowerpc' and also allows
   12277      GCC to use the optional PowerPC architecture instructions in the
   12278      Graphics group, including floating-point select.
   12279 
   12280      The `-mmfcrf' option allows GCC to generate the move from
   12281      condition register field instruction implemented on the POWER4
   12282      processor and other processors that support the PowerPC V2.01
   12283      architecture.  The `-mpopcntb' option allows GCC to generate the
   12284      popcount and double precision FP reciprocal estimate instruction
   12285      implemented on the POWER5 processor and other processors that
   12286      support the PowerPC V2.02 architecture.  The `-mfprnd' option
   12287      allows GCC to generate the FP round to integer instructions
   12288      implemented on the POWER5+ processor and other processors that
   12289      support the PowerPC V2.03 architecture.  The `-mcmpb' option
   12290      allows GCC to generate the compare bytes instruction implemented
   12291      on the POWER6 processor and other processors that support the
   12292      PowerPC V2.05 architecture.  The `-mmfpgpr' option allows GCC to
   12293      generate the FP move to/from general purpose register instructions
   12294      implemented on the POWER6X processor and other processors that
   12295      support the extended PowerPC V2.05 architecture.  The `-mhard-dfp'
   12296      option allows GCC to generate the decimal floating point
   12297      instructions implemented on some POWER processors.
   12298 
   12299      The `-mpowerpc64' option allows GCC to generate the additional
   12300      64-bit instructions that are found in the full PowerPC64
   12301      architecture and to treat GPRs as 64-bit, doubleword quantities.
   12302      GCC defaults to `-mno-powerpc64'.
   12303 
   12304      If you specify both `-mno-power' and `-mno-powerpc', GCC will use
   12305      only the instructions in the common subset of both architectures
   12306      plus some special AIX common-mode calls, and will not use the MQ
   12307      register.  Specifying both `-mpower' and `-mpowerpc' permits GCC
   12308      to use any instruction from either architecture and to allow use
   12309      of the MQ register; specify this for the Motorola MPC601.
   12310 
   12311 `-mnew-mnemonics'
   12312 `-mold-mnemonics'
   12313      Select which mnemonics to use in the generated assembler code.
   12314      With `-mnew-mnemonics', GCC uses the assembler mnemonics defined
   12315      for the PowerPC architecture.  With `-mold-mnemonics' it uses the
   12316      assembler mnemonics defined for the POWER architecture.
   12317      Instructions defined in only one architecture have only one
   12318      mnemonic; GCC uses that mnemonic irrespective of which of these
   12319      options is specified.
   12320 
   12321      GCC defaults to the mnemonics appropriate for the architecture in
   12322      use.  Specifying `-mcpu=CPU_TYPE' sometimes overrides the value of
   12323      these option.  Unless you are building a cross-compiler, you
   12324      should normally not specify either `-mnew-mnemonics' or
   12325      `-mold-mnemonics', but should instead accept the default.
   12326 
   12327 `-mcpu=CPU_TYPE'
   12328      Set architecture type, register usage, choice of mnemonics, and
   12329      instruction scheduling parameters for machine type CPU_TYPE.
   12330      Supported values for CPU_TYPE are `401', `403', `405', `405fp',
   12331      `440', `440fp', `505', `601', `602', `603', `603e', `604', `604e',
   12332      `620', `630', `740', `7400', `7450', `750', `801', `821', `823',
   12333      `860', `970', `8540', `ec603e', `G3', `G4', `G5', `power',
   12334      `power2', `power3', `power4', `power5', `power5+', `power6',
   12335      `power6x', `common', `powerpc', `powerpc64', `rios', `rios1',
   12336      `rios2', `rsc', and `rs64'.
   12337 
   12338      `-mcpu=common' selects a completely generic processor.  Code
   12339      generated under this option will run on any POWER or PowerPC
   12340      processor.  GCC will use only the instructions in the common
   12341      subset of both architectures, and will not use the MQ register.
   12342      GCC assumes a generic processor model for scheduling purposes.
   12343 
   12344      `-mcpu=power', `-mcpu=power2', `-mcpu=powerpc', and
   12345      `-mcpu=powerpc64' specify generic POWER, POWER2, pure 32-bit
   12346      PowerPC (i.e., not MPC601), and 64-bit PowerPC architecture machine
   12347      types, with an appropriate, generic processor model assumed for
   12348      scheduling purposes.
   12349 
   12350      The other options specify a specific processor.  Code generated
   12351      under those options will run best on that processor, and may not
   12352      run at all on others.
   12353 
   12354      The `-mcpu' options automatically enable or disable the following
   12355      options:
   12356 
   12357           -maltivec  -mfprnd  -mhard-float  -mmfcrf  -mmultiple
   12358           -mnew-mnemonics  -mpopcntb  -mpower  -mpower2  -mpowerpc64
   12359           -mpowerpc-gpopt  -mpowerpc-gfxopt  -mstring  -mmulhw  -mdlmzb  -mmfpgpr
   12360 
   12361      The particular options set for any particular CPU will vary between
   12362      compiler versions, depending on what setting seems to produce
   12363      optimal code for that CPU; it doesn't necessarily reflect the
   12364      actual hardware's capabilities.  If you wish to set an individual
   12365      option to a particular value, you may specify it after the `-mcpu'
   12366      option, like `-mcpu=970 -mno-altivec'.
   12367 
   12368      On AIX, the `-maltivec' and `-mpowerpc64' options are not enabled
   12369      or disabled by the `-mcpu' option at present because AIX does not
   12370      have full support for these options.  You may still enable or
   12371      disable them individually if you're sure it'll work in your
   12372      environment.
   12373 
   12374 `-mtune=CPU_TYPE'
   12375      Set the instruction scheduling parameters for machine type
   12376      CPU_TYPE, but do not set the architecture type, register usage, or
   12377      choice of mnemonics, as `-mcpu=CPU_TYPE' would.  The same values
   12378      for CPU_TYPE are used for `-mtune' as for `-mcpu'.  If both are
   12379      specified, the code generated will use the architecture,
   12380      registers, and mnemonics set by `-mcpu', but the scheduling
   12381      parameters set by `-mtune'.
   12382 
   12383 `-mswdiv'
   12384 `-mno-swdiv'
   12385      Generate code to compute division as reciprocal estimate and
   12386      iterative refinement, creating opportunities for increased
   12387      throughput.  This feature requires: optional PowerPC Graphics
   12388      instruction set for single precision and FRE instruction for
   12389      double precision, assuming divides cannot generate user-visible
   12390      traps, and the domain values not include Infinities, denormals or
   12391      zero denominator.
   12392 
   12393 `-maltivec'
   12394 `-mno-altivec'
   12395      Generate code that uses (does not use) AltiVec instructions, and
   12396      also enable the use of built-in functions that allow more direct
   12397      access to the AltiVec instruction set.  You may also need to set
   12398      `-mabi=altivec' to adjust the current ABI with AltiVec ABI
   12399      enhancements.
   12400 
   12401 `-mvrsave'
   12402 
   12403 `-mno-vrsave'
   12404      Generate VRSAVE instructions when generating AltiVec code.
   12405 
   12406 `-msecure-plt'
   12407      Generate code that allows ld and ld.so to build executables and
   12408      shared libraries with non-exec .plt and .got sections.  This is a
   12409      PowerPC 32-bit SYSV ABI option.
   12410 
   12411 `-mbss-plt'
   12412      Generate code that uses a BSS .plt section that ld.so fills in, and
   12413      requires .plt and .got sections that are both writable and
   12414      executable.  This is a PowerPC 32-bit SYSV ABI option.
   12415 
   12416 `-misel'
   12417 `-mno-isel'
   12418      This switch enables or disables the generation of ISEL
   12419      instructions.
   12420 
   12421 `-misel=YES/NO'
   12422      This switch has been deprecated.  Use `-misel' and `-mno-isel'
   12423      instead.
   12424 
   12425 `-mspe'
   12426 `-mno-spe'
   12427      This switch enables or disables the generation of SPE simd
   12428      instructions.
   12429 
   12430 `-mpaired'
   12431 `-mno-paired'
   12432      This switch enables or disables the generation of PAIRED simd
   12433      instructions.
   12434 
   12435 `-mspe=YES/NO'
   12436      This option has been deprecated.  Use `-mspe' and `-mno-spe'
   12437      instead.
   12438 
   12439 `-mfloat-gprs=YES/SINGLE/DOUBLE/NO'
   12440 `-mfloat-gprs'
   12441      This switch enables or disables the generation of floating point
   12442      operations on the general purpose registers for architectures that
   12443      support it.
   12444 
   12445      The argument YES or SINGLE enables the use of single-precision
   12446      floating point operations.
   12447 
   12448      The argument DOUBLE enables the use of single and double-precision
   12449      floating point operations.
   12450 
   12451      The argument NO disables floating point operations on the general
   12452      purpose registers.
   12453 
   12454      This option is currently only available on the MPC854x.
   12455 
   12456 `-m32'
   12457 `-m64'
   12458      Generate code for 32-bit or 64-bit environments of Darwin and SVR4
   12459      targets (including GNU/Linux).  The 32-bit environment sets int,
   12460      long and pointer to 32 bits and generates code that runs on any
   12461      PowerPC variant.  The 64-bit environment sets int to 32 bits and
   12462      long and pointer to 64 bits, and generates code for PowerPC64, as
   12463      for `-mpowerpc64'.
   12464 
   12465 `-mfull-toc'
   12466 `-mno-fp-in-toc'
   12467 `-mno-sum-in-toc'
   12468 `-mminimal-toc'
   12469      Modify generation of the TOC (Table Of Contents), which is created
   12470      for every executable file.  The `-mfull-toc' option is selected by
   12471      default.  In that case, GCC will allocate at least one TOC entry
   12472      for each unique non-automatic variable reference in your program.
   12473      GCC will also place floating-point constants in the TOC.  However,
   12474      only 16,384 entries are available in the TOC.
   12475 
   12476      If you receive a linker error message that saying you have
   12477      overflowed the available TOC space, you can reduce the amount of
   12478      TOC space used with the `-mno-fp-in-toc' and `-mno-sum-in-toc'
   12479      options.  `-mno-fp-in-toc' prevents GCC from putting floating-point
   12480      constants in the TOC and `-mno-sum-in-toc' forces GCC to generate
   12481      code to calculate the sum of an address and a constant at run-time
   12482      instead of putting that sum into the TOC.  You may specify one or
   12483      both of these options.  Each causes GCC to produce very slightly
   12484      slower and larger code at the expense of conserving TOC space.
   12485 
   12486      If you still run out of space in the TOC even when you specify
   12487      both of these options, specify `-mminimal-toc' instead.  This
   12488      option causes GCC to make only one TOC entry for every file.  When
   12489      you specify this option, GCC will produce code that is slower and
   12490      larger but which uses extremely little TOC space.  You may wish to
   12491      use this option only on files that contain less frequently
   12492      executed code.
   12493 
   12494 `-maix64'
   12495 `-maix32'
   12496      Enable 64-bit AIX ABI and calling convention: 64-bit pointers,
   12497      64-bit `long' type, and the infrastructure needed to support them.
   12498      Specifying `-maix64' implies `-mpowerpc64' and `-mpowerpc', while
   12499      `-maix32' disables the 64-bit ABI and implies `-mno-powerpc64'.
   12500      GCC defaults to `-maix32'.
   12501 
   12502 `-mxl-compat'
   12503 `-mno-xl-compat'
   12504      Produce code that conforms more closely to IBM XL compiler
   12505      semantics when using AIX-compatible ABI.  Pass floating-point
   12506      arguments to prototyped functions beyond the register save area
   12507      (RSA) on the stack in addition to argument FPRs.  Do not assume
   12508      that most significant double in 128-bit long double value is
   12509      properly rounded when comparing values and converting to double.
   12510      Use XL symbol names for long double support routines.
   12511 
   12512      The AIX calling convention was extended but not initially
   12513      documented to handle an obscure K&R C case of calling a function
   12514      that takes the address of its arguments with fewer arguments than
   12515      declared.  IBM XL compilers access floating point arguments which
   12516      do not fit in the RSA from the stack when a subroutine is compiled
   12517      without optimization.  Because always storing floating-point
   12518      arguments on the stack is inefficient and rarely needed, this
   12519      option is not enabled by default and only is necessary when
   12520      calling subroutines compiled by IBM XL compilers without
   12521      optimization.
   12522 
   12523 `-mpe'
   12524      Support "IBM RS/6000 SP" "Parallel Environment" (PE).  Link an
   12525      application written to use message passing with special startup
   12526      code to enable the application to run.  The system must have PE
   12527      installed in the standard location (`/usr/lpp/ppe.poe/'), or the
   12528      `specs' file must be overridden with the `-specs=' option to
   12529      specify the appropriate directory location.  The Parallel
   12530      Environment does not support threads, so the `-mpe' option and the
   12531      `-pthread' option are incompatible.
   12532 
   12533 `-malign-natural'
   12534 `-malign-power'
   12535      On AIX, 32-bit Darwin, and 64-bit PowerPC GNU/Linux, the option
   12536      `-malign-natural' overrides the ABI-defined alignment of larger
   12537      types, such as floating-point doubles, on their natural size-based
   12538      boundary.  The option `-malign-power' instructs GCC to follow the
   12539      ABI-specified alignment rules.  GCC defaults to the standard
   12540      alignment defined in the ABI.
   12541 
   12542      On 64-bit Darwin, natural alignment is the default, and
   12543      `-malign-power' is not supported.
   12544 
   12545 `-msoft-float'
   12546 `-mhard-float'
   12547      Generate code that does not use (uses) the floating-point register
   12548      set.  Software floating point emulation is provided if you use the
   12549      `-msoft-float' option, and pass the option to GCC when linking.
   12550 
   12551 `-mmultiple'
   12552 `-mno-multiple'
   12553      Generate code that uses (does not use) the load multiple word
   12554      instructions and the store multiple word instructions.  These
   12555      instructions are generated by default on POWER systems, and not
   12556      generated on PowerPC systems.  Do not use `-mmultiple' on little
   12557      endian PowerPC systems, since those instructions do not work when
   12558      the processor is in little endian mode.  The exceptions are PPC740
   12559      and PPC750 which permit the instructions usage in little endian
   12560      mode.
   12561 
   12562 `-mstring'
   12563 `-mno-string'
   12564      Generate code that uses (does not use) the load string instructions
   12565      and the store string word instructions to save multiple registers
   12566      and do small block moves.  These instructions are generated by
   12567      default on POWER systems, and not generated on PowerPC systems.
   12568      Do not use `-mstring' on little endian PowerPC systems, since those
   12569      instructions do not work when the processor is in little endian
   12570      mode.  The exceptions are PPC740 and PPC750 which permit the
   12571      instructions usage in little endian mode.
   12572 
   12573 `-mupdate'
   12574 `-mno-update'
   12575      Generate code that uses (does not use) the load or store
   12576      instructions that update the base register to the address of the
   12577      calculated memory location.  These instructions are generated by
   12578      default.  If you use `-mno-update', there is a small window
   12579      between the time that the stack pointer is updated and the address
   12580      of the previous frame is stored, which means code that walks the
   12581      stack frame across interrupts or signals may get corrupted data.
   12582 
   12583 `-mfused-madd'
   12584 `-mno-fused-madd'
   12585      Generate code that uses (does not use) the floating point multiply
   12586      and accumulate instructions.  These instructions are generated by
   12587      default if hardware floating is used.
   12588 
   12589 `-mmulhw'
   12590 `-mno-mulhw'
   12591      Generate code that uses (does not use) the half-word multiply and
   12592      multiply-accumulate instructions on the IBM 405 and 440 processors.
   12593      These instructions are generated by default when targetting those
   12594      processors.
   12595 
   12596 `-mdlmzb'
   12597 `-mno-dlmzb'
   12598      Generate code that uses (does not use) the string-search `dlmzb'
   12599      instruction on the IBM 405 and 440 processors.  This instruction is
   12600      generated by default when targetting those processors.
   12601 
   12602 `-mno-bit-align'
   12603 `-mbit-align'
   12604      On System V.4 and embedded PowerPC systems do not (do) force
   12605      structures and unions that contain bit-fields to be aligned to the
   12606      base type of the bit-field.
   12607 
   12608      For example, by default a structure containing nothing but 8
   12609      `unsigned' bit-fields of length 1 would be aligned to a 4 byte
   12610      boundary and have a size of 4 bytes.  By using `-mno-bit-align',
   12611      the structure would be aligned to a 1 byte boundary and be one
   12612      byte in size.
   12613 
   12614 `-mno-strict-align'
   12615 `-mstrict-align'
   12616      On System V.4 and embedded PowerPC systems do not (do) assume that
   12617      unaligned memory references will be handled by the system.
   12618 
   12619 `-mrelocatable'
   12620 `-mno-relocatable'
   12621      On embedded PowerPC systems generate code that allows (does not
   12622      allow) the program to be relocated to a different address at
   12623      runtime.  If you use `-mrelocatable' on any module, all objects
   12624      linked together must be compiled with `-mrelocatable' or
   12625      `-mrelocatable-lib'.
   12626 
   12627 `-mrelocatable-lib'
   12628 `-mno-relocatable-lib'
   12629      On embedded PowerPC systems generate code that allows (does not
   12630      allow) the program to be relocated to a different address at
   12631      runtime.  Modules compiled with `-mrelocatable-lib' can be linked
   12632      with either modules compiled without `-mrelocatable' and
   12633      `-mrelocatable-lib' or with modules compiled with the
   12634      `-mrelocatable' options.
   12635 
   12636 `-mno-toc'
   12637 `-mtoc'
   12638      On System V.4 and embedded PowerPC systems do not (do) assume that
   12639      register 2 contains a pointer to a global area pointing to the
   12640      addresses used in the program.
   12641 
   12642 `-mlittle'
   12643 `-mlittle-endian'
   12644      On System V.4 and embedded PowerPC systems compile code for the
   12645      processor in little endian mode.  The `-mlittle-endian' option is
   12646      the same as `-mlittle'.
   12647 
   12648 `-mbig'
   12649 `-mbig-endian'
   12650      On System V.4 and embedded PowerPC systems compile code for the
   12651      processor in big endian mode.  The `-mbig-endian' option is the
   12652      same as `-mbig'.
   12653 
   12654 `-mdynamic-no-pic'
   12655      On Darwin and Mac OS X systems, compile code so that it is not
   12656      relocatable, but that its external references are relocatable.  The
   12657      resulting code is suitable for applications, but not shared
   12658      libraries.
   12659 
   12660 `-mprioritize-restricted-insns=PRIORITY'
   12661      This option controls the priority that is assigned to
   12662      dispatch-slot restricted instructions during the second scheduling
   12663      pass.  The argument PRIORITY takes the value 0/1/2 to assign
   12664      NO/HIGHEST/SECOND-HIGHEST priority to dispatch slot restricted
   12665      instructions.
   12666 
   12667 `-msched-costly-dep=DEPENDENCE_TYPE'
   12668      This option controls which dependences are considered costly by
   12669      the target during instruction scheduling.  The argument
   12670      DEPENDENCE_TYPE takes one of the following values: NO: no
   12671      dependence is costly, ALL: all dependences are costly,
   12672      TRUE_STORE_TO_LOAD: a true dependence from store to load is costly,
   12673      STORE_TO_LOAD: any dependence from store to load is costly,
   12674      NUMBER: any dependence which latency >= NUMBER is costly.
   12675 
   12676 `-minsert-sched-nops=SCHEME'
   12677      This option controls which nop insertion scheme will be used during
   12678      the second scheduling pass.  The argument SCHEME takes one of the
   12679      following values: NO: Don't insert nops.  PAD: Pad with nops any
   12680      dispatch group which has vacant issue slots, according to the
   12681      scheduler's grouping.  REGROUP_EXACT: Insert nops to force costly
   12682      dependent insns into separate groups.  Insert exactly as many nops
   12683      as needed to force an insn to a new group, according to the
   12684      estimated processor grouping.  NUMBER: Insert nops to force costly
   12685      dependent insns into separate groups.  Insert NUMBER nops to force
   12686      an insn to a new group.
   12687 
   12688 `-mcall-sysv'
   12689      On System V.4 and embedded PowerPC systems compile code using
   12690      calling conventions that adheres to the March 1995 draft of the
   12691      System V Application Binary Interface, PowerPC processor
   12692      supplement.  This is the default unless you configured GCC using
   12693      `powerpc-*-eabiaix'.
   12694 
   12695 `-mcall-sysv-eabi'
   12696      Specify both `-mcall-sysv' and `-meabi' options.
   12697 
   12698 `-mcall-sysv-noeabi'
   12699      Specify both `-mcall-sysv' and `-mno-eabi' options.
   12700 
   12701 `-mcall-solaris'
   12702      On System V.4 and embedded PowerPC systems compile code for the
   12703      Solaris operating system.
   12704 
   12705 `-mcall-linux'
   12706      On System V.4 and embedded PowerPC systems compile code for the
   12707      Linux-based GNU system.
   12708 
   12709 `-mcall-gnu'
   12710      On System V.4 and embedded PowerPC systems compile code for the
   12711      Hurd-based GNU system.
   12712 
   12713 `-mcall-netbsd'
   12714      On System V.4 and embedded PowerPC systems compile code for the
   12715      NetBSD operating system.
   12716 
   12717 `-maix-struct-return'
   12718      Return all structures in memory (as specified by the AIX ABI).
   12719 
   12720 `-msvr4-struct-return'
   12721      Return structures smaller than 8 bytes in registers (as specified
   12722      by the SVR4 ABI).
   12723 
   12724 `-mabi=ABI-TYPE'
   12725      Extend the current ABI with a particular extension, or remove such
   12726      extension.  Valid values are ALTIVEC, NO-ALTIVEC, SPE, NO-SPE,
   12727      IBMLONGDOUBLE, IEEELONGDOUBLE.
   12728 
   12729 `-mabi=spe'
   12730      Extend the current ABI with SPE ABI extensions.  This does not
   12731      change the default ABI, instead it adds the SPE ABI extensions to
   12732      the current ABI.
   12733 
   12734 `-mabi=no-spe'
   12735      Disable Booke SPE ABI extensions for the current ABI.
   12736 
   12737 `-mabi=ibmlongdouble'
   12738      Change the current ABI to use IBM extended precision long double.
   12739      This is a PowerPC 32-bit SYSV ABI option.
   12740 
   12741 `-mabi=ieeelongdouble'
   12742      Change the current ABI to use IEEE extended precision long double.
   12743      This is a PowerPC 32-bit Linux ABI option.
   12744 
   12745 `-mprototype'
   12746 `-mno-prototype'
   12747      On System V.4 and embedded PowerPC systems assume that all calls to
   12748      variable argument functions are properly prototyped.  Otherwise,
   12749      the compiler must insert an instruction before every non
   12750      prototyped call to set or clear bit 6 of the condition code
   12751      register (CR) to indicate whether floating point values were
   12752      passed in the floating point registers in case the function takes
   12753      a variable arguments.  With `-mprototype', only calls to
   12754      prototyped variable argument functions will set or clear the bit.
   12755 
   12756 `-msim'
   12757      On embedded PowerPC systems, assume that the startup module is
   12758      called `sim-crt0.o' and that the standard C libraries are
   12759      `libsim.a' and `libc.a'.  This is the default for
   12760      `powerpc-*-eabisim' configurations.
   12761 
   12762 `-mmvme'
   12763      On embedded PowerPC systems, assume that the startup module is
   12764      called `crt0.o' and the standard C libraries are `libmvme.a' and
   12765      `libc.a'.
   12766 
   12767 `-mads'
   12768      On embedded PowerPC systems, assume that the startup module is
   12769      called `crt0.o' and the standard C libraries are `libads.a' and
   12770      `libc.a'.
   12771 
   12772 `-myellowknife'
   12773      On embedded PowerPC systems, assume that the startup module is
   12774      called `crt0.o' and the standard C libraries are `libyk.a' and
   12775      `libc.a'.
   12776 
   12777 `-mvxworks'
   12778      On System V.4 and embedded PowerPC systems, specify that you are
   12779      compiling for a VxWorks system.
   12780 
   12781 `-mwindiss'
   12782      Specify that you are compiling for the WindISS simulation
   12783      environment.
   12784 
   12785 `-memb'
   12786      On embedded PowerPC systems, set the PPC_EMB bit in the ELF flags
   12787      header to indicate that `eabi' extended relocations are used.
   12788 
   12789 `-meabi'
   12790 `-mno-eabi'
   12791      On System V.4 and embedded PowerPC systems do (do not) adhere to
   12792      the Embedded Applications Binary Interface (eabi) which is a set of
   12793      modifications to the System V.4 specifications.  Selecting `-meabi'
   12794      means that the stack is aligned to an 8 byte boundary, a function
   12795      `__eabi' is called to from `main' to set up the eabi environment,
   12796      and the `-msdata' option can use both `r2' and `r13' to point to
   12797      two separate small data areas.  Selecting `-mno-eabi' means that
   12798      the stack is aligned to a 16 byte boundary, do not call an
   12799      initialization function from `main', and the `-msdata' option will
   12800      only use `r13' to point to a single small data area.  The `-meabi'
   12801      option is on by default if you configured GCC using one of the
   12802      `powerpc*-*-eabi*' options.
   12803 
   12804 `-msdata=eabi'
   12805      On System V.4 and embedded PowerPC systems, put small initialized
   12806      `const' global and static data in the `.sdata2' section, which is
   12807      pointed to by register `r2'.  Put small initialized non-`const'
   12808      global and static data in the `.sdata' section, which is pointed
   12809      to by register `r13'.  Put small uninitialized global and static
   12810      data in the `.sbss' section, which is adjacent to the `.sdata'
   12811      section.  The `-msdata=eabi' option is incompatible with the
   12812      `-mrelocatable' option.  The `-msdata=eabi' option also sets the
   12813      `-memb' option.
   12814 
   12815 `-msdata=sysv'
   12816      On System V.4 and embedded PowerPC systems, put small global and
   12817      static data in the `.sdata' section, which is pointed to by
   12818      register `r13'.  Put small uninitialized global and static data in
   12819      the `.sbss' section, which is adjacent to the `.sdata' section.
   12820      The `-msdata=sysv' option is incompatible with the `-mrelocatable'
   12821      option.
   12822 
   12823 `-msdata=default'
   12824 `-msdata'
   12825      On System V.4 and embedded PowerPC systems, if `-meabi' is used,
   12826      compile code the same as `-msdata=eabi', otherwise compile code the
   12827      same as `-msdata=sysv'.
   12828 
   12829 `-msdata-data'
   12830      On System V.4 and embedded PowerPC systems, put small global data
   12831      in the `.sdata' section.  Put small uninitialized global data in
   12832      the `.sbss' section.  Do not use register `r13' to address small
   12833      data however.  This is the default behavior unless other `-msdata'
   12834      options are used.
   12835 
   12836 `-msdata=none'
   12837 `-mno-sdata'
   12838      On embedded PowerPC systems, put all initialized global and static
   12839      data in the `.data' section, and all uninitialized data in the
   12840      `.bss' section.
   12841 
   12842 `-G NUM'
   12843      On embedded PowerPC systems, put global and static items less than
   12844      or equal to NUM bytes into the small data or bss sections instead
   12845      of the normal data or bss section.  By default, NUM is 8.  The `-G
   12846      NUM' switch is also passed to the linker.  All modules should be
   12847      compiled with the same `-G NUM' value.
   12848 
   12849 `-mregnames'
   12850 `-mno-regnames'
   12851      On System V.4 and embedded PowerPC systems do (do not) emit
   12852      register names in the assembly language output using symbolic
   12853      forms.
   12854 
   12855 `-mlongcall'
   12856 `-mno-longcall'
   12857      By default assume that all calls are far away so that a longer more
   12858      expensive calling sequence is required.  This is required for calls
   12859      further than 32 megabytes (33,554,432 bytes) from the current
   12860      location.  A short call will be generated if the compiler knows
   12861      the call cannot be that far away.  This setting can be overridden
   12862      by the `shortcall' function attribute, or by `#pragma longcall(0)'.
   12863 
   12864      Some linkers are capable of detecting out-of-range calls and
   12865      generating glue code on the fly.  On these systems, long calls are
   12866      unnecessary and generate slower code.  As of this writing, the AIX
   12867      linker can do this, as can the GNU linker for PowerPC/64.  It is
   12868      planned to add this feature to the GNU linker for 32-bit PowerPC
   12869      systems as well.
   12870 
   12871      On Darwin/PPC systems, `#pragma longcall' will generate "jbsr
   12872      callee, L42", plus a "branch island" (glue code).  The two target
   12873      addresses represent the callee and the "branch island".  The
   12874      Darwin/PPC linker will prefer the first address and generate a "bl
   12875      callee" if the PPC "bl" instruction will reach the callee directly;
   12876      otherwise, the linker will generate "bl L42" to call the "branch
   12877      island".  The "branch island" is appended to the body of the
   12878      calling function; it computes the full 32-bit address of the callee
   12879      and jumps to it.
   12880 
   12881      On Mach-O (Darwin) systems, this option directs the compiler emit
   12882      to the glue for every direct call, and the Darwin linker decides
   12883      whether to use or discard it.
   12884 
   12885      In the future, we may cause GCC to ignore all longcall
   12886      specifications when the linker is known to generate glue.
   12887 
   12888 `-pthread'
   12889      Adds support for multithreading with the "pthreads" library.  This
   12890      option sets flags for both the preprocessor and linker.
   12891 
   12892 
   12893 
   12894 File: gcc.info,  Node: S/390 and zSeries Options,  Next: Score Options,  Prev: RS/6000 and PowerPC Options,  Up: Submodel Options
   12895 
   12896 3.17.28 S/390 and zSeries Options
   12897 ---------------------------------
   12898 
   12899 These are the `-m' options defined for the S/390 and zSeries
   12900 architecture.
   12901 
   12902 `-mhard-float'
   12903 `-msoft-float'
   12904      Use (do not use) the hardware floating-point instructions and
   12905      registers for floating-point operations.  When `-msoft-float' is
   12906      specified, functions in `libgcc.a' will be used to perform
   12907      floating-point operations.  When `-mhard-float' is specified, the
   12908      compiler generates IEEE floating-point instructions.  This is the
   12909      default.
   12910 
   12911 `-mlong-double-64'
   12912 `-mlong-double-128'
   12913      These switches control the size of `long double' type. A size of
   12914      64bit makes the `long double' type equivalent to the `double'
   12915      type. This is the default.
   12916 
   12917 `-mbackchain'
   12918 `-mno-backchain'
   12919      Store (do not store) the address of the caller's frame as
   12920      backchain pointer into the callee's stack frame.  A backchain may
   12921      be needed to allow debugging using tools that do not understand
   12922      DWARF-2 call frame information.  When `-mno-packed-stack' is in
   12923      effect, the backchain pointer is stored at the bottom of the stack
   12924      frame; when `-mpacked-stack' is in effect, the backchain is placed
   12925      into the topmost word of the 96/160 byte register save area.
   12926 
   12927      In general, code compiled with `-mbackchain' is call-compatible
   12928      with code compiled with `-mmo-backchain'; however, use of the
   12929      backchain for debugging purposes usually requires that the whole
   12930      binary is built with `-mbackchain'.  Note that the combination of
   12931      `-mbackchain', `-mpacked-stack' and `-mhard-float' is not
   12932      supported.  In order to build a linux kernel use `-msoft-float'.
   12933 
   12934      The default is to not maintain the backchain.
   12935 
   12936 `-mpacked-stack'
   12937 
   12938 `-mno-packed-stack'
   12939      Use (do not use) the packed stack layout.  When
   12940      `-mno-packed-stack' is specified, the compiler uses the all fields
   12941      of the 96/160 byte register save area only for their default
   12942      purpose; unused fields still take up stack space.  When
   12943      `-mpacked-stack' is specified, register save slots are densely
   12944      packed at the top of the register save area; unused space is
   12945      reused for other purposes, allowing for more efficient use of the
   12946      available stack space.  However, when `-mbackchain' is also in
   12947      effect, the topmost word of the save area is always used to store
   12948      the backchain, and the return address register is always saved two
   12949      words below the backchain.
   12950 
   12951      As long as the stack frame backchain is not used, code generated
   12952      with `-mpacked-stack' is call-compatible with code generated with
   12953      `-mno-packed-stack'.  Note that some non-FSF releases of GCC 2.95
   12954      for S/390 or zSeries generated code that uses the stack frame
   12955      backchain at run time, not just for debugging purposes.  Such code
   12956      is not call-compatible with code compiled with `-mpacked-stack'.
   12957      Also, note that the combination of `-mbackchain', `-mpacked-stack'
   12958      and `-mhard-float' is not supported.  In order to build a linux
   12959      kernel use `-msoft-float'.
   12960 
   12961      The default is to not use the packed stack layout.
   12962 
   12963 `-msmall-exec'
   12964 `-mno-small-exec'
   12965      Generate (or do not generate) code using the `bras' instruction to
   12966      do subroutine calls.  This only works reliably if the total
   12967      executable size does not exceed 64k.  The default is to use the
   12968      `basr' instruction instead, which does not have this limitation.
   12969 
   12970 `-m64'
   12971 `-m31'
   12972      When `-m31' is specified, generate code compliant to the GNU/Linux
   12973      for S/390 ABI.  When `-m64' is specified, generate code compliant
   12974      to the GNU/Linux for zSeries ABI.  This allows GCC in particular
   12975      to generate 64-bit instructions.  For the `s390' targets, the
   12976      default is `-m31', while the `s390x' targets default to `-m64'.
   12977 
   12978 `-mzarch'
   12979 `-mesa'
   12980      When `-mzarch' is specified, generate code using the instructions
   12981      available on z/Architecture.  When `-mesa' is specified, generate
   12982      code using the instructions available on ESA/390.  Note that
   12983      `-mesa' is not possible with `-m64'.  When generating code
   12984      compliant to the GNU/Linux for S/390 ABI, the default is `-mesa'.
   12985      When generating code compliant to the GNU/Linux for zSeries ABI,
   12986      the default is `-mzarch'.
   12987 
   12988 `-mmvcle'
   12989 `-mno-mvcle'
   12990      Generate (or do not generate) code using the `mvcle' instruction
   12991      to perform block moves.  When `-mno-mvcle' is specified, use a
   12992      `mvc' loop instead.  This is the default unless optimizing for
   12993      size.
   12994 
   12995 `-mdebug'
   12996 `-mno-debug'
   12997      Print (or do not print) additional debug information when
   12998      compiling.  The default is to not print debug information.
   12999 
   13000 `-march=CPU-TYPE'
   13001      Generate code that will run on CPU-TYPE, which is the name of a
   13002      system representing a certain processor type.  Possible values for
   13003      CPU-TYPE are `g5', `g6', `z900', and `z990'.  When generating code
   13004      using the instructions available on z/Architecture, the default is
   13005      `-march=z900'.  Otherwise, the default is `-march=g5'.
   13006 
   13007 `-mtune=CPU-TYPE'
   13008      Tune to CPU-TYPE everything applicable about the generated code,
   13009      except for the ABI and the set of available instructions.  The
   13010      list of CPU-TYPE values is the same as for `-march'.  The default
   13011      is the value used for `-march'.
   13012 
   13013 `-mtpf-trace'
   13014 `-mno-tpf-trace'
   13015      Generate code that adds (does not add) in TPF OS specific branches
   13016      to trace routines in the operating system.  This option is off by
   13017      default, even when compiling for the TPF OS.
   13018 
   13019 `-mfused-madd'
   13020 `-mno-fused-madd'
   13021      Generate code that uses (does not use) the floating point multiply
   13022      and accumulate instructions.  These instructions are generated by
   13023      default if hardware floating point is used.
   13024 
   13025 `-mwarn-framesize=FRAMESIZE'
   13026      Emit a warning if the current function exceeds the given frame
   13027      size.  Because this is a compile time check it doesn't need to be
   13028      a real problem when the program runs.  It is intended to identify
   13029      functions which most probably cause a stack overflow.  It is
   13030      useful to be used in an environment with limited stack size e.g.
   13031      the linux kernel.
   13032 
   13033 `-mwarn-dynamicstack'
   13034      Emit a warning if the function calls alloca or uses dynamically
   13035      sized arrays.  This is generally a bad idea with a limited stack
   13036      size.
   13037 
   13038 `-mstack-guard=STACK-GUARD'
   13039 
   13040 `-mstack-size=STACK-SIZE'
   13041      If these options are provided the s390 back end emits additional
   13042      instructions in the function prologue which trigger a trap if the
   13043      stack size is STACK-GUARD bytes above the STACK-SIZE (remember
   13044      that the stack on s390 grows downward).  If the STACK-GUARD option
   13045      is omitted the smallest power of 2 larger than the frame size of
   13046      the compiled function is chosen.  These options are intended to be
   13047      used to help debugging stack overflow problems.  The additionally
   13048      emitted code causes only little overhead and hence can also be
   13049      used in production like systems without greater performance
   13050      degradation.  The given values have to be exact powers of 2 and
   13051      STACK-SIZE has to be greater than STACK-GUARD without exceeding
   13052      64k.  In order to be efficient the extra code makes the assumption
   13053      that the stack starts at an address aligned to the value given by
   13054      STACK-SIZE.  The STACK-GUARD option can only be used in
   13055      conjunction with STACK-SIZE.
   13056 
   13057 
   13058 File: gcc.info,  Node: Score Options,  Next: SH Options,  Prev: S/390 and zSeries Options,  Up: Submodel Options
   13059 
   13060 3.17.29 Score Options
   13061 ---------------------
   13062 
   13063 These options are defined for Score implementations:
   13064 
   13065 `-meb'
   13066      Compile code for big endian mode.  This is the default.
   13067 
   13068 `-mel'
   13069      Compile code for little endian mode.
   13070 
   13071 `-mnhwloop'
   13072      Disable generate bcnz instruction.
   13073 
   13074 `-muls'
   13075      Enable generate unaligned load and store instruction.
   13076 
   13077 `-mmac'
   13078      Enable the use of multiply-accumulate instructions. Disabled by
   13079      default.
   13080 
   13081 `-mscore5'
   13082      Specify the SCORE5 as the target architecture.
   13083 
   13084 `-mscore5u'
   13085      Specify the SCORE5U of the target architecture.
   13086 
   13087 `-mscore7'
   13088      Specify the SCORE7 as the target architecture. This is the default.
   13089 
   13090 `-mscore7d'
   13091      Specify the SCORE7D as the target architecture.
   13092 
   13093 
   13094 File: gcc.info,  Node: SH Options,  Next: SPARC Options,  Prev: Score Options,  Up: Submodel Options
   13095 
   13096 3.17.30 SH Options
   13097 ------------------
   13098 
   13099 These `-m' options are defined for the SH implementations:
   13100 
   13101 `-m1'
   13102      Generate code for the SH1.
   13103 
   13104 `-m2'
   13105      Generate code for the SH2.
   13106 
   13107 `-m2e'
   13108      Generate code for the SH2e.
   13109 
   13110 `-m3'
   13111      Generate code for the SH3.
   13112 
   13113 `-m3e'
   13114      Generate code for the SH3e.
   13115 
   13116 `-m4-nofpu'
   13117      Generate code for the SH4 without a floating-point unit.
   13118 
   13119 `-m4-single-only'
   13120      Generate code for the SH4 with a floating-point unit that only
   13121      supports single-precision arithmetic.
   13122 
   13123 `-m4-single'
   13124      Generate code for the SH4 assuming the floating-point unit is in
   13125      single-precision mode by default.
   13126 
   13127 `-m4'
   13128      Generate code for the SH4.
   13129 
   13130 `-m4a-nofpu'
   13131      Generate code for the SH4al-dsp, or for a SH4a in such a way that
   13132      the floating-point unit is not used.
   13133 
   13134 `-m4a-single-only'
   13135      Generate code for the SH4a, in such a way that no double-precision
   13136      floating point operations are used.
   13137 
   13138 `-m4a-single'
   13139      Generate code for the SH4a assuming the floating-point unit is in
   13140      single-precision mode by default.
   13141 
   13142 `-m4a'
   13143      Generate code for the SH4a.
   13144 
   13145 `-m4al'
   13146      Same as `-m4a-nofpu', except that it implicitly passes `-dsp' to
   13147      the assembler.  GCC doesn't generate any DSP instructions at the
   13148      moment.
   13149 
   13150 `-mb'
   13151      Compile code for the processor in big endian mode.
   13152 
   13153 `-ml'
   13154      Compile code for the processor in little endian mode.
   13155 
   13156 `-mdalign'
   13157      Align doubles at 64-bit boundaries.  Note that this changes the
   13158      calling conventions, and thus some functions from the standard C
   13159      library will not work unless you recompile it first with
   13160      `-mdalign'.
   13161 
   13162 `-mrelax'
   13163      Shorten some address references at link time, when possible; uses
   13164      the linker option `-relax'.
   13165 
   13166 `-mbigtable'
   13167      Use 32-bit offsets in `switch' tables.  The default is to use
   13168      16-bit offsets.
   13169 
   13170 `-mfmovd'
   13171      Enable the use of the instruction `fmovd'.
   13172 
   13173 `-mhitachi'
   13174      Comply with the calling conventions defined by Renesas.
   13175 
   13176 `-mrenesas'
   13177      Comply with the calling conventions defined by Renesas.
   13178 
   13179 `-mno-renesas'
   13180      Comply with the calling conventions defined for GCC before the
   13181      Renesas conventions were available.  This option is the default
   13182      for all targets of the SH toolchain except for `sh-symbianelf'.
   13183 
   13184 `-mnomacsave'
   13185      Mark the `MAC' register as call-clobbered, even if `-mhitachi' is
   13186      given.
   13187 
   13188 `-mieee'
   13189      Increase IEEE-compliance of floating-point code.  At the moment,
   13190      this is equivalent to `-fno-finite-math-only'.  When generating 16
   13191      bit SH opcodes, getting IEEE-conforming results for comparisons of
   13192      NANs / infinities incurs extra overhead in every floating point
   13193      comparison, therefore the default is set to `-ffinite-math-only'.
   13194 
   13195 `-minline-ic_invalidate'
   13196      Inline code to invalidate instruction cache entries after setting
   13197      up nested function trampolines.  This option has no effect if
   13198      -musermode is in effect and the selected code generation option
   13199      (e.g. -m4) does not allow the use of the icbi instruction.  If the
   13200      selected code generation option does not allow the use of the icbi
   13201      instruction, and -musermode is not in effect, the inlined code will
   13202      manipulate the instruction cache address array directly with an
   13203      associative write.  This not only requires privileged mode, but it
   13204      will also fail if the cache line had been mapped via the TLB and
   13205      has become unmapped.
   13206 
   13207 `-misize'
   13208      Dump instruction size and location in the assembly code.
   13209 
   13210 `-mpadstruct'
   13211      This option is deprecated.  It pads structures to multiple of 4
   13212      bytes, which is incompatible with the SH ABI.
   13213 
   13214 `-mspace'
   13215      Optimize for space instead of speed.  Implied by `-Os'.
   13216 
   13217 `-mprefergot'
   13218      When generating position-independent code, emit function calls
   13219      using the Global Offset Table instead of the Procedure Linkage
   13220      Table.
   13221 
   13222 `-musermode'
   13223      Don't generate privileged mode only code; implies
   13224      -mno-inline-ic_invalidate if the inlined code would not work in
   13225      user mode.  This is the default when the target is `sh-*-linux*'.
   13226 
   13227 `-multcost=NUMBER'
   13228      Set the cost to assume for a multiply insn.
   13229 
   13230 `-mdiv=STRATEGY'
   13231      Set the division strategy to use for SHmedia code.  STRATEGY must
   13232      be one of: call, call2, fp, inv, inv:minlat, inv20u, inv20l,
   13233      inv:call, inv:call2, inv:fp .  "fp" performs the operation in
   13234      floating point.  This has a very high latency, but needs only a
   13235      few instructions, so it might be a good choice if your code has
   13236      enough easily exploitable ILP to allow the compiler to schedule
   13237      the floating point instructions together with other instructions.
   13238      Division by zero causes a floating point exception.  "inv" uses
   13239      integer operations to calculate the inverse of the divisor, and
   13240      then multiplies the dividend with the inverse.  This strategy
   13241      allows cse and hoisting of the inverse calculation.  Division by
   13242      zero calculates an unspecified result, but does not trap.
   13243      "inv:minlat" is a variant of "inv" where if no cse / hoisting
   13244      opportunities have been found, or if the entire operation has been
   13245      hoisted to the same place, the last stages of the inverse
   13246      calculation are intertwined with the final multiply to reduce the
   13247      overall latency, at the expense of using a few more instructions,
   13248      and thus offering fewer scheduling opportunities with other code.
   13249      "call" calls a library function that usually implements the
   13250      inv:minlat strategy.  This gives high code density for
   13251      m5-*media-nofpu compilations.  "call2" uses a different entry
   13252      point of the same library function, where it assumes that a
   13253      pointer to a lookup table has already been set up, which exposes
   13254      the pointer load to cse / code hoisting optimizations.
   13255      "inv:call", "inv:call2" and "inv:fp" all use the "inv" algorithm
   13256      for initial code generation, but if the code stays unoptimized,
   13257      revert to the "call", "call2", or "fp" strategies, respectively.
   13258      Note that the potentially-trapping side effect of division by zero
   13259      is carried by a separate instruction, so it is possible that all
   13260      the integer instructions are hoisted out, but the marker for the
   13261      side effect stays where it is.  A recombination to fp operations
   13262      or a call is not possible in that case.  "inv20u" and "inv20l" are
   13263      variants of the "inv:minlat" strategy.  In the case that the
   13264      inverse calculation was nor separated from the multiply, they speed
   13265      up division where the dividend fits into 20 bits (plus sign where
   13266      applicable), by inserting a test to skip a number of operations in
   13267      this case; this test slows down the case of larger dividends.
   13268      inv20u assumes the case of a such a small dividend to be unlikely,
   13269      and inv20l assumes it to be likely.
   13270 
   13271 `-mdivsi3_libfunc=NAME'
   13272      Set the name of the library function used for 32 bit signed
   13273      division to NAME.  This only affect the name used in the call and
   13274      inv:call division strategies, and the compiler will still expect
   13275      the same sets of input/output/clobbered registers as if this
   13276      option was not present.
   13277 
   13278 `-madjust-unroll'
   13279      Throttle unrolling to avoid thrashing target registers.  This
   13280      option only has an effect if the gcc code base supports the
   13281      TARGET_ADJUST_UNROLL_MAX target hook.
   13282 
   13283 `-mindexed-addressing'
   13284      Enable the use of the indexed addressing mode for
   13285      SHmedia32/SHcompact.  This is only safe if the hardware and/or OS
   13286      implement 32 bit wrap-around semantics for the indexed addressing
   13287      mode.  The architecture allows the implementation of processors
   13288      with 64 bit MMU, which the OS could use to get 32 bit addressing,
   13289      but since no current hardware implementation supports this or any
   13290      other way to make the indexed addressing mode safe to use in the
   13291      32 bit ABI, the default is -mno-indexed-addressing.
   13292 
   13293 `-mgettrcost=NUMBER'
   13294      Set the cost assumed for the gettr instruction to NUMBER.  The
   13295      default is 2 if `-mpt-fixed' is in effect, 100 otherwise.
   13296 
   13297 `-mpt-fixed'
   13298      Assume pt* instructions won't trap.  This will generally generate
   13299      better scheduled code, but is unsafe on current hardware.  The
   13300      current architecture definition says that ptabs and ptrel trap
   13301      when the target anded with 3 is 3.  This has the unintentional
   13302      effect of making it unsafe to schedule ptabs / ptrel before a
   13303      branch, or hoist it out of a loop.  For example,
   13304      __do_global_ctors, a part of libgcc that runs constructors at
   13305      program startup, calls functions in a list which is delimited by
   13306      -1.  With the -mpt-fixed option, the ptabs will be done before
   13307      testing against -1.  That means that all the constructors will be
   13308      run a bit quicker, but when the loop comes to the end of the list,
   13309      the program crashes because ptabs loads -1 into a target register.
   13310      Since this option is unsafe for any hardware implementing the
   13311      current architecture specification, the default is -mno-pt-fixed.
   13312      Unless the user specifies a specific cost with `-mgettrcost',
   13313      -mno-pt-fixed also implies `-mgettrcost=100'; this deters register
   13314      allocation using target registers for storing ordinary integers.
   13315 
   13316 `-minvalid-symbols'
   13317      Assume symbols might be invalid.  Ordinary function symbols
   13318      generated by the compiler will always be valid to load with
   13319      movi/shori/ptabs or movi/shori/ptrel, but with assembler and/or
   13320      linker tricks it is possible to generate symbols that will cause
   13321      ptabs / ptrel to trap.  This option is only meaningful when
   13322      `-mno-pt-fixed' is in effect.  It will then prevent
   13323      cross-basic-block cse, hoisting and most scheduling of symbol
   13324      loads.  The default is `-mno-invalid-symbols'.
   13325 
   13326 
   13327 File: gcc.info,  Node: SPARC Options,  Next: SPU Options,  Prev: SH Options,  Up: Submodel Options
   13328 
   13329 3.17.31 SPARC Options
   13330 ---------------------
   13331 
   13332 These `-m' options are supported on the SPARC:
   13333 
   13334 `-mno-app-regs'
   13335 `-mapp-regs'
   13336      Specify `-mapp-regs' to generate output using the global registers
   13337      2 through 4, which the SPARC SVR4 ABI reserves for applications.
   13338      This is the default.
   13339 
   13340      To be fully SVR4 ABI compliant at the cost of some performance
   13341      loss, specify `-mno-app-regs'.  You should compile libraries and
   13342      system software with this option.
   13343 
   13344 `-mfpu'
   13345 `-mhard-float'
   13346      Generate output containing floating point instructions.  This is
   13347      the default.
   13348 
   13349 `-mno-fpu'
   13350 `-msoft-float'
   13351      Generate output containing library calls for floating point.
   13352      *Warning:* the requisite libraries are not available for all SPARC
   13353      targets.  Normally the facilities of the machine's usual C
   13354      compiler are used, but this cannot be done directly in
   13355      cross-compilation.  You must make your own arrangements to provide
   13356      suitable library functions for cross-compilation.  The embedded
   13357      targets `sparc-*-aout' and `sparclite-*-*' do provide software
   13358      floating point support.
   13359 
   13360      `-msoft-float' changes the calling convention in the output file;
   13361      therefore, it is only useful if you compile _all_ of a program with
   13362      this option.  In particular, you need to compile `libgcc.a', the
   13363      library that comes with GCC, with `-msoft-float' in order for this
   13364      to work.
   13365 
   13366 `-mhard-quad-float'
   13367      Generate output containing quad-word (long double) floating point
   13368      instructions.
   13369 
   13370 `-msoft-quad-float'
   13371      Generate output containing library calls for quad-word (long
   13372      double) floating point instructions.  The functions called are
   13373      those specified in the SPARC ABI.  This is the default.
   13374 
   13375      As of this writing, there are no SPARC implementations that have
   13376      hardware support for the quad-word floating point instructions.
   13377      They all invoke a trap handler for one of these instructions, and
   13378      then the trap handler emulates the effect of the instruction.
   13379      Because of the trap handler overhead, this is much slower than
   13380      calling the ABI library routines.  Thus the `-msoft-quad-float'
   13381      option is the default.
   13382 
   13383 `-mno-unaligned-doubles'
   13384 `-munaligned-doubles'
   13385      Assume that doubles have 8 byte alignment.  This is the default.
   13386 
   13387      With `-munaligned-doubles', GCC assumes that doubles have 8 byte
   13388      alignment only if they are contained in another type, or if they
   13389      have an absolute address.  Otherwise, it assumes they have 4 byte
   13390      alignment.  Specifying this option avoids some rare compatibility
   13391      problems with code generated by other compilers.  It is not the
   13392      default because it results in a performance loss, especially for
   13393      floating point code.
   13394 
   13395 `-mno-faster-structs'
   13396 `-mfaster-structs'
   13397      With `-mfaster-structs', the compiler assumes that structures
   13398      should have 8 byte alignment.  This enables the use of pairs of
   13399      `ldd' and `std' instructions for copies in structure assignment,
   13400      in place of twice as many `ld' and `st' pairs.  However, the use
   13401      of this changed alignment directly violates the SPARC ABI.  Thus,
   13402      it's intended only for use on targets where the developer
   13403      acknowledges that their resulting code will not be directly in
   13404      line with the rules of the ABI.
   13405 
   13406 `-mimpure-text'
   13407      `-mimpure-text', used in addition to `-shared', tells the compiler
   13408      to not pass `-z text' to the linker when linking a shared object.
   13409      Using this option, you can link position-dependent code into a
   13410      shared object.
   13411 
   13412      `-mimpure-text' suppresses the "relocations remain against
   13413      allocatable but non-writable sections" linker error message.
   13414      However, the necessary relocations will trigger copy-on-write, and
   13415      the shared object is not actually shared across processes.
   13416      Instead of using `-mimpure-text', you should compile all source
   13417      code with `-fpic' or `-fPIC'.
   13418 
   13419      This option is only available on SunOS and Solaris.
   13420 
   13421 `-mcpu=CPU_TYPE'
   13422      Set the instruction set, register set, and instruction scheduling
   13423      parameters for machine type CPU_TYPE.  Supported values for
   13424      CPU_TYPE are `v7', `cypress', `v8', `supersparc', `sparclite',
   13425      `f930', `f934', `hypersparc', `sparclite86x', `sparclet',
   13426      `tsc701', `v9', `ultrasparc', `ultrasparc3', `niagara' and
   13427      `niagara2'.
   13428 
   13429      Default instruction scheduling parameters are used for values that
   13430      select an architecture and not an implementation.  These are `v7',
   13431      `v8', `sparclite', `sparclet', `v9'.
   13432 
   13433      Here is a list of each supported architecture and their supported
   13434      implementations.
   13435 
   13436               v7:             cypress
   13437               v8:             supersparc, hypersparc
   13438               sparclite:      f930, f934, sparclite86x
   13439               sparclet:       tsc701
   13440               v9:             ultrasparc, ultrasparc3, niagara, niagara2
   13441 
   13442      By default (unless configured otherwise), GCC generates code for
   13443      the V7 variant of the SPARC architecture.  With `-mcpu=cypress',
   13444      the compiler additionally optimizes it for the Cypress CY7C602
   13445      chip, as used in the SPARCStation/SPARCServer 3xx series.  This is
   13446      also appropriate for the older SPARCStation 1, 2, IPX etc.
   13447 
   13448      With `-mcpu=v8', GCC generates code for the V8 variant of the SPARC
   13449      architecture.  The only difference from V7 code is that the
   13450      compiler emits the integer multiply and integer divide
   13451      instructions which exist in SPARC-V8 but not in SPARC-V7.  With
   13452      `-mcpu=supersparc', the compiler additionally optimizes it for the
   13453      SuperSPARC chip, as used in the SPARCStation 10, 1000 and 2000
   13454      series.
   13455 
   13456      With `-mcpu=sparclite', GCC generates code for the SPARClite
   13457      variant of the SPARC architecture.  This adds the integer
   13458      multiply, integer divide step and scan (`ffs') instructions which
   13459      exist in SPARClite but not in SPARC-V7.  With `-mcpu=f930', the
   13460      compiler additionally optimizes it for the Fujitsu MB86930 chip,
   13461      which is the original SPARClite, with no FPU.  With `-mcpu=f934',
   13462      the compiler additionally optimizes it for the Fujitsu MB86934
   13463      chip, which is the more recent SPARClite with FPU.
   13464 
   13465      With `-mcpu=sparclet', GCC generates code for the SPARClet variant
   13466      of the SPARC architecture.  This adds the integer multiply,
   13467      multiply/accumulate, integer divide step and scan (`ffs')
   13468      instructions which exist in SPARClet but not in SPARC-V7.  With
   13469      `-mcpu=tsc701', the compiler additionally optimizes it for the
   13470      TEMIC SPARClet chip.
   13471 
   13472      With `-mcpu=v9', GCC generates code for the V9 variant of the SPARC
   13473      architecture.  This adds 64-bit integer and floating-point move
   13474      instructions, 3 additional floating-point condition code registers
   13475      and conditional move instructions.  With `-mcpu=ultrasparc', the
   13476      compiler additionally optimizes it for the Sun UltraSPARC I/II/IIi
   13477      chips.  With `-mcpu=ultrasparc3', the compiler additionally
   13478      optimizes it for the Sun UltraSPARC III/III+/IIIi/IIIi+/IV/IV+
   13479      chips.  With `-mcpu=niagara', the compiler additionally optimizes
   13480      it for Sun UltraSPARC T1 chips.  With `-mcpu=niagara2', the
   13481      compiler additionally optimizes it for Sun UltraSPARC T2 chips.
   13482 
   13483 `-mtune=CPU_TYPE'
   13484      Set the instruction scheduling parameters for machine type
   13485      CPU_TYPE, but do not set the instruction set or register set that
   13486      the option `-mcpu=CPU_TYPE' would.
   13487 
   13488      The same values for `-mcpu=CPU_TYPE' can be used for
   13489      `-mtune=CPU_TYPE', but the only useful values are those that
   13490      select a particular cpu implementation.  Those are `cypress',
   13491      `supersparc', `hypersparc', `f930', `f934', `sparclite86x',
   13492      `tsc701', `ultrasparc', `ultrasparc3', `niagara', and `niagara2'.
   13493 
   13494 `-mv8plus'
   13495 `-mno-v8plus'
   13496      With `-mv8plus', GCC generates code for the SPARC-V8+ ABI.  The
   13497      difference from the V8 ABI is that the global and out registers are
   13498      considered 64-bit wide.  This is enabled by default on Solaris in
   13499      32-bit mode for all SPARC-V9 processors.
   13500 
   13501 `-mvis'
   13502 `-mno-vis'
   13503      With `-mvis', GCC generates code that takes advantage of the
   13504      UltraSPARC Visual Instruction Set extensions.  The default is
   13505      `-mno-vis'.
   13506 
   13507  These `-m' options are supported in addition to the above on SPARC-V9
   13508 processors in 64-bit environments:
   13509 
   13510 `-mlittle-endian'
   13511      Generate code for a processor running in little-endian mode.  It
   13512      is only available for a few configurations and most notably not on
   13513      Solaris and Linux.
   13514 
   13515 `-m32'
   13516 `-m64'
   13517      Generate code for a 32-bit or 64-bit environment.  The 32-bit
   13518      environment sets int, long and pointer to 32 bits.  The 64-bit
   13519      environment sets int to 32 bits and long and pointer to 64 bits.
   13520 
   13521 `-mcmodel=medlow'
   13522      Generate code for the Medium/Low code model: 64-bit addresses,
   13523      programs must be linked in the low 32 bits of memory.  Programs
   13524      can be statically or dynamically linked.
   13525 
   13526 `-mcmodel=medmid'
   13527      Generate code for the Medium/Middle code model: 64-bit addresses,
   13528      programs must be linked in the low 44 bits of memory, the text and
   13529      data segments must be less than 2GB in size and the data segment
   13530      must be located within 2GB of the text segment.
   13531 
   13532 `-mcmodel=medany'
   13533      Generate code for the Medium/Anywhere code model: 64-bit
   13534      addresses, programs may be linked anywhere in memory, the text and
   13535      data segments must be less than 2GB in size and the data segment
   13536      must be located within 2GB of the text segment.
   13537 
   13538 `-mcmodel=embmedany'
   13539      Generate code for the Medium/Anywhere code model for embedded
   13540      systems: 64-bit addresses, the text and data segments must be less
   13541      than 2GB in size, both starting anywhere in memory (determined at
   13542      link time).  The global register %g4 points to the base of the
   13543      data segment.  Programs are statically linked and PIC is not
   13544      supported.
   13545 
   13546 `-mstack-bias'
   13547 `-mno-stack-bias'
   13548      With `-mstack-bias', GCC assumes that the stack pointer, and frame
   13549      pointer if present, are offset by -2047 which must be added back
   13550      when making stack frame references.  This is the default in 64-bit
   13551      mode.  Otherwise, assume no such offset is present.
   13552 
   13553  These switches are supported in addition to the above on Solaris:
   13554 
   13555 `-threads'
   13556      Add support for multithreading using the Solaris threads library.
   13557      This option sets flags for both the preprocessor and linker.  This
   13558      option does not affect the thread safety of object code produced
   13559      by the compiler or that of libraries supplied with it.
   13560 
   13561 `-pthreads'
   13562      Add support for multithreading using the POSIX threads library.
   13563      This option sets flags for both the preprocessor and linker.  This
   13564      option does not affect the thread safety of object code produced
   13565      by the compiler or that of libraries supplied with it.
   13566 
   13567 `-pthread'
   13568      This is a synonym for `-pthreads'.
   13569 
   13570 
   13571 File: gcc.info,  Node: SPU Options,  Next: System V Options,  Prev: SPARC Options,  Up: Submodel Options
   13572 
   13573 3.17.32 SPU Options
   13574 -------------------
   13575 
   13576 These `-m' options are supported on the SPU:
   13577 
   13578 `-mwarn-reloc'
   13579 `-merror-reloc'
   13580      The loader for SPU does not handle dynamic relocations.  By
   13581      default, GCC will give an error when it generates code that
   13582      requires a dynamic relocation.  `-mno-error-reloc' disables the
   13583      error, `-mwarn-reloc' will generate a warning instead.
   13584 
   13585 `-msafe-dma'
   13586 `-munsafe-dma'
   13587      Instructions which initiate or test completion of DMA must not be
   13588      reordered with respect to loads and stores of the memory which is
   13589      being accessed.  Users typically address this problem using the
   13590      volatile keyword, but that can lead to inefficient code in places
   13591      where the memory is known to not change.  Rather than mark the
   13592      memory as volatile we treat the DMA instructions as potentially
   13593      effecting all memory.  With `-munsafe-dma' users must use the
   13594      volatile keyword to protect memory accesses.
   13595 
   13596 `-mbranch-hints'
   13597      By default, GCC will generate a branch hint instruction to avoid
   13598      pipeline stalls for always taken or probably taken branches.  A
   13599      hint will not be generated closer than 8 instructions away from
   13600      its branch.  There is little reason to disable them, except for
   13601      debugging purposes, or to make an object a little bit smaller.
   13602 
   13603 `-msmall-mem'
   13604 `-mlarge-mem'
   13605      By default, GCC generates code assuming that addresses are never
   13606      larger than 18 bits.  With `-mlarge-mem' code is generated that
   13607      assumes a full 32 bit address.
   13608 
   13609 `-mstdmain'
   13610      By default, GCC links against startup code that assumes the
   13611      SPU-style main function interface (which has an unconventional
   13612      parameter list).  With `-mstdmain', GCC will link your program
   13613      against startup code that assumes a C99-style interface to `main',
   13614      including a local copy of `argv' strings.
   13615 
   13616 `-mfixed-range=REGISTER-RANGE'
   13617      Generate code treating the given register range as fixed registers.
   13618      A fixed register is one that the register allocator can not use.
   13619      This is useful when compiling kernel code.  A register range is
   13620      specified as two registers separated by a dash.  Multiple register
   13621      ranges can be specified separated by a comma.
   13622 
   13623 
   13624 
   13625 File: gcc.info,  Node: System V Options,  Next: V850 Options,  Prev: SPU Options,  Up: Submodel Options
   13626 
   13627 3.17.33 Options for System V
   13628 ----------------------------
   13629 
   13630 These additional options are available on System V Release 4 for
   13631 compatibility with other compilers on those systems:
   13632 
   13633 `-G'
   13634      Create a shared object.  It is recommended that `-symbolic' or
   13635      `-shared' be used instead.
   13636 
   13637 `-Qy'
   13638      Identify the versions of each tool used by the compiler, in a
   13639      `.ident' assembler directive in the output.
   13640 
   13641 `-Qn'
   13642      Refrain from adding `.ident' directives to the output file (this is
   13643      the default).
   13644 
   13645 `-YP,DIRS'
   13646      Search the directories DIRS, and no others, for libraries
   13647      specified with `-l'.
   13648 
   13649 `-Ym,DIR'
   13650      Look in the directory DIR to find the M4 preprocessor.  The
   13651      assembler uses this option.
   13652 
   13653 
   13654 File: gcc.info,  Node: V850 Options,  Next: VAX Options,  Prev: System V Options,  Up: Submodel Options
   13655 
   13656 3.17.34 V850 Options
   13657 --------------------
   13658 
   13659 These `-m' options are defined for V850 implementations:
   13660 
   13661 `-mlong-calls'
   13662 `-mno-long-calls'
   13663      Treat all calls as being far away (near).  If calls are assumed to
   13664      be far away, the compiler will always load the functions address
   13665      up into a register, and call indirect through the pointer.
   13666 
   13667 `-mno-ep'
   13668 `-mep'
   13669      Do not optimize (do optimize) basic blocks that use the same index
   13670      pointer 4 or more times to copy pointer into the `ep' register, and
   13671      use the shorter `sld' and `sst' instructions.  The `-mep' option
   13672      is on by default if you optimize.
   13673 
   13674 `-mno-prolog-function'
   13675 `-mprolog-function'
   13676      Do not use (do use) external functions to save and restore
   13677      registers at the prologue and epilogue of a function.  The
   13678      external functions are slower, but use less code space if more
   13679      than one function saves the same number of registers.  The
   13680      `-mprolog-function' option is on by default if you optimize.
   13681 
   13682 `-mspace'
   13683      Try to make the code as small as possible.  At present, this just
   13684      turns on the `-mep' and `-mprolog-function' options.
   13685 
   13686 `-mtda=N'
   13687      Put static or global variables whose size is N bytes or less into
   13688      the tiny data area that register `ep' points to.  The tiny data
   13689      area can hold up to 256 bytes in total (128 bytes for byte
   13690      references).
   13691 
   13692 `-msda=N'
   13693      Put static or global variables whose size is N bytes or less into
   13694      the small data area that register `gp' points to.  The small data
   13695      area can hold up to 64 kilobytes.
   13696 
   13697 `-mzda=N'
   13698      Put static or global variables whose size is N bytes or less into
   13699      the first 32 kilobytes of memory.
   13700 
   13701 `-mv850'
   13702      Specify that the target processor is the V850.
   13703 
   13704 `-mbig-switch'
   13705      Generate code suitable for big switch tables.  Use this option
   13706      only if the assembler/linker complain about out of range branches
   13707      within a switch table.
   13708 
   13709 `-mapp-regs'
   13710      This option will cause r2 and r5 to be used in the code generated
   13711      by the compiler.  This setting is the default.
   13712 
   13713 `-mno-app-regs'
   13714      This option will cause r2 and r5 to be treated as fixed registers.
   13715 
   13716 `-mv850e1'
   13717      Specify that the target processor is the V850E1.  The preprocessor
   13718      constants `__v850e1__' and `__v850e__' will be defined if this
   13719      option is used.
   13720 
   13721 `-mv850e'
   13722      Specify that the target processor is the V850E.  The preprocessor
   13723      constant `__v850e__' will be defined if this option is used.
   13724 
   13725      If neither `-mv850' nor `-mv850e' nor `-mv850e1' are defined then
   13726      a default target processor will be chosen and the relevant
   13727      `__v850*__' preprocessor constant will be defined.
   13728 
   13729      The preprocessor constants `__v850' and `__v851__' are always
   13730      defined, regardless of which processor variant is the target.
   13731 
   13732 `-mdisable-callt'
   13733      This option will suppress generation of the CALLT instruction for
   13734      the v850e and v850e1 flavors of the v850 architecture.  The
   13735      default is `-mno-disable-callt' which allows the CALLT instruction
   13736      to be used.
   13737 
   13738 
   13739 
   13740 File: gcc.info,  Node: VAX Options,  Next: VxWorks Options,  Prev: V850 Options,  Up: Submodel Options
   13741 
   13742 3.17.35 VAX Options
   13743 -------------------
   13744 
   13745 These `-m' options are defined for the VAX:
   13746 
   13747 `-munix'
   13748      Do not output certain jump instructions (`aobleq' and so on) that
   13749      the Unix assembler for the VAX cannot handle across long ranges.
   13750 
   13751 `-mgnu'
   13752      Do output those jump instructions, on the assumption that you will
   13753      assemble with the GNU assembler.
   13754 
   13755 `-mg'
   13756      Output code for g-format floating point numbers instead of
   13757      d-format.
   13758 
   13759 
   13760 File: gcc.info,  Node: VxWorks Options,  Next: x86-64 Options,  Prev: VAX Options,  Up: Submodel Options
   13761 
   13762 3.17.36 VxWorks Options
   13763 -----------------------
   13764 
   13765 The options in this section are defined for all VxWorks targets.
   13766 Options specific to the target hardware are listed with the other
   13767 options for that target.
   13768 
   13769 `-mrtp'
   13770      GCC can generate code for both VxWorks kernels and real time
   13771      processes (RTPs).  This option switches from the former to the
   13772      latter.  It also defines the preprocessor macro `__RTP__'.
   13773 
   13774 `-non-static'
   13775      Link an RTP executable against shared libraries rather than static
   13776      libraries.  The options `-static' and `-shared' can also be used
   13777      for RTPs (*note Link Options::); `-static' is the default.
   13778 
   13779 `-Bstatic'
   13780 `-Bdynamic'
   13781      These options are passed down to the linker.  They are defined for
   13782      compatibility with Diab.
   13783 
   13784 `-Xbind-lazy'
   13785      Enable lazy binding of function calls.  This option is equivalent
   13786      to `-Wl,-z,now' and is defined for compatibility with Diab.
   13787 
   13788 `-Xbind-now'
   13789      Disable lazy binding of function calls.  This option is the
   13790      default and is defined for compatibility with Diab.
   13791 
   13792 
   13793 File: gcc.info,  Node: x86-64 Options,  Next: Xstormy16 Options,  Prev: VxWorks Options,  Up: Submodel Options
   13794 
   13795 3.17.37 x86-64 Options
   13796 ----------------------
   13797 
   13798 These are listed under *Note i386 and x86-64 Options::.
   13799 
   13800 
   13801 File: gcc.info,  Node: Xstormy16 Options,  Next: Xtensa Options,  Prev: x86-64 Options,  Up: Submodel Options
   13802 
   13803 3.17.38 Xstormy16 Options
   13804 -------------------------
   13805 
   13806 These options are defined for Xstormy16:
   13807 
   13808 `-msim'
   13809      Choose startup files and linker script suitable for the simulator.
   13810 
   13811 
   13812 File: gcc.info,  Node: Xtensa Options,  Next: zSeries Options,  Prev: Xstormy16 Options,  Up: Submodel Options
   13813 
   13814 3.17.39 Xtensa Options
   13815 ----------------------
   13816 
   13817 These options are supported for Xtensa targets:
   13818 
   13819 `-mconst16'
   13820 `-mno-const16'
   13821      Enable or disable use of `CONST16' instructions for loading
   13822      constant values.  The `CONST16' instruction is currently not a
   13823      standard option from Tensilica.  When enabled, `CONST16'
   13824      instructions are always used in place of the standard `L32R'
   13825      instructions.  The use of `CONST16' is enabled by default only if
   13826      the `L32R' instruction is not available.
   13827 
   13828 `-mfused-madd'
   13829 `-mno-fused-madd'
   13830      Enable or disable use of fused multiply/add and multiply/subtract
   13831      instructions in the floating-point option.  This has no effect if
   13832      the floating-point option is not also enabled.  Disabling fused
   13833      multiply/add and multiply/subtract instructions forces the
   13834      compiler to use separate instructions for the multiply and
   13835      add/subtract operations.  This may be desirable in some cases
   13836      where strict IEEE 754-compliant results are required: the fused
   13837      multiply add/subtract instructions do not round the intermediate
   13838      result, thereby producing results with _more_ bits of precision
   13839      than specified by the IEEE standard.  Disabling fused multiply
   13840      add/subtract instructions also ensures that the program output is
   13841      not sensitive to the compiler's ability to combine multiply and
   13842      add/subtract operations.
   13843 
   13844 `-mtext-section-literals'
   13845 `-mno-text-section-literals'
   13846      Control the treatment of literal pools.  The default is
   13847      `-mno-text-section-literals', which places literals in a separate
   13848      section in the output file.  This allows the literal pool to be
   13849      placed in a data RAM/ROM, and it also allows the linker to combine
   13850      literal pools from separate object files to remove redundant
   13851      literals and improve code size.  With `-mtext-section-literals',
   13852      the literals are interspersed in the text section in order to keep
   13853      them as close as possible to their references.  This may be
   13854      necessary for large assembly files.
   13855 
   13856 `-mtarget-align'
   13857 `-mno-target-align'
   13858      When this option is enabled, GCC instructs the assembler to
   13859      automatically align instructions to reduce branch penalties at the
   13860      expense of some code density.  The assembler attempts to widen
   13861      density instructions to align branch targets and the instructions
   13862      following call instructions.  If there are not enough preceding
   13863      safe density instructions to align a target, no widening will be
   13864      performed.  The default is `-mtarget-align'.  These options do not
   13865      affect the treatment of auto-aligned instructions like `LOOP',
   13866      which the assembler will always align, either by widening density
   13867      instructions or by inserting no-op instructions.
   13868 
   13869 `-mlongcalls'
   13870 `-mno-longcalls'
   13871      When this option is enabled, GCC instructs the assembler to
   13872      translate direct calls to indirect calls unless it can determine
   13873      that the target of a direct call is in the range allowed by the
   13874      call instruction.  This translation typically occurs for calls to
   13875      functions in other source files.  Specifically, the assembler
   13876      translates a direct `CALL' instruction into an `L32R' followed by
   13877      a `CALLX' instruction.  The default is `-mno-longcalls'.  This
   13878      option should be used in programs where the call target can
   13879      potentially be out of range.  This option is implemented in the
   13880      assembler, not the compiler, so the assembly code generated by GCC
   13881      will still show direct call instructions--look at the disassembled
   13882      object code to see the actual instructions.  Note that the
   13883      assembler will use an indirect call for every cross-file call, not
   13884      just those that really will be out of range.
   13885 
   13886 
   13887 File: gcc.info,  Node: zSeries Options,  Prev: Xtensa Options,  Up: Submodel Options
   13888 
   13889 3.17.40 zSeries Options
   13890 -----------------------
   13891 
   13892 These are listed under *Note S/390 and zSeries Options::.
   13893 
   13894 
   13895 File: gcc.info,  Node: Code Gen Options,  Next: Environment Variables,  Prev: Submodel Options,  Up: Invoking GCC
   13896 
   13897 3.18 Options for Code Generation Conventions
   13898 ============================================
   13899 
   13900 These machine-independent options control the interface conventions
   13901 used in code generation.
   13902 
   13903  Most of them have both positive and negative forms; the negative form
   13904 of `-ffoo' would be `-fno-foo'.  In the table below, only one of the
   13905 forms is listed--the one which is not the default.  You can figure out
   13906 the other form by either removing `no-' or adding it.
   13907 
   13908 `-fbounds-check'
   13909      For front-ends that support it, generate additional code to check
   13910      that indices used to access arrays are within the declared range.
   13911      This is currently only supported by the Java and Fortran
   13912      front-ends, where this option defaults to true and false
   13913      respectively.
   13914 
   13915 `-ftrapv'
   13916      This option generates traps for signed overflow on addition,
   13917      subtraction, multiplication operations.
   13918 
   13919 `-fwrapv'
   13920      This option instructs the compiler to assume that signed arithmetic
   13921      overflow of addition, subtraction and multiplication wraps around
   13922      using twos-complement representation.  This flag enables some
   13923      optimizations and disables others.  This option is enabled by
   13924      default for the Java front-end, as required by the Java language
   13925      specification.
   13926 
   13927 `-fexceptions'
   13928      Enable exception handling.  Generates extra code needed to
   13929      propagate exceptions.  For some targets, this implies GCC will
   13930      generate frame unwind information for all functions, which can
   13931      produce significant data size overhead, although it does not
   13932      affect execution.  If you do not specify this option, GCC will
   13933      enable it by default for languages like C++ which normally require
   13934      exception handling, and disable it for languages like C that do
   13935      not normally require it.  However, you may need to enable this
   13936      option when compiling C code that needs to interoperate properly
   13937      with exception handlers written in C++.  You may also wish to
   13938      disable this option if you are compiling older C++ programs that
   13939      don't use exception handling.
   13940 
   13941 `-fnon-call-exceptions'
   13942      Generate code that allows trapping instructions to throw
   13943      exceptions.  Note that this requires platform-specific runtime
   13944      support that does not exist everywhere.  Moreover, it only allows
   13945      _trapping_ instructions to throw exceptions, i.e. memory
   13946      references or floating point instructions.  It does not allow
   13947      exceptions to be thrown from arbitrary signal handlers such as
   13948      `SIGALRM'.
   13949 
   13950 `-funwind-tables'
   13951      Similar to `-fexceptions', except that it will just generate any
   13952      needed static data, but will not affect the generated code in any
   13953      other way.  You will normally not enable this option; instead, a
   13954      language processor that needs this handling would enable it on
   13955      your behalf.
   13956 
   13957 `-fasynchronous-unwind-tables'
   13958      Generate unwind table in dwarf2 format, if supported by target
   13959      machine.  The table is exact at each instruction boundary, so it
   13960      can be used for stack unwinding from asynchronous events (such as
   13961      debugger or garbage collector).
   13962 
   13963 `-fpcc-struct-return'
   13964      Return "short" `struct' and `union' values in memory like longer
   13965      ones, rather than in registers.  This convention is less
   13966      efficient, but it has the advantage of allowing intercallability
   13967      between GCC-compiled files and files compiled with other
   13968      compilers, particularly the Portable C Compiler (pcc).
   13969 
   13970      The precise convention for returning structures in memory depends
   13971      on the target configuration macros.
   13972 
   13973      Short structures and unions are those whose size and alignment
   13974      match that of some integer type.
   13975 
   13976      *Warning:* code compiled with the `-fpcc-struct-return' switch is
   13977      not binary compatible with code compiled with the
   13978      `-freg-struct-return' switch.  Use it to conform to a non-default
   13979      application binary interface.
   13980 
   13981 `-freg-struct-return'
   13982      Return `struct' and `union' values in registers when possible.
   13983      This is more efficient for small structures than
   13984      `-fpcc-struct-return'.
   13985 
   13986      If you specify neither `-fpcc-struct-return' nor
   13987      `-freg-struct-return', GCC defaults to whichever convention is
   13988      standard for the target.  If there is no standard convention, GCC
   13989      defaults to `-fpcc-struct-return', except on targets where GCC is
   13990      the principal compiler.  In those cases, we can choose the
   13991      standard, and we chose the more efficient register return
   13992      alternative.
   13993 
   13994      *Warning:* code compiled with the `-freg-struct-return' switch is
   13995      not binary compatible with code compiled with the
   13996      `-fpcc-struct-return' switch.  Use it to conform to a non-default
   13997      application binary interface.
   13998 
   13999 `-fshort-enums'
   14000      Allocate to an `enum' type only as many bytes as it needs for the
   14001      declared range of possible values.  Specifically, the `enum' type
   14002      will be equivalent to the smallest integer type which has enough
   14003      room.
   14004 
   14005      *Warning:* the `-fshort-enums' switch causes GCC to generate code
   14006      that is not binary compatible with code generated without that
   14007      switch.  Use it to conform to a non-default application binary
   14008      interface.
   14009 
   14010 `-fshort-double'
   14011      Use the same size for `double' as for `float'.
   14012 
   14013      *Warning:* the `-fshort-double' switch causes GCC to generate code
   14014      that is not binary compatible with code generated without that
   14015      switch.  Use it to conform to a non-default application binary
   14016      interface.
   14017 
   14018 `-fshort-wchar'
   14019      Override the underlying type for `wchar_t' to be `short unsigned
   14020      int' instead of the default for the target.  This option is useful
   14021      for building programs to run under WINE.
   14022 
   14023      *Warning:* the `-fshort-wchar' switch causes GCC to generate code
   14024      that is not binary compatible with code generated without that
   14025      switch.  Use it to conform to a non-default application binary
   14026      interface.
   14027 
   14028 `-fno-common'
   14029      In C, allocate even uninitialized global variables in the data
   14030      section of the object file, rather than generating them as common
   14031      blocks.  This has the effect that if the same variable is declared
   14032      (without `extern') in two different compilations, you will get an
   14033      error when you link them.  The only reason this might be useful is
   14034      if you wish to verify that the program will work on other systems
   14035      which always work this way.
   14036 
   14037 `-fno-ident'
   14038      Ignore the `#ident' directive.
   14039 
   14040 `-finhibit-size-directive'
   14041      Don't output a `.size' assembler directive, or anything else that
   14042      would cause trouble if the function is split in the middle, and the
   14043      two halves are placed at locations far apart in memory.  This
   14044      option is used when compiling `crtstuff.c'; you should not need to
   14045      use it for anything else.
   14046 
   14047 `-fverbose-asm'
   14048      Put extra commentary information in the generated assembly code to
   14049      make it more readable.  This option is generally only of use to
   14050      those who actually need to read the generated assembly code
   14051      (perhaps while debugging the compiler itself).
   14052 
   14053      `-fno-verbose-asm', the default, causes the extra information to
   14054      be omitted and is useful when comparing two assembler files.
   14055 
   14056 `-frecord-gcc-switches'
   14057      This switch causes the command line that was used to invoke the
   14058      compiler to be recorded into the object file that is being created.
   14059      This switch is only implemented on some targets and the exact
   14060      format of the recording is target and binary file format
   14061      dependent, but it usually takes the form of a section containing
   14062      ASCII text.  This switch is related to the `-fverbose-asm' switch,
   14063      but that switch only records information in the assembler output
   14064      file as comments, so it never reaches the object file.
   14065 
   14066 `-fpic'
   14067      Generate position-independent code (PIC) suitable for use in a
   14068      shared library, if supported for the target machine.  Such code
   14069      accesses all constant addresses through a global offset table
   14070      (GOT).  The dynamic loader resolves the GOT entries when the
   14071      program starts (the dynamic loader is not part of GCC; it is part
   14072      of the operating system).  If the GOT size for the linked
   14073      executable exceeds a machine-specific maximum size, you get an
   14074      error message from the linker indicating that `-fpic' does not
   14075      work; in that case, recompile with `-fPIC' instead.  (These
   14076      maximums are 8k on the SPARC and 32k on the m68k and RS/6000.  The
   14077      386 has no such limit.)
   14078 
   14079      Position-independent code requires special support, and therefore
   14080      works only on certain machines.  For the 386, GCC supports PIC for
   14081      System V but not for the Sun 386i.  Code generated for the IBM
   14082      RS/6000 is always position-independent.
   14083 
   14084      When this flag is set, the macros `__pic__' and `__PIC__' are
   14085      defined to 1.
   14086 
   14087 `-fPIC'
   14088      If supported for the target machine, emit position-independent
   14089      code, suitable for dynamic linking and avoiding any limit on the
   14090      size of the global offset table.  This option makes a difference
   14091      on the m68k, PowerPC and SPARC.
   14092 
   14093      Position-independent code requires special support, and therefore
   14094      works only on certain machines.
   14095 
   14096      When this flag is set, the macros `__pic__' and `__PIC__' are
   14097      defined to 2.
   14098 
   14099 `-fpie'
   14100 `-fPIE'
   14101      These options are similar to `-fpic' and `-fPIC', but generated
   14102      position independent code can be only linked into executables.
   14103      Usually these options are used when `-pie' GCC option will be used
   14104      during linking.
   14105 
   14106      `-fpie' and `-fPIE' both define the macros `__pie__' and
   14107      `__PIE__'.  The macros have the value 1 for `-fpie' and 2 for
   14108      `-fPIE'.
   14109 
   14110 `-fno-jump-tables'
   14111      Do not use jump tables for switch statements even where it would be
   14112      more efficient than other code generation strategies.  This option
   14113      is of use in conjunction with `-fpic' or `-fPIC' for building code
   14114      which forms part of a dynamic linker and cannot reference the
   14115      address of a jump table.  On some targets, jump tables do not
   14116      require a GOT and this option is not needed.
   14117 
   14118 `-ffixed-REG'
   14119      Treat the register named REG as a fixed register; generated code
   14120      should never refer to it (except perhaps as a stack pointer, frame
   14121      pointer or in some other fixed role).
   14122 
   14123      REG must be the name of a register.  The register names accepted
   14124      are machine-specific and are defined in the `REGISTER_NAMES' macro
   14125      in the machine description macro file.
   14126 
   14127      This flag does not have a negative form, because it specifies a
   14128      three-way choice.
   14129 
   14130 `-fcall-used-REG'
   14131      Treat the register named REG as an allocable register that is
   14132      clobbered by function calls.  It may be allocated for temporaries
   14133      or variables that do not live across a call.  Functions compiled
   14134      this way will not save and restore the register REG.
   14135 
   14136      It is an error to used this flag with the frame pointer or stack
   14137      pointer.  Use of this flag for other registers that have fixed
   14138      pervasive roles in the machine's execution model will produce
   14139      disastrous results.
   14140 
   14141      This flag does not have a negative form, because it specifies a
   14142      three-way choice.
   14143 
   14144 `-fcall-saved-REG'
   14145      Treat the register named REG as an allocable register saved by
   14146      functions.  It may be allocated even for temporaries or variables
   14147      that live across a call.  Functions compiled this way will save
   14148      and restore the register REG if they use it.
   14149 
   14150      It is an error to used this flag with the frame pointer or stack
   14151      pointer.  Use of this flag for other registers that have fixed
   14152      pervasive roles in the machine's execution model will produce
   14153      disastrous results.
   14154 
   14155      A different sort of disaster will result from the use of this flag
   14156      for a register in which function values may be returned.
   14157 
   14158      This flag does not have a negative form, because it specifies a
   14159      three-way choice.
   14160 
   14161 `-fpack-struct[=N]'
   14162      Without a value specified, pack all structure members together
   14163      without holes.  When a value is specified (which must be a small
   14164      power of two), pack structure members according to this value,
   14165      representing the maximum alignment (that is, objects with default
   14166      alignment requirements larger than this will be output potentially
   14167      unaligned at the next fitting location.
   14168 
   14169      *Warning:* the `-fpack-struct' switch causes GCC to generate code
   14170      that is not binary compatible with code generated without that
   14171      switch.  Additionally, it makes the code suboptimal.  Use it to
   14172      conform to a non-default application binary interface.
   14173 
   14174 `-finstrument-functions'
   14175      Generate instrumentation calls for entry and exit to functions.
   14176      Just after function entry and just before function exit, the
   14177      following profiling functions will be called with the address of
   14178      the current function and its call site.  (On some platforms,
   14179      `__builtin_return_address' does not work beyond the current
   14180      function, so the call site information may not be available to the
   14181      profiling functions otherwise.)
   14182 
   14183           void __cyg_profile_func_enter (void *this_fn,
   14184                                          void *call_site);
   14185           void __cyg_profile_func_exit  (void *this_fn,
   14186                                          void *call_site);
   14187 
   14188      The first argument is the address of the start of the current
   14189      function, which may be looked up exactly in the symbol table.
   14190 
   14191      This instrumentation is also done for functions expanded inline in
   14192      other functions.  The profiling calls will indicate where,
   14193      conceptually, the inline function is entered and exited.  This
   14194      means that addressable versions of such functions must be
   14195      available.  If all your uses of a function are expanded inline,
   14196      this may mean an additional expansion of code size.  If you use
   14197      `extern inline' in your C code, an addressable version of such
   14198      functions must be provided.  (This is normally the case anyways,
   14199      but if you get lucky and the optimizer always expands the
   14200      functions inline, you might have gotten away without providing
   14201      static copies.)
   14202 
   14203      A function may be given the attribute `no_instrument_function', in
   14204      which case this instrumentation will not be done.  This can be
   14205      used, for example, for the profiling functions listed above,
   14206      high-priority interrupt routines, and any functions from which the
   14207      profiling functions cannot safely be called (perhaps signal
   14208      handlers, if the profiling routines generate output or allocate
   14209      memory).
   14210 
   14211 `-finstrument-functions-exclude-file-list=FILE,FILE,...'
   14212      Set the list of functions that are excluded from instrumentation
   14213      (see the description of `-finstrument-functions').  If the file
   14214      that contains a function definition matches with one of FILE, then
   14215      that function is not instrumented.  The match is done on
   14216      substrings: if the FILE parameter is a substring of the file name,
   14217      it is considered to be a match.
   14218 
   14219      For example,
   14220      `-finstrument-functions-exclude-file-list=/bits/stl,include/sys'
   14221      will exclude any inline function defined in files whose pathnames
   14222      contain `/bits/stl' or `include/sys'.
   14223 
   14224      If, for some reason, you want to include letter `','' in one of
   14225      SYM, write `'\,''. For example,
   14226      `-finstrument-functions-exclude-file-list='\,\,tmp'' (note the
   14227      single quote surrounding the option).
   14228 
   14229 `-finstrument-functions-exclude-function-list=SYM,SYM,...'
   14230      This is similar to `-finstrument-functions-exclude-file-list', but
   14231      this option sets the list of function names to be excluded from
   14232      instrumentation.  The function name to be matched is its
   14233      user-visible name, such as `vector<int> blah(const vector<int>
   14234      &)', not the internal mangled name (e.g.,
   14235      `_Z4blahRSt6vectorIiSaIiEE').  The match is done on substrings: if
   14236      the SYM parameter is a substring of the function name, it is
   14237      considered to be a match.
   14238 
   14239 `-fstack-check'
   14240      Generate code to verify that you do not go beyond the boundary of
   14241      the stack.  You should specify this flag if you are running in an
   14242      environment with multiple threads, but only rarely need to specify
   14243      it in a single-threaded environment since stack overflow is
   14244      automatically detected on nearly all systems if there is only one
   14245      stack.
   14246 
   14247      Note that this switch does not actually cause checking to be done;
   14248      the operating system must do that.  The switch causes generation
   14249      of code to ensure that the operating system sees the stack being
   14250      extended.
   14251 
   14252 `-fstack-limit-register=REG'
   14253 `-fstack-limit-symbol=SYM'
   14254 `-fno-stack-limit'
   14255      Generate code to ensure that the stack does not grow beyond a
   14256      certain value, either the value of a register or the address of a
   14257      symbol.  If the stack would grow beyond the value, a signal is
   14258      raised.  For most targets, the signal is raised before the stack
   14259      overruns the boundary, so it is possible to catch the signal
   14260      without taking special precautions.
   14261 
   14262      For instance, if the stack starts at absolute address `0x80000000'
   14263      and grows downwards, you can use the flags
   14264      `-fstack-limit-symbol=__stack_limit' and
   14265      `-Wl,--defsym,__stack_limit=0x7ffe0000' to enforce a stack limit
   14266      of 128KB.  Note that this may only work with the GNU linker.
   14267 
   14268 `-fargument-alias'
   14269 `-fargument-noalias'
   14270 `-fargument-noalias-global'
   14271 `-fargument-noalias-anything'
   14272      Specify the possible relationships among parameters and between
   14273      parameters and global data.
   14274 
   14275      `-fargument-alias' specifies that arguments (parameters) may alias
   14276      each other and may alias global storage.
   14277      `-fargument-noalias' specifies that arguments do not alias each
   14278      other, but may alias global storage.
   14279      `-fargument-noalias-global' specifies that arguments do not alias
   14280      each other and do not alias global storage.
   14281      `-fargument-noalias-anything' specifies that arguments do not
   14282      alias any other storage.
   14283 
   14284      Each language will automatically use whatever option is required by
   14285      the language standard.  You should not need to use these options
   14286      yourself.
   14287 
   14288 `-fleading-underscore'
   14289      This option and its counterpart, `-fno-leading-underscore',
   14290      forcibly change the way C symbols are represented in the object
   14291      file.  One use is to help link with legacy assembly code.
   14292 
   14293      *Warning:* the `-fleading-underscore' switch causes GCC to
   14294      generate code that is not binary compatible with code generated
   14295      without that switch.  Use it to conform to a non-default
   14296      application binary interface.  Not all targets provide complete
   14297      support for this switch.
   14298 
   14299 `-ftls-model=MODEL'
   14300      Alter the thread-local storage model to be used (*note
   14301      Thread-Local::).  The MODEL argument should be one of
   14302      `global-dynamic', `local-dynamic', `initial-exec' or `local-exec'.
   14303 
   14304      The default without `-fpic' is `initial-exec'; with `-fpic' the
   14305      default is `global-dynamic'.
   14306 
   14307 `-fvisibility=DEFAULT|INTERNAL|HIDDEN|PROTECTED'
   14308      Set the default ELF image symbol visibility to the specified
   14309      option--all symbols will be marked with this unless overridden
   14310      within the code.  Using this feature can very substantially
   14311      improve linking and load times of shared object libraries, produce
   14312      more optimized code, provide near-perfect API export and prevent
   14313      symbol clashes.  It is *strongly* recommended that you use this in
   14314      any shared objects you distribute.
   14315 
   14316      Despite the nomenclature, `default' always means public ie;
   14317      available to be linked against from outside the shared object.
   14318      `protected' and `internal' are pretty useless in real-world usage
   14319      so the only other commonly used option will be `hidden'.  The
   14320      default if `-fvisibility' isn't specified is `default', i.e., make
   14321      every symbol public--this causes the same behavior as previous
   14322      versions of GCC.
   14323 
   14324      A good explanation of the benefits offered by ensuring ELF symbols
   14325      have the correct visibility is given by "How To Write Shared
   14326      Libraries" by Ulrich Drepper (which can be found at
   14327      `http://people.redhat.com/~drepper/')--however a superior solution
   14328      made possible by this option to marking things hidden when the
   14329      default is public is to make the default hidden and mark things
   14330      public.  This is the norm with DLL's on Windows and with
   14331      `-fvisibility=hidden' and `__attribute__
   14332      ((visibility("default")))' instead of `__declspec(dllexport)' you
   14333      get almost identical semantics with identical syntax.  This is a
   14334      great boon to those working with cross-platform projects.
   14335 
   14336      For those adding visibility support to existing code, you may find
   14337      `#pragma GCC visibility' of use.  This works by you enclosing the
   14338      declarations you wish to set visibility for with (for example)
   14339      `#pragma GCC visibility push(hidden)' and `#pragma GCC visibility
   14340      pop'.  Bear in mind that symbol visibility should be viewed *as
   14341      part of the API interface contract* and thus all new code should
   14342      always specify visibility when it is not the default ie;
   14343      declarations only for use within the local DSO should *always* be
   14344      marked explicitly as hidden as so to avoid PLT indirection
   14345      overheads--making this abundantly clear also aids readability and
   14346      self-documentation of the code.  Note that due to ISO C++
   14347      specification requirements, operator new and operator delete must
   14348      always be of default visibility.
   14349 
   14350      Be aware that headers from outside your project, in particular
   14351      system headers and headers from any other library you use, may not
   14352      be expecting to be compiled with visibility other than the
   14353      default.  You may need to explicitly say `#pragma GCC visibility
   14354      push(default)' before including any such headers.
   14355 
   14356      `extern' declarations are not affected by `-fvisibility', so a lot
   14357      of code can be recompiled with `-fvisibility=hidden' with no
   14358      modifications.  However, this means that calls to `extern'
   14359      functions with no explicit visibility will use the PLT, so it is
   14360      more effective to use `__attribute ((visibility))' and/or `#pragma
   14361      GCC visibility' to tell the compiler which `extern' declarations
   14362      should be treated as hidden.
   14363 
   14364      Note that `-fvisibility' does affect C++ vague linkage entities.
   14365      This means that, for instance, an exception class that will be
   14366      thrown between DSOs must be explicitly marked with default
   14367      visibility so that the `type_info' nodes will be unified between
   14368      the DSOs.
   14369 
   14370      An overview of these techniques, their benefits and how to use them
   14371      is at `http://gcc.gnu.org/wiki/Visibility'.
   14372 
   14373 
   14374 
   14375 File: gcc.info,  Node: Environment Variables,  Next: Precompiled Headers,  Prev: Code Gen Options,  Up: Invoking GCC
   14376 
   14377 3.19 Environment Variables Affecting GCC
   14378 ========================================
   14379 
   14380 This section describes several environment variables that affect how GCC
   14381 operates.  Some of them work by specifying directories or prefixes to
   14382 use when searching for various kinds of files.  Some are used to
   14383 specify other aspects of the compilation environment.
   14384 
   14385  Note that you can also specify places to search using options such as
   14386 `-B', `-I' and `-L' (*note Directory Options::).  These take precedence
   14387 over places specified using environment variables, which in turn take
   14388 precedence over those specified by the configuration of GCC.  *Note
   14389 Controlling the Compilation Driver `gcc': (gccint)Driver.
   14390 
   14391 `LANG'
   14392 `LC_CTYPE'
   14393 `LC_MESSAGES'
   14394 `LC_ALL'
   14395      These environment variables control the way that GCC uses
   14396      localization information that allow GCC to work with different
   14397      national conventions.  GCC inspects the locale categories
   14398      `LC_CTYPE' and `LC_MESSAGES' if it has been configured to do so.
   14399      These locale categories can be set to any value supported by your
   14400      installation.  A typical value is `en_GB.UTF-8' for English in the
   14401      United Kingdom encoded in UTF-8.
   14402 
   14403      The `LC_CTYPE' environment variable specifies character
   14404      classification.  GCC uses it to determine the character boundaries
   14405      in a string; this is needed for some multibyte encodings that
   14406      contain quote and escape characters that would otherwise be
   14407      interpreted as a string end or escape.
   14408 
   14409      The `LC_MESSAGES' environment variable specifies the language to
   14410      use in diagnostic messages.
   14411 
   14412      If the `LC_ALL' environment variable is set, it overrides the value
   14413      of `LC_CTYPE' and `LC_MESSAGES'; otherwise, `LC_CTYPE' and
   14414      `LC_MESSAGES' default to the value of the `LANG' environment
   14415      variable.  If none of these variables are set, GCC defaults to
   14416      traditional C English behavior.
   14417 
   14418 `TMPDIR'
   14419      If `TMPDIR' is set, it specifies the directory to use for temporary
   14420      files.  GCC uses temporary files to hold the output of one stage of
   14421      compilation which is to be used as input to the next stage: for
   14422      example, the output of the preprocessor, which is the input to the
   14423      compiler proper.
   14424 
   14425 `GCC_EXEC_PREFIX'
   14426      If `GCC_EXEC_PREFIX' is set, it specifies a prefix to use in the
   14427      names of the subprograms executed by the compiler.  No slash is
   14428      added when this prefix is combined with the name of a subprogram,
   14429      but you can specify a prefix that ends with a slash if you wish.
   14430 
   14431      If `GCC_EXEC_PREFIX' is not set, GCC will attempt to figure out an
   14432      appropriate prefix to use based on the pathname it was invoked
   14433      with.
   14434 
   14435      If GCC cannot find the subprogram using the specified prefix, it
   14436      tries looking in the usual places for the subprogram.
   14437 
   14438      The default value of `GCC_EXEC_PREFIX' is `PREFIX/lib/gcc/' where
   14439      PREFIX is the prefix to the installed compiler. In many cases
   14440      PREFIX is the value of `prefix' when you ran the `configure'
   14441      script.
   14442 
   14443      Other prefixes specified with `-B' take precedence over this
   14444      prefix.
   14445 
   14446      This prefix is also used for finding files such as `crt0.o' that
   14447      are used for linking.
   14448 
   14449      In addition, the prefix is used in an unusual way in finding the
   14450      directories to search for header files.  For each of the standard
   14451      directories whose name normally begins with `/usr/local/lib/gcc'
   14452      (more precisely, with the value of `GCC_INCLUDE_DIR'), GCC tries
   14453      replacing that beginning with the specified prefix to produce an
   14454      alternate directory name.  Thus, with `-Bfoo/', GCC will search
   14455      `foo/bar' where it would normally search `/usr/local/lib/bar'.
   14456      These alternate directories are searched first; the standard
   14457      directories come next. If a standard directory begins with the
   14458      configured PREFIX then the value of PREFIX is replaced by
   14459      `GCC_EXEC_PREFIX' when looking for header files.
   14460 
   14461 `COMPILER_PATH'
   14462      The value of `COMPILER_PATH' is a colon-separated list of
   14463      directories, much like `PATH'.  GCC tries the directories thus
   14464      specified when searching for subprograms, if it can't find the
   14465      subprograms using `GCC_EXEC_PREFIX'.
   14466 
   14467 `LIBRARY_PATH'
   14468      The value of `LIBRARY_PATH' is a colon-separated list of
   14469      directories, much like `PATH'.  When configured as a native
   14470      compiler, GCC tries the directories thus specified when searching
   14471      for special linker files, if it can't find them using
   14472      `GCC_EXEC_PREFIX'.  Linking using GCC also uses these directories
   14473      when searching for ordinary libraries for the `-l' option (but
   14474      directories specified with `-L' come first).
   14475 
   14476 `LANG'
   14477      This variable is used to pass locale information to the compiler.
   14478      One way in which this information is used is to determine the
   14479      character set to be used when character literals, string literals
   14480      and comments are parsed in C and C++.  When the compiler is
   14481      configured to allow multibyte characters, the following values for
   14482      `LANG' are recognized:
   14483 
   14484     `C-JIS'
   14485           Recognize JIS characters.
   14486 
   14487     `C-SJIS'
   14488           Recognize SJIS characters.
   14489 
   14490     `C-EUCJP'
   14491           Recognize EUCJP characters.
   14492 
   14493      If `LANG' is not defined, or if it has some other value, then the
   14494      compiler will use mblen and mbtowc as defined by the default
   14495      locale to recognize and translate multibyte characters.
   14496 
   14497 Some additional environments variables affect the behavior of the
   14498 preprocessor.
   14499 
   14500 `CPATH'
   14501 `C_INCLUDE_PATH'
   14502 `CPLUS_INCLUDE_PATH'
   14503 `OBJC_INCLUDE_PATH'
   14504      Each variable's value is a list of directories separated by a
   14505      special character, much like `PATH', in which to look for header
   14506      files.  The special character, `PATH_SEPARATOR', is
   14507      target-dependent and determined at GCC build time.  For Microsoft
   14508      Windows-based targets it is a semicolon, and for almost all other
   14509      targets it is a colon.
   14510 
   14511      `CPATH' specifies a list of directories to be searched as if
   14512      specified with `-I', but after any paths given with `-I' options
   14513      on the command line.  This environment variable is used regardless
   14514      of which language is being preprocessed.
   14515 
   14516      The remaining environment variables apply only when preprocessing
   14517      the particular language indicated.  Each specifies a list of
   14518      directories to be searched as if specified with `-isystem', but
   14519      after any paths given with `-isystem' options on the command line.
   14520 
   14521      In all these variables, an empty element instructs the compiler to
   14522      search its current working directory.  Empty elements can appear
   14523      at the beginning or end of a path.  For instance, if the value of
   14524      `CPATH' is `:/special/include', that has the same effect as
   14525      `-I. -I/special/include'.
   14526 
   14527 `DEPENDENCIES_OUTPUT'
   14528      If this variable is set, its value specifies how to output
   14529      dependencies for Make based on the non-system header files
   14530      processed by the compiler.  System header files are ignored in the
   14531      dependency output.
   14532 
   14533      The value of `DEPENDENCIES_OUTPUT' can be just a file name, in
   14534      which case the Make rules are written to that file, guessing the
   14535      target name from the source file name.  Or the value can have the
   14536      form `FILE TARGET', in which case the rules are written to file
   14537      FILE using TARGET as the target name.
   14538 
   14539      In other words, this environment variable is equivalent to
   14540      combining the options `-MM' and `-MF' (*note Preprocessor
   14541      Options::), with an optional `-MT' switch too.
   14542 
   14543 `SUNPRO_DEPENDENCIES'
   14544      This variable is the same as `DEPENDENCIES_OUTPUT' (see above),
   14545      except that system header files are not ignored, so it implies
   14546      `-M' rather than `-MM'.  However, the dependence on the main input
   14547      file is omitted.  *Note Preprocessor Options::.
   14548 
   14549 
   14550 File: gcc.info,  Node: Precompiled Headers,  Next: Running Protoize,  Prev: Environment Variables,  Up: Invoking GCC
   14551 
   14552 3.20 Using Precompiled Headers
   14553 ==============================
   14554 
   14555 Often large projects have many header files that are included in every
   14556 source file.  The time the compiler takes to process these header files
   14557 over and over again can account for nearly all of the time required to
   14558 build the project.  To make builds faster, GCC allows users to
   14559 `precompile' a header file; then, if builds can use the precompiled
   14560 header file they will be much faster.
   14561 
   14562  To create a precompiled header file, simply compile it as you would any
   14563 other file, if necessary using the `-x' option to make the driver treat
   14564 it as a C or C++ header file.  You will probably want to use a tool
   14565 like `make' to keep the precompiled header up-to-date when the headers
   14566 it contains change.
   14567 
   14568  A precompiled header file will be searched for when `#include' is seen
   14569 in the compilation.  As it searches for the included file (*note Search
   14570 Path: (cpp)Search Path.) the compiler looks for a precompiled header in
   14571 each directory just before it looks for the include file in that
   14572 directory.  The name searched for is the name specified in the
   14573 `#include' with `.gch' appended.  If the precompiled header file can't
   14574 be used, it is ignored.
   14575 
   14576  For instance, if you have `#include "all.h"', and you have `all.h.gch'
   14577 in the same directory as `all.h', then the precompiled header file will
   14578 be used if possible, and the original header will be used otherwise.
   14579 
   14580  Alternatively, you might decide to put the precompiled header file in a
   14581 directory and use `-I' to ensure that directory is searched before (or
   14582 instead of) the directory containing the original header.  Then, if you
   14583 want to check that the precompiled header file is always used, you can
   14584 put a file of the same name as the original header in this directory
   14585 containing an `#error' command.
   14586 
   14587  This also works with `-include'.  So yet another way to use
   14588 precompiled headers, good for projects not designed with precompiled
   14589 header files in mind, is to simply take most of the header files used by
   14590 a project, include them from another header file, precompile that header
   14591 file, and `-include' the precompiled header.  If the header files have
   14592 guards against multiple inclusion, they will be skipped because they've
   14593 already been included (in the precompiled header).
   14594 
   14595  If you need to precompile the same header file for different
   14596 languages, targets, or compiler options, you can instead make a
   14597 _directory_ named like `all.h.gch', and put each precompiled header in
   14598 the directory, perhaps using `-o'.  It doesn't matter what you call the
   14599 files in the directory, every precompiled header in the directory will
   14600 be considered.  The first precompiled header encountered in the
   14601 directory that is valid for this compilation will be used; they're
   14602 searched in no particular order.
   14603 
   14604  There are many other possibilities, limited only by your imagination,
   14605 good sense, and the constraints of your build system.
   14606 
   14607  A precompiled header file can be used only when these conditions apply:
   14608 
   14609    * Only one precompiled header can be used in a particular
   14610      compilation.
   14611 
   14612    * A precompiled header can't be used once the first C token is seen.
   14613      You can have preprocessor directives before a precompiled header;
   14614      you can even include a precompiled header from inside another
   14615      header, so long as there are no C tokens before the `#include'.
   14616 
   14617    * The precompiled header file must be produced for the same language
   14618      as the current compilation.  You can't use a C precompiled header
   14619      for a C++ compilation.
   14620 
   14621    * The precompiled header file must have been produced by the same
   14622      compiler binary as the current compilation is using.
   14623 
   14624    * Any macros defined before the precompiled header is included must
   14625      either be defined in the same way as when the precompiled header
   14626      was generated, or must not affect the precompiled header, which
   14627      usually means that they don't appear in the precompiled header at
   14628      all.
   14629 
   14630      The `-D' option is one way to define a macro before a precompiled
   14631      header is included; using a `#define' can also do it.  There are
   14632      also some options that define macros implicitly, like `-O' and
   14633      `-Wdeprecated'; the same rule applies to macros defined this way.
   14634 
   14635    * If debugging information is output when using the precompiled
   14636      header, using `-g' or similar, the same kind of debugging
   14637      information must have been output when building the precompiled
   14638      header.  However, a precompiled header built using `-g' can be
   14639      used in a compilation when no debugging information is being
   14640      output.
   14641 
   14642    * The same `-m' options must generally be used when building and
   14643      using the precompiled header.  *Note Submodel Options::, for any
   14644      cases where this rule is relaxed.
   14645 
   14646    * Each of the following options must be the same when building and
   14647      using the precompiled header:
   14648 
   14649           -fexceptions -funit-at-a-time
   14650 
   14651    * Some other command-line options starting with `-f', `-p', or `-O'
   14652      must be defined in the same way as when the precompiled header was
   14653      generated.  At present, it's not clear which options are safe to
   14654      change and which are not; the safest choice is to use exactly the
   14655      same options when generating and using the precompiled header.
   14656      The following are known to be safe:
   14657 
   14658           -fmessage-length=  -fpreprocessed  -fsched-interblock
   14659           -fsched-spec  -fsched-spec-load  -fsched-spec-load-dangerous
   14660           -fsched-verbose=<number>  -fschedule-insns  -fvisibility=
   14661           -pedantic-errors
   14662 
   14663 
   14664  For all of these except the last, the compiler will automatically
   14665 ignore the precompiled header if the conditions aren't met.  If you
   14666 find an option combination that doesn't work and doesn't cause the
   14667 precompiled header to be ignored, please consider filing a bug report,
   14668 see *Note Bugs::.
   14669 
   14670  If you do use differing options when generating and using the
   14671 precompiled header, the actual behavior will be a mixture of the
   14672 behavior for the options.  For instance, if you use `-g' to generate
   14673 the precompiled header but not when using it, you may or may not get
   14674 debugging information for routines in the precompiled header.
   14675 
   14676 
   14677 File: gcc.info,  Node: Running Protoize,  Prev: Precompiled Headers,  Up: Invoking GCC
   14678 
   14679 3.21 Running Protoize
   14680 =====================
   14681 
   14682 The program `protoize' is an optional part of GCC.  You can use it to
   14683 add prototypes to a program, thus converting the program to ISO C in
   14684 one respect.  The companion program `unprotoize' does the reverse: it
   14685 removes argument types from any prototypes that are found.
   14686 
   14687  When you run these programs, you must specify a set of source files as
   14688 command line arguments.  The conversion programs start out by compiling
   14689 these files to see what functions they define.  The information gathered
   14690 about a file FOO is saved in a file named `FOO.X'.
   14691 
   14692  After scanning comes actual conversion.  The specified files are all
   14693 eligible to be converted; any files they include (whether sources or
   14694 just headers) are eligible as well.
   14695 
   14696  But not all the eligible files are converted.  By default, `protoize'
   14697 and `unprotoize' convert only source and header files in the current
   14698 directory.  You can specify additional directories whose files should
   14699 be converted with the `-d DIRECTORY' option.  You can also specify
   14700 particular files to exclude with the `-x FILE' option.  A file is
   14701 converted if it is eligible, its directory name matches one of the
   14702 specified directory names, and its name within the directory has not
   14703 been excluded.
   14704 
   14705  Basic conversion with `protoize' consists of rewriting most function
   14706 definitions and function declarations to specify the types of the
   14707 arguments.  The only ones not rewritten are those for varargs functions.
   14708 
   14709  `protoize' optionally inserts prototype declarations at the beginning
   14710 of the source file, to make them available for any calls that precede
   14711 the function's definition.  Or it can insert prototype declarations
   14712 with block scope in the blocks where undeclared functions are called.
   14713 
   14714  Basic conversion with `unprotoize' consists of rewriting most function
   14715 declarations to remove any argument types, and rewriting function
   14716 definitions to the old-style pre-ISO form.
   14717 
   14718  Both conversion programs print a warning for any function declaration
   14719 or definition that they can't convert.  You can suppress these warnings
   14720 with `-q'.
   14721 
   14722  The output from `protoize' or `unprotoize' replaces the original
   14723 source file.  The original file is renamed to a name ending with
   14724 `.save' (for DOS, the saved filename ends in `.sav' without the
   14725 original `.c' suffix).  If the `.save' (`.sav' for DOS) file already
   14726 exists, then the source file is simply discarded.
   14727 
   14728  `protoize' and `unprotoize' both depend on GCC itself to scan the
   14729 program and collect information about the functions it uses.  So
   14730 neither of these programs will work until GCC is installed.
   14731 
   14732  Here is a table of the options you can use with `protoize' and
   14733 `unprotoize'.  Each option works with both programs unless otherwise
   14734 stated.
   14735 
   14736 `-B DIRECTORY'
   14737      Look for the file `SYSCALLS.c.X' in DIRECTORY, instead of the
   14738      usual directory (normally `/usr/local/lib').  This file contains
   14739      prototype information about standard system functions.  This option
   14740      applies only to `protoize'.
   14741 
   14742 `-c COMPILATION-OPTIONS'
   14743      Use COMPILATION-OPTIONS as the options when running `gcc' to
   14744      produce the `.X' files.  The special option `-aux-info' is always
   14745      passed in addition, to tell `gcc' to write a `.X' file.
   14746 
   14747      Note that the compilation options must be given as a single
   14748      argument to `protoize' or `unprotoize'.  If you want to specify
   14749      several `gcc' options, you must quote the entire set of
   14750      compilation options to make them a single word in the shell.
   14751 
   14752      There are certain `gcc' arguments that you cannot use, because they
   14753      would produce the wrong kind of output.  These include `-g', `-O',
   14754      `-c', `-S', and `-o' If you include these in the
   14755      COMPILATION-OPTIONS, they are ignored.
   14756 
   14757 `-C'
   14758      Rename files to end in `.C' (`.cc' for DOS-based file systems)
   14759      instead of `.c'.  This is convenient if you are converting a C
   14760      program to C++.  This option applies only to `protoize'.
   14761 
   14762 `-g'
   14763      Add explicit global declarations.  This means inserting explicit
   14764      declarations at the beginning of each source file for each function
   14765      that is called in the file and was not declared.  These
   14766      declarations precede the first function definition that contains a
   14767      call to an undeclared function.  This option applies only to
   14768      `protoize'.
   14769 
   14770 `-i STRING'
   14771      Indent old-style parameter declarations with the string STRING.
   14772      This option applies only to `protoize'.
   14773 
   14774      `unprotoize' converts prototyped function definitions to old-style
   14775      function definitions, where the arguments are declared between the
   14776      argument list and the initial `{'.  By default, `unprotoize' uses
   14777      five spaces as the indentation.  If you want to indent with just
   14778      one space instead, use `-i " "'.
   14779 
   14780 `-k'
   14781      Keep the `.X' files.  Normally, they are deleted after conversion
   14782      is finished.
   14783 
   14784 `-l'
   14785      Add explicit local declarations.  `protoize' with `-l' inserts a
   14786      prototype declaration for each function in each block which calls
   14787      the function without any declaration.  This option applies only to
   14788      `protoize'.
   14789 
   14790 `-n'
   14791      Make no real changes.  This mode just prints information about the
   14792      conversions that would have been done without `-n'.
   14793 
   14794 `-N'
   14795      Make no `.save' files.  The original files are simply deleted.
   14796      Use this option with caution.
   14797 
   14798 `-p PROGRAM'
   14799      Use the program PROGRAM as the compiler.  Normally, the name `gcc'
   14800      is used.
   14801 
   14802 `-q'
   14803      Work quietly.  Most warnings are suppressed.
   14804 
   14805 `-v'
   14806      Print the version number, just like `-v' for `gcc'.
   14807 
   14808  If you need special compiler options to compile one of your program's
   14809 source files, then you should generate that file's `.X' file specially,
   14810 by running `gcc' on that source file with the appropriate options and
   14811 the option `-aux-info'.  Then run `protoize' on the entire set of
   14812 files.  `protoize' will use the existing `.X' file because it is newer
   14813 than the source file.  For example:
   14814 
   14815      gcc -Dfoo=bar file1.c -aux-info file1.X
   14816      protoize *.c
   14817 
   14818 You need to include the special files along with the rest in the
   14819 `protoize' command, even though their `.X' files already exist, because
   14820 otherwise they won't get converted.
   14821 
   14822  *Note Protoize Caveats::, for more information on how to use
   14823 `protoize' successfully.
   14824 
   14825 
   14826 File: gcc.info,  Node: C Implementation,  Next: C Extensions,  Prev: Invoking GCC,  Up: Top
   14827 
   14828 4 C Implementation-defined behavior
   14829 ***********************************
   14830 
   14831 A conforming implementation of ISO C is required to document its choice
   14832 of behavior in each of the areas that are designated "implementation
   14833 defined".  The following lists all such areas, along with the section
   14834 numbers from the ISO/IEC 9899:1990 and ISO/IEC 9899:1999 standards.
   14835 Some areas are only implementation-defined in one version of the
   14836 standard.
   14837 
   14838  Some choices depend on the externally determined ABI for the platform
   14839 (including standard character encodings) which GCC follows; these are
   14840 listed as "determined by ABI" below.  *Note Binary Compatibility:
   14841 Compatibility, and `http://gcc.gnu.org/readings.html'.  Some choices
   14842 are documented in the preprocessor manual.  *Note
   14843 Implementation-defined behavior: (cpp)Implementation-defined behavior.
   14844 Some choices are made by the library and operating system (or other
   14845 environment when compiling for a freestanding environment); refer to
   14846 their documentation for details.
   14847 
   14848 * Menu:
   14849 
   14850 * Translation implementation::
   14851 * Environment implementation::
   14852 * Identifiers implementation::
   14853 * Characters implementation::
   14854 * Integers implementation::
   14855 * Floating point implementation::
   14856 * Arrays and pointers implementation::
   14857 * Hints implementation::
   14858 * Structures unions enumerations and bit-fields implementation::
   14859 * Qualifiers implementation::
   14860 * Declarators implementation::
   14861 * Statements implementation::
   14862 * Preprocessing directives implementation::
   14863 * Library functions implementation::
   14864 * Architecture implementation::
   14865 * Locale-specific behavior implementation::
   14866 
   14867 
   14868 File: gcc.info,  Node: Translation implementation,  Next: Environment implementation,  Up: C Implementation
   14869 
   14870 4.1 Translation
   14871 ===============
   14872 
   14873    * `How a diagnostic is identified (C90 3.7, C99 3.10, C90 and C99
   14874      5.1.1.3).'
   14875 
   14876      Diagnostics consist of all the output sent to stderr by GCC.
   14877 
   14878    * `Whether each nonempty sequence of white-space characters other
   14879      than new-line is retained or replaced by one space character in
   14880      translation phase 3 (C90 and C99 5.1.1.2).'
   14881 
   14882      *Note Implementation-defined behavior: (cpp)Implementation-defined
   14883      behavior.
   14884 
   14885 
   14886 
   14887 File: gcc.info,  Node: Environment implementation,  Next: Identifiers implementation,  Prev: Translation implementation,  Up: C Implementation
   14888 
   14889 4.2 Environment
   14890 ===============
   14891 
   14892 The behavior of most of these points are dependent on the implementation
   14893 of the C library, and are not defined by GCC itself.
   14894 
   14895    * `The mapping between physical source file multibyte characters and
   14896      the source character set in translation phase 1 (C90 and C99
   14897      5.1.1.2).'
   14898 
   14899      *Note Implementation-defined behavior: (cpp)Implementation-defined
   14900      behavior.
   14901 
   14902 
   14903 
   14904 File: gcc.info,  Node: Identifiers implementation,  Next: Characters implementation,  Prev: Environment implementation,  Up: C Implementation
   14905 
   14906 4.3 Identifiers
   14907 ===============
   14908 
   14909    * `Which additional multibyte characters may appear in identifiers
   14910      and their correspondence to universal character names (C99 6.4.2).'
   14911 
   14912      *Note Implementation-defined behavior: (cpp)Implementation-defined
   14913      behavior.
   14914 
   14915    * `The number of significant initial characters in an identifier
   14916      (C90 6.1.2, C90 and C99 5.2.4.1, C99 6.4.2).'
   14917 
   14918      For internal names, all characters are significant.  For external
   14919      names, the number of significant characters are defined by the
   14920      linker; for almost all targets, all characters are significant.
   14921 
   14922    * `Whether case distinctions are significant in an identifier with
   14923      external linkage (C90 6.1.2).'
   14924 
   14925      This is a property of the linker.  C99 requires that case
   14926      distinctions are always significant in identifiers with external
   14927      linkage and systems without this property are not supported by GCC.
   14928 
   14929 
   14930 
   14931 File: gcc.info,  Node: Characters implementation,  Next: Integers implementation,  Prev: Identifiers implementation,  Up: C Implementation
   14932 
   14933 4.4 Characters
   14934 ==============
   14935 
   14936    * `The number of bits in a byte (C90 3.4, C99 3.6).'
   14937 
   14938      Determined by ABI.
   14939 
   14940    * `The values of the members of the execution character set (C90 and
   14941      C99 5.2.1).'
   14942 
   14943      Determined by ABI.
   14944 
   14945    * `The unique value of the member of the execution character set
   14946      produced for each of the standard alphabetic escape sequences (C90
   14947      and C99 5.2.2).'
   14948 
   14949      Determined by ABI.
   14950 
   14951    * `The value of a `char' object into which has been stored any
   14952      character other than a member of the basic execution character set
   14953      (C90 6.1.2.5, C99 6.2.5).'
   14954 
   14955      Determined by ABI.
   14956 
   14957    * `Which of `signed char' or `unsigned char' has the same range,
   14958      representation, and behavior as "plain" `char' (C90 6.1.2.5, C90
   14959      6.2.1.1, C99 6.2.5, C99 6.3.1.1).'
   14960 
   14961      Determined by ABI.  The options `-funsigned-char' and
   14962      `-fsigned-char' change the default.  *Note Options Controlling C
   14963      Dialect: C Dialect Options.
   14964 
   14965    * `The mapping of members of the source character set (in character
   14966      constants and string literals) to members of the execution
   14967      character set (C90 6.1.3.4, C99 6.4.4.4, C90 and C99 5.1.1.2).'
   14968 
   14969      Determined by ABI.
   14970 
   14971    * `The value of an integer character constant containing more than
   14972      one character or containing a character or escape sequence that
   14973      does not map to a single-byte execution character (C90 6.1.3.4,
   14974      C99 6.4.4.4).'
   14975 
   14976      *Note Implementation-defined behavior: (cpp)Implementation-defined
   14977      behavior.
   14978 
   14979    * `The value of a wide character constant containing more than one
   14980      multibyte character, or containing a multibyte character or escape
   14981      sequence not represented in the extended execution character set
   14982      (C90 6.1.3.4, C99 6.4.4.4).'
   14983 
   14984      *Note Implementation-defined behavior: (cpp)Implementation-defined
   14985      behavior.
   14986 
   14987    * `The current locale used to convert a wide character constant
   14988      consisting of a single multibyte character that maps to a member
   14989      of the extended execution character set into a corresponding wide
   14990      character code (C90 6.1.3.4, C99 6.4.4.4).'
   14991 
   14992      *Note Implementation-defined behavior: (cpp)Implementation-defined
   14993      behavior.
   14994 
   14995    * `The current locale used to convert a wide string literal into
   14996      corresponding wide character codes (C90 6.1.4, C99 6.4.5).'
   14997 
   14998      *Note Implementation-defined behavior: (cpp)Implementation-defined
   14999      behavior.
   15000 
   15001    * `The value of a string literal containing a multibyte character or
   15002      escape sequence not represented in the execution character set
   15003      (C90 6.1.4, C99 6.4.5).'
   15004 
   15005      *Note Implementation-defined behavior: (cpp)Implementation-defined
   15006      behavior.
   15007 
   15008 
   15009 File: gcc.info,  Node: Integers implementation,  Next: Floating point implementation,  Prev: Characters implementation,  Up: C Implementation
   15010 
   15011 4.5 Integers
   15012 ============
   15013 
   15014    * `Any extended integer types that exist in the implementation (C99
   15015      6.2.5).'
   15016 
   15017      GCC does not support any extended integer types.
   15018 
   15019    * `Whether signed integer types are represented using sign and
   15020      magnitude, two's complement, or one's complement, and whether the
   15021      extraordinary value is a trap representation or an ordinary value
   15022      (C99 6.2.6.2).'
   15023 
   15024      GCC supports only two's complement integer types, and all bit
   15025      patterns are ordinary values.
   15026 
   15027    * `The rank of any extended integer type relative to another extended
   15028      integer type with the same precision (C99 6.3.1.1).'
   15029 
   15030      GCC does not support any extended integer types.
   15031 
   15032    * `The result of, or the signal raised by, converting an integer to a
   15033      signed integer type when the value cannot be represented in an
   15034      object of that type (C90 6.2.1.2, C99 6.3.1.3).'
   15035 
   15036      For conversion to a type of width N, the value is reduced modulo
   15037      2^N to be within range of the type; no signal is raised.
   15038 
   15039    * `The results of some bitwise operations on signed integers (C90
   15040      6.3, C99 6.5).'
   15041 
   15042      Bitwise operators act on the representation of the value including
   15043      both the sign and value bits, where the sign bit is considered
   15044      immediately above the highest-value value bit.  Signed `>>' acts
   15045      on negative numbers by sign extension.
   15046 
   15047      GCC does not use the latitude given in C99 only to treat certain
   15048      aspects of signed `<<' as undefined, but this is subject to change.
   15049 
   15050    * `The sign of the remainder on integer division (C90 6.3.5).'
   15051 
   15052      GCC always follows the C99 requirement that the result of division
   15053      is truncated towards zero.
   15054 
   15055 
   15056 
   15057 File: gcc.info,  Node: Floating point implementation,  Next: Arrays and pointers implementation,  Prev: Integers implementation,  Up: C Implementation
   15058 
   15059 4.6 Floating point
   15060 ==================
   15061 
   15062    * `The accuracy of the floating-point operations and of the library
   15063      functions in `<math.h>' and `<complex.h>' that return
   15064      floating-point results (C90 and C99 5.2.4.2.2).'
   15065 
   15066      The accuracy is unknown.
   15067 
   15068    * `The rounding behaviors characterized by non-standard values of
   15069      `FLT_ROUNDS'  (C90 and C99 5.2.4.2.2).'
   15070 
   15071      GCC does not use such values.
   15072 
   15073    * `The evaluation methods characterized by non-standard negative
   15074      values of `FLT_EVAL_METHOD' (C99 5.2.4.2.2).'
   15075 
   15076      GCC does not use such values.
   15077 
   15078    * `The direction of rounding when an integer is converted to a
   15079      floating-point number that cannot exactly represent the original
   15080      value (C90 6.2.1.3, C99 6.3.1.4).'
   15081 
   15082      C99 Annex F is followed.
   15083 
   15084    * `The direction of rounding when a floating-point number is
   15085      converted to a narrower floating-point number (C90 6.2.1.4, C99
   15086      6.3.1.5).'
   15087 
   15088      C99 Annex F is followed.
   15089 
   15090    * `How the nearest representable value or the larger or smaller
   15091      representable value immediately adjacent to the nearest
   15092      representable value is chosen for certain floating constants (C90
   15093      6.1.3.1, C99 6.4.4.2).'
   15094 
   15095      C99 Annex F is followed.
   15096 
   15097    * `Whether and how floating expressions are contracted when not
   15098      disallowed by the `FP_CONTRACT' pragma (C99 6.5).'
   15099 
   15100      Expressions are currently only contracted if
   15101      `-funsafe-math-optimizations' or `-ffast-math' are used.  This is
   15102      subject to change.
   15103 
   15104    * `The default state for the `FENV_ACCESS' pragma (C99 7.6.1).'
   15105 
   15106      This pragma is not implemented, but the default is to "off" unless
   15107      `-frounding-math' is used in which case it is "on".
   15108 
   15109    * `Additional floating-point exceptions, rounding modes,
   15110      environments, and classifications, and their macro names (C99 7.6,
   15111      C99 7.12).'
   15112 
   15113      This is dependent on the implementation of the C library, and is
   15114      not defined by GCC itself.
   15115 
   15116    * `The default state for the `FP_CONTRACT' pragma (C99 7.12.2).'
   15117 
   15118      This pragma is not implemented.  Expressions are currently only
   15119      contracted if `-funsafe-math-optimizations' or `-ffast-math' are
   15120      used.  This is subject to change.
   15121 
   15122    * `Whether the "inexact" floating-point exception can be raised when
   15123      the rounded result actually does equal the mathematical result in
   15124      an IEC 60559 conformant implementation (C99 F.9).'
   15125 
   15126      This is dependent on the implementation of the C library, and is
   15127      not defined by GCC itself.
   15128 
   15129    * `Whether the "underflow" (and "inexact") floating-point exception
   15130      can be raised when a result is tiny but not inexact in an IEC
   15131      60559 conformant implementation (C99 F.9).'
   15132 
   15133      This is dependent on the implementation of the C library, and is
   15134      not defined by GCC itself.
   15135 
   15136 
   15137 
   15138 File: gcc.info,  Node: Arrays and pointers implementation,  Next: Hints implementation,  Prev: Floating point implementation,  Up: C Implementation
   15139 
   15140 4.7 Arrays and pointers
   15141 =======================
   15142 
   15143    * `The result of converting a pointer to an integer or vice versa
   15144      (C90 6.3.4, C99 6.3.2.3).'
   15145 
   15146      A cast from pointer to integer discards most-significant bits if
   15147      the pointer representation is larger than the integer type,
   15148      sign-extends(1) if the pointer representation is smaller than the
   15149      integer type, otherwise the bits are unchanged.
   15150 
   15151      A cast from integer to pointer discards most-significant bits if
   15152      the pointer representation is smaller than the integer type,
   15153      extends according to the signedness of the integer type if the
   15154      pointer representation is larger than the integer type, otherwise
   15155      the bits are unchanged.
   15156 
   15157      When casting from pointer to integer and back again, the resulting
   15158      pointer must reference the same object as the original pointer,
   15159      otherwise the behavior is undefined.  That is, one may not use
   15160      integer arithmetic to avoid the undefined behavior of pointer
   15161      arithmetic as proscribed in C99 6.5.6/8.
   15162 
   15163    * `The size of the result of subtracting two pointers to elements of
   15164      the same array (C90 6.3.6, C99 6.5.6).'
   15165 
   15166      The value is as specified in the standard and the type is
   15167      determined by the ABI.
   15168 
   15169 
   15170  ---------- Footnotes ----------
   15171 
   15172  (1) Future versions of GCC may zero-extend, or use a target-defined
   15173 `ptr_extend' pattern.  Do not rely on sign extension.
   15174 
   15175 
   15176 File: gcc.info,  Node: Hints implementation,  Next: Structures unions enumerations and bit-fields implementation,  Prev: Arrays and pointers implementation,  Up: C Implementation
   15177 
   15178 4.8 Hints
   15179 =========
   15180 
   15181    * `The extent to which suggestions made by using the `register'
   15182      storage-class specifier are effective (C90 6.5.1, C99 6.7.1).'
   15183 
   15184      The `register' specifier affects code generation only in these
   15185      ways:
   15186 
   15187         * When used as part of the register variable extension, see
   15188           *Note Explicit Reg Vars::.
   15189 
   15190         * When `-O0' is in use, the compiler allocates distinct stack
   15191           memory for all variables that do not have the `register'
   15192           storage-class specifier; if `register' is specified, the
   15193           variable may have a shorter lifespan than the code would
   15194           indicate and may never be placed in memory.
   15195 
   15196         * On some rare x86 targets, `setjmp' doesn't save the registers
   15197           in all circumstances.  In those cases, GCC doesn't allocate
   15198           any variables in registers unless they are marked `register'.
   15199 
   15200 
   15201    * `The extent to which suggestions made by using the inline function
   15202      specifier are effective (C99 6.7.4).'
   15203 
   15204      GCC will not inline any functions if the `-fno-inline' option is
   15205      used or if `-O0' is used.  Otherwise, GCC may still be unable to
   15206      inline a function for many reasons; the `-Winline' option may be
   15207      used to determine if a function has not been inlined and why not.
   15208 
   15209 
   15210 
   15211 File: gcc.info,  Node: Structures unions enumerations and bit-fields implementation,  Next: Qualifiers implementation,  Prev: Hints implementation,  Up: C Implementation
   15212 
   15213 4.9 Structures, unions, enumerations, and bit-fields
   15214 ====================================================
   15215 
   15216    * `A member of a union object is accessed using a member of a
   15217      different type (C90 6.3.2.3).'
   15218 
   15219      The relevant bytes of the representation of the object are treated
   15220      as an object of the type used for the access.  This may be a trap
   15221      representation.
   15222 
   15223    * `Whether a "plain" `int' bit-field is treated as a `signed int'
   15224      bit-field or as an `unsigned int' bit-field (C90 6.5.2, C90
   15225      6.5.2.1, C99 6.7.2, C99 6.7.2.1).'
   15226 
   15227      By default it is treated as `signed int' but this may be changed
   15228      by the `-funsigned-bitfields' option.
   15229 
   15230    * `Allowable bit-field types other than `_Bool', `signed int', and
   15231      `unsigned int' (C99 6.7.2.1).'
   15232 
   15233      No other types are permitted in strictly conforming mode.
   15234 
   15235    * `Whether a bit-field can straddle a storage-unit boundary (C90
   15236      6.5.2.1, C99 6.7.2.1).'
   15237 
   15238      Determined by ABI.
   15239 
   15240    * `The order of allocation of bit-fields within a unit (C90 6.5.2.1,
   15241      C99 6.7.2.1).'
   15242 
   15243      Determined by ABI.
   15244 
   15245    * `The alignment of non-bit-field members of structures (C90
   15246      6.5.2.1, C99 6.7.2.1).'
   15247 
   15248      Determined by ABI.
   15249 
   15250    * `The integer type compatible with each enumerated type (C90
   15251      6.5.2.2, C99 6.7.2.2).'
   15252 
   15253      Normally, the type is `unsigned int' if there are no negative
   15254      values in the enumeration, otherwise `int'.  If `-fshort-enums' is
   15255      specified, then if there are negative values it is the first of
   15256      `signed char', `short' and `int' that can represent all the
   15257      values, otherwise it is the first of `unsigned char', `unsigned
   15258      short' and `unsigned int' that can represent all the values.
   15259 
   15260      On some targets, `-fshort-enums' is the default; this is
   15261      determined by the ABI.
   15262 
   15263 
   15264 
   15265 File: gcc.info,  Node: Qualifiers implementation,  Next: Declarators implementation,  Prev: Structures unions enumerations and bit-fields implementation,  Up: C Implementation
   15266 
   15267 4.10 Qualifiers
   15268 ===============
   15269 
   15270    * `What constitutes an access to an object that has
   15271      volatile-qualified type (C90 6.5.3, C99 6.7.3).'
   15272 
   15273      Such an object is normally accessed by pointers and used for
   15274      accessing hardware.  In most expressions, it is intuitively
   15275      obvious what is a read and what is a write.  For example
   15276 
   15277           volatile int *dst = SOMEVALUE;
   15278           volatile int *src = SOMEOTHERVALUE;
   15279           *dst = *src;
   15280 
   15281      will cause a read of the volatile object pointed to by SRC and
   15282      store the value into the volatile object pointed to by DST.  There
   15283      is no guarantee that these reads and writes are atomic, especially
   15284      for objects larger than `int'.
   15285 
   15286      However, if the volatile storage is not being modified, and the
   15287      value of the volatile storage is not used, then the situation is
   15288      less obvious.  For example
   15289 
   15290           volatile int *src = SOMEVALUE;
   15291           *src;
   15292 
   15293      According to the C standard, such an expression is an rvalue whose
   15294      type is the unqualified version of its original type, i.e. `int'.
   15295      Whether GCC interprets this as a read of the volatile object being
   15296      pointed to or only as a request to evaluate the expression for its
   15297      side-effects depends on this type.
   15298 
   15299      If it is a scalar type, or on most targets an aggregate type whose
   15300      only member object is of a scalar type, or a union type whose
   15301      member objects are of scalar types, the expression is interpreted
   15302      by GCC as a read of the volatile object; in the other cases, the
   15303      expression is only evaluated for its side-effects.
   15304 
   15305 
   15306 
   15307 File: gcc.info,  Node: Declarators implementation,  Next: Statements implementation,  Prev: Qualifiers implementation,  Up: C Implementation
   15308 
   15309 4.11 Declarators
   15310 ================
   15311 
   15312    * `The maximum number of declarators that may modify an arithmetic,
   15313      structure or union type (C90 6.5.4).'
   15314 
   15315      GCC is only limited by available memory.
   15316 
   15317 
   15318 
   15319 File: gcc.info,  Node: Statements implementation,  Next: Preprocessing directives implementation,  Prev: Declarators implementation,  Up: C Implementation
   15320 
   15321 4.12 Statements
   15322 ===============
   15323 
   15324    * `The maximum number of `case' values in a `switch' statement (C90
   15325      6.6.4.2).'
   15326 
   15327      GCC is only limited by available memory.
   15328 
   15329 
   15330 
   15331 File: gcc.info,  Node: Preprocessing directives implementation,  Next: Library functions implementation,  Prev: Statements implementation,  Up: C Implementation
   15332 
   15333 4.13 Preprocessing directives
   15334 =============================
   15335 
   15336 *Note Implementation-defined behavior: (cpp)Implementation-defined
   15337 behavior, for details of these aspects of implementation-defined
   15338 behavior.
   15339 
   15340    * `How sequences in both forms of header names are mapped to headers
   15341      or external source file names (C90 6.1.7, C99 6.4.7).'
   15342 
   15343    * `Whether the value of a character constant in a constant expression
   15344      that controls conditional inclusion matches the value of the same
   15345      character constant in the execution character set (C90 6.8.1, C99
   15346      6.10.1).'
   15347 
   15348    * `Whether the value of a single-character character constant in a
   15349      constant expression that controls conditional inclusion may have a
   15350      negative value (C90 6.8.1, C99 6.10.1).'
   15351 
   15352    * `The places that are searched for an included `<>' delimited
   15353      header, and how the places are specified or the header is
   15354      identified (C90 6.8.2, C99 6.10.2).'
   15355 
   15356    * `How the named source file is searched for in an included `""'
   15357      delimited header (C90 6.8.2, C99 6.10.2).'
   15358 
   15359    * `The method by which preprocessing tokens (possibly resulting from
   15360      macro expansion) in a `#include' directive are combined into a
   15361      header name (C90 6.8.2, C99 6.10.2).'
   15362 
   15363    * `The nesting limit for `#include' processing (C90 6.8.2, C99
   15364      6.10.2).'
   15365 
   15366    * `Whether the `#' operator inserts a `\' character before the `\'
   15367      character that begins a universal character name in a character
   15368      constant or string literal (C99 6.10.3.2).'
   15369 
   15370    * `The behavior on each recognized non-`STDC #pragma' directive (C90
   15371      6.8.6, C99 6.10.6).'
   15372 
   15373      *Note Pragmas: (cpp)Pragmas, for details of pragmas accepted by
   15374      GCC on all targets.  *Note Pragmas Accepted by GCC: Pragmas, for
   15375      details of target-specific pragmas.
   15376 
   15377    * `The definitions for `__DATE__' and `__TIME__' when respectively,
   15378      the date and time of translation are not available (C90 6.8.8, C99
   15379      6.10.8).'
   15380 
   15381 
   15382 
   15383 File: gcc.info,  Node: Library functions implementation,  Next: Architecture implementation,  Prev: Preprocessing directives implementation,  Up: C Implementation
   15384 
   15385 4.14 Library functions
   15386 ======================
   15387 
   15388 The behavior of most of these points are dependent on the implementation
   15389 of the C library, and are not defined by GCC itself.
   15390 
   15391    * `The null pointer constant to which the macro `NULL' expands (C90
   15392      7.1.6, C99 7.17).'
   15393 
   15394      In `<stddef.h>', `NULL' expands to `((void *)0)'.  GCC does not
   15395      provide the other headers which define `NULL' and some library
   15396      implementations may use other definitions in those headers.
   15397 
   15398 
   15399 
   15400 File: gcc.info,  Node: Architecture implementation,  Next: Locale-specific behavior implementation,  Prev: Library functions implementation,  Up: C Implementation
   15401 
   15402 4.15 Architecture
   15403 =================
   15404 
   15405    * `The values or expressions assigned to the macros specified in the
   15406      headers `<float.h>', `<limits.h>', and `<stdint.h>' (C90 and C99
   15407      5.2.4.2, C99 7.18.2, C99 7.18.3).'
   15408 
   15409      Determined by ABI.
   15410 
   15411    * `The number, order, and encoding of bytes in any object (when not
   15412      explicitly specified in this International Standard) (C99
   15413      6.2.6.1).'
   15414 
   15415      Determined by ABI.
   15416 
   15417    * `The value of the result of the `sizeof' operator (C90 6.3.3.4,
   15418      C99 6.5.3.4).'
   15419 
   15420      Determined by ABI.
   15421 
   15422 
   15423 
   15424 File: gcc.info,  Node: Locale-specific behavior implementation,  Prev: Architecture implementation,  Up: C Implementation
   15425 
   15426 4.16 Locale-specific behavior
   15427 =============================
   15428 
   15429 The behavior of these points are dependent on the implementation of the
   15430 C library, and are not defined by GCC itself.
   15431 
   15432 
   15433 File: gcc.info,  Node: C Extensions,  Next: C++ Extensions,  Prev: C Implementation,  Up: Top
   15434 
   15435 5 Extensions to the C Language Family
   15436 *************************************
   15437 
   15438 GNU C provides several language features not found in ISO standard C.
   15439 (The `-pedantic' option directs GCC to print a warning message if any
   15440 of these features is used.)  To test for the availability of these
   15441 features in conditional compilation, check for a predefined macro
   15442 `__GNUC__', which is always defined under GCC.
   15443 
   15444  These extensions are available in C and Objective-C.  Most of them are
   15445 also available in C++.  *Note Extensions to the C++ Language: C++
   15446 Extensions, for extensions that apply _only_ to C++.
   15447 
   15448  Some features that are in ISO C99 but not C89 or C++ are also, as
   15449 extensions, accepted by GCC in C89 mode and in C++.
   15450 
   15451 * Menu:
   15452 
   15453 * Statement Exprs::     Putting statements and declarations inside expressions.
   15454 * Local Labels::        Labels local to a block.
   15455 * Labels as Values::    Getting pointers to labels, and computed gotos.
   15456 * Nested Functions::    As in Algol and Pascal, lexical scoping of functions.
   15457 * Constructing Calls::	Dispatching a call to another function.
   15458 * Typeof::              `typeof': referring to the type of an expression.
   15459 * Conditionals::        Omitting the middle operand of a `?:' expression.
   15460 * Long Long::		Double-word integers---`long long int'.
   15461 * Complex::             Data types for complex numbers.
   15462 * Floating Types::      Additional Floating Types.
   15463 * Decimal Float::       Decimal Floating Types.
   15464 * Hex Floats::          Hexadecimal floating-point constants.
   15465 * Fixed-Point::         Fixed-Point Types.
   15466 * Zero Length::         Zero-length arrays.
   15467 * Variable Length::     Arrays whose length is computed at run time.
   15468 * Empty Structures::    Structures with no members.
   15469 * Variadic Macros::	Macros with a variable number of arguments.
   15470 * Escaped Newlines::    Slightly looser rules for escaped newlines.
   15471 * Subscripting::        Any array can be subscripted, even if not an lvalue.
   15472 * Pointer Arith::       Arithmetic on `void'-pointers and function pointers.
   15473 * Initializers::        Non-constant initializers.
   15474 * Compound Literals::   Compound literals give structures, unions
   15475                          or arrays as values.
   15476 * Designated Inits::	Labeling elements of initializers.
   15477 * Cast to Union::       Casting to union type from any member of the union.
   15478 * Case Ranges::		`case 1 ... 9' and such.
   15479 * Mixed Declarations::	Mixing declarations and code.
   15480 * Function Attributes:: Declaring that functions have no side effects,
   15481                          or that they can never return.
   15482 * Attribute Syntax::    Formal syntax for attributes.
   15483 * Function Prototypes:: Prototype declarations and old-style definitions.
   15484 * C++ Comments::        C++ comments are recognized.
   15485 * Dollar Signs::        Dollar sign is allowed in identifiers.
   15486 * Character Escapes::   `\e' stands for the character <ESC>.
   15487 * Variable Attributes::	Specifying attributes of variables.
   15488 * Type Attributes::	Specifying attributes of types.
   15489 * Alignment::           Inquiring about the alignment of a type or variable.
   15490 * Inline::              Defining inline functions (as fast as macros).
   15491 * Extended Asm::        Assembler instructions with C expressions as operands.
   15492                          (With them you can define ``built-in'' functions.)
   15493 * Constraints::         Constraints for asm operands
   15494 * Asm Labels::          Specifying the assembler name to use for a C symbol.
   15495 * Explicit Reg Vars::   Defining variables residing in specified registers.
   15496 * Alternate Keywords::  `__const__', `__asm__', etc., for header files.
   15497 * Incomplete Enums::    `enum foo;', with details to follow.
   15498 * Function Names::	Printable strings which are the name of the current
   15499 			 function.
   15500 * Return Address::      Getting the return or frame address of a function.
   15501 * Vector Extensions::   Using vector instructions through built-in functions.
   15502 * Offsetof::            Special syntax for implementing `offsetof'.
   15503 * Atomic Builtins::	Built-in functions for atomic memory access.
   15504 * Object Size Checking:: Built-in functions for limited buffer overflow
   15505                         checking.
   15506 * Other Builtins::      Other built-in functions.
   15507 * Target Builtins::     Built-in functions specific to particular targets.
   15508 * Target Format Checks:: Format checks specific to particular targets.
   15509 * Pragmas::             Pragmas accepted by GCC.
   15510 * Unnamed Fields::      Unnamed struct/union fields within structs/unions.
   15511 * Thread-Local::        Per-thread variables.
   15512 * Binary constants::    Binary constants using the `0b' prefix.
   15513 
   15514 
   15515 File: gcc.info,  Node: Statement Exprs,  Next: Local Labels,  Up: C Extensions
   15516 
   15517 5.1 Statements and Declarations in Expressions
   15518 ==============================================
   15519 
   15520 A compound statement enclosed in parentheses may appear as an expression
   15521 in GNU C.  This allows you to use loops, switches, and local variables
   15522 within an expression.
   15523 
   15524  Recall that a compound statement is a sequence of statements surrounded
   15525 by braces; in this construct, parentheses go around the braces.  For
   15526 example:
   15527 
   15528      ({ int y = foo (); int z;
   15529         if (y > 0) z = y;
   15530         else z = - y;
   15531         z; })
   15532 
   15533 is a valid (though slightly more complex than necessary) expression for
   15534 the absolute value of `foo ()'.
   15535 
   15536  The last thing in the compound statement should be an expression
   15537 followed by a semicolon; the value of this subexpression serves as the
   15538 value of the entire construct.  (If you use some other kind of statement
   15539 last within the braces, the construct has type `void', and thus
   15540 effectively no value.)
   15541 
   15542  This feature is especially useful in making macro definitions "safe"
   15543 (so that they evaluate each operand exactly once).  For example, the
   15544 "maximum" function is commonly defined as a macro in standard C as
   15545 follows:
   15546 
   15547      #define max(a,b) ((a) > (b) ? (a) : (b))
   15548 
   15549 But this definition computes either A or B twice, with bad results if
   15550 the operand has side effects.  In GNU C, if you know the type of the
   15551 operands (here taken as `int'), you can define the macro safely as
   15552 follows:
   15553 
   15554      #define maxint(a,b) \
   15555        ({int _a = (a), _b = (b); _a > _b ? _a : _b; })
   15556 
   15557  Embedded statements are not allowed in constant expressions, such as
   15558 the value of an enumeration constant, the width of a bit-field, or the
   15559 initial value of a static variable.
   15560 
   15561  If you don't know the type of the operand, you can still do this, but
   15562 you must use `typeof' (*note Typeof::).
   15563 
   15564  In G++, the result value of a statement expression undergoes array and
   15565 function pointer decay, and is returned by value to the enclosing
   15566 expression.  For instance, if `A' is a class, then
   15567 
   15568              A a;
   15569 
   15570              ({a;}).Foo ()
   15571 
   15572 will construct a temporary `A' object to hold the result of the
   15573 statement expression, and that will be used to invoke `Foo'.  Therefore
   15574 the `this' pointer observed by `Foo' will not be the address of `a'.
   15575 
   15576  Any temporaries created within a statement within a statement
   15577 expression will be destroyed at the statement's end.  This makes
   15578 statement expressions inside macros slightly different from function
   15579 calls.  In the latter case temporaries introduced during argument
   15580 evaluation will be destroyed at the end of the statement that includes
   15581 the function call.  In the statement expression case they will be
   15582 destroyed during the statement expression.  For instance,
   15583 
   15584      #define macro(a)  ({__typeof__(a) b = (a); b + 3; })
   15585      template<typename T> T function(T a) { T b = a; return b + 3; }
   15586 
   15587      void foo ()
   15588      {
   15589        macro (X ());
   15590        function (X ());
   15591      }
   15592 
   15593 will have different places where temporaries are destroyed.  For the
   15594 `macro' case, the temporary `X' will be destroyed just after the
   15595 initialization of `b'.  In the `function' case that temporary will be
   15596 destroyed when the function returns.
   15597 
   15598  These considerations mean that it is probably a bad idea to use
   15599 statement-expressions of this form in header files that are designed to
   15600 work with C++.  (Note that some versions of the GNU C Library contained
   15601 header files using statement-expression that lead to precisely this
   15602 bug.)
   15603 
   15604  Jumping into a statement expression with `goto' or using a `switch'
   15605 statement outside the statement expression with a `case' or `default'
   15606 label inside the statement expression is not permitted.  Jumping into a
   15607 statement expression with a computed `goto' (*note Labels as Values::)
   15608 yields undefined behavior.  Jumping out of a statement expression is
   15609 permitted, but if the statement expression is part of a larger
   15610 expression then it is unspecified which other subexpressions of that
   15611 expression have been evaluated except where the language definition
   15612 requires certain subexpressions to be evaluated before or after the
   15613 statement expression.  In any case, as with a function call the
   15614 evaluation of a statement expression is not interleaved with the
   15615 evaluation of other parts of the containing expression.  For example,
   15616 
   15617        foo (), (({ bar1 (); goto a; 0; }) + bar2 ()), baz();
   15618 
   15619 will call `foo' and `bar1' and will not call `baz' but may or may not
   15620 call `bar2'.  If `bar2' is called, it will be called after `foo' and
   15621 before `bar1'
   15622 
   15623 
   15624 File: gcc.info,  Node: Local Labels,  Next: Labels as Values,  Prev: Statement Exprs,  Up: C Extensions
   15625 
   15626 5.2 Locally Declared Labels
   15627 ===========================
   15628 
   15629 GCC allows you to declare "local labels" in any nested block scope.  A
   15630 local label is just like an ordinary label, but you can only reference
   15631 it (with a `goto' statement, or by taking its address) within the block
   15632 in which it was declared.
   15633 
   15634  A local label declaration looks like this:
   15635 
   15636      __label__ LABEL;
   15637 
   15638 or
   15639 
   15640      __label__ LABEL1, LABEL2, /* ... */;
   15641 
   15642  Local label declarations must come at the beginning of the block,
   15643 before any ordinary declarations or statements.
   15644 
   15645  The label declaration defines the label _name_, but does not define
   15646 the label itself.  You must do this in the usual way, with `LABEL:',
   15647 within the statements of the statement expression.
   15648 
   15649  The local label feature is useful for complex macros.  If a macro
   15650 contains nested loops, a `goto' can be useful for breaking out of them.
   15651 However, an ordinary label whose scope is the whole function cannot be
   15652 used: if the macro can be expanded several times in one function, the
   15653 label will be multiply defined in that function.  A local label avoids
   15654 this problem.  For example:
   15655 
   15656      #define SEARCH(value, array, target)              \
   15657      do {                                              \
   15658        __label__ found;                                \
   15659        typeof (target) _SEARCH_target = (target);      \
   15660        typeof (*(array)) *_SEARCH_array = (array);     \
   15661        int i, j;                                       \
   15662        int value;                                      \
   15663        for (i = 0; i < max; i++)                       \
   15664          for (j = 0; j < max; j++)                     \
   15665            if (_SEARCH_array[i][j] == _SEARCH_target)  \
   15666              { (value) = i; goto found; }              \
   15667        (value) = -1;                                   \
   15668       found:;                                          \
   15669      } while (0)
   15670 
   15671  This could also be written using a statement-expression:
   15672 
   15673      #define SEARCH(array, target)                     \
   15674      ({                                                \
   15675        __label__ found;                                \
   15676        typeof (target) _SEARCH_target = (target);      \
   15677        typeof (*(array)) *_SEARCH_array = (array);     \
   15678        int i, j;                                       \
   15679        int value;                                      \
   15680        for (i = 0; i < max; i++)                       \
   15681          for (j = 0; j < max; j++)                     \
   15682            if (_SEARCH_array[i][j] == _SEARCH_target)  \
   15683              { value = i; goto found; }                \
   15684        value = -1;                                     \
   15685       found:                                           \
   15686        value;                                          \
   15687      })
   15688 
   15689  Local label declarations also make the labels they declare visible to
   15690 nested functions, if there are any.  *Note Nested Functions::, for
   15691 details.
   15692 
   15693 
   15694 File: gcc.info,  Node: Labels as Values,  Next: Nested Functions,  Prev: Local Labels,  Up: C Extensions
   15695 
   15696 5.3 Labels as Values
   15697 ====================
   15698 
   15699 You can get the address of a label defined in the current function (or
   15700 a containing function) with the unary operator `&&'.  The value has
   15701 type `void *'.  This value is a constant and can be used wherever a
   15702 constant of that type is valid.  For example:
   15703 
   15704      void *ptr;
   15705      /* ... */
   15706      ptr = &&foo;
   15707 
   15708  To use these values, you need to be able to jump to one.  This is done
   15709 with the computed goto statement(1), `goto *EXP;'.  For example,
   15710 
   15711      goto *ptr;
   15712 
   15713 Any expression of type `void *' is allowed.
   15714 
   15715  One way of using these constants is in initializing a static array that
   15716 will serve as a jump table:
   15717 
   15718      static void *array[] = { &&foo, &&bar, &&hack };
   15719 
   15720  Then you can select a label with indexing, like this:
   15721 
   15722      goto *array[i];
   15723 
   15724 Note that this does not check whether the subscript is in bounds--array
   15725 indexing in C never does that.
   15726 
   15727  Such an array of label values serves a purpose much like that of the
   15728 `switch' statement.  The `switch' statement is cleaner, so use that
   15729 rather than an array unless the problem does not fit a `switch'
   15730 statement very well.
   15731 
   15732  Another use of label values is in an interpreter for threaded code.
   15733 The labels within the interpreter function can be stored in the
   15734 threaded code for super-fast dispatching.
   15735 
   15736  You may not use this mechanism to jump to code in a different function.
   15737 If you do that, totally unpredictable things will happen.  The best way
   15738 to avoid this is to store the label address only in automatic variables
   15739 and never pass it as an argument.
   15740 
   15741  An alternate way to write the above example is
   15742 
   15743      static const int array[] = { &&foo - &&foo, &&bar - &&foo,
   15744                                   &&hack - &&foo };
   15745      goto *(&&foo + array[i]);
   15746 
   15747 This is more friendly to code living in shared libraries, as it reduces
   15748 the number of dynamic relocations that are needed, and by consequence,
   15749 allows the data to be read-only.
   15750 
   15751  The `&&foo' expressions for the same label might have different values
   15752 if the containing function is inlined or cloned.  If a program relies on
   15753 them being always the same, `__attribute__((__noinline__))' should be
   15754 used to prevent inlining.  If `&&foo' is used in a static variable
   15755 initializer, inlining is forbidden.
   15756 
   15757  ---------- Footnotes ----------
   15758 
   15759  (1) The analogous feature in Fortran is called an assigned goto, but
   15760 that name seems inappropriate in C, where one can do more than simply
   15761 store label addresses in label variables.
   15762 
   15763 
   15764 File: gcc.info,  Node: Nested Functions,  Next: Constructing Calls,  Prev: Labels as Values,  Up: C Extensions
   15765 
   15766 5.4 Nested Functions
   15767 ====================
   15768 
   15769 A "nested function" is a function defined inside another function.
   15770 (Nested functions are not supported for GNU C++.)  The nested function's
   15771 name is local to the block where it is defined.  For example, here we
   15772 define a nested function named `square', and call it twice:
   15773 
   15774      foo (double a, double b)
   15775      {
   15776        double square (double z) { return z * z; }
   15777 
   15778        return square (a) + square (b);
   15779      }
   15780 
   15781  The nested function can access all the variables of the containing
   15782 function that are visible at the point of its definition.  This is
   15783 called "lexical scoping".  For example, here we show a nested function
   15784 which uses an inherited variable named `offset':
   15785 
   15786      bar (int *array, int offset, int size)
   15787      {
   15788        int access (int *array, int index)
   15789          { return array[index + offset]; }
   15790        int i;
   15791        /* ... */
   15792        for (i = 0; i < size; i++)
   15793          /* ... */ access (array, i) /* ... */
   15794      }
   15795 
   15796  Nested function definitions are permitted within functions in the
   15797 places where variable definitions are allowed; that is, in any block,
   15798 mixed with the other declarations and statements in the block.
   15799 
   15800  It is possible to call the nested function from outside the scope of
   15801 its name by storing its address or passing the address to another
   15802 function:
   15803 
   15804      hack (int *array, int size)
   15805      {
   15806        void store (int index, int value)
   15807          { array[index] = value; }
   15808 
   15809        intermediate (store, size);
   15810      }
   15811 
   15812  Here, the function `intermediate' receives the address of `store' as
   15813 an argument.  If `intermediate' calls `store', the arguments given to
   15814 `store' are used to store into `array'.  But this technique works only
   15815 so long as the containing function (`hack', in this example) does not
   15816 exit.
   15817 
   15818  If you try to call the nested function through its address after the
   15819 containing function has exited, all hell will break loose.  If you try
   15820 to call it after a containing scope level has exited, and if it refers
   15821 to some of the variables that are no longer in scope, you may be lucky,
   15822 but it's not wise to take the risk.  If, however, the nested function
   15823 does not refer to anything that has gone out of scope, you should be
   15824 safe.
   15825 
   15826  GCC implements taking the address of a nested function using a
   15827 technique called "trampolines".  A paper describing them is available as
   15828 
   15829 `http://people.debian.org/~aaronl/Usenix88-lexic.pdf'.
   15830 
   15831  A nested function can jump to a label inherited from a containing
   15832 function, provided the label was explicitly declared in the containing
   15833 function (*note Local Labels::).  Such a jump returns instantly to the
   15834 containing function, exiting the nested function which did the `goto'
   15835 and any intermediate functions as well.  Here is an example:
   15836 
   15837      bar (int *array, int offset, int size)
   15838      {
   15839        __label__ failure;
   15840        int access (int *array, int index)
   15841          {
   15842            if (index > size)
   15843              goto failure;
   15844            return array[index + offset];
   15845          }
   15846        int i;
   15847        /* ... */
   15848        for (i = 0; i < size; i++)
   15849          /* ... */ access (array, i) /* ... */
   15850        /* ... */
   15851        return 0;
   15852 
   15853       /* Control comes here from `access'
   15854          if it detects an error.  */
   15855       failure:
   15856        return -1;
   15857      }
   15858 
   15859  A nested function always has no linkage.  Declaring one with `extern'
   15860 or `static' is erroneous.  If you need to declare the nested function
   15861 before its definition, use `auto' (which is otherwise meaningless for
   15862 function declarations).
   15863 
   15864      bar (int *array, int offset, int size)
   15865      {
   15866        __label__ failure;
   15867        auto int access (int *, int);
   15868        /* ... */
   15869        int access (int *array, int index)
   15870          {
   15871            if (index > size)
   15872              goto failure;
   15873            return array[index + offset];
   15874          }
   15875        /* ... */
   15876      }
   15877 
   15878 
   15879 File: gcc.info,  Node: Constructing Calls,  Next: Typeof,  Prev: Nested Functions,  Up: C Extensions
   15880 
   15881 5.5 Constructing Function Calls
   15882 ===============================
   15883 
   15884 Using the built-in functions described below, you can record the
   15885 arguments a function received, and call another function with the same
   15886 arguments, without knowing the number or types of the arguments.
   15887 
   15888  You can also record the return value of that function call, and later
   15889 return that value, without knowing what data type the function tried to
   15890 return (as long as your caller expects that data type).
   15891 
   15892  However, these built-in functions may interact badly with some
   15893 sophisticated features or other extensions of the language.  It is,
   15894 therefore, not recommended to use them outside very simple functions
   15895 acting as mere forwarders for their arguments.
   15896 
   15897  -- Built-in Function: void * __builtin_apply_args ()
   15898      This built-in function returns a pointer to data describing how to
   15899      perform a call with the same arguments as were passed to the
   15900      current function.
   15901 
   15902      The function saves the arg pointer register, structure value
   15903      address, and all registers that might be used to pass arguments to
   15904      a function into a block of memory allocated on the stack.  Then it
   15905      returns the address of that block.
   15906 
   15907  -- Built-in Function: void * __builtin_apply (void (*FUNCTION)(), void
   15908           *ARGUMENTS, size_t SIZE)
   15909      This built-in function invokes FUNCTION with a copy of the
   15910      parameters described by ARGUMENTS and SIZE.
   15911 
   15912      The value of ARGUMENTS should be the value returned by
   15913      `__builtin_apply_args'.  The argument SIZE specifies the size of
   15914      the stack argument data, in bytes.
   15915 
   15916      This function returns a pointer to data describing how to return
   15917      whatever value was returned by FUNCTION.  The data is saved in a
   15918      block of memory allocated on the stack.
   15919 
   15920      It is not always simple to compute the proper value for SIZE.  The
   15921      value is used by `__builtin_apply' to compute the amount of data
   15922      that should be pushed on the stack and copied from the incoming
   15923      argument area.
   15924 
   15925  -- Built-in Function: void __builtin_return (void *RESULT)
   15926      This built-in function returns the value described by RESULT from
   15927      the containing function.  You should specify, for RESULT, a value
   15928      returned by `__builtin_apply'.
   15929 
   15930  -- Built-in Function: __builtin_va_arg_pack ()
   15931      This built-in function represents all anonymous arguments of an
   15932      inline function.  It can be used only in inline functions which
   15933      will be always inlined, never compiled as a separate function,
   15934      such as those using `__attribute__ ((__always_inline__))' or
   15935      `__attribute__ ((__gnu_inline__))' extern inline functions.  It
   15936      must be only passed as last argument to some other function with
   15937      variable arguments.  This is useful for writing small wrapper
   15938      inlines for variable argument functions, when using preprocessor
   15939      macros is undesirable.  For example:
   15940           extern int myprintf (FILE *f, const char *format, ...);
   15941           extern inline __attribute__ ((__gnu_inline__)) int
   15942           myprintf (FILE *f, const char *format, ...)
   15943           {
   15944             int r = fprintf (f, "myprintf: ");
   15945             if (r < 0)
   15946               return r;
   15947             int s = fprintf (f, format, __builtin_va_arg_pack ());
   15948             if (s < 0)
   15949               return s;
   15950             return r + s;
   15951           }
   15952 
   15953  -- Built-in Function: __builtin_va_arg_pack_len ()
   15954      This built-in function returns the number of anonymous arguments of
   15955      an inline function.  It can be used only in inline functions which
   15956      will be always inlined, never compiled as a separate function, such
   15957      as those using `__attribute__ ((__always_inline__))' or
   15958      `__attribute__ ((__gnu_inline__))' extern inline functions.  For
   15959      example following will do link or runtime checking of open
   15960      arguments for optimized code:
   15961           #ifdef __OPTIMIZE__
   15962           extern inline __attribute__((__gnu_inline__)) int
   15963           myopen (const char *path, int oflag, ...)
   15964           {
   15965             if (__builtin_va_arg_pack_len () > 1)
   15966               warn_open_too_many_arguments ();
   15967 
   15968             if (__builtin_constant_p (oflag))
   15969               {
   15970                 if ((oflag & O_CREAT) != 0 && __builtin_va_arg_pack_len () < 1)
   15971                   {
   15972                     warn_open_missing_mode ();
   15973                     return __open_2 (path, oflag);
   15974                   }
   15975                 return open (path, oflag, __builtin_va_arg_pack ());
   15976               }
   15977 
   15978             if (__builtin_va_arg_pack_len () < 1)
   15979               return __open_2 (path, oflag);
   15980 
   15981             return open (path, oflag, __builtin_va_arg_pack ());
   15982           }
   15983           #endif
   15984 
   15985 
   15986 File: gcc.info,  Node: Typeof,  Next: Conditionals,  Prev: Constructing Calls,  Up: C Extensions
   15987 
   15988 5.6 Referring to a Type with `typeof'
   15989 =====================================
   15990 
   15991 Another way to refer to the type of an expression is with `typeof'.
   15992 The syntax of using of this keyword looks like `sizeof', but the
   15993 construct acts semantically like a type name defined with `typedef'.
   15994 
   15995  There are two ways of writing the argument to `typeof': with an
   15996 expression or with a type.  Here is an example with an expression:
   15997 
   15998      typeof (x[0](1))
   15999 
   16000 This assumes that `x' is an array of pointers to functions; the type
   16001 described is that of the values of the functions.
   16002 
   16003  Here is an example with a typename as the argument:
   16004 
   16005      typeof (int *)
   16006 
   16007 Here the type described is that of pointers to `int'.
   16008 
   16009  If you are writing a header file that must work when included in ISO C
   16010 programs, write `__typeof__' instead of `typeof'.  *Note Alternate
   16011 Keywords::.
   16012 
   16013  A `typeof'-construct can be used anywhere a typedef name could be
   16014 used.  For example, you can use it in a declaration, in a cast, or
   16015 inside of `sizeof' or `typeof'.
   16016 
   16017  `typeof' is often useful in conjunction with the
   16018 statements-within-expressions feature.  Here is how the two together can
   16019 be used to define a safe "maximum" macro that operates on any
   16020 arithmetic type and evaluates each of its arguments exactly once:
   16021 
   16022      #define max(a,b) \
   16023        ({ typeof (a) _a = (a); \
   16024            typeof (b) _b = (b); \
   16025          _a > _b ? _a : _b; })
   16026 
   16027  The reason for using names that start with underscores for the local
   16028 variables is to avoid conflicts with variable names that occur within
   16029 the expressions that are substituted for `a' and `b'.  Eventually we
   16030 hope to design a new form of declaration syntax that allows you to
   16031 declare variables whose scopes start only after their initializers;
   16032 this will be a more reliable way to prevent such conflicts.
   16033 
   16034 Some more examples of the use of `typeof':
   16035 
   16036    * This declares `y' with the type of what `x' points to.
   16037 
   16038           typeof (*x) y;
   16039 
   16040    * This declares `y' as an array of such values.
   16041 
   16042           typeof (*x) y[4];
   16043 
   16044    * This declares `y' as an array of pointers to characters:
   16045 
   16046           typeof (typeof (char *)[4]) y;
   16047 
   16048      It is equivalent to the following traditional C declaration:
   16049 
   16050           char *y[4];
   16051 
   16052      To see the meaning of the declaration using `typeof', and why it
   16053      might be a useful way to write, rewrite it with these macros:
   16054 
   16055           #define pointer(T)  typeof(T *)
   16056           #define array(T, N) typeof(T [N])
   16057 
   16058      Now the declaration can be rewritten this way:
   16059 
   16060           array (pointer (char), 4) y;
   16061 
   16062      Thus, `array (pointer (char), 4)' is the type of arrays of 4
   16063      pointers to `char'.
   16064 
   16065  _Compatibility Note:_ In addition to `typeof', GCC 2 supported a more
   16066 limited extension which permitted one to write
   16067 
   16068      typedef T = EXPR;
   16069 
   16070 with the effect of declaring T to have the type of the expression EXPR.
   16071 This extension does not work with GCC 3 (versions between 3.0 and 3.2
   16072 will crash; 3.2.1 and later give an error).  Code which relies on it
   16073 should be rewritten to use `typeof':
   16074 
   16075      typedef typeof(EXPR) T;
   16076 
   16077 This will work with all versions of GCC.
   16078 
   16079 
   16080 File: gcc.info,  Node: Conditionals,  Next: Long Long,  Prev: Typeof,  Up: C Extensions
   16081 
   16082 5.7 Conditionals with Omitted Operands
   16083 ======================================
   16084 
   16085 The middle operand in a conditional expression may be omitted.  Then if
   16086 the first operand is nonzero, its value is the value of the conditional
   16087 expression.
   16088 
   16089  Therefore, the expression
   16090 
   16091      x ? : y
   16092 
   16093 has the value of `x' if that is nonzero; otherwise, the value of `y'.
   16094 
   16095  This example is perfectly equivalent to
   16096 
   16097      x ? x : y
   16098 
   16099 In this simple case, the ability to omit the middle operand is not
   16100 especially useful.  When it becomes useful is when the first operand
   16101 does, or may (if it is a macro argument), contain a side effect.  Then
   16102 repeating the operand in the middle would perform the side effect
   16103 twice.  Omitting the middle operand uses the value already computed
   16104 without the undesirable effects of recomputing it.
   16105 
   16106 
   16107 File: gcc.info,  Node: Long Long,  Next: Complex,  Prev: Conditionals,  Up: C Extensions
   16108 
   16109 5.8 Double-Word Integers
   16110 ========================
   16111 
   16112 ISO C99 supports data types for integers that are at least 64 bits wide,
   16113 and as an extension GCC supports them in C89 mode and in C++.  Simply
   16114 write `long long int' for a signed integer, or `unsigned long long int'
   16115 for an unsigned integer.  To make an integer constant of type `long
   16116 long int', add the suffix `LL' to the integer.  To make an integer
   16117 constant of type `unsigned long long int', add the suffix `ULL' to the
   16118 integer.
   16119 
   16120  You can use these types in arithmetic like any other integer types.
   16121 Addition, subtraction, and bitwise boolean operations on these types
   16122 are open-coded on all types of machines.  Multiplication is open-coded
   16123 if the machine supports fullword-to-doubleword a widening multiply
   16124 instruction.  Division and shifts are open-coded only on machines that
   16125 provide special support.  The operations that are not open-coded use
   16126 special library routines that come with GCC.
   16127 
   16128  There may be pitfalls when you use `long long' types for function
   16129 arguments, unless you declare function prototypes.  If a function
   16130 expects type `int' for its argument, and you pass a value of type `long
   16131 long int', confusion will result because the caller and the subroutine
   16132 will disagree about the number of bytes for the argument.  Likewise, if
   16133 the function expects `long long int' and you pass `int'.  The best way
   16134 to avoid such problems is to use prototypes.
   16135 
   16136 
   16137 File: gcc.info,  Node: Complex,  Next: Floating Types,  Prev: Long Long,  Up: C Extensions
   16138 
   16139 5.9 Complex Numbers
   16140 ===================
   16141 
   16142 ISO C99 supports complex floating data types, and as an extension GCC
   16143 supports them in C89 mode and in C++, and supports complex integer data
   16144 types which are not part of ISO C99.  You can declare complex types
   16145 using the keyword `_Complex'.  As an extension, the older GNU keyword
   16146 `__complex__' is also supported.
   16147 
   16148  For example, `_Complex double x;' declares `x' as a variable whose
   16149 real part and imaginary part are both of type `double'.  `_Complex
   16150 short int y;' declares `y' to have real and imaginary parts of type
   16151 `short int'; this is not likely to be useful, but it shows that the set
   16152 of complex types is complete.
   16153 
   16154  To write a constant with a complex data type, use the suffix `i' or
   16155 `j' (either one; they are equivalent).  For example, `2.5fi' has type
   16156 `_Complex float' and `3i' has type `_Complex int'.  Such a constant
   16157 always has a pure imaginary value, but you can form any complex value
   16158 you like by adding one to a real constant.  This is a GNU extension; if
   16159 you have an ISO C99 conforming C library (such as GNU libc), and want
   16160 to construct complex constants of floating type, you should include
   16161 `<complex.h>' and use the macros `I' or `_Complex_I' instead.
   16162 
   16163  To extract the real part of a complex-valued expression EXP, write
   16164 `__real__ EXP'.  Likewise, use `__imag__' to extract the imaginary
   16165 part.  This is a GNU extension; for values of floating type, you should
   16166 use the ISO C99 functions `crealf', `creal', `creall', `cimagf',
   16167 `cimag' and `cimagl', declared in `<complex.h>' and also provided as
   16168 built-in functions by GCC.
   16169 
   16170  The operator `~' performs complex conjugation when used on a value
   16171 with a complex type.  This is a GNU extension; for values of floating
   16172 type, you should use the ISO C99 functions `conjf', `conj' and `conjl',
   16173 declared in `<complex.h>' and also provided as built-in functions by
   16174 GCC.
   16175 
   16176  GCC can allocate complex automatic variables in a noncontiguous
   16177 fashion; it's even possible for the real part to be in a register while
   16178 the imaginary part is on the stack (or vice-versa).  Only the DWARF2
   16179 debug info format can represent this, so use of DWARF2 is recommended.
   16180 If you are using the stabs debug info format, GCC describes a
   16181 noncontiguous complex variable as if it were two separate variables of
   16182 noncomplex type.  If the variable's actual name is `foo', the two
   16183 fictitious variables are named `foo$real' and `foo$imag'.  You can
   16184 examine and set these two fictitious variables with your debugger.
   16185 
   16186 
   16187 File: gcc.info,  Node: Floating Types,  Next: Decimal Float,  Prev: Complex,  Up: C Extensions
   16188 
   16189 5.10 Additional Floating Types
   16190 ==============================
   16191 
   16192 As an extension, the GNU C compiler supports additional floating types,
   16193 `__float80' and `__float128' to support 80bit (`XFmode') and 128 bit
   16194 (`TFmode') floating types.  Support for additional types includes the
   16195 arithmetic operators: add, subtract, multiply, divide; unary arithmetic
   16196 operators; relational operators; equality operators; and conversions to
   16197 and from integer and other floating types.  Use a suffix `w' or `W' in
   16198 a literal constant of type `__float80' and `q' or `Q' for `_float128'.
   16199 You can declare complex types using the corresponding internal complex
   16200 type, `XCmode' for `__float80' type and `TCmode' for `__float128' type:
   16201 
   16202      typedef _Complex float __attribute__((mode(TC))) _Complex128;
   16203      typedef _Complex float __attribute__((mode(XC))) _Complex80;
   16204 
   16205  Not all targets support additional floating point types.  `__float80'
   16206 is supported on i386, x86_64 and ia64 targets and target `__float128'
   16207 is supported on x86_64 and ia64 targets.
   16208 
   16209 
   16210 File: gcc.info,  Node: Decimal Float,  Next: Hex Floats,  Prev: Floating Types,  Up: C Extensions
   16211 
   16212 5.11 Decimal Floating Types
   16213 ===========================
   16214 
   16215 As an extension, the GNU C compiler supports decimal floating types as
   16216 defined in the N1176 draft of ISO/IEC WDTR24732.  Support for decimal
   16217 floating types in GCC will evolve as the draft technical report changes.
   16218 Calling conventions for any target might also change.  Not all targets
   16219 support decimal floating types.
   16220 
   16221  The decimal floating types are `_Decimal32', `_Decimal64', and
   16222 `_Decimal128'.  They use a radix of ten, unlike the floating types
   16223 `float', `double', and `long double' whose radix is not specified by
   16224 the C standard but is usually two.
   16225 
   16226  Support for decimal floating types includes the arithmetic operators
   16227 add, subtract, multiply, divide; unary arithmetic operators; relational
   16228 operators; equality operators; and conversions to and from integer and
   16229 other floating types.  Use a suffix `df' or `DF' in a literal constant
   16230 of type `_Decimal32', `dd' or `DD' for `_Decimal64', and `dl' or `DL'
   16231 for `_Decimal128'.
   16232 
   16233  GCC support of decimal float as specified by the draft technical report
   16234 is incomplete:
   16235 
   16236    * Translation time data type (TTDT) is not supported.
   16237 
   16238    * When the value of a decimal floating type cannot be represented in
   16239      the integer type to which it is being converted, the result is
   16240      undefined rather than the result value specified by the draft
   16241      technical report.
   16242 
   16243  Types `_Decimal32', `_Decimal64', and `_Decimal128' are supported by
   16244 the DWARF2 debug information format.
   16245 
   16246 
   16247 File: gcc.info,  Node: Hex Floats,  Next: Fixed-Point,  Prev: Decimal Float,  Up: C Extensions
   16248 
   16249 5.12 Hex Floats
   16250 ===============
   16251 
   16252 ISO C99 supports floating-point numbers written not only in the usual
   16253 decimal notation, such as `1.55e1', but also numbers such as `0x1.fp3'
   16254 written in hexadecimal format.  As a GNU extension, GCC supports this
   16255 in C89 mode (except in some cases when strictly conforming) and in C++.
   16256 In that format the `0x' hex introducer and the `p' or `P' exponent
   16257 field are mandatory.  The exponent is a decimal number that indicates
   16258 the power of 2 by which the significant part will be multiplied.  Thus
   16259 `0x1.f' is 1 15/16, `p3' multiplies it by 8, and the value of `0x1.fp3'
   16260 is the same as `1.55e1'.
   16261 
   16262  Unlike for floating-point numbers in the decimal notation the exponent
   16263 is always required in the hexadecimal notation.  Otherwise the compiler
   16264 would not be able to resolve the ambiguity of, e.g., `0x1.f'.  This
   16265 could mean `1.0f' or `1.9375' since `f' is also the extension for
   16266 floating-point constants of type `float'.
   16267 
   16268 
   16269 File: gcc.info,  Node: Fixed-Point,  Next: Zero Length,  Prev: Hex Floats,  Up: C Extensions
   16270 
   16271 5.13 Fixed-Point Types
   16272 ======================
   16273 
   16274 As an extension, the GNU C compiler supports fixed-point types as
   16275 defined in the N1169 draft of ISO/IEC DTR 18037.  Support for
   16276 fixed-point types in GCC will evolve as the draft technical report
   16277 changes.  Calling conventions for any target might also change.  Not
   16278 all targets support fixed-point types.
   16279 
   16280  The fixed-point types are `short _Fract', `_Fract', `long _Fract',
   16281 `long long _Fract', `unsigned short _Fract', `unsigned _Fract',
   16282 `unsigned long _Fract', `unsigned long long _Fract', `_Sat short
   16283 _Fract', `_Sat _Fract', `_Sat long _Fract', `_Sat long long _Fract',
   16284 `_Sat unsigned short _Fract', `_Sat unsigned _Fract', `_Sat unsigned
   16285 long _Fract', `_Sat unsigned long long _Fract', `short _Accum',
   16286 `_Accum', `long _Accum', `long long _Accum', `unsigned short _Accum',
   16287 `unsigned _Accum', `unsigned long _Accum', `unsigned long long _Accum',
   16288 `_Sat short _Accum', `_Sat _Accum', `_Sat long _Accum', `_Sat long long
   16289 _Accum', `_Sat unsigned short _Accum', `_Sat unsigned _Accum', `_Sat
   16290 unsigned long _Accum', `_Sat unsigned long long _Accum'.  Fixed-point
   16291 data values contain fractional and optional integral parts.  The format
   16292 of fixed-point data varies and depends on the target machine.
   16293 
   16294  Support for fixed-point types includes prefix and postfix increment
   16295 and decrement operators (`++', `--'); unary arithmetic operators (`+',
   16296 `-', `!'); binary arithmetic operators (`+', `-', `*', `/'); binary
   16297 shift operators (`<<', `>>'); relational operators (`<', `<=', `>=',
   16298 `>'); equality operators (`==', `!='); assignment operators (`+=',
   16299 `-=', `*=', `/=', `<<=', `>>='); and conversions to and from integer,
   16300 floating-point, or fixed-point types.
   16301 
   16302  Use a suffix `hr' or `HR' in a literal constant of type `short _Fract'
   16303 and `_Sat short _Fract', `r' or `R' for `_Fract' and `_Sat _Fract',
   16304 `lr' or `LR' for `long _Fract' and `_Sat long _Fract', `llr' or `LLR'
   16305 for `long long _Fract' and `_Sat long long _Fract', `uhr' or `UHR' for
   16306 `unsigned short _Fract' and `_Sat unsigned short _Fract', `ur' or `UR'
   16307 for `unsigned _Fract' and `_Sat unsigned _Fract', `ulr' or `ULR' for
   16308 `unsigned long _Fract' and `_Sat unsigned long _Fract', `ullr' or
   16309 `ULLR' for `unsigned long long _Fract' and `_Sat unsigned long long
   16310 _Fract', `hk' or `HK' for `short _Accum' and `_Sat short _Accum', `k'
   16311 or `K' for `_Accum' and `_Sat _Accum', `lk' or `LK' for `long _Accum'
   16312 and `_Sat long _Accum', `llk' or `LLK' for `long long _Accum' and `_Sat
   16313 long long _Accum', `uhk' or `UHK' for `unsigned short _Accum' and `_Sat
   16314 unsigned short _Accum', `uk' or `UK' for `unsigned _Accum' and `_Sat
   16315 unsigned _Accum', `ulk' or `ULK' for `unsigned long _Accum' and `_Sat
   16316 unsigned long _Accum', and `ullk' or `ULLK' for `unsigned long long
   16317 _Accum' and `_Sat unsigned long long _Accum'.
   16318 
   16319  GCC support of fixed-point types as specified by the draft technical
   16320 report is incomplete:
   16321 
   16322    * Pragmas to control overflow and rounding behaviors are not
   16323      implemented.
   16324 
   16325  Fixed-point types are supported by the DWARF2 debug information format.
   16326 
   16327 
   16328 File: gcc.info,  Node: Zero Length,  Next: Variable Length,  Prev: Fixed-Point,  Up: C Extensions
   16329 
   16330 5.14 Arrays of Length Zero
   16331 ==========================
   16332 
   16333 Zero-length arrays are allowed in GNU C.  They are very useful as the
   16334 last element of a structure which is really a header for a
   16335 variable-length object:
   16336 
   16337      struct line {
   16338        int length;
   16339        char contents[0];
   16340      };
   16341 
   16342      struct line *thisline = (struct line *)
   16343        malloc (sizeof (struct line) + this_length);
   16344      thisline->length = this_length;
   16345 
   16346  In ISO C90, you would have to give `contents' a length of 1, which
   16347 means either you waste space or complicate the argument to `malloc'.
   16348 
   16349  In ISO C99, you would use a "flexible array member", which is slightly
   16350 different in syntax and semantics:
   16351 
   16352    * Flexible array members are written as `contents[]' without the `0'.
   16353 
   16354    * Flexible array members have incomplete type, and so the `sizeof'
   16355      operator may not be applied.  As a quirk of the original
   16356      implementation of zero-length arrays, `sizeof' evaluates to zero.
   16357 
   16358    * Flexible array members may only appear as the last member of a
   16359      `struct' that is otherwise non-empty.
   16360 
   16361    * A structure containing a flexible array member, or a union
   16362      containing such a structure (possibly recursively), may not be a
   16363      member of a structure or an element of an array.  (However, these
   16364      uses are permitted by GCC as extensions.)
   16365 
   16366  GCC versions before 3.0 allowed zero-length arrays to be statically
   16367 initialized, as if they were flexible arrays.  In addition to those
   16368 cases that were useful, it also allowed initializations in situations
   16369 that would corrupt later data.  Non-empty initialization of zero-length
   16370 arrays is now treated like any case where there are more initializer
   16371 elements than the array holds, in that a suitable warning about "excess
   16372 elements in array" is given, and the excess elements (all of them, in
   16373 this case) are ignored.
   16374 
   16375  Instead GCC allows static initialization of flexible array members.
   16376 This is equivalent to defining a new structure containing the original
   16377 structure followed by an array of sufficient size to contain the data.
   16378 I.e. in the following, `f1' is constructed as if it were declared like
   16379 `f2'.
   16380 
   16381      struct f1 {
   16382        int x; int y[];
   16383      } f1 = { 1, { 2, 3, 4 } };
   16384 
   16385      struct f2 {
   16386        struct f1 f1; int data[3];
   16387      } f2 = { { 1 }, { 2, 3, 4 } };
   16388 
   16389 The convenience of this extension is that `f1' has the desired type,
   16390 eliminating the need to consistently refer to `f2.f1'.
   16391 
   16392  This has symmetry with normal static arrays, in that an array of
   16393 unknown size is also written with `[]'.
   16394 
   16395  Of course, this extension only makes sense if the extra data comes at
   16396 the end of a top-level object, as otherwise we would be overwriting
   16397 data at subsequent offsets.  To avoid undue complication and confusion
   16398 with initialization of deeply nested arrays, we simply disallow any
   16399 non-empty initialization except when the structure is the top-level
   16400 object.  For example:
   16401 
   16402      struct foo { int x; int y[]; };
   16403      struct bar { struct foo z; };
   16404 
   16405      struct foo a = { 1, { 2, 3, 4 } };        // Valid.
   16406      struct bar b = { { 1, { 2, 3, 4 } } };    // Invalid.
   16407      struct bar c = { { 1, { } } };            // Valid.
   16408      struct foo d[1] = { { 1 { 2, 3, 4 } } };  // Invalid.
   16409 
   16410 
   16411 File: gcc.info,  Node: Empty Structures,  Next: Variadic Macros,  Prev: Variable Length,  Up: C Extensions
   16412 
   16413 5.15 Structures With No Members
   16414 ===============================
   16415 
   16416 GCC permits a C structure to have no members:
   16417 
   16418      struct empty {
   16419      };
   16420 
   16421  The structure will have size zero.  In C++, empty structures are part
   16422 of the language.  G++ treats empty structures as if they had a single
   16423 member of type `char'.
   16424 
   16425 
   16426 File: gcc.info,  Node: Variable Length,  Next: Empty Structures,  Prev: Zero Length,  Up: C Extensions
   16427 
   16428 5.16 Arrays of Variable Length
   16429 ==============================
   16430 
   16431 Variable-length automatic arrays are allowed in ISO C99, and as an
   16432 extension GCC accepts them in C89 mode and in C++.  (However, GCC's
   16433 implementation of variable-length arrays does not yet conform in detail
   16434 to the ISO C99 standard.)  These arrays are declared like any other
   16435 automatic arrays, but with a length that is not a constant expression.
   16436 The storage is allocated at the point of declaration and deallocated
   16437 when the brace-level is exited.  For example:
   16438 
   16439      FILE *
   16440      concat_fopen (char *s1, char *s2, char *mode)
   16441      {
   16442        char str[strlen (s1) + strlen (s2) + 1];
   16443        strcpy (str, s1);
   16444        strcat (str, s2);
   16445        return fopen (str, mode);
   16446      }
   16447 
   16448  Jumping or breaking out of the scope of the array name deallocates the
   16449 storage.  Jumping into the scope is not allowed; you get an error
   16450 message for it.
   16451 
   16452  You can use the function `alloca' to get an effect much like
   16453 variable-length arrays.  The function `alloca' is available in many
   16454 other C implementations (but not in all).  On the other hand,
   16455 variable-length arrays are more elegant.
   16456 
   16457  There are other differences between these two methods.  Space allocated
   16458 with `alloca' exists until the containing _function_ returns.  The
   16459 space for a variable-length array is deallocated as soon as the array
   16460 name's scope ends.  (If you use both variable-length arrays and
   16461 `alloca' in the same function, deallocation of a variable-length array
   16462 will also deallocate anything more recently allocated with `alloca'.)
   16463 
   16464  You can also use variable-length arrays as arguments to functions:
   16465 
   16466      struct entry
   16467      tester (int len, char data[len][len])
   16468      {
   16469        /* ... */
   16470      }
   16471 
   16472  The length of an array is computed once when the storage is allocated
   16473 and is remembered for the scope of the array in case you access it with
   16474 `sizeof'.
   16475 
   16476  If you want to pass the array first and the length afterward, you can
   16477 use a forward declaration in the parameter list--another GNU extension.
   16478 
   16479      struct entry
   16480      tester (int len; char data[len][len], int len)
   16481      {
   16482        /* ... */
   16483      }
   16484 
   16485  The `int len' before the semicolon is a "parameter forward
   16486 declaration", and it serves the purpose of making the name `len' known
   16487 when the declaration of `data' is parsed.
   16488 
   16489  You can write any number of such parameter forward declarations in the
   16490 parameter list.  They can be separated by commas or semicolons, but the
   16491 last one must end with a semicolon, which is followed by the "real"
   16492 parameter declarations.  Each forward declaration must match a "real"
   16493 declaration in parameter name and data type.  ISO C99 does not support
   16494 parameter forward declarations.
   16495 
   16496 
   16497 File: gcc.info,  Node: Variadic Macros,  Next: Escaped Newlines,  Prev: Empty Structures,  Up: C Extensions
   16498 
   16499 5.17 Macros with a Variable Number of Arguments.
   16500 ================================================
   16501 
   16502 In the ISO C standard of 1999, a macro can be declared to accept a
   16503 variable number of arguments much as a function can.  The syntax for
   16504 defining the macro is similar to that of a function.  Here is an
   16505 example:
   16506 
   16507      #define debug(format, ...) fprintf (stderr, format, __VA_ARGS__)
   16508 
   16509  Here `...' is a "variable argument".  In the invocation of such a
   16510 macro, it represents the zero or more tokens until the closing
   16511 parenthesis that ends the invocation, including any commas.  This set of
   16512 tokens replaces the identifier `__VA_ARGS__' in the macro body wherever
   16513 it appears.  See the CPP manual for more information.
   16514 
   16515  GCC has long supported variadic macros, and used a different syntax
   16516 that allowed you to give a name to the variable arguments just like any
   16517 other argument.  Here is an example:
   16518 
   16519      #define debug(format, args...) fprintf (stderr, format, args)
   16520 
   16521  This is in all ways equivalent to the ISO C example above, but arguably
   16522 more readable and descriptive.
   16523 
   16524  GNU CPP has two further variadic macro extensions, and permits them to
   16525 be used with either of the above forms of macro definition.
   16526 
   16527  In standard C, you are not allowed to leave the variable argument out
   16528 entirely; but you are allowed to pass an empty argument.  For example,
   16529 this invocation is invalid in ISO C, because there is no comma after
   16530 the string:
   16531 
   16532      debug ("A message")
   16533 
   16534  GNU CPP permits you to completely omit the variable arguments in this
   16535 way.  In the above examples, the compiler would complain, though since
   16536 the expansion of the macro still has the extra comma after the format
   16537 string.
   16538 
   16539  To help solve this problem, CPP behaves specially for variable
   16540 arguments used with the token paste operator, `##'.  If instead you
   16541 write
   16542 
   16543      #define debug(format, ...) fprintf (stderr, format, ## __VA_ARGS__)
   16544 
   16545  and if the variable arguments are omitted or empty, the `##' operator
   16546 causes the preprocessor to remove the comma before it.  If you do
   16547 provide some variable arguments in your macro invocation, GNU CPP does
   16548 not complain about the paste operation and instead places the variable
   16549 arguments after the comma.  Just like any other pasted macro argument,
   16550 these arguments are not macro expanded.
   16551 
   16552 
   16553 File: gcc.info,  Node: Escaped Newlines,  Next: Subscripting,  Prev: Variadic Macros,  Up: C Extensions
   16554 
   16555 5.18 Slightly Looser Rules for Escaped Newlines
   16556 ===============================================
   16557 
   16558 Recently, the preprocessor has relaxed its treatment of escaped
   16559 newlines.  Previously, the newline had to immediately follow a
   16560 backslash.  The current implementation allows whitespace in the form of
   16561 spaces, horizontal and vertical tabs, and form feeds between the
   16562 backslash and the subsequent newline.  The preprocessor issues a
   16563 warning, but treats it as a valid escaped newline and combines the two
   16564 lines to form a single logical line.  This works within comments and
   16565 tokens, as well as between tokens.  Comments are _not_ treated as
   16566 whitespace for the purposes of this relaxation, since they have not yet
   16567 been replaced with spaces.
   16568 
   16569 
   16570 File: gcc.info,  Node: Subscripting,  Next: Pointer Arith,  Prev: Escaped Newlines,  Up: C Extensions
   16571 
   16572 5.19 Non-Lvalue Arrays May Have Subscripts
   16573 ==========================================
   16574 
   16575 In ISO C99, arrays that are not lvalues still decay to pointers, and
   16576 may be subscripted, although they may not be modified or used after the
   16577 next sequence point and the unary `&' operator may not be applied to
   16578 them.  As an extension, GCC allows such arrays to be subscripted in C89
   16579 mode, though otherwise they do not decay to pointers outside C99 mode.
   16580 For example, this is valid in GNU C though not valid in C89:
   16581 
   16582      struct foo {int a[4];};
   16583 
   16584      struct foo f();
   16585 
   16586      bar (int index)
   16587      {
   16588        return f().a[index];
   16589      }
   16590 
   16591 
   16592 File: gcc.info,  Node: Pointer Arith,  Next: Initializers,  Prev: Subscripting,  Up: C Extensions
   16593 
   16594 5.20 Arithmetic on `void'- and Function-Pointers
   16595 ================================================
   16596 
   16597 In GNU C, addition and subtraction operations are supported on pointers
   16598 to `void' and on pointers to functions.  This is done by treating the
   16599 size of a `void' or of a function as 1.
   16600 
   16601  A consequence of this is that `sizeof' is also allowed on `void' and
   16602 on function types, and returns 1.
   16603 
   16604  The option `-Wpointer-arith' requests a warning if these extensions
   16605 are used.
   16606 
   16607 
   16608 File: gcc.info,  Node: Initializers,  Next: Compound Literals,  Prev: Pointer Arith,  Up: C Extensions
   16609 
   16610 5.21 Non-Constant Initializers
   16611 ==============================
   16612 
   16613 As in standard C++ and ISO C99, the elements of an aggregate
   16614 initializer for an automatic variable are not required to be constant
   16615 expressions in GNU C.  Here is an example of an initializer with
   16616 run-time varying elements:
   16617 
   16618      foo (float f, float g)
   16619      {
   16620        float beat_freqs[2] = { f-g, f+g };
   16621        /* ... */
   16622      }
   16623 
   16624 
   16625 File: gcc.info,  Node: Compound Literals,  Next: Designated Inits,  Prev: Initializers,  Up: C Extensions
   16626 
   16627 5.22 Compound Literals
   16628 ======================
   16629 
   16630 ISO C99 supports compound literals.  A compound literal looks like a
   16631 cast containing an initializer.  Its value is an object of the type
   16632 specified in the cast, containing the elements specified in the
   16633 initializer; it is an lvalue.  As an extension, GCC supports compound
   16634 literals in C89 mode and in C++.
   16635 
   16636  Usually, the specified type is a structure.  Assume that `struct foo'
   16637 and `structure' are declared as shown:
   16638 
   16639      struct foo {int a; char b[2];} structure;
   16640 
   16641 Here is an example of constructing a `struct foo' with a compound
   16642 literal:
   16643 
   16644      structure = ((struct foo) {x + y, 'a', 0});
   16645 
   16646 This is equivalent to writing the following:
   16647 
   16648      {
   16649        struct foo temp = {x + y, 'a', 0};
   16650        structure = temp;
   16651      }
   16652 
   16653  You can also construct an array.  If all the elements of the compound
   16654 literal are (made up of) simple constant expressions, suitable for use
   16655 in initializers of objects of static storage duration, then the compound
   16656 literal can be coerced to a pointer to its first element and used in
   16657 such an initializer, as shown here:
   16658 
   16659      char **foo = (char *[]) { "x", "y", "z" };
   16660 
   16661  Compound literals for scalar types and union types are is also
   16662 allowed, but then the compound literal is equivalent to a cast.
   16663 
   16664  As a GNU extension, GCC allows initialization of objects with static
   16665 storage duration by compound literals (which is not possible in ISO
   16666 C99, because the initializer is not a constant).  It is handled as if
   16667 the object was initialized only with the bracket enclosed list if the
   16668 types of the compound literal and the object match.  The initializer
   16669 list of the compound literal must be constant.  If the object being
   16670 initialized has array type of unknown size, the size is determined by
   16671 compound literal size.
   16672 
   16673      static struct foo x = (struct foo) {1, 'a', 'b'};
   16674      static int y[] = (int []) {1, 2, 3};
   16675      static int z[] = (int [3]) {1};
   16676 
   16677 The above lines are equivalent to the following:
   16678      static struct foo x = {1, 'a', 'b'};
   16679      static int y[] = {1, 2, 3};
   16680      static int z[] = {1, 0, 0};
   16681 
   16682 
   16683 File: gcc.info,  Node: Designated Inits,  Next: Cast to Union,  Prev: Compound Literals,  Up: C Extensions
   16684 
   16685 5.23 Designated Initializers
   16686 ============================
   16687 
   16688 Standard C89 requires the elements of an initializer to appear in a
   16689 fixed order, the same as the order of the elements in the array or
   16690 structure being initialized.
   16691 
   16692  In ISO C99 you can give the elements in any order, specifying the array
   16693 indices or structure field names they apply to, and GNU C allows this as
   16694 an extension in C89 mode as well.  This extension is not implemented in
   16695 GNU C++.
   16696 
   16697  To specify an array index, write `[INDEX] =' before the element value.
   16698 For example,
   16699 
   16700      int a[6] = { [4] = 29, [2] = 15 };
   16701 
   16702 is equivalent to
   16703 
   16704      int a[6] = { 0, 0, 15, 0, 29, 0 };
   16705 
   16706 The index values must be constant expressions, even if the array being
   16707 initialized is automatic.
   16708 
   16709  An alternative syntax for this which has been obsolete since GCC 2.5
   16710 but GCC still accepts is to write `[INDEX]' before the element value,
   16711 with no `='.
   16712 
   16713  To initialize a range of elements to the same value, write `[FIRST ...
   16714 LAST] = VALUE'.  This is a GNU extension.  For example,
   16715 
   16716      int widths[] = { [0 ... 9] = 1, [10 ... 99] = 2, [100] = 3 };
   16717 
   16718 If the value in it has side-effects, the side-effects will happen only
   16719 once, not for each initialized field by the range initializer.
   16720 
   16721 Note that the length of the array is the highest value specified plus
   16722 one.
   16723 
   16724  In a structure initializer, specify the name of a field to initialize
   16725 with `.FIELDNAME =' before the element value.  For example, given the
   16726 following structure,
   16727 
   16728      struct point { int x, y; };
   16729 
   16730 the following initialization
   16731 
   16732      struct point p = { .y = yvalue, .x = xvalue };
   16733 
   16734 is equivalent to
   16735 
   16736      struct point p = { xvalue, yvalue };
   16737 
   16738  Another syntax which has the same meaning, obsolete since GCC 2.5, is
   16739 `FIELDNAME:', as shown here:
   16740 
   16741      struct point p = { y: yvalue, x: xvalue };
   16742 
   16743  The `[INDEX]' or `.FIELDNAME' is known as a "designator".  You can
   16744 also use a designator (or the obsolete colon syntax) when initializing
   16745 a union, to specify which element of the union should be used.  For
   16746 example,
   16747 
   16748      union foo { int i; double d; };
   16749 
   16750      union foo f = { .d = 4 };
   16751 
   16752 will convert 4 to a `double' to store it in the union using the second
   16753 element.  By contrast, casting 4 to type `union foo' would store it
   16754 into the union as the integer `i', since it is an integer.  (*Note Cast
   16755 to Union::.)
   16756 
   16757  You can combine this technique of naming elements with ordinary C
   16758 initialization of successive elements.  Each initializer element that
   16759 does not have a designator applies to the next consecutive element of
   16760 the array or structure.  For example,
   16761 
   16762      int a[6] = { [1] = v1, v2, [4] = v4 };
   16763 
   16764 is equivalent to
   16765 
   16766      int a[6] = { 0, v1, v2, 0, v4, 0 };
   16767 
   16768  Labeling the elements of an array initializer is especially useful
   16769 when the indices are characters or belong to an `enum' type.  For
   16770 example:
   16771 
   16772      int whitespace[256]
   16773        = { [' '] = 1, ['\t'] = 1, ['\h'] = 1,
   16774            ['\f'] = 1, ['\n'] = 1, ['\r'] = 1 };
   16775 
   16776  You can also write a series of `.FIELDNAME' and `[INDEX]' designators
   16777 before an `=' to specify a nested subobject to initialize; the list is
   16778 taken relative to the subobject corresponding to the closest
   16779 surrounding brace pair.  For example, with the `struct point'
   16780 declaration above:
   16781 
   16782      struct point ptarray[10] = { [2].y = yv2, [2].x = xv2, [0].x = xv0 };
   16783 
   16784 If the same field is initialized multiple times, it will have value from
   16785 the last initialization.  If any such overridden initialization has
   16786 side-effect, it is unspecified whether the side-effect happens or not.
   16787 Currently, GCC will discard them and issue a warning.
   16788 
   16789 
   16790 File: gcc.info,  Node: Case Ranges,  Next: Mixed Declarations,  Prev: Cast to Union,  Up: C Extensions
   16791 
   16792 5.24 Case Ranges
   16793 ================
   16794 
   16795 You can specify a range of consecutive values in a single `case' label,
   16796 like this:
   16797 
   16798      case LOW ... HIGH:
   16799 
   16800 This has the same effect as the proper number of individual `case'
   16801 labels, one for each integer value from LOW to HIGH, inclusive.
   16802 
   16803  This feature is especially useful for ranges of ASCII character codes:
   16804 
   16805      case 'A' ... 'Z':
   16806 
   16807  *Be careful:* Write spaces around the `...', for otherwise it may be
   16808 parsed wrong when you use it with integer values.  For example, write
   16809 this:
   16810 
   16811      case 1 ... 5:
   16812 
   16813 rather than this:
   16814 
   16815      case 1...5:
   16816 
   16817 
   16818 File: gcc.info,  Node: Cast to Union,  Next: Case Ranges,  Prev: Designated Inits,  Up: C Extensions
   16819 
   16820 5.25 Cast to a Union Type
   16821 =========================
   16822 
   16823 A cast to union type is similar to other casts, except that the type
   16824 specified is a union type.  You can specify the type either with `union
   16825 TAG' or with a typedef name.  A cast to union is actually a constructor
   16826 though, not a cast, and hence does not yield an lvalue like normal
   16827 casts.  (*Note Compound Literals::.)
   16828 
   16829  The types that may be cast to the union type are those of the members
   16830 of the union.  Thus, given the following union and variables:
   16831 
   16832      union foo { int i; double d; };
   16833      int x;
   16834      double y;
   16835 
   16836 both `x' and `y' can be cast to type `union foo'.
   16837 
   16838  Using the cast as the right-hand side of an assignment to a variable of
   16839 union type is equivalent to storing in a member of the union:
   16840 
   16841      union foo u;
   16842      /* ... */
   16843      u = (union foo) x  ==  u.i = x
   16844      u = (union foo) y  ==  u.d = y
   16845 
   16846  You can also use the union cast as a function argument:
   16847 
   16848      void hack (union foo);
   16849      /* ... */
   16850      hack ((union foo) x);
   16851 
   16852 
   16853 File: gcc.info,  Node: Mixed Declarations,  Next: Function Attributes,  Prev: Case Ranges,  Up: C Extensions
   16854 
   16855 5.26 Mixed Declarations and Code
   16856 ================================
   16857 
   16858 ISO C99 and ISO C++ allow declarations and code to be freely mixed
   16859 within compound statements.  As an extension, GCC also allows this in
   16860 C89 mode.  For example, you could do:
   16861 
   16862      int i;
   16863      /* ... */
   16864      i++;
   16865      int j = i + 2;
   16866 
   16867  Each identifier is visible from where it is declared until the end of
   16868 the enclosing block.
   16869 
   16870 
   16871 File: gcc.info,  Node: Function Attributes,  Next: Attribute Syntax,  Prev: Mixed Declarations,  Up: C Extensions
   16872 
   16873 5.27 Declaring Attributes of Functions
   16874 ======================================
   16875 
   16876 In GNU C, you declare certain things about functions called in your
   16877 program which help the compiler optimize function calls and check your
   16878 code more carefully.
   16879 
   16880  The keyword `__attribute__' allows you to specify special attributes
   16881 when making a declaration.  This keyword is followed by an attribute
   16882 specification inside double parentheses.  The following attributes are
   16883 currently defined for functions on all targets: `aligned',
   16884 `alloc_size', `noreturn', `returns_twice', `noinline', `always_inline',
   16885 `flatten', `pure', `const', `nothrow', `sentinel', `format',
   16886 `format_arg', `no_instrument_function', `section', `constructor',
   16887 `destructor', `used', `unused', `deprecated', `weak', `malloc',
   16888 `alias', `warn_unused_result', `nonnull', `gnu_inline',
   16889 `externally_visible', `hot', `cold', `artificial', `error' and
   16890 `warning'.  Several other attributes are defined for functions on
   16891 particular target systems.  Other attributes, including `section' are
   16892 supported for variables declarations (*note Variable Attributes::) and
   16893 for types (*note Type Attributes::).
   16894 
   16895  You may also specify attributes with `__' preceding and following each
   16896 keyword.  This allows you to use them in header files without being
   16897 concerned about a possible macro of the same name.  For example, you
   16898 may use `__noreturn__' instead of `noreturn'.
   16899 
   16900  *Note Attribute Syntax::, for details of the exact syntax for using
   16901 attributes.
   16902 
   16903 `alias ("TARGET")'
   16904      The `alias' attribute causes the declaration to be emitted as an
   16905      alias for another symbol, which must be specified.  For instance,
   16906 
   16907           void __f () { /* Do something. */; }
   16908           void f () __attribute__ ((weak, alias ("__f")));
   16909 
   16910      defines `f' to be a weak alias for `__f'.  In C++, the mangled
   16911      name for the target must be used.  It is an error if `__f' is not
   16912      defined in the same translation unit.
   16913 
   16914      Not all target machines support this attribute.
   16915 
   16916 `aligned (ALIGNMENT)'
   16917      This attribute specifies a minimum alignment for the function,
   16918      measured in bytes.
   16919 
   16920      You cannot use this attribute to decrease the alignment of a
   16921      function, only to increase it.  However, when you explicitly
   16922      specify a function alignment this will override the effect of the
   16923      `-falign-functions' (*note Optimize Options::) option for this
   16924      function.
   16925 
   16926      Note that the effectiveness of `aligned' attributes may be limited
   16927      by inherent limitations in your linker.  On many systems, the
   16928      linker is only able to arrange for functions to be aligned up to a
   16929      certain maximum alignment.  (For some linkers, the maximum
   16930      supported alignment may be very very small.)  See your linker
   16931      documentation for further information.
   16932 
   16933      The `aligned' attribute can also be used for variables and fields
   16934      (*note Variable Attributes::.)
   16935 
   16936 `alloc_size'
   16937      The `alloc_size' attribute is used to tell the compiler that the
   16938      function return value points to memory, where the size is given by
   16939      one or two of the functions parameters.  GCC uses this information
   16940      to improve the correctness of `__builtin_object_size'.
   16941 
   16942      The function parameter(s) denoting the allocated size are
   16943      specified by one or two integer arguments supplied to the
   16944      attribute.  The allocated size is either the value of the single
   16945      function argument specified or the product of the two function
   16946      arguments specified.  Argument numbering starts at one.
   16947 
   16948      For instance,
   16949 
   16950           void* my_calloc(size_t, size_t) __attribute__((alloc_size(1,2)))
   16951           void my_realloc(void* size_t) __attribute__((alloc_size(2)))
   16952 
   16953      declares that my_calloc will return memory of the size given by
   16954      the product of parameter 1 and 2 and that my_realloc will return
   16955      memory of the size given by parameter 2.
   16956 
   16957 `always_inline'
   16958      Generally, functions are not inlined unless optimization is
   16959      specified.  For functions declared inline, this attribute inlines
   16960      the function even if no optimization level was specified.
   16961 
   16962 `gnu_inline'
   16963      This attribute should be used with a function which is also
   16964      declared with the `inline' keyword.  It directs GCC to treat the
   16965      function as if it were defined in gnu89 mode even when compiling
   16966      in C99 or gnu99 mode.
   16967 
   16968      If the function is declared `extern', then this definition of the
   16969      function is used only for inlining.  In no case is the function
   16970      compiled as a standalone function, not even if you take its address
   16971      explicitly.  Such an address becomes an external reference, as if
   16972      you had only declared the function, and had not defined it.  This
   16973      has almost the effect of a macro.  The way to use this is to put a
   16974      function definition in a header file with this attribute, and put
   16975      another copy of the function, without `extern', in a library file.
   16976      The definition in the header file will cause most calls to the
   16977      function to be inlined.  If any uses of the function remain, they
   16978      will refer to the single copy in the library.  Note that the two
   16979      definitions of the functions need not be precisely the same,
   16980      although if they do not have the same effect your program may
   16981      behave oddly.
   16982 
   16983      In C, if the function is neither `extern' nor `static', then the
   16984      function is compiled as a standalone function, as well as being
   16985      inlined where possible.
   16986 
   16987      This is how GCC traditionally handled functions declared `inline'.
   16988      Since ISO C99 specifies a different semantics for `inline', this
   16989      function attribute is provided as a transition measure and as a
   16990      useful feature in its own right.  This attribute is available in
   16991      GCC 4.1.3 and later.  It is available if either of the
   16992      preprocessor macros `__GNUC_GNU_INLINE__' or
   16993      `__GNUC_STDC_INLINE__' are defined.  *Note An Inline Function is
   16994      As Fast As a Macro: Inline.
   16995 
   16996      In C++, this attribute does not depend on `extern' in any way, but
   16997      it still requires the `inline' keyword to enable its special
   16998      behavior.
   16999 
   17000 `artificial'
   17001      This attribute is useful for small inline wrappers which if
   17002      possible should appear during debugging as a unit, depending on
   17003      the debug info format it will either mean marking the function as
   17004      artificial or using the caller location for all instructions
   17005      within the inlined body.
   17006 
   17007 `flatten'
   17008      Generally, inlining into a function is limited.  For a function
   17009      marked with this attribute, every call inside this function will
   17010      be inlined, if possible.  Whether the function itself is
   17011      considered for inlining depends on its size and the current
   17012      inlining parameters.  The `flatten' attribute only works reliably
   17013      in unit-at-a-time mode.
   17014 
   17015 `error ("MESSAGE")'
   17016      If this attribute is used on a function declaration and a call to
   17017      such a function is not eliminated through dead code elimination or
   17018      other optimizations, an error which will include MESSAGE will be
   17019      diagnosed.  This is useful for compile time checking, especially
   17020      together with `__builtin_constant_p' and inline functions where
   17021      checking the inline function arguments is not possible through
   17022      `extern char [(condition) ? 1 : -1];' tricks.  While it is
   17023      possible to leave the function undefined and thus invoke a link
   17024      failure, when using this attribute the problem will be diagnosed
   17025      earlier and with exact location of the call even in presence of
   17026      inline functions or when not emitting debugging information.
   17027 
   17028 `warning ("MESSAGE")'
   17029      If this attribute is used on a function declaration and a call to
   17030      such a function is not eliminated through dead code elimination or
   17031      other optimizations, a warning which will include MESSAGE will be
   17032      diagnosed.  This is useful for compile time checking, especially
   17033      together with `__builtin_constant_p' and inline functions.  While
   17034      it is possible to define the function with a message in
   17035      `.gnu.warning*' section, when using this attribute the problem
   17036      will be diagnosed earlier and with exact location of the call even
   17037      in presence of inline functions or when not emitting debugging
   17038      information.
   17039 
   17040 `cdecl'
   17041      On the Intel 386, the `cdecl' attribute causes the compiler to
   17042      assume that the calling function will pop off the stack space used
   17043      to pass arguments.  This is useful to override the effects of the
   17044      `-mrtd' switch.
   17045 
   17046 `const'
   17047      Many functions do not examine any values except their arguments,
   17048      and have no effects except the return value.  Basically this is
   17049      just slightly more strict class than the `pure' attribute below,
   17050      since function is not allowed to read global memory.
   17051 
   17052      Note that a function that has pointer arguments and examines the
   17053      data pointed to must _not_ be declared `const'.  Likewise, a
   17054      function that calls a non-`const' function usually must not be
   17055      `const'.  It does not make sense for a `const' function to return
   17056      `void'.
   17057 
   17058      The attribute `const' is not implemented in GCC versions earlier
   17059      than 2.5.  An alternative way to declare that a function has no
   17060      side effects, which works in the current version and in some older
   17061      versions, is as follows:
   17062 
   17063           typedef int intfn ();
   17064 
   17065           extern const intfn square;
   17066 
   17067      This approach does not work in GNU C++ from 2.6.0 on, since the
   17068      language specifies that the `const' must be attached to the return
   17069      value.
   17070 
   17071 `constructor'
   17072 `destructor'
   17073 `constructor (PRIORITY)'
   17074 `destructor (PRIORITY)'
   17075      The `constructor' attribute causes the function to be called
   17076      automatically before execution enters `main ()'.  Similarly, the
   17077      `destructor' attribute causes the function to be called
   17078      automatically after `main ()' has completed or `exit ()' has been
   17079      called.  Functions with these attributes are useful for
   17080      initializing data that will be used implicitly during the
   17081      execution of the program.
   17082 
   17083      You may provide an optional integer priority to control the order
   17084      in which constructor and destructor functions are run.  A
   17085      constructor with a smaller priority number runs before a
   17086      constructor with a larger priority number; the opposite
   17087      relationship holds for destructors.  So, if you have a constructor
   17088      that allocates a resource and a destructor that deallocates the
   17089      same resource, both functions typically have the same priority.
   17090      The priorities for constructor and destructor functions are the
   17091      same as those specified for namespace-scope C++ objects (*note C++
   17092      Attributes::).
   17093 
   17094      These attributes are not currently implemented for Objective-C.
   17095 
   17096 `deprecated'
   17097      The `deprecated' attribute results in a warning if the function is
   17098      used anywhere in the source file.  This is useful when identifying
   17099      functions that are expected to be removed in a future version of a
   17100      program.  The warning also includes the location of the declaration
   17101      of the deprecated function, to enable users to easily find further
   17102      information about why the function is deprecated, or what they
   17103      should do instead.  Note that the warnings only occurs for uses:
   17104 
   17105           int old_fn () __attribute__ ((deprecated));
   17106           int old_fn ();
   17107           int (*fn_ptr)() = old_fn;
   17108 
   17109      results in a warning on line 3 but not line 2.
   17110 
   17111      The `deprecated' attribute can also be used for variables and
   17112      types (*note Variable Attributes::, *note Type Attributes::.)
   17113 
   17114 `dllexport'
   17115      On Microsoft Windows targets and Symbian OS targets the
   17116      `dllexport' attribute causes the compiler to provide a global
   17117      pointer to a pointer in a DLL, so that it can be referenced with
   17118      the `dllimport' attribute.  On Microsoft Windows targets, the
   17119      pointer name is formed by combining `_imp__' and the function or
   17120      variable name.
   17121 
   17122      You can use `__declspec(dllexport)' as a synonym for
   17123      `__attribute__ ((dllexport))' for compatibility with other
   17124      compilers.
   17125 
   17126      On systems that support the `visibility' attribute, this attribute
   17127      also implies "default" visibility.  It is an error to explicitly
   17128      specify any other visibility.
   17129 
   17130      Currently, the `dllexport' attribute is ignored for inlined
   17131      functions, unless the `-fkeep-inline-functions' flag has been
   17132      used.  The attribute is also ignored for undefined symbols.
   17133 
   17134      When applied to C++ classes, the attribute marks defined
   17135      non-inlined member functions and static data members as exports.
   17136      Static consts initialized in-class are not marked unless they are
   17137      also defined out-of-class.
   17138 
   17139      For Microsoft Windows targets there are alternative methods for
   17140      including the symbol in the DLL's export table such as using a
   17141      `.def' file with an `EXPORTS' section or, with GNU ld, using the
   17142      `--export-all' linker flag.
   17143 
   17144 `dllimport'
   17145      On Microsoft Windows and Symbian OS targets, the `dllimport'
   17146      attribute causes the compiler to reference a function or variable
   17147      via a global pointer to a pointer that is set up by the DLL
   17148      exporting the symbol.  The attribute implies `extern'.  On
   17149      Microsoft Windows targets, the pointer name is formed by combining
   17150      `_imp__' and the function or variable name.
   17151 
   17152      You can use `__declspec(dllimport)' as a synonym for
   17153      `__attribute__ ((dllimport))' for compatibility with other
   17154      compilers.
   17155 
   17156      On systems that support the `visibility' attribute, this attribute
   17157      also implies "default" visibility.  It is an error to explicitly
   17158      specify any other visibility.
   17159 
   17160      Currently, the attribute is ignored for inlined functions.  If the
   17161      attribute is applied to a symbol _definition_, an error is
   17162      reported.  If a symbol previously declared `dllimport' is later
   17163      defined, the attribute is ignored in subsequent references, and a
   17164      warning is emitted.  The attribute is also overridden by a
   17165      subsequent declaration as `dllexport'.
   17166 
   17167      When applied to C++ classes, the attribute marks non-inlined
   17168      member functions and static data members as imports.  However, the
   17169      attribute is ignored for virtual methods to allow creation of
   17170      vtables using thunks.
   17171 
   17172      On the SH Symbian OS target the `dllimport' attribute also has
   17173      another affect--it can cause the vtable and run-time type
   17174      information for a class to be exported.  This happens when the
   17175      class has a dllimport'ed constructor or a non-inline, non-pure
   17176      virtual function and, for either of those two conditions, the
   17177      class also has a inline constructor or destructor and has a key
   17178      function that is defined in the current translation unit.
   17179 
   17180      For Microsoft Windows based targets the use of the `dllimport'
   17181      attribute on functions is not necessary, but provides a small
   17182      performance benefit by eliminating a thunk in the DLL.  The use of
   17183      the `dllimport' attribute on imported variables was required on
   17184      older versions of the GNU linker, but can now be avoided by
   17185      passing the `--enable-auto-import' switch to the GNU linker.  As
   17186      with functions, using the attribute for a variable eliminates a
   17187      thunk in the DLL.
   17188 
   17189      One drawback to using this attribute is that a pointer to a
   17190      _variable_ marked as `dllimport' cannot be used as a constant
   17191      address. However, a pointer to a _function_ with the `dllimport'
   17192      attribute can be used as a constant initializer; in this case, the
   17193      address of a stub function in the import lib is referenced.  On
   17194      Microsoft Windows targets, the attribute can be disabled for
   17195      functions by setting the `-mnop-fun-dllimport' flag.
   17196 
   17197 `eightbit_data'
   17198      Use this attribute on the H8/300, H8/300H, and H8S to indicate
   17199      that the specified variable should be placed into the eight bit
   17200      data section.  The compiler will generate more efficient code for
   17201      certain operations on data in the eight bit data area.  Note the
   17202      eight bit data area is limited to 256 bytes of data.
   17203 
   17204      You must use GAS and GLD from GNU binutils version 2.7 or later for
   17205      this attribute to work correctly.
   17206 
   17207 `exception_handler'
   17208      Use this attribute on the Blackfin to indicate that the specified
   17209      function is an exception handler.  The compiler will generate
   17210      function entry and exit sequences suitable for use in an exception
   17211      handler when this attribute is present.
   17212 
   17213 `far'
   17214      On 68HC11 and 68HC12 the `far' attribute causes the compiler to
   17215      use a calling convention that takes care of switching memory banks
   17216      when entering and leaving a function.  This calling convention is
   17217      also the default when using the `-mlong-calls' option.
   17218 
   17219      On 68HC12 the compiler will use the `call' and `rtc' instructions
   17220      to call and return from a function.
   17221 
   17222      On 68HC11 the compiler will generate a sequence of instructions to
   17223      invoke a board-specific routine to switch the memory bank and call
   17224      the real function.  The board-specific routine simulates a `call'.
   17225      At the end of a function, it will jump to a board-specific routine
   17226      instead of using `rts'.  The board-specific return routine
   17227      simulates the `rtc'.
   17228 
   17229 `fastcall'
   17230      On the Intel 386, the `fastcall' attribute causes the compiler to
   17231      pass the first argument (if of integral type) in the register ECX
   17232      and the second argument (if of integral type) in the register EDX.
   17233      Subsequent and other typed arguments are passed on the stack.
   17234      The called function will pop the arguments off the stack.  If the
   17235      number of arguments is variable all arguments are pushed on the
   17236      stack.
   17237 
   17238 `format (ARCHETYPE, STRING-INDEX, FIRST-TO-CHECK)'
   17239      The `format' attribute specifies that a function takes `printf',
   17240      `scanf', `strftime' or `strfmon' style arguments which should be
   17241      type-checked against a format string.  For example, the
   17242      declaration:
   17243 
   17244           extern int
   17245           my_printf (void *my_object, const char *my_format, ...)
   17246                 __attribute__ ((format (printf, 2, 3)));
   17247 
   17248      causes the compiler to check the arguments in calls to `my_printf'
   17249      for consistency with the `printf' style format string argument
   17250      `my_format'.
   17251 
   17252      The parameter ARCHETYPE determines how the format string is
   17253      interpreted, and should be `printf', `scanf', `strftime' or
   17254      `strfmon'.  (You can also use `__printf__', `__scanf__',
   17255      `__strftime__' or `__strfmon__'.)  The parameter STRING-INDEX
   17256      specifies which argument is the format string argument (starting
   17257      from 1), while FIRST-TO-CHECK is the number of the first argument
   17258      to check against the format string.  For functions where the
   17259      arguments are not available to be checked (such as `vprintf'),
   17260      specify the third parameter as zero.  In this case the compiler
   17261      only checks the format string for consistency.  For `strftime'
   17262      formats, the third parameter is required to be zero.  Since
   17263      non-static C++ methods have an implicit `this' argument, the
   17264      arguments of such methods should be counted from two, not one, when
   17265      giving values for STRING-INDEX and FIRST-TO-CHECK.
   17266 
   17267      In the example above, the format string (`my_format') is the second
   17268      argument of the function `my_print', and the arguments to check
   17269      start with the third argument, so the correct parameters for the
   17270      format attribute are 2 and 3.
   17271 
   17272      The `format' attribute allows you to identify your own functions
   17273      which take format strings as arguments, so that GCC can check the
   17274      calls to these functions for errors.  The compiler always (unless
   17275      `-ffreestanding' or `-fno-builtin' is used) checks formats for the
   17276      standard library functions `printf', `fprintf', `sprintf',
   17277      `scanf', `fscanf', `sscanf', `strftime', `vprintf', `vfprintf' and
   17278      `vsprintf' whenever such warnings are requested (using
   17279      `-Wformat'), so there is no need to modify the header file
   17280      `stdio.h'.  In C99 mode, the functions `snprintf', `vsnprintf',
   17281      `vscanf', `vfscanf' and `vsscanf' are also checked.  Except in
   17282      strictly conforming C standard modes, the X/Open function
   17283      `strfmon' is also checked as are `printf_unlocked' and
   17284      `fprintf_unlocked'.  *Note Options Controlling C Dialect: C
   17285      Dialect Options.
   17286 
   17287      The target may provide additional types of format checks.  *Note
   17288      Format Checks Specific to Particular Target Machines: Target
   17289      Format Checks.
   17290 
   17291 `format_arg (STRING-INDEX)'
   17292      The `format_arg' attribute specifies that a function takes a format
   17293      string for a `printf', `scanf', `strftime' or `strfmon' style
   17294      function and modifies it (for example, to translate it into
   17295      another language), so the result can be passed to a `printf',
   17296      `scanf', `strftime' or `strfmon' style function (with the
   17297      remaining arguments to the format function the same as they would
   17298      have been for the unmodified string).  For example, the
   17299      declaration:
   17300 
   17301           extern char *
   17302           my_dgettext (char *my_domain, const char *my_format)
   17303                 __attribute__ ((format_arg (2)));
   17304 
   17305      causes the compiler to check the arguments in calls to a `printf',
   17306      `scanf', `strftime' or `strfmon' type function, whose format
   17307      string argument is a call to the `my_dgettext' function, for
   17308      consistency with the format string argument `my_format'.  If the
   17309      `format_arg' attribute had not been specified, all the compiler
   17310      could tell in such calls to format functions would be that the
   17311      format string argument is not constant; this would generate a
   17312      warning when `-Wformat-nonliteral' is used, but the calls could
   17313      not be checked without the attribute.
   17314 
   17315      The parameter STRING-INDEX specifies which argument is the format
   17316      string argument (starting from one).  Since non-static C++ methods
   17317      have an implicit `this' argument, the arguments of such methods
   17318      should be counted from two.
   17319 
   17320      The `format-arg' attribute allows you to identify your own
   17321      functions which modify format strings, so that GCC can check the
   17322      calls to `printf', `scanf', `strftime' or `strfmon' type function
   17323      whose operands are a call to one of your own function.  The
   17324      compiler always treats `gettext', `dgettext', and `dcgettext' in
   17325      this manner except when strict ISO C support is requested by
   17326      `-ansi' or an appropriate `-std' option, or `-ffreestanding' or
   17327      `-fno-builtin' is used.  *Note Options Controlling C Dialect: C
   17328      Dialect Options.
   17329 
   17330 `function_vector'
   17331      Use this attribute on the H8/300, H8/300H, and H8S to indicate
   17332      that the specified function should be called through the function
   17333      vector.  Calling a function through the function vector will
   17334      reduce code size, however; the function vector has a limited size
   17335      (maximum 128 entries on the H8/300 and 64 entries on the H8/300H
   17336      and H8S) and shares space with the interrupt vector.
   17337 
   17338      You must use GAS and GLD from GNU binutils version 2.7 or later for
   17339      this attribute to work correctly.
   17340 
   17341      On M16C/M32C targets, the `function_vector' attribute declares a
   17342      special page subroutine call function. Use of this attribute
   17343      reduces the code size by 2 bytes for each call generated to the
   17344      subroutine. The argument to the attribute is the vector number
   17345      entry from the special page vector table which contains the 16
   17346      low-order bits of the subroutine's entry address. Each vector
   17347      table has special page number (18 to 255) which are used in `jsrs'
   17348      instruction.  Jump addresses of the routines are generated by
   17349      adding 0x0F0000 (in case of M16C targets) or 0xFF0000 (in case of
   17350      M32C targets), to the 2 byte addresses set in the vector table.
   17351      Therefore you need to ensure that all the special page vector
   17352      routines should get mapped within the address range 0x0F0000 to
   17353      0x0FFFFF (for M16C) and 0xFF0000 to 0xFFFFFF (for M32C).
   17354 
   17355      In the following example 2 bytes will be saved for each call to
   17356      function `foo'.
   17357 
   17358           void foo (void) __attribute__((function_vector(0x18)));
   17359           void foo (void)
   17360           {
   17361           }
   17362 
   17363           void bar (void)
   17364           {
   17365               foo();
   17366           }
   17367 
   17368      If functions are defined in one file and are called in another
   17369      file, then be sure to write this declaration in both files.
   17370 
   17371      This attribute is ignored for R8C target.
   17372 
   17373 `interrupt'
   17374      Use this attribute on the ARM, AVR, CRX, M32C, M32R/D, m68k, MS1,
   17375      and Xstormy16 ports to indicate that the specified function is an
   17376      interrupt handler.  The compiler will generate function entry and
   17377      exit sequences suitable for use in an interrupt handler when this
   17378      attribute is present.
   17379 
   17380      Note, interrupt handlers for the Blackfin, H8/300, H8/300H, H8S,
   17381      and SH processors can be specified via the `interrupt_handler'
   17382      attribute.
   17383 
   17384      Note, on the AVR, interrupts will be enabled inside the function.
   17385 
   17386      Note, for the ARM, you can specify the kind of interrupt to be
   17387      handled by adding an optional parameter to the interrupt attribute
   17388      like this:
   17389 
   17390           void f () __attribute__ ((interrupt ("IRQ")));
   17391 
   17392      Permissible values for this parameter are: IRQ, FIQ, SWI, ABORT
   17393      and UNDEF.
   17394 
   17395      On ARMv7-M the interrupt type is ignored, and the attribute means
   17396      the function may be called with a word aligned stack pointer.
   17397 
   17398 `interrupt_handler'
   17399      Use this attribute on the Blackfin, m68k, H8/300, H8/300H, H8S,
   17400      and SH to indicate that the specified function is an interrupt
   17401      handler.  The compiler will generate function entry and exit
   17402      sequences suitable for use in an interrupt handler when this
   17403      attribute is present.
   17404 
   17405 `interrupt_thread'
   17406      Use this attribute on fido, a subarchitecture of the m68k, to
   17407      indicate that the specified function is an interrupt handler that
   17408      is designed to run as a thread.  The compiler omits generate
   17409      prologue/epilogue sequences and replaces the return instruction
   17410      with a `sleep' instruction.  This attribute is available only on
   17411      fido.
   17412 
   17413 `kspisusp'
   17414      When used together with `interrupt_handler', `exception_handler'
   17415      or `nmi_handler', code will be generated to load the stack pointer
   17416      from the USP register in the function prologue.
   17417 
   17418 `l1_text'
   17419      This attribute specifies a function to be placed into L1
   17420      Instruction SRAM. The function will be put into a specific section
   17421      named `.l1.text'.  With `-mfdpic', function calls with a such
   17422      function as the callee or caller will use inlined PLT.
   17423 
   17424 `long_call/short_call'
   17425      This attribute specifies how a particular function is called on
   17426      ARM.  Both attributes override the `-mlong-calls' (*note ARM
   17427      Options::) command line switch and `#pragma long_calls' settings.
   17428      The `long_call' attribute indicates that the function might be far
   17429      away from the call site and require a different (more expensive)
   17430      calling sequence.   The `short_call' attribute always places the
   17431      offset to the function from the call site into the `BL'
   17432      instruction directly.
   17433 
   17434 `longcall/shortcall'
   17435      On the Blackfin, RS/6000 and PowerPC, the `longcall' attribute
   17436      indicates that the function might be far away from the call site
   17437      and require a different (more expensive) calling sequence.  The
   17438      `shortcall' attribute indicates that the function is always close
   17439      enough for the shorter calling sequence to be used.  These
   17440      attributes override both the `-mlongcall' switch and, on the
   17441      RS/6000 and PowerPC, the `#pragma longcall' setting.
   17442 
   17443      *Note RS/6000 and PowerPC Options::, for more information on
   17444      whether long calls are necessary.
   17445 
   17446 `long_call/near/far'
   17447      These attributes specify how a particular function is called on
   17448      MIPS.  The attributes override the `-mlong-calls' (*note MIPS
   17449      Options::) command-line switch.  The `long_call' and `far'
   17450      attributes are synonyms, and cause the compiler to always call the
   17451      function by first loading its address into a register, and then
   17452      using the contents of that register.  The `near' attribute has the
   17453      opposite effect; it specifies that non-PIC calls should be made
   17454      using the more efficient `jal' instruction.
   17455 
   17456 `malloc'
   17457      The `malloc' attribute is used to tell the compiler that a function
   17458      may be treated as if any non-`NULL' pointer it returns cannot
   17459      alias any other pointer valid when the function returns.  This
   17460      will often improve optimization.  Standard functions with this
   17461      property include `malloc' and `calloc'.  `realloc'-like functions
   17462      have this property as long as the old pointer is never referred to
   17463      (including comparing it to the new pointer) after the function
   17464      returns a non-`NULL' value.
   17465 
   17466 `mips16/nomips16'
   17467      On MIPS targets, you can use the `mips16' and `nomips16' function
   17468      attributes to locally select or turn off MIPS16 code generation.
   17469      A function with the `mips16' attribute is emitted as MIPS16 code,
   17470      while MIPS16 code generation is disabled for functions with the
   17471      `nomips16' attribute.  These attributes override the `-mips16' and
   17472      `-mno-mips16' options on the command line (*note MIPS Options::).
   17473 
   17474      When compiling files containing mixed MIPS16 and non-MIPS16 code,
   17475      the preprocessor symbol `__mips16' reflects the setting on the
   17476      command line, not that within individual functions.  Mixed MIPS16
   17477      and non-MIPS16 code may interact badly with some GCC extensions
   17478      such as `__builtin_apply' (*note Constructing Calls::).
   17479 
   17480 `model (MODEL-NAME)'
   17481      On the M32R/D, use this attribute to set the addressability of an
   17482      object, and of the code generated for a function.  The identifier
   17483      MODEL-NAME is one of `small', `medium', or `large', representing
   17484      each of the code models.
   17485 
   17486      Small model objects live in the lower 16MB of memory (so that their
   17487      addresses can be loaded with the `ld24' instruction), and are
   17488      callable with the `bl' instruction.
   17489 
   17490      Medium model objects may live anywhere in the 32-bit address space
   17491      (the compiler will generate `seth/add3' instructions to load their
   17492      addresses), and are callable with the `bl' instruction.
   17493 
   17494      Large model objects may live anywhere in the 32-bit address space
   17495      (the compiler will generate `seth/add3' instructions to load their
   17496      addresses), and may not be reachable with the `bl' instruction
   17497      (the compiler will generate the much slower `seth/add3/jl'
   17498      instruction sequence).
   17499 
   17500      On IA-64, use this attribute to set the addressability of an
   17501      object.  At present, the only supported identifier for MODEL-NAME
   17502      is `small', indicating addressability via "small" (22-bit)
   17503      addresses (so that their addresses can be loaded with the `addl'
   17504      instruction).  Caveat: such addressing is by definition not
   17505      position independent and hence this attribute must not be used for
   17506      objects defined by shared libraries.
   17507 
   17508 `naked'
   17509      Use this attribute on the ARM, AVR, IP2K and SPU ports to indicate
   17510      that the specified function does not need prologue/epilogue
   17511      sequences generated by the compiler.  It is up to the programmer
   17512      to provide these sequences.
   17513 
   17514 `near'
   17515      On 68HC11 and 68HC12 the `near' attribute causes the compiler to
   17516      use the normal calling convention based on `jsr' and `rts'.  This
   17517      attribute can be used to cancel the effect of the `-mlong-calls'
   17518      option.
   17519 
   17520 `nesting'
   17521      Use this attribute together with `interrupt_handler',
   17522      `exception_handler' or `nmi_handler' to indicate that the function
   17523      entry code should enable nested interrupts or exceptions.
   17524 
   17525 `nmi_handler'
   17526      Use this attribute on the Blackfin to indicate that the specified
   17527      function is an NMI handler.  The compiler will generate function
   17528      entry and exit sequences suitable for use in an NMI handler when
   17529      this attribute is present.
   17530 
   17531 `no_instrument_function'
   17532      If `-finstrument-functions' is given, profiling function calls will
   17533      be generated at entry and exit of most user-compiled functions.
   17534      Functions with this attribute will not be so instrumented.
   17535 
   17536 `noinline'
   17537      This function attribute prevents a function from being considered
   17538      for inlining.  If the function does not have side-effects, there
   17539      are optimizations other than inlining that causes function calls
   17540      to be optimized away, although the function call is live.  To keep
   17541      such calls from being optimized away, put
   17542           asm ("");
   17543      (*note Extended Asm::) in the called function, to serve as a
   17544      special side-effect.
   17545 
   17546 `nonnull (ARG-INDEX, ...)'
   17547      The `nonnull' attribute specifies that some function parameters
   17548      should be non-null pointers.  For instance, the declaration:
   17549 
   17550           extern void *
   17551           my_memcpy (void *dest, const void *src, size_t len)
   17552           	__attribute__((nonnull (1, 2)));
   17553 
   17554      causes the compiler to check that, in calls to `my_memcpy',
   17555      arguments DEST and SRC are non-null.  If the compiler determines
   17556      that a null pointer is passed in an argument slot marked as
   17557      non-null, and the `-Wnonnull' option is enabled, a warning is
   17558      issued.  The compiler may also choose to make optimizations based
   17559      on the knowledge that certain function arguments will not be null.
   17560 
   17561      If no argument index list is given to the `nonnull' attribute, all
   17562      pointer arguments are marked as non-null.  To illustrate, the
   17563      following declaration is equivalent to the previous example:
   17564 
   17565           extern void *
   17566           my_memcpy (void *dest, const void *src, size_t len)
   17567           	__attribute__((nonnull));
   17568 
   17569 `noreturn'
   17570      A few standard library functions, such as `abort' and `exit',
   17571      cannot return.  GCC knows this automatically.  Some programs define
   17572      their own functions that never return.  You can declare them
   17573      `noreturn' to tell the compiler this fact.  For example,
   17574 
   17575           void fatal () __attribute__ ((noreturn));
   17576 
   17577           void
   17578           fatal (/* ... */)
   17579           {
   17580             /* ... */ /* Print error message. */ /* ... */
   17581             exit (1);
   17582           }
   17583 
   17584      The `noreturn' keyword tells the compiler to assume that `fatal'
   17585      cannot return.  It can then optimize without regard to what would
   17586      happen if `fatal' ever did return.  This makes slightly better
   17587      code.  More importantly, it helps avoid spurious warnings of
   17588      uninitialized variables.
   17589 
   17590      The `noreturn' keyword does not affect the exceptional path when
   17591      that applies: a `noreturn'-marked function may still return to the
   17592      caller by throwing an exception or calling `longjmp'.
   17593 
   17594      Do not assume that registers saved by the calling function are
   17595      restored before calling the `noreturn' function.
   17596 
   17597      It does not make sense for a `noreturn' function to have a return
   17598      type other than `void'.
   17599 
   17600      The attribute `noreturn' is not implemented in GCC versions
   17601      earlier than 2.5.  An alternative way to declare that a function
   17602      does not return, which works in the current version and in some
   17603      older versions, is as follows:
   17604 
   17605           typedef void voidfn ();
   17606 
   17607           volatile voidfn fatal;
   17608 
   17609      This approach does not work in GNU C++.
   17610 
   17611 `nothrow'
   17612      The `nothrow' attribute is used to inform the compiler that a
   17613      function cannot throw an exception.  For example, most functions in
   17614      the standard C library can be guaranteed not to throw an exception
   17615      with the notable exceptions of `qsort' and `bsearch' that take
   17616      function pointer arguments.  The `nothrow' attribute is not
   17617      implemented in GCC versions earlier than 3.3.
   17618 
   17619 `pure'
   17620      Many functions have no effects except the return value and their
   17621      return value depends only on the parameters and/or global
   17622      variables.  Such a function can be subject to common subexpression
   17623      elimination and loop optimization just as an arithmetic operator
   17624      would be.  These functions should be declared with the attribute
   17625      `pure'.  For example,
   17626 
   17627           int square (int) __attribute__ ((pure));
   17628 
   17629      says that the hypothetical function `square' is safe to call fewer
   17630      times than the program says.
   17631 
   17632      Some of common examples of pure functions are `strlen' or `memcmp'.
   17633      Interesting non-pure functions are functions with infinite loops
   17634      or those depending on volatile memory or other system resource,
   17635      that may change between two consecutive calls (such as `feof' in a
   17636      multithreading environment).
   17637 
   17638      The attribute `pure' is not implemented in GCC versions earlier
   17639      than 2.96.
   17640 
   17641 `hot'
   17642      The `hot' attribute is used to inform the compiler that a function
   17643      is a hot spot of the compiled program.  The function is optimized
   17644      more aggressively and on many target it is placed into special
   17645      subsection of the text section so all hot functions appears close
   17646      together improving locality.
   17647 
   17648      When profile feedback is available, via `-fprofile-use', hot
   17649      functions are automatically detected and this attribute is ignored.
   17650 
   17651      The `hot' attribute is not implemented in GCC versions earlier
   17652      than 4.3.
   17653 
   17654 `cold'
   17655      The `cold' attribute is used to inform the compiler that a
   17656      function is unlikely executed.  The function is optimized for size
   17657      rather than speed and on many targets it is placed into special
   17658      subsection of the text section so all cold functions appears close
   17659      together improving code locality of non-cold parts of program.
   17660      The paths leading to call of cold functions within code are marked
   17661      as unlikely by the branch prediction mechanism. It is thus useful
   17662      to mark functions used to handle unlikely conditions, such as
   17663      `perror', as cold to improve optimization of hot functions that do
   17664      call marked functions in rare occasions.
   17665 
   17666      When profile feedback is available, via `-fprofile-use', hot
   17667      functions are automatically detected and this attribute is ignored.
   17668 
   17669      The `hot' attribute is not implemented in GCC versions earlier
   17670      than 4.3.
   17671 
   17672 `regparm (NUMBER)'
   17673      On the Intel 386, the `regparm' attribute causes the compiler to
   17674      pass arguments number one to NUMBER if they are of integral type
   17675      in registers EAX, EDX, and ECX instead of on the stack.  Functions
   17676      that take a variable number of arguments will continue to be
   17677      passed all of their arguments on the stack.
   17678 
   17679      Beware that on some ELF systems this attribute is unsuitable for
   17680      global functions in shared libraries with lazy binding (which is
   17681      the default).  Lazy binding will send the first call via resolving
   17682      code in the loader, which might assume EAX, EDX and ECX can be
   17683      clobbered, as per the standard calling conventions.  Solaris 8 is
   17684      affected by this.  GNU systems with GLIBC 2.1 or higher, and
   17685      FreeBSD, are believed to be safe since the loaders there save all
   17686      registers.  (Lazy binding can be disabled with the linker or the
   17687      loader if desired, to avoid the problem.)
   17688 
   17689 `sseregparm'
   17690      On the Intel 386 with SSE support, the `sseregparm' attribute
   17691      causes the compiler to pass up to 3 floating point arguments in
   17692      SSE registers instead of on the stack.  Functions that take a
   17693      variable number of arguments will continue to pass all of their
   17694      floating point arguments on the stack.
   17695 
   17696 `force_align_arg_pointer'
   17697      On the Intel x86, the `force_align_arg_pointer' attribute may be
   17698      applied to individual function definitions, generating an alternate
   17699      prologue and epilogue that realigns the runtime stack.  This
   17700      supports mixing legacy codes that run with a 4-byte aligned stack
   17701      with modern codes that keep a 16-byte stack for SSE compatibility.
   17702      The alternate prologue and epilogue are slower and bigger than
   17703      the regular ones, and the alternate prologue requires a scratch
   17704      register; this lowers the number of registers available if used in
   17705      conjunction with the `regparm' attribute.  The
   17706      `force_align_arg_pointer' attribute is incompatible with nested
   17707      functions; this is considered a hard error.
   17708 
   17709 `returns_twice'
   17710      The `returns_twice' attribute tells the compiler that a function
   17711      may return more than one time.  The compiler will ensure that all
   17712      registers are dead before calling such a function and will emit a
   17713      warning about the variables that may be clobbered after the second
   17714      return from the function.  Examples of such functions are `setjmp'
   17715      and `vfork'.  The `longjmp'-like counterpart of such function, if
   17716      any, might need to be marked with the `noreturn' attribute.
   17717 
   17718 `saveall'
   17719      Use this attribute on the Blackfin, H8/300, H8/300H, and H8S to
   17720      indicate that all registers except the stack pointer should be
   17721      saved in the prologue regardless of whether they are used or not.
   17722 
   17723 `section ("SECTION-NAME")'
   17724      Normally, the compiler places the code it generates in the `text'
   17725      section.  Sometimes, however, you need additional sections, or you
   17726      need certain particular functions to appear in special sections.
   17727      The `section' attribute specifies that a function lives in a
   17728      particular section.  For example, the declaration:
   17729 
   17730           extern void foobar (void) __attribute__ ((section ("bar")));
   17731 
   17732      puts the function `foobar' in the `bar' section.
   17733 
   17734      Some file formats do not support arbitrary sections so the
   17735      `section' attribute is not available on all platforms.  If you
   17736      need to map the entire contents of a module to a particular
   17737      section, consider using the facilities of the linker instead.
   17738 
   17739 `sentinel'
   17740      This function attribute ensures that a parameter in a function
   17741      call is an explicit `NULL'.  The attribute is only valid on
   17742      variadic functions.  By default, the sentinel is located at
   17743      position zero, the last parameter of the function call.  If an
   17744      optional integer position argument P is supplied to the attribute,
   17745      the sentinel must be located at position P counting backwards from
   17746      the end of the argument list.
   17747 
   17748           __attribute__ ((sentinel))
   17749           is equivalent to
   17750           __attribute__ ((sentinel(0)))
   17751 
   17752      The attribute is automatically set with a position of 0 for the
   17753      built-in functions `execl' and `execlp'.  The built-in function
   17754      `execle' has the attribute set with a position of 1.
   17755 
   17756      A valid `NULL' in this context is defined as zero with any pointer
   17757      type.  If your system defines the `NULL' macro with an integer type
   17758      then you need to add an explicit cast.  GCC replaces `stddef.h'
   17759      with a copy that redefines NULL appropriately.
   17760 
   17761      The warnings for missing or incorrect sentinels are enabled with
   17762      `-Wformat'.
   17763 
   17764 `short_call'
   17765      See long_call/short_call.
   17766 
   17767 `shortcall'
   17768      See longcall/shortcall.
   17769 
   17770 `signal'
   17771      Use this attribute on the AVR to indicate that the specified
   17772      function is a signal handler.  The compiler will generate function
   17773      entry and exit sequences suitable for use in a signal handler when
   17774      this attribute is present.  Interrupts will be disabled inside the
   17775      function.
   17776 
   17777 `sp_switch'
   17778      Use this attribute on the SH to indicate an `interrupt_handler'
   17779      function should switch to an alternate stack.  It expects a string
   17780      argument that names a global variable holding the address of the
   17781      alternate stack.
   17782 
   17783           void *alt_stack;
   17784           void f () __attribute__ ((interrupt_handler,
   17785                                     sp_switch ("alt_stack")));
   17786 
   17787 `stdcall'
   17788      On the Intel 386, the `stdcall' attribute causes the compiler to
   17789      assume that the called function will pop off the stack space used
   17790      to pass arguments, unless it takes a variable number of arguments.
   17791 
   17792 `tiny_data'
   17793      Use this attribute on the H8/300H and H8S to indicate that the
   17794      specified variable should be placed into the tiny data section.
   17795      The compiler will generate more efficient code for loads and stores
   17796      on data in the tiny data section.  Note the tiny data area is
   17797      limited to slightly under 32kbytes of data.
   17798 
   17799 `trap_exit'
   17800      Use this attribute on the SH for an `interrupt_handler' to return
   17801      using `trapa' instead of `rte'.  This attribute expects an integer
   17802      argument specifying the trap number to be used.
   17803 
   17804 `unused'
   17805      This attribute, attached to a function, means that the function is
   17806      meant to be possibly unused.  GCC will not produce a warning for
   17807      this function.
   17808 
   17809 `used'
   17810      This attribute, attached to a function, means that code must be
   17811      emitted for the function even if it appears that the function is
   17812      not referenced.  This is useful, for example, when the function is
   17813      referenced only in inline assembly.
   17814 
   17815 `version_id'
   17816      This attribute, attached to a global variable or function, renames
   17817      a symbol to contain a version string, thus allowing for function
   17818      level versioning.  HP-UX system header files may use version level
   17819      functioning for some system calls.
   17820 
   17821           extern int foo () __attribute__((version_id ("20040821")));
   17822 
   17823      Calls to FOO will be mapped to calls to FOO{20040821}.
   17824 
   17825 `visibility ("VISIBILITY_TYPE")'
   17826      This attribute affects the linkage of the declaration to which it
   17827      is attached.  There are four supported VISIBILITY_TYPE values:
   17828      default, hidden, protected or internal visibility.
   17829 
   17830           void __attribute__ ((visibility ("protected")))
   17831           f () { /* Do something. */; }
   17832           int i __attribute__ ((visibility ("hidden")));
   17833 
   17834      The possible values of VISIBILITY_TYPE correspond to the
   17835      visibility settings in the ELF gABI.
   17836 
   17837     "default"
   17838           Default visibility is the normal case for the object file
   17839           format.  This value is available for the visibility attribute
   17840           to override other options that may change the assumed
   17841           visibility of entities.
   17842 
   17843           On ELF, default visibility means that the declaration is
   17844           visible to other modules and, in shared libraries, means that
   17845           the declared entity may be overridden.
   17846 
   17847           On Darwin, default visibility means that the declaration is
   17848           visible to other modules.
   17849 
   17850           Default visibility corresponds to "external linkage" in the
   17851           language.
   17852 
   17853     "hidden"
   17854           Hidden visibility indicates that the entity declared will
   17855           have a new form of linkage, which we'll call "hidden
   17856           linkage".  Two declarations of an object with hidden linkage
   17857           refer to the same object if they are in the same shared
   17858           object.
   17859 
   17860     "internal"
   17861           Internal visibility is like hidden visibility, but with
   17862           additional processor specific semantics.  Unless otherwise
   17863           specified by the psABI, GCC defines internal visibility to
   17864           mean that a function is _never_ called from another module.
   17865           Compare this with hidden functions which, while they cannot
   17866           be referenced directly by other modules, can be referenced
   17867           indirectly via function pointers.  By indicating that a
   17868           function cannot be called from outside the module, GCC may
   17869           for instance omit the load of a PIC register since it is known
   17870           that the calling function loaded the correct value.
   17871 
   17872     "protected"
   17873           Protected visibility is like default visibility except that it
   17874           indicates that references within the defining module will
   17875           bind to the definition in that module.  That is, the declared
   17876           entity cannot be overridden by another module.
   17877 
   17878 
   17879      All visibilities are supported on many, but not all, ELF targets
   17880      (supported when the assembler supports the `.visibility'
   17881      pseudo-op).  Default visibility is supported everywhere.  Hidden
   17882      visibility is supported on Darwin targets.
   17883 
   17884      The visibility attribute should be applied only to declarations
   17885      which would otherwise have external linkage.  The attribute should
   17886      be applied consistently, so that the same entity should not be
   17887      declared with different settings of the attribute.
   17888 
   17889      In C++, the visibility attribute applies to types as well as
   17890      functions and objects, because in C++ types have linkage.  A class
   17891      must not have greater visibility than its non-static data member
   17892      types and bases, and class members default to the visibility of
   17893      their class.  Also, a declaration without explicit visibility is
   17894      limited to the visibility of its type.
   17895 
   17896      In C++, you can mark member functions and static member variables
   17897      of a class with the visibility attribute.  This is useful if if
   17898      you know a particular method or static member variable should only
   17899      be used from one shared object; then you can mark it hidden while
   17900      the rest of the class has default visibility.  Care must be taken
   17901      to avoid breaking the One Definition Rule; for example, it is
   17902      usually not useful to mark an inline method as hidden without
   17903      marking the whole class as hidden.
   17904 
   17905      A C++ namespace declaration can also have the visibility attribute.
   17906      This attribute applies only to the particular namespace body, not
   17907      to other definitions of the same namespace; it is equivalent to
   17908      using `#pragma GCC visibility' before and after the namespace
   17909      definition (*note Visibility Pragmas::).
   17910 
   17911      In C++, if a template argument has limited visibility, this
   17912      restriction is implicitly propagated to the template instantiation.
   17913      Otherwise, template instantiations and specializations default to
   17914      the visibility of their template.
   17915 
   17916      If both the template and enclosing class have explicit visibility,
   17917      the visibility from the template is used.
   17918 
   17919 `warn_unused_result'
   17920      The `warn_unused_result' attribute causes a warning to be emitted
   17921      if a caller of the function with this attribute does not use its
   17922      return value.  This is useful for functions where not checking the
   17923      result is either a security problem or always a bug, such as
   17924      `realloc'.
   17925 
   17926           int fn () __attribute__ ((warn_unused_result));
   17927           int foo ()
   17928           {
   17929             if (fn () < 0) return -1;
   17930             fn ();
   17931             return 0;
   17932           }
   17933 
   17934      results in warning on line 5.
   17935 
   17936 `weak'
   17937      The `weak' attribute causes the declaration to be emitted as a weak
   17938      symbol rather than a global.  This is primarily useful in defining
   17939      library functions which can be overridden in user code, though it
   17940      can also be used with non-function declarations.  Weak symbols are
   17941      supported for ELF targets, and also for a.out targets when using
   17942      the GNU assembler and linker.
   17943 
   17944 `weakref'
   17945 `weakref ("TARGET")'
   17946      The `weakref' attribute marks a declaration as a weak reference.
   17947      Without arguments, it should be accompanied by an `alias' attribute
   17948      naming the target symbol.  Optionally, the TARGET may be given as
   17949      an argument to `weakref' itself.  In either case, `weakref'
   17950      implicitly marks the declaration as `weak'.  Without a TARGET,
   17951      given as an argument to `weakref' or to `alias', `weakref' is
   17952      equivalent to `weak'.
   17953 
   17954           static int x() __attribute__ ((weakref ("y")));
   17955           /* is equivalent to... */
   17956           static int x() __attribute__ ((weak, weakref, alias ("y")));
   17957           /* and to... */
   17958           static int x() __attribute__ ((weakref));
   17959           static int x() __attribute__ ((alias ("y")));
   17960 
   17961      A weak reference is an alias that does not by itself require a
   17962      definition to be given for the target symbol.  If the target
   17963      symbol is only referenced through weak references, then the
   17964      becomes a `weak' undefined symbol.  If it is directly referenced,
   17965      however, then such strong references prevail, and a definition
   17966      will be required for the symbol, not necessarily in the same
   17967      translation unit.
   17968 
   17969      The effect is equivalent to moving all references to the alias to a
   17970      separate translation unit, renaming the alias to the aliased
   17971      symbol, declaring it as weak, compiling the two separate
   17972      translation units and performing a reloadable link on them.
   17973 
   17974      At present, a declaration to which `weakref' is attached can only
   17975      be `static'.
   17976 
   17977 `externally_visible'
   17978      This attribute, attached to a global variable or function nullify
   17979      effect of `-fwhole-program' command line option, so the object
   17980      remain visible outside the current compilation unit
   17981 
   17982 
   17983  You can specify multiple attributes in a declaration by separating them
   17984 by commas within the double parentheses or by immediately following an
   17985 attribute declaration with another attribute declaration.
   17986 
   17987  Some people object to the `__attribute__' feature, suggesting that ISO
   17988 C's `#pragma' should be used instead.  At the time `__attribute__' was
   17989 designed, there were two reasons for not doing this.
   17990 
   17991   1. It is impossible to generate `#pragma' commands from a macro.
   17992 
   17993   2. There is no telling what the same `#pragma' might mean in another
   17994      compiler.
   17995 
   17996  These two reasons applied to almost any application that might have
   17997 been proposed for `#pragma'.  It was basically a mistake to use
   17998 `#pragma' for _anything_.
   17999 
   18000  The ISO C99 standard includes `_Pragma', which now allows pragmas to
   18001 be generated from macros.  In addition, a `#pragma GCC' namespace is
   18002 now in use for GCC-specific pragmas.  However, it has been found
   18003 convenient to use `__attribute__' to achieve a natural attachment of
   18004 attributes to their corresponding declarations, whereas `#pragma GCC'
   18005 is of use for constructs that do not naturally form part of the
   18006 grammar.  *Note Miscellaneous Preprocessing Directives: (cpp)Other
   18007 Directives.
   18008 
   18009 
   18010 File: gcc.info,  Node: Attribute Syntax,  Next: Function Prototypes,  Prev: Function Attributes,  Up: C Extensions
   18011 
   18012 5.28 Attribute Syntax
   18013 =====================
   18014 
   18015 This section describes the syntax with which `__attribute__' may be
   18016 used, and the constructs to which attribute specifiers bind, for the C
   18017 language.  Some details may vary for C++ and Objective-C.  Because of
   18018 infelicities in the grammar for attributes, some forms described here
   18019 may not be successfully parsed in all cases.
   18020 
   18021  There are some problems with the semantics of attributes in C++.  For
   18022 example, there are no manglings for attributes, although they may affect
   18023 code generation, so problems may arise when attributed types are used in
   18024 conjunction with templates or overloading.  Similarly, `typeid' does
   18025 not distinguish between types with different attributes.  Support for
   18026 attributes in C++ may be restricted in future to attributes on
   18027 declarations only, but not on nested declarators.
   18028 
   18029  *Note Function Attributes::, for details of the semantics of attributes
   18030 applying to functions.  *Note Variable Attributes::, for details of the
   18031 semantics of attributes applying to variables.  *Note Type Attributes::,
   18032 for details of the semantics of attributes applying to structure, union
   18033 and enumerated types.
   18034 
   18035  An "attribute specifier" is of the form `__attribute__
   18036 ((ATTRIBUTE-LIST))'.  An "attribute list" is a possibly empty
   18037 comma-separated sequence of "attributes", where each attribute is one
   18038 of the following:
   18039 
   18040    * Empty.  Empty attributes are ignored.
   18041 
   18042    * A word (which may be an identifier such as `unused', or a reserved
   18043      word such as `const').
   18044 
   18045    * A word, followed by, in parentheses, parameters for the attribute.
   18046      These parameters take one of the following forms:
   18047 
   18048         * An identifier.  For example, `mode' attributes use this form.
   18049 
   18050         * An identifier followed by a comma and a non-empty
   18051           comma-separated list of expressions.  For example, `format'
   18052           attributes use this form.
   18053 
   18054         * A possibly empty comma-separated list of expressions.  For
   18055           example, `format_arg' attributes use this form with the list
   18056           being a single integer constant expression, and `alias'
   18057           attributes use this form with the list being a single string
   18058           constant.
   18059 
   18060  An "attribute specifier list" is a sequence of one or more attribute
   18061 specifiers, not separated by any other tokens.
   18062 
   18063  In GNU C, an attribute specifier list may appear after the colon
   18064 following a label, other than a `case' or `default' label.  The only
   18065 attribute it makes sense to use after a label is `unused'.  This
   18066 feature is intended for code generated by programs which contains labels
   18067 that may be unused but which is compiled with `-Wall'.  It would not
   18068 normally be appropriate to use in it human-written code, though it
   18069 could be useful in cases where the code that jumps to the label is
   18070 contained within an `#ifdef' conditional.  GNU C++ does not permit such
   18071 placement of attribute lists, as it is permissible for a declaration,
   18072 which could begin with an attribute list, to be labelled in C++.
   18073 Declarations cannot be labelled in C90 or C99, so the ambiguity does
   18074 not arise there.
   18075 
   18076  An attribute specifier list may appear as part of a `struct', `union'
   18077 or `enum' specifier.  It may go either immediately after the `struct',
   18078 `union' or `enum' keyword, or after the closing brace.  The former
   18079 syntax is preferred.  Where attribute specifiers follow the closing
   18080 brace, they are considered to relate to the structure, union or
   18081 enumerated type defined, not to any enclosing declaration the type
   18082 specifier appears in, and the type defined is not complete until after
   18083 the attribute specifiers.
   18084 
   18085  Otherwise, an attribute specifier appears as part of a declaration,
   18086 counting declarations of unnamed parameters and type names, and relates
   18087 to that declaration (which may be nested in another declaration, for
   18088 example in the case of a parameter declaration), or to a particular
   18089 declarator within a declaration.  Where an attribute specifier is
   18090 applied to a parameter declared as a function or an array, it should
   18091 apply to the function or array rather than the pointer to which the
   18092 parameter is implicitly converted, but this is not yet correctly
   18093 implemented.
   18094 
   18095  Any list of specifiers and qualifiers at the start of a declaration may
   18096 contain attribute specifiers, whether or not such a list may in that
   18097 context contain storage class specifiers.  (Some attributes, however,
   18098 are essentially in the nature of storage class specifiers, and only make
   18099 sense where storage class specifiers may be used; for example,
   18100 `section'.)  There is one necessary limitation to this syntax: the
   18101 first old-style parameter declaration in a function definition cannot
   18102 begin with an attribute specifier, because such an attribute applies to
   18103 the function instead by syntax described below (which, however, is not
   18104 yet implemented in this case).  In some other cases, attribute
   18105 specifiers are permitted by this grammar but not yet supported by the
   18106 compiler.  All attribute specifiers in this place relate to the
   18107 declaration as a whole.  In the obsolescent usage where a type of `int'
   18108 is implied by the absence of type specifiers, such a list of specifiers
   18109 and qualifiers may be an attribute specifier list with no other
   18110 specifiers or qualifiers.
   18111 
   18112  At present, the first parameter in a function prototype must have some
   18113 type specifier which is not an attribute specifier; this resolves an
   18114 ambiguity in the interpretation of `void f(int (__attribute__((foo))
   18115 x))', but is subject to change.  At present, if the parentheses of a
   18116 function declarator contain only attributes then those attributes are
   18117 ignored, rather than yielding an error or warning or implying a single
   18118 parameter of type int, but this is subject to change.
   18119 
   18120  An attribute specifier list may appear immediately before a declarator
   18121 (other than the first) in a comma-separated list of declarators in a
   18122 declaration of more than one identifier using a single list of
   18123 specifiers and qualifiers.  Such attribute specifiers apply only to the
   18124 identifier before whose declarator they appear.  For example, in
   18125 
   18126      __attribute__((noreturn)) void d0 (void),
   18127          __attribute__((format(printf, 1, 2))) d1 (const char *, ...),
   18128           d2 (void)
   18129 
   18130 the `noreturn' attribute applies to all the functions declared; the
   18131 `format' attribute only applies to `d1'.
   18132 
   18133  An attribute specifier list may appear immediately before the comma,
   18134 `=' or semicolon terminating the declaration of an identifier other
   18135 than a function definition.  Such attribute specifiers apply to the
   18136 declared object or function.  Where an assembler name for an object or
   18137 function is specified (*note Asm Labels::), the attribute must follow
   18138 the `asm' specification.
   18139 
   18140  An attribute specifier list may, in future, be permitted to appear
   18141 after the declarator in a function definition (before any old-style
   18142 parameter declarations or the function body).
   18143 
   18144  Attribute specifiers may be mixed with type qualifiers appearing inside
   18145 the `[]' of a parameter array declarator, in the C99 construct by which
   18146 such qualifiers are applied to the pointer to which the array is
   18147 implicitly converted.  Such attribute specifiers apply to the pointer,
   18148 not to the array, but at present this is not implemented and they are
   18149 ignored.
   18150 
   18151  An attribute specifier list may appear at the start of a nested
   18152 declarator.  At present, there are some limitations in this usage: the
   18153 attributes correctly apply to the declarator, but for most individual
   18154 attributes the semantics this implies are not implemented.  When
   18155 attribute specifiers follow the `*' of a pointer declarator, they may
   18156 be mixed with any type qualifiers present.  The following describes the
   18157 formal semantics of this syntax.  It will make the most sense if you
   18158 are familiar with the formal specification of declarators in the ISO C
   18159 standard.
   18160 
   18161  Consider (as in C99 subclause 6.7.5 paragraph 4) a declaration `T D1',
   18162 where `T' contains declaration specifiers that specify a type TYPE
   18163 (such as `int') and `D1' is a declarator that contains an identifier
   18164 IDENT.  The type specified for IDENT for derived declarators whose type
   18165 does not include an attribute specifier is as in the ISO C standard.
   18166 
   18167  If `D1' has the form `( ATTRIBUTE-SPECIFIER-LIST D )', and the
   18168 declaration `T D' specifies the type "DERIVED-DECLARATOR-TYPE-LIST
   18169 TYPE" for IDENT, then `T D1' specifies the type
   18170 "DERIVED-DECLARATOR-TYPE-LIST ATTRIBUTE-SPECIFIER-LIST TYPE" for IDENT.
   18171 
   18172  If `D1' has the form `* TYPE-QUALIFIER-AND-ATTRIBUTE-SPECIFIER-LIST
   18173 D', and the declaration `T D' specifies the type
   18174 "DERIVED-DECLARATOR-TYPE-LIST TYPE" for IDENT, then `T D1' specifies
   18175 the type "DERIVED-DECLARATOR-TYPE-LIST
   18176 TYPE-QUALIFIER-AND-ATTRIBUTE-SPECIFIER-LIST TYPE" for IDENT.
   18177 
   18178  For example,
   18179 
   18180      void (__attribute__((noreturn)) ****f) (void);
   18181 
   18182 specifies the type "pointer to pointer to pointer to pointer to
   18183 non-returning function returning `void'".  As another example,
   18184 
   18185      char *__attribute__((aligned(8))) *f;
   18186 
   18187 specifies the type "pointer to 8-byte-aligned pointer to `char'".  Note
   18188 again that this does not work with most attributes; for example, the
   18189 usage of `aligned' and `noreturn' attributes given above is not yet
   18190 supported.
   18191 
   18192  For compatibility with existing code written for compiler versions that
   18193 did not implement attributes on nested declarators, some laxity is
   18194 allowed in the placing of attributes.  If an attribute that only applies
   18195 to types is applied to a declaration, it will be treated as applying to
   18196 the type of that declaration.  If an attribute that only applies to
   18197 declarations is applied to the type of a declaration, it will be treated
   18198 as applying to that declaration; and, for compatibility with code
   18199 placing the attributes immediately before the identifier declared, such
   18200 an attribute applied to a function return type will be treated as
   18201 applying to the function type, and such an attribute applied to an array
   18202 element type will be treated as applying to the array type.  If an
   18203 attribute that only applies to function types is applied to a
   18204 pointer-to-function type, it will be treated as applying to the pointer
   18205 target type; if such an attribute is applied to a function return type
   18206 that is not a pointer-to-function type, it will be treated as applying
   18207 to the function type.
   18208 
   18209 
   18210 File: gcc.info,  Node: Function Prototypes,  Next: C++ Comments,  Prev: Attribute Syntax,  Up: C Extensions
   18211 
   18212 5.29 Prototypes and Old-Style Function Definitions
   18213 ==================================================
   18214 
   18215 GNU C extends ISO C to allow a function prototype to override a later
   18216 old-style non-prototype definition.  Consider the following example:
   18217 
   18218      /* Use prototypes unless the compiler is old-fashioned.  */
   18219      #ifdef __STDC__
   18220      #define P(x) x
   18221      #else
   18222      #define P(x) ()
   18223      #endif
   18224 
   18225      /* Prototype function declaration.  */
   18226      int isroot P((uid_t));
   18227 
   18228      /* Old-style function definition.  */
   18229      int
   18230      isroot (x)   /* ??? lossage here ??? */
   18231           uid_t x;
   18232      {
   18233        return x == 0;
   18234      }
   18235 
   18236  Suppose the type `uid_t' happens to be `short'.  ISO C does not allow
   18237 this example, because subword arguments in old-style non-prototype
   18238 definitions are promoted.  Therefore in this example the function
   18239 definition's argument is really an `int', which does not match the
   18240 prototype argument type of `short'.
   18241 
   18242  This restriction of ISO C makes it hard to write code that is portable
   18243 to traditional C compilers, because the programmer does not know
   18244 whether the `uid_t' type is `short', `int', or `long'.  Therefore, in
   18245 cases like these GNU C allows a prototype to override a later old-style
   18246 definition.  More precisely, in GNU C, a function prototype argument
   18247 type overrides the argument type specified by a later old-style
   18248 definition if the former type is the same as the latter type before
   18249 promotion.  Thus in GNU C the above example is equivalent to the
   18250 following:
   18251 
   18252      int isroot (uid_t);
   18253 
   18254      int
   18255      isroot (uid_t x)
   18256      {
   18257        return x == 0;
   18258      }
   18259 
   18260 GNU C++ does not support old-style function definitions, so this
   18261 extension is irrelevant.
   18262 
   18263 
   18264 File: gcc.info,  Node: C++ Comments,  Next: Dollar Signs,  Prev: Function Prototypes,  Up: C Extensions
   18265 
   18266 5.30 C++ Style Comments
   18267 =======================
   18268 
   18269 In GNU C, you may use C++ style comments, which start with `//' and
   18270 continue until the end of the line.  Many other C implementations allow
   18271 such comments, and they are included in the 1999 C standard.  However,
   18272 C++ style comments are not recognized if you specify an `-std' option
   18273 specifying a version of ISO C before C99, or `-ansi' (equivalent to
   18274 `-std=c89').
   18275 
   18276 
   18277 File: gcc.info,  Node: Dollar Signs,  Next: Character Escapes,  Prev: C++ Comments,  Up: C Extensions
   18278 
   18279 5.31 Dollar Signs in Identifier Names
   18280 =====================================
   18281 
   18282 In GNU C, you may normally use dollar signs in identifier names.  This
   18283 is because many traditional C implementations allow such identifiers.
   18284 However, dollar signs in identifiers are not supported on a few target
   18285 machines, typically because the target assembler does not allow them.
   18286 
   18287 
   18288 File: gcc.info,  Node: Character Escapes,  Next: Variable Attributes,  Prev: Dollar Signs,  Up: C Extensions
   18289 
   18290 5.32 The Character <ESC> in Constants
   18291 =====================================
   18292 
   18293 You can use the sequence `\e' in a string or character constant to
   18294 stand for the ASCII character <ESC>.
   18295 
   18296 
   18297 File: gcc.info,  Node: Alignment,  Next: Inline,  Prev: Type Attributes,  Up: C Extensions
   18298 
   18299 5.33 Inquiring on Alignment of Types or Variables
   18300 =================================================
   18301 
   18302 The keyword `__alignof__' allows you to inquire about how an object is
   18303 aligned, or the minimum alignment usually required by a type.  Its
   18304 syntax is just like `sizeof'.
   18305 
   18306  For example, if the target machine requires a `double' value to be
   18307 aligned on an 8-byte boundary, then `__alignof__ (double)' is 8.  This
   18308 is true on many RISC machines.  On more traditional machine designs,
   18309 `__alignof__ (double)' is 4 or even 2.
   18310 
   18311  Some machines never actually require alignment; they allow reference
   18312 to any data type even at an odd address.  For these machines,
   18313 `__alignof__' reports the smallest alignment that GCC will give the
   18314 data type, usually as mandated by the target ABI.
   18315 
   18316  If the operand of `__alignof__' is an lvalue rather than a type, its
   18317 value is the required alignment for its type, taking into account any
   18318 minimum alignment specified with GCC's `__attribute__' extension (*note
   18319 Variable Attributes::).  For example, after this declaration:
   18320 
   18321      struct foo { int x; char y; } foo1;
   18322 
   18323 the value of `__alignof__ (foo1.y)' is 1, even though its actual
   18324 alignment is probably 2 or 4, the same as `__alignof__ (int)'.
   18325 
   18326  It is an error to ask for the alignment of an incomplete type.
   18327 
   18328 
   18329 File: gcc.info,  Node: Variable Attributes,  Next: Type Attributes,  Prev: Character Escapes,  Up: C Extensions
   18330 
   18331 5.34 Specifying Attributes of Variables
   18332 =======================================
   18333 
   18334 The keyword `__attribute__' allows you to specify special attributes of
   18335 variables or structure fields.  This keyword is followed by an
   18336 attribute specification inside double parentheses.  Some attributes are
   18337 currently defined generically for variables.  Other attributes are
   18338 defined for variables on particular target systems.  Other attributes
   18339 are available for functions (*note Function Attributes::) and for types
   18340 (*note Type Attributes::).  Other front ends might define more
   18341 attributes (*note Extensions to the C++ Language: C++ Extensions.).
   18342 
   18343  You may also specify attributes with `__' preceding and following each
   18344 keyword.  This allows you to use them in header files without being
   18345 concerned about a possible macro of the same name.  For example, you
   18346 may use `__aligned__' instead of `aligned'.
   18347 
   18348  *Note Attribute Syntax::, for details of the exact syntax for using
   18349 attributes.
   18350 
   18351 `aligned (ALIGNMENT)'
   18352      This attribute specifies a minimum alignment for the variable or
   18353      structure field, measured in bytes.  For example, the declaration:
   18354 
   18355           int x __attribute__ ((aligned (16))) = 0;
   18356 
   18357      causes the compiler to allocate the global variable `x' on a
   18358      16-byte boundary.  On a 68040, this could be used in conjunction
   18359      with an `asm' expression to access the `move16' instruction which
   18360      requires 16-byte aligned operands.
   18361 
   18362      You can also specify the alignment of structure fields.  For
   18363      example, to create a double-word aligned `int' pair, you could
   18364      write:
   18365 
   18366           struct foo { int x[2] __attribute__ ((aligned (8))); };
   18367 
   18368      This is an alternative to creating a union with a `double' member
   18369      that forces the union to be double-word aligned.
   18370 
   18371      As in the preceding examples, you can explicitly specify the
   18372      alignment (in bytes) that you wish the compiler to use for a given
   18373      variable or structure field.  Alternatively, you can leave out the
   18374      alignment factor and just ask the compiler to align a variable or
   18375      field to the maximum useful alignment for the target machine you
   18376      are compiling for.  For example, you could write:
   18377 
   18378           short array[3] __attribute__ ((aligned));
   18379 
   18380      Whenever you leave out the alignment factor in an `aligned'
   18381      attribute specification, the compiler automatically sets the
   18382      alignment for the declared variable or field to the largest
   18383      alignment which is ever used for any data type on the target
   18384      machine you are compiling for.  Doing this can often make copy
   18385      operations more efficient, because the compiler can use whatever
   18386      instructions copy the biggest chunks of memory when performing
   18387      copies to or from the variables or fields that you have aligned
   18388      this way.
   18389 
   18390      When used on a struct, or struct member, the `aligned' attribute
   18391      can only increase the alignment; in order to decrease it, the
   18392      `packed' attribute must be specified as well.  When used as part
   18393      of a typedef, the `aligned' attribute can both increase and
   18394      decrease alignment, and specifying the `packed' attribute will
   18395      generate a warning.
   18396 
   18397      Note that the effectiveness of `aligned' attributes may be limited
   18398      by inherent limitations in your linker.  On many systems, the
   18399      linker is only able to arrange for variables to be aligned up to a
   18400      certain maximum alignment.  (For some linkers, the maximum
   18401      supported alignment may be very very small.)  If your linker is
   18402      only able to align variables up to a maximum of 8 byte alignment,
   18403      then specifying `aligned(16)' in an `__attribute__' will still
   18404      only provide you with 8 byte alignment.  See your linker
   18405      documentation for further information.
   18406 
   18407      The `aligned' attribute can also be used for functions (*note
   18408      Function Attributes::.)
   18409 
   18410 `cleanup (CLEANUP_FUNCTION)'
   18411      The `cleanup' attribute runs a function when the variable goes out
   18412      of scope.  This attribute can only be applied to auto function
   18413      scope variables; it may not be applied to parameters or variables
   18414      with static storage duration.  The function must take one
   18415      parameter, a pointer to a type compatible with the variable.  The
   18416      return value of the function (if any) is ignored.
   18417 
   18418      If `-fexceptions' is enabled, then CLEANUP_FUNCTION will be run
   18419      during the stack unwinding that happens during the processing of
   18420      the exception.  Note that the `cleanup' attribute does not allow
   18421      the exception to be caught, only to perform an action.  It is
   18422      undefined what happens if CLEANUP_FUNCTION does not return
   18423      normally.
   18424 
   18425 `common'
   18426 `nocommon'
   18427      The `common' attribute requests GCC to place a variable in
   18428      "common" storage.  The `nocommon' attribute requests the
   18429      opposite--to allocate space for it directly.
   18430 
   18431      These attributes override the default chosen by the `-fno-common'
   18432      and `-fcommon' flags respectively.
   18433 
   18434 `deprecated'
   18435      The `deprecated' attribute results in a warning if the variable is
   18436      used anywhere in the source file.  This is useful when identifying
   18437      variables that are expected to be removed in a future version of a
   18438      program.  The warning also includes the location of the declaration
   18439      of the deprecated variable, to enable users to easily find further
   18440      information about why the variable is deprecated, or what they
   18441      should do instead.  Note that the warning only occurs for uses:
   18442 
   18443           extern int old_var __attribute__ ((deprecated));
   18444           extern int old_var;
   18445           int new_fn () { return old_var; }
   18446 
   18447      results in a warning on line 3 but not line 2.
   18448 
   18449      The `deprecated' attribute can also be used for functions and
   18450      types (*note Function Attributes::, *note Type Attributes::.)
   18451 
   18452 `mode (MODE)'
   18453      This attribute specifies the data type for the
   18454      declaration--whichever type corresponds to the mode MODE.  This in
   18455      effect lets you request an integer or floating point type
   18456      according to its width.
   18457 
   18458      You may also specify a mode of `byte' or `__byte__' to indicate
   18459      the mode corresponding to a one-byte integer, `word' or `__word__'
   18460      for the mode of a one-word integer, and `pointer' or `__pointer__'
   18461      for the mode used to represent pointers.
   18462 
   18463 `packed'
   18464      The `packed' attribute specifies that a variable or structure field
   18465      should have the smallest possible alignment--one byte for a
   18466      variable, and one bit for a field, unless you specify a larger
   18467      value with the `aligned' attribute.
   18468 
   18469      Here is a structure in which the field `x' is packed, so that it
   18470      immediately follows `a':
   18471 
   18472           struct foo
   18473           {
   18474             char a;
   18475             int x[2] __attribute__ ((packed));
   18476           };
   18477 
   18478 `section ("SECTION-NAME")'
   18479      Normally, the compiler places the objects it generates in sections
   18480      like `data' and `bss'.  Sometimes, however, you need additional
   18481      sections, or you need certain particular variables to appear in
   18482      special sections, for example to map to special hardware.  The
   18483      `section' attribute specifies that a variable (or function) lives
   18484      in a particular section.  For example, this small program uses
   18485      several specific section names:
   18486 
   18487           struct duart a __attribute__ ((section ("DUART_A"))) = { 0 };
   18488           struct duart b __attribute__ ((section ("DUART_B"))) = { 0 };
   18489           char stack[10000] __attribute__ ((section ("STACK"))) = { 0 };
   18490           int init_data __attribute__ ((section ("INITDATA"))) = 0;
   18491 
   18492           main()
   18493           {
   18494             /* Initialize stack pointer */
   18495             init_sp (stack + sizeof (stack));
   18496 
   18497             /* Initialize initialized data */
   18498             memcpy (&init_data, &data, &edata - &data);
   18499 
   18500             /* Turn on the serial ports */
   18501             init_duart (&a);
   18502             init_duart (&b);
   18503           }
   18504 
   18505      Use the `section' attribute with an _initialized_ definition of a
   18506      _global_ variable, as shown in the example.  GCC issues a warning
   18507      and otherwise ignores the `section' attribute in uninitialized
   18508      variable declarations.
   18509 
   18510      You may only use the `section' attribute with a fully initialized
   18511      global definition because of the way linkers work.  The linker
   18512      requires each object be defined once, with the exception that
   18513      uninitialized variables tentatively go in the `common' (or `bss')
   18514      section and can be multiply "defined".  You can force a variable
   18515      to be initialized with the `-fno-common' flag or the `nocommon'
   18516      attribute.
   18517 
   18518      Some file formats do not support arbitrary sections so the
   18519      `section' attribute is not available on all platforms.  If you
   18520      need to map the entire contents of a module to a particular
   18521      section, consider using the facilities of the linker instead.
   18522 
   18523 `shared'
   18524      On Microsoft Windows, in addition to putting variable definitions
   18525      in a named section, the section can also be shared among all
   18526      running copies of an executable or DLL.  For example, this small
   18527      program defines shared data by putting it in a named section
   18528      `shared' and marking the section shareable:
   18529 
   18530           int foo __attribute__((section ("shared"), shared)) = 0;
   18531 
   18532           int
   18533           main()
   18534           {
   18535             /* Read and write foo.  All running
   18536                copies see the same value.  */
   18537             return 0;
   18538           }
   18539 
   18540      You may only use the `shared' attribute along with `section'
   18541      attribute with a fully initialized global definition because of
   18542      the way linkers work.  See `section' attribute for more
   18543      information.
   18544 
   18545      The `shared' attribute is only available on Microsoft Windows.
   18546 
   18547 `tls_model ("TLS_MODEL")'
   18548      The `tls_model' attribute sets thread-local storage model (*note
   18549      Thread-Local::) of a particular `__thread' variable, overriding
   18550      `-ftls-model=' command line switch on a per-variable basis.  The
   18551      TLS_MODEL argument should be one of `global-dynamic',
   18552      `local-dynamic', `initial-exec' or `local-exec'.
   18553 
   18554      Not all targets support this attribute.
   18555 
   18556 `unused'
   18557      This attribute, attached to a variable, means that the variable is
   18558      meant to be possibly unused.  GCC will not produce a warning for
   18559      this variable.
   18560 
   18561 `used'
   18562      This attribute, attached to a variable, means that the variable
   18563      must be emitted even if it appears that the variable is not
   18564      referenced.
   18565 
   18566 `vector_size (BYTES)'
   18567      This attribute specifies the vector size for the variable,
   18568      measured in bytes.  For example, the declaration:
   18569 
   18570           int foo __attribute__ ((vector_size (16)));
   18571 
   18572      causes the compiler to set the mode for `foo', to be 16 bytes,
   18573      divided into `int' sized units.  Assuming a 32-bit int (a vector of
   18574      4 units of 4 bytes), the corresponding mode of `foo' will be V4SI.
   18575 
   18576      This attribute is only applicable to integral and float scalars,
   18577      although arrays, pointers, and function return values are allowed
   18578      in conjunction with this construct.
   18579 
   18580      Aggregates with this attribute are invalid, even if they are of
   18581      the same size as a corresponding scalar.  For example, the
   18582      declaration:
   18583 
   18584           struct S { int a; };
   18585           struct S  __attribute__ ((vector_size (16))) foo;
   18586 
   18587      is invalid even if the size of the structure is the same as the
   18588      size of the `int'.
   18589 
   18590 `selectany'
   18591      The `selectany' attribute causes an initialized global variable to
   18592      have link-once semantics.  When multiple definitions of the
   18593      variable are encountered by the linker, the first is selected and
   18594      the remainder are discarded.  Following usage by the Microsoft
   18595      compiler, the linker is told _not_ to warn about size or content
   18596      differences of the multiple definitions.
   18597 
   18598      Although the primary usage of this attribute is for POD types, the
   18599      attribute can also be applied to global C++ objects that are
   18600      initialized by a constructor.  In this case, the static
   18601      initialization and destruction code for the object is emitted in
   18602      each translation defining the object, but the calls to the
   18603      constructor and destructor are protected by a link-once guard
   18604      variable.
   18605 
   18606      The `selectany' attribute is only available on Microsoft Windows
   18607      targets.  You can use `__declspec (selectany)' as a synonym for
   18608      `__attribute__ ((selectany))' for compatibility with other
   18609      compilers.
   18610 
   18611 `weak'
   18612      The `weak' attribute is described in *Note Function Attributes::.
   18613 
   18614 `dllimport'
   18615      The `dllimport' attribute is described in *Note Function
   18616      Attributes::.
   18617 
   18618 `dllexport'
   18619      The `dllexport' attribute is described in *Note Function
   18620      Attributes::.
   18621 
   18622 
   18623 5.34.1 Blackfin Variable Attributes
   18624 -----------------------------------
   18625 
   18626 Three attributes are currently defined for the Blackfin.
   18627 
   18628 `l1_data'
   18629 
   18630 `l1_data_A'
   18631 
   18632 `l1_data_B'
   18633      Use these attributes on the Blackfin to place the variable into L1
   18634      Data SRAM.  Variables with `l1_data' attribute will be put into
   18635      the specific section named `.l1.data'. Those with `l1_data_A'
   18636      attribute will be put into the specific section named
   18637      `.l1.data.A'. Those with `l1_data_B' attribute will be put into
   18638      the specific section named `.l1.data.B'.
   18639 
   18640 5.34.2 M32R/D Variable Attributes
   18641 ---------------------------------
   18642 
   18643 One attribute is currently defined for the M32R/D.
   18644 
   18645 `model (MODEL-NAME)'
   18646      Use this attribute on the M32R/D to set the addressability of an
   18647      object.  The identifier MODEL-NAME is one of `small', `medium', or
   18648      `large', representing each of the code models.
   18649 
   18650      Small model objects live in the lower 16MB of memory (so that their
   18651      addresses can be loaded with the `ld24' instruction).
   18652 
   18653      Medium and large model objects may live anywhere in the 32-bit
   18654      address space (the compiler will generate `seth/add3' instructions
   18655      to load their addresses).
   18656 
   18657 5.34.3 i386 Variable Attributes
   18658 -------------------------------
   18659 
   18660 Two attributes are currently defined for i386 configurations:
   18661 `ms_struct' and `gcc_struct'
   18662 
   18663 `ms_struct'
   18664 `gcc_struct'
   18665      If `packed' is used on a structure, or if bit-fields are used it
   18666      may be that the Microsoft ABI packs them differently than GCC
   18667      would normally pack them.  Particularly when moving packed data
   18668      between functions compiled with GCC and the native Microsoft
   18669      compiler (either via function call or as data in a file), it may
   18670      be necessary to access either format.
   18671 
   18672      Currently `-m[no-]ms-bitfields' is provided for the Microsoft
   18673      Windows X86 compilers to match the native Microsoft compiler.
   18674 
   18675      The Microsoft structure layout algorithm is fairly simple with the
   18676      exception of the bitfield packing:
   18677 
   18678      The padding and alignment of members of structures and whether a
   18679      bit field can straddle a storage-unit boundary
   18680 
   18681        1. Structure members are stored sequentially in the order in
   18682           which they are declared: the first member has the lowest
   18683           memory address and the last member the highest.
   18684 
   18685        2. Every data object has an alignment-requirement. The
   18686           alignment-requirement for all data except structures, unions,
   18687           and arrays is either the size of the object or the current
   18688           packing size (specified with either the aligned attribute or
   18689           the pack pragma), whichever is less. For structures,  unions,
   18690           and arrays, the alignment-requirement is the largest
   18691           alignment-requirement of its members.  Every object is
   18692           allocated an offset so that:
   18693 
   18694           offset %  alignment-requirement == 0
   18695 
   18696        3. Adjacent bit fields are packed into the same 1-, 2-, or
   18697           4-byte allocation unit if the integral types are the same
   18698           size and if the next bit field fits into the current
   18699           allocation unit without crossing the boundary imposed by the
   18700           common alignment requirements of the bit fields.
   18701 
   18702      Handling of zero-length bitfields:
   18703 
   18704      MSVC interprets zero-length bitfields in the following ways:
   18705 
   18706        1. If a zero-length bitfield is inserted between two bitfields
   18707           that would normally be coalesced, the bitfields will not be
   18708           coalesced.
   18709 
   18710           For example:
   18711 
   18712                struct
   18713                 {
   18714                   unsigned long bf_1 : 12;
   18715                   unsigned long : 0;
   18716                   unsigned long bf_2 : 12;
   18717                 } t1;
   18718 
   18719           The size of `t1' would be 8 bytes with the zero-length
   18720           bitfield.  If the zero-length bitfield were removed, `t1''s
   18721           size would be 4 bytes.
   18722 
   18723        2. If a zero-length bitfield is inserted after a bitfield,
   18724           `foo', and the alignment of the zero-length bitfield is
   18725           greater than the member that follows it, `bar', `bar' will be
   18726           aligned as the type of the zero-length bitfield.
   18727 
   18728           For example:
   18729 
   18730                struct
   18731                 {
   18732                   char foo : 4;
   18733                   short : 0;
   18734                   char bar;
   18735                 } t2;
   18736 
   18737                struct
   18738                 {
   18739                   char foo : 4;
   18740                   short : 0;
   18741                   double bar;
   18742                 } t3;
   18743 
   18744           For `t2', `bar' will be placed at offset 2, rather than
   18745           offset 1.  Accordingly, the size of `t2' will be 4.  For
   18746           `t3', the zero-length bitfield will not affect the alignment
   18747           of `bar' or, as a result, the size of the structure.
   18748 
   18749           Taking this into account, it is important to note the
   18750           following:
   18751 
   18752             1. If a zero-length bitfield follows a normal bitfield, the
   18753                type of the zero-length bitfield may affect the
   18754                alignment of the structure as whole. For example, `t2'
   18755                has a size of 4 bytes, since the zero-length bitfield
   18756                follows a normal bitfield, and is of type short.
   18757 
   18758             2. Even if a zero-length bitfield is not followed by a
   18759                normal bitfield, it may still affect the alignment of
   18760                the structure:
   18761 
   18762                     struct
   18763                      {
   18764                        char foo : 6;
   18765                        long : 0;
   18766                      } t4;
   18767 
   18768                Here, `t4' will take up 4 bytes.
   18769 
   18770        3. Zero-length bitfields following non-bitfield members are
   18771           ignored:
   18772 
   18773                struct
   18774                 {
   18775                   char foo;
   18776                   long : 0;
   18777                   char bar;
   18778                 } t5;
   18779 
   18780           Here, `t5' will take up 2 bytes.
   18781 
   18782 5.34.4 PowerPC Variable Attributes
   18783 ----------------------------------
   18784 
   18785 Three attributes currently are defined for PowerPC configurations:
   18786 `altivec', `ms_struct' and `gcc_struct'.
   18787 
   18788  For full documentation of the struct attributes please see the
   18789 documentation in the *Note i386 Variable Attributes::, section.
   18790 
   18791  For documentation of `altivec' attribute please see the documentation
   18792 in the *Note PowerPC Type Attributes::, section.
   18793 
   18794 5.34.5 SPU Variable Attributes
   18795 ------------------------------
   18796 
   18797 The SPU supports the `spu_vector' attribute for variables.  For
   18798 documentation of this attribute please see the documentation in the
   18799 *Note SPU Type Attributes::, section.
   18800 
   18801 5.34.6 Xstormy16 Variable Attributes
   18802 ------------------------------------
   18803 
   18804 One attribute is currently defined for xstormy16 configurations:
   18805 `below100'
   18806 
   18807 `below100'
   18808      If a variable has the `below100' attribute (`BELOW100' is allowed
   18809      also), GCC will place the variable in the first 0x100 bytes of
   18810      memory and use special opcodes to access it.  Such variables will
   18811      be placed in either the `.bss_below100' section or the
   18812      `.data_below100' section.
   18813 
   18814 
   18815 5.34.7 AVR Variable Attributes
   18816 ------------------------------
   18817 
   18818 `progmem'
   18819      The `progmem' attribute is used on the AVR to place data in the
   18820      Program Memory address space. The AVR is a Harvard Architecture
   18821      processor and data normally resides in the Data Memory address
   18822      space.
   18823 
   18824 
   18825 File: gcc.info,  Node: Type Attributes,  Next: Alignment,  Prev: Variable Attributes,  Up: C Extensions
   18826 
   18827 5.35 Specifying Attributes of Types
   18828 ===================================
   18829 
   18830 The keyword `__attribute__' allows you to specify special attributes of
   18831 `struct' and `union' types when you define such types.  This keyword is
   18832 followed by an attribute specification inside double parentheses.
   18833 Seven attributes are currently defined for types: `aligned', `packed',
   18834 `transparent_union', `unused', `deprecated', `visibility', and
   18835 `may_alias'.  Other attributes are defined for functions (*note
   18836 Function Attributes::) and for variables (*note Variable Attributes::).
   18837 
   18838  You may also specify any one of these attributes with `__' preceding
   18839 and following its keyword.  This allows you to use these attributes in
   18840 header files without being concerned about a possible macro of the same
   18841 name.  For example, you may use `__aligned__' instead of `aligned'.
   18842 
   18843  You may specify type attributes in an enum, struct or union type
   18844 declaration or definition, or for other types in a `typedef'
   18845 declaration.
   18846 
   18847  For an enum, struct or union type, you may specify attributes either
   18848 between the enum, struct or union tag and the name of the type, or just
   18849 past the closing curly brace of the _definition_.  The former syntax is
   18850 preferred.
   18851 
   18852  *Note Attribute Syntax::, for details of the exact syntax for using
   18853 attributes.
   18854 
   18855 `aligned (ALIGNMENT)'
   18856      This attribute specifies a minimum alignment (in bytes) for
   18857      variables of the specified type.  For example, the declarations:
   18858 
   18859           struct S { short f[3]; } __attribute__ ((aligned (8)));
   18860           typedef int more_aligned_int __attribute__ ((aligned (8)));
   18861 
   18862      force the compiler to insure (as far as it can) that each variable
   18863      whose type is `struct S' or `more_aligned_int' will be allocated
   18864      and aligned _at least_ on a 8-byte boundary.  On a SPARC, having
   18865      all variables of type `struct S' aligned to 8-byte boundaries
   18866      allows the compiler to use the `ldd' and `std' (doubleword load and
   18867      store) instructions when copying one variable of type `struct S' to
   18868      another, thus improving run-time efficiency.
   18869 
   18870      Note that the alignment of any given `struct' or `union' type is
   18871      required by the ISO C standard to be at least a perfect multiple of
   18872      the lowest common multiple of the alignments of all of the members
   18873      of the `struct' or `union' in question.  This means that you _can_
   18874      effectively adjust the alignment of a `struct' or `union' type by
   18875      attaching an `aligned' attribute to any one of the members of such
   18876      a type, but the notation illustrated in the example above is a
   18877      more obvious, intuitive, and readable way to request the compiler
   18878      to adjust the alignment of an entire `struct' or `union' type.
   18879 
   18880      As in the preceding example, you can explicitly specify the
   18881      alignment (in bytes) that you wish the compiler to use for a given
   18882      `struct' or `union' type.  Alternatively, you can leave out the
   18883      alignment factor and just ask the compiler to align a type to the
   18884      maximum useful alignment for the target machine you are compiling
   18885      for.  For example, you could write:
   18886 
   18887           struct S { short f[3]; } __attribute__ ((aligned));
   18888 
   18889      Whenever you leave out the alignment factor in an `aligned'
   18890      attribute specification, the compiler automatically sets the
   18891      alignment for the type to the largest alignment which is ever used
   18892      for any data type on the target machine you are compiling for.
   18893      Doing this can often make copy operations more efficient, because
   18894      the compiler can use whatever instructions copy the biggest chunks
   18895      of memory when performing copies to or from the variables which
   18896      have types that you have aligned this way.
   18897 
   18898      In the example above, if the size of each `short' is 2 bytes, then
   18899      the size of the entire `struct S' type is 6 bytes.  The smallest
   18900      power of two which is greater than or equal to that is 8, so the
   18901      compiler sets the alignment for the entire `struct S' type to 8
   18902      bytes.
   18903 
   18904      Note that although you can ask the compiler to select a
   18905      time-efficient alignment for a given type and then declare only
   18906      individual stand-alone objects of that type, the compiler's
   18907      ability to select a time-efficient alignment is primarily useful
   18908      only when you plan to create arrays of variables having the
   18909      relevant (efficiently aligned) type.  If you declare or use arrays
   18910      of variables of an efficiently-aligned type, then it is likely
   18911      that your program will also be doing pointer arithmetic (or
   18912      subscripting, which amounts to the same thing) on pointers to the
   18913      relevant type, and the code that the compiler generates for these
   18914      pointer arithmetic operations will often be more efficient for
   18915      efficiently-aligned types than for other types.
   18916 
   18917      The `aligned' attribute can only increase the alignment; but you
   18918      can decrease it by specifying `packed' as well.  See below.
   18919 
   18920      Note that the effectiveness of `aligned' attributes may be limited
   18921      by inherent limitations in your linker.  On many systems, the
   18922      linker is only able to arrange for variables to be aligned up to a
   18923      certain maximum alignment.  (For some linkers, the maximum
   18924      supported alignment may be very very small.)  If your linker is
   18925      only able to align variables up to a maximum of 8 byte alignment,
   18926      then specifying `aligned(16)' in an `__attribute__' will still
   18927      only provide you with 8 byte alignment.  See your linker
   18928      documentation for further information.
   18929 
   18930 `packed'
   18931      This attribute, attached to `struct' or `union' type definition,
   18932      specifies that each member (other than zero-width bitfields) of
   18933      the structure or union is placed to minimize the memory required.
   18934      When attached to an `enum' definition, it indicates that the
   18935      smallest integral type should be used.
   18936 
   18937      Specifying this attribute for `struct' and `union' types is
   18938      equivalent to specifying the `packed' attribute on each of the
   18939      structure or union members.  Specifying the `-fshort-enums' flag
   18940      on the line is equivalent to specifying the `packed' attribute on
   18941      all `enum' definitions.
   18942 
   18943      In the following example `struct my_packed_struct''s members are
   18944      packed closely together, but the internal layout of its `s' member
   18945      is not packed--to do that, `struct my_unpacked_struct' would need
   18946      to be packed too.
   18947 
   18948           struct my_unpacked_struct
   18949            {
   18950               char c;
   18951               int i;
   18952            };
   18953 
   18954           struct __attribute__ ((__packed__)) my_packed_struct
   18955             {
   18956                char c;
   18957                int  i;
   18958                struct my_unpacked_struct s;
   18959             };
   18960 
   18961      You may only specify this attribute on the definition of a `enum',
   18962      `struct' or `union', not on a `typedef' which does not also define
   18963      the enumerated type, structure or union.
   18964 
   18965 `transparent_union'
   18966      This attribute, attached to a `union' type definition, indicates
   18967      that any function parameter having that union type causes calls to
   18968      that function to be treated in a special way.
   18969 
   18970      First, the argument corresponding to a transparent union type can
   18971      be of any type in the union; no cast is required.  Also, if the
   18972      union contains a pointer type, the corresponding argument can be a
   18973      null pointer constant or a void pointer expression; and if the
   18974      union contains a void pointer type, the corresponding argument can
   18975      be any pointer expression.  If the union member type is a pointer,
   18976      qualifiers like `const' on the referenced type must be respected,
   18977      just as with normal pointer conversions.
   18978 
   18979      Second, the argument is passed to the function using the calling
   18980      conventions of the first member of the transparent union, not the
   18981      calling conventions of the union itself.  All members of the union
   18982      must have the same machine representation; this is necessary for
   18983      this argument passing to work properly.
   18984 
   18985      Transparent unions are designed for library functions that have
   18986      multiple interfaces for compatibility reasons.  For example,
   18987      suppose the `wait' function must accept either a value of type
   18988      `int *' to comply with Posix, or a value of type `union wait *' to
   18989      comply with the 4.1BSD interface.  If `wait''s parameter were
   18990      `void *', `wait' would accept both kinds of arguments, but it
   18991      would also accept any other pointer type and this would make
   18992      argument type checking less useful.  Instead, `<sys/wait.h>' might
   18993      define the interface as follows:
   18994 
   18995           typedef union __attribute__ ((__transparent_union__))
   18996             {
   18997               int *__ip;
   18998               union wait *__up;
   18999             } wait_status_ptr_t;
   19000 
   19001           pid_t wait (wait_status_ptr_t);
   19002 
   19003      This interface allows either `int *' or `union wait *' arguments
   19004      to be passed, using the `int *' calling convention.  The program
   19005      can call `wait' with arguments of either type:
   19006 
   19007           int w1 () { int w; return wait (&w); }
   19008           int w2 () { union wait w; return wait (&w); }
   19009 
   19010      With this interface, `wait''s implementation might look like this:
   19011 
   19012           pid_t wait (wait_status_ptr_t p)
   19013           {
   19014             return waitpid (-1, p.__ip, 0);
   19015           }
   19016 
   19017 `unused'
   19018      When attached to a type (including a `union' or a `struct'), this
   19019      attribute means that variables of that type are meant to appear
   19020      possibly unused.  GCC will not produce a warning for any variables
   19021      of that type, even if the variable appears to do nothing.  This is
   19022      often the case with lock or thread classes, which are usually
   19023      defined and then not referenced, but contain constructors and
   19024      destructors that have nontrivial bookkeeping functions.
   19025 
   19026 `deprecated'
   19027      The `deprecated' attribute results in a warning if the type is
   19028      used anywhere in the source file.  This is useful when identifying
   19029      types that are expected to be removed in a future version of a
   19030      program.  If possible, the warning also includes the location of
   19031      the declaration of the deprecated type, to enable users to easily
   19032      find further information about why the type is deprecated, or what
   19033      they should do instead.  Note that the warnings only occur for
   19034      uses and then only if the type is being applied to an identifier
   19035      that itself is not being declared as deprecated.
   19036 
   19037           typedef int T1 __attribute__ ((deprecated));
   19038           T1 x;
   19039           typedef T1 T2;
   19040           T2 y;
   19041           typedef T1 T3 __attribute__ ((deprecated));
   19042           T3 z __attribute__ ((deprecated));
   19043 
   19044      results in a warning on line 2 and 3 but not lines 4, 5, or 6.  No
   19045      warning is issued for line 4 because T2 is not explicitly
   19046      deprecated.  Line 5 has no warning because T3 is explicitly
   19047      deprecated.  Similarly for line 6.
   19048 
   19049      The `deprecated' attribute can also be used for functions and
   19050      variables (*note Function Attributes::, *note Variable
   19051      Attributes::.)
   19052 
   19053 `may_alias'
   19054      Accesses to objects with types with this attribute are not
   19055      subjected to type-based alias analysis, but are instead assumed to
   19056      be able to alias any other type of objects, just like the `char'
   19057      type.  See `-fstrict-aliasing' for more information on aliasing
   19058      issues.
   19059 
   19060      Example of use:
   19061 
   19062           typedef short __attribute__((__may_alias__)) short_a;
   19063 
   19064           int
   19065           main (void)
   19066           {
   19067             int a = 0x12345678;
   19068             short_a *b = (short_a *) &a;
   19069 
   19070             b[1] = 0;
   19071 
   19072             if (a == 0x12345678)
   19073               abort();
   19074 
   19075             exit(0);
   19076           }
   19077 
   19078      If you replaced `short_a' with `short' in the variable
   19079      declaration, the above program would abort when compiled with
   19080      `-fstrict-aliasing', which is on by default at `-O2' or above in
   19081      recent GCC versions.
   19082 
   19083 `visibility'
   19084      In C++, attribute visibility (*note Function Attributes::) can
   19085      also be applied to class, struct, union and enum types.  Unlike
   19086      other type attributes, the attribute must appear between the
   19087      initial keyword and the name of the type; it cannot appear after
   19088      the body of the type.
   19089 
   19090      Note that the type visibility is applied to vague linkage entities
   19091      associated with the class (vtable, typeinfo node, etc.).  In
   19092      particular, if a class is thrown as an exception in one shared
   19093      object and caught in another, the class must have default
   19094      visibility.  Otherwise the two shared objects will be unable to
   19095      use the same typeinfo node and exception handling will break.
   19096 
   19097 5.35.1 ARM Type Attributes
   19098 --------------------------
   19099 
   19100      On those ARM targets that support `dllimport' (such as Symbian
   19101 OS), you can use the `notshared' attribute to indicate that the virtual
   19102 table and other similar data for a class should not be exported from a
   19103 DLL.  For example:
   19104 
   19105           class __declspec(notshared) C {
   19106           public:
   19107             __declspec(dllimport) C();
   19108             virtual void f();
   19109           }
   19110 
   19111           __declspec(dllexport)
   19112           C::C() {}
   19113 
   19114      In this code, `C::C' is exported from the current DLL, but the
   19115 virtual table for `C' is not exported.  (You can use `__attribute__'
   19116 instead of `__declspec' if you prefer, but most Symbian OS code uses
   19117 `__declspec'.)
   19118 
   19119 5.35.2 i386 Type Attributes
   19120 ---------------------------
   19121 
   19122      Two attributes are currently defined for i386 configurations:
   19123 `ms_struct' and `gcc_struct'
   19124 
   19125 `ms_struct'
   19126 `gcc_struct'
   19127      If `packed' is used on a structure, or if bit-fields are used it
   19128      may be that the Microsoft ABI packs them differently than GCC
   19129      would normally pack them.  Particularly when moving packed data
   19130      between functions compiled with GCC and the native Microsoft
   19131      compiler (either via function call or as data in a file), it may
   19132      be necessary to access either format.
   19133 
   19134      Currently `-m[no-]ms-bitfields' is provided for the Microsoft
   19135      Windows X86 compilers to match the native Microsoft compiler.
   19136 
   19137  To specify multiple attributes, separate them by commas within the
   19138 double parentheses: for example, `__attribute__ ((aligned (16),
   19139 packed))'.
   19140 
   19141 5.35.3 PowerPC Type Attributes
   19142 ------------------------------
   19143 
   19144 Three attributes currently are defined for PowerPC configurations:
   19145 `altivec', `ms_struct' and `gcc_struct'.
   19146 
   19147  For full documentation of the struct attributes please see the
   19148 documentation in the *Note i386 Type Attributes::, section.
   19149 
   19150  The `altivec' attribute allows one to declare AltiVec vector data
   19151 types supported by the AltiVec Programming Interface Manual.  The
   19152 attribute requires an argument to specify one of three vector types:
   19153 `vector__', `pixel__' (always followed by unsigned short), and `bool__'
   19154 (always followed by unsigned).
   19155 
   19156      __attribute__((altivec(vector__)))
   19157      __attribute__((altivec(pixel__))) unsigned short
   19158      __attribute__((altivec(bool__))) unsigned
   19159 
   19160  These attributes mainly are intended to support the `__vector',
   19161 `__pixel', and `__bool' AltiVec keywords.
   19162 
   19163 5.35.4 SPU Type Attributes
   19164 --------------------------
   19165 
   19166 The SPU supports the `spu_vector' attribute for types.  This attribute
   19167 allows one to declare vector data types supported by the
   19168 Sony/Toshiba/IBM SPU Language Extensions Specification.  It is intended
   19169 to support the `__vector' keyword.
   19170 
   19171 
   19172 File: gcc.info,  Node: Inline,  Next: Extended Asm,  Prev: Alignment,  Up: C Extensions
   19173 
   19174 5.36 An Inline Function is As Fast As a Macro
   19175 =============================================
   19176 
   19177 By declaring a function inline, you can direct GCC to make calls to
   19178 that function faster.  One way GCC can achieve this is to integrate
   19179 that function's code into the code for its callers.  This makes
   19180 execution faster by eliminating the function-call overhead; in
   19181 addition, if any of the actual argument values are constant, their
   19182 known values may permit simplifications at compile time so that not all
   19183 of the inline function's code needs to be included.  The effect on code
   19184 size is less predictable; object code may be larger or smaller with
   19185 function inlining, depending on the particular case.  You can also
   19186 direct GCC to try to integrate all "simple enough" functions into their
   19187 callers with the option `-finline-functions'.
   19188 
   19189  GCC implements three different semantics of declaring a function
   19190 inline.  One is available with `-std=gnu89' or `-fgnu89-inline' or when
   19191 `gnu_inline' attribute is present on all inline declarations, another
   19192 when `-std=c99' or `-std=gnu99' (without `-fgnu89-inline'), and the
   19193 third is used when compiling C++.
   19194 
   19195  To declare a function inline, use the `inline' keyword in its
   19196 declaration, like this:
   19197 
   19198      static inline int
   19199      inc (int *a)
   19200      {
   19201        (*a)++;
   19202      }
   19203 
   19204  If you are writing a header file to be included in ISO C89 programs,
   19205 write `__inline__' instead of `inline'.  *Note Alternate Keywords::.
   19206 
   19207  The three types of inlining behave similarly in two important cases:
   19208 when the `inline' keyword is used on a `static' function, like the
   19209 example above, and when a function is first declared without using the
   19210 `inline' keyword and then is defined with `inline', like this:
   19211 
   19212      extern int inc (int *a);
   19213      inline int
   19214      inc (int *a)
   19215      {
   19216        (*a)++;
   19217      }
   19218 
   19219  In both of these common cases, the program behaves the same as if you
   19220 had not used the `inline' keyword, except for its speed.
   19221 
   19222  When a function is both inline and `static', if all calls to the
   19223 function are integrated into the caller, and the function's address is
   19224 never used, then the function's own assembler code is never referenced.
   19225 In this case, GCC does not actually output assembler code for the
   19226 function, unless you specify the option `-fkeep-inline-functions'.
   19227 Some calls cannot be integrated for various reasons (in particular,
   19228 calls that precede the function's definition cannot be integrated, and
   19229 neither can recursive calls within the definition).  If there is a
   19230 nonintegrated call, then the function is compiled to assembler code as
   19231 usual.  The function must also be compiled as usual if the program
   19232 refers to its address, because that can't be inlined.
   19233 
   19234  Note that certain usages in a function definition can make it
   19235 unsuitable for inline substitution.  Among these usages are: use of
   19236 varargs, use of alloca, use of variable sized data types (*note
   19237 Variable Length::), use of computed goto (*note Labels as Values::),
   19238 use of nonlocal goto, and nested functions (*note Nested Functions::).
   19239 Using `-Winline' will warn when a function marked `inline' could not be
   19240 substituted, and will give the reason for the failure.
   19241 
   19242  As required by ISO C++, GCC considers member functions defined within
   19243 the body of a class to be marked inline even if they are not explicitly
   19244 declared with the `inline' keyword.  You can override this with
   19245 `-fno-default-inline'; *note Options Controlling C++ Dialect: C++
   19246 Dialect Options.
   19247 
   19248  GCC does not inline any functions when not optimizing unless you
   19249 specify the `always_inline' attribute for the function, like this:
   19250 
   19251      /* Prototype.  */
   19252      inline void foo (const char) __attribute__((always_inline));
   19253 
   19254  The remainder of this section is specific to GNU C89 inlining.
   19255 
   19256  When an inline function is not `static', then the compiler must assume
   19257 that there may be calls from other source files; since a global symbol
   19258 can be defined only once in any program, the function must not be
   19259 defined in the other source files, so the calls therein cannot be
   19260 integrated.  Therefore, a non-`static' inline function is always
   19261 compiled on its own in the usual fashion.
   19262 
   19263  If you specify both `inline' and `extern' in the function definition,
   19264 then the definition is used only for inlining.  In no case is the
   19265 function compiled on its own, not even if you refer to its address
   19266 explicitly.  Such an address becomes an external reference, as if you
   19267 had only declared the function, and had not defined it.
   19268 
   19269  This combination of `inline' and `extern' has almost the effect of a
   19270 macro.  The way to use it is to put a function definition in a header
   19271 file with these keywords, and put another copy of the definition
   19272 (lacking `inline' and `extern') in a library file.  The definition in
   19273 the header file will cause most calls to the function to be inlined.
   19274 If any uses of the function remain, they will refer to the single copy
   19275 in the library.
   19276 
   19277 
   19278 File: gcc.info,  Node: Extended Asm,  Next: Constraints,  Prev: Inline,  Up: C Extensions
   19279 
   19280 5.37 Assembler Instructions with C Expression Operands
   19281 ======================================================
   19282 
   19283 In an assembler instruction using `asm', you can specify the operands
   19284 of the instruction using C expressions.  This means you need not guess
   19285 which registers or memory locations will contain the data you want to
   19286 use.
   19287 
   19288  You must specify an assembler instruction template much like what
   19289 appears in a machine description, plus an operand constraint string for
   19290 each operand.
   19291 
   19292  For example, here is how to use the 68881's `fsinx' instruction:
   19293 
   19294      asm ("fsinx %1,%0" : "=f" (result) : "f" (angle));
   19295 
   19296 Here `angle' is the C expression for the input operand while `result'
   19297 is that of the output operand.  Each has `"f"' as its operand
   19298 constraint, saying that a floating point register is required.  The `='
   19299 in `=f' indicates that the operand is an output; all output operands'
   19300 constraints must use `='.  The constraints use the same language used
   19301 in the machine description (*note Constraints::).
   19302 
   19303  Each operand is described by an operand-constraint string followed by
   19304 the C expression in parentheses.  A colon separates the assembler
   19305 template from the first output operand and another separates the last
   19306 output operand from the first input, if any.  Commas separate the
   19307 operands within each group.  The total number of operands is currently
   19308 limited to 30; this limitation may be lifted in some future version of
   19309 GCC.
   19310 
   19311  If there are no output operands but there are input operands, you must
   19312 place two consecutive colons surrounding the place where the output
   19313 operands would go.
   19314 
   19315  As of GCC version 3.1, it is also possible to specify input and output
   19316 operands using symbolic names which can be referenced within the
   19317 assembler code.  These names are specified inside square brackets
   19318 preceding the constraint string, and can be referenced inside the
   19319 assembler code using `%[NAME]' instead of a percentage sign followed by
   19320 the operand number.  Using named operands the above example could look
   19321 like:
   19322 
   19323      asm ("fsinx %[angle],%[output]"
   19324           : [output] "=f" (result)
   19325           : [angle] "f" (angle));
   19326 
   19327 Note that the symbolic operand names have no relation whatsoever to
   19328 other C identifiers.  You may use any name you like, even those of
   19329 existing C symbols, but you must ensure that no two operands within the
   19330 same assembler construct use the same symbolic name.
   19331 
   19332  Output operand expressions must be lvalues; the compiler can check
   19333 this.  The input operands need not be lvalues.  The compiler cannot
   19334 check whether the operands have data types that are reasonable for the
   19335 instruction being executed.  It does not parse the assembler instruction
   19336 template and does not know what it means or even whether it is valid
   19337 assembler input.  The extended `asm' feature is most often used for
   19338 machine instructions the compiler itself does not know exist.  If the
   19339 output expression cannot be directly addressed (for example, it is a
   19340 bit-field), your constraint must allow a register.  In that case, GCC
   19341 will use the register as the output of the `asm', and then store that
   19342 register into the output.
   19343 
   19344  The ordinary output operands must be write-only; GCC will assume that
   19345 the values in these operands before the instruction are dead and need
   19346 not be generated.  Extended asm supports input-output or read-write
   19347 operands.  Use the constraint character `+' to indicate such an operand
   19348 and list it with the output operands.  You should only use read-write
   19349 operands when the constraints for the operand (or the operand in which
   19350 only some of the bits are to be changed) allow a register.
   19351 
   19352  You may, as an alternative, logically split its function into two
   19353 separate operands, one input operand and one write-only output operand.
   19354 The connection between them is expressed by constraints which say they
   19355 need to be in the same location when the instruction executes.  You can
   19356 use the same C expression for both operands, or different expressions.
   19357 For example, here we write the (fictitious) `combine' instruction with
   19358 `bar' as its read-only source operand and `foo' as its read-write
   19359 destination:
   19360 
   19361      asm ("combine %2,%0" : "=r" (foo) : "0" (foo), "g" (bar));
   19362 
   19363 The constraint `"0"' for operand 1 says that it must occupy the same
   19364 location as operand 0.  A number in constraint is allowed only in an
   19365 input operand and it must refer to an output operand.
   19366 
   19367  Only a number in the constraint can guarantee that one operand will be
   19368 in the same place as another.  The mere fact that `foo' is the value of
   19369 both operands is not enough to guarantee that they will be in the same
   19370 place in the generated assembler code.  The following would not work
   19371 reliably:
   19372 
   19373      asm ("combine %2,%0" : "=r" (foo) : "r" (foo), "g" (bar));
   19374 
   19375  Various optimizations or reloading could cause operands 0 and 1 to be
   19376 in different registers; GCC knows no reason not to do so.  For example,
   19377 the compiler might find a copy of the value of `foo' in one register and
   19378 use it for operand 1, but generate the output operand 0 in a different
   19379 register (copying it afterward to `foo''s own address).  Of course,
   19380 since the register for operand 1 is not even mentioned in the assembler
   19381 code, the result will not work, but GCC can't tell that.
   19382 
   19383  As of GCC version 3.1, one may write `[NAME]' instead of the operand
   19384 number for a matching constraint.  For example:
   19385 
   19386      asm ("cmoveq %1,%2,%[result]"
   19387           : [result] "=r"(result)
   19388           : "r" (test), "r"(new), "[result]"(old));
   19389 
   19390  Sometimes you need to make an `asm' operand be a specific register,
   19391 but there's no matching constraint letter for that register _by
   19392 itself_.  To force the operand into that register, use a local variable
   19393 for the operand and specify the register in the variable declaration.
   19394 *Note Explicit Reg Vars::.  Then for the `asm' operand, use any
   19395 register constraint letter that matches the register:
   19396 
   19397      register int *p1 asm ("r0") = ...;
   19398      register int *p2 asm ("r1") = ...;
   19399      register int *result asm ("r0");
   19400      asm ("sysint" : "=r" (result) : "0" (p1), "r" (p2));
   19401 
   19402  In the above example, beware that a register that is call-clobbered by
   19403 the target ABI will be overwritten by any function call in the
   19404 assignment, including library calls for arithmetic operators.  Assuming
   19405 it is a call-clobbered register, this may happen to `r0' above by the
   19406 assignment to `p2'.  If you have to use such a register, use temporary
   19407 variables for expressions between the register assignment and use:
   19408 
   19409      int t1 = ...;
   19410      register int *p1 asm ("r0") = ...;
   19411      register int *p2 asm ("r1") = t1;
   19412      register int *result asm ("r0");
   19413      asm ("sysint" : "=r" (result) : "0" (p1), "r" (p2));
   19414 
   19415  Some instructions clobber specific hard registers.  To describe this,
   19416 write a third colon after the input operands, followed by the names of
   19417 the clobbered hard registers (given as strings).  Here is a realistic
   19418 example for the VAX:
   19419 
   19420      asm volatile ("movc3 %0,%1,%2"
   19421                    : /* no outputs */
   19422                    : "g" (from), "g" (to), "g" (count)
   19423                    : "r0", "r1", "r2", "r3", "r4", "r5");
   19424 
   19425  You may not write a clobber description in a way that overlaps with an
   19426 input or output operand.  For example, you may not have an operand
   19427 describing a register class with one member if you mention that register
   19428 in the clobber list.  Variables declared to live in specific registers
   19429 (*note Explicit Reg Vars::), and used as asm input or output operands
   19430 must have no part mentioned in the clobber description.  There is no
   19431 way for you to specify that an input operand is modified without also
   19432 specifying it as an output operand.  Note that if all the output
   19433 operands you specify are for this purpose (and hence unused), you will
   19434 then also need to specify `volatile' for the `asm' construct, as
   19435 described below, to prevent GCC from deleting the `asm' statement as
   19436 unused.
   19437 
   19438  If you refer to a particular hardware register from the assembler code,
   19439 you will probably have to list the register after the third colon to
   19440 tell the compiler the register's value is modified.  In some assemblers,
   19441 the register names begin with `%'; to produce one `%' in the assembler
   19442 code, you must write `%%' in the input.
   19443 
   19444  If your assembler instruction can alter the condition code register,
   19445 add `cc' to the list of clobbered registers.  GCC on some machines
   19446 represents the condition codes as a specific hardware register; `cc'
   19447 serves to name this register.  On other machines, the condition code is
   19448 handled differently, and specifying `cc' has no effect.  But it is
   19449 valid no matter what the machine.
   19450 
   19451  If your assembler instructions access memory in an unpredictable
   19452 fashion, add `memory' to the list of clobbered registers.  This will
   19453 cause GCC to not keep memory values cached in registers across the
   19454 assembler instruction and not optimize stores or loads to that memory.
   19455 You will also want to add the `volatile' keyword if the memory affected
   19456 is not listed in the inputs or outputs of the `asm', as the `memory'
   19457 clobber does not count as a side-effect of the `asm'.  If you know how
   19458 large the accessed memory is, you can add it as input or output but if
   19459 this is not known, you should add `memory'.  As an example, if you
   19460 access ten bytes of a string, you can use a memory input like:
   19461 
   19462      {"m"( ({ struct { char x[10]; } *p = (void *)ptr ; *p; }) )}.
   19463 
   19464  Note that in the following example the memory input is necessary,
   19465 otherwise GCC might optimize the store to `x' away:
   19466      int foo ()
   19467      {
   19468        int x = 42;
   19469        int *y = &x;
   19470        int result;
   19471        asm ("magic stuff accessing an 'int' pointed to by '%1'"
   19472              "=&d" (r) : "a" (y), "m" (*y));
   19473        return result;
   19474      }
   19475 
   19476  You can put multiple assembler instructions together in a single `asm'
   19477 template, separated by the characters normally used in assembly code
   19478 for the system.  A combination that works in most places is a newline
   19479 to break the line, plus a tab character to move to the instruction field
   19480 (written as `\n\t').  Sometimes semicolons can be used, if the
   19481 assembler allows semicolons as a line-breaking character.  Note that
   19482 some assembler dialects use semicolons to start a comment.  The input
   19483 operands are guaranteed not to use any of the clobbered registers, and
   19484 neither will the output operands' addresses, so you can read and write
   19485 the clobbered registers as many times as you like.  Here is an example
   19486 of multiple instructions in a template; it assumes the subroutine
   19487 `_foo' accepts arguments in registers 9 and 10:
   19488 
   19489      asm ("movl %0,r9\n\tmovl %1,r10\n\tcall _foo"
   19490           : /* no outputs */
   19491           : "g" (from), "g" (to)
   19492           : "r9", "r10");
   19493 
   19494  Unless an output operand has the `&' constraint modifier, GCC may
   19495 allocate it in the same register as an unrelated input operand, on the
   19496 assumption the inputs are consumed before the outputs are produced.
   19497 This assumption may be false if the assembler code actually consists of
   19498 more than one instruction.  In such a case, use `&' for each output
   19499 operand that may not overlap an input.  *Note Modifiers::.
   19500 
   19501  If you want to test the condition code produced by an assembler
   19502 instruction, you must include a branch and a label in the `asm'
   19503 construct, as follows:
   19504 
   19505      asm ("clr %0\n\tfrob %1\n\tbeq 0f\n\tmov #1,%0\n0:"
   19506           : "g" (result)
   19507           : "g" (input));
   19508 
   19509 This assumes your assembler supports local labels, as the GNU assembler
   19510 and most Unix assemblers do.
   19511 
   19512  Speaking of labels, jumps from one `asm' to another are not supported.
   19513 The compiler's optimizers do not know about these jumps, and therefore
   19514 they cannot take account of them when deciding how to optimize.
   19515 
   19516  Usually the most convenient way to use these `asm' instructions is to
   19517 encapsulate them in macros that look like functions.  For example,
   19518 
   19519      #define sin(x)       \
   19520      ({ double __value, __arg = (x);   \
   19521         asm ("fsinx %1,%0": "=f" (__value): "f" (__arg));  \
   19522         __value; })
   19523 
   19524 Here the variable `__arg' is used to make sure that the instruction
   19525 operates on a proper `double' value, and to accept only those arguments
   19526 `x' which can convert automatically to a `double'.
   19527 
   19528  Another way to make sure the instruction operates on the correct data
   19529 type is to use a cast in the `asm'.  This is different from using a
   19530 variable `__arg' in that it converts more different types.  For
   19531 example, if the desired type were `int', casting the argument to `int'
   19532 would accept a pointer with no complaint, while assigning the argument
   19533 to an `int' variable named `__arg' would warn about using a pointer
   19534 unless the caller explicitly casts it.
   19535 
   19536  If an `asm' has output operands, GCC assumes for optimization purposes
   19537 the instruction has no side effects except to change the output
   19538 operands.  This does not mean instructions with a side effect cannot be
   19539 used, but you must be careful, because the compiler may eliminate them
   19540 if the output operands aren't used, or move them out of loops, or
   19541 replace two with one if they constitute a common subexpression.  Also,
   19542 if your instruction does have a side effect on a variable that otherwise
   19543 appears not to change, the old value of the variable may be reused later
   19544 if it happens to be found in a register.
   19545 
   19546  You can prevent an `asm' instruction from being deleted by writing the
   19547 keyword `volatile' after the `asm'.  For example:
   19548 
   19549      #define get_and_set_priority(new)              \
   19550      ({ int __old;                                  \
   19551         asm volatile ("get_and_set_priority %0, %1" \
   19552                       : "=g" (__old) : "g" (new));  \
   19553         __old; })
   19554 
   19555 The `volatile' keyword indicates that the instruction has important
   19556 side-effects.  GCC will not delete a volatile `asm' if it is reachable.
   19557 (The instruction can still be deleted if GCC can prove that
   19558 control-flow will never reach the location of the instruction.)  Note
   19559 that even a volatile `asm' instruction can be moved relative to other
   19560 code, including across jump instructions.  For example, on many targets
   19561 there is a system register which can be set to control the rounding
   19562 mode of floating point operations.  You might try setting it with a
   19563 volatile `asm', like this PowerPC example:
   19564 
   19565             asm volatile("mtfsf 255,%0" : : "f" (fpenv));
   19566             sum = x + y;
   19567 
   19568 This will not work reliably, as the compiler may move the addition back
   19569 before the volatile `asm'.  To make it work you need to add an
   19570 artificial dependency to the `asm' referencing a variable in the code
   19571 you don't want moved, for example:
   19572 
   19573          asm volatile ("mtfsf 255,%1" : "=X"(sum): "f"(fpenv));
   19574          sum = x + y;
   19575 
   19576  Similarly, you can't expect a sequence of volatile `asm' instructions
   19577 to remain perfectly consecutive.  If you want consecutive output, use a
   19578 single `asm'.  Also, GCC will perform some optimizations across a
   19579 volatile `asm' instruction; GCC does not "forget everything" when it
   19580 encounters a volatile `asm' instruction the way some other compilers do.
   19581 
   19582  An `asm' instruction without any output operands will be treated
   19583 identically to a volatile `asm' instruction.
   19584 
   19585  It is a natural idea to look for a way to give access to the condition
   19586 code left by the assembler instruction.  However, when we attempted to
   19587 implement this, we found no way to make it work reliably.  The problem
   19588 is that output operands might need reloading, which would result in
   19589 additional following "store" instructions.  On most machines, these
   19590 instructions would alter the condition code before there was time to
   19591 test it.  This problem doesn't arise for ordinary "test" and "compare"
   19592 instructions because they don't have any output operands.
   19593 
   19594  For reasons similar to those described above, it is not possible to
   19595 give an assembler instruction access to the condition code left by
   19596 previous instructions.
   19597 
   19598  If you are writing a header file that should be includable in ISO C
   19599 programs, write `__asm__' instead of `asm'.  *Note Alternate Keywords::.
   19600 
   19601 5.37.1 Size of an `asm'
   19602 -----------------------
   19603 
   19604 Some targets require that GCC track the size of each instruction used in
   19605 order to generate correct code.  Because the final length of an `asm'
   19606 is only known by the assembler, GCC must make an estimate as to how big
   19607 it will be.  The estimate is formed by counting the number of
   19608 statements in the pattern of the `asm' and multiplying that by the
   19609 length of the longest instruction on that processor.  Statements in the
   19610 `asm' are identified by newline characters and whatever statement
   19611 separator characters are supported by the assembler; on most processors
   19612 this is the ``;'' character.
   19613 
   19614  Normally, GCC's estimate is perfectly adequate to ensure that correct
   19615 code is generated, but it is possible to confuse the compiler if you use
   19616 pseudo instructions or assembler macros that expand into multiple real
   19617 instructions or if you use assembler directives that expand to more
   19618 space in the object file than would be needed for a single instruction.
   19619 If this happens then the assembler will produce a diagnostic saying that
   19620 a label is unreachable.
   19621 
   19622 5.37.2 i386 floating point asm operands
   19623 ---------------------------------------
   19624 
   19625 There are several rules on the usage of stack-like regs in asm_operands
   19626 insns.  These rules apply only to the operands that are stack-like regs:
   19627 
   19628   1. Given a set of input regs that die in an asm_operands, it is
   19629      necessary to know which are implicitly popped by the asm, and
   19630      which must be explicitly popped by gcc.
   19631 
   19632      An input reg that is implicitly popped by the asm must be
   19633      explicitly clobbered, unless it is constrained to match an output
   19634      operand.
   19635 
   19636   2. For any input reg that is implicitly popped by an asm, it is
   19637      necessary to know how to adjust the stack to compensate for the
   19638      pop.  If any non-popped input is closer to the top of the
   19639      reg-stack than the implicitly popped reg, it would not be possible
   19640      to know what the stack looked like--it's not clear how the rest of
   19641      the stack "slides up".
   19642 
   19643      All implicitly popped input regs must be closer to the top of the
   19644      reg-stack than any input that is not implicitly popped.
   19645 
   19646      It is possible that if an input dies in an insn, reload might use
   19647      the input reg for an output reload.  Consider this example:
   19648 
   19649           asm ("foo" : "=t" (a) : "f" (b));
   19650 
   19651      This asm says that input B is not popped by the asm, and that the
   19652      asm pushes a result onto the reg-stack, i.e., the stack is one
   19653      deeper after the asm than it was before.  But, it is possible that
   19654      reload will think that it can use the same reg for both the input
   19655      and the output, if input B dies in this insn.
   19656 
   19657      If any input operand uses the `f' constraint, all output reg
   19658      constraints must use the `&' earlyclobber.
   19659 
   19660      The asm above would be written as
   19661 
   19662           asm ("foo" : "=&t" (a) : "f" (b));
   19663 
   19664   3. Some operands need to be in particular places on the stack.  All
   19665      output operands fall in this category--there is no other way to
   19666      know which regs the outputs appear in unless the user indicates
   19667      this in the constraints.
   19668 
   19669      Output operands must specifically indicate which reg an output
   19670      appears in after an asm.  `=f' is not allowed: the operand
   19671      constraints must select a class with a single reg.
   19672 
   19673   4. Output operands may not be "inserted" between existing stack regs.
   19674      Since no 387 opcode uses a read/write operand, all output operands
   19675      are dead before the asm_operands, and are pushed by the
   19676      asm_operands.  It makes no sense to push anywhere but the top of
   19677      the reg-stack.
   19678 
   19679      Output operands must start at the top of the reg-stack: output
   19680      operands may not "skip" a reg.
   19681 
   19682   5. Some asm statements may need extra stack space for internal
   19683      calculations.  This can be guaranteed by clobbering stack registers
   19684      unrelated to the inputs and outputs.
   19685 
   19686 
   19687  Here are a couple of reasonable asms to want to write.  This asm takes
   19688 one input, which is internally popped, and produces two outputs.
   19689 
   19690      asm ("fsincos" : "=t" (cos), "=u" (sin) : "0" (inp));
   19691 
   19692  This asm takes two inputs, which are popped by the `fyl2xp1' opcode,
   19693 and replaces them with one output.  The user must code the `st(1)'
   19694 clobber for reg-stack.c to know that `fyl2xp1' pops both inputs.
   19695 
   19696      asm ("fyl2xp1" : "=t" (result) : "0" (x), "u" (y) : "st(1)");
   19697 
   19698 
   19699 File: gcc.info,  Node: Constraints,  Next: Asm Labels,  Prev: Extended Asm,  Up: C Extensions
   19700 
   19701 5.38 Constraints for `asm' Operands
   19702 ===================================
   19703 
   19704 Here are specific details on what constraint letters you can use with
   19705 `asm' operands.  Constraints can say whether an operand may be in a
   19706 register, and which kinds of register; whether the operand can be a
   19707 memory reference, and which kinds of address; whether the operand may
   19708 be an immediate constant, and which possible values it may have.
   19709 Constraints can also require two operands to match.
   19710 
   19711 * Menu:
   19712 
   19713 * Simple Constraints::  Basic use of constraints.
   19714 * Multi-Alternative::   When an insn has two alternative constraint-patterns.
   19715 * Modifiers::           More precise control over effects of constraints.
   19716 * Machine Constraints:: Special constraints for some particular machines.
   19717 
   19718 
   19719 File: gcc.info,  Node: Simple Constraints,  Next: Multi-Alternative,  Up: Constraints
   19720 
   19721 5.38.1 Simple Constraints
   19722 -------------------------
   19723 
   19724 The simplest kind of constraint is a string full of letters, each of
   19725 which describes one kind of operand that is permitted.  Here are the
   19726 letters that are allowed:
   19727 
   19728 whitespace
   19729      Whitespace characters are ignored and can be inserted at any
   19730      position except the first.  This enables each alternative for
   19731      different operands to be visually aligned in the machine
   19732      description even if they have different number of constraints and
   19733      modifiers.
   19734 
   19735 `m'
   19736      A memory operand is allowed, with any kind of address that the
   19737      machine supports in general.
   19738 
   19739 `o'
   19740      A memory operand is allowed, but only if the address is
   19741      "offsettable".  This means that adding a small integer (actually,
   19742      the width in bytes of the operand, as determined by its machine
   19743      mode) may be added to the address and the result is also a valid
   19744      memory address.
   19745 
   19746      For example, an address which is constant is offsettable; so is an
   19747      address that is the sum of a register and a constant (as long as a
   19748      slightly larger constant is also within the range of
   19749      address-offsets supported by the machine); but an autoincrement or
   19750      autodecrement address is not offsettable.  More complicated
   19751      indirect/indexed addresses may or may not be offsettable depending
   19752      on the other addressing modes that the machine supports.
   19753 
   19754      Note that in an output operand which can be matched by another
   19755      operand, the constraint letter `o' is valid only when accompanied
   19756      by both `<' (if the target machine has predecrement addressing)
   19757      and `>' (if the target machine has preincrement addressing).
   19758 
   19759 `V'
   19760      A memory operand that is not offsettable.  In other words,
   19761      anything that would fit the `m' constraint but not the `o'
   19762      constraint.
   19763 
   19764 `<'
   19765      A memory operand with autodecrement addressing (either
   19766      predecrement or postdecrement) is allowed.
   19767 
   19768 `>'
   19769      A memory operand with autoincrement addressing (either
   19770      preincrement or postincrement) is allowed.
   19771 
   19772 `r'
   19773      A register operand is allowed provided that it is in a general
   19774      register.
   19775 
   19776 `i'
   19777      An immediate integer operand (one with constant value) is allowed.
   19778      This includes symbolic constants whose values will be known only at
   19779      assembly time or later.
   19780 
   19781 `n'
   19782      An immediate integer operand with a known numeric value is allowed.
   19783      Many systems cannot support assembly-time constants for operands
   19784      less than a word wide.  Constraints for these operands should use
   19785      `n' rather than `i'.
   19786 
   19787 `I', `J', `K', ... `P'
   19788      Other letters in the range `I' through `P' may be defined in a
   19789      machine-dependent fashion to permit immediate integer operands with
   19790      explicit integer values in specified ranges.  For example, on the
   19791      68000, `I' is defined to stand for the range of values 1 to 8.
   19792      This is the range permitted as a shift count in the shift
   19793      instructions.
   19794 
   19795 `E'
   19796      An immediate floating operand (expression code `const_double') is
   19797      allowed, but only if the target floating point format is the same
   19798      as that of the host machine (on which the compiler is running).
   19799 
   19800 `F'
   19801      An immediate floating operand (expression code `const_double' or
   19802      `const_vector') is allowed.
   19803 
   19804 `G', `H'
   19805      `G' and `H' may be defined in a machine-dependent fashion to
   19806      permit immediate floating operands in particular ranges of values.
   19807 
   19808 `s'
   19809      An immediate integer operand whose value is not an explicit
   19810      integer is allowed.
   19811 
   19812      This might appear strange; if an insn allows a constant operand
   19813      with a value not known at compile time, it certainly must allow
   19814      any known value.  So why use `s' instead of `i'?  Sometimes it
   19815      allows better code to be generated.
   19816 
   19817      For example, on the 68000 in a fullword instruction it is possible
   19818      to use an immediate operand; but if the immediate value is between
   19819      -128 and 127, better code results from loading the value into a
   19820      register and using the register.  This is because the load into
   19821      the register can be done with a `moveq' instruction.  We arrange
   19822      for this to happen by defining the letter `K' to mean "any integer
   19823      outside the range -128 to 127", and then specifying `Ks' in the
   19824      operand constraints.
   19825 
   19826 `g'
   19827      Any register, memory or immediate integer operand is allowed,
   19828      except for registers that are not general registers.
   19829 
   19830 `X'
   19831      Any operand whatsoever is allowed.
   19832 
   19833 `0', `1', `2', ... `9'
   19834      An operand that matches the specified operand number is allowed.
   19835      If a digit is used together with letters within the same
   19836      alternative, the digit should come last.
   19837 
   19838      This number is allowed to be more than a single digit.  If multiple
   19839      digits are encountered consecutively, they are interpreted as a
   19840      single decimal integer.  There is scant chance for ambiguity,
   19841      since to-date it has never been desirable that `10' be interpreted
   19842      as matching either operand 1 _or_ operand 0.  Should this be
   19843      desired, one can use multiple alternatives instead.
   19844 
   19845      This is called a "matching constraint" and what it really means is
   19846      that the assembler has only a single operand that fills two roles
   19847      which `asm' distinguishes.  For example, an add instruction uses
   19848      two input operands and an output operand, but on most CISC
   19849      machines an add instruction really has only two operands, one of
   19850      them an input-output operand:
   19851 
   19852           addl #35,r12
   19853 
   19854      Matching constraints are used in these circumstances.  More
   19855      precisely, the two operands that match must include one input-only
   19856      operand and one output-only operand.  Moreover, the digit must be a
   19857      smaller number than the number of the operand that uses it in the
   19858      constraint.
   19859 
   19860 `p'
   19861      An operand that is a valid memory address is allowed.  This is for
   19862      "load address" and "push address" instructions.
   19863 
   19864      `p' in the constraint must be accompanied by `address_operand' as
   19865      the predicate in the `match_operand'.  This predicate interprets
   19866      the mode specified in the `match_operand' as the mode of the memory
   19867      reference for which the address would be valid.
   19868 
   19869 OTHER-LETTERS
   19870      Other letters can be defined in machine-dependent fashion to stand
   19871      for particular classes of registers or other arbitrary operand
   19872      types.  `d', `a' and `f' are defined on the 68000/68020 to stand
   19873      for data, address and floating point registers.
   19874 
   19875 
   19876 File: gcc.info,  Node: Multi-Alternative,  Next: Modifiers,  Prev: Simple Constraints,  Up: Constraints
   19877 
   19878 5.38.2 Multiple Alternative Constraints
   19879 ---------------------------------------
   19880 
   19881 Sometimes a single instruction has multiple alternative sets of possible
   19882 operands.  For example, on the 68000, a logical-or instruction can
   19883 combine register or an immediate value into memory, or it can combine
   19884 any kind of operand into a register; but it cannot combine one memory
   19885 location into another.
   19886 
   19887  These constraints are represented as multiple alternatives.  An
   19888 alternative can be described by a series of letters for each operand.
   19889 The overall constraint for an operand is made from the letters for this
   19890 operand from the first alternative, a comma, the letters for this
   19891 operand from the second alternative, a comma, and so on until the last
   19892 alternative.
   19893 
   19894  If all the operands fit any one alternative, the instruction is valid.
   19895 Otherwise, for each alternative, the compiler counts how many
   19896 instructions must be added to copy the operands so that that
   19897 alternative applies.  The alternative requiring the least copying is
   19898 chosen.  If two alternatives need the same amount of copying, the one
   19899 that comes first is chosen.  These choices can be altered with the `?'
   19900 and `!' characters:
   19901 
   19902 `?'
   19903      Disparage slightly the alternative that the `?' appears in, as a
   19904      choice when no alternative applies exactly.  The compiler regards
   19905      this alternative as one unit more costly for each `?' that appears
   19906      in it.
   19907 
   19908 `!'
   19909      Disparage severely the alternative that the `!' appears in.  This
   19910      alternative can still be used if it fits without reloading, but if
   19911      reloading is needed, some other alternative will be used.
   19912 
   19913 
   19914 File: gcc.info,  Node: Modifiers,  Next: Machine Constraints,  Prev: Multi-Alternative,  Up: Constraints
   19915 
   19916 5.38.3 Constraint Modifier Characters
   19917 -------------------------------------
   19918 
   19919 Here are constraint modifier characters.
   19920 
   19921 `='
   19922      Means that this operand is write-only for this instruction: the
   19923      previous value is discarded and replaced by output data.
   19924 
   19925 `+'
   19926      Means that this operand is both read and written by the
   19927      instruction.
   19928 
   19929      When the compiler fixes up the operands to satisfy the constraints,
   19930      it needs to know which operands are inputs to the instruction and
   19931      which are outputs from it.  `=' identifies an output; `+'
   19932      identifies an operand that is both input and output; all other
   19933      operands are assumed to be input only.
   19934 
   19935      If you specify `=' or `+' in a constraint, you put it in the first
   19936      character of the constraint string.
   19937 
   19938 `&'
   19939      Means (in a particular alternative) that this operand is an
   19940      "earlyclobber" operand, which is modified before the instruction is
   19941      finished using the input operands.  Therefore, this operand may
   19942      not lie in a register that is used as an input operand or as part
   19943      of any memory address.
   19944 
   19945      `&' applies only to the alternative in which it is written.  In
   19946      constraints with multiple alternatives, sometimes one alternative
   19947      requires `&' while others do not.  See, for example, the `movdf'
   19948      insn of the 68000.
   19949 
   19950      An input operand can be tied to an earlyclobber operand if its only
   19951      use as an input occurs before the early result is written.  Adding
   19952      alternatives of this form often allows GCC to produce better code
   19953      when only some of the inputs can be affected by the earlyclobber.
   19954      See, for example, the `mulsi3' insn of the ARM.
   19955 
   19956      `&' does not obviate the need to write `='.
   19957 
   19958 `%'
   19959      Declares the instruction to be commutative for this operand and the
   19960      following operand.  This means that the compiler may interchange
   19961      the two operands if that is the cheapest way to make all operands
   19962      fit the constraints.  GCC can only handle one commutative pair in
   19963      an asm; if you use more, the compiler may fail.  Note that you
   19964      need not use the modifier if the two alternatives are strictly
   19965      identical; this would only waste time in the reload pass.  The
   19966      modifier is not operational after register allocation, so the
   19967      result of `define_peephole2' and `define_split's performed after
   19968      reload cannot rely on `%' to make the intended insn match.
   19969 
   19970 `#'
   19971      Says that all following characters, up to the next comma, are to be
   19972      ignored as a constraint.  They are significant only for choosing
   19973      register preferences.
   19974 
   19975 `*'
   19976      Says that the following character should be ignored when choosing
   19977      register preferences.  `*' has no effect on the meaning of the
   19978      constraint as a constraint, and no effect on reloading.
   19979 
   19980 
   19981 
   19982 File: gcc.info,  Node: Machine Constraints,  Prev: Modifiers,  Up: Constraints
   19983 
   19984 5.38.4 Constraints for Particular Machines
   19985 ------------------------------------------
   19986 
   19987 Whenever possible, you should use the general-purpose constraint letters
   19988 in `asm' arguments, since they will convey meaning more readily to
   19989 people reading your code.  Failing that, use the constraint letters
   19990 that usually have very similar meanings across architectures.  The most
   19991 commonly used constraints are `m' and `r' (for memory and
   19992 general-purpose registers respectively; *note Simple Constraints::), and
   19993 `I', usually the letter indicating the most common immediate-constant
   19994 format.
   19995 
   19996  Each architecture defines additional constraints.  These constraints
   19997 are used by the compiler itself for instruction generation, as well as
   19998 for `asm' statements; therefore, some of the constraints are not
   19999 particularly useful for `asm'.  Here is a summary of some of the
   20000 machine-dependent constraints available on some particular machines; it
   20001 includes both constraints that are useful for `asm' and constraints
   20002 that aren't.  The compiler source file mentioned in the table heading
   20003 for each architecture is the definitive reference for the meanings of
   20004 that architecture's constraints.
   20005 
   20006 _ARM family--`config/arm/arm.h'_
   20007 
   20008     `f'
   20009           Floating-point register
   20010 
   20011     `w'
   20012           VFP floating-point register
   20013 
   20014     `F'
   20015           One of the floating-point constants 0.0, 0.5, 1.0, 2.0, 3.0,
   20016           4.0, 5.0 or 10.0
   20017 
   20018     `G'
   20019           Floating-point constant that would satisfy the constraint `F'
   20020           if it were negated
   20021 
   20022     `I'
   20023           Integer that is valid as an immediate operand in a data
   20024           processing instruction.  That is, an integer in the range 0
   20025           to 255 rotated by a multiple of 2
   20026 
   20027     `J'
   20028           Integer in the range -4095 to 4095
   20029 
   20030     `K'
   20031           Integer that satisfies constraint `I' when inverted (ones
   20032           complement)
   20033 
   20034     `L'
   20035           Integer that satisfies constraint `I' when negated (twos
   20036           complement)
   20037 
   20038     `M'
   20039           Integer in the range 0 to 32
   20040 
   20041     `Q'
   20042           A memory reference where the exact address is in a single
   20043           register (``m'' is preferable for `asm' statements)
   20044 
   20045     `R'
   20046           An item in the constant pool
   20047 
   20048     `S'
   20049           A symbol in the text segment of the current file
   20050 
   20051     `Uv'
   20052           A memory reference suitable for VFP load/store insns
   20053           (reg+constant offset)
   20054 
   20055     `Uy'
   20056           A memory reference suitable for iWMMXt load/store
   20057           instructions.
   20058 
   20059     `Uq'
   20060           A memory reference suitable for the ARMv4 ldrsb instruction.
   20061 
   20062 _AVR family--`config/avr/constraints.md'_
   20063 
   20064     `l'
   20065           Registers from r0 to r15
   20066 
   20067     `a'
   20068           Registers from r16 to r23
   20069 
   20070     `d'
   20071           Registers from r16 to r31
   20072 
   20073     `w'
   20074           Registers from r24 to r31.  These registers can be used in
   20075           `adiw' command
   20076 
   20077     `e'
   20078           Pointer register (r26-r31)
   20079 
   20080     `b'
   20081           Base pointer register (r28-r31)
   20082 
   20083     `q'
   20084           Stack pointer register (SPH:SPL)
   20085 
   20086     `t'
   20087           Temporary register r0
   20088 
   20089     `x'
   20090           Register pair X (r27:r26)
   20091 
   20092     `y'
   20093           Register pair Y (r29:r28)
   20094 
   20095     `z'
   20096           Register pair Z (r31:r30)
   20097 
   20098     `I'
   20099           Constant greater than -1, less than 64
   20100 
   20101     `J'
   20102           Constant greater than -64, less than 1
   20103 
   20104     `K'
   20105           Constant integer 2
   20106 
   20107     `L'
   20108           Constant integer 0
   20109 
   20110     `M'
   20111           Constant that fits in 8 bits
   20112 
   20113     `N'
   20114           Constant integer -1
   20115 
   20116     `O'
   20117           Constant integer 8, 16, or 24
   20118 
   20119     `P'
   20120           Constant integer 1
   20121 
   20122     `G'
   20123           A floating point constant 0.0
   20124 
   20125     `R'
   20126           Integer constant in the range -6 ... 5.
   20127 
   20128     `Q'
   20129           A memory address based on Y or Z pointer with displacement.
   20130 
   20131 _CRX Architecture--`config/crx/crx.h'_
   20132 
   20133     `b'
   20134           Registers from r0 to r14 (registers without stack pointer)
   20135 
   20136     `l'
   20137           Register r16 (64-bit accumulator lo register)
   20138 
   20139     `h'
   20140           Register r17 (64-bit accumulator hi register)
   20141 
   20142     `k'
   20143           Register pair r16-r17. (64-bit accumulator lo-hi pair)
   20144 
   20145     `I'
   20146           Constant that fits in 3 bits
   20147 
   20148     `J'
   20149           Constant that fits in 4 bits
   20150 
   20151     `K'
   20152           Constant that fits in 5 bits
   20153 
   20154     `L'
   20155           Constant that is one of -1, 4, -4, 7, 8, 12, 16, 20, 32, 48
   20156 
   20157     `G'
   20158           Floating point constant that is legal for store immediate
   20159 
   20160 _Hewlett-Packard PA-RISC--`config/pa/pa.h'_
   20161 
   20162     `a'
   20163           General register 1
   20164 
   20165     `f'
   20166           Floating point register
   20167 
   20168     `q'
   20169           Shift amount register
   20170 
   20171     `x'
   20172           Floating point register (deprecated)
   20173 
   20174     `y'
   20175           Upper floating point register (32-bit), floating point
   20176           register (64-bit)
   20177 
   20178     `Z'
   20179           Any register
   20180 
   20181     `I'
   20182           Signed 11-bit integer constant
   20183 
   20184     `J'
   20185           Signed 14-bit integer constant
   20186 
   20187     `K'
   20188           Integer constant that can be deposited with a `zdepi'
   20189           instruction
   20190 
   20191     `L'
   20192           Signed 5-bit integer constant
   20193 
   20194     `M'
   20195           Integer constant 0
   20196 
   20197     `N'
   20198           Integer constant that can be loaded with a `ldil' instruction
   20199 
   20200     `O'
   20201           Integer constant whose value plus one is a power of 2
   20202 
   20203     `P'
   20204           Integer constant that can be used for `and' operations in
   20205           `depi' and `extru' instructions
   20206 
   20207     `S'
   20208           Integer constant 31
   20209 
   20210     `U'
   20211           Integer constant 63
   20212 
   20213     `G'
   20214           Floating-point constant 0.0
   20215 
   20216     `A'
   20217           A `lo_sum' data-linkage-table memory operand
   20218 
   20219     `Q'
   20220           A memory operand that can be used as the destination operand
   20221           of an integer store instruction
   20222 
   20223     `R'
   20224           A scaled or unscaled indexed memory operand
   20225 
   20226     `T'
   20227           A memory operand for floating-point loads and stores
   20228 
   20229     `W'
   20230           A register indirect memory operand
   20231 
   20232 _PowerPC and IBM RS6000--`config/rs6000/rs6000.h'_
   20233 
   20234     `b'
   20235           Address base register
   20236 
   20237     `f'
   20238           Floating point register
   20239 
   20240     `v'
   20241           Vector register
   20242 
   20243     `h'
   20244           `MQ', `CTR', or `LINK' register
   20245 
   20246     `q'
   20247           `MQ' register
   20248 
   20249     `c'
   20250           `CTR' register
   20251 
   20252     `l'
   20253           `LINK' register
   20254 
   20255     `x'
   20256           `CR' register (condition register) number 0
   20257 
   20258     `y'
   20259           `CR' register (condition register)
   20260 
   20261     `z'
   20262           `FPMEM' stack memory for FPR-GPR transfers
   20263 
   20264     `I'
   20265           Signed 16-bit constant
   20266 
   20267     `J'
   20268           Unsigned 16-bit constant shifted left 16 bits (use `L'
   20269           instead for `SImode' constants)
   20270 
   20271     `K'
   20272           Unsigned 16-bit constant
   20273 
   20274     `L'
   20275           Signed 16-bit constant shifted left 16 bits
   20276 
   20277     `M'
   20278           Constant larger than 31
   20279 
   20280     `N'
   20281           Exact power of 2
   20282 
   20283     `O'
   20284           Zero
   20285 
   20286     `P'
   20287           Constant whose negation is a signed 16-bit constant
   20288 
   20289     `G'
   20290           Floating point constant that can be loaded into a register
   20291           with one instruction per word
   20292 
   20293     `H'
   20294           Integer/Floating point constant that can be loaded into a
   20295           register using three instructions
   20296 
   20297     `Q'
   20298           Memory operand that is an offset from a register (`m' is
   20299           preferable for `asm' statements)
   20300 
   20301     `Z'
   20302           Memory operand that is an indexed or indirect from a register
   20303           (`m' is preferable for `asm' statements)
   20304 
   20305     `R'
   20306           AIX TOC entry
   20307 
   20308     `a'
   20309           Address operand that is an indexed or indirect from a
   20310           register (`p' is preferable for `asm' statements)
   20311 
   20312     `S'
   20313           Constant suitable as a 64-bit mask operand
   20314 
   20315     `T'
   20316           Constant suitable as a 32-bit mask operand
   20317 
   20318     `U'
   20319           System V Release 4 small data area reference
   20320 
   20321     `t'
   20322           AND masks that can be performed by two rldic{l, r}
   20323           instructions
   20324 
   20325     `W'
   20326           Vector constant that does not require memory
   20327 
   20328 
   20329 _MorphoTech family--`config/mt/mt.h'_
   20330 
   20331     `I'
   20332           Constant for an arithmetic insn (16-bit signed integer).
   20333 
   20334     `J'
   20335           The constant 0.
   20336 
   20337     `K'
   20338           Constant for a logical insn (16-bit zero-extended integer).
   20339 
   20340     `L'
   20341           A constant that can be loaded with `lui' (i.e. the bottom 16
   20342           bits are zero).
   20343 
   20344     `M'
   20345           A constant that takes two words to load (i.e. not matched by
   20346           `I', `K', or `L').
   20347 
   20348     `N'
   20349           Negative 16-bit constants other than -65536.
   20350 
   20351     `O'
   20352           A 15-bit signed integer constant.
   20353 
   20354     `P'
   20355           A positive 16-bit constant.
   20356 
   20357 _Intel 386--`config/i386/constraints.md'_
   20358 
   20359     `R'
   20360           Legacy register--the eight integer registers available on all
   20361           i386 processors (`a', `b', `c', `d', `si', `di', `bp', `sp').
   20362 
   20363     `q'
   20364           Any register accessible as `Rl'.  In 32-bit mode, `a', `b',
   20365           `c', and `d'; in 64-bit mode, any integer register.
   20366 
   20367     `Q'
   20368           Any register accessible as `Rh': `a', `b', `c', and `d'.
   20369 
   20370     `a'
   20371           The `a' register.
   20372 
   20373     `b'
   20374           The `b' register.
   20375 
   20376     `c'
   20377           The `c' register.
   20378 
   20379     `d'
   20380           The `d' register.
   20381 
   20382     `S'
   20383           The `si' register.
   20384 
   20385     `D'
   20386           The `di' register.
   20387 
   20388     `A'
   20389           The `a' and `d' registers, as a pair (for instructions that
   20390           return half the result in one and half in the other).
   20391 
   20392     `f'
   20393           Any 80387 floating-point (stack) register.
   20394 
   20395     `t'
   20396           Top of 80387 floating-point stack (`%st(0)').
   20397 
   20398     `u'
   20399           Second from top of 80387 floating-point stack (`%st(1)').
   20400 
   20401     `y'
   20402           Any MMX register.
   20403 
   20404     `x'
   20405           Any SSE register.
   20406 
   20407     `I'
   20408           Integer constant in the range 0 ... 31, for 32-bit shifts.
   20409 
   20410     `J'
   20411           Integer constant in the range 0 ... 63, for 64-bit shifts.
   20412 
   20413     `K'
   20414           Signed 8-bit integer constant.
   20415 
   20416     `L'
   20417           `0xFF' or `0xFFFF', for andsi as a zero-extending move.
   20418 
   20419     `M'
   20420           0, 1, 2, or 3 (shifts for the `lea' instruction).
   20421 
   20422     `N'
   20423           Unsigned 8-bit integer constant (for `in' and `out'
   20424           instructions).
   20425 
   20426     `G'
   20427           Standard 80387 floating point constant.
   20428 
   20429     `C'
   20430           Standard SSE floating point constant.
   20431 
   20432     `e'
   20433           32-bit signed integer constant, or a symbolic reference known
   20434           to fit that range (for immediate operands in sign-extending
   20435           x86-64 instructions).
   20436 
   20437     `Z'
   20438           32-bit unsigned integer constant, or a symbolic reference
   20439           known to fit that range (for immediate operands in
   20440           zero-extending x86-64 instructions).
   20441 
   20442 
   20443 _Intel IA-64--`config/ia64/ia64.h'_
   20444 
   20445     `a'
   20446           General register `r0' to `r3' for `addl' instruction
   20447 
   20448     `b'
   20449           Branch register
   20450 
   20451     `c'
   20452           Predicate register (`c' as in "conditional")
   20453 
   20454     `d'
   20455           Application register residing in M-unit
   20456 
   20457     `e'
   20458           Application register residing in I-unit
   20459 
   20460     `f'
   20461           Floating-point register
   20462 
   20463     `m'
   20464           Memory operand.  Remember that `m' allows postincrement and
   20465           postdecrement which require printing with `%Pn' on IA-64.
   20466           Use `S' to disallow postincrement and postdecrement.
   20467 
   20468     `G'
   20469           Floating-point constant 0.0 or 1.0
   20470 
   20471     `I'
   20472           14-bit signed integer constant
   20473 
   20474     `J'
   20475           22-bit signed integer constant
   20476 
   20477     `K'
   20478           8-bit signed integer constant for logical instructions
   20479 
   20480     `L'
   20481           8-bit adjusted signed integer constant for compare pseudo-ops
   20482 
   20483     `M'
   20484           6-bit unsigned integer constant for shift counts
   20485 
   20486     `N'
   20487           9-bit signed integer constant for load and store
   20488           postincrements
   20489 
   20490     `O'
   20491           The constant zero
   20492 
   20493     `P'
   20494           0 or -1 for `dep' instruction
   20495 
   20496     `Q'
   20497           Non-volatile memory for floating-point loads and stores
   20498 
   20499     `R'
   20500           Integer constant in the range 1 to 4 for `shladd' instruction
   20501 
   20502     `S'
   20503           Memory operand except postincrement and postdecrement
   20504 
   20505 _FRV--`config/frv/frv.h'_
   20506 
   20507     `a'
   20508           Register in the class `ACC_REGS' (`acc0' to `acc7').
   20509 
   20510     `b'
   20511           Register in the class `EVEN_ACC_REGS' (`acc0' to `acc7').
   20512 
   20513     `c'
   20514           Register in the class `CC_REGS' (`fcc0' to `fcc3' and `icc0'
   20515           to `icc3').
   20516 
   20517     `d'
   20518           Register in the class `GPR_REGS' (`gr0' to `gr63').
   20519 
   20520     `e'
   20521           Register in the class `EVEN_REGS' (`gr0' to `gr63').  Odd
   20522           registers are excluded not in the class but through the use
   20523           of a machine mode larger than 4 bytes.
   20524 
   20525     `f'
   20526           Register in the class `FPR_REGS' (`fr0' to `fr63').
   20527 
   20528     `h'
   20529           Register in the class `FEVEN_REGS' (`fr0' to `fr63').  Odd
   20530           registers are excluded not in the class but through the use
   20531           of a machine mode larger than 4 bytes.
   20532 
   20533     `l'
   20534           Register in the class `LR_REG' (the `lr' register).
   20535 
   20536     `q'
   20537           Register in the class `QUAD_REGS' (`gr2' to `gr63').
   20538           Register numbers not divisible by 4 are excluded not in the
   20539           class but through the use of a machine mode larger than 8
   20540           bytes.
   20541 
   20542     `t'
   20543           Register in the class `ICC_REGS' (`icc0' to `icc3').
   20544 
   20545     `u'
   20546           Register in the class `FCC_REGS' (`fcc0' to `fcc3').
   20547 
   20548     `v'
   20549           Register in the class `ICR_REGS' (`cc4' to `cc7').
   20550 
   20551     `w'
   20552           Register in the class `FCR_REGS' (`cc0' to `cc3').
   20553 
   20554     `x'
   20555           Register in the class `QUAD_FPR_REGS' (`fr0' to `fr63').
   20556           Register numbers not divisible by 4 are excluded not in the
   20557           class but through the use of a machine mode larger than 8
   20558           bytes.
   20559 
   20560     `z'
   20561           Register in the class `SPR_REGS' (`lcr' and `lr').
   20562 
   20563     `A'
   20564           Register in the class `QUAD_ACC_REGS' (`acc0' to `acc7').
   20565 
   20566     `B'
   20567           Register in the class `ACCG_REGS' (`accg0' to `accg7').
   20568 
   20569     `C'
   20570           Register in the class `CR_REGS' (`cc0' to `cc7').
   20571 
   20572     `G'
   20573           Floating point constant zero
   20574 
   20575     `I'
   20576           6-bit signed integer constant
   20577 
   20578     `J'
   20579           10-bit signed integer constant
   20580 
   20581     `L'
   20582           16-bit signed integer constant
   20583 
   20584     `M'
   20585           16-bit unsigned integer constant
   20586 
   20587     `N'
   20588           12-bit signed integer constant that is negative--i.e. in the
   20589           range of -2048 to -1
   20590 
   20591     `O'
   20592           Constant zero
   20593 
   20594     `P'
   20595           12-bit signed integer constant that is greater than
   20596           zero--i.e. in the range of 1 to 2047.
   20597 
   20598 
   20599 _Blackfin family--`config/bfin/bfin.h'_
   20600 
   20601     `a'
   20602           P register
   20603 
   20604     `d'
   20605           D register
   20606 
   20607     `z'
   20608           A call clobbered P register.
   20609 
   20610     `qN'
   20611           A single register.  If N is in the range 0 to 7, the
   20612           corresponding D register.  If it is `A', then the register P0.
   20613 
   20614     `D'
   20615           Even-numbered D register
   20616 
   20617     `W'
   20618           Odd-numbered D register
   20619 
   20620     `e'
   20621           Accumulator register.
   20622 
   20623     `A'
   20624           Even-numbered accumulator register.
   20625 
   20626     `B'
   20627           Odd-numbered accumulator register.
   20628 
   20629     `b'
   20630           I register
   20631 
   20632     `v'
   20633           B register
   20634 
   20635     `f'
   20636           M register
   20637 
   20638     `c'
   20639           Registers used for circular buffering, i.e. I, B, or L
   20640           registers.
   20641 
   20642     `C'
   20643           The CC register.
   20644 
   20645     `t'
   20646           LT0 or LT1.
   20647 
   20648     `k'
   20649           LC0 or LC1.
   20650 
   20651     `u'
   20652           LB0 or LB1.
   20653 
   20654     `x'
   20655           Any D, P, B, M, I or L register.
   20656 
   20657     `y'
   20658           Additional registers typically used only in prologues and
   20659           epilogues: RETS, RETN, RETI, RETX, RETE, ASTAT, SEQSTAT and
   20660           USP.
   20661 
   20662     `w'
   20663           Any register except accumulators or CC.
   20664 
   20665     `Ksh'
   20666           Signed 16 bit integer (in the range -32768 to 32767)
   20667 
   20668     `Kuh'
   20669           Unsigned 16 bit integer (in the range 0 to 65535)
   20670 
   20671     `Ks7'
   20672           Signed 7 bit integer (in the range -64 to 63)
   20673 
   20674     `Ku7'
   20675           Unsigned 7 bit integer (in the range 0 to 127)
   20676 
   20677     `Ku5'
   20678           Unsigned 5 bit integer (in the range 0 to 31)
   20679 
   20680     `Ks4'
   20681           Signed 4 bit integer (in the range -8 to 7)
   20682 
   20683     `Ks3'
   20684           Signed 3 bit integer (in the range -3 to 4)
   20685 
   20686     `Ku3'
   20687           Unsigned 3 bit integer (in the range 0 to 7)
   20688 
   20689     `PN'
   20690           Constant N, where N is a single-digit constant in the range 0
   20691           to 4.
   20692 
   20693     `PA'
   20694           An integer equal to one of the MACFLAG_XXX constants that is
   20695           suitable for use with either accumulator.
   20696 
   20697     `PB'
   20698           An integer equal to one of the MACFLAG_XXX constants that is
   20699           suitable for use only with accumulator A1.
   20700 
   20701     `M1'
   20702           Constant 255.
   20703 
   20704     `M2'
   20705           Constant 65535.
   20706 
   20707     `J'
   20708           An integer constant with exactly a single bit set.
   20709 
   20710     `L'
   20711           An integer constant with all bits set except exactly one.
   20712 
   20713     `H'
   20714 
   20715     `Q'
   20716           Any SYMBOL_REF.
   20717 
   20718 _M32C--`config/m32c/m32c.c'_
   20719 
   20720     `Rsp'
   20721     `Rfb'
   20722     `Rsb'
   20723           `$sp', `$fb', `$sb'.
   20724 
   20725     `Rcr'
   20726           Any control register, when they're 16 bits wide (nothing if
   20727           control registers are 24 bits wide)
   20728 
   20729     `Rcl'
   20730           Any control register, when they're 24 bits wide.
   20731 
   20732     `R0w'
   20733     `R1w'
   20734     `R2w'
   20735     `R3w'
   20736           $r0, $r1, $r2, $r3.
   20737 
   20738     `R02'
   20739           $r0 or $r2, or $r2r0 for 32 bit values.
   20740 
   20741     `R13'
   20742           $r1 or $r3, or $r3r1 for 32 bit values.
   20743 
   20744     `Rdi'
   20745           A register that can hold a 64 bit value.
   20746 
   20747     `Rhl'
   20748           $r0 or $r1 (registers with addressable high/low bytes)
   20749 
   20750     `R23'
   20751           $r2 or $r3
   20752 
   20753     `Raa'
   20754           Address registers
   20755 
   20756     `Raw'
   20757           Address registers when they're 16 bits wide.
   20758 
   20759     `Ral'
   20760           Address registers when they're 24 bits wide.
   20761 
   20762     `Rqi'
   20763           Registers that can hold QI values.
   20764 
   20765     `Rad'
   20766           Registers that can be used with displacements ($a0, $a1, $sb).
   20767 
   20768     `Rsi'
   20769           Registers that can hold 32 bit values.
   20770 
   20771     `Rhi'
   20772           Registers that can hold 16 bit values.
   20773 
   20774     `Rhc'
   20775           Registers chat can hold 16 bit values, including all control
   20776           registers.
   20777 
   20778     `Rra'
   20779           $r0 through R1, plus $a0 and $a1.
   20780 
   20781     `Rfl'
   20782           The flags register.
   20783 
   20784     `Rmm'
   20785           The memory-based pseudo-registers $mem0 through $mem15.
   20786 
   20787     `Rpi'
   20788           Registers that can hold pointers (16 bit registers for r8c,
   20789           m16c; 24 bit registers for m32cm, m32c).
   20790 
   20791     `Rpa'
   20792           Matches multiple registers in a PARALLEL to form a larger
   20793           register.  Used to match function return values.
   20794 
   20795     `Is3'
   20796           -8 ... 7
   20797 
   20798     `IS1'
   20799           -128 ... 127
   20800 
   20801     `IS2'
   20802           -32768 ... 32767
   20803 
   20804     `IU2'
   20805           0 ... 65535
   20806 
   20807     `In4'
   20808           -8 ... -1 or 1 ... 8
   20809 
   20810     `In5'
   20811           -16 ... -1 or 1 ... 16
   20812 
   20813     `In6'
   20814           -32 ... -1 or 1 ... 32
   20815 
   20816     `IM2'
   20817           -65536 ... -1
   20818 
   20819     `Ilb'
   20820           An 8 bit value with exactly one bit set.
   20821 
   20822     `Ilw'
   20823           A 16 bit value with exactly one bit set.
   20824 
   20825     `Sd'
   20826           The common src/dest memory addressing modes.
   20827 
   20828     `Sa'
   20829           Memory addressed using $a0 or $a1.
   20830 
   20831     `Si'
   20832           Memory addressed with immediate addresses.
   20833 
   20834     `Ss'
   20835           Memory addressed using the stack pointer ($sp).
   20836 
   20837     `Sf'
   20838           Memory addressed using the frame base register ($fb).
   20839 
   20840     `Ss'
   20841           Memory addressed using the small base register ($sb).
   20842 
   20843     `S1'
   20844           $r1h
   20845 
   20846 _MIPS--`config/mips/constraints.md'_
   20847 
   20848     `d'
   20849           An address register.  This is equivalent to `r' unless
   20850           generating MIPS16 code.
   20851 
   20852     `f'
   20853           A floating-point register (if available).
   20854 
   20855     `h'
   20856           The `hi' register.
   20857 
   20858     `l'
   20859           The `lo' register.
   20860 
   20861     `x'
   20862           The `hi' and `lo' registers.
   20863 
   20864     `c'
   20865           A register suitable for use in an indirect jump.  This will
   20866           always be `$25' for `-mabicalls'.
   20867 
   20868     `y'
   20869           Equivalent to `r'; retained for backwards compatibility.
   20870 
   20871     `z'
   20872           A floating-point condition code register.
   20873 
   20874     `I'
   20875           A signed 16-bit constant (for arithmetic instructions).
   20876 
   20877     `J'
   20878           Integer zero.
   20879 
   20880     `K'
   20881           An unsigned 16-bit constant (for logic instructions).
   20882 
   20883     `L'
   20884           A signed 32-bit constant in which the lower 16 bits are zero.
   20885           Such constants can be loaded using `lui'.
   20886 
   20887     `M'
   20888           A constant that cannot be loaded using `lui', `addiu' or
   20889           `ori'.
   20890 
   20891     `N'
   20892           A constant in the range -65535 to -1 (inclusive).
   20893 
   20894     `O'
   20895           A signed 15-bit constant.
   20896 
   20897     `P'
   20898           A constant in the range 1 to 65535 (inclusive).
   20899 
   20900     `G'
   20901           Floating-point zero.
   20902 
   20903     `R'
   20904           An address that can be used in a non-macro load or store.
   20905 
   20906 _Motorola 680x0--`config/m68k/constraints.md'_
   20907 
   20908     `a'
   20909           Address register
   20910 
   20911     `d'
   20912           Data register
   20913 
   20914     `f'
   20915           68881 floating-point register, if available
   20916 
   20917     `I'
   20918           Integer in the range 1 to 8
   20919 
   20920     `J'
   20921           16-bit signed number
   20922 
   20923     `K'
   20924           Signed number whose magnitude is greater than 0x80
   20925 
   20926     `L'
   20927           Integer in the range -8 to -1
   20928 
   20929     `M'
   20930           Signed number whose magnitude is greater than 0x100
   20931 
   20932     `N'
   20933           Range 24 to 31, rotatert:SI 8 to 1 expressed as rotate
   20934 
   20935     `O'
   20936           16 (for rotate using swap)
   20937 
   20938     `P'
   20939           Range 8 to 15, rotatert:HI 8 to 1 expressed as rotate
   20940 
   20941     `R'
   20942           Numbers that mov3q can handle
   20943 
   20944     `G'
   20945           Floating point constant that is not a 68881 constant
   20946 
   20947     `S'
   20948           Operands that satisfy 'm' when -mpcrel is in effect
   20949 
   20950     `T'
   20951           Operands that satisfy 's' when -mpcrel is not in effect
   20952 
   20953     `Q'
   20954           Address register indirect addressing mode
   20955 
   20956     `U'
   20957           Register offset addressing
   20958 
   20959     `W'
   20960           const_call_operand
   20961 
   20962     `Cs'
   20963           symbol_ref or const
   20964 
   20965     `Ci'
   20966           const_int
   20967 
   20968     `C0'
   20969           const_int 0
   20970 
   20971     `Cj'
   20972           Range of signed numbers that don't fit in 16 bits
   20973 
   20974     `Cmvq'
   20975           Integers valid for mvq
   20976 
   20977     `Capsw'
   20978           Integers valid for a moveq followed by a swap
   20979 
   20980     `Cmvz'
   20981           Integers valid for mvz
   20982 
   20983     `Cmvs'
   20984           Integers valid for mvs
   20985 
   20986     `Ap'
   20987           push_operand
   20988 
   20989     `Ac'
   20990           Non-register operands allowed in clr
   20991 
   20992 
   20993 _Motorola 68HC11 & 68HC12 families--`config/m68hc11/m68hc11.h'_
   20994 
   20995     `a'
   20996           Register `a'
   20997 
   20998     `b'
   20999           Register `b'
   21000 
   21001     `d'
   21002           Register `d'
   21003 
   21004     `q'
   21005           An 8-bit register
   21006 
   21007     `t'
   21008           Temporary soft register _.tmp
   21009 
   21010     `u'
   21011           A soft register _.d1 to _.d31
   21012 
   21013     `w'
   21014           Stack pointer register
   21015 
   21016     `x'
   21017           Register `x'
   21018 
   21019     `y'
   21020           Register `y'
   21021 
   21022     `z'
   21023           Pseudo register `z' (replaced by `x' or `y' at the end)
   21024 
   21025     `A'
   21026           An address register: x, y or z
   21027 
   21028     `B'
   21029           An address register: x or y
   21030 
   21031     `D'
   21032           Register pair (x:d) to form a 32-bit value
   21033 
   21034     `L'
   21035           Constants in the range -65536 to 65535
   21036 
   21037     `M'
   21038           Constants whose 16-bit low part is zero
   21039 
   21040     `N'
   21041           Constant integer 1 or -1
   21042 
   21043     `O'
   21044           Constant integer 16
   21045 
   21046     `P'
   21047           Constants in the range -8 to 2
   21048 
   21049 
   21050 _SPARC--`config/sparc/sparc.h'_
   21051 
   21052     `f'
   21053           Floating-point register on the SPARC-V8 architecture and
   21054           lower floating-point register on the SPARC-V9 architecture.
   21055 
   21056     `e'
   21057           Floating-point register.  It is equivalent to `f' on the
   21058           SPARC-V8 architecture and contains both lower and upper
   21059           floating-point registers on the SPARC-V9 architecture.
   21060 
   21061     `c'
   21062           Floating-point condition code register.
   21063 
   21064     `d'
   21065           Lower floating-point register.  It is only valid on the
   21066           SPARC-V9 architecture when the Visual Instruction Set is
   21067           available.
   21068 
   21069     `b'
   21070           Floating-point register.  It is only valid on the SPARC-V9
   21071           architecture when the Visual Instruction Set is available.
   21072 
   21073     `h'
   21074           64-bit global or out register for the SPARC-V8+ architecture.
   21075 
   21076     `I'
   21077           Signed 13-bit constant
   21078 
   21079     `J'
   21080           Zero
   21081 
   21082     `K'
   21083           32-bit constant with the low 12 bits clear (a constant that
   21084           can be loaded with the `sethi' instruction)
   21085 
   21086     `L'
   21087           A constant in the range supported by `movcc' instructions
   21088 
   21089     `M'
   21090           A constant in the range supported by `movrcc' instructions
   21091 
   21092     `N'
   21093           Same as `K', except that it verifies that bits that are not
   21094           in the lower 32-bit range are all zero.  Must be used instead
   21095           of `K' for modes wider than `SImode'
   21096 
   21097     `O'
   21098           The constant 4096
   21099 
   21100     `G'
   21101           Floating-point zero
   21102 
   21103     `H'
   21104           Signed 13-bit constant, sign-extended to 32 or 64 bits
   21105 
   21106     `Q'
   21107           Floating-point constant whose integral representation can be
   21108           moved into an integer register using a single sethi
   21109           instruction
   21110 
   21111     `R'
   21112           Floating-point constant whose integral representation can be
   21113           moved into an integer register using a single mov instruction
   21114 
   21115     `S'
   21116           Floating-point constant whose integral representation can be
   21117           moved into an integer register using a high/lo_sum
   21118           instruction sequence
   21119 
   21120     `T'
   21121           Memory address aligned to an 8-byte boundary
   21122 
   21123     `U'
   21124           Even register
   21125 
   21126     `W'
   21127           Memory address for `e' constraint registers
   21128 
   21129     `Y'
   21130           Vector zero
   21131 
   21132 
   21133 _SPU--`config/spu/spu.h'_
   21134 
   21135     `a'
   21136           An immediate which can be loaded with the il/ila/ilh/ilhu
   21137           instructions.  const_int is treated as a 64 bit value.
   21138 
   21139     `c'
   21140           An immediate for and/xor/or instructions.  const_int is
   21141           treated as a 64 bit value.
   21142 
   21143     `d'
   21144           An immediate for the `iohl' instruction.  const_int is
   21145           treated as a 64 bit value.
   21146 
   21147     `f'
   21148           An immediate which can be loaded with `fsmbi'.
   21149 
   21150     `A'
   21151           An immediate which can be loaded with the il/ila/ilh/ilhu
   21152           instructions.  const_int is treated as a 32 bit value.
   21153 
   21154     `B'
   21155           An immediate for most arithmetic instructions.  const_int is
   21156           treated as a 32 bit value.
   21157 
   21158     `C'
   21159           An immediate for and/xor/or instructions.  const_int is
   21160           treated as a 32 bit value.
   21161 
   21162     `D'
   21163           An immediate for the `iohl' instruction.  const_int is
   21164           treated as a 32 bit value.
   21165 
   21166     `I'
   21167           A constant in the range [-64, 63] for shift/rotate
   21168           instructions.
   21169 
   21170     `J'
   21171           An unsigned 7-bit constant for conversion/nop/channel
   21172           instructions.
   21173 
   21174     `K'
   21175           A signed 10-bit constant for most arithmetic instructions.
   21176 
   21177     `M'
   21178           A signed 16 bit immediate for `stop'.
   21179 
   21180     `N'
   21181           An unsigned 16-bit constant for `iohl' and `fsmbi'.
   21182 
   21183     `O'
   21184           An unsigned 7-bit constant whose 3 least significant bits are
   21185           0.
   21186 
   21187     `P'
   21188           An unsigned 3-bit constant for 16-byte rotates and shifts
   21189 
   21190     `R'
   21191           Call operand, reg, for indirect calls
   21192 
   21193     `S'
   21194           Call operand, symbol, for relative calls.
   21195 
   21196     `T'
   21197           Call operand, const_int, for absolute calls.
   21198 
   21199     `U'
   21200           An immediate which can be loaded with the il/ila/ilh/ilhu
   21201           instructions.  const_int is sign extended to 128 bit.
   21202 
   21203     `W'
   21204           An immediate for shift and rotate instructions.  const_int is
   21205           treated as a 32 bit value.
   21206 
   21207     `Y'
   21208           An immediate for and/xor/or instructions.  const_int is sign
   21209           extended as a 128 bit.
   21210 
   21211     `Z'
   21212           An immediate for the `iohl' instruction.  const_int is sign
   21213           extended to 128 bit.
   21214 
   21215 
   21216 _S/390 and zSeries--`config/s390/s390.h'_
   21217 
   21218     `a'
   21219           Address register (general purpose register except r0)
   21220 
   21221     `c'
   21222           Condition code register
   21223 
   21224     `d'
   21225           Data register (arbitrary general purpose register)
   21226 
   21227     `f'
   21228           Floating-point register
   21229 
   21230     `I'
   21231           Unsigned 8-bit constant (0-255)
   21232 
   21233     `J'
   21234           Unsigned 12-bit constant (0-4095)
   21235 
   21236     `K'
   21237           Signed 16-bit constant (-32768-32767)
   21238 
   21239     `L'
   21240           Value appropriate as displacement.
   21241          `(0..4095)'
   21242                for short displacement
   21243 
   21244          `(-524288..524287)'
   21245                for long displacement
   21246 
   21247     `M'
   21248           Constant integer with a value of 0x7fffffff.
   21249 
   21250     `N'
   21251           Multiple letter constraint followed by 4 parameter letters.
   21252          `0..9:'
   21253                number of the part counting from most to least
   21254                significant
   21255 
   21256          `H,Q:'
   21257                mode of the part
   21258 
   21259          `D,S,H:'
   21260                mode of the containing operand
   21261 
   21262          `0,F:'
   21263                value of the other parts (F--all bits set)
   21264           The constraint matches if the specified part of a constant
   21265           has a value different from its other parts.
   21266 
   21267     `Q'
   21268           Memory reference without index register and with short
   21269           displacement.
   21270 
   21271     `R'
   21272           Memory reference with index register and short displacement.
   21273 
   21274     `S'
   21275           Memory reference without index register but with long
   21276           displacement.
   21277 
   21278     `T'
   21279           Memory reference with index register and long displacement.
   21280 
   21281     `U'
   21282           Pointer with short displacement.
   21283 
   21284     `W'
   21285           Pointer with long displacement.
   21286 
   21287     `Y'
   21288           Shift count operand.
   21289 
   21290 
   21291 _Score family--`config/score/score.h'_
   21292 
   21293     `d'
   21294           Registers from r0 to r32.
   21295 
   21296     `e'
   21297           Registers from r0 to r16.
   21298 
   21299     `t'
   21300           r8--r11 or r22--r27 registers.
   21301 
   21302     `h'
   21303           hi register.
   21304 
   21305     `l'
   21306           lo register.
   21307 
   21308     `x'
   21309           hi + lo register.
   21310 
   21311     `q'
   21312           cnt register.
   21313 
   21314     `y'
   21315           lcb register.
   21316 
   21317     `z'
   21318           scb register.
   21319 
   21320     `a'
   21321           cnt + lcb + scb register.
   21322 
   21323     `c'
   21324           cr0--cr15 register.
   21325 
   21326     `b'
   21327           cp1 registers.
   21328 
   21329     `f'
   21330           cp2 registers.
   21331 
   21332     `i'
   21333           cp3 registers.
   21334 
   21335     `j'
   21336           cp1 + cp2 + cp3 registers.
   21337 
   21338     `I'
   21339           High 16-bit constant (32-bit constant with 16 LSBs zero).
   21340 
   21341     `J'
   21342           Unsigned 5 bit integer (in the range 0 to 31).
   21343 
   21344     `K'
   21345           Unsigned 16 bit integer (in the range 0 to 65535).
   21346 
   21347     `L'
   21348           Signed 16 bit integer (in the range -32768 to 32767).
   21349 
   21350     `M'
   21351           Unsigned 14 bit integer (in the range 0 to 16383).
   21352 
   21353     `N'
   21354           Signed 14 bit integer (in the range -8192 to 8191).
   21355 
   21356     `Z'
   21357           Any SYMBOL_REF.
   21358 
   21359 _Xstormy16--`config/stormy16/stormy16.h'_
   21360 
   21361     `a'
   21362           Register r0.
   21363 
   21364     `b'
   21365           Register r1.
   21366 
   21367     `c'
   21368           Register r2.
   21369 
   21370     `d'
   21371           Register r8.
   21372 
   21373     `e'
   21374           Registers r0 through r7.
   21375 
   21376     `t'
   21377           Registers r0 and r1.
   21378 
   21379     `y'
   21380           The carry register.
   21381 
   21382     `z'
   21383           Registers r8 and r9.
   21384 
   21385     `I'
   21386           A constant between 0 and 3 inclusive.
   21387 
   21388     `J'
   21389           A constant that has exactly one bit set.
   21390 
   21391     `K'
   21392           A constant that has exactly one bit clear.
   21393 
   21394     `L'
   21395           A constant between 0 and 255 inclusive.
   21396 
   21397     `M'
   21398           A constant between -255 and 0 inclusive.
   21399 
   21400     `N'
   21401           A constant between -3 and 0 inclusive.
   21402 
   21403     `O'
   21404           A constant between 1 and 4 inclusive.
   21405 
   21406     `P'
   21407           A constant between -4 and -1 inclusive.
   21408 
   21409     `Q'
   21410           A memory reference that is a stack push.
   21411 
   21412     `R'
   21413           A memory reference that is a stack pop.
   21414 
   21415     `S'
   21416           A memory reference that refers to a constant address of known
   21417           value.
   21418 
   21419     `T'
   21420           The register indicated by Rx (not implemented yet).
   21421 
   21422     `U'
   21423           A constant that is not between 2 and 15 inclusive.
   21424 
   21425     `Z'
   21426           The constant 0.
   21427 
   21428 
   21429 _Xtensa--`config/xtensa/constraints.md'_
   21430 
   21431     `a'
   21432           General-purpose 32-bit register
   21433 
   21434     `b'
   21435           One-bit boolean register
   21436 
   21437     `A'
   21438           MAC16 40-bit accumulator register
   21439 
   21440     `I'
   21441           Signed 12-bit integer constant, for use in MOVI instructions
   21442 
   21443     `J'
   21444           Signed 8-bit integer constant, for use in ADDI instructions
   21445 
   21446     `K'
   21447           Integer constant valid for BccI instructions
   21448 
   21449     `L'
   21450           Unsigned constant valid for BccUI instructions
   21451 
   21452 
   21453 
   21454 
   21455 File: gcc.info,  Node: Asm Labels,  Next: Explicit Reg Vars,  Prev: Constraints,  Up: C Extensions
   21456 
   21457 5.39 Controlling Names Used in Assembler Code
   21458 =============================================
   21459 
   21460 You can specify the name to be used in the assembler code for a C
   21461 function or variable by writing the `asm' (or `__asm__') keyword after
   21462 the declarator as follows:
   21463 
   21464      int foo asm ("myfoo") = 2;
   21465 
   21466 This specifies that the name to be used for the variable `foo' in the
   21467 assembler code should be `myfoo' rather than the usual `_foo'.
   21468 
   21469  On systems where an underscore is normally prepended to the name of a C
   21470 function or variable, this feature allows you to define names for the
   21471 linker that do not start with an underscore.
   21472 
   21473  It does not make sense to use this feature with a non-static local
   21474 variable since such variables do not have assembler names.  If you are
   21475 trying to put the variable in a particular register, see *Note Explicit
   21476 Reg Vars::.  GCC presently accepts such code with a warning, but will
   21477 probably be changed to issue an error, rather than a warning, in the
   21478 future.
   21479 
   21480  You cannot use `asm' in this way in a function _definition_; but you
   21481 can get the same effect by writing a declaration for the function
   21482 before its definition and putting `asm' there, like this:
   21483 
   21484      extern func () asm ("FUNC");
   21485 
   21486      func (x, y)
   21487           int x, y;
   21488      /* ... */
   21489 
   21490  It is up to you to make sure that the assembler names you choose do not
   21491 conflict with any other assembler symbols.  Also, you must not use a
   21492 register name; that would produce completely invalid assembler code.
   21493 GCC does not as yet have the ability to store static variables in
   21494 registers.  Perhaps that will be added.
   21495 
   21496 
   21497 File: gcc.info,  Node: Explicit Reg Vars,  Next: Alternate Keywords,  Prev: Asm Labels,  Up: C Extensions
   21498 
   21499 5.40 Variables in Specified Registers
   21500 =====================================
   21501 
   21502 GNU C allows you to put a few global variables into specified hardware
   21503 registers.  You can also specify the register in which an ordinary
   21504 register variable should be allocated.
   21505 
   21506    * Global register variables reserve registers throughout the program.
   21507      This may be useful in programs such as programming language
   21508      interpreters which have a couple of global variables that are
   21509      accessed very often.
   21510 
   21511    * Local register variables in specific registers do not reserve the
   21512      registers, except at the point where they are used as input or
   21513      output operands in an `asm' statement and the `asm' statement
   21514      itself is not deleted.  The compiler's data flow analysis is
   21515      capable of determining where the specified registers contain live
   21516      values, and where they are available for other uses.  Stores into
   21517      local register variables may be deleted when they appear to be
   21518      dead according to dataflow analysis.  References to local register
   21519      variables may be deleted or moved or simplified.
   21520 
   21521      These local variables are sometimes convenient for use with the
   21522      extended `asm' feature (*note Extended Asm::), if you want to
   21523      write one output of the assembler instruction directly into a
   21524      particular register.  (This will work provided the register you
   21525      specify fits the constraints specified for that operand in the
   21526      `asm'.)
   21527 
   21528 * Menu:
   21529 
   21530 * Global Reg Vars::
   21531 * Local Reg Vars::
   21532 
   21533 
   21534 File: gcc.info,  Node: Global Reg Vars,  Next: Local Reg Vars,  Up: Explicit Reg Vars
   21535 
   21536 5.40.1 Defining Global Register Variables
   21537 -----------------------------------------
   21538 
   21539 You can define a global register variable in GNU C like this:
   21540 
   21541      register int *foo asm ("a5");
   21542 
   21543 Here `a5' is the name of the register which should be used.  Choose a
   21544 register which is normally saved and restored by function calls on your
   21545 machine, so that library routines will not clobber it.
   21546 
   21547  Naturally the register name is cpu-dependent, so you would need to
   21548 conditionalize your program according to cpu type.  The register `a5'
   21549 would be a good choice on a 68000 for a variable of pointer type.  On
   21550 machines with register windows, be sure to choose a "global" register
   21551 that is not affected magically by the function call mechanism.
   21552 
   21553  In addition, operating systems on one type of cpu may differ in how
   21554 they name the registers; then you would need additional conditionals.
   21555 For example, some 68000 operating systems call this register `%a5'.
   21556 
   21557  Eventually there may be a way of asking the compiler to choose a
   21558 register automatically, but first we need to figure out how it should
   21559 choose and how to enable you to guide the choice.  No solution is
   21560 evident.
   21561 
   21562  Defining a global register variable in a certain register reserves that
   21563 register entirely for this use, at least within the current compilation.
   21564 The register will not be allocated for any other purpose in the
   21565 functions in the current compilation.  The register will not be saved
   21566 and restored by these functions.  Stores into this register are never
   21567 deleted even if they would appear to be dead, but references may be
   21568 deleted or moved or simplified.
   21569 
   21570  It is not safe to access the global register variables from signal
   21571 handlers, or from more than one thread of control, because the system
   21572 library routines may temporarily use the register for other things
   21573 (unless you recompile them specially for the task at hand).
   21574 
   21575  It is not safe for one function that uses a global register variable to
   21576 call another such function `foo' by way of a third function `lose' that
   21577 was compiled without knowledge of this variable (i.e. in a different
   21578 source file in which the variable wasn't declared).  This is because
   21579 `lose' might save the register and put some other value there.  For
   21580 example, you can't expect a global register variable to be available in
   21581 the comparison-function that you pass to `qsort', since `qsort' might
   21582 have put something else in that register.  (If you are prepared to
   21583 recompile `qsort' with the same global register variable, you can solve
   21584 this problem.)
   21585 
   21586  If you want to recompile `qsort' or other source files which do not
   21587 actually use your global register variable, so that they will not use
   21588 that register for any other purpose, then it suffices to specify the
   21589 compiler option `-ffixed-REG'.  You need not actually add a global
   21590 register declaration to their source code.
   21591 
   21592  A function which can alter the value of a global register variable
   21593 cannot safely be called from a function compiled without this variable,
   21594 because it could clobber the value the caller expects to find there on
   21595 return.  Therefore, the function which is the entry point into the part
   21596 of the program that uses the global register variable must explicitly
   21597 save and restore the value which belongs to its caller.
   21598 
   21599  On most machines, `longjmp' will restore to each global register
   21600 variable the value it had at the time of the `setjmp'.  On some
   21601 machines, however, `longjmp' will not change the value of global
   21602 register variables.  To be portable, the function that called `setjmp'
   21603 should make other arrangements to save the values of the global register
   21604 variables, and to restore them in a `longjmp'.  This way, the same
   21605 thing will happen regardless of what `longjmp' does.
   21606 
   21607  All global register variable declarations must precede all function
   21608 definitions.  If such a declaration could appear after function
   21609 definitions, the declaration would be too late to prevent the register
   21610 from being used for other purposes in the preceding functions.
   21611 
   21612  Global register variables may not have initial values, because an
   21613 executable file has no means to supply initial contents for a register.
   21614 
   21615  On the SPARC, there are reports that g3 ... g7 are suitable registers,
   21616 but certain library functions, such as `getwd', as well as the
   21617 subroutines for division and remainder, modify g3 and g4.  g1 and g2
   21618 are local temporaries.
   21619 
   21620  On the 68000, a2 ... a5 should be suitable, as should d2 ... d7.  Of
   21621 course, it will not do to use more than a few of those.
   21622 
   21623 
   21624 File: gcc.info,  Node: Local Reg Vars,  Prev: Global Reg Vars,  Up: Explicit Reg Vars
   21625 
   21626 5.40.2 Specifying Registers for Local Variables
   21627 -----------------------------------------------
   21628 
   21629 You can define a local register variable with a specified register like
   21630 this:
   21631 
   21632      register int *foo asm ("a5");
   21633 
   21634 Here `a5' is the name of the register which should be used.  Note that
   21635 this is the same syntax used for defining global register variables,
   21636 but for a local variable it would appear within a function.
   21637 
   21638  Naturally the register name is cpu-dependent, but this is not a
   21639 problem, since specific registers are most often useful with explicit
   21640 assembler instructions (*note Extended Asm::).  Both of these things
   21641 generally require that you conditionalize your program according to cpu
   21642 type.
   21643 
   21644  In addition, operating systems on one type of cpu may differ in how
   21645 they name the registers; then you would need additional conditionals.
   21646 For example, some 68000 operating systems call this register `%a5'.
   21647 
   21648  Defining such a register variable does not reserve the register; it
   21649 remains available for other uses in places where flow control determines
   21650 the variable's value is not live.
   21651 
   21652  This option does not guarantee that GCC will generate code that has
   21653 this variable in the register you specify at all times.  You may not
   21654 code an explicit reference to this register in the _assembler
   21655 instruction template_ part of an `asm' statement and assume it will
   21656 always refer to this variable.  However, using the variable as an `asm'
   21657 _operand_ guarantees that the specified register is used for the
   21658 operand.
   21659 
   21660  Stores into local register variables may be deleted when they appear
   21661 to be dead according to dataflow analysis.  References to local
   21662 register variables may be deleted or moved or simplified.
   21663 
   21664  As for global register variables, it's recommended that you choose a
   21665 register which is normally saved and restored by function calls on your
   21666 machine, so that library routines will not clobber it.  A common
   21667 pitfall is to initialize multiple call-clobbered registers with
   21668 arbitrary expressions, where a function call or library call for an
   21669 arithmetic operator will overwrite a register value from a previous
   21670 assignment, for example `r0' below:
   21671      register int *p1 asm ("r0") = ...;
   21672      register int *p2 asm ("r1") = ...;
   21673  In those cases, a solution is to use a temporary variable for each
   21674 arbitrary expression.   *Note Example of asm with clobbered asm reg::.
   21675 
   21676 
   21677 File: gcc.info,  Node: Alternate Keywords,  Next: Incomplete Enums,  Prev: Explicit Reg Vars,  Up: C Extensions
   21678 
   21679 5.41 Alternate Keywords
   21680 =======================
   21681 
   21682 `-ansi' and the various `-std' options disable certain keywords.  This
   21683 causes trouble when you want to use GNU C extensions, or a
   21684 general-purpose header file that should be usable by all programs,
   21685 including ISO C programs.  The keywords `asm', `typeof' and `inline'
   21686 are not available in programs compiled with `-ansi' or `-std' (although
   21687 `inline' can be used in a program compiled with `-std=c99').  The ISO
   21688 C99 keyword `restrict' is only available when `-std=gnu99' (which will
   21689 eventually be the default) or `-std=c99' (or the equivalent
   21690 `-std=iso9899:1999') is used.
   21691 
   21692  The way to solve these problems is to put `__' at the beginning and
   21693 end of each problematical keyword.  For example, use `__asm__' instead
   21694 of `asm', and `__inline__' instead of `inline'.
   21695 
   21696  Other C compilers won't accept these alternative keywords; if you want
   21697 to compile with another compiler, you can define the alternate keywords
   21698 as macros to replace them with the customary keywords.  It looks like
   21699 this:
   21700 
   21701      #ifndef __GNUC__
   21702      #define __asm__ asm
   21703      #endif
   21704 
   21705  `-pedantic' and other options cause warnings for many GNU C extensions.
   21706 You can prevent such warnings within one expression by writing
   21707 `__extension__' before the expression.  `__extension__' has no effect
   21708 aside from this.
   21709 
   21710 
   21711 File: gcc.info,  Node: Incomplete Enums,  Next: Function Names,  Prev: Alternate Keywords,  Up: C Extensions
   21712 
   21713 5.42 Incomplete `enum' Types
   21714 ============================
   21715 
   21716 You can define an `enum' tag without specifying its possible values.
   21717 This results in an incomplete type, much like what you get if you write
   21718 `struct foo' without describing the elements.  A later declaration
   21719 which does specify the possible values completes the type.
   21720 
   21721  You can't allocate variables or storage using the type while it is
   21722 incomplete.  However, you can work with pointers to that type.
   21723 
   21724  This extension may not be very useful, but it makes the handling of
   21725 `enum' more consistent with the way `struct' and `union' are handled.
   21726 
   21727  This extension is not supported by GNU C++.
   21728 
   21729 
   21730 File: gcc.info,  Node: Function Names,  Next: Return Address,  Prev: Incomplete Enums,  Up: C Extensions
   21731 
   21732 5.43 Function Names as Strings
   21733 ==============================
   21734 
   21735 GCC provides three magic variables which hold the name of the current
   21736 function, as a string.  The first of these is `__func__', which is part
   21737 of the C99 standard:
   21738 
   21739      The identifier `__func__' is implicitly declared by the translator
   21740      as if, immediately following the opening brace of each function
   21741      definition, the declaration
   21742           static const char __func__[] = "function-name";
   21743 
   21744      appeared, where function-name is the name of the lexically-enclosing
   21745      function.  This name is the unadorned name of the function.
   21746 
   21747  `__FUNCTION__' is another name for `__func__'.  Older versions of GCC
   21748 recognize only this name.  However, it is not standardized.  For
   21749 maximum portability, we recommend you use `__func__', but provide a
   21750 fallback definition with the preprocessor:
   21751 
   21752      #if __STDC_VERSION__ < 199901L
   21753      # if __GNUC__ >= 2
   21754      #  define __func__ __FUNCTION__
   21755      # else
   21756      #  define __func__ "<unknown>"
   21757      # endif
   21758      #endif
   21759 
   21760  In C, `__PRETTY_FUNCTION__' is yet another name for `__func__'.
   21761 However, in C++, `__PRETTY_FUNCTION__' contains the type signature of
   21762 the function as well as its bare name.  For example, this program:
   21763 
   21764      extern "C" {
   21765      extern int printf (char *, ...);
   21766      }
   21767 
   21768      class a {
   21769       public:
   21770        void sub (int i)
   21771          {
   21772            printf ("__FUNCTION__ = %s\n", __FUNCTION__);
   21773            printf ("__PRETTY_FUNCTION__ = %s\n", __PRETTY_FUNCTION__);
   21774          }
   21775      };
   21776 
   21777      int
   21778      main (void)
   21779      {
   21780        a ax;
   21781        ax.sub (0);
   21782        return 0;
   21783      }
   21784 
   21785 gives this output:
   21786 
   21787      __FUNCTION__ = sub
   21788      __PRETTY_FUNCTION__ = void a::sub(int)
   21789 
   21790  These identifiers are not preprocessor macros.  In GCC 3.3 and
   21791 earlier, in C only, `__FUNCTION__' and `__PRETTY_FUNCTION__' were
   21792 treated as string literals; they could be used to initialize `char'
   21793 arrays, and they could be concatenated with other string literals.  GCC
   21794 3.4 and later treat them as variables, like `__func__'.  In C++,
   21795 `__FUNCTION__' and `__PRETTY_FUNCTION__' have always been variables.
   21796 
   21797 
   21798 File: gcc.info,  Node: Return Address,  Next: Vector Extensions,  Prev: Function Names,  Up: C Extensions
   21799 
   21800 5.44 Getting the Return or Frame Address of a Function
   21801 ======================================================
   21802 
   21803 These functions may be used to get information about the callers of a
   21804 function.
   21805 
   21806  -- Built-in Function: void * __builtin_return_address (unsigned int
   21807           LEVEL)
   21808      This function returns the return address of the current function,
   21809      or of one of its callers.  The LEVEL argument is number of frames
   21810      to scan up the call stack.  A value of `0' yields the return
   21811      address of the current function, a value of `1' yields the return
   21812      address of the caller of the current function, and so forth.  When
   21813      inlining the expected behavior is that the function will return
   21814      the address of the function that will be returned to.  To work
   21815      around this behavior use the `noinline' function attribute.
   21816 
   21817      The LEVEL argument must be a constant integer.
   21818 
   21819      On some machines it may be impossible to determine the return
   21820      address of any function other than the current one; in such cases,
   21821      or when the top of the stack has been reached, this function will
   21822      return `0' or a random value.  In addition,
   21823      `__builtin_frame_address' may be used to determine if the top of
   21824      the stack has been reached.
   21825 
   21826      This function should only be used with a nonzero argument for
   21827      debugging purposes.
   21828 
   21829  -- Built-in Function: void * __builtin_frame_address (unsigned int
   21830           LEVEL)
   21831      This function is similar to `__builtin_return_address', but it
   21832      returns the address of the function frame rather than the return
   21833      address of the function.  Calling `__builtin_frame_address' with a
   21834      value of `0' yields the frame address of the current function, a
   21835      value of `1' yields the frame address of the caller of the current
   21836      function, and so forth.
   21837 
   21838      The frame is the area on the stack which holds local variables and
   21839      saved registers.  The frame address is normally the address of the
   21840      first word pushed on to the stack by the function.  However, the
   21841      exact definition depends upon the processor and the calling
   21842      convention.  If the processor has a dedicated frame pointer
   21843      register, and the function has a frame, then
   21844      `__builtin_frame_address' will return the value of the frame
   21845      pointer register.
   21846 
   21847      On some machines it may be impossible to determine the frame
   21848      address of any function other than the current one; in such cases,
   21849      or when the top of the stack has been reached, this function will
   21850      return `0' if the first frame pointer is properly initialized by
   21851      the startup code.
   21852 
   21853      This function should only be used with a nonzero argument for
   21854      debugging purposes.
   21855 
   21856 
   21857 File: gcc.info,  Node: Vector Extensions,  Next: Offsetof,  Prev: Return Address,  Up: C Extensions
   21858 
   21859 5.45 Using vector instructions through built-in functions
   21860 =========================================================
   21861 
   21862 On some targets, the instruction set contains SIMD vector instructions
   21863 that operate on multiple values contained in one large register at the
   21864 same time.  For example, on the i386 the MMX, 3Dnow! and SSE extensions
   21865 can be used this way.
   21866 
   21867  The first step in using these extensions is to provide the necessary
   21868 data types.  This should be done using an appropriate `typedef':
   21869 
   21870      typedef int v4si __attribute__ ((vector_size (16)));
   21871 
   21872  The `int' type specifies the base type, while the attribute specifies
   21873 the vector size for the variable, measured in bytes.  For example, the
   21874 declaration above causes the compiler to set the mode for the `v4si'
   21875 type to be 16 bytes wide and divided into `int' sized units.  For a
   21876 32-bit `int' this means a vector of 4 units of 4 bytes, and the
   21877 corresponding mode of `foo' will be V4SI.
   21878 
   21879  The `vector_size' attribute is only applicable to integral and float
   21880 scalars, although arrays, pointers, and function return values are
   21881 allowed in conjunction with this construct.
   21882 
   21883  All the basic integer types can be used as base types, both as signed
   21884 and as unsigned: `char', `short', `int', `long', `long long'.  In
   21885 addition, `float' and `double' can be used to build floating-point
   21886 vector types.
   21887 
   21888  Specifying a combination that is not valid for the current architecture
   21889 will cause GCC to synthesize the instructions using a narrower mode.
   21890 For example, if you specify a variable of type `V4SI' and your
   21891 architecture does not allow for this specific SIMD type, GCC will
   21892 produce code that uses 4 `SIs'.
   21893 
   21894  The types defined in this manner can be used with a subset of normal C
   21895 operations.  Currently, GCC will allow using the following operators on
   21896 these types: `+, -, *, /, unary minus, ^, |, &, ~'.
   21897 
   21898  The operations behave like C++ `valarrays'.  Addition is defined as
   21899 the addition of the corresponding elements of the operands.  For
   21900 example, in the code below, each of the 4 elements in A will be added
   21901 to the corresponding 4 elements in B and the resulting vector will be
   21902 stored in C.
   21903 
   21904      typedef int v4si __attribute__ ((vector_size (16)));
   21905 
   21906      v4si a, b, c;
   21907 
   21908      c = a + b;
   21909 
   21910  Subtraction, multiplication, division, and the logical operations
   21911 operate in a similar manner.  Likewise, the result of using the unary
   21912 minus or complement operators on a vector type is a vector whose
   21913 elements are the negative or complemented values of the corresponding
   21914 elements in the operand.
   21915 
   21916  You can declare variables and use them in function calls and returns,
   21917 as well as in assignments and some casts.  You can specify a vector
   21918 type as a return type for a function.  Vector types can also be used as
   21919 function arguments.  It is possible to cast from one vector type to
   21920 another, provided they are of the same size (in fact, you can also cast
   21921 vectors to and from other datatypes of the same size).
   21922 
   21923  You cannot operate between vectors of different lengths or different
   21924 signedness without a cast.
   21925 
   21926  A port that supports hardware vector operations, usually provides a set
   21927 of built-in functions that can be used to operate on vectors.  For
   21928 example, a function to add two vectors and multiply the result by a
   21929 third could look like this:
   21930 
   21931      v4si f (v4si a, v4si b, v4si c)
   21932      {
   21933        v4si tmp = __builtin_addv4si (a, b);
   21934        return __builtin_mulv4si (tmp, c);
   21935      }
   21936 
   21937 
   21938 File: gcc.info,  Node: Offsetof,  Next: Atomic Builtins,  Prev: Vector Extensions,  Up: C Extensions
   21939 
   21940 5.46 Offsetof
   21941 =============
   21942 
   21943 GCC implements for both C and C++ a syntactic extension to implement
   21944 the `offsetof' macro.
   21945 
   21946      primary:
   21947      	"__builtin_offsetof" "(" `typename' "," offsetof_member_designator ")"
   21948 
   21949      offsetof_member_designator:
   21950      	  `identifier'
   21951      	| offsetof_member_designator "." `identifier'
   21952      	| offsetof_member_designator "[" `expr' "]"
   21953 
   21954  This extension is sufficient such that
   21955 
   21956      #define offsetof(TYPE, MEMBER)  __builtin_offsetof (TYPE, MEMBER)
   21957 
   21958  is a suitable definition of the `offsetof' macro.  In C++, TYPE may be
   21959 dependent.  In either case, MEMBER may consist of a single identifier,
   21960 or a sequence of member accesses and array references.
   21961 
   21962 
   21963 File: gcc.info,  Node: Atomic Builtins,  Next: Object Size Checking,  Prev: Offsetof,  Up: C Extensions
   21964 
   21965 5.47 Built-in functions for atomic memory access
   21966 ================================================
   21967 
   21968 The following builtins are intended to be compatible with those
   21969 described in the `Intel Itanium Processor-specific Application Binary
   21970 Interface', section 7.4.  As such, they depart from the normal GCC
   21971 practice of using the "__builtin_" prefix, and further that they are
   21972 overloaded such that they work on multiple types.
   21973 
   21974  The definition given in the Intel documentation allows only for the
   21975 use of the types `int', `long', `long long' as well as their unsigned
   21976 counterparts.  GCC will allow any integral scalar or pointer type that
   21977 is 1, 2, 4 or 8 bytes in length.
   21978 
   21979  Not all operations are supported by all target processors.  If a
   21980 particular operation cannot be implemented on the target processor, a
   21981 warning will be generated and a call an external function will be
   21982 generated.  The external function will carry the same name as the
   21983 builtin, with an additional suffix `_N' where N is the size of the data
   21984 type.
   21985 
   21986  In most cases, these builtins are considered a "full barrier".  That
   21987 is, no memory operand will be moved across the operation, either
   21988 forward or backward.  Further, instructions will be issued as necessary
   21989 to prevent the processor from speculating loads across the operation
   21990 and from queuing stores after the operation.
   21991 
   21992  All of the routines are are described in the Intel documentation to
   21993 take "an optional list of variables protected by the memory barrier".
   21994 It's not clear what is meant by that; it could mean that _only_ the
   21995 following variables are protected, or it could mean that these variables
   21996 should in addition be protected.  At present GCC ignores this list and
   21997 protects all variables which are globally accessible.  If in the future
   21998 we make some use of this list, an empty list will continue to mean all
   21999 globally accessible variables.
   22000 
   22001 `TYPE __sync_fetch_and_add (TYPE *ptr, TYPE value, ...)'
   22002 `TYPE __sync_fetch_and_sub (TYPE *ptr, TYPE value, ...)'
   22003 `TYPE __sync_fetch_and_or (TYPE *ptr, TYPE value, ...)'
   22004 `TYPE __sync_fetch_and_and (TYPE *ptr, TYPE value, ...)'
   22005 `TYPE __sync_fetch_and_xor (TYPE *ptr, TYPE value, ...)'
   22006 `TYPE __sync_fetch_and_nand (TYPE *ptr, TYPE value, ...)'
   22007      These builtins perform the operation suggested by the name, and
   22008      returns the value that had previously been in memory.  That is,
   22009 
   22010           { tmp = *ptr; *ptr OP= value; return tmp; }
   22011           { tmp = *ptr; *ptr = ~tmp & value; return tmp; }   // nand
   22012 
   22013 `TYPE __sync_add_and_fetch (TYPE *ptr, TYPE value, ...)'
   22014 `TYPE __sync_sub_and_fetch (TYPE *ptr, TYPE value, ...)'
   22015 `TYPE __sync_or_and_fetch (TYPE *ptr, TYPE value, ...)'
   22016 `TYPE __sync_and_and_fetch (TYPE *ptr, TYPE value, ...)'
   22017 `TYPE __sync_xor_and_fetch (TYPE *ptr, TYPE value, ...)'
   22018 `TYPE __sync_nand_and_fetch (TYPE *ptr, TYPE value, ...)'
   22019      These builtins perform the operation suggested by the name, and
   22020      return the new value.  That is,
   22021 
   22022           { *ptr OP= value; return *ptr; }
   22023           { *ptr = ~*ptr & value; return *ptr; }   // nand
   22024 
   22025 `bool __sync_bool_compare_and_swap (TYPE *ptr, TYPE oldval TYPE newval, ...)'
   22026 `TYPE __sync_val_compare_and_swap (TYPE *ptr, TYPE oldval TYPE newval, ...)'
   22027      These builtins perform an atomic compare and swap.  That is, if
   22028      the current value of `*PTR' is OLDVAL, then write NEWVAL into
   22029      `*PTR'.
   22030 
   22031      The "bool" version returns true if the comparison is successful and
   22032      NEWVAL was written.  The "val" version returns the contents of
   22033      `*PTR' before the operation.
   22034 
   22035 `__sync_synchronize (...)'
   22036      This builtin issues a full memory barrier.
   22037 
   22038 `TYPE __sync_lock_test_and_set (TYPE *ptr, TYPE value, ...)'
   22039      This builtin, as described by Intel, is not a traditional
   22040      test-and-set operation, but rather an atomic exchange operation.
   22041      It writes VALUE into `*PTR', and returns the previous contents of
   22042      `*PTR'.
   22043 
   22044      Many targets have only minimal support for such locks, and do not
   22045      support a full exchange operation.  In this case, a target may
   22046      support reduced functionality here by which the _only_ valid value
   22047      to store is the immediate constant 1.  The exact value actually
   22048      stored in `*PTR' is implementation defined.
   22049 
   22050      This builtin is not a full barrier, but rather an "acquire
   22051      barrier".  This means that references after the builtin cannot
   22052      move to (or be speculated to) before the builtin, but previous
   22053      memory stores may not be globally visible yet, and previous memory
   22054      loads may not yet be satisfied.
   22055 
   22056 `void __sync_lock_release (TYPE *ptr, ...)'
   22057      This builtin releases the lock acquired by
   22058      `__sync_lock_test_and_set'.  Normally this means writing the
   22059      constant 0 to `*PTR'.
   22060 
   22061      This builtin is not a full barrier, but rather a "release barrier".
   22062      This means that all previous memory stores are globally visible,
   22063      and all previous memory loads have been satisfied, but following
   22064      memory reads are not prevented from being speculated to before the
   22065      barrier.
   22066 
   22067 
   22068 File: gcc.info,  Node: Object Size Checking,  Next: Other Builtins,  Prev: Atomic Builtins,  Up: C Extensions
   22069 
   22070 5.48 Object Size Checking Builtins
   22071 ==================================
   22072 
   22073 GCC implements a limited buffer overflow protection mechanism that can
   22074 prevent some buffer overflow attacks.
   22075 
   22076  -- Built-in Function: size_t __builtin_object_size (void * PTR, int
   22077           TYPE)
   22078      is a built-in construct that returns a constant number of bytes
   22079      from PTR to the end of the object PTR pointer points to (if known
   22080      at compile time).  `__builtin_object_size' never evaluates its
   22081      arguments for side-effects.  If there are any side-effects in
   22082      them, it returns `(size_t) -1' for TYPE 0 or 1 and `(size_t) 0'
   22083      for TYPE 2 or 3.  If there are multiple objects PTR can point to
   22084      and all of them are known at compile time, the returned number is
   22085      the maximum of remaining byte counts in those objects if TYPE & 2
   22086      is 0 and minimum if nonzero.  If it is not possible to determine
   22087      which objects PTR points to at compile time,
   22088      `__builtin_object_size' should return `(size_t) -1' for TYPE 0 or
   22089      1 and `(size_t) 0' for TYPE 2 or 3.
   22090 
   22091      TYPE is an integer constant from 0 to 3.  If the least significant
   22092      bit is clear, objects are whole variables, if it is set, a closest
   22093      surrounding subobject is considered the object a pointer points to.
   22094      The second bit determines if maximum or minimum of remaining bytes
   22095      is computed.
   22096 
   22097           struct V { char buf1[10]; int b; char buf2[10]; } var;
   22098           char *p = &var.buf1[1], *q = &var.b;
   22099 
   22100           /* Here the object p points to is var.  */
   22101           assert (__builtin_object_size (p, 0) == sizeof (var) - 1);
   22102           /* The subobject p points to is var.buf1.  */
   22103           assert (__builtin_object_size (p, 1) == sizeof (var.buf1) - 1);
   22104           /* The object q points to is var.  */
   22105           assert (__builtin_object_size (q, 0)
   22106           	== (char *) (&var + 1) - (char *) &var.b);
   22107           /* The subobject q points to is var.b.  */
   22108           assert (__builtin_object_size (q, 1) == sizeof (var.b));
   22109 
   22110  There are built-in functions added for many common string operation
   22111 functions, e.g., for `memcpy' `__builtin___memcpy_chk' built-in is
   22112 provided.  This built-in has an additional last argument, which is the
   22113 number of bytes remaining in object the DEST argument points to or
   22114 `(size_t) -1' if the size is not known.
   22115 
   22116  The built-in functions are optimized into the normal string functions
   22117 like `memcpy' if the last argument is `(size_t) -1' or if it is known
   22118 at compile time that the destination object will not be overflown.  If
   22119 the compiler can determine at compile time the object will be always
   22120 overflown, it issues a warning.
   22121 
   22122  The intended use can be e.g.
   22123 
   22124      #undef memcpy
   22125      #define bos0(dest) __builtin_object_size (dest, 0)
   22126      #define memcpy(dest, src, n) \
   22127        __builtin___memcpy_chk (dest, src, n, bos0 (dest))
   22128 
   22129      char *volatile p;
   22130      char buf[10];
   22131      /* It is unknown what object p points to, so this is optimized
   22132         into plain memcpy - no checking is possible.  */
   22133      memcpy (p, "abcde", n);
   22134      /* Destination is known and length too.  It is known at compile
   22135         time there will be no overflow.  */
   22136      memcpy (&buf[5], "abcde", 5);
   22137      /* Destination is known, but the length is not known at compile time.
   22138         This will result in __memcpy_chk call that can check for overflow
   22139         at runtime.  */
   22140      memcpy (&buf[5], "abcde", n);
   22141      /* Destination is known and it is known at compile time there will
   22142         be overflow.  There will be a warning and __memcpy_chk call that
   22143         will abort the program at runtime.  */
   22144      memcpy (&buf[6], "abcde", 5);
   22145 
   22146  Such built-in functions are provided for `memcpy', `mempcpy',
   22147 `memmove', `memset', `strcpy', `stpcpy', `strncpy', `strcat' and
   22148 `strncat'.
   22149 
   22150  There are also checking built-in functions for formatted output
   22151 functions.
   22152      int __builtin___sprintf_chk (char *s, int flag, size_t os, const char *fmt, ...);
   22153      int __builtin___snprintf_chk (char *s, size_t maxlen, int flag, size_t os,
   22154      			      const char *fmt, ...);
   22155      int __builtin___vsprintf_chk (char *s, int flag, size_t os, const char *fmt,
   22156      			      va_list ap);
   22157      int __builtin___vsnprintf_chk (char *s, size_t maxlen, int flag, size_t os,
   22158      			       const char *fmt, va_list ap);
   22159 
   22160  The added FLAG argument is passed unchanged to `__sprintf_chk' etc.
   22161 functions and can contain implementation specific flags on what
   22162 additional security measures the checking function might take, such as
   22163 handling `%n' differently.
   22164 
   22165  The OS argument is the object size S points to, like in the other
   22166 built-in functions.  There is a small difference in the behavior
   22167 though, if OS is `(size_t) -1', the built-in functions are optimized
   22168 into the non-checking functions only if FLAG is 0, otherwise the
   22169 checking function is called with OS argument set to `(size_t) -1'.
   22170 
   22171  In addition to this, there are checking built-in functions
   22172 `__builtin___printf_chk', `__builtin___vprintf_chk',
   22173 `__builtin___fprintf_chk' and `__builtin___vfprintf_chk'.  These have
   22174 just one additional argument, FLAG, right before format string FMT.  If
   22175 the compiler is able to optimize them to `fputc' etc. functions, it
   22176 will, otherwise the checking function should be called and the FLAG
   22177 argument passed to it.
   22178 
   22179 
   22180 File: gcc.info,  Node: Other Builtins,  Next: Target Builtins,  Prev: Object Size Checking,  Up: C Extensions
   22181 
   22182 5.49 Other built-in functions provided by GCC
   22183 =============================================
   22184 
   22185 GCC provides a large number of built-in functions other than the ones
   22186 mentioned above.  Some of these are for internal use in the processing
   22187 of exceptions or variable-length argument lists and will not be
   22188 documented here because they may change from time to time; we do not
   22189 recommend general use of these functions.
   22190 
   22191  The remaining functions are provided for optimization purposes.
   22192 
   22193  GCC includes built-in versions of many of the functions in the standard
   22194 C library.  The versions prefixed with `__builtin_' will always be
   22195 treated as having the same meaning as the C library function even if you
   22196 specify the `-fno-builtin' option.  (*note C Dialect Options::) Many of
   22197 these functions are only optimized in certain cases; if they are not
   22198 optimized in a particular case, a call to the library function will be
   22199 emitted.
   22200 
   22201  Outside strict ISO C mode (`-ansi', `-std=c89' or `-std=c99'), the
   22202 functions `_exit', `alloca', `bcmp', `bzero', `dcgettext', `dgettext',
   22203 `dremf', `dreml', `drem', `exp10f', `exp10l', `exp10', `ffsll', `ffsl',
   22204 `ffs', `fprintf_unlocked', `fputs_unlocked', `gammaf', `gammal',
   22205 `gamma', `gammaf_r', `gammal_r', `gamma_r', `gettext', `index',
   22206 `isascii', `j0f', `j0l', `j0', `j1f', `j1l', `j1', `jnf', `jnl', `jn',
   22207 `lgammaf_r', `lgammal_r', `lgamma_r', `mempcpy', `pow10f', `pow10l',
   22208 `pow10', `printf_unlocked', `rindex', `scalbf', `scalbl', `scalb',
   22209 `signbit', `signbitf', `signbitl', `signbitd32', `signbitd64',
   22210 `signbitd128', `significandf', `significandl', `significand', `sincosf',
   22211 `sincosl', `sincos', `stpcpy', `stpncpy', `strcasecmp', `strdup',
   22212 `strfmon', `strncasecmp', `strndup', `toascii', `y0f', `y0l', `y0',
   22213 `y1f', `y1l', `y1', `ynf', `ynl' and `yn' may be handled as built-in
   22214 functions.  All these functions have corresponding versions prefixed
   22215 with `__builtin_', which may be used even in strict C89 mode.
   22216 
   22217  The ISO C99 functions `_Exit', `acoshf', `acoshl', `acosh', `asinhf',
   22218 `asinhl', `asinh', `atanhf', `atanhl', `atanh', `cabsf', `cabsl',
   22219 `cabs', `cacosf', `cacoshf', `cacoshl', `cacosh', `cacosl', `cacos',
   22220 `cargf', `cargl', `carg', `casinf', `casinhf', `casinhl', `casinh',
   22221 `casinl', `casin', `catanf', `catanhf', `catanhl', `catanh', `catanl',
   22222 `catan', `cbrtf', `cbrtl', `cbrt', `ccosf', `ccoshf', `ccoshl',
   22223 `ccosh', `ccosl', `ccos', `cexpf', `cexpl', `cexp', `cimagf', `cimagl',
   22224 `cimag', `clogf', `clogl', `clog', `conjf', `conjl', `conj',
   22225 `copysignf', `copysignl', `copysign', `cpowf', `cpowl', `cpow',
   22226 `cprojf', `cprojl', `cproj', `crealf', `creall', `creal', `csinf',
   22227 `csinhf', `csinhl', `csinh', `csinl', `csin', `csqrtf', `csqrtl',
   22228 `csqrt', `ctanf', `ctanhf', `ctanhl', `ctanh', `ctanl', `ctan',
   22229 `erfcf', `erfcl', `erfc', `erff', `erfl', `erf', `exp2f', `exp2l',
   22230 `exp2', `expm1f', `expm1l', `expm1', `fdimf', `fdiml', `fdim', `fmaf',
   22231 `fmal', `fmaxf', `fmaxl', `fmax', `fma', `fminf', `fminl', `fmin',
   22232 `hypotf', `hypotl', `hypot', `ilogbf', `ilogbl', `ilogb', `imaxabs',
   22233 `isblank', `iswblank', `lgammaf', `lgammal', `lgamma', `llabs',
   22234 `llrintf', `llrintl', `llrint', `llroundf', `llroundl', `llround',
   22235 `log1pf', `log1pl', `log1p', `log2f', `log2l', `log2', `logbf',
   22236 `logbl', `logb', `lrintf', `lrintl', `lrint', `lroundf', `lroundl',
   22237 `lround', `nearbyintf', `nearbyintl', `nearbyint', `nextafterf',
   22238 `nextafterl', `nextafter', `nexttowardf', `nexttowardl', `nexttoward',
   22239 `remainderf', `remainderl', `remainder', `remquof', `remquol',
   22240 `remquo', `rintf', `rintl', `rint', `roundf', `roundl', `round',
   22241 `scalblnf', `scalblnl', `scalbln', `scalbnf', `scalbnl', `scalbn',
   22242 `snprintf', `tgammaf', `tgammal', `tgamma', `truncf', `truncl', `trunc',
   22243 `vfscanf', `vscanf', `vsnprintf' and `vsscanf' are handled as built-in
   22244 functions except in strict ISO C90 mode (`-ansi' or `-std=c89').
   22245 
   22246  There are also built-in versions of the ISO C99 functions `acosf',
   22247 `acosl', `asinf', `asinl', `atan2f', `atan2l', `atanf', `atanl',
   22248 `ceilf', `ceill', `cosf', `coshf', `coshl', `cosl', `expf', `expl',
   22249 `fabsf', `fabsl', `floorf', `floorl', `fmodf', `fmodl', `frexpf',
   22250 `frexpl', `ldexpf', `ldexpl', `log10f', `log10l', `logf', `logl',
   22251 `modfl', `modf', `powf', `powl', `sinf', `sinhf', `sinhl', `sinl',
   22252 `sqrtf', `sqrtl', `tanf', `tanhf', `tanhl' and `tanl' that are
   22253 recognized in any mode since ISO C90 reserves these names for the
   22254 purpose to which ISO C99 puts them.  All these functions have
   22255 corresponding versions prefixed with `__builtin_'.
   22256 
   22257  The ISO C94 functions `iswalnum', `iswalpha', `iswcntrl', `iswdigit',
   22258 `iswgraph', `iswlower', `iswprint', `iswpunct', `iswspace', `iswupper',
   22259 `iswxdigit', `towlower' and `towupper' are handled as built-in functions
   22260 except in strict ISO C90 mode (`-ansi' or `-std=c89').
   22261 
   22262  The ISO C90 functions `abort', `abs', `acos', `asin', `atan2', `atan',
   22263 `calloc', `ceil', `cosh', `cos', `exit', `exp', `fabs', `floor', `fmod',
   22264 `fprintf', `fputs', `frexp', `fscanf', `isalnum', `isalpha', `iscntrl',
   22265 `isdigit', `isgraph', `islower', `isprint', `ispunct', `isspace',
   22266 `isupper', `isxdigit', `tolower', `toupper', `labs', `ldexp', `log10',
   22267 `log', `malloc', `memchr', `memcmp', `memcpy', `memset', `modf', `pow',
   22268 `printf', `putchar', `puts', `scanf', `sinh', `sin', `snprintf',
   22269 `sprintf', `sqrt', `sscanf', `strcat', `strchr', `strcmp', `strcpy',
   22270 `strcspn', `strlen', `strncat', `strncmp', `strncpy', `strpbrk',
   22271 `strrchr', `strspn', `strstr', `tanh', `tan', `vfprintf', `vprintf' and
   22272 `vsprintf' are all recognized as built-in functions unless
   22273 `-fno-builtin' is specified (or `-fno-builtin-FUNCTION' is specified
   22274 for an individual function).  All of these functions have corresponding
   22275 versions prefixed with `__builtin_'.
   22276 
   22277  GCC provides built-in versions of the ISO C99 floating point comparison
   22278 macros that avoid raising exceptions for unordered operands.  They have
   22279 the same names as the standard macros ( `isgreater', `isgreaterequal',
   22280 `isless', `islessequal', `islessgreater', and `isunordered') , with
   22281 `__builtin_' prefixed.  We intend for a library implementor to be able
   22282 to simply `#define' each standard macro to its built-in equivalent.  In
   22283 the same fashion, GCC provides `isfinite' and `isnormal' built-ins used
   22284 with `__builtin_' prefixed.
   22285 
   22286  -- Built-in Function: int __builtin_types_compatible_p (TYPE1, TYPE2)
   22287      You can use the built-in function `__builtin_types_compatible_p' to
   22288      determine whether two types are the same.
   22289 
   22290      This built-in function returns 1 if the unqualified versions of the
   22291      types TYPE1 and TYPE2 (which are types, not expressions) are
   22292      compatible, 0 otherwise.  The result of this built-in function can
   22293      be used in integer constant expressions.
   22294 
   22295      This built-in function ignores top level qualifiers (e.g., `const',
   22296      `volatile').  For example, `int' is equivalent to `const int'.
   22297 
   22298      The type `int[]' and `int[5]' are compatible.  On the other hand,
   22299      `int' and `char *' are not compatible, even if the size of their
   22300      types, on the particular architecture are the same.  Also, the
   22301      amount of pointer indirection is taken into account when
   22302      determining similarity.  Consequently, `short *' is not similar to
   22303      `short **'.  Furthermore, two types that are typedefed are
   22304      considered compatible if their underlying types are compatible.
   22305 
   22306      An `enum' type is not considered to be compatible with another
   22307      `enum' type even if both are compatible with the same integer
   22308      type; this is what the C standard specifies.  For example, `enum
   22309      {foo, bar}' is not similar to `enum {hot, dog}'.
   22310 
   22311      You would typically use this function in code whose execution
   22312      varies depending on the arguments' types.  For example:
   22313 
   22314           #define foo(x)                                                  \
   22315             ({                                                           \
   22316               typeof (x) tmp = (x);                                       \
   22317               if (__builtin_types_compatible_p (typeof (x), long double)) \
   22318                 tmp = foo_long_double (tmp);                              \
   22319               else if (__builtin_types_compatible_p (typeof (x), double)) \
   22320                 tmp = foo_double (tmp);                                   \
   22321               else if (__builtin_types_compatible_p (typeof (x), float))  \
   22322                 tmp = foo_float (tmp);                                    \
   22323               else                                                        \
   22324                 abort ();                                                 \
   22325               tmp;                                                        \
   22326             })
   22327 
   22328      _Note:_ This construct is only available for C.
   22329 
   22330 
   22331  -- Built-in Function: TYPE __builtin_choose_expr (CONST_EXP, EXP1,
   22332           EXP2)
   22333      You can use the built-in function `__builtin_choose_expr' to
   22334      evaluate code depending on the value of a constant expression.
   22335      This built-in function returns EXP1 if CONST_EXP, which is a
   22336      constant expression that must be able to be determined at compile
   22337      time, is nonzero.  Otherwise it returns 0.
   22338 
   22339      This built-in function is analogous to the `? :' operator in C,
   22340      except that the expression returned has its type unaltered by
   22341      promotion rules.  Also, the built-in function does not evaluate
   22342      the expression that was not chosen.  For example, if CONST_EXP
   22343      evaluates to true, EXP2 is not evaluated even if it has
   22344      side-effects.
   22345 
   22346      This built-in function can return an lvalue if the chosen argument
   22347      is an lvalue.
   22348 
   22349      If EXP1 is returned, the return type is the same as EXP1's type.
   22350      Similarly, if EXP2 is returned, its return type is the same as
   22351      EXP2.
   22352 
   22353      Example:
   22354 
   22355           #define foo(x)                                                    \
   22356             __builtin_choose_expr (                                         \
   22357               __builtin_types_compatible_p (typeof (x), double),            \
   22358               foo_double (x),                                               \
   22359               __builtin_choose_expr (                                       \
   22360                 __builtin_types_compatible_p (typeof (x), float),           \
   22361                 foo_float (x),                                              \
   22362                 /* The void expression results in a compile-time error  \
   22363                    when assigning the result to something.  */          \
   22364                 (void)0))
   22365 
   22366      _Note:_ This construct is only available for C.  Furthermore, the
   22367      unused expression (EXP1 or EXP2 depending on the value of
   22368      CONST_EXP) may still generate syntax errors.  This may change in
   22369      future revisions.
   22370 
   22371 
   22372  -- Built-in Function: int __builtin_constant_p (EXP)
   22373      You can use the built-in function `__builtin_constant_p' to
   22374      determine if a value is known to be constant at compile-time and
   22375      hence that GCC can perform constant-folding on expressions
   22376      involving that value.  The argument of the function is the value
   22377      to test.  The function returns the integer 1 if the argument is
   22378      known to be a compile-time constant and 0 if it is not known to be
   22379      a compile-time constant.  A return of 0 does not indicate that the
   22380      value is _not_ a constant, but merely that GCC cannot prove it is
   22381      a constant with the specified value of the `-O' option.
   22382 
   22383      You would typically use this function in an embedded application
   22384      where memory was a critical resource.  If you have some complex
   22385      calculation, you may want it to be folded if it involves
   22386      constants, but need to call a function if it does not.  For
   22387      example:
   22388 
   22389           #define Scale_Value(X)      \
   22390             (__builtin_constant_p (X) \
   22391             ? ((X) * SCALE + OFFSET) : Scale (X))
   22392 
   22393      You may use this built-in function in either a macro or an inline
   22394      function.  However, if you use it in an inlined function and pass
   22395      an argument of the function as the argument to the built-in, GCC
   22396      will never return 1 when you call the inline function with a
   22397      string constant or compound literal (*note Compound Literals::)
   22398      and will not return 1 when you pass a constant numeric value to
   22399      the inline function unless you specify the `-O' option.
   22400 
   22401      You may also use `__builtin_constant_p' in initializers for static
   22402      data.  For instance, you can write
   22403 
   22404           static const int table[] = {
   22405              __builtin_constant_p (EXPRESSION) ? (EXPRESSION) : -1,
   22406              /* ... */
   22407           };
   22408 
   22409      This is an acceptable initializer even if EXPRESSION is not a
   22410      constant expression.  GCC must be more conservative about
   22411      evaluating the built-in in this case, because it has no
   22412      opportunity to perform optimization.
   22413 
   22414      Previous versions of GCC did not accept this built-in in data
   22415      initializers.  The earliest version where it is completely safe is
   22416      3.0.1.
   22417 
   22418  -- Built-in Function: long __builtin_expect (long EXP, long C)
   22419      You may use `__builtin_expect' to provide the compiler with branch
   22420      prediction information.  In general, you should prefer to use
   22421      actual profile feedback for this (`-fprofile-arcs'), as
   22422      programmers are notoriously bad at predicting how their programs
   22423      actually perform.  However, there are applications in which this
   22424      data is hard to collect.
   22425 
   22426      The return value is the value of EXP, which should be an integral
   22427      expression.  The semantics of the built-in are that it is expected
   22428      that EXP == C.  For example:
   22429 
   22430           if (__builtin_expect (x, 0))
   22431             foo ();
   22432 
   22433      would indicate that we do not expect to call `foo', since we
   22434      expect `x' to be zero.  Since you are limited to integral
   22435      expressions for EXP, you should use constructions such as
   22436 
   22437           if (__builtin_expect (ptr != NULL, 1))
   22438             error ();
   22439 
   22440      when testing pointer or floating-point values.
   22441 
   22442  -- Built-in Function: void __builtin_trap (void)
   22443      This function causes the program to exit abnormally.  GCC
   22444      implements this function by using a target-dependent mechanism
   22445      (such as intentionally executing an illegal instruction) or by
   22446      calling `abort'.  The mechanism used may vary from release to
   22447      release so you should not rely on any particular implementation.
   22448 
   22449  -- Built-in Function: void __builtin___clear_cache (char *BEGIN, char
   22450           *END)
   22451      This function is used to flush the processor's instruction cache
   22452      for the region of memory between BEGIN inclusive and END
   22453      exclusive.  Some targets require that the instruction cache be
   22454      flushed, after modifying memory containing code, in order to obtain
   22455      deterministic behavior.
   22456 
   22457      If the target does not require instruction cache flushes,
   22458      `__builtin___clear_cache' has no effect.  Otherwise either
   22459      instructions are emitted in-line to clear the instruction cache or
   22460      a call to the `__clear_cache' function in libgcc is made.
   22461 
   22462  -- Built-in Function: void __builtin_prefetch (const void *ADDR, ...)
   22463      This function is used to minimize cache-miss latency by moving
   22464      data into a cache before it is accessed.  You can insert calls to
   22465      `__builtin_prefetch' into code for which you know addresses of
   22466      data in memory that is likely to be accessed soon.  If the target
   22467      supports them, data prefetch instructions will be generated.  If
   22468      the prefetch is done early enough before the access then the data
   22469      will be in the cache by the time it is accessed.
   22470 
   22471      The value of ADDR is the address of the memory to prefetch.  There
   22472      are two optional arguments, RW and LOCALITY.  The value of RW is a
   22473      compile-time constant one or zero; one means that the prefetch is
   22474      preparing for a write to the memory address and zero, the default,
   22475      means that the prefetch is preparing for a read.  The value
   22476      LOCALITY must be a compile-time constant integer between zero and
   22477      three.  A value of zero means that the data has no temporal
   22478      locality, so it need not be left in the cache after the access.  A
   22479      value of three means that the data has a high degree of temporal
   22480      locality and should be left in all levels of cache possible.
   22481      Values of one and two mean, respectively, a low or moderate degree
   22482      of temporal locality.  The default is three.
   22483 
   22484           for (i = 0; i < n; i++)
   22485             {
   22486               a[i] = a[i] + b[i];
   22487               __builtin_prefetch (&a[i+j], 1, 1);
   22488               __builtin_prefetch (&b[i+j], 0, 1);
   22489               /* ... */
   22490             }
   22491 
   22492      Data prefetch does not generate faults if ADDR is invalid, but the
   22493      address expression itself must be valid.  For example, a prefetch
   22494      of `p->next' will not fault if `p->next' is not a valid address,
   22495      but evaluation will fault if `p' is not a valid address.
   22496 
   22497      If the target does not support data prefetch, the address
   22498      expression is evaluated if it includes side effects but no other
   22499      code is generated and GCC does not issue a warning.
   22500 
   22501  -- Built-in Function: double __builtin_huge_val (void)
   22502      Returns a positive infinity, if supported by the floating-point
   22503      format, else `DBL_MAX'.  This function is suitable for
   22504      implementing the ISO C macro `HUGE_VAL'.
   22505 
   22506  -- Built-in Function: float __builtin_huge_valf (void)
   22507      Similar to `__builtin_huge_val', except the return type is `float'.
   22508 
   22509  -- Built-in Function: long double __builtin_huge_vall (void)
   22510      Similar to `__builtin_huge_val', except the return type is `long
   22511      double'.
   22512 
   22513  -- Built-in Function: double __builtin_inf (void)
   22514      Similar to `__builtin_huge_val', except a warning is generated if
   22515      the target floating-point format does not support infinities.
   22516 
   22517  -- Built-in Function: _Decimal32 __builtin_infd32 (void)
   22518      Similar to `__builtin_inf', except the return type is `_Decimal32'.
   22519 
   22520  -- Built-in Function: _Decimal64 __builtin_infd64 (void)
   22521      Similar to `__builtin_inf', except the return type is `_Decimal64'.
   22522 
   22523  -- Built-in Function: _Decimal128 __builtin_infd128 (void)
   22524      Similar to `__builtin_inf', except the return type is
   22525      `_Decimal128'.
   22526 
   22527  -- Built-in Function: float __builtin_inff (void)
   22528      Similar to `__builtin_inf', except the return type is `float'.
   22529      This function is suitable for implementing the ISO C99 macro
   22530      `INFINITY'.
   22531 
   22532  -- Built-in Function: long double __builtin_infl (void)
   22533      Similar to `__builtin_inf', except the return type is `long
   22534      double'.
   22535 
   22536  -- Built-in Function: double __builtin_nan (const char *str)
   22537      This is an implementation of the ISO C99 function `nan'.
   22538 
   22539      Since ISO C99 defines this function in terms of `strtod', which we
   22540      do not implement, a description of the parsing is in order.  The
   22541      string is parsed as by `strtol'; that is, the base is recognized by
   22542      leading `0' or `0x' prefixes.  The number parsed is placed in the
   22543      significand such that the least significant bit of the number is
   22544      at the least significant bit of the significand.  The number is
   22545      truncated to fit the significand field provided.  The significand
   22546      is forced to be a quiet NaN.
   22547 
   22548      This function, if given a string literal all of which would have
   22549      been consumed by strtol, is evaluated early enough that it is
   22550      considered a compile-time constant.
   22551 
   22552  -- Built-in Function: _Decimal32 __builtin_nand32 (const char *str)
   22553      Similar to `__builtin_nan', except the return type is `_Decimal32'.
   22554 
   22555  -- Built-in Function: _Decimal64 __builtin_nand64 (const char *str)
   22556      Similar to `__builtin_nan', except the return type is `_Decimal64'.
   22557 
   22558  -- Built-in Function: _Decimal128 __builtin_nand128 (const char *str)
   22559      Similar to `__builtin_nan', except the return type is
   22560      `_Decimal128'.
   22561 
   22562  -- Built-in Function: float __builtin_nanf (const char *str)
   22563      Similar to `__builtin_nan', except the return type is `float'.
   22564 
   22565  -- Built-in Function: long double __builtin_nanl (const char *str)
   22566      Similar to `__builtin_nan', except the return type is `long
   22567      double'.
   22568 
   22569  -- Built-in Function: double __builtin_nans (const char *str)
   22570      Similar to `__builtin_nan', except the significand is forced to be
   22571      a signaling NaN.  The `nans' function is proposed by WG14 N965.
   22572 
   22573  -- Built-in Function: float __builtin_nansf (const char *str)
   22574      Similar to `__builtin_nans', except the return type is `float'.
   22575 
   22576  -- Built-in Function: long double __builtin_nansl (const char *str)
   22577      Similar to `__builtin_nans', except the return type is `long
   22578      double'.
   22579 
   22580  -- Built-in Function: int __builtin_ffs (unsigned int x)
   22581      Returns one plus the index of the least significant 1-bit of X, or
   22582      if X is zero, returns zero.
   22583 
   22584  -- Built-in Function: int __builtin_clz (unsigned int x)
   22585      Returns the number of leading 0-bits in X, starting at the most
   22586      significant bit position.  If X is 0, the result is undefined.
   22587 
   22588  -- Built-in Function: int __builtin_ctz (unsigned int x)
   22589      Returns the number of trailing 0-bits in X, starting at the least
   22590      significant bit position.  If X is 0, the result is undefined.
   22591 
   22592  -- Built-in Function: int __builtin_popcount (unsigned int x)
   22593      Returns the number of 1-bits in X.
   22594 
   22595  -- Built-in Function: int __builtin_parity (unsigned int x)
   22596      Returns the parity of X, i.e. the number of 1-bits in X modulo 2.
   22597 
   22598  -- Built-in Function: int __builtin_ffsl (unsigned long)
   22599      Similar to `__builtin_ffs', except the argument type is `unsigned
   22600      long'.
   22601 
   22602  -- Built-in Function: int __builtin_clzl (unsigned long)
   22603      Similar to `__builtin_clz', except the argument type is `unsigned
   22604      long'.
   22605 
   22606  -- Built-in Function: int __builtin_ctzl (unsigned long)
   22607      Similar to `__builtin_ctz', except the argument type is `unsigned
   22608      long'.
   22609 
   22610  -- Built-in Function: int __builtin_popcountl (unsigned long)
   22611      Similar to `__builtin_popcount', except the argument type is
   22612      `unsigned long'.
   22613 
   22614  -- Built-in Function: int __builtin_parityl (unsigned long)
   22615      Similar to `__builtin_parity', except the argument type is
   22616      `unsigned long'.
   22617 
   22618  -- Built-in Function: int __builtin_ffsll (unsigned long long)
   22619      Similar to `__builtin_ffs', except the argument type is `unsigned
   22620      long long'.
   22621 
   22622  -- Built-in Function: int __builtin_clzll (unsigned long long)
   22623      Similar to `__builtin_clz', except the argument type is `unsigned
   22624      long long'.
   22625 
   22626  -- Built-in Function: int __builtin_ctzll (unsigned long long)
   22627      Similar to `__builtin_ctz', except the argument type is `unsigned
   22628      long long'.
   22629 
   22630  -- Built-in Function: int __builtin_popcountll (unsigned long long)
   22631      Similar to `__builtin_popcount', except the argument type is
   22632      `unsigned long long'.
   22633 
   22634  -- Built-in Function: int __builtin_parityll (unsigned long long)
   22635      Similar to `__builtin_parity', except the argument type is
   22636      `unsigned long long'.
   22637 
   22638  -- Built-in Function: double __builtin_powi (double, int)
   22639      Returns the first argument raised to the power of the second.
   22640      Unlike the `pow' function no guarantees about precision and
   22641      rounding are made.
   22642 
   22643  -- Built-in Function: float __builtin_powif (float, int)
   22644      Similar to `__builtin_powi', except the argument and return types
   22645      are `float'.
   22646 
   22647  -- Built-in Function: long double __builtin_powil (long double, int)
   22648      Similar to `__builtin_powi', except the argument and return types
   22649      are `long double'.
   22650 
   22651  -- Built-in Function: int32_t __builtin_bswap32 (int32_t x)
   22652      Returns X with the order of the bytes reversed; for example,
   22653      `0xaabbccdd' becomes `0xddccbbaa'.  Byte here always means exactly
   22654      8 bits.
   22655 
   22656  -- Built-in Function: int64_t __builtin_bswap64 (int64_t x)
   22657      Similar to `__builtin_bswap32', except the argument and return
   22658      types are 64-bit.
   22659 
   22660 
   22661 File: gcc.info,  Node: Target Builtins,  Next: Target Format Checks,  Prev: Other Builtins,  Up: C Extensions
   22662 
   22663 5.50 Built-in Functions Specific to Particular Target Machines
   22664 ==============================================================
   22665 
   22666 On some target machines, GCC supports many built-in functions specific
   22667 to those machines.  Generally these generate calls to specific machine
   22668 instructions, but allow the compiler to schedule those calls.
   22669 
   22670 * Menu:
   22671 
   22672 * Alpha Built-in Functions::
   22673 * ARM iWMMXt Built-in Functions::
   22674 * ARM NEON Intrinsics::
   22675 * Blackfin Built-in Functions::
   22676 * FR-V Built-in Functions::
   22677 * X86 Built-in Functions::
   22678 * MIPS DSP Built-in Functions::
   22679 * MIPS Paired-Single Support::
   22680 * PowerPC AltiVec Built-in Functions::
   22681 * SPARC VIS Built-in Functions::
   22682 * SPU Built-in Functions::
   22683 
   22684 
   22685 File: gcc.info,  Node: Alpha Built-in Functions,  Next: ARM iWMMXt Built-in Functions,  Up: Target Builtins
   22686 
   22687 5.50.1 Alpha Built-in Functions
   22688 -------------------------------
   22689 
   22690 These built-in functions are available for the Alpha family of
   22691 processors, depending on the command-line switches used.
   22692 
   22693  The following built-in functions are always available.  They all
   22694 generate the machine instruction that is part of the name.
   22695 
   22696      long __builtin_alpha_implver (void)
   22697      long __builtin_alpha_rpcc (void)
   22698      long __builtin_alpha_amask (long)
   22699      long __builtin_alpha_cmpbge (long, long)
   22700      long __builtin_alpha_extbl (long, long)
   22701      long __builtin_alpha_extwl (long, long)
   22702      long __builtin_alpha_extll (long, long)
   22703      long __builtin_alpha_extql (long, long)
   22704      long __builtin_alpha_extwh (long, long)
   22705      long __builtin_alpha_extlh (long, long)
   22706      long __builtin_alpha_extqh (long, long)
   22707      long __builtin_alpha_insbl (long, long)
   22708      long __builtin_alpha_inswl (long, long)
   22709      long __builtin_alpha_insll (long, long)
   22710      long __builtin_alpha_insql (long, long)
   22711      long __builtin_alpha_inswh (long, long)
   22712      long __builtin_alpha_inslh (long, long)
   22713      long __builtin_alpha_insqh (long, long)
   22714      long __builtin_alpha_mskbl (long, long)
   22715      long __builtin_alpha_mskwl (long, long)
   22716      long __builtin_alpha_mskll (long, long)
   22717      long __builtin_alpha_mskql (long, long)
   22718      long __builtin_alpha_mskwh (long, long)
   22719      long __builtin_alpha_msklh (long, long)
   22720      long __builtin_alpha_mskqh (long, long)
   22721      long __builtin_alpha_umulh (long, long)
   22722      long __builtin_alpha_zap (long, long)
   22723      long __builtin_alpha_zapnot (long, long)
   22724 
   22725  The following built-in functions are always with `-mmax' or
   22726 `-mcpu=CPU' where CPU is `pca56' or later.  They all generate the
   22727 machine instruction that is part of the name.
   22728 
   22729      long __builtin_alpha_pklb (long)
   22730      long __builtin_alpha_pkwb (long)
   22731      long __builtin_alpha_unpkbl (long)
   22732      long __builtin_alpha_unpkbw (long)
   22733      long __builtin_alpha_minub8 (long, long)
   22734      long __builtin_alpha_minsb8 (long, long)
   22735      long __builtin_alpha_minuw4 (long, long)
   22736      long __builtin_alpha_minsw4 (long, long)
   22737      long __builtin_alpha_maxub8 (long, long)
   22738      long __builtin_alpha_maxsb8 (long, long)
   22739      long __builtin_alpha_maxuw4 (long, long)
   22740      long __builtin_alpha_maxsw4 (long, long)
   22741      long __builtin_alpha_perr (long, long)
   22742 
   22743  The following built-in functions are always with `-mcix' or
   22744 `-mcpu=CPU' where CPU is `ev67' or later.  They all generate the
   22745 machine instruction that is part of the name.
   22746 
   22747      long __builtin_alpha_cttz (long)
   22748      long __builtin_alpha_ctlz (long)
   22749      long __builtin_alpha_ctpop (long)
   22750 
   22751  The following builtins are available on systems that use the OSF/1
   22752 PALcode.  Normally they invoke the `rduniq' and `wruniq' PAL calls, but
   22753 when invoked with `-mtls-kernel', they invoke `rdval' and `wrval'.
   22754 
   22755      void *__builtin_thread_pointer (void)
   22756      void __builtin_set_thread_pointer (void *)
   22757 
   22758 
   22759 File: gcc.info,  Node: ARM iWMMXt Built-in Functions,  Next: ARM NEON Intrinsics,  Prev: Alpha Built-in Functions,  Up: Target Builtins
   22760 
   22761 5.50.2 ARM iWMMXt Built-in Functions
   22762 ------------------------------------
   22763 
   22764 These built-in functions are available for the ARM family of processors
   22765 when the `-mcpu=iwmmxt' switch is used:
   22766 
   22767      typedef int v2si __attribute__ ((vector_size (8)));
   22768      typedef short v4hi __attribute__ ((vector_size (8)));
   22769      typedef char v8qi __attribute__ ((vector_size (8)));
   22770 
   22771      int __builtin_arm_getwcx (int)
   22772      void __builtin_arm_setwcx (int, int)
   22773      int __builtin_arm_textrmsb (v8qi, int)
   22774      int __builtin_arm_textrmsh (v4hi, int)
   22775      int __builtin_arm_textrmsw (v2si, int)
   22776      int __builtin_arm_textrmub (v8qi, int)
   22777      int __builtin_arm_textrmuh (v4hi, int)
   22778      int __builtin_arm_textrmuw (v2si, int)
   22779      v8qi __builtin_arm_tinsrb (v8qi, int)
   22780      v4hi __builtin_arm_tinsrh (v4hi, int)
   22781      v2si __builtin_arm_tinsrw (v2si, int)
   22782      long long __builtin_arm_tmia (long long, int, int)
   22783      long long __builtin_arm_tmiabb (long long, int, int)
   22784      long long __builtin_arm_tmiabt (long long, int, int)
   22785      long long __builtin_arm_tmiaph (long long, int, int)
   22786      long long __builtin_arm_tmiatb (long long, int, int)
   22787      long long __builtin_arm_tmiatt (long long, int, int)
   22788      int __builtin_arm_tmovmskb (v8qi)
   22789      int __builtin_arm_tmovmskh (v4hi)
   22790      int __builtin_arm_tmovmskw (v2si)
   22791      long long __builtin_arm_waccb (v8qi)
   22792      long long __builtin_arm_wacch (v4hi)
   22793      long long __builtin_arm_waccw (v2si)
   22794      v8qi __builtin_arm_waddb (v8qi, v8qi)
   22795      v8qi __builtin_arm_waddbss (v8qi, v8qi)
   22796      v8qi __builtin_arm_waddbus (v8qi, v8qi)
   22797      v4hi __builtin_arm_waddh (v4hi, v4hi)
   22798      v4hi __builtin_arm_waddhss (v4hi, v4hi)
   22799      v4hi __builtin_arm_waddhus (v4hi, v4hi)
   22800      v2si __builtin_arm_waddw (v2si, v2si)
   22801      v2si __builtin_arm_waddwss (v2si, v2si)
   22802      v2si __builtin_arm_waddwus (v2si, v2si)
   22803      v8qi __builtin_arm_walign (v8qi, v8qi, int)
   22804      long long __builtin_arm_wand(long long, long long)
   22805      long long __builtin_arm_wandn (long long, long long)
   22806      v8qi __builtin_arm_wavg2b (v8qi, v8qi)
   22807      v8qi __builtin_arm_wavg2br (v8qi, v8qi)
   22808      v4hi __builtin_arm_wavg2h (v4hi, v4hi)
   22809      v4hi __builtin_arm_wavg2hr (v4hi, v4hi)
   22810      v8qi __builtin_arm_wcmpeqb (v8qi, v8qi)
   22811      v4hi __builtin_arm_wcmpeqh (v4hi, v4hi)
   22812      v2si __builtin_arm_wcmpeqw (v2si, v2si)
   22813      v8qi __builtin_arm_wcmpgtsb (v8qi, v8qi)
   22814      v4hi __builtin_arm_wcmpgtsh (v4hi, v4hi)
   22815      v2si __builtin_arm_wcmpgtsw (v2si, v2si)
   22816      v8qi __builtin_arm_wcmpgtub (v8qi, v8qi)
   22817      v4hi __builtin_arm_wcmpgtuh (v4hi, v4hi)
   22818      v2si __builtin_arm_wcmpgtuw (v2si, v2si)
   22819      long long __builtin_arm_wmacs (long long, v4hi, v4hi)
   22820      long long __builtin_arm_wmacsz (v4hi, v4hi)
   22821      long long __builtin_arm_wmacu (long long, v4hi, v4hi)
   22822      long long __builtin_arm_wmacuz (v4hi, v4hi)
   22823      v4hi __builtin_arm_wmadds (v4hi, v4hi)
   22824      v4hi __builtin_arm_wmaddu (v4hi, v4hi)
   22825      v8qi __builtin_arm_wmaxsb (v8qi, v8qi)
   22826      v4hi __builtin_arm_wmaxsh (v4hi, v4hi)
   22827      v2si __builtin_arm_wmaxsw (v2si, v2si)
   22828      v8qi __builtin_arm_wmaxub (v8qi, v8qi)
   22829      v4hi __builtin_arm_wmaxuh (v4hi, v4hi)
   22830      v2si __builtin_arm_wmaxuw (v2si, v2si)
   22831      v8qi __builtin_arm_wminsb (v8qi, v8qi)
   22832      v4hi __builtin_arm_wminsh (v4hi, v4hi)
   22833      v2si __builtin_arm_wminsw (v2si, v2si)
   22834      v8qi __builtin_arm_wminub (v8qi, v8qi)
   22835      v4hi __builtin_arm_wminuh (v4hi, v4hi)
   22836      v2si __builtin_arm_wminuw (v2si, v2si)
   22837      v4hi __builtin_arm_wmulsm (v4hi, v4hi)
   22838      v4hi __builtin_arm_wmulul (v4hi, v4hi)
   22839      v4hi __builtin_arm_wmulum (v4hi, v4hi)
   22840      long long __builtin_arm_wor (long long, long long)
   22841      v2si __builtin_arm_wpackdss (long long, long long)
   22842      v2si __builtin_arm_wpackdus (long long, long long)
   22843      v8qi __builtin_arm_wpackhss (v4hi, v4hi)
   22844      v8qi __builtin_arm_wpackhus (v4hi, v4hi)
   22845      v4hi __builtin_arm_wpackwss (v2si, v2si)
   22846      v4hi __builtin_arm_wpackwus (v2si, v2si)
   22847      long long __builtin_arm_wrord (long long, long long)
   22848      long long __builtin_arm_wrordi (long long, int)
   22849      v4hi __builtin_arm_wrorh (v4hi, long long)
   22850      v4hi __builtin_arm_wrorhi (v4hi, int)
   22851      v2si __builtin_arm_wrorw (v2si, long long)
   22852      v2si __builtin_arm_wrorwi (v2si, int)
   22853      v2si __builtin_arm_wsadb (v8qi, v8qi)
   22854      v2si __builtin_arm_wsadbz (v8qi, v8qi)
   22855      v2si __builtin_arm_wsadh (v4hi, v4hi)
   22856      v2si __builtin_arm_wsadhz (v4hi, v4hi)
   22857      v4hi __builtin_arm_wshufh (v4hi, int)
   22858      long long __builtin_arm_wslld (long long, long long)
   22859      long long __builtin_arm_wslldi (long long, int)
   22860      v4hi __builtin_arm_wsllh (v4hi, long long)
   22861      v4hi __builtin_arm_wsllhi (v4hi, int)
   22862      v2si __builtin_arm_wsllw (v2si, long long)
   22863      v2si __builtin_arm_wsllwi (v2si, int)
   22864      long long __builtin_arm_wsrad (long long, long long)
   22865      long long __builtin_arm_wsradi (long long, int)
   22866      v4hi __builtin_arm_wsrah (v4hi, long long)
   22867      v4hi __builtin_arm_wsrahi (v4hi, int)
   22868      v2si __builtin_arm_wsraw (v2si, long long)
   22869      v2si __builtin_arm_wsrawi (v2si, int)
   22870      long long __builtin_arm_wsrld (long long, long long)
   22871      long long __builtin_arm_wsrldi (long long, int)
   22872      v4hi __builtin_arm_wsrlh (v4hi, long long)
   22873      v4hi __builtin_arm_wsrlhi (v4hi, int)
   22874      v2si __builtin_arm_wsrlw (v2si, long long)
   22875      v2si __builtin_arm_wsrlwi (v2si, int)
   22876      v8qi __builtin_arm_wsubb (v8qi, v8qi)
   22877      v8qi __builtin_arm_wsubbss (v8qi, v8qi)
   22878      v8qi __builtin_arm_wsubbus (v8qi, v8qi)
   22879      v4hi __builtin_arm_wsubh (v4hi, v4hi)
   22880      v4hi __builtin_arm_wsubhss (v4hi, v4hi)
   22881      v4hi __builtin_arm_wsubhus (v4hi, v4hi)
   22882      v2si __builtin_arm_wsubw (v2si, v2si)
   22883      v2si __builtin_arm_wsubwss (v2si, v2si)
   22884      v2si __builtin_arm_wsubwus (v2si, v2si)
   22885      v4hi __builtin_arm_wunpckehsb (v8qi)
   22886      v2si __builtin_arm_wunpckehsh (v4hi)
   22887      long long __builtin_arm_wunpckehsw (v2si)
   22888      v4hi __builtin_arm_wunpckehub (v8qi)
   22889      v2si __builtin_arm_wunpckehuh (v4hi)
   22890      long long __builtin_arm_wunpckehuw (v2si)
   22891      v4hi __builtin_arm_wunpckelsb (v8qi)
   22892      v2si __builtin_arm_wunpckelsh (v4hi)
   22893      long long __builtin_arm_wunpckelsw (v2si)
   22894      v4hi __builtin_arm_wunpckelub (v8qi)
   22895      v2si __builtin_arm_wunpckeluh (v4hi)
   22896      long long __builtin_arm_wunpckeluw (v2si)
   22897      v8qi __builtin_arm_wunpckihb (v8qi, v8qi)
   22898      v4hi __builtin_arm_wunpckihh (v4hi, v4hi)
   22899      v2si __builtin_arm_wunpckihw (v2si, v2si)
   22900      v8qi __builtin_arm_wunpckilb (v8qi, v8qi)
   22901      v4hi __builtin_arm_wunpckilh (v4hi, v4hi)
   22902      v2si __builtin_arm_wunpckilw (v2si, v2si)
   22903      long long __builtin_arm_wxor (long long, long long)
   22904      long long __builtin_arm_wzero ()
   22905 
   22906 
   22907 File: gcc.info,  Node: ARM NEON Intrinsics,  Next: Blackfin Built-in Functions,  Prev: ARM iWMMXt Built-in Functions,  Up: Target Builtins
   22908 
   22909 5.50.3 ARM NEON Intrinsics
   22910 --------------------------
   22911 
   22912 These built-in intrinsics for the ARM Advanced SIMD extension are
   22913 available when the `-mfpu=neon' switch is used:
   22914 
   22915 5.50.3.1 Addition
   22916 .................
   22917 
   22918    * uint32x2_t vadd_u32 (uint32x2_t, uint32x2_t)
   22919      _Form of expected instruction(s):_ `vadd.i32 D0, D0, D0'
   22920 
   22921    * uint16x4_t vadd_u16 (uint16x4_t, uint16x4_t)
   22922      _Form of expected instruction(s):_ `vadd.i16 D0, D0, D0'
   22923 
   22924    * uint8x8_t vadd_u8 (uint8x8_t, uint8x8_t)
   22925      _Form of expected instruction(s):_ `vadd.i8 D0, D0, D0'
   22926 
   22927    * int32x2_t vadd_s32 (int32x2_t, int32x2_t)
   22928      _Form of expected instruction(s):_ `vadd.i32 D0, D0, D0'
   22929 
   22930    * int16x4_t vadd_s16 (int16x4_t, int16x4_t)
   22931      _Form of expected instruction(s):_ `vadd.i16 D0, D0, D0'
   22932 
   22933    * int8x8_t vadd_s8 (int8x8_t, int8x8_t)
   22934      _Form of expected instruction(s):_ `vadd.i8 D0, D0, D0'
   22935 
   22936    * uint64x1_t vadd_u64 (uint64x1_t, uint64x1_t)
   22937      _Form of expected instruction(s):_ `vadd.i64 D0, D0, D0'
   22938 
   22939    * int64x1_t vadd_s64 (int64x1_t, int64x1_t)
   22940      _Form of expected instruction(s):_ `vadd.i64 D0, D0, D0'
   22941 
   22942    * float32x2_t vadd_f32 (float32x2_t, float32x2_t)
   22943      _Form of expected instruction(s):_ `vadd.f32 D0, D0, D0'
   22944 
   22945    * uint32x4_t vaddq_u32 (uint32x4_t, uint32x4_t)
   22946      _Form of expected instruction(s):_ `vadd.i32 Q0, Q0, Q0'
   22947 
   22948    * uint16x8_t vaddq_u16 (uint16x8_t, uint16x8_t)
   22949      _Form of expected instruction(s):_ `vadd.i16 Q0, Q0, Q0'
   22950 
   22951    * uint8x16_t vaddq_u8 (uint8x16_t, uint8x16_t)
   22952      _Form of expected instruction(s):_ `vadd.i8 Q0, Q0, Q0'
   22953 
   22954    * int32x4_t vaddq_s32 (int32x4_t, int32x4_t)
   22955      _Form of expected instruction(s):_ `vadd.i32 Q0, Q0, Q0'
   22956 
   22957    * int16x8_t vaddq_s16 (int16x8_t, int16x8_t)
   22958      _Form of expected instruction(s):_ `vadd.i16 Q0, Q0, Q0'
   22959 
   22960    * int8x16_t vaddq_s8 (int8x16_t, int8x16_t)
   22961      _Form of expected instruction(s):_ `vadd.i8 Q0, Q0, Q0'
   22962 
   22963    * uint64x2_t vaddq_u64 (uint64x2_t, uint64x2_t)
   22964      _Form of expected instruction(s):_ `vadd.i64 Q0, Q0, Q0'
   22965 
   22966    * int64x2_t vaddq_s64 (int64x2_t, int64x2_t)
   22967      _Form of expected instruction(s):_ `vadd.i64 Q0, Q0, Q0'
   22968 
   22969    * float32x4_t vaddq_f32 (float32x4_t, float32x4_t)
   22970      _Form of expected instruction(s):_ `vadd.f32 Q0, Q0, Q0'
   22971 
   22972    * uint64x2_t vaddl_u32 (uint32x2_t, uint32x2_t)
   22973      _Form of expected instruction(s):_ `vaddl.u32 Q0, D0, D0'
   22974 
   22975    * uint32x4_t vaddl_u16 (uint16x4_t, uint16x4_t)
   22976      _Form of expected instruction(s):_ `vaddl.u16 Q0, D0, D0'
   22977 
   22978    * uint16x8_t vaddl_u8 (uint8x8_t, uint8x8_t)
   22979      _Form of expected instruction(s):_ `vaddl.u8 Q0, D0, D0'
   22980 
   22981    * int64x2_t vaddl_s32 (int32x2_t, int32x2_t)
   22982      _Form of expected instruction(s):_ `vaddl.s32 Q0, D0, D0'
   22983 
   22984    * int32x4_t vaddl_s16 (int16x4_t, int16x4_t)
   22985      _Form of expected instruction(s):_ `vaddl.s16 Q0, D0, D0'
   22986 
   22987    * int16x8_t vaddl_s8 (int8x8_t, int8x8_t)
   22988      _Form of expected instruction(s):_ `vaddl.s8 Q0, D0, D0'
   22989 
   22990    * uint64x2_t vaddw_u32 (uint64x2_t, uint32x2_t)
   22991      _Form of expected instruction(s):_ `vaddw.u32 Q0, Q0, D0'
   22992 
   22993    * uint32x4_t vaddw_u16 (uint32x4_t, uint16x4_t)
   22994      _Form of expected instruction(s):_ `vaddw.u16 Q0, Q0, D0'
   22995 
   22996    * uint16x8_t vaddw_u8 (uint16x8_t, uint8x8_t)
   22997      _Form of expected instruction(s):_ `vaddw.u8 Q0, Q0, D0'
   22998 
   22999    * int64x2_t vaddw_s32 (int64x2_t, int32x2_t)
   23000      _Form of expected instruction(s):_ `vaddw.s32 Q0, Q0, D0'
   23001 
   23002    * int32x4_t vaddw_s16 (int32x4_t, int16x4_t)
   23003      _Form of expected instruction(s):_ `vaddw.s16 Q0, Q0, D0'
   23004 
   23005    * int16x8_t vaddw_s8 (int16x8_t, int8x8_t)
   23006      _Form of expected instruction(s):_ `vaddw.s8 Q0, Q0, D0'
   23007 
   23008    * uint32x2_t vhadd_u32 (uint32x2_t, uint32x2_t)
   23009      _Form of expected instruction(s):_ `vhadd.u32 D0, D0, D0'
   23010 
   23011    * uint16x4_t vhadd_u16 (uint16x4_t, uint16x4_t)
   23012      _Form of expected instruction(s):_ `vhadd.u16 D0, D0, D0'
   23013 
   23014    * uint8x8_t vhadd_u8 (uint8x8_t, uint8x8_t)
   23015      _Form of expected instruction(s):_ `vhadd.u8 D0, D0, D0'
   23016 
   23017    * int32x2_t vhadd_s32 (int32x2_t, int32x2_t)
   23018      _Form of expected instruction(s):_ `vhadd.s32 D0, D0, D0'
   23019 
   23020    * int16x4_t vhadd_s16 (int16x4_t, int16x4_t)
   23021      _Form of expected instruction(s):_ `vhadd.s16 D0, D0, D0'
   23022 
   23023    * int8x8_t vhadd_s8 (int8x8_t, int8x8_t)
   23024      _Form of expected instruction(s):_ `vhadd.s8 D0, D0, D0'
   23025 
   23026    * uint32x4_t vhaddq_u32 (uint32x4_t, uint32x4_t)
   23027      _Form of expected instruction(s):_ `vhadd.u32 Q0, Q0, Q0'
   23028 
   23029    * uint16x8_t vhaddq_u16 (uint16x8_t, uint16x8_t)
   23030      _Form of expected instruction(s):_ `vhadd.u16 Q0, Q0, Q0'
   23031 
   23032    * uint8x16_t vhaddq_u8 (uint8x16_t, uint8x16_t)
   23033      _Form of expected instruction(s):_ `vhadd.u8 Q0, Q0, Q0'
   23034 
   23035    * int32x4_t vhaddq_s32 (int32x4_t, int32x4_t)
   23036      _Form of expected instruction(s):_ `vhadd.s32 Q0, Q0, Q0'
   23037 
   23038    * int16x8_t vhaddq_s16 (int16x8_t, int16x8_t)
   23039      _Form of expected instruction(s):_ `vhadd.s16 Q0, Q0, Q0'
   23040 
   23041    * int8x16_t vhaddq_s8 (int8x16_t, int8x16_t)
   23042      _Form of expected instruction(s):_ `vhadd.s8 Q0, Q0, Q0'
   23043 
   23044    * uint32x2_t vrhadd_u32 (uint32x2_t, uint32x2_t)
   23045      _Form of expected instruction(s):_ `vrhadd.u32 D0, D0, D0'
   23046 
   23047    * uint16x4_t vrhadd_u16 (uint16x4_t, uint16x4_t)
   23048      _Form of expected instruction(s):_ `vrhadd.u16 D0, D0, D0'
   23049 
   23050    * uint8x8_t vrhadd_u8 (uint8x8_t, uint8x8_t)
   23051      _Form of expected instruction(s):_ `vrhadd.u8 D0, D0, D0'
   23052 
   23053    * int32x2_t vrhadd_s32 (int32x2_t, int32x2_t)
   23054      _Form of expected instruction(s):_ `vrhadd.s32 D0, D0, D0'
   23055 
   23056    * int16x4_t vrhadd_s16 (int16x4_t, int16x4_t)
   23057      _Form of expected instruction(s):_ `vrhadd.s16 D0, D0, D0'
   23058 
   23059    * int8x8_t vrhadd_s8 (int8x8_t, int8x8_t)
   23060      _Form of expected instruction(s):_ `vrhadd.s8 D0, D0, D0'
   23061 
   23062    * uint32x4_t vrhaddq_u32 (uint32x4_t, uint32x4_t)
   23063      _Form of expected instruction(s):_ `vrhadd.u32 Q0, Q0, Q0'
   23064 
   23065    * uint16x8_t vrhaddq_u16 (uint16x8_t, uint16x8_t)
   23066      _Form of expected instruction(s):_ `vrhadd.u16 Q0, Q0, Q0'
   23067 
   23068    * uint8x16_t vrhaddq_u8 (uint8x16_t, uint8x16_t)
   23069      _Form of expected instruction(s):_ `vrhadd.u8 Q0, Q0, Q0'
   23070 
   23071    * int32x4_t vrhaddq_s32 (int32x4_t, int32x4_t)
   23072      _Form of expected instruction(s):_ `vrhadd.s32 Q0, Q0, Q0'
   23073 
   23074    * int16x8_t vrhaddq_s16 (int16x8_t, int16x8_t)
   23075      _Form of expected instruction(s):_ `vrhadd.s16 Q0, Q0, Q0'
   23076 
   23077    * int8x16_t vrhaddq_s8 (int8x16_t, int8x16_t)
   23078      _Form of expected instruction(s):_ `vrhadd.s8 Q0, Q0, Q0'
   23079 
   23080    * uint32x2_t vqadd_u32 (uint32x2_t, uint32x2_t)
   23081      _Form of expected instruction(s):_ `vqadd.u32 D0, D0, D0'
   23082 
   23083    * uint16x4_t vqadd_u16 (uint16x4_t, uint16x4_t)
   23084      _Form of expected instruction(s):_ `vqadd.u16 D0, D0, D0'
   23085 
   23086    * uint8x8_t vqadd_u8 (uint8x8_t, uint8x8_t)
   23087      _Form of expected instruction(s):_ `vqadd.u8 D0, D0, D0'
   23088 
   23089    * int32x2_t vqadd_s32 (int32x2_t, int32x2_t)
   23090      _Form of expected instruction(s):_ `vqadd.s32 D0, D0, D0'
   23091 
   23092    * int16x4_t vqadd_s16 (int16x4_t, int16x4_t)
   23093      _Form of expected instruction(s):_ `vqadd.s16 D0, D0, D0'
   23094 
   23095    * int8x8_t vqadd_s8 (int8x8_t, int8x8_t)
   23096      _Form of expected instruction(s):_ `vqadd.s8 D0, D0, D0'
   23097 
   23098    * uint64x1_t vqadd_u64 (uint64x1_t, uint64x1_t)
   23099      _Form of expected instruction(s):_ `vqadd.u64 D0, D0, D0'
   23100 
   23101    * int64x1_t vqadd_s64 (int64x1_t, int64x1_t)
   23102      _Form of expected instruction(s):_ `vqadd.s64 D0, D0, D0'
   23103 
   23104    * uint32x4_t vqaddq_u32 (uint32x4_t, uint32x4_t)
   23105      _Form of expected instruction(s):_ `vqadd.u32 Q0, Q0, Q0'
   23106 
   23107    * uint16x8_t vqaddq_u16 (uint16x8_t, uint16x8_t)
   23108      _Form of expected instruction(s):_ `vqadd.u16 Q0, Q0, Q0'
   23109 
   23110    * uint8x16_t vqaddq_u8 (uint8x16_t, uint8x16_t)
   23111      _Form of expected instruction(s):_ `vqadd.u8 Q0, Q0, Q0'
   23112 
   23113    * int32x4_t vqaddq_s32 (int32x4_t, int32x4_t)
   23114      _Form of expected instruction(s):_ `vqadd.s32 Q0, Q0, Q0'
   23115 
   23116    * int16x8_t vqaddq_s16 (int16x8_t, int16x8_t)
   23117      _Form of expected instruction(s):_ `vqadd.s16 Q0, Q0, Q0'
   23118 
   23119    * int8x16_t vqaddq_s8 (int8x16_t, int8x16_t)
   23120      _Form of expected instruction(s):_ `vqadd.s8 Q0, Q0, Q0'
   23121 
   23122    * uint64x2_t vqaddq_u64 (uint64x2_t, uint64x2_t)
   23123      _Form of expected instruction(s):_ `vqadd.u64 Q0, Q0, Q0'
   23124 
   23125    * int64x2_t vqaddq_s64 (int64x2_t, int64x2_t)
   23126      _Form of expected instruction(s):_ `vqadd.s64 Q0, Q0, Q0'
   23127 
   23128    * uint32x2_t vaddhn_u64 (uint64x2_t, uint64x2_t)
   23129      _Form of expected instruction(s):_ `vaddhn.i64 D0, Q0, Q0'
   23130 
   23131    * uint16x4_t vaddhn_u32 (uint32x4_t, uint32x4_t)
   23132      _Form of expected instruction(s):_ `vaddhn.i32 D0, Q0, Q0'
   23133 
   23134    * uint8x8_t vaddhn_u16 (uint16x8_t, uint16x8_t)
   23135      _Form of expected instruction(s):_ `vaddhn.i16 D0, Q0, Q0'
   23136 
   23137    * int32x2_t vaddhn_s64 (int64x2_t, int64x2_t)
   23138      _Form of expected instruction(s):_ `vaddhn.i64 D0, Q0, Q0'
   23139 
   23140    * int16x4_t vaddhn_s32 (int32x4_t, int32x4_t)
   23141      _Form of expected instruction(s):_ `vaddhn.i32 D0, Q0, Q0'
   23142 
   23143    * int8x8_t vaddhn_s16 (int16x8_t, int16x8_t)
   23144      _Form of expected instruction(s):_ `vaddhn.i16 D0, Q0, Q0'
   23145 
   23146    * uint32x2_t vraddhn_u64 (uint64x2_t, uint64x2_t)
   23147      _Form of expected instruction(s):_ `vraddhn.i64 D0, Q0, Q0'
   23148 
   23149    * uint16x4_t vraddhn_u32 (uint32x4_t, uint32x4_t)
   23150      _Form of expected instruction(s):_ `vraddhn.i32 D0, Q0, Q0'
   23151 
   23152    * uint8x8_t vraddhn_u16 (uint16x8_t, uint16x8_t)
   23153      _Form of expected instruction(s):_ `vraddhn.i16 D0, Q0, Q0'
   23154 
   23155    * int32x2_t vraddhn_s64 (int64x2_t, int64x2_t)
   23156      _Form of expected instruction(s):_ `vraddhn.i64 D0, Q0, Q0'
   23157 
   23158    * int16x4_t vraddhn_s32 (int32x4_t, int32x4_t)
   23159      _Form of expected instruction(s):_ `vraddhn.i32 D0, Q0, Q0'
   23160 
   23161    * int8x8_t vraddhn_s16 (int16x8_t, int16x8_t)
   23162      _Form of expected instruction(s):_ `vraddhn.i16 D0, Q0, Q0'
   23163 
   23164 5.50.3.2 Multiplication
   23165 .......................
   23166 
   23167    * uint32x2_t vmul_u32 (uint32x2_t, uint32x2_t)
   23168      _Form of expected instruction(s):_ `vmul.i32 D0, D0, D0'
   23169 
   23170    * uint16x4_t vmul_u16 (uint16x4_t, uint16x4_t)
   23171      _Form of expected instruction(s):_ `vmul.i16 D0, D0, D0'
   23172 
   23173    * uint8x8_t vmul_u8 (uint8x8_t, uint8x8_t)
   23174      _Form of expected instruction(s):_ `vmul.i8 D0, D0, D0'
   23175 
   23176    * int32x2_t vmul_s32 (int32x2_t, int32x2_t)
   23177      _Form of expected instruction(s):_ `vmul.i32 D0, D0, D0'
   23178 
   23179    * int16x4_t vmul_s16 (int16x4_t, int16x4_t)
   23180      _Form of expected instruction(s):_ `vmul.i16 D0, D0, D0'
   23181 
   23182    * int8x8_t vmul_s8 (int8x8_t, int8x8_t)
   23183      _Form of expected instruction(s):_ `vmul.i8 D0, D0, D0'
   23184 
   23185    * float32x2_t vmul_f32 (float32x2_t, float32x2_t)
   23186      _Form of expected instruction(s):_ `vmul.f32 D0, D0, D0'
   23187 
   23188    * poly8x8_t vmul_p8 (poly8x8_t, poly8x8_t)
   23189      _Form of expected instruction(s):_ `vmul.p8 D0, D0, D0'
   23190 
   23191    * uint32x4_t vmulq_u32 (uint32x4_t, uint32x4_t)
   23192      _Form of expected instruction(s):_ `vmul.i32 Q0, Q0, Q0'
   23193 
   23194    * uint16x8_t vmulq_u16 (uint16x8_t, uint16x8_t)
   23195      _Form of expected instruction(s):_ `vmul.i16 Q0, Q0, Q0'
   23196 
   23197    * uint8x16_t vmulq_u8 (uint8x16_t, uint8x16_t)
   23198      _Form of expected instruction(s):_ `vmul.i8 Q0, Q0, Q0'
   23199 
   23200    * int32x4_t vmulq_s32 (int32x4_t, int32x4_t)
   23201      _Form of expected instruction(s):_ `vmul.i32 Q0, Q0, Q0'
   23202 
   23203    * int16x8_t vmulq_s16 (int16x8_t, int16x8_t)
   23204      _Form of expected instruction(s):_ `vmul.i16 Q0, Q0, Q0'
   23205 
   23206    * int8x16_t vmulq_s8 (int8x16_t, int8x16_t)
   23207      _Form of expected instruction(s):_ `vmul.i8 Q0, Q0, Q0'
   23208 
   23209    * float32x4_t vmulq_f32 (float32x4_t, float32x4_t)
   23210      _Form of expected instruction(s):_ `vmul.f32 Q0, Q0, Q0'
   23211 
   23212    * poly8x16_t vmulq_p8 (poly8x16_t, poly8x16_t)
   23213      _Form of expected instruction(s):_ `vmul.p8 Q0, Q0, Q0'
   23214 
   23215    * int32x2_t vqdmulh_s32 (int32x2_t, int32x2_t)
   23216      _Form of expected instruction(s):_ `vqdmulh.s32 D0, D0, D0'
   23217 
   23218    * int16x4_t vqdmulh_s16 (int16x4_t, int16x4_t)
   23219      _Form of expected instruction(s):_ `vqdmulh.s16 D0, D0, D0'
   23220 
   23221    * int32x4_t vqdmulhq_s32 (int32x4_t, int32x4_t)
   23222      _Form of expected instruction(s):_ `vqdmulh.s32 Q0, Q0, Q0'
   23223 
   23224    * int16x8_t vqdmulhq_s16 (int16x8_t, int16x8_t)
   23225      _Form of expected instruction(s):_ `vqdmulh.s16 Q0, Q0, Q0'
   23226 
   23227    * int32x2_t vqrdmulh_s32 (int32x2_t, int32x2_t)
   23228      _Form of expected instruction(s):_ `vqrdmulh.s32 D0, D0, D0'
   23229 
   23230    * int16x4_t vqrdmulh_s16 (int16x4_t, int16x4_t)
   23231      _Form of expected instruction(s):_ `vqrdmulh.s16 D0, D0, D0'
   23232 
   23233    * int32x4_t vqrdmulhq_s32 (int32x4_t, int32x4_t)
   23234      _Form of expected instruction(s):_ `vqrdmulh.s32 Q0, Q0, Q0'
   23235 
   23236    * int16x8_t vqrdmulhq_s16 (int16x8_t, int16x8_t)
   23237      _Form of expected instruction(s):_ `vqrdmulh.s16 Q0, Q0, Q0'
   23238 
   23239    * uint64x2_t vmull_u32 (uint32x2_t, uint32x2_t)
   23240      _Form of expected instruction(s):_ `vmull.u32 Q0, D0, D0'
   23241 
   23242    * uint32x4_t vmull_u16 (uint16x4_t, uint16x4_t)
   23243      _Form of expected instruction(s):_ `vmull.u16 Q0, D0, D0'
   23244 
   23245    * uint16x8_t vmull_u8 (uint8x8_t, uint8x8_t)
   23246      _Form of expected instruction(s):_ `vmull.u8 Q0, D0, D0'
   23247 
   23248    * int64x2_t vmull_s32 (int32x2_t, int32x2_t)
   23249      _Form of expected instruction(s):_ `vmull.s32 Q0, D0, D0'
   23250 
   23251    * int32x4_t vmull_s16 (int16x4_t, int16x4_t)
   23252      _Form of expected instruction(s):_ `vmull.s16 Q0, D0, D0'
   23253 
   23254    * int16x8_t vmull_s8 (int8x8_t, int8x8_t)
   23255      _Form of expected instruction(s):_ `vmull.s8 Q0, D0, D0'
   23256 
   23257    * poly16x8_t vmull_p8 (poly8x8_t, poly8x8_t)
   23258      _Form of expected instruction(s):_ `vmull.p8 Q0, D0, D0'
   23259 
   23260    * int64x2_t vqdmull_s32 (int32x2_t, int32x2_t)
   23261      _Form of expected instruction(s):_ `vqdmull.s32 Q0, D0, D0'
   23262 
   23263    * int32x4_t vqdmull_s16 (int16x4_t, int16x4_t)
   23264      _Form of expected instruction(s):_ `vqdmull.s16 Q0, D0, D0'
   23265 
   23266 5.50.3.3 Multiply-accumulate
   23267 ............................
   23268 
   23269    * uint32x2_t vmla_u32 (uint32x2_t, uint32x2_t, uint32x2_t)
   23270      _Form of expected instruction(s):_ `vmla.i32 D0, D0, D0'
   23271 
   23272    * uint16x4_t vmla_u16 (uint16x4_t, uint16x4_t, uint16x4_t)
   23273      _Form of expected instruction(s):_ `vmla.i16 D0, D0, D0'
   23274 
   23275    * uint8x8_t vmla_u8 (uint8x8_t, uint8x8_t, uint8x8_t)
   23276      _Form of expected instruction(s):_ `vmla.i8 D0, D0, D0'
   23277 
   23278    * int32x2_t vmla_s32 (int32x2_t, int32x2_t, int32x2_t)
   23279      _Form of expected instruction(s):_ `vmla.i32 D0, D0, D0'
   23280 
   23281    * int16x4_t vmla_s16 (int16x4_t, int16x4_t, int16x4_t)
   23282      _Form of expected instruction(s):_ `vmla.i16 D0, D0, D0'
   23283 
   23284    * int8x8_t vmla_s8 (int8x8_t, int8x8_t, int8x8_t)
   23285      _Form of expected instruction(s):_ `vmla.i8 D0, D0, D0'
   23286 
   23287    * float32x2_t vmla_f32 (float32x2_t, float32x2_t, float32x2_t)
   23288      _Form of expected instruction(s):_ `vmla.f32 D0, D0, D0'
   23289 
   23290    * uint32x4_t vmlaq_u32 (uint32x4_t, uint32x4_t, uint32x4_t)
   23291      _Form of expected instruction(s):_ `vmla.i32 Q0, Q0, Q0'
   23292 
   23293    * uint16x8_t vmlaq_u16 (uint16x8_t, uint16x8_t, uint16x8_t)
   23294      _Form of expected instruction(s):_ `vmla.i16 Q0, Q0, Q0'
   23295 
   23296    * uint8x16_t vmlaq_u8 (uint8x16_t, uint8x16_t, uint8x16_t)
   23297      _Form of expected instruction(s):_ `vmla.i8 Q0, Q0, Q0'
   23298 
   23299    * int32x4_t vmlaq_s32 (int32x4_t, int32x4_t, int32x4_t)
   23300      _Form of expected instruction(s):_ `vmla.i32 Q0, Q0, Q0'
   23301 
   23302    * int16x8_t vmlaq_s16 (int16x8_t, int16x8_t, int16x8_t)
   23303      _Form of expected instruction(s):_ `vmla.i16 Q0, Q0, Q0'
   23304 
   23305    * int8x16_t vmlaq_s8 (int8x16_t, int8x16_t, int8x16_t)
   23306      _Form of expected instruction(s):_ `vmla.i8 Q0, Q0, Q0'
   23307 
   23308    * float32x4_t vmlaq_f32 (float32x4_t, float32x4_t, float32x4_t)
   23309      _Form of expected instruction(s):_ `vmla.f32 Q0, Q0, Q0'
   23310 
   23311    * uint64x2_t vmlal_u32 (uint64x2_t, uint32x2_t, uint32x2_t)
   23312      _Form of expected instruction(s):_ `vmlal.u32 Q0, D0, D0'
   23313 
   23314    * uint32x4_t vmlal_u16 (uint32x4_t, uint16x4_t, uint16x4_t)
   23315      _Form of expected instruction(s):_ `vmlal.u16 Q0, D0, D0'
   23316 
   23317    * uint16x8_t vmlal_u8 (uint16x8_t, uint8x8_t, uint8x8_t)
   23318      _Form of expected instruction(s):_ `vmlal.u8 Q0, D0, D0'
   23319 
   23320    * int64x2_t vmlal_s32 (int64x2_t, int32x2_t, int32x2_t)
   23321      _Form of expected instruction(s):_ `vmlal.s32 Q0, D0, D0'
   23322 
   23323    * int32x4_t vmlal_s16 (int32x4_t, int16x4_t, int16x4_t)
   23324      _Form of expected instruction(s):_ `vmlal.s16 Q0, D0, D0'
   23325 
   23326    * int16x8_t vmlal_s8 (int16x8_t, int8x8_t, int8x8_t)
   23327      _Form of expected instruction(s):_ `vmlal.s8 Q0, D0, D0'
   23328 
   23329    * int64x2_t vqdmlal_s32 (int64x2_t, int32x2_t, int32x2_t)
   23330      _Form of expected instruction(s):_ `vqdmlal.s32 Q0, D0, D0'
   23331 
   23332    * int32x4_t vqdmlal_s16 (int32x4_t, int16x4_t, int16x4_t)
   23333      _Form of expected instruction(s):_ `vqdmlal.s16 Q0, D0, D0'
   23334 
   23335 5.50.3.4 Multiply-subtract
   23336 ..........................
   23337 
   23338    * uint32x2_t vmls_u32 (uint32x2_t, uint32x2_t, uint32x2_t)
   23339      _Form of expected instruction(s):_ `vmls.i32 D0, D0, D0'
   23340 
   23341    * uint16x4_t vmls_u16 (uint16x4_t, uint16x4_t, uint16x4_t)
   23342      _Form of expected instruction(s):_ `vmls.i16 D0, D0, D0'
   23343 
   23344    * uint8x8_t vmls_u8 (uint8x8_t, uint8x8_t, uint8x8_t)
   23345      _Form of expected instruction(s):_ `vmls.i8 D0, D0, D0'
   23346 
   23347    * int32x2_t vmls_s32 (int32x2_t, int32x2_t, int32x2_t)
   23348      _Form of expected instruction(s):_ `vmls.i32 D0, D0, D0'
   23349 
   23350    * int16x4_t vmls_s16 (int16x4_t, int16x4_t, int16x4_t)
   23351      _Form of expected instruction(s):_ `vmls.i16 D0, D0, D0'
   23352 
   23353    * int8x8_t vmls_s8 (int8x8_t, int8x8_t, int8x8_t)
   23354      _Form of expected instruction(s):_ `vmls.i8 D0, D0, D0'
   23355 
   23356    * float32x2_t vmls_f32 (float32x2_t, float32x2_t, float32x2_t)
   23357      _Form of expected instruction(s):_ `vmls.f32 D0, D0, D0'
   23358 
   23359    * uint32x4_t vmlsq_u32 (uint32x4_t, uint32x4_t, uint32x4_t)
   23360      _Form of expected instruction(s):_ `vmls.i32 Q0, Q0, Q0'
   23361 
   23362    * uint16x8_t vmlsq_u16 (uint16x8_t, uint16x8_t, uint16x8_t)
   23363      _Form of expected instruction(s):_ `vmls.i16 Q0, Q0, Q0'
   23364 
   23365    * uint8x16_t vmlsq_u8 (uint8x16_t, uint8x16_t, uint8x16_t)
   23366      _Form of expected instruction(s):_ `vmls.i8 Q0, Q0, Q0'
   23367 
   23368    * int32x4_t vmlsq_s32 (int32x4_t, int32x4_t, int32x4_t)
   23369      _Form of expected instruction(s):_ `vmls.i32 Q0, Q0, Q0'
   23370 
   23371    * int16x8_t vmlsq_s16 (int16x8_t, int16x8_t, int16x8_t)
   23372      _Form of expected instruction(s):_ `vmls.i16 Q0, Q0, Q0'
   23373 
   23374    * int8x16_t vmlsq_s8 (int8x16_t, int8x16_t, int8x16_t)
   23375      _Form of expected instruction(s):_ `vmls.i8 Q0, Q0, Q0'
   23376 
   23377    * float32x4_t vmlsq_f32 (float32x4_t, float32x4_t, float32x4_t)
   23378      _Form of expected instruction(s):_ `vmls.f32 Q0, Q0, Q0'
   23379 
   23380    * uint64x2_t vmlsl_u32 (uint64x2_t, uint32x2_t, uint32x2_t)
   23381      _Form of expected instruction(s):_ `vmlsl.u32 Q0, D0, D0'
   23382 
   23383    * uint32x4_t vmlsl_u16 (uint32x4_t, uint16x4_t, uint16x4_t)
   23384      _Form of expected instruction(s):_ `vmlsl.u16 Q0, D0, D0'
   23385 
   23386    * uint16x8_t vmlsl_u8 (uint16x8_t, uint8x8_t, uint8x8_t)
   23387      _Form of expected instruction(s):_ `vmlsl.u8 Q0, D0, D0'
   23388 
   23389    * int64x2_t vmlsl_s32 (int64x2_t, int32x2_t, int32x2_t)
   23390      _Form of expected instruction(s):_ `vmlsl.s32 Q0, D0, D0'
   23391 
   23392    * int32x4_t vmlsl_s16 (int32x4_t, int16x4_t, int16x4_t)
   23393      _Form of expected instruction(s):_ `vmlsl.s16 Q0, D0, D0'
   23394 
   23395    * int16x8_t vmlsl_s8 (int16x8_t, int8x8_t, int8x8_t)
   23396      _Form of expected instruction(s):_ `vmlsl.s8 Q0, D0, D0'
   23397 
   23398    * int64x2_t vqdmlsl_s32 (int64x2_t, int32x2_t, int32x2_t)
   23399      _Form of expected instruction(s):_ `vqdmlsl.s32 Q0, D0, D0'
   23400 
   23401    * int32x4_t vqdmlsl_s16 (int32x4_t, int16x4_t, int16x4_t)
   23402      _Form of expected instruction(s):_ `vqdmlsl.s16 Q0, D0, D0'
   23403 
   23404 5.50.3.5 Subtraction
   23405 ....................
   23406 
   23407    * uint32x2_t vsub_u32 (uint32x2_t, uint32x2_t)
   23408      _Form of expected instruction(s):_ `vsub.i32 D0, D0, D0'
   23409 
   23410    * uint16x4_t vsub_u16 (uint16x4_t, uint16x4_t)
   23411      _Form of expected instruction(s):_ `vsub.i16 D0, D0, D0'
   23412 
   23413    * uint8x8_t vsub_u8 (uint8x8_t, uint8x8_t)
   23414      _Form of expected instruction(s):_ `vsub.i8 D0, D0, D0'
   23415 
   23416    * int32x2_t vsub_s32 (int32x2_t, int32x2_t)
   23417      _Form of expected instruction(s):_ `vsub.i32 D0, D0, D0'
   23418 
   23419    * int16x4_t vsub_s16 (int16x4_t, int16x4_t)
   23420      _Form of expected instruction(s):_ `vsub.i16 D0, D0, D0'
   23421 
   23422    * int8x8_t vsub_s8 (int8x8_t, int8x8_t)
   23423      _Form of expected instruction(s):_ `vsub.i8 D0, D0, D0'
   23424 
   23425    * uint64x1_t vsub_u64 (uint64x1_t, uint64x1_t)
   23426      _Form of expected instruction(s):_ `vsub.i64 D0, D0, D0'
   23427 
   23428    * int64x1_t vsub_s64 (int64x1_t, int64x1_t)
   23429      _Form of expected instruction(s):_ `vsub.i64 D0, D0, D0'
   23430 
   23431    * float32x2_t vsub_f32 (float32x2_t, float32x2_t)
   23432      _Form of expected instruction(s):_ `vsub.f32 D0, D0, D0'
   23433 
   23434    * uint32x4_t vsubq_u32 (uint32x4_t, uint32x4_t)
   23435      _Form of expected instruction(s):_ `vsub.i32 Q0, Q0, Q0'
   23436 
   23437    * uint16x8_t vsubq_u16 (uint16x8_t, uint16x8_t)
   23438      _Form of expected instruction(s):_ `vsub.i16 Q0, Q0, Q0'
   23439 
   23440    * uint8x16_t vsubq_u8 (uint8x16_t, uint8x16_t)
   23441      _Form of expected instruction(s):_ `vsub.i8 Q0, Q0, Q0'
   23442 
   23443    * int32x4_t vsubq_s32 (int32x4_t, int32x4_t)
   23444      _Form of expected instruction(s):_ `vsub.i32 Q0, Q0, Q0'
   23445 
   23446    * int16x8_t vsubq_s16 (int16x8_t, int16x8_t)
   23447      _Form of expected instruction(s):_ `vsub.i16 Q0, Q0, Q0'
   23448 
   23449    * int8x16_t vsubq_s8 (int8x16_t, int8x16_t)
   23450      _Form of expected instruction(s):_ `vsub.i8 Q0, Q0, Q0'
   23451 
   23452    * uint64x2_t vsubq_u64 (uint64x2_t, uint64x2_t)
   23453      _Form of expected instruction(s):_ `vsub.i64 Q0, Q0, Q0'
   23454 
   23455    * int64x2_t vsubq_s64 (int64x2_t, int64x2_t)
   23456      _Form of expected instruction(s):_ `vsub.i64 Q0, Q0, Q0'
   23457 
   23458    * float32x4_t vsubq_f32 (float32x4_t, float32x4_t)
   23459      _Form of expected instruction(s):_ `vsub.f32 Q0, Q0, Q0'
   23460 
   23461    * uint64x2_t vsubl_u32 (uint32x2_t, uint32x2_t)
   23462      _Form of expected instruction(s):_ `vsubl.u32 Q0, D0, D0'
   23463 
   23464    * uint32x4_t vsubl_u16 (uint16x4_t, uint16x4_t)
   23465      _Form of expected instruction(s):_ `vsubl.u16 Q0, D0, D0'
   23466 
   23467    * uint16x8_t vsubl_u8 (uint8x8_t, uint8x8_t)
   23468      _Form of expected instruction(s):_ `vsubl.u8 Q0, D0, D0'
   23469 
   23470    * int64x2_t vsubl_s32 (int32x2_t, int32x2_t)
   23471      _Form of expected instruction(s):_ `vsubl.s32 Q0, D0, D0'
   23472 
   23473    * int32x4_t vsubl_s16 (int16x4_t, int16x4_t)
   23474      _Form of expected instruction(s):_ `vsubl.s16 Q0, D0, D0'
   23475 
   23476    * int16x8_t vsubl_s8 (int8x8_t, int8x8_t)
   23477      _Form of expected instruction(s):_ `vsubl.s8 Q0, D0, D0'
   23478 
   23479    * uint64x2_t vsubw_u32 (uint64x2_t, uint32x2_t)
   23480      _Form of expected instruction(s):_ `vsubw.u32 Q0, Q0, D0'
   23481 
   23482    * uint32x4_t vsubw_u16 (uint32x4_t, uint16x4_t)
   23483      _Form of expected instruction(s):_ `vsubw.u16 Q0, Q0, D0'
   23484 
   23485    * uint16x8_t vsubw_u8 (uint16x8_t, uint8x8_t)
   23486      _Form of expected instruction(s):_ `vsubw.u8 Q0, Q0, D0'
   23487 
   23488    * int64x2_t vsubw_s32 (int64x2_t, int32x2_t)
   23489      _Form of expected instruction(s):_ `vsubw.s32 Q0, Q0, D0'
   23490 
   23491    * int32x4_t vsubw_s16 (int32x4_t, int16x4_t)
   23492      _Form of expected instruction(s):_ `vsubw.s16 Q0, Q0, D0'
   23493 
   23494    * int16x8_t vsubw_s8 (int16x8_t, int8x8_t)
   23495      _Form of expected instruction(s):_ `vsubw.s8 Q0, Q0, D0'
   23496 
   23497    * uint32x2_t vhsub_u32 (uint32x2_t, uint32x2_t)
   23498      _Form of expected instruction(s):_ `vhsub.u32 D0, D0, D0'
   23499 
   23500    * uint16x4_t vhsub_u16 (uint16x4_t, uint16x4_t)
   23501      _Form of expected instruction(s):_ `vhsub.u16 D0, D0, D0'
   23502 
   23503    * uint8x8_t vhsub_u8 (uint8x8_t, uint8x8_t)
   23504      _Form of expected instruction(s):_ `vhsub.u8 D0, D0, D0'
   23505 
   23506    * int32x2_t vhsub_s32 (int32x2_t, int32x2_t)
   23507      _Form of expected instruction(s):_ `vhsub.s32 D0, D0, D0'
   23508 
   23509    * int16x4_t vhsub_s16 (int16x4_t, int16x4_t)
   23510      _Form of expected instruction(s):_ `vhsub.s16 D0, D0, D0'
   23511 
   23512    * int8x8_t vhsub_s8 (int8x8_t, int8x8_t)
   23513      _Form of expected instruction(s):_ `vhsub.s8 D0, D0, D0'
   23514 
   23515    * uint32x4_t vhsubq_u32 (uint32x4_t, uint32x4_t)
   23516      _Form of expected instruction(s):_ `vhsub.u32 Q0, Q0, Q0'
   23517 
   23518    * uint16x8_t vhsubq_u16 (uint16x8_t, uint16x8_t)
   23519      _Form of expected instruction(s):_ `vhsub.u16 Q0, Q0, Q0'
   23520 
   23521    * uint8x16_t vhsubq_u8 (uint8x16_t, uint8x16_t)
   23522      _Form of expected instruction(s):_ `vhsub.u8 Q0, Q0, Q0'
   23523 
   23524    * int32x4_t vhsubq_s32 (int32x4_t, int32x4_t)
   23525      _Form of expected instruction(s):_ `vhsub.s32 Q0, Q0, Q0'
   23526 
   23527    * int16x8_t vhsubq_s16 (int16x8_t, int16x8_t)
   23528      _Form of expected instruction(s):_ `vhsub.s16 Q0, Q0, Q0'
   23529 
   23530    * int8x16_t vhsubq_s8 (int8x16_t, int8x16_t)
   23531      _Form of expected instruction(s):_ `vhsub.s8 Q0, Q0, Q0'
   23532 
   23533    * uint32x2_t vqsub_u32 (uint32x2_t, uint32x2_t)
   23534      _Form of expected instruction(s):_ `vqsub.u32 D0, D0, D0'
   23535 
   23536    * uint16x4_t vqsub_u16 (uint16x4_t, uint16x4_t)
   23537      _Form of expected instruction(s):_ `vqsub.u16 D0, D0, D0'
   23538 
   23539    * uint8x8_t vqsub_u8 (uint8x8_t, uint8x8_t)
   23540      _Form of expected instruction(s):_ `vqsub.u8 D0, D0, D0'
   23541 
   23542    * int32x2_t vqsub_s32 (int32x2_t, int32x2_t)
   23543      _Form of expected instruction(s):_ `vqsub.s32 D0, D0, D0'
   23544 
   23545    * int16x4_t vqsub_s16 (int16x4_t, int16x4_t)
   23546      _Form of expected instruction(s):_ `vqsub.s16 D0, D0, D0'
   23547 
   23548    * int8x8_t vqsub_s8 (int8x8_t, int8x8_t)
   23549      _Form of expected instruction(s):_ `vqsub.s8 D0, D0, D0'
   23550 
   23551    * uint64x1_t vqsub_u64 (uint64x1_t, uint64x1_t)
   23552      _Form of expected instruction(s):_ `vqsub.u64 D0, D0, D0'
   23553 
   23554    * int64x1_t vqsub_s64 (int64x1_t, int64x1_t)
   23555      _Form of expected instruction(s):_ `vqsub.s64 D0, D0, D0'
   23556 
   23557    * uint32x4_t vqsubq_u32 (uint32x4_t, uint32x4_t)
   23558      _Form of expected instruction(s):_ `vqsub.u32 Q0, Q0, Q0'
   23559 
   23560    * uint16x8_t vqsubq_u16 (uint16x8_t, uint16x8_t)
   23561      _Form of expected instruction(s):_ `vqsub.u16 Q0, Q0, Q0'
   23562 
   23563    * uint8x16_t vqsubq_u8 (uint8x16_t, uint8x16_t)
   23564      _Form of expected instruction(s):_ `vqsub.u8 Q0, Q0, Q0'
   23565 
   23566    * int32x4_t vqsubq_s32 (int32x4_t, int32x4_t)
   23567      _Form of expected instruction(s):_ `vqsub.s32 Q0, Q0, Q0'
   23568 
   23569    * int16x8_t vqsubq_s16 (int16x8_t, int16x8_t)
   23570      _Form of expected instruction(s):_ `vqsub.s16 Q0, Q0, Q0'
   23571 
   23572    * int8x16_t vqsubq_s8 (int8x16_t, int8x16_t)
   23573      _Form of expected instruction(s):_ `vqsub.s8 Q0, Q0, Q0'
   23574 
   23575    * uint64x2_t vqsubq_u64 (uint64x2_t, uint64x2_t)
   23576      _Form of expected instruction(s):_ `vqsub.u64 Q0, Q0, Q0'
   23577 
   23578    * int64x2_t vqsubq_s64 (int64x2_t, int64x2_t)
   23579      _Form of expected instruction(s):_ `vqsub.s64 Q0, Q0, Q0'
   23580 
   23581    * uint32x2_t vsubhn_u64 (uint64x2_t, uint64x2_t)
   23582      _Form of expected instruction(s):_ `vsubhn.i64 D0, Q0, Q0'
   23583 
   23584    * uint16x4_t vsubhn_u32 (uint32x4_t, uint32x4_t)
   23585      _Form of expected instruction(s):_ `vsubhn.i32 D0, Q0, Q0'
   23586 
   23587    * uint8x8_t vsubhn_u16 (uint16x8_t, uint16x8_t)
   23588      _Form of expected instruction(s):_ `vsubhn.i16 D0, Q0, Q0'
   23589 
   23590    * int32x2_t vsubhn_s64 (int64x2_t, int64x2_t)
   23591      _Form of expected instruction(s):_ `vsubhn.i64 D0, Q0, Q0'
   23592 
   23593    * int16x4_t vsubhn_s32 (int32x4_t, int32x4_t)
   23594      _Form of expected instruction(s):_ `vsubhn.i32 D0, Q0, Q0'
   23595 
   23596    * int8x8_t vsubhn_s16 (int16x8_t, int16x8_t)
   23597      _Form of expected instruction(s):_ `vsubhn.i16 D0, Q0, Q0'
   23598 
   23599    * uint32x2_t vrsubhn_u64 (uint64x2_t, uint64x2_t)
   23600      _Form of expected instruction(s):_ `vrsubhn.i64 D0, Q0, Q0'
   23601 
   23602    * uint16x4_t vrsubhn_u32 (uint32x4_t, uint32x4_t)
   23603      _Form of expected instruction(s):_ `vrsubhn.i32 D0, Q0, Q0'
   23604 
   23605    * uint8x8_t vrsubhn_u16 (uint16x8_t, uint16x8_t)
   23606      _Form of expected instruction(s):_ `vrsubhn.i16 D0, Q0, Q0'
   23607 
   23608    * int32x2_t vrsubhn_s64 (int64x2_t, int64x2_t)
   23609      _Form of expected instruction(s):_ `vrsubhn.i64 D0, Q0, Q0'
   23610 
   23611    * int16x4_t vrsubhn_s32 (int32x4_t, int32x4_t)
   23612      _Form of expected instruction(s):_ `vrsubhn.i32 D0, Q0, Q0'
   23613 
   23614    * int8x8_t vrsubhn_s16 (int16x8_t, int16x8_t)
   23615      _Form of expected instruction(s):_ `vrsubhn.i16 D0, Q0, Q0'
   23616 
   23617 5.50.3.6 Comparison (equal-to)
   23618 ..............................
   23619 
   23620    * uint32x2_t vceq_u32 (uint32x2_t, uint32x2_t)
   23621      _Form of expected instruction(s):_ `vceq.i32 D0, D0, D0'
   23622 
   23623    * uint16x4_t vceq_u16 (uint16x4_t, uint16x4_t)
   23624      _Form of expected instruction(s):_ `vceq.i16 D0, D0, D0'
   23625 
   23626    * uint8x8_t vceq_u8 (uint8x8_t, uint8x8_t)
   23627      _Form of expected instruction(s):_ `vceq.i8 D0, D0, D0'
   23628 
   23629    * uint32x2_t vceq_s32 (int32x2_t, int32x2_t)
   23630      _Form of expected instruction(s):_ `vceq.i32 D0, D0, D0'
   23631 
   23632    * uint16x4_t vceq_s16 (int16x4_t, int16x4_t)
   23633      _Form of expected instruction(s):_ `vceq.i16 D0, D0, D0'
   23634 
   23635    * uint8x8_t vceq_s8 (int8x8_t, int8x8_t)
   23636      _Form of expected instruction(s):_ `vceq.i8 D0, D0, D0'
   23637 
   23638    * uint32x2_t vceq_f32 (float32x2_t, float32x2_t)
   23639      _Form of expected instruction(s):_ `vceq.f32 D0, D0, D0'
   23640 
   23641    * uint8x8_t vceq_p8 (poly8x8_t, poly8x8_t)
   23642      _Form of expected instruction(s):_ `vceq.i8 D0, D0, D0'
   23643 
   23644    * uint32x4_t vceqq_u32 (uint32x4_t, uint32x4_t)
   23645      _Form of expected instruction(s):_ `vceq.i32 Q0, Q0, Q0'
   23646 
   23647    * uint16x8_t vceqq_u16 (uint16x8_t, uint16x8_t)
   23648      _Form of expected instruction(s):_ `vceq.i16 Q0, Q0, Q0'
   23649 
   23650    * uint8x16_t vceqq_u8 (uint8x16_t, uint8x16_t)
   23651      _Form of expected instruction(s):_ `vceq.i8 Q0, Q0, Q0'
   23652 
   23653    * uint32x4_t vceqq_s32 (int32x4_t, int32x4_t)
   23654      _Form of expected instruction(s):_ `vceq.i32 Q0, Q0, Q0'
   23655 
   23656    * uint16x8_t vceqq_s16 (int16x8_t, int16x8_t)
   23657      _Form of expected instruction(s):_ `vceq.i16 Q0, Q0, Q0'
   23658 
   23659    * uint8x16_t vceqq_s8 (int8x16_t, int8x16_t)
   23660      _Form of expected instruction(s):_ `vceq.i8 Q0, Q0, Q0'
   23661 
   23662    * uint32x4_t vceqq_f32 (float32x4_t, float32x4_t)
   23663      _Form of expected instruction(s):_ `vceq.f32 Q0, Q0, Q0'
   23664 
   23665    * uint8x16_t vceqq_p8 (poly8x16_t, poly8x16_t)
   23666      _Form of expected instruction(s):_ `vceq.i8 Q0, Q0, Q0'
   23667 
   23668 5.50.3.7 Comparison (greater-than-or-equal-to)
   23669 ..............................................
   23670 
   23671    * uint32x2_t vcge_u32 (uint32x2_t, uint32x2_t)
   23672      _Form of expected instruction(s):_ `vcge.u32 D0, D0, D0'
   23673 
   23674    * uint16x4_t vcge_u16 (uint16x4_t, uint16x4_t)
   23675      _Form of expected instruction(s):_ `vcge.u16 D0, D0, D0'
   23676 
   23677    * uint8x8_t vcge_u8 (uint8x8_t, uint8x8_t)
   23678      _Form of expected instruction(s):_ `vcge.u8 D0, D0, D0'
   23679 
   23680    * uint32x2_t vcge_s32 (int32x2_t, int32x2_t)
   23681      _Form of expected instruction(s):_ `vcge.s32 D0, D0, D0'
   23682 
   23683    * uint16x4_t vcge_s16 (int16x4_t, int16x4_t)
   23684      _Form of expected instruction(s):_ `vcge.s16 D0, D0, D0'
   23685 
   23686    * uint8x8_t vcge_s8 (int8x8_t, int8x8_t)
   23687      _Form of expected instruction(s):_ `vcge.s8 D0, D0, D0'
   23688 
   23689    * uint32x2_t vcge_f32 (float32x2_t, float32x2_t)
   23690      _Form of expected instruction(s):_ `vcge.f32 D0, D0, D0'
   23691 
   23692    * uint32x4_t vcgeq_u32 (uint32x4_t, uint32x4_t)
   23693      _Form of expected instruction(s):_ `vcge.u32 Q0, Q0, Q0'
   23694 
   23695    * uint16x8_t vcgeq_u16 (uint16x8_t, uint16x8_t)
   23696      _Form of expected instruction(s):_ `vcge.u16 Q0, Q0, Q0'
   23697 
   23698    * uint8x16_t vcgeq_u8 (uint8x16_t, uint8x16_t)
   23699      _Form of expected instruction(s):_ `vcge.u8 Q0, Q0, Q0'
   23700 
   23701    * uint32x4_t vcgeq_s32 (int32x4_t, int32x4_t)
   23702      _Form of expected instruction(s):_ `vcge.s32 Q0, Q0, Q0'
   23703 
   23704    * uint16x8_t vcgeq_s16 (int16x8_t, int16x8_t)
   23705      _Form of expected instruction(s):_ `vcge.s16 Q0, Q0, Q0'
   23706 
   23707    * uint8x16_t vcgeq_s8 (int8x16_t, int8x16_t)
   23708      _Form of expected instruction(s):_ `vcge.s8 Q0, Q0, Q0'
   23709 
   23710    * uint32x4_t vcgeq_f32 (float32x4_t, float32x4_t)
   23711      _Form of expected instruction(s):_ `vcge.f32 Q0, Q0, Q0'
   23712 
   23713 5.50.3.8 Comparison (less-than-or-equal-to)
   23714 ...........................................
   23715 
   23716    * uint32x2_t vcle_u32 (uint32x2_t, uint32x2_t)
   23717      _Form of expected instruction(s):_ `vcge.u32 D0, D0, D0'
   23718 
   23719    * uint16x4_t vcle_u16 (uint16x4_t, uint16x4_t)
   23720      _Form of expected instruction(s):_ `vcge.u16 D0, D0, D0'
   23721 
   23722    * uint8x8_t vcle_u8 (uint8x8_t, uint8x8_t)
   23723      _Form of expected instruction(s):_ `vcge.u8 D0, D0, D0'
   23724 
   23725    * uint32x2_t vcle_s32 (int32x2_t, int32x2_t)
   23726      _Form of expected instruction(s):_ `vcge.s32 D0, D0, D0'
   23727 
   23728    * uint16x4_t vcle_s16 (int16x4_t, int16x4_t)
   23729      _Form of expected instruction(s):_ `vcge.s16 D0, D0, D0'
   23730 
   23731    * uint8x8_t vcle_s8 (int8x8_t, int8x8_t)
   23732      _Form of expected instruction(s):_ `vcge.s8 D0, D0, D0'
   23733 
   23734    * uint32x2_t vcle_f32 (float32x2_t, float32x2_t)
   23735      _Form of expected instruction(s):_ `vcge.f32 D0, D0, D0'
   23736 
   23737    * uint32x4_t vcleq_u32 (uint32x4_t, uint32x4_t)
   23738      _Form of expected instruction(s):_ `vcge.u32 Q0, Q0, Q0'
   23739 
   23740    * uint16x8_t vcleq_u16 (uint16x8_t, uint16x8_t)
   23741      _Form of expected instruction(s):_ `vcge.u16 Q0, Q0, Q0'
   23742 
   23743    * uint8x16_t vcleq_u8 (uint8x16_t, uint8x16_t)
   23744      _Form of expected instruction(s):_ `vcge.u8 Q0, Q0, Q0'
   23745 
   23746    * uint32x4_t vcleq_s32 (int32x4_t, int32x4_t)
   23747      _Form of expected instruction(s):_ `vcge.s32 Q0, Q0, Q0'
   23748 
   23749    * uint16x8_t vcleq_s16 (int16x8_t, int16x8_t)
   23750      _Form of expected instruction(s):_ `vcge.s16 Q0, Q0, Q0'
   23751 
   23752    * uint8x16_t vcleq_s8 (int8x16_t, int8x16_t)
   23753      _Form of expected instruction(s):_ `vcge.s8 Q0, Q0, Q0'
   23754 
   23755    * uint32x4_t vcleq_f32 (float32x4_t, float32x4_t)
   23756      _Form of expected instruction(s):_ `vcge.f32 Q0, Q0, Q0'
   23757 
   23758 5.50.3.9 Comparison (greater-than)
   23759 ..................................
   23760 
   23761    * uint32x2_t vcgt_u32 (uint32x2_t, uint32x2_t)
   23762      _Form of expected instruction(s):_ `vcgt.u32 D0, D0, D0'
   23763 
   23764    * uint16x4_t vcgt_u16 (uint16x4_t, uint16x4_t)
   23765      _Form of expected instruction(s):_ `vcgt.u16 D0, D0, D0'
   23766 
   23767    * uint8x8_t vcgt_u8 (uint8x8_t, uint8x8_t)
   23768      _Form of expected instruction(s):_ `vcgt.u8 D0, D0, D0'
   23769 
   23770    * uint32x2_t vcgt_s32 (int32x2_t, int32x2_t)
   23771      _Form of expected instruction(s):_ `vcgt.s32 D0, D0, D0'
   23772 
   23773    * uint16x4_t vcgt_s16 (int16x4_t, int16x4_t)
   23774      _Form of expected instruction(s):_ `vcgt.s16 D0, D0, D0'
   23775 
   23776    * uint8x8_t vcgt_s8 (int8x8_t, int8x8_t)
   23777      _Form of expected instruction(s):_ `vcgt.s8 D0, D0, D0'
   23778 
   23779    * uint32x2_t vcgt_f32 (float32x2_t, float32x2_t)
   23780      _Form of expected instruction(s):_ `vcgt.f32 D0, D0, D0'
   23781 
   23782    * uint32x4_t vcgtq_u32 (uint32x4_t, uint32x4_t)
   23783      _Form of expected instruction(s):_ `vcgt.u32 Q0, Q0, Q0'
   23784 
   23785    * uint16x8_t vcgtq_u16 (uint16x8_t, uint16x8_t)
   23786      _Form of expected instruction(s):_ `vcgt.u16 Q0, Q0, Q0'
   23787 
   23788    * uint8x16_t vcgtq_u8 (uint8x16_t, uint8x16_t)
   23789      _Form of expected instruction(s):_ `vcgt.u8 Q0, Q0, Q0'
   23790 
   23791    * uint32x4_t vcgtq_s32 (int32x4_t, int32x4_t)
   23792      _Form of expected instruction(s):_ `vcgt.s32 Q0, Q0, Q0'
   23793 
   23794    * uint16x8_t vcgtq_s16 (int16x8_t, int16x8_t)
   23795      _Form of expected instruction(s):_ `vcgt.s16 Q0, Q0, Q0'
   23796 
   23797    * uint8x16_t vcgtq_s8 (int8x16_t, int8x16_t)
   23798      _Form of expected instruction(s):_ `vcgt.s8 Q0, Q0, Q0'
   23799 
   23800    * uint32x4_t vcgtq_f32 (float32x4_t, float32x4_t)
   23801      _Form of expected instruction(s):_ `vcgt.f32 Q0, Q0, Q0'
   23802 
   23803 5.50.3.10 Comparison (less-than)
   23804 ................................
   23805 
   23806    * uint32x2_t vclt_u32 (uint32x2_t, uint32x2_t)
   23807      _Form of expected instruction(s):_ `vcgt.u32 D0, D0, D0'
   23808 
   23809    * uint16x4_t vclt_u16 (uint16x4_t, uint16x4_t)
   23810      _Form of expected instruction(s):_ `vcgt.u16 D0, D0, D0'
   23811 
   23812    * uint8x8_t vclt_u8 (uint8x8_t, uint8x8_t)
   23813      _Form of expected instruction(s):_ `vcgt.u8 D0, D0, D0'
   23814 
   23815    * uint32x2_t vclt_s32 (int32x2_t, int32x2_t)
   23816      _Form of expected instruction(s):_ `vcgt.s32 D0, D0, D0'
   23817 
   23818    * uint16x4_t vclt_s16 (int16x4_t, int16x4_t)
   23819      _Form of expected instruction(s):_ `vcgt.s16 D0, D0, D0'
   23820 
   23821    * uint8x8_t vclt_s8 (int8x8_t, int8x8_t)
   23822      _Form of expected instruction(s):_ `vcgt.s8 D0, D0, D0'
   23823 
   23824    * uint32x2_t vclt_f32 (float32x2_t, float32x2_t)
   23825      _Form of expected instruction(s):_ `vcgt.f32 D0, D0, D0'
   23826 
   23827    * uint32x4_t vcltq_u32 (uint32x4_t, uint32x4_t)
   23828      _Form of expected instruction(s):_ `vcgt.u32 Q0, Q0, Q0'
   23829 
   23830    * uint16x8_t vcltq_u16 (uint16x8_t, uint16x8_t)
   23831      _Form of expected instruction(s):_ `vcgt.u16 Q0, Q0, Q0'
   23832 
   23833    * uint8x16_t vcltq_u8 (uint8x16_t, uint8x16_t)
   23834      _Form of expected instruction(s):_ `vcgt.u8 Q0, Q0, Q0'
   23835 
   23836    * uint32x4_t vcltq_s32 (int32x4_t, int32x4_t)
   23837      _Form of expected instruction(s):_ `vcgt.s32 Q0, Q0, Q0'
   23838 
   23839    * uint16x8_t vcltq_s16 (int16x8_t, int16x8_t)
   23840      _Form of expected instruction(s):_ `vcgt.s16 Q0, Q0, Q0'
   23841 
   23842    * uint8x16_t vcltq_s8 (int8x16_t, int8x16_t)
   23843      _Form of expected instruction(s):_ `vcgt.s8 Q0, Q0, Q0'
   23844 
   23845    * uint32x4_t vcltq_f32 (float32x4_t, float32x4_t)
   23846      _Form of expected instruction(s):_ `vcgt.f32 Q0, Q0, Q0'
   23847 
   23848 5.50.3.11 Comparison (absolute greater-than-or-equal-to)
   23849 ........................................................
   23850 
   23851    * uint32x2_t vcage_f32 (float32x2_t, float32x2_t)
   23852      _Form of expected instruction(s):_ `vacge.f32 D0, D0, D0'
   23853 
   23854    * uint32x4_t vcageq_f32 (float32x4_t, float32x4_t)
   23855      _Form of expected instruction(s):_ `vacge.f32 Q0, Q0, Q0'
   23856 
   23857 5.50.3.12 Comparison (absolute less-than-or-equal-to)
   23858 .....................................................
   23859 
   23860    * uint32x2_t vcale_f32 (float32x2_t, float32x2_t)
   23861      _Form of expected instruction(s):_ `vacge.f32 D0, D0, D0'
   23862 
   23863    * uint32x4_t vcaleq_f32 (float32x4_t, float32x4_t)
   23864      _Form of expected instruction(s):_ `vacge.f32 Q0, Q0, Q0'
   23865 
   23866 5.50.3.13 Comparison (absolute greater-than)
   23867 ............................................
   23868 
   23869    * uint32x2_t vcagt_f32 (float32x2_t, float32x2_t)
   23870      _Form of expected instruction(s):_ `vacgt.f32 D0, D0, D0'
   23871 
   23872    * uint32x4_t vcagtq_f32 (float32x4_t, float32x4_t)
   23873      _Form of expected instruction(s):_ `vacgt.f32 Q0, Q0, Q0'
   23874 
   23875 5.50.3.14 Comparison (absolute less-than)
   23876 .........................................
   23877 
   23878    * uint32x2_t vcalt_f32 (float32x2_t, float32x2_t)
   23879      _Form of expected instruction(s):_ `vacgt.f32 D0, D0, D0'
   23880 
   23881    * uint32x4_t vcaltq_f32 (float32x4_t, float32x4_t)
   23882      _Form of expected instruction(s):_ `vacgt.f32 Q0, Q0, Q0'
   23883 
   23884 5.50.3.15 Test bits
   23885 ...................
   23886 
   23887    * uint32x2_t vtst_u32 (uint32x2_t, uint32x2_t)
   23888      _Form of expected instruction(s):_ `vtst.32 D0, D0, D0'
   23889 
   23890    * uint16x4_t vtst_u16 (uint16x4_t, uint16x4_t)
   23891      _Form of expected instruction(s):_ `vtst.16 D0, D0, D0'
   23892 
   23893    * uint8x8_t vtst_u8 (uint8x8_t, uint8x8_t)
   23894      _Form of expected instruction(s):_ `vtst.8 D0, D0, D0'
   23895 
   23896    * uint32x2_t vtst_s32 (int32x2_t, int32x2_t)
   23897      _Form of expected instruction(s):_ `vtst.32 D0, D0, D0'
   23898 
   23899    * uint16x4_t vtst_s16 (int16x4_t, int16x4_t)
   23900      _Form of expected instruction(s):_ `vtst.16 D0, D0, D0'
   23901 
   23902    * uint8x8_t vtst_s8 (int8x8_t, int8x8_t)
   23903      _Form of expected instruction(s):_ `vtst.8 D0, D0, D0'
   23904 
   23905    * uint8x8_t vtst_p8 (poly8x8_t, poly8x8_t)
   23906      _Form of expected instruction(s):_ `vtst.8 D0, D0, D0'
   23907 
   23908    * uint32x4_t vtstq_u32 (uint32x4_t, uint32x4_t)
   23909      _Form of expected instruction(s):_ `vtst.32 Q0, Q0, Q0'
   23910 
   23911    * uint16x8_t vtstq_u16 (uint16x8_t, uint16x8_t)
   23912      _Form of expected instruction(s):_ `vtst.16 Q0, Q0, Q0'
   23913 
   23914    * uint8x16_t vtstq_u8 (uint8x16_t, uint8x16_t)
   23915      _Form of expected instruction(s):_ `vtst.8 Q0, Q0, Q0'
   23916 
   23917    * uint32x4_t vtstq_s32 (int32x4_t, int32x4_t)
   23918      _Form of expected instruction(s):_ `vtst.32 Q0, Q0, Q0'
   23919 
   23920    * uint16x8_t vtstq_s16 (int16x8_t, int16x8_t)
   23921      _Form of expected instruction(s):_ `vtst.16 Q0, Q0, Q0'
   23922 
   23923    * uint8x16_t vtstq_s8 (int8x16_t, int8x16_t)
   23924      _Form of expected instruction(s):_ `vtst.8 Q0, Q0, Q0'
   23925 
   23926    * uint8x16_t vtstq_p8 (poly8x16_t, poly8x16_t)
   23927      _Form of expected instruction(s):_ `vtst.8 Q0, Q0, Q0'
   23928 
   23929 5.50.3.16 Absolute difference
   23930 .............................
   23931 
   23932    * uint32x2_t vabd_u32 (uint32x2_t, uint32x2_t)
   23933      _Form of expected instruction(s):_ `vabd.u32 D0, D0, D0'
   23934 
   23935    * uint16x4_t vabd_u16 (uint16x4_t, uint16x4_t)
   23936      _Form of expected instruction(s):_ `vabd.u16 D0, D0, D0'
   23937 
   23938    * uint8x8_t vabd_u8 (uint8x8_t, uint8x8_t)
   23939      _Form of expected instruction(s):_ `vabd.u8 D0, D0, D0'
   23940 
   23941    * int32x2_t vabd_s32 (int32x2_t, int32x2_t)
   23942      _Form of expected instruction(s):_ `vabd.s32 D0, D0, D0'
   23943 
   23944    * int16x4_t vabd_s16 (int16x4_t, int16x4_t)
   23945      _Form of expected instruction(s):_ `vabd.s16 D0, D0, D0'
   23946 
   23947    * int8x8_t vabd_s8 (int8x8_t, int8x8_t)
   23948      _Form of expected instruction(s):_ `vabd.s8 D0, D0, D0'
   23949 
   23950    * float32x2_t vabd_f32 (float32x2_t, float32x2_t)
   23951      _Form of expected instruction(s):_ `vabd.f32 D0, D0, D0'
   23952 
   23953    * uint32x4_t vabdq_u32 (uint32x4_t, uint32x4_t)
   23954      _Form of expected instruction(s):_ `vabd.u32 Q0, Q0, Q0'
   23955 
   23956    * uint16x8_t vabdq_u16 (uint16x8_t, uint16x8_t)
   23957      _Form of expected instruction(s):_ `vabd.u16 Q0, Q0, Q0'
   23958 
   23959    * uint8x16_t vabdq_u8 (uint8x16_t, uint8x16_t)
   23960      _Form of expected instruction(s):_ `vabd.u8 Q0, Q0, Q0'
   23961 
   23962    * int32x4_t vabdq_s32 (int32x4_t, int32x4_t)
   23963      _Form of expected instruction(s):_ `vabd.s32 Q0, Q0, Q0'
   23964 
   23965    * int16x8_t vabdq_s16 (int16x8_t, int16x8_t)
   23966      _Form of expected instruction(s):_ `vabd.s16 Q0, Q0, Q0'
   23967 
   23968    * int8x16_t vabdq_s8 (int8x16_t, int8x16_t)
   23969      _Form of expected instruction(s):_ `vabd.s8 Q0, Q0, Q0'
   23970 
   23971    * float32x4_t vabdq_f32 (float32x4_t, float32x4_t)
   23972      _Form of expected instruction(s):_ `vabd.f32 Q0, Q0, Q0'
   23973 
   23974    * uint64x2_t vabdl_u32 (uint32x2_t, uint32x2_t)
   23975      _Form of expected instruction(s):_ `vabdl.u32 Q0, D0, D0'
   23976 
   23977    * uint32x4_t vabdl_u16 (uint16x4_t, uint16x4_t)
   23978      _Form of expected instruction(s):_ `vabdl.u16 Q0, D0, D0'
   23979 
   23980    * uint16x8_t vabdl_u8 (uint8x8_t, uint8x8_t)
   23981      _Form of expected instruction(s):_ `vabdl.u8 Q0, D0, D0'
   23982 
   23983    * int64x2_t vabdl_s32 (int32x2_t, int32x2_t)
   23984      _Form of expected instruction(s):_ `vabdl.s32 Q0, D0, D0'
   23985 
   23986    * int32x4_t vabdl_s16 (int16x4_t, int16x4_t)
   23987      _Form of expected instruction(s):_ `vabdl.s16 Q0, D0, D0'
   23988 
   23989    * int16x8_t vabdl_s8 (int8x8_t, int8x8_t)
   23990      _Form of expected instruction(s):_ `vabdl.s8 Q0, D0, D0'
   23991 
   23992 5.50.3.17 Absolute difference and accumulate
   23993 ............................................
   23994 
   23995    * uint32x2_t vaba_u32 (uint32x2_t, uint32x2_t, uint32x2_t)
   23996      _Form of expected instruction(s):_ `vaba.u32 D0, D0, D0'
   23997 
   23998    * uint16x4_t vaba_u16 (uint16x4_t, uint16x4_t, uint16x4_t)
   23999      _Form of expected instruction(s):_ `vaba.u16 D0, D0, D0'
   24000 
   24001    * uint8x8_t vaba_u8 (uint8x8_t, uint8x8_t, uint8x8_t)
   24002      _Form of expected instruction(s):_ `vaba.u8 D0, D0, D0'
   24003 
   24004    * int32x2_t vaba_s32 (int32x2_t, int32x2_t, int32x2_t)
   24005      _Form of expected instruction(s):_ `vaba.s32 D0, D0, D0'
   24006 
   24007    * int16x4_t vaba_s16 (int16x4_t, int16x4_t, int16x4_t)
   24008      _Form of expected instruction(s):_ `vaba.s16 D0, D0, D0'
   24009 
   24010    * int8x8_t vaba_s8 (int8x8_t, int8x8_t, int8x8_t)
   24011      _Form of expected instruction(s):_ `vaba.s8 D0, D0, D0'
   24012 
   24013    * uint32x4_t vabaq_u32 (uint32x4_t, uint32x4_t, uint32x4_t)
   24014      _Form of expected instruction(s):_ `vaba.u32 Q0, Q0, Q0'
   24015 
   24016    * uint16x8_t vabaq_u16 (uint16x8_t, uint16x8_t, uint16x8_t)
   24017      _Form of expected instruction(s):_ `vaba.u16 Q0, Q0, Q0'
   24018 
   24019    * uint8x16_t vabaq_u8 (uint8x16_t, uint8x16_t, uint8x16_t)
   24020      _Form of expected instruction(s):_ `vaba.u8 Q0, Q0, Q0'
   24021 
   24022    * int32x4_t vabaq_s32 (int32x4_t, int32x4_t, int32x4_t)
   24023      _Form of expected instruction(s):_ `vaba.s32 Q0, Q0, Q0'
   24024 
   24025    * int16x8_t vabaq_s16 (int16x8_t, int16x8_t, int16x8_t)
   24026      _Form of expected instruction(s):_ `vaba.s16 Q0, Q0, Q0'
   24027 
   24028    * int8x16_t vabaq_s8 (int8x16_t, int8x16_t, int8x16_t)
   24029      _Form of expected instruction(s):_ `vaba.s8 Q0, Q0, Q0'
   24030 
   24031    * uint64x2_t vabal_u32 (uint64x2_t, uint32x2_t, uint32x2_t)
   24032      _Form of expected instruction(s):_ `vabal.u32 Q0, D0, D0'
   24033 
   24034    * uint32x4_t vabal_u16 (uint32x4_t, uint16x4_t, uint16x4_t)
   24035      _Form of expected instruction(s):_ `vabal.u16 Q0, D0, D0'
   24036 
   24037    * uint16x8_t vabal_u8 (uint16x8_t, uint8x8_t, uint8x8_t)
   24038      _Form of expected instruction(s):_ `vabal.u8 Q0, D0, D0'
   24039 
   24040    * int64x2_t vabal_s32 (int64x2_t, int32x2_t, int32x2_t)
   24041      _Form of expected instruction(s):_ `vabal.s32 Q0, D0, D0'
   24042 
   24043    * int32x4_t vabal_s16 (int32x4_t, int16x4_t, int16x4_t)
   24044      _Form of expected instruction(s):_ `vabal.s16 Q0, D0, D0'
   24045 
   24046    * int16x8_t vabal_s8 (int16x8_t, int8x8_t, int8x8_t)
   24047      _Form of expected instruction(s):_ `vabal.s8 Q0, D0, D0'
   24048 
   24049 5.50.3.18 Maximum
   24050 .................
   24051 
   24052    * uint32x2_t vmax_u32 (uint32x2_t, uint32x2_t)
   24053      _Form of expected instruction(s):_ `vmax.u32 D0, D0, D0'
   24054 
   24055    * uint16x4_t vmax_u16 (uint16x4_t, uint16x4_t)
   24056      _Form of expected instruction(s):_ `vmax.u16 D0, D0, D0'
   24057 
   24058    * uint8x8_t vmax_u8 (uint8x8_t, uint8x8_t)
   24059      _Form of expected instruction(s):_ `vmax.u8 D0, D0, D0'
   24060 
   24061    * int32x2_t vmax_s32 (int32x2_t, int32x2_t)
   24062      _Form of expected instruction(s):_ `vmax.s32 D0, D0, D0'
   24063 
   24064    * int16x4_t vmax_s16 (int16x4_t, int16x4_t)
   24065      _Form of expected instruction(s):_ `vmax.s16 D0, D0, D0'
   24066 
   24067    * int8x8_t vmax_s8 (int8x8_t, int8x8_t)
   24068      _Form of expected instruction(s):_ `vmax.s8 D0, D0, D0'
   24069 
   24070    * float32x2_t vmax_f32 (float32x2_t, float32x2_t)
   24071      _Form of expected instruction(s):_ `vmax.f32 D0, D0, D0'
   24072 
   24073    * uint32x4_t vmaxq_u32 (uint32x4_t, uint32x4_t)
   24074      _Form of expected instruction(s):_ `vmax.u32 Q0, Q0, Q0'
   24075 
   24076    * uint16x8_t vmaxq_u16 (uint16x8_t, uint16x8_t)
   24077      _Form of expected instruction(s):_ `vmax.u16 Q0, Q0, Q0'
   24078 
   24079    * uint8x16_t vmaxq_u8 (uint8x16_t, uint8x16_t)
   24080      _Form of expected instruction(s):_ `vmax.u8 Q0, Q0, Q0'
   24081 
   24082    * int32x4_t vmaxq_s32 (int32x4_t, int32x4_t)
   24083      _Form of expected instruction(s):_ `vmax.s32 Q0, Q0, Q0'
   24084 
   24085    * int16x8_t vmaxq_s16 (int16x8_t, int16x8_t)
   24086      _Form of expected instruction(s):_ `vmax.s16 Q0, Q0, Q0'
   24087 
   24088    * int8x16_t vmaxq_s8 (int8x16_t, int8x16_t)
   24089      _Form of expected instruction(s):_ `vmax.s8 Q0, Q0, Q0'
   24090 
   24091    * float32x4_t vmaxq_f32 (float32x4_t, float32x4_t)
   24092      _Form of expected instruction(s):_ `vmax.f32 Q0, Q0, Q0'
   24093 
   24094 5.50.3.19 Minimum
   24095 .................
   24096 
   24097    * uint32x2_t vmin_u32 (uint32x2_t, uint32x2_t)
   24098      _Form of expected instruction(s):_ `vmin.u32 D0, D0, D0'
   24099 
   24100    * uint16x4_t vmin_u16 (uint16x4_t, uint16x4_t)
   24101      _Form of expected instruction(s):_ `vmin.u16 D0, D0, D0'
   24102 
   24103    * uint8x8_t vmin_u8 (uint8x8_t, uint8x8_t)
   24104      _Form of expected instruction(s):_ `vmin.u8 D0, D0, D0'
   24105 
   24106    * int32x2_t vmin_s32 (int32x2_t, int32x2_t)
   24107      _Form of expected instruction(s):_ `vmin.s32 D0, D0, D0'
   24108 
   24109    * int16x4_t vmin_s16 (int16x4_t, int16x4_t)
   24110      _Form of expected instruction(s):_ `vmin.s16 D0, D0, D0'
   24111 
   24112    * int8x8_t vmin_s8 (int8x8_t, int8x8_t)
   24113      _Form of expected instruction(s):_ `vmin.s8 D0, D0, D0'
   24114 
   24115    * float32x2_t vmin_f32 (float32x2_t, float32x2_t)
   24116      _Form of expected instruction(s):_ `vmin.f32 D0, D0, D0'
   24117 
   24118    * uint32x4_t vminq_u32 (uint32x4_t, uint32x4_t)
   24119      _Form of expected instruction(s):_ `vmin.u32 Q0, Q0, Q0'
   24120 
   24121    * uint16x8_t vminq_u16 (uint16x8_t, uint16x8_t)
   24122      _Form of expected instruction(s):_ `vmin.u16 Q0, Q0, Q0'
   24123 
   24124    * uint8x16_t vminq_u8 (uint8x16_t, uint8x16_t)
   24125      _Form of expected instruction(s):_ `vmin.u8 Q0, Q0, Q0'
   24126 
   24127    * int32x4_t vminq_s32 (int32x4_t, int32x4_t)
   24128      _Form of expected instruction(s):_ `vmin.s32 Q0, Q0, Q0'
   24129 
   24130    * int16x8_t vminq_s16 (int16x8_t, int16x8_t)
   24131      _Form of expected instruction(s):_ `vmin.s16 Q0, Q0, Q0'
   24132 
   24133    * int8x16_t vminq_s8 (int8x16_t, int8x16_t)
   24134      _Form of expected instruction(s):_ `vmin.s8 Q0, Q0, Q0'
   24135 
   24136    * float32x4_t vminq_f32 (float32x4_t, float32x4_t)
   24137      _Form of expected instruction(s):_ `vmin.f32 Q0, Q0, Q0'
   24138 
   24139 5.50.3.20 Pairwise add
   24140 ......................
   24141 
   24142    * uint32x2_t vpadd_u32 (uint32x2_t, uint32x2_t)
   24143      _Form of expected instruction(s):_ `vpadd.i32 D0, D0, D0'
   24144 
   24145    * uint16x4_t vpadd_u16 (uint16x4_t, uint16x4_t)
   24146      _Form of expected instruction(s):_ `vpadd.i16 D0, D0, D0'
   24147 
   24148    * uint8x8_t vpadd_u8 (uint8x8_t, uint8x8_t)
   24149      _Form of expected instruction(s):_ `vpadd.i8 D0, D0, D0'
   24150 
   24151    * int32x2_t vpadd_s32 (int32x2_t, int32x2_t)
   24152      _Form of expected instruction(s):_ `vpadd.i32 D0, D0, D0'
   24153 
   24154    * int16x4_t vpadd_s16 (int16x4_t, int16x4_t)
   24155      _Form of expected instruction(s):_ `vpadd.i16 D0, D0, D0'
   24156 
   24157    * int8x8_t vpadd_s8 (int8x8_t, int8x8_t)
   24158      _Form of expected instruction(s):_ `vpadd.i8 D0, D0, D0'
   24159 
   24160    * float32x2_t vpadd_f32 (float32x2_t, float32x2_t)
   24161      _Form of expected instruction(s):_ `vpadd.f32 D0, D0, D0'
   24162 
   24163    * uint64x1_t vpaddl_u32 (uint32x2_t)
   24164      _Form of expected instruction(s):_ `vpaddl.u32 D0, D0'
   24165 
   24166    * uint32x2_t vpaddl_u16 (uint16x4_t)
   24167      _Form of expected instruction(s):_ `vpaddl.u16 D0, D0'
   24168 
   24169    * uint16x4_t vpaddl_u8 (uint8x8_t)
   24170      _Form of expected instruction(s):_ `vpaddl.u8 D0, D0'
   24171 
   24172    * int64x1_t vpaddl_s32 (int32x2_t)
   24173      _Form of expected instruction(s):_ `vpaddl.s32 D0, D0'
   24174 
   24175    * int32x2_t vpaddl_s16 (int16x4_t)
   24176      _Form of expected instruction(s):_ `vpaddl.s16 D0, D0'
   24177 
   24178    * int16x4_t vpaddl_s8 (int8x8_t)
   24179      _Form of expected instruction(s):_ `vpaddl.s8 D0, D0'
   24180 
   24181    * uint64x2_t vpaddlq_u32 (uint32x4_t)
   24182      _Form of expected instruction(s):_ `vpaddl.u32 Q0, Q0'
   24183 
   24184    * uint32x4_t vpaddlq_u16 (uint16x8_t)
   24185      _Form of expected instruction(s):_ `vpaddl.u16 Q0, Q0'
   24186 
   24187    * uint16x8_t vpaddlq_u8 (uint8x16_t)
   24188      _Form of expected instruction(s):_ `vpaddl.u8 Q0, Q0'
   24189 
   24190    * int64x2_t vpaddlq_s32 (int32x4_t)
   24191      _Form of expected instruction(s):_ `vpaddl.s32 Q0, Q0'
   24192 
   24193    * int32x4_t vpaddlq_s16 (int16x8_t)
   24194      _Form of expected instruction(s):_ `vpaddl.s16 Q0, Q0'
   24195 
   24196    * int16x8_t vpaddlq_s8 (int8x16_t)
   24197      _Form of expected instruction(s):_ `vpaddl.s8 Q0, Q0'
   24198 
   24199 5.50.3.21 Pairwise add, single_opcode widen and accumulate
   24200 ..........................................................
   24201 
   24202    * uint64x1_t vpadal_u32 (uint64x1_t, uint32x2_t)
   24203      _Form of expected instruction(s):_ `vpadal.u32 D0, D0'
   24204 
   24205    * uint32x2_t vpadal_u16 (uint32x2_t, uint16x4_t)
   24206      _Form of expected instruction(s):_ `vpadal.u16 D0, D0'
   24207 
   24208    * uint16x4_t vpadal_u8 (uint16x4_t, uint8x8_t)
   24209      _Form of expected instruction(s):_ `vpadal.u8 D0, D0'
   24210 
   24211    * int64x1_t vpadal_s32 (int64x1_t, int32x2_t)
   24212      _Form of expected instruction(s):_ `vpadal.s32 D0, D0'
   24213 
   24214    * int32x2_t vpadal_s16 (int32x2_t, int16x4_t)
   24215      _Form of expected instruction(s):_ `vpadal.s16 D0, D0'
   24216 
   24217    * int16x4_t vpadal_s8 (int16x4_t, int8x8_t)
   24218      _Form of expected instruction(s):_ `vpadal.s8 D0, D0'
   24219 
   24220    * uint64x2_t vpadalq_u32 (uint64x2_t, uint32x4_t)
   24221      _Form of expected instruction(s):_ `vpadal.u32 Q0, Q0'
   24222 
   24223    * uint32x4_t vpadalq_u16 (uint32x4_t, uint16x8_t)
   24224      _Form of expected instruction(s):_ `vpadal.u16 Q0, Q0'
   24225 
   24226    * uint16x8_t vpadalq_u8 (uint16x8_t, uint8x16_t)
   24227      _Form of expected instruction(s):_ `vpadal.u8 Q0, Q0'
   24228 
   24229    * int64x2_t vpadalq_s32 (int64x2_t, int32x4_t)
   24230      _Form of expected instruction(s):_ `vpadal.s32 Q0, Q0'
   24231 
   24232    * int32x4_t vpadalq_s16 (int32x4_t, int16x8_t)
   24233      _Form of expected instruction(s):_ `vpadal.s16 Q0, Q0'
   24234 
   24235    * int16x8_t vpadalq_s8 (int16x8_t, int8x16_t)
   24236      _Form of expected instruction(s):_ `vpadal.s8 Q0, Q0'
   24237 
   24238 5.50.3.22 Folding maximum
   24239 .........................
   24240 
   24241    * uint32x2_t vpmax_u32 (uint32x2_t, uint32x2_t)
   24242      _Form of expected instruction(s):_ `vpmax.u32 D0, D0, D0'
   24243 
   24244    * uint16x4_t vpmax_u16 (uint16x4_t, uint16x4_t)
   24245      _Form of expected instruction(s):_ `vpmax.u16 D0, D0, D0'
   24246 
   24247    * uint8x8_t vpmax_u8 (uint8x8_t, uint8x8_t)
   24248      _Form of expected instruction(s):_ `vpmax.u8 D0, D0, D0'
   24249 
   24250    * int32x2_t vpmax_s32 (int32x2_t, int32x2_t)
   24251      _Form of expected instruction(s):_ `vpmax.s32 D0, D0, D0'
   24252 
   24253    * int16x4_t vpmax_s16 (int16x4_t, int16x4_t)
   24254      _Form of expected instruction(s):_ `vpmax.s16 D0, D0, D0'
   24255 
   24256    * int8x8_t vpmax_s8 (int8x8_t, int8x8_t)
   24257      _Form of expected instruction(s):_ `vpmax.s8 D0, D0, D0'
   24258 
   24259    * float32x2_t vpmax_f32 (float32x2_t, float32x2_t)
   24260      _Form of expected instruction(s):_ `vpmax.f32 D0, D0, D0'
   24261 
   24262 5.50.3.23 Folding minimum
   24263 .........................
   24264 
   24265    * uint32x2_t vpmin_u32 (uint32x2_t, uint32x2_t)
   24266      _Form of expected instruction(s):_ `vpmin.u32 D0, D0, D0'
   24267 
   24268    * uint16x4_t vpmin_u16 (uint16x4_t, uint16x4_t)
   24269      _Form of expected instruction(s):_ `vpmin.u16 D0, D0, D0'
   24270 
   24271    * uint8x8_t vpmin_u8 (uint8x8_t, uint8x8_t)
   24272      _Form of expected instruction(s):_ `vpmin.u8 D0, D0, D0'
   24273 
   24274    * int32x2_t vpmin_s32 (int32x2_t, int32x2_t)
   24275      _Form of expected instruction(s):_ `vpmin.s32 D0, D0, D0'
   24276 
   24277    * int16x4_t vpmin_s16 (int16x4_t, int16x4_t)
   24278      _Form of expected instruction(s):_ `vpmin.s16 D0, D0, D0'
   24279 
   24280    * int8x8_t vpmin_s8 (int8x8_t, int8x8_t)
   24281      _Form of expected instruction(s):_ `vpmin.s8 D0, D0, D0'
   24282 
   24283    * float32x2_t vpmin_f32 (float32x2_t, float32x2_t)
   24284      _Form of expected instruction(s):_ `vpmin.f32 D0, D0, D0'
   24285 
   24286 5.50.3.24 Reciprocal step
   24287 .........................
   24288 
   24289    * float32x2_t vrecps_f32 (float32x2_t, float32x2_t)
   24290      _Form of expected instruction(s):_ `vrecps.f32 D0, D0, D0'
   24291 
   24292    * float32x4_t vrecpsq_f32 (float32x4_t, float32x4_t)
   24293      _Form of expected instruction(s):_ `vrecps.f32 Q0, Q0, Q0'
   24294 
   24295    * float32x2_t vrsqrts_f32 (float32x2_t, float32x2_t)
   24296      _Form of expected instruction(s):_ `vrsqrts.f32 D0, D0, D0'
   24297 
   24298    * float32x4_t vrsqrtsq_f32 (float32x4_t, float32x4_t)
   24299      _Form of expected instruction(s):_ `vrsqrts.f32 Q0, Q0, Q0'
   24300 
   24301 5.50.3.25 Vector shift left
   24302 ...........................
   24303 
   24304    * uint32x2_t vshl_u32 (uint32x2_t, int32x2_t)
   24305      _Form of expected instruction(s):_ `vshl.u32 D0, D0, D0'
   24306 
   24307    * uint16x4_t vshl_u16 (uint16x4_t, int16x4_t)
   24308      _Form of expected instruction(s):_ `vshl.u16 D0, D0, D0'
   24309 
   24310    * uint8x8_t vshl_u8 (uint8x8_t, int8x8_t)
   24311      _Form of expected instruction(s):_ `vshl.u8 D0, D0, D0'
   24312 
   24313    * int32x2_t vshl_s32 (int32x2_t, int32x2_t)
   24314      _Form of expected instruction(s):_ `vshl.s32 D0, D0, D0'
   24315 
   24316    * int16x4_t vshl_s16 (int16x4_t, int16x4_t)
   24317      _Form of expected instruction(s):_ `vshl.s16 D0, D0, D0'
   24318 
   24319    * int8x8_t vshl_s8 (int8x8_t, int8x8_t)
   24320      _Form of expected instruction(s):_ `vshl.s8 D0, D0, D0'
   24321 
   24322    * uint64x1_t vshl_u64 (uint64x1_t, int64x1_t)
   24323      _Form of expected instruction(s):_ `vshl.u64 D0, D0, D0'
   24324 
   24325    * int64x1_t vshl_s64 (int64x1_t, int64x1_t)
   24326      _Form of expected instruction(s):_ `vshl.s64 D0, D0, D0'
   24327 
   24328    * uint32x4_t vshlq_u32 (uint32x4_t, int32x4_t)
   24329      _Form of expected instruction(s):_ `vshl.u32 Q0, Q0, Q0'
   24330 
   24331    * uint16x8_t vshlq_u16 (uint16x8_t, int16x8_t)
   24332      _Form of expected instruction(s):_ `vshl.u16 Q0, Q0, Q0'
   24333 
   24334    * uint8x16_t vshlq_u8 (uint8x16_t, int8x16_t)
   24335      _Form of expected instruction(s):_ `vshl.u8 Q0, Q0, Q0'
   24336 
   24337    * int32x4_t vshlq_s32 (int32x4_t, int32x4_t)
   24338      _Form of expected instruction(s):_ `vshl.s32 Q0, Q0, Q0'
   24339 
   24340    * int16x8_t vshlq_s16 (int16x8_t, int16x8_t)
   24341      _Form of expected instruction(s):_ `vshl.s16 Q0, Q0, Q0'
   24342 
   24343    * int8x16_t vshlq_s8 (int8x16_t, int8x16_t)
   24344      _Form of expected instruction(s):_ `vshl.s8 Q0, Q0, Q0'
   24345 
   24346    * uint64x2_t vshlq_u64 (uint64x2_t, int64x2_t)
   24347      _Form of expected instruction(s):_ `vshl.u64 Q0, Q0, Q0'
   24348 
   24349    * int64x2_t vshlq_s64 (int64x2_t, int64x2_t)
   24350      _Form of expected instruction(s):_ `vshl.s64 Q0, Q0, Q0'
   24351 
   24352    * uint32x2_t vrshl_u32 (uint32x2_t, int32x2_t)
   24353      _Form of expected instruction(s):_ `vrshl.u32 D0, D0, D0'
   24354 
   24355    * uint16x4_t vrshl_u16 (uint16x4_t, int16x4_t)
   24356      _Form of expected instruction(s):_ `vrshl.u16 D0, D0, D0'
   24357 
   24358    * uint8x8_t vrshl_u8 (uint8x8_t, int8x8_t)
   24359      _Form of expected instruction(s):_ `vrshl.u8 D0, D0, D0'
   24360 
   24361    * int32x2_t vrshl_s32 (int32x2_t, int32x2_t)
   24362      _Form of expected instruction(s):_ `vrshl.s32 D0, D0, D0'
   24363 
   24364    * int16x4_t vrshl_s16 (int16x4_t, int16x4_t)
   24365      _Form of expected instruction(s):_ `vrshl.s16 D0, D0, D0'
   24366 
   24367    * int8x8_t vrshl_s8 (int8x8_t, int8x8_t)
   24368      _Form of expected instruction(s):_ `vrshl.s8 D0, D0, D0'
   24369 
   24370    * uint64x1_t vrshl_u64 (uint64x1_t, int64x1_t)
   24371      _Form of expected instruction(s):_ `vrshl.u64 D0, D0, D0'
   24372 
   24373    * int64x1_t vrshl_s64 (int64x1_t, int64x1_t)
   24374      _Form of expected instruction(s):_ `vrshl.s64 D0, D0, D0'
   24375 
   24376    * uint32x4_t vrshlq_u32 (uint32x4_t, int32x4_t)
   24377      _Form of expected instruction(s):_ `vrshl.u32 Q0, Q0, Q0'
   24378 
   24379    * uint16x8_t vrshlq_u16 (uint16x8_t, int16x8_t)
   24380      _Form of expected instruction(s):_ `vrshl.u16 Q0, Q0, Q0'
   24381 
   24382    * uint8x16_t vrshlq_u8 (uint8x16_t, int8x16_t)
   24383      _Form of expected instruction(s):_ `vrshl.u8 Q0, Q0, Q0'
   24384 
   24385    * int32x4_t vrshlq_s32 (int32x4_t, int32x4_t)
   24386      _Form of expected instruction(s):_ `vrshl.s32 Q0, Q0, Q0'
   24387 
   24388    * int16x8_t vrshlq_s16 (int16x8_t, int16x8_t)
   24389      _Form of expected instruction(s):_ `vrshl.s16 Q0, Q0, Q0'
   24390 
   24391    * int8x16_t vrshlq_s8 (int8x16_t, int8x16_t)
   24392      _Form of expected instruction(s):_ `vrshl.s8 Q0, Q0, Q0'
   24393 
   24394    * uint64x2_t vrshlq_u64 (uint64x2_t, int64x2_t)
   24395      _Form of expected instruction(s):_ `vrshl.u64 Q0, Q0, Q0'
   24396 
   24397    * int64x2_t vrshlq_s64 (int64x2_t, int64x2_t)
   24398      _Form of expected instruction(s):_ `vrshl.s64 Q0, Q0, Q0'
   24399 
   24400    * uint32x2_t vqshl_u32 (uint32x2_t, int32x2_t)
   24401      _Form of expected instruction(s):_ `vqshl.u32 D0, D0, D0'
   24402 
   24403    * uint16x4_t vqshl_u16 (uint16x4_t, int16x4_t)
   24404      _Form of expected instruction(s):_ `vqshl.u16 D0, D0, D0'
   24405 
   24406    * uint8x8_t vqshl_u8 (uint8x8_t, int8x8_t)
   24407      _Form of expected instruction(s):_ `vqshl.u8 D0, D0, D0'
   24408 
   24409    * int32x2_t vqshl_s32 (int32x2_t, int32x2_t)
   24410      _Form of expected instruction(s):_ `vqshl.s32 D0, D0, D0'
   24411 
   24412    * int16x4_t vqshl_s16 (int16x4_t, int16x4_t)
   24413      _Form of expected instruction(s):_ `vqshl.s16 D0, D0, D0'
   24414 
   24415    * int8x8_t vqshl_s8 (int8x8_t, int8x8_t)
   24416      _Form of expected instruction(s):_ `vqshl.s8 D0, D0, D0'
   24417 
   24418    * uint64x1_t vqshl_u64 (uint64x1_t, int64x1_t)
   24419      _Form of expected instruction(s):_ `vqshl.u64 D0, D0, D0'
   24420 
   24421    * int64x1_t vqshl_s64 (int64x1_t, int64x1_t)
   24422      _Form of expected instruction(s):_ `vqshl.s64 D0, D0, D0'
   24423 
   24424    * uint32x4_t vqshlq_u32 (uint32x4_t, int32x4_t)
   24425      _Form of expected instruction(s):_ `vqshl.u32 Q0, Q0, Q0'
   24426 
   24427    * uint16x8_t vqshlq_u16 (uint16x8_t, int16x8_t)
   24428      _Form of expected instruction(s):_ `vqshl.u16 Q0, Q0, Q0'
   24429 
   24430    * uint8x16_t vqshlq_u8 (uint8x16_t, int8x16_t)
   24431      _Form of expected instruction(s):_ `vqshl.u8 Q0, Q0, Q0'
   24432 
   24433    * int32x4_t vqshlq_s32 (int32x4_t, int32x4_t)
   24434      _Form of expected instruction(s):_ `vqshl.s32 Q0, Q0, Q0'
   24435 
   24436    * int16x8_t vqshlq_s16 (int16x8_t, int16x8_t)
   24437      _Form of expected instruction(s):_ `vqshl.s16 Q0, Q0, Q0'
   24438 
   24439    * int8x16_t vqshlq_s8 (int8x16_t, int8x16_t)
   24440      _Form of expected instruction(s):_ `vqshl.s8 Q0, Q0, Q0'
   24441 
   24442    * uint64x2_t vqshlq_u64 (uint64x2_t, int64x2_t)
   24443      _Form of expected instruction(s):_ `vqshl.u64 Q0, Q0, Q0'
   24444 
   24445    * int64x2_t vqshlq_s64 (int64x2_t, int64x2_t)
   24446      _Form of expected instruction(s):_ `vqshl.s64 Q0, Q0, Q0'
   24447 
   24448    * uint32x2_t vqrshl_u32 (uint32x2_t, int32x2_t)
   24449      _Form of expected instruction(s):_ `vqrshl.u32 D0, D0, D0'
   24450 
   24451    * uint16x4_t vqrshl_u16 (uint16x4_t, int16x4_t)
   24452      _Form of expected instruction(s):_ `vqrshl.u16 D0, D0, D0'
   24453 
   24454    * uint8x8_t vqrshl_u8 (uint8x8_t, int8x8_t)
   24455      _Form of expected instruction(s):_ `vqrshl.u8 D0, D0, D0'
   24456 
   24457    * int32x2_t vqrshl_s32 (int32x2_t, int32x2_t)
   24458      _Form of expected instruction(s):_ `vqrshl.s32 D0, D0, D0'
   24459 
   24460    * int16x4_t vqrshl_s16 (int16x4_t, int16x4_t)
   24461      _Form of expected instruction(s):_ `vqrshl.s16 D0, D0, D0'
   24462 
   24463    * int8x8_t vqrshl_s8 (int8x8_t, int8x8_t)
   24464      _Form of expected instruction(s):_ `vqrshl.s8 D0, D0, D0'
   24465 
   24466    * uint64x1_t vqrshl_u64 (uint64x1_t, int64x1_t)
   24467      _Form of expected instruction(s):_ `vqrshl.u64 D0, D0, D0'
   24468 
   24469    * int64x1_t vqrshl_s64 (int64x1_t, int64x1_t)
   24470      _Form of expected instruction(s):_ `vqrshl.s64 D0, D0, D0'
   24471 
   24472    * uint32x4_t vqrshlq_u32 (uint32x4_t, int32x4_t)
   24473      _Form of expected instruction(s):_ `vqrshl.u32 Q0, Q0, Q0'
   24474 
   24475    * uint16x8_t vqrshlq_u16 (uint16x8_t, int16x8_t)
   24476      _Form of expected instruction(s):_ `vqrshl.u16 Q0, Q0, Q0'
   24477 
   24478    * uint8x16_t vqrshlq_u8 (uint8x16_t, int8x16_t)
   24479      _Form of expected instruction(s):_ `vqrshl.u8 Q0, Q0, Q0'
   24480 
   24481    * int32x4_t vqrshlq_s32 (int32x4_t, int32x4_t)
   24482      _Form of expected instruction(s):_ `vqrshl.s32 Q0, Q0, Q0'
   24483 
   24484    * int16x8_t vqrshlq_s16 (int16x8_t, int16x8_t)
   24485      _Form of expected instruction(s):_ `vqrshl.s16 Q0, Q0, Q0'
   24486 
   24487    * int8x16_t vqrshlq_s8 (int8x16_t, int8x16_t)
   24488      _Form of expected instruction(s):_ `vqrshl.s8 Q0, Q0, Q0'
   24489 
   24490    * uint64x2_t vqrshlq_u64 (uint64x2_t, int64x2_t)
   24491      _Form of expected instruction(s):_ `vqrshl.u64 Q0, Q0, Q0'
   24492 
   24493    * int64x2_t vqrshlq_s64 (int64x2_t, int64x2_t)
   24494      _Form of expected instruction(s):_ `vqrshl.s64 Q0, Q0, Q0'
   24495 
   24496 5.50.3.26 Vector shift left by constant
   24497 .......................................
   24498 
   24499    * uint32x2_t vshl_n_u32 (uint32x2_t, const int)
   24500      _Form of expected instruction(s):_ `vshl.i32 D0, D0, #0'
   24501 
   24502    * uint16x4_t vshl_n_u16 (uint16x4_t, const int)
   24503      _Form of expected instruction(s):_ `vshl.i16 D0, D0, #0'
   24504 
   24505    * uint8x8_t vshl_n_u8 (uint8x8_t, const int)
   24506      _Form of expected instruction(s):_ `vshl.i8 D0, D0, #0'
   24507 
   24508    * int32x2_t vshl_n_s32 (int32x2_t, const int)
   24509      _Form of expected instruction(s):_ `vshl.i32 D0, D0, #0'
   24510 
   24511    * int16x4_t vshl_n_s16 (int16x4_t, const int)
   24512      _Form of expected instruction(s):_ `vshl.i16 D0, D0, #0'
   24513 
   24514    * int8x8_t vshl_n_s8 (int8x8_t, const int)
   24515      _Form of expected instruction(s):_ `vshl.i8 D0, D0, #0'
   24516 
   24517    * uint64x1_t vshl_n_u64 (uint64x1_t, const int)
   24518      _Form of expected instruction(s):_ `vshl.i64 D0, D0, #0'
   24519 
   24520    * int64x1_t vshl_n_s64 (int64x1_t, const int)
   24521      _Form of expected instruction(s):_ `vshl.i64 D0, D0, #0'
   24522 
   24523    * uint32x4_t vshlq_n_u32 (uint32x4_t, const int)
   24524      _Form of expected instruction(s):_ `vshl.i32 Q0, Q0, #0'
   24525 
   24526    * uint16x8_t vshlq_n_u16 (uint16x8_t, const int)
   24527      _Form of expected instruction(s):_ `vshl.i16 Q0, Q0, #0'
   24528 
   24529    * uint8x16_t vshlq_n_u8 (uint8x16_t, const int)
   24530      _Form of expected instruction(s):_ `vshl.i8 Q0, Q0, #0'
   24531 
   24532    * int32x4_t vshlq_n_s32 (int32x4_t, const int)
   24533      _Form of expected instruction(s):_ `vshl.i32 Q0, Q0, #0'
   24534 
   24535    * int16x8_t vshlq_n_s16 (int16x8_t, const int)
   24536      _Form of expected instruction(s):_ `vshl.i16 Q0, Q0, #0'
   24537 
   24538    * int8x16_t vshlq_n_s8 (int8x16_t, const int)
   24539      _Form of expected instruction(s):_ `vshl.i8 Q0, Q0, #0'
   24540 
   24541    * uint64x2_t vshlq_n_u64 (uint64x2_t, const int)
   24542      _Form of expected instruction(s):_ `vshl.i64 Q0, Q0, #0'
   24543 
   24544    * int64x2_t vshlq_n_s64 (int64x2_t, const int)
   24545      _Form of expected instruction(s):_ `vshl.i64 Q0, Q0, #0'
   24546 
   24547    * uint32x2_t vqshl_n_u32 (uint32x2_t, const int)
   24548      _Form of expected instruction(s):_ `vqshl.u32 D0, D0, #0'
   24549 
   24550    * uint16x4_t vqshl_n_u16 (uint16x4_t, const int)
   24551      _Form of expected instruction(s):_ `vqshl.u16 D0, D0, #0'
   24552 
   24553    * uint8x8_t vqshl_n_u8 (uint8x8_t, const int)
   24554      _Form of expected instruction(s):_ `vqshl.u8 D0, D0, #0'
   24555 
   24556    * int32x2_t vqshl_n_s32 (int32x2_t, const int)
   24557      _Form of expected instruction(s):_ `vqshl.s32 D0, D0, #0'
   24558 
   24559    * int16x4_t vqshl_n_s16 (int16x4_t, const int)
   24560      _Form of expected instruction(s):_ `vqshl.s16 D0, D0, #0'
   24561 
   24562    * int8x8_t vqshl_n_s8 (int8x8_t, const int)
   24563      _Form of expected instruction(s):_ `vqshl.s8 D0, D0, #0'
   24564 
   24565    * uint64x1_t vqshl_n_u64 (uint64x1_t, const int)
   24566      _Form of expected instruction(s):_ `vqshl.u64 D0, D0, #0'
   24567 
   24568    * int64x1_t vqshl_n_s64 (int64x1_t, const int)
   24569      _Form of expected instruction(s):_ `vqshl.s64 D0, D0, #0'
   24570 
   24571    * uint32x4_t vqshlq_n_u32 (uint32x4_t, const int)
   24572      _Form of expected instruction(s):_ `vqshl.u32 Q0, Q0, #0'
   24573 
   24574    * uint16x8_t vqshlq_n_u16 (uint16x8_t, const int)
   24575      _Form of expected instruction(s):_ `vqshl.u16 Q0, Q0, #0'
   24576 
   24577    * uint8x16_t vqshlq_n_u8 (uint8x16_t, const int)
   24578      _Form of expected instruction(s):_ `vqshl.u8 Q0, Q0, #0'
   24579 
   24580    * int32x4_t vqshlq_n_s32 (int32x4_t, const int)
   24581      _Form of expected instruction(s):_ `vqshl.s32 Q0, Q0, #0'
   24582 
   24583    * int16x8_t vqshlq_n_s16 (int16x8_t, const int)
   24584      _Form of expected instruction(s):_ `vqshl.s16 Q0, Q0, #0'
   24585 
   24586    * int8x16_t vqshlq_n_s8 (int8x16_t, const int)
   24587      _Form of expected instruction(s):_ `vqshl.s8 Q0, Q0, #0'
   24588 
   24589    * uint64x2_t vqshlq_n_u64 (uint64x2_t, const int)
   24590      _Form of expected instruction(s):_ `vqshl.u64 Q0, Q0, #0'
   24591 
   24592    * int64x2_t vqshlq_n_s64 (int64x2_t, const int)
   24593      _Form of expected instruction(s):_ `vqshl.s64 Q0, Q0, #0'
   24594 
   24595    * uint64x1_t vqshlu_n_s64 (int64x1_t, const int)
   24596      _Form of expected instruction(s):_ `vqshlu.s64 D0, D0, #0'
   24597 
   24598    * uint32x2_t vqshlu_n_s32 (int32x2_t, const int)
   24599      _Form of expected instruction(s):_ `vqshlu.s32 D0, D0, #0'
   24600 
   24601    * uint16x4_t vqshlu_n_s16 (int16x4_t, const int)
   24602      _Form of expected instruction(s):_ `vqshlu.s16 D0, D0, #0'
   24603 
   24604    * uint8x8_t vqshlu_n_s8 (int8x8_t, const int)
   24605      _Form of expected instruction(s):_ `vqshlu.s8 D0, D0, #0'
   24606 
   24607    * uint64x2_t vqshluq_n_s64 (int64x2_t, const int)
   24608      _Form of expected instruction(s):_ `vqshlu.s64 Q0, Q0, #0'
   24609 
   24610    * uint32x4_t vqshluq_n_s32 (int32x4_t, const int)
   24611      _Form of expected instruction(s):_ `vqshlu.s32 Q0, Q0, #0'
   24612 
   24613    * uint16x8_t vqshluq_n_s16 (int16x8_t, const int)
   24614      _Form of expected instruction(s):_ `vqshlu.s16 Q0, Q0, #0'
   24615 
   24616    * uint8x16_t vqshluq_n_s8 (int8x16_t, const int)
   24617      _Form of expected instruction(s):_ `vqshlu.s8 Q0, Q0, #0'
   24618 
   24619    * uint64x2_t vshll_n_u32 (uint32x2_t, const int)
   24620      _Form of expected instruction(s):_ `vshll.u32 Q0, D0, #0'
   24621 
   24622    * uint32x4_t vshll_n_u16 (uint16x4_t, const int)
   24623      _Form of expected instruction(s):_ `vshll.u16 Q0, D0, #0'
   24624 
   24625    * uint16x8_t vshll_n_u8 (uint8x8_t, const int)
   24626      _Form of expected instruction(s):_ `vshll.u8 Q0, D0, #0'
   24627 
   24628    * int64x2_t vshll_n_s32 (int32x2_t, const int)
   24629      _Form of expected instruction(s):_ `vshll.s32 Q0, D0, #0'
   24630 
   24631    * int32x4_t vshll_n_s16 (int16x4_t, const int)
   24632      _Form of expected instruction(s):_ `vshll.s16 Q0, D0, #0'
   24633 
   24634    * int16x8_t vshll_n_s8 (int8x8_t, const int)
   24635      _Form of expected instruction(s):_ `vshll.s8 Q0, D0, #0'
   24636 
   24637 5.50.3.27 Vector shift right by constant
   24638 ........................................
   24639 
   24640    * uint32x2_t vshr_n_u32 (uint32x2_t, const int)
   24641      _Form of expected instruction(s):_ `vshr.u32 D0, D0, #0'
   24642 
   24643    * uint16x4_t vshr_n_u16 (uint16x4_t, const int)
   24644      _Form of expected instruction(s):_ `vshr.u16 D0, D0, #0'
   24645 
   24646    * uint8x8_t vshr_n_u8 (uint8x8_t, const int)
   24647      _Form of expected instruction(s):_ `vshr.u8 D0, D0, #0'
   24648 
   24649    * int32x2_t vshr_n_s32 (int32x2_t, const int)
   24650      _Form of expected instruction(s):_ `vshr.s32 D0, D0, #0'
   24651 
   24652    * int16x4_t vshr_n_s16 (int16x4_t, const int)
   24653      _Form of expected instruction(s):_ `vshr.s16 D0, D0, #0'
   24654 
   24655    * int8x8_t vshr_n_s8 (int8x8_t, const int)
   24656      _Form of expected instruction(s):_ `vshr.s8 D0, D0, #0'
   24657 
   24658    * uint64x1_t vshr_n_u64 (uint64x1_t, const int)
   24659      _Form of expected instruction(s):_ `vshr.u64 D0, D0, #0'
   24660 
   24661    * int64x1_t vshr_n_s64 (int64x1_t, const int)
   24662      _Form of expected instruction(s):_ `vshr.s64 D0, D0, #0'
   24663 
   24664    * uint32x4_t vshrq_n_u32 (uint32x4_t, const int)
   24665      _Form of expected instruction(s):_ `vshr.u32 Q0, Q0, #0'
   24666 
   24667    * uint16x8_t vshrq_n_u16 (uint16x8_t, const int)
   24668      _Form of expected instruction(s):_ `vshr.u16 Q0, Q0, #0'
   24669 
   24670    * uint8x16_t vshrq_n_u8 (uint8x16_t, const int)
   24671      _Form of expected instruction(s):_ `vshr.u8 Q0, Q0, #0'
   24672 
   24673    * int32x4_t vshrq_n_s32 (int32x4_t, const int)
   24674      _Form of expected instruction(s):_ `vshr.s32 Q0, Q0, #0'
   24675 
   24676    * int16x8_t vshrq_n_s16 (int16x8_t, const int)
   24677      _Form of expected instruction(s):_ `vshr.s16 Q0, Q0, #0'
   24678 
   24679    * int8x16_t vshrq_n_s8 (int8x16_t, const int)
   24680      _Form of expected instruction(s):_ `vshr.s8 Q0, Q0, #0'
   24681 
   24682    * uint64x2_t vshrq_n_u64 (uint64x2_t, const int)
   24683      _Form of expected instruction(s):_ `vshr.u64 Q0, Q0, #0'
   24684 
   24685    * int64x2_t vshrq_n_s64 (int64x2_t, const int)
   24686      _Form of expected instruction(s):_ `vshr.s64 Q0, Q0, #0'
   24687 
   24688    * uint32x2_t vrshr_n_u32 (uint32x2_t, const int)
   24689      _Form of expected instruction(s):_ `vrshr.u32 D0, D0, #0'
   24690 
   24691    * uint16x4_t vrshr_n_u16 (uint16x4_t, const int)
   24692      _Form of expected instruction(s):_ `vrshr.u16 D0, D0, #0'
   24693 
   24694    * uint8x8_t vrshr_n_u8 (uint8x8_t, const int)
   24695      _Form of expected instruction(s):_ `vrshr.u8 D0, D0, #0'
   24696 
   24697    * int32x2_t vrshr_n_s32 (int32x2_t, const int)
   24698      _Form of expected instruction(s):_ `vrshr.s32 D0, D0, #0'
   24699 
   24700    * int16x4_t vrshr_n_s16 (int16x4_t, const int)
   24701      _Form of expected instruction(s):_ `vrshr.s16 D0, D0, #0'
   24702 
   24703    * int8x8_t vrshr_n_s8 (int8x8_t, const int)
   24704      _Form of expected instruction(s):_ `vrshr.s8 D0, D0, #0'
   24705 
   24706    * uint64x1_t vrshr_n_u64 (uint64x1_t, const int)
   24707      _Form of expected instruction(s):_ `vrshr.u64 D0, D0, #0'
   24708 
   24709    * int64x1_t vrshr_n_s64 (int64x1_t, const int)
   24710      _Form of expected instruction(s):_ `vrshr.s64 D0, D0, #0'
   24711 
   24712    * uint32x4_t vrshrq_n_u32 (uint32x4_t, const int)
   24713      _Form of expected instruction(s):_ `vrshr.u32 Q0, Q0, #0'
   24714 
   24715    * uint16x8_t vrshrq_n_u16 (uint16x8_t, const int)
   24716      _Form of expected instruction(s):_ `vrshr.u16 Q0, Q0, #0'
   24717 
   24718    * uint8x16_t vrshrq_n_u8 (uint8x16_t, const int)
   24719      _Form of expected instruction(s):_ `vrshr.u8 Q0, Q0, #0'
   24720 
   24721    * int32x4_t vrshrq_n_s32 (int32x4_t, const int)
   24722      _Form of expected instruction(s):_ `vrshr.s32 Q0, Q0, #0'
   24723 
   24724    * int16x8_t vrshrq_n_s16 (int16x8_t, const int)
   24725      _Form of expected instruction(s):_ `vrshr.s16 Q0, Q0, #0'
   24726 
   24727    * int8x16_t vrshrq_n_s8 (int8x16_t, const int)
   24728      _Form of expected instruction(s):_ `vrshr.s8 Q0, Q0, #0'
   24729 
   24730    * uint64x2_t vrshrq_n_u64 (uint64x2_t, const int)
   24731      _Form of expected instruction(s):_ `vrshr.u64 Q0, Q0, #0'
   24732 
   24733    * int64x2_t vrshrq_n_s64 (int64x2_t, const int)
   24734      _Form of expected instruction(s):_ `vrshr.s64 Q0, Q0, #0'
   24735 
   24736    * uint32x2_t vshrn_n_u64 (uint64x2_t, const int)
   24737      _Form of expected instruction(s):_ `vshrn.i64 D0, Q0, #0'
   24738 
   24739    * uint16x4_t vshrn_n_u32 (uint32x4_t, const int)
   24740      _Form of expected instruction(s):_ `vshrn.i32 D0, Q0, #0'
   24741 
   24742    * uint8x8_t vshrn_n_u16 (uint16x8_t, const int)
   24743      _Form of expected instruction(s):_ `vshrn.i16 D0, Q0, #0'
   24744 
   24745    * int32x2_t vshrn_n_s64 (int64x2_t, const int)
   24746      _Form of expected instruction(s):_ `vshrn.i64 D0, Q0, #0'
   24747 
   24748    * int16x4_t vshrn_n_s32 (int32x4_t, const int)
   24749      _Form of expected instruction(s):_ `vshrn.i32 D0, Q0, #0'
   24750 
   24751    * int8x8_t vshrn_n_s16 (int16x8_t, const int)
   24752      _Form of expected instruction(s):_ `vshrn.i16 D0, Q0, #0'
   24753 
   24754    * uint32x2_t vrshrn_n_u64 (uint64x2_t, const int)
   24755      _Form of expected instruction(s):_ `vrshrn.i64 D0, Q0, #0'
   24756 
   24757    * uint16x4_t vrshrn_n_u32 (uint32x4_t, const int)
   24758      _Form of expected instruction(s):_ `vrshrn.i32 D0, Q0, #0'
   24759 
   24760    * uint8x8_t vrshrn_n_u16 (uint16x8_t, const int)
   24761      _Form of expected instruction(s):_ `vrshrn.i16 D0, Q0, #0'
   24762 
   24763    * int32x2_t vrshrn_n_s64 (int64x2_t, const int)
   24764      _Form of expected instruction(s):_ `vrshrn.i64 D0, Q0, #0'
   24765 
   24766    * int16x4_t vrshrn_n_s32 (int32x4_t, const int)
   24767      _Form of expected instruction(s):_ `vrshrn.i32 D0, Q0, #0'
   24768 
   24769    * int8x8_t vrshrn_n_s16 (int16x8_t, const int)
   24770      _Form of expected instruction(s):_ `vrshrn.i16 D0, Q0, #0'
   24771 
   24772    * uint32x2_t vqshrn_n_u64 (uint64x2_t, const int)
   24773      _Form of expected instruction(s):_ `vqshrn.u64 D0, Q0, #0'
   24774 
   24775    * uint16x4_t vqshrn_n_u32 (uint32x4_t, const int)
   24776      _Form of expected instruction(s):_ `vqshrn.u32 D0, Q0, #0'
   24777 
   24778    * uint8x8_t vqshrn_n_u16 (uint16x8_t, const int)
   24779      _Form of expected instruction(s):_ `vqshrn.u16 D0, Q0, #0'
   24780 
   24781    * int32x2_t vqshrn_n_s64 (int64x2_t, const int)
   24782      _Form of expected instruction(s):_ `vqshrn.s64 D0, Q0, #0'
   24783 
   24784    * int16x4_t vqshrn_n_s32 (int32x4_t, const int)
   24785      _Form of expected instruction(s):_ `vqshrn.s32 D0, Q0, #0'
   24786 
   24787    * int8x8_t vqshrn_n_s16 (int16x8_t, const int)
   24788      _Form of expected instruction(s):_ `vqshrn.s16 D0, Q0, #0'
   24789 
   24790    * uint32x2_t vqrshrn_n_u64 (uint64x2_t, const int)
   24791      _Form of expected instruction(s):_ `vqrshrn.u64 D0, Q0, #0'
   24792 
   24793    * uint16x4_t vqrshrn_n_u32 (uint32x4_t, const int)
   24794      _Form of expected instruction(s):_ `vqrshrn.u32 D0, Q0, #0'
   24795 
   24796    * uint8x8_t vqrshrn_n_u16 (uint16x8_t, const int)
   24797      _Form of expected instruction(s):_ `vqrshrn.u16 D0, Q0, #0'
   24798 
   24799    * int32x2_t vqrshrn_n_s64 (int64x2_t, const int)
   24800      _Form of expected instruction(s):_ `vqrshrn.s64 D0, Q0, #0'
   24801 
   24802    * int16x4_t vqrshrn_n_s32 (int32x4_t, const int)
   24803      _Form of expected instruction(s):_ `vqrshrn.s32 D0, Q0, #0'
   24804 
   24805    * int8x8_t vqrshrn_n_s16 (int16x8_t, const int)
   24806      _Form of expected instruction(s):_ `vqrshrn.s16 D0, Q0, #0'
   24807 
   24808    * uint32x2_t vqshrun_n_s64 (int64x2_t, const int)
   24809      _Form of expected instruction(s):_ `vqshrun.s64 D0, Q0, #0'
   24810 
   24811    * uint16x4_t vqshrun_n_s32 (int32x4_t, const int)
   24812      _Form of expected instruction(s):_ `vqshrun.s32 D0, Q0, #0'
   24813 
   24814    * uint8x8_t vqshrun_n_s16 (int16x8_t, const int)
   24815      _Form of expected instruction(s):_ `vqshrun.s16 D0, Q0, #0'
   24816 
   24817    * uint32x2_t vqrshrun_n_s64 (int64x2_t, const int)
   24818      _Form of expected instruction(s):_ `vqrshrun.s64 D0, Q0, #0'
   24819 
   24820    * uint16x4_t vqrshrun_n_s32 (int32x4_t, const int)
   24821      _Form of expected instruction(s):_ `vqrshrun.s32 D0, Q0, #0'
   24822 
   24823    * uint8x8_t vqrshrun_n_s16 (int16x8_t, const int)
   24824      _Form of expected instruction(s):_ `vqrshrun.s16 D0, Q0, #0'
   24825 
   24826 5.50.3.28 Vector shift right by constant and accumulate
   24827 .......................................................
   24828 
   24829    * uint32x2_t vsra_n_u32 (uint32x2_t, uint32x2_t, const int)
   24830      _Form of expected instruction(s):_ `vsra.u32 D0, D0, #0'
   24831 
   24832    * uint16x4_t vsra_n_u16 (uint16x4_t, uint16x4_t, const int)
   24833      _Form of expected instruction(s):_ `vsra.u16 D0, D0, #0'
   24834 
   24835    * uint8x8_t vsra_n_u8 (uint8x8_t, uint8x8_t, const int)
   24836      _Form of expected instruction(s):_ `vsra.u8 D0, D0, #0'
   24837 
   24838    * int32x2_t vsra_n_s32 (int32x2_t, int32x2_t, const int)
   24839      _Form of expected instruction(s):_ `vsra.s32 D0, D0, #0'
   24840 
   24841    * int16x4_t vsra_n_s16 (int16x4_t, int16x4_t, const int)
   24842      _Form of expected instruction(s):_ `vsra.s16 D0, D0, #0'
   24843 
   24844    * int8x8_t vsra_n_s8 (int8x8_t, int8x8_t, const int)
   24845      _Form of expected instruction(s):_ `vsra.s8 D0, D0, #0'
   24846 
   24847    * uint64x1_t vsra_n_u64 (uint64x1_t, uint64x1_t, const int)
   24848      _Form of expected instruction(s):_ `vsra.u64 D0, D0, #0'
   24849 
   24850    * int64x1_t vsra_n_s64 (int64x1_t, int64x1_t, const int)
   24851      _Form of expected instruction(s):_ `vsra.s64 D0, D0, #0'
   24852 
   24853    * uint32x4_t vsraq_n_u32 (uint32x4_t, uint32x4_t, const int)
   24854      _Form of expected instruction(s):_ `vsra.u32 Q0, Q0, #0'
   24855 
   24856    * uint16x8_t vsraq_n_u16 (uint16x8_t, uint16x8_t, const int)
   24857      _Form of expected instruction(s):_ `vsra.u16 Q0, Q0, #0'
   24858 
   24859    * uint8x16_t vsraq_n_u8 (uint8x16_t, uint8x16_t, const int)
   24860      _Form of expected instruction(s):_ `vsra.u8 Q0, Q0, #0'
   24861 
   24862    * int32x4_t vsraq_n_s32 (int32x4_t, int32x4_t, const int)
   24863      _Form of expected instruction(s):_ `vsra.s32 Q0, Q0, #0'
   24864 
   24865    * int16x8_t vsraq_n_s16 (int16x8_t, int16x8_t, const int)
   24866      _Form of expected instruction(s):_ `vsra.s16 Q0, Q0, #0'
   24867 
   24868    * int8x16_t vsraq_n_s8 (int8x16_t, int8x16_t, const int)
   24869      _Form of expected instruction(s):_ `vsra.s8 Q0, Q0, #0'
   24870 
   24871    * uint64x2_t vsraq_n_u64 (uint64x2_t, uint64x2_t, const int)
   24872      _Form of expected instruction(s):_ `vsra.u64 Q0, Q0, #0'
   24873 
   24874    * int64x2_t vsraq_n_s64 (int64x2_t, int64x2_t, const int)
   24875      _Form of expected instruction(s):_ `vsra.s64 Q0, Q0, #0'
   24876 
   24877    * uint32x2_t vrsra_n_u32 (uint32x2_t, uint32x2_t, const int)
   24878      _Form of expected instruction(s):_ `vrsra.u32 D0, D0, #0'
   24879 
   24880    * uint16x4_t vrsra_n_u16 (uint16x4_t, uint16x4_t, const int)
   24881      _Form of expected instruction(s):_ `vrsra.u16 D0, D0, #0'
   24882 
   24883    * uint8x8_t vrsra_n_u8 (uint8x8_t, uint8x8_t, const int)
   24884      _Form of expected instruction(s):_ `vrsra.u8 D0, D0, #0'
   24885 
   24886    * int32x2_t vrsra_n_s32 (int32x2_t, int32x2_t, const int)
   24887      _Form of expected instruction(s):_ `vrsra.s32 D0, D0, #0'
   24888 
   24889    * int16x4_t vrsra_n_s16 (int16x4_t, int16x4_t, const int)
   24890      _Form of expected instruction(s):_ `vrsra.s16 D0, D0, #0'
   24891 
   24892    * int8x8_t vrsra_n_s8 (int8x8_t, int8x8_t, const int)
   24893      _Form of expected instruction(s):_ `vrsra.s8 D0, D0, #0'
   24894 
   24895    * uint64x1_t vrsra_n_u64 (uint64x1_t, uint64x1_t, const int)
   24896      _Form of expected instruction(s):_ `vrsra.u64 D0, D0, #0'
   24897 
   24898    * int64x1_t vrsra_n_s64 (int64x1_t, int64x1_t, const int)
   24899      _Form of expected instruction(s):_ `vrsra.s64 D0, D0, #0'
   24900 
   24901    * uint32x4_t vrsraq_n_u32 (uint32x4_t, uint32x4_t, const int)
   24902      _Form of expected instruction(s):_ `vrsra.u32 Q0, Q0, #0'
   24903 
   24904    * uint16x8_t vrsraq_n_u16 (uint16x8_t, uint16x8_t, const int)
   24905      _Form of expected instruction(s):_ `vrsra.u16 Q0, Q0, #0'
   24906 
   24907    * uint8x16_t vrsraq_n_u8 (uint8x16_t, uint8x16_t, const int)
   24908      _Form of expected instruction(s):_ `vrsra.u8 Q0, Q0, #0'
   24909 
   24910    * int32x4_t vrsraq_n_s32 (int32x4_t, int32x4_t, const int)
   24911      _Form of expected instruction(s):_ `vrsra.s32 Q0, Q0, #0'
   24912 
   24913    * int16x8_t vrsraq_n_s16 (int16x8_t, int16x8_t, const int)
   24914      _Form of expected instruction(s):_ `vrsra.s16 Q0, Q0, #0'
   24915 
   24916    * int8x16_t vrsraq_n_s8 (int8x16_t, int8x16_t, const int)
   24917      _Form of expected instruction(s):_ `vrsra.s8 Q0, Q0, #0'
   24918 
   24919    * uint64x2_t vrsraq_n_u64 (uint64x2_t, uint64x2_t, const int)
   24920      _Form of expected instruction(s):_ `vrsra.u64 Q0, Q0, #0'
   24921 
   24922    * int64x2_t vrsraq_n_s64 (int64x2_t, int64x2_t, const int)
   24923      _Form of expected instruction(s):_ `vrsra.s64 Q0, Q0, #0'
   24924 
   24925 5.50.3.29 Vector shift right and insert
   24926 .......................................
   24927 
   24928    * uint32x2_t vsri_n_u32 (uint32x2_t, uint32x2_t, const int)
   24929      _Form of expected instruction(s):_ `vsri.32 D0, D0, #0'
   24930 
   24931    * uint16x4_t vsri_n_u16 (uint16x4_t, uint16x4_t, const int)
   24932      _Form of expected instruction(s):_ `vsri.16 D0, D0, #0'
   24933 
   24934    * uint8x8_t vsri_n_u8 (uint8x8_t, uint8x8_t, const int)
   24935      _Form of expected instruction(s):_ `vsri.8 D0, D0, #0'
   24936 
   24937    * int32x2_t vsri_n_s32 (int32x2_t, int32x2_t, const int)
   24938      _Form of expected instruction(s):_ `vsri.32 D0, D0, #0'
   24939 
   24940    * int16x4_t vsri_n_s16 (int16x4_t, int16x4_t, const int)
   24941      _Form of expected instruction(s):_ `vsri.16 D0, D0, #0'
   24942 
   24943    * int8x8_t vsri_n_s8 (int8x8_t, int8x8_t, const int)
   24944      _Form of expected instruction(s):_ `vsri.8 D0, D0, #0'
   24945 
   24946    * uint64x1_t vsri_n_u64 (uint64x1_t, uint64x1_t, const int)
   24947      _Form of expected instruction(s):_ `vsri.64 D0, D0, #0'
   24948 
   24949    * int64x1_t vsri_n_s64 (int64x1_t, int64x1_t, const int)
   24950      _Form of expected instruction(s):_ `vsri.64 D0, D0, #0'
   24951 
   24952    * poly16x4_t vsri_n_p16 (poly16x4_t, poly16x4_t, const int)
   24953      _Form of expected instruction(s):_ `vsri.16 D0, D0, #0'
   24954 
   24955    * poly8x8_t vsri_n_p8 (poly8x8_t, poly8x8_t, const int)
   24956      _Form of expected instruction(s):_ `vsri.8 D0, D0, #0'
   24957 
   24958    * uint32x4_t vsriq_n_u32 (uint32x4_t, uint32x4_t, const int)
   24959      _Form of expected instruction(s):_ `vsri.32 Q0, Q0, #0'
   24960 
   24961    * uint16x8_t vsriq_n_u16 (uint16x8_t, uint16x8_t, const int)
   24962      _Form of expected instruction(s):_ `vsri.16 Q0, Q0, #0'
   24963 
   24964    * uint8x16_t vsriq_n_u8 (uint8x16_t, uint8x16_t, const int)
   24965      _Form of expected instruction(s):_ `vsri.8 Q0, Q0, #0'
   24966 
   24967    * int32x4_t vsriq_n_s32 (int32x4_t, int32x4_t, const int)
   24968      _Form of expected instruction(s):_ `vsri.32 Q0, Q0, #0'
   24969 
   24970    * int16x8_t vsriq_n_s16 (int16x8_t, int16x8_t, const int)
   24971      _Form of expected instruction(s):_ `vsri.16 Q0, Q0, #0'
   24972 
   24973    * int8x16_t vsriq_n_s8 (int8x16_t, int8x16_t, const int)
   24974      _Form of expected instruction(s):_ `vsri.8 Q0, Q0, #0'
   24975 
   24976    * uint64x2_t vsriq_n_u64 (uint64x2_t, uint64x2_t, const int)
   24977      _Form of expected instruction(s):_ `vsri.64 Q0, Q0, #0'
   24978 
   24979    * int64x2_t vsriq_n_s64 (int64x2_t, int64x2_t, const int)
   24980      _Form of expected instruction(s):_ `vsri.64 Q0, Q0, #0'
   24981 
   24982    * poly16x8_t vsriq_n_p16 (poly16x8_t, poly16x8_t, const int)
   24983      _Form of expected instruction(s):_ `vsri.16 Q0, Q0, #0'
   24984 
   24985    * poly8x16_t vsriq_n_p8 (poly8x16_t, poly8x16_t, const int)
   24986      _Form of expected instruction(s):_ `vsri.8 Q0, Q0, #0'
   24987 
   24988 5.50.3.30 Vector shift left and insert
   24989 ......................................
   24990 
   24991    * uint32x2_t vsli_n_u32 (uint32x2_t, uint32x2_t, const int)
   24992      _Form of expected instruction(s):_ `vsli.32 D0, D0, #0'
   24993 
   24994    * uint16x4_t vsli_n_u16 (uint16x4_t, uint16x4_t, const int)
   24995      _Form of expected instruction(s):_ `vsli.16 D0, D0, #0'
   24996 
   24997    * uint8x8_t vsli_n_u8 (uint8x8_t, uint8x8_t, const int)
   24998      _Form of expected instruction(s):_ `vsli.8 D0, D0, #0'
   24999 
   25000    * int32x2_t vsli_n_s32 (int32x2_t, int32x2_t, const int)
   25001      _Form of expected instruction(s):_ `vsli.32 D0, D0, #0'
   25002 
   25003    * int16x4_t vsli_n_s16 (int16x4_t, int16x4_t, const int)
   25004      _Form of expected instruction(s):_ `vsli.16 D0, D0, #0'
   25005 
   25006    * int8x8_t vsli_n_s8 (int8x8_t, int8x8_t, const int)
   25007      _Form of expected instruction(s):_ `vsli.8 D0, D0, #0'
   25008 
   25009    * uint64x1_t vsli_n_u64 (uint64x1_t, uint64x1_t, const int)
   25010      _Form of expected instruction(s):_ `vsli.64 D0, D0, #0'
   25011 
   25012    * int64x1_t vsli_n_s64 (int64x1_t, int64x1_t, const int)
   25013      _Form of expected instruction(s):_ `vsli.64 D0, D0, #0'
   25014 
   25015    * poly16x4_t vsli_n_p16 (poly16x4_t, poly16x4_t, const int)
   25016      _Form of expected instruction(s):_ `vsli.16 D0, D0, #0'
   25017 
   25018    * poly8x8_t vsli_n_p8 (poly8x8_t, poly8x8_t, const int)
   25019      _Form of expected instruction(s):_ `vsli.8 D0, D0, #0'
   25020 
   25021    * uint32x4_t vsliq_n_u32 (uint32x4_t, uint32x4_t, const int)
   25022      _Form of expected instruction(s):_ `vsli.32 Q0, Q0, #0'
   25023 
   25024    * uint16x8_t vsliq_n_u16 (uint16x8_t, uint16x8_t, const int)
   25025      _Form of expected instruction(s):_ `vsli.16 Q0, Q0, #0'
   25026 
   25027    * uint8x16_t vsliq_n_u8 (uint8x16_t, uint8x16_t, const int)
   25028      _Form of expected instruction(s):_ `vsli.8 Q0, Q0, #0'
   25029 
   25030    * int32x4_t vsliq_n_s32 (int32x4_t, int32x4_t, const int)
   25031      _Form of expected instruction(s):_ `vsli.32 Q0, Q0, #0'
   25032 
   25033    * int16x8_t vsliq_n_s16 (int16x8_t, int16x8_t, const int)
   25034      _Form of expected instruction(s):_ `vsli.16 Q0, Q0, #0'
   25035 
   25036    * int8x16_t vsliq_n_s8 (int8x16_t, int8x16_t, const int)
   25037      _Form of expected instruction(s):_ `vsli.8 Q0, Q0, #0'
   25038 
   25039    * uint64x2_t vsliq_n_u64 (uint64x2_t, uint64x2_t, const int)
   25040      _Form of expected instruction(s):_ `vsli.64 Q0, Q0, #0'
   25041 
   25042    * int64x2_t vsliq_n_s64 (int64x2_t, int64x2_t, const int)
   25043      _Form of expected instruction(s):_ `vsli.64 Q0, Q0, #0'
   25044 
   25045    * poly16x8_t vsliq_n_p16 (poly16x8_t, poly16x8_t, const int)
   25046      _Form of expected instruction(s):_ `vsli.16 Q0, Q0, #0'
   25047 
   25048    * poly8x16_t vsliq_n_p8 (poly8x16_t, poly8x16_t, const int)
   25049      _Form of expected instruction(s):_ `vsli.8 Q0, Q0, #0'
   25050 
   25051 5.50.3.31 Absolute value
   25052 ........................
   25053 
   25054    * float32x2_t vabs_f32 (float32x2_t)
   25055      _Form of expected instruction(s):_ `vabs.f32 D0, D0'
   25056 
   25057    * int32x2_t vabs_s32 (int32x2_t)
   25058      _Form of expected instruction(s):_ `vabs.s32 D0, D0'
   25059 
   25060    * int16x4_t vabs_s16 (int16x4_t)
   25061      _Form of expected instruction(s):_ `vabs.s16 D0, D0'
   25062 
   25063    * int8x8_t vabs_s8 (int8x8_t)
   25064      _Form of expected instruction(s):_ `vabs.s8 D0, D0'
   25065 
   25066    * float32x4_t vabsq_f32 (float32x4_t)
   25067      _Form of expected instruction(s):_ `vabs.f32 Q0, Q0'
   25068 
   25069    * int32x4_t vabsq_s32 (int32x4_t)
   25070      _Form of expected instruction(s):_ `vabs.s32 Q0, Q0'
   25071 
   25072    * int16x8_t vabsq_s16 (int16x8_t)
   25073      _Form of expected instruction(s):_ `vabs.s16 Q0, Q0'
   25074 
   25075    * int8x16_t vabsq_s8 (int8x16_t)
   25076      _Form of expected instruction(s):_ `vabs.s8 Q0, Q0'
   25077 
   25078    * int32x2_t vqabs_s32 (int32x2_t)
   25079      _Form of expected instruction(s):_ `vqabs.s32 D0, D0'
   25080 
   25081    * int16x4_t vqabs_s16 (int16x4_t)
   25082      _Form of expected instruction(s):_ `vqabs.s16 D0, D0'
   25083 
   25084    * int8x8_t vqabs_s8 (int8x8_t)
   25085      _Form of expected instruction(s):_ `vqabs.s8 D0, D0'
   25086 
   25087    * int32x4_t vqabsq_s32 (int32x4_t)
   25088      _Form of expected instruction(s):_ `vqabs.s32 Q0, Q0'
   25089 
   25090    * int16x8_t vqabsq_s16 (int16x8_t)
   25091      _Form of expected instruction(s):_ `vqabs.s16 Q0, Q0'
   25092 
   25093    * int8x16_t vqabsq_s8 (int8x16_t)
   25094      _Form of expected instruction(s):_ `vqabs.s8 Q0, Q0'
   25095 
   25096 5.50.3.32 Negation
   25097 ..................
   25098 
   25099    * float32x2_t vneg_f32 (float32x2_t)
   25100      _Form of expected instruction(s):_ `vneg.f32 D0, D0'
   25101 
   25102    * int32x2_t vneg_s32 (int32x2_t)
   25103      _Form of expected instruction(s):_ `vneg.s32 D0, D0'
   25104 
   25105    * int16x4_t vneg_s16 (int16x4_t)
   25106      _Form of expected instruction(s):_ `vneg.s16 D0, D0'
   25107 
   25108    * int8x8_t vneg_s8 (int8x8_t)
   25109      _Form of expected instruction(s):_ `vneg.s8 D0, D0'
   25110 
   25111    * float32x4_t vnegq_f32 (float32x4_t)
   25112      _Form of expected instruction(s):_ `vneg.f32 Q0, Q0'
   25113 
   25114    * int32x4_t vnegq_s32 (int32x4_t)
   25115      _Form of expected instruction(s):_ `vneg.s32 Q0, Q0'
   25116 
   25117    * int16x8_t vnegq_s16 (int16x8_t)
   25118      _Form of expected instruction(s):_ `vneg.s16 Q0, Q0'
   25119 
   25120    * int8x16_t vnegq_s8 (int8x16_t)
   25121      _Form of expected instruction(s):_ `vneg.s8 Q0, Q0'
   25122 
   25123    * int32x2_t vqneg_s32 (int32x2_t)
   25124      _Form of expected instruction(s):_ `vqneg.s32 D0, D0'
   25125 
   25126    * int16x4_t vqneg_s16 (int16x4_t)
   25127      _Form of expected instruction(s):_ `vqneg.s16 D0, D0'
   25128 
   25129    * int8x8_t vqneg_s8 (int8x8_t)
   25130      _Form of expected instruction(s):_ `vqneg.s8 D0, D0'
   25131 
   25132    * int32x4_t vqnegq_s32 (int32x4_t)
   25133      _Form of expected instruction(s):_ `vqneg.s32 Q0, Q0'
   25134 
   25135    * int16x8_t vqnegq_s16 (int16x8_t)
   25136      _Form of expected instruction(s):_ `vqneg.s16 Q0, Q0'
   25137 
   25138    * int8x16_t vqnegq_s8 (int8x16_t)
   25139      _Form of expected instruction(s):_ `vqneg.s8 Q0, Q0'
   25140 
   25141 5.50.3.33 Bitwise not
   25142 .....................
   25143 
   25144    * uint32x2_t vmvn_u32 (uint32x2_t)
   25145      _Form of expected instruction(s):_ `vmvn D0, D0'
   25146 
   25147    * uint16x4_t vmvn_u16 (uint16x4_t)
   25148      _Form of expected instruction(s):_ `vmvn D0, D0'
   25149 
   25150    * uint8x8_t vmvn_u8 (uint8x8_t)
   25151      _Form of expected instruction(s):_ `vmvn D0, D0'
   25152 
   25153    * int32x2_t vmvn_s32 (int32x2_t)
   25154      _Form of expected instruction(s):_ `vmvn D0, D0'
   25155 
   25156    * int16x4_t vmvn_s16 (int16x4_t)
   25157      _Form of expected instruction(s):_ `vmvn D0, D0'
   25158 
   25159    * int8x8_t vmvn_s8 (int8x8_t)
   25160      _Form of expected instruction(s):_ `vmvn D0, D0'
   25161 
   25162    * poly8x8_t vmvn_p8 (poly8x8_t)
   25163      _Form of expected instruction(s):_ `vmvn D0, D0'
   25164 
   25165    * uint32x4_t vmvnq_u32 (uint32x4_t)
   25166      _Form of expected instruction(s):_ `vmvn Q0, Q0'
   25167 
   25168    * uint16x8_t vmvnq_u16 (uint16x8_t)
   25169      _Form of expected instruction(s):_ `vmvn Q0, Q0'
   25170 
   25171    * uint8x16_t vmvnq_u8 (uint8x16_t)
   25172      _Form of expected instruction(s):_ `vmvn Q0, Q0'
   25173 
   25174    * int32x4_t vmvnq_s32 (int32x4_t)
   25175      _Form of expected instruction(s):_ `vmvn Q0, Q0'
   25176 
   25177    * int16x8_t vmvnq_s16 (int16x8_t)
   25178      _Form of expected instruction(s):_ `vmvn Q0, Q0'
   25179 
   25180    * int8x16_t vmvnq_s8 (int8x16_t)
   25181      _Form of expected instruction(s):_ `vmvn Q0, Q0'
   25182 
   25183    * poly8x16_t vmvnq_p8 (poly8x16_t)
   25184      _Form of expected instruction(s):_ `vmvn Q0, Q0'
   25185 
   25186 5.50.3.34 Count leading sign bits
   25187 .................................
   25188 
   25189    * int32x2_t vcls_s32 (int32x2_t)
   25190      _Form of expected instruction(s):_ `vcls.s32 D0, D0'
   25191 
   25192    * int16x4_t vcls_s16 (int16x4_t)
   25193      _Form of expected instruction(s):_ `vcls.s16 D0, D0'
   25194 
   25195    * int8x8_t vcls_s8 (int8x8_t)
   25196      _Form of expected instruction(s):_ `vcls.s8 D0, D0'
   25197 
   25198    * int32x4_t vclsq_s32 (int32x4_t)
   25199      _Form of expected instruction(s):_ `vcls.s32 Q0, Q0'
   25200 
   25201    * int16x8_t vclsq_s16 (int16x8_t)
   25202      _Form of expected instruction(s):_ `vcls.s16 Q0, Q0'
   25203 
   25204    * int8x16_t vclsq_s8 (int8x16_t)
   25205      _Form of expected instruction(s):_ `vcls.s8 Q0, Q0'
   25206 
   25207 5.50.3.35 Count leading zeros
   25208 .............................
   25209 
   25210    * uint32x2_t vclz_u32 (uint32x2_t)
   25211      _Form of expected instruction(s):_ `vclz.i32 D0, D0'
   25212 
   25213    * uint16x4_t vclz_u16 (uint16x4_t)
   25214      _Form of expected instruction(s):_ `vclz.i16 D0, D0'
   25215 
   25216    * uint8x8_t vclz_u8 (uint8x8_t)
   25217      _Form of expected instruction(s):_ `vclz.i8 D0, D0'
   25218 
   25219    * int32x2_t vclz_s32 (int32x2_t)
   25220      _Form of expected instruction(s):_ `vclz.i32 D0, D0'
   25221 
   25222    * int16x4_t vclz_s16 (int16x4_t)
   25223      _Form of expected instruction(s):_ `vclz.i16 D0, D0'
   25224 
   25225    * int8x8_t vclz_s8 (int8x8_t)
   25226      _Form of expected instruction(s):_ `vclz.i8 D0, D0'
   25227 
   25228    * uint32x4_t vclzq_u32 (uint32x4_t)
   25229      _Form of expected instruction(s):_ `vclz.i32 Q0, Q0'
   25230 
   25231    * uint16x8_t vclzq_u16 (uint16x8_t)
   25232      _Form of expected instruction(s):_ `vclz.i16 Q0, Q0'
   25233 
   25234    * uint8x16_t vclzq_u8 (uint8x16_t)
   25235      _Form of expected instruction(s):_ `vclz.i8 Q0, Q0'
   25236 
   25237    * int32x4_t vclzq_s32 (int32x4_t)
   25238      _Form of expected instruction(s):_ `vclz.i32 Q0, Q0'
   25239 
   25240    * int16x8_t vclzq_s16 (int16x8_t)
   25241      _Form of expected instruction(s):_ `vclz.i16 Q0, Q0'
   25242 
   25243    * int8x16_t vclzq_s8 (int8x16_t)
   25244      _Form of expected instruction(s):_ `vclz.i8 Q0, Q0'
   25245 
   25246 5.50.3.36 Count number of set bits
   25247 ..................................
   25248 
   25249    * uint8x8_t vcnt_u8 (uint8x8_t)
   25250      _Form of expected instruction(s):_ `vcnt.8 D0, D0'
   25251 
   25252    * int8x8_t vcnt_s8 (int8x8_t)
   25253      _Form of expected instruction(s):_ `vcnt.8 D0, D0'
   25254 
   25255    * poly8x8_t vcnt_p8 (poly8x8_t)
   25256      _Form of expected instruction(s):_ `vcnt.8 D0, D0'
   25257 
   25258    * uint8x16_t vcntq_u8 (uint8x16_t)
   25259      _Form of expected instruction(s):_ `vcnt.8 Q0, Q0'
   25260 
   25261    * int8x16_t vcntq_s8 (int8x16_t)
   25262      _Form of expected instruction(s):_ `vcnt.8 Q0, Q0'
   25263 
   25264    * poly8x16_t vcntq_p8 (poly8x16_t)
   25265      _Form of expected instruction(s):_ `vcnt.8 Q0, Q0'
   25266 
   25267 5.50.3.37 Reciprocal estimate
   25268 .............................
   25269 
   25270    * float32x2_t vrecpe_f32 (float32x2_t)
   25271      _Form of expected instruction(s):_ `vrecpe.f32 D0, D0'
   25272 
   25273    * uint32x2_t vrecpe_u32 (uint32x2_t)
   25274      _Form of expected instruction(s):_ `vrecpe.u32 D0, D0'
   25275 
   25276    * float32x4_t vrecpeq_f32 (float32x4_t)
   25277      _Form of expected instruction(s):_ `vrecpe.f32 Q0, Q0'
   25278 
   25279    * uint32x4_t vrecpeq_u32 (uint32x4_t)
   25280      _Form of expected instruction(s):_ `vrecpe.u32 Q0, Q0'
   25281 
   25282 5.50.3.38 Reciprocal square-root estimate
   25283 .........................................
   25284 
   25285    * float32x2_t vrsqrte_f32 (float32x2_t)
   25286      _Form of expected instruction(s):_ `vrsqrte.f32 D0, D0'
   25287 
   25288    * uint32x2_t vrsqrte_u32 (uint32x2_t)
   25289      _Form of expected instruction(s):_ `vrsqrte.u32 D0, D0'
   25290 
   25291    * float32x4_t vrsqrteq_f32 (float32x4_t)
   25292      _Form of expected instruction(s):_ `vrsqrte.f32 Q0, Q0'
   25293 
   25294    * uint32x4_t vrsqrteq_u32 (uint32x4_t)
   25295      _Form of expected instruction(s):_ `vrsqrte.u32 Q0, Q0'
   25296 
   25297 5.50.3.39 Get lanes from a vector
   25298 .................................
   25299 
   25300    * uint32_t vget_lane_u32 (uint32x2_t, const int)
   25301      _Form of expected instruction(s):_ `vmov.u32 R0, D0[0]'
   25302 
   25303    * uint16_t vget_lane_u16 (uint16x4_t, const int)
   25304      _Form of expected instruction(s):_ `vmov.u16 R0, D0[0]'
   25305 
   25306    * uint8_t vget_lane_u8 (uint8x8_t, const int)
   25307      _Form of expected instruction(s):_ `vmov.u8 R0, D0[0]'
   25308 
   25309    * int32_t vget_lane_s32 (int32x2_t, const int)
   25310      _Form of expected instruction(s):_ `vmov.s32 R0, D0[0]'
   25311 
   25312    * int16_t vget_lane_s16 (int16x4_t, const int)
   25313      _Form of expected instruction(s):_ `vmov.s16 R0, D0[0]'
   25314 
   25315    * int8_t vget_lane_s8 (int8x8_t, const int)
   25316      _Form of expected instruction(s):_ `vmov.s8 R0, D0[0]'
   25317 
   25318    * float32_t vget_lane_f32 (float32x2_t, const int)
   25319      _Form of expected instruction(s):_ `vmov.f32 R0, D0[0]'
   25320 
   25321    * poly16_t vget_lane_p16 (poly16x4_t, const int)
   25322      _Form of expected instruction(s):_ `vmov.u16 R0, D0[0]'
   25323 
   25324    * poly8_t vget_lane_p8 (poly8x8_t, const int)
   25325      _Form of expected instruction(s):_ `vmov.u8 R0, D0[0]'
   25326 
   25327    * uint64_t vget_lane_u64 (uint64x1_t, const int)
   25328      _Form of expected instruction(s):_ `vmov R0, R0, D0'
   25329 
   25330    * int64_t vget_lane_s64 (int64x1_t, const int)
   25331      _Form of expected instruction(s):_ `vmov R0, R0, D0'
   25332 
   25333    * uint32_t vgetq_lane_u32 (uint32x4_t, const int)
   25334      _Form of expected instruction(s):_ `vmov.u32 R0, D0[0]'
   25335 
   25336    * uint16_t vgetq_lane_u16 (uint16x8_t, const int)
   25337      _Form of expected instruction(s):_ `vmov.u16 R0, D0[0]'
   25338 
   25339    * uint8_t vgetq_lane_u8 (uint8x16_t, const int)
   25340      _Form of expected instruction(s):_ `vmov.u8 R0, D0[0]'
   25341 
   25342    * int32_t vgetq_lane_s32 (int32x4_t, const int)
   25343      _Form of expected instruction(s):_ `vmov.s32 R0, D0[0]'
   25344 
   25345    * int16_t vgetq_lane_s16 (int16x8_t, const int)
   25346      _Form of expected instruction(s):_ `vmov.s16 R0, D0[0]'
   25347 
   25348    * int8_t vgetq_lane_s8 (int8x16_t, const int)
   25349      _Form of expected instruction(s):_ `vmov.s8 R0, D0[0]'
   25350 
   25351    * float32_t vgetq_lane_f32 (float32x4_t, const int)
   25352      _Form of expected instruction(s):_ `vmov.f32 R0, D0[0]'
   25353 
   25354    * poly16_t vgetq_lane_p16 (poly16x8_t, const int)
   25355      _Form of expected instruction(s):_ `vmov.u16 R0, D0[0]'
   25356 
   25357    * poly8_t vgetq_lane_p8 (poly8x16_t, const int)
   25358      _Form of expected instruction(s):_ `vmov.u8 R0, D0[0]'
   25359 
   25360    * uint64_t vgetq_lane_u64 (uint64x2_t, const int)
   25361      _Form of expected instruction(s):_ `vmov R0, R0, D0'
   25362 
   25363    * int64_t vgetq_lane_s64 (int64x2_t, const int)
   25364      _Form of expected instruction(s):_ `vmov R0, R0, D0'
   25365 
   25366 5.50.3.40 Set lanes in a vector
   25367 ...............................
   25368 
   25369    * uint32x2_t vset_lane_u32 (uint32_t, uint32x2_t, const int)
   25370      _Form of expected instruction(s):_ `vmov.32 D0[0], R0'
   25371 
   25372    * uint16x4_t vset_lane_u16 (uint16_t, uint16x4_t, const int)
   25373      _Form of expected instruction(s):_ `vmov.16 D0[0], R0'
   25374 
   25375    * uint8x8_t vset_lane_u8 (uint8_t, uint8x8_t, const int)
   25376      _Form of expected instruction(s):_ `vmov.8 D0[0], R0'
   25377 
   25378    * int32x2_t vset_lane_s32 (int32_t, int32x2_t, const int)
   25379      _Form of expected instruction(s):_ `vmov.32 D0[0], R0'
   25380 
   25381    * int16x4_t vset_lane_s16 (int16_t, int16x4_t, const int)
   25382      _Form of expected instruction(s):_ `vmov.16 D0[0], R0'
   25383 
   25384    * int8x8_t vset_lane_s8 (int8_t, int8x8_t, const int)
   25385      _Form of expected instruction(s):_ `vmov.8 D0[0], R0'
   25386 
   25387    * float32x2_t vset_lane_f32 (float32_t, float32x2_t, const int)
   25388      _Form of expected instruction(s):_ `vmov.32 D0[0], R0'
   25389 
   25390    * poly16x4_t vset_lane_p16 (poly16_t, poly16x4_t, const int)
   25391      _Form of expected instruction(s):_ `vmov.16 D0[0], R0'
   25392 
   25393    * poly8x8_t vset_lane_p8 (poly8_t, poly8x8_t, const int)
   25394      _Form of expected instruction(s):_ `vmov.8 D0[0], R0'
   25395 
   25396    * uint64x1_t vset_lane_u64 (uint64_t, uint64x1_t, const int)
   25397      _Form of expected instruction(s):_ `vmov D0, R0, R0'
   25398 
   25399    * int64x1_t vset_lane_s64 (int64_t, int64x1_t, const int)
   25400      _Form of expected instruction(s):_ `vmov D0, R0, R0'
   25401 
   25402    * uint32x4_t vsetq_lane_u32 (uint32_t, uint32x4_t, const int)
   25403      _Form of expected instruction(s):_ `vmov.32 D0[0], R0'
   25404 
   25405    * uint16x8_t vsetq_lane_u16 (uint16_t, uint16x8_t, const int)
   25406      _Form of expected instruction(s):_ `vmov.16 D0[0], R0'
   25407 
   25408    * uint8x16_t vsetq_lane_u8 (uint8_t, uint8x16_t, const int)
   25409      _Form of expected instruction(s):_ `vmov.8 D0[0], R0'
   25410 
   25411    * int32x4_t vsetq_lane_s32 (int32_t, int32x4_t, const int)
   25412      _Form of expected instruction(s):_ `vmov.32 D0[0], R0'
   25413 
   25414    * int16x8_t vsetq_lane_s16 (int16_t, int16x8_t, const int)
   25415      _Form of expected instruction(s):_ `vmov.16 D0[0], R0'
   25416 
   25417    * int8x16_t vsetq_lane_s8 (int8_t, int8x16_t, const int)
   25418      _Form of expected instruction(s):_ `vmov.8 D0[0], R0'
   25419 
   25420    * float32x4_t vsetq_lane_f32 (float32_t, float32x4_t, const int)
   25421      _Form of expected instruction(s):_ `vmov.32 D0[0], R0'
   25422 
   25423    * poly16x8_t vsetq_lane_p16 (poly16_t, poly16x8_t, const int)
   25424      _Form of expected instruction(s):_ `vmov.16 D0[0], R0'
   25425 
   25426    * poly8x16_t vsetq_lane_p8 (poly8_t, poly8x16_t, const int)
   25427      _Form of expected instruction(s):_ `vmov.8 D0[0], R0'
   25428 
   25429    * uint64x2_t vsetq_lane_u64 (uint64_t, uint64x2_t, const int)
   25430      _Form of expected instruction(s):_ `vmov D0, R0, R0'
   25431 
   25432    * int64x2_t vsetq_lane_s64 (int64_t, int64x2_t, const int)
   25433      _Form of expected instruction(s):_ `vmov D0, R0, R0'
   25434 
   25435 5.50.3.41 Create vector from literal bit pattern
   25436 ................................................
   25437 
   25438    * uint32x2_t vcreate_u32 (uint64_t)
   25439 
   25440    * uint16x4_t vcreate_u16 (uint64_t)
   25441 
   25442    * uint8x8_t vcreate_u8 (uint64_t)
   25443 
   25444    * int32x2_t vcreate_s32 (uint64_t)
   25445 
   25446    * int16x4_t vcreate_s16 (uint64_t)
   25447 
   25448    * int8x8_t vcreate_s8 (uint64_t)
   25449 
   25450    * uint64x1_t vcreate_u64 (uint64_t)
   25451 
   25452    * int64x1_t vcreate_s64 (uint64_t)
   25453 
   25454    * float32x2_t vcreate_f32 (uint64_t)
   25455 
   25456    * poly16x4_t vcreate_p16 (uint64_t)
   25457 
   25458    * poly8x8_t vcreate_p8 (uint64_t)
   25459 
   25460 5.50.3.42 Set all lanes to the same value
   25461 .........................................
   25462 
   25463    * uint32x2_t vdup_n_u32 (uint32_t)
   25464      _Form of expected instruction(s):_ `vdup.32 D0, R0'
   25465 
   25466    * uint16x4_t vdup_n_u16 (uint16_t)
   25467      _Form of expected instruction(s):_ `vdup.16 D0, R0'
   25468 
   25469    * uint8x8_t vdup_n_u8 (uint8_t)
   25470      _Form of expected instruction(s):_ `vdup.8 D0, R0'
   25471 
   25472    * int32x2_t vdup_n_s32 (int32_t)
   25473      _Form of expected instruction(s):_ `vdup.32 D0, R0'
   25474 
   25475    * int16x4_t vdup_n_s16 (int16_t)
   25476      _Form of expected instruction(s):_ `vdup.16 D0, R0'
   25477 
   25478    * int8x8_t vdup_n_s8 (int8_t)
   25479      _Form of expected instruction(s):_ `vdup.8 D0, R0'
   25480 
   25481    * float32x2_t vdup_n_f32 (float32_t)
   25482      _Form of expected instruction(s):_ `vdup.32 D0, R0'
   25483 
   25484    * poly16x4_t vdup_n_p16 (poly16_t)
   25485      _Form of expected instruction(s):_ `vdup.16 D0, R0'
   25486 
   25487    * poly8x8_t vdup_n_p8 (poly8_t)
   25488      _Form of expected instruction(s):_ `vdup.8 D0, R0'
   25489 
   25490    * uint64x1_t vdup_n_u64 (uint64_t)
   25491      _Form of expected instruction(s):_ `vmov D0, R0, R0'
   25492 
   25493    * int64x1_t vdup_n_s64 (int64_t)
   25494      _Form of expected instruction(s):_ `vmov D0, R0, R0'
   25495 
   25496    * uint32x4_t vdupq_n_u32 (uint32_t)
   25497      _Form of expected instruction(s):_ `vdup.32 Q0, R0'
   25498 
   25499    * uint16x8_t vdupq_n_u16 (uint16_t)
   25500      _Form of expected instruction(s):_ `vdup.16 Q0, R0'
   25501 
   25502    * uint8x16_t vdupq_n_u8 (uint8_t)
   25503      _Form of expected instruction(s):_ `vdup.8 Q0, R0'
   25504 
   25505    * int32x4_t vdupq_n_s32 (int32_t)
   25506      _Form of expected instruction(s):_ `vdup.32 Q0, R0'
   25507 
   25508    * int16x8_t vdupq_n_s16 (int16_t)
   25509      _Form of expected instruction(s):_ `vdup.16 Q0, R0'
   25510 
   25511    * int8x16_t vdupq_n_s8 (int8_t)
   25512      _Form of expected instruction(s):_ `vdup.8 Q0, R0'
   25513 
   25514    * float32x4_t vdupq_n_f32 (float32_t)
   25515      _Form of expected instruction(s):_ `vdup.32 Q0, R0'
   25516 
   25517    * poly16x8_t vdupq_n_p16 (poly16_t)
   25518      _Form of expected instruction(s):_ `vdup.16 Q0, R0'
   25519 
   25520    * poly8x16_t vdupq_n_p8 (poly8_t)
   25521      _Form of expected instruction(s):_ `vdup.8 Q0, R0'
   25522 
   25523    * uint64x2_t vdupq_n_u64 (uint64_t)
   25524      _Form of expected instruction(s):_ `vmov D0, R0, R0'
   25525 
   25526    * int64x2_t vdupq_n_s64 (int64_t)
   25527      _Form of expected instruction(s):_ `vmov D0, R0, R0'
   25528 
   25529    * uint32x2_t vmov_n_u32 (uint32_t)
   25530      _Form of expected instruction(s):_ `vdup.32 D0, R0'
   25531 
   25532    * uint16x4_t vmov_n_u16 (uint16_t)
   25533      _Form of expected instruction(s):_ `vdup.16 D0, R0'
   25534 
   25535    * uint8x8_t vmov_n_u8 (uint8_t)
   25536      _Form of expected instruction(s):_ `vdup.8 D0, R0'
   25537 
   25538    * int32x2_t vmov_n_s32 (int32_t)
   25539      _Form of expected instruction(s):_ `vdup.32 D0, R0'
   25540 
   25541    * int16x4_t vmov_n_s16 (int16_t)
   25542      _Form of expected instruction(s):_ `vdup.16 D0, R0'
   25543 
   25544    * int8x8_t vmov_n_s8 (int8_t)
   25545      _Form of expected instruction(s):_ `vdup.8 D0, R0'
   25546 
   25547    * float32x2_t vmov_n_f32 (float32_t)
   25548      _Form of expected instruction(s):_ `vdup.32 D0, R0'
   25549 
   25550    * poly16x4_t vmov_n_p16 (poly16_t)
   25551      _Form of expected instruction(s):_ `vdup.16 D0, R0'
   25552 
   25553    * poly8x8_t vmov_n_p8 (poly8_t)
   25554      _Form of expected instruction(s):_ `vdup.8 D0, R0'
   25555 
   25556    * uint64x1_t vmov_n_u64 (uint64_t)
   25557      _Form of expected instruction(s):_ `vmov D0, R0, R0'
   25558 
   25559    * int64x1_t vmov_n_s64 (int64_t)
   25560      _Form of expected instruction(s):_ `vmov D0, R0, R0'
   25561 
   25562    * uint32x4_t vmovq_n_u32 (uint32_t)
   25563      _Form of expected instruction(s):_ `vdup.32 Q0, R0'
   25564 
   25565    * uint16x8_t vmovq_n_u16 (uint16_t)
   25566      _Form of expected instruction(s):_ `vdup.16 Q0, R0'
   25567 
   25568    * uint8x16_t vmovq_n_u8 (uint8_t)
   25569      _Form of expected instruction(s):_ `vdup.8 Q0, R0'
   25570 
   25571    * int32x4_t vmovq_n_s32 (int32_t)
   25572      _Form of expected instruction(s):_ `vdup.32 Q0, R0'
   25573 
   25574    * int16x8_t vmovq_n_s16 (int16_t)
   25575      _Form of expected instruction(s):_ `vdup.16 Q0, R0'
   25576 
   25577    * int8x16_t vmovq_n_s8 (int8_t)
   25578      _Form of expected instruction(s):_ `vdup.8 Q0, R0'
   25579 
   25580    * float32x4_t vmovq_n_f32 (float32_t)
   25581      _Form of expected instruction(s):_ `vdup.32 Q0, R0'
   25582 
   25583    * poly16x8_t vmovq_n_p16 (poly16_t)
   25584      _Form of expected instruction(s):_ `vdup.16 Q0, R0'
   25585 
   25586    * poly8x16_t vmovq_n_p8 (poly8_t)
   25587      _Form of expected instruction(s):_ `vdup.8 Q0, R0'
   25588 
   25589    * uint64x2_t vmovq_n_u64 (uint64_t)
   25590      _Form of expected instruction(s):_ `vmov D0, R0, R0'
   25591 
   25592    * int64x2_t vmovq_n_s64 (int64_t)
   25593      _Form of expected instruction(s):_ `vmov D0, R0, R0'
   25594 
   25595    * uint32x2_t vdup_lane_u32 (uint32x2_t, const int)
   25596      _Form of expected instruction(s):_ `vdup.32 D0, D0[0]'
   25597 
   25598    * uint16x4_t vdup_lane_u16 (uint16x4_t, const int)
   25599      _Form of expected instruction(s):_ `vdup.16 D0, D0[0]'
   25600 
   25601    * uint8x8_t vdup_lane_u8 (uint8x8_t, const int)
   25602      _Form of expected instruction(s):_ `vdup.8 D0, D0[0]'
   25603 
   25604    * int32x2_t vdup_lane_s32 (int32x2_t, const int)
   25605      _Form of expected instruction(s):_ `vdup.32 D0, D0[0]'
   25606 
   25607    * int16x4_t vdup_lane_s16 (int16x4_t, const int)
   25608      _Form of expected instruction(s):_ `vdup.16 D0, D0[0]'
   25609 
   25610    * int8x8_t vdup_lane_s8 (int8x8_t, const int)
   25611      _Form of expected instruction(s):_ `vdup.8 D0, D0[0]'
   25612 
   25613    * float32x2_t vdup_lane_f32 (float32x2_t, const int)
   25614      _Form of expected instruction(s):_ `vdup.32 D0, D0[0]'
   25615 
   25616    * poly16x4_t vdup_lane_p16 (poly16x4_t, const int)
   25617      _Form of expected instruction(s):_ `vdup.16 D0, D0[0]'
   25618 
   25619    * poly8x8_t vdup_lane_p8 (poly8x8_t, const int)
   25620      _Form of expected instruction(s):_ `vdup.8 D0, D0[0]'
   25621 
   25622    * uint64x1_t vdup_lane_u64 (uint64x1_t, const int)
   25623 
   25624    * int64x1_t vdup_lane_s64 (int64x1_t, const int)
   25625 
   25626    * uint32x4_t vdupq_lane_u32 (uint32x2_t, const int)
   25627      _Form of expected instruction(s):_ `vdup.32 Q0, D0[0]'
   25628 
   25629    * uint16x8_t vdupq_lane_u16 (uint16x4_t, const int)
   25630      _Form of expected instruction(s):_ `vdup.16 Q0, D0[0]'
   25631 
   25632    * uint8x16_t vdupq_lane_u8 (uint8x8_t, const int)
   25633      _Form of expected instruction(s):_ `vdup.8 Q0, D0[0]'
   25634 
   25635    * int32x4_t vdupq_lane_s32 (int32x2_t, const int)
   25636      _Form of expected instruction(s):_ `vdup.32 Q0, D0[0]'
   25637 
   25638    * int16x8_t vdupq_lane_s16 (int16x4_t, const int)
   25639      _Form of expected instruction(s):_ `vdup.16 Q0, D0[0]'
   25640 
   25641    * int8x16_t vdupq_lane_s8 (int8x8_t, const int)
   25642      _Form of expected instruction(s):_ `vdup.8 Q0, D0[0]'
   25643 
   25644    * float32x4_t vdupq_lane_f32 (float32x2_t, const int)
   25645      _Form of expected instruction(s):_ `vdup.32 Q0, D0[0]'
   25646 
   25647    * poly16x8_t vdupq_lane_p16 (poly16x4_t, const int)
   25648      _Form of expected instruction(s):_ `vdup.16 Q0, D0[0]'
   25649 
   25650    * poly8x16_t vdupq_lane_p8 (poly8x8_t, const int)
   25651      _Form of expected instruction(s):_ `vdup.8 Q0, D0[0]'
   25652 
   25653    * uint64x2_t vdupq_lane_u64 (uint64x1_t, const int)
   25654 
   25655    * int64x2_t vdupq_lane_s64 (int64x1_t, const int)
   25656 
   25657 5.50.3.43 Combining vectors
   25658 ...........................
   25659 
   25660    * uint32x4_t vcombine_u32 (uint32x2_t, uint32x2_t)
   25661 
   25662    * uint16x8_t vcombine_u16 (uint16x4_t, uint16x4_t)
   25663 
   25664    * uint8x16_t vcombine_u8 (uint8x8_t, uint8x8_t)
   25665 
   25666    * int32x4_t vcombine_s32 (int32x2_t, int32x2_t)
   25667 
   25668    * int16x8_t vcombine_s16 (int16x4_t, int16x4_t)
   25669 
   25670    * int8x16_t vcombine_s8 (int8x8_t, int8x8_t)
   25671 
   25672    * uint64x2_t vcombine_u64 (uint64x1_t, uint64x1_t)
   25673 
   25674    * int64x2_t vcombine_s64 (int64x1_t, int64x1_t)
   25675 
   25676    * float32x4_t vcombine_f32 (float32x2_t, float32x2_t)
   25677 
   25678    * poly16x8_t vcombine_p16 (poly16x4_t, poly16x4_t)
   25679 
   25680    * poly8x16_t vcombine_p8 (poly8x8_t, poly8x8_t)
   25681 
   25682 5.50.3.44 Splitting vectors
   25683 ...........................
   25684 
   25685    * uint32x2_t vget_high_u32 (uint32x4_t)
   25686 
   25687    * uint16x4_t vget_high_u16 (uint16x8_t)
   25688 
   25689    * uint8x8_t vget_high_u8 (uint8x16_t)
   25690 
   25691    * int32x2_t vget_high_s32 (int32x4_t)
   25692 
   25693    * int16x4_t vget_high_s16 (int16x8_t)
   25694 
   25695    * int8x8_t vget_high_s8 (int8x16_t)
   25696 
   25697    * uint64x1_t vget_high_u64 (uint64x2_t)
   25698 
   25699    * int64x1_t vget_high_s64 (int64x2_t)
   25700 
   25701    * float32x2_t vget_high_f32 (float32x4_t)
   25702 
   25703    * poly16x4_t vget_high_p16 (poly16x8_t)
   25704 
   25705    * poly8x8_t vget_high_p8 (poly8x16_t)
   25706 
   25707    * uint32x2_t vget_low_u32 (uint32x4_t)
   25708      _Form of expected instruction(s):_ `vmov D0, D0'
   25709 
   25710    * uint16x4_t vget_low_u16 (uint16x8_t)
   25711      _Form of expected instruction(s):_ `vmov D0, D0'
   25712 
   25713    * uint8x8_t vget_low_u8 (uint8x16_t)
   25714      _Form of expected instruction(s):_ `vmov D0, D0'
   25715 
   25716    * int32x2_t vget_low_s32 (int32x4_t)
   25717      _Form of expected instruction(s):_ `vmov D0, D0'
   25718 
   25719    * int16x4_t vget_low_s16 (int16x8_t)
   25720      _Form of expected instruction(s):_ `vmov D0, D0'
   25721 
   25722    * int8x8_t vget_low_s8 (int8x16_t)
   25723      _Form of expected instruction(s):_ `vmov D0, D0'
   25724 
   25725    * uint64x1_t vget_low_u64 (uint64x2_t)
   25726      _Form of expected instruction(s):_ `vmov D0, D0'
   25727 
   25728    * int64x1_t vget_low_s64 (int64x2_t)
   25729      _Form of expected instruction(s):_ `vmov D0, D0'
   25730 
   25731    * float32x2_t vget_low_f32 (float32x4_t)
   25732      _Form of expected instruction(s):_ `vmov D0, D0'
   25733 
   25734    * poly16x4_t vget_low_p16 (poly16x8_t)
   25735      _Form of expected instruction(s):_ `vmov D0, D0'
   25736 
   25737    * poly8x8_t vget_low_p8 (poly8x16_t)
   25738      _Form of expected instruction(s):_ `vmov D0, D0'
   25739 
   25740 5.50.3.45 Conversions
   25741 .....................
   25742 
   25743    * float32x2_t vcvt_f32_u32 (uint32x2_t)
   25744      _Form of expected instruction(s):_ `vcvt.f32.u32 D0, D0'
   25745 
   25746    * float32x2_t vcvt_f32_s32 (int32x2_t)
   25747      _Form of expected instruction(s):_ `vcvt.f32.s32 D0, D0'
   25748 
   25749    * uint32x2_t vcvt_u32_f32 (float32x2_t)
   25750      _Form of expected instruction(s):_ `vcvt.u32.f32 D0, D0'
   25751 
   25752    * int32x2_t vcvt_s32_f32 (float32x2_t)
   25753      _Form of expected instruction(s):_ `vcvt.s32.f32 D0, D0'
   25754 
   25755    * float32x4_t vcvtq_f32_u32 (uint32x4_t)
   25756      _Form of expected instruction(s):_ `vcvt.f32.u32 Q0, Q0'
   25757 
   25758    * float32x4_t vcvtq_f32_s32 (int32x4_t)
   25759      _Form of expected instruction(s):_ `vcvt.f32.s32 Q0, Q0'
   25760 
   25761    * uint32x4_t vcvtq_u32_f32 (float32x4_t)
   25762      _Form of expected instruction(s):_ `vcvt.u32.f32 Q0, Q0'
   25763 
   25764    * int32x4_t vcvtq_s32_f32 (float32x4_t)
   25765      _Form of expected instruction(s):_ `vcvt.s32.f32 Q0, Q0'
   25766 
   25767    * float32x2_t vcvt_n_f32_u32 (uint32x2_t, const int)
   25768      _Form of expected instruction(s):_ `vcvt.f32.u32 D0, D0, #0'
   25769 
   25770    * float32x2_t vcvt_n_f32_s32 (int32x2_t, const int)
   25771      _Form of expected instruction(s):_ `vcvt.f32.s32 D0, D0, #0'
   25772 
   25773    * uint32x2_t vcvt_n_u32_f32 (float32x2_t, const int)
   25774      _Form of expected instruction(s):_ `vcvt.u32.f32 D0, D0, #0'
   25775 
   25776    * int32x2_t vcvt_n_s32_f32 (float32x2_t, const int)
   25777      _Form of expected instruction(s):_ `vcvt.s32.f32 D0, D0, #0'
   25778 
   25779    * float32x4_t vcvtq_n_f32_u32 (uint32x4_t, const int)
   25780      _Form of expected instruction(s):_ `vcvt.f32.u32 Q0, Q0, #0'
   25781 
   25782    * float32x4_t vcvtq_n_f32_s32 (int32x4_t, const int)
   25783      _Form of expected instruction(s):_ `vcvt.f32.s32 Q0, Q0, #0'
   25784 
   25785    * uint32x4_t vcvtq_n_u32_f32 (float32x4_t, const int)
   25786      _Form of expected instruction(s):_ `vcvt.u32.f32 Q0, Q0, #0'
   25787 
   25788    * int32x4_t vcvtq_n_s32_f32 (float32x4_t, const int)
   25789      _Form of expected instruction(s):_ `vcvt.s32.f32 Q0, Q0, #0'
   25790 
   25791 5.50.3.46 Move, single_opcode narrowing
   25792 .......................................
   25793 
   25794    * uint32x2_t vmovn_u64 (uint64x2_t)
   25795      _Form of expected instruction(s):_ `vmovn.i64 D0, Q0'
   25796 
   25797    * uint16x4_t vmovn_u32 (uint32x4_t)
   25798      _Form of expected instruction(s):_ `vmovn.i32 D0, Q0'
   25799 
   25800    * uint8x8_t vmovn_u16 (uint16x8_t)
   25801      _Form of expected instruction(s):_ `vmovn.i16 D0, Q0'
   25802 
   25803    * int32x2_t vmovn_s64 (int64x2_t)
   25804      _Form of expected instruction(s):_ `vmovn.i64 D0, Q0'
   25805 
   25806    * int16x4_t vmovn_s32 (int32x4_t)
   25807      _Form of expected instruction(s):_ `vmovn.i32 D0, Q0'
   25808 
   25809    * int8x8_t vmovn_s16 (int16x8_t)
   25810      _Form of expected instruction(s):_ `vmovn.i16 D0, Q0'
   25811 
   25812    * uint32x2_t vqmovn_u64 (uint64x2_t)
   25813      _Form of expected instruction(s):_ `vqmovn.u64 D0, Q0'
   25814 
   25815    * uint16x4_t vqmovn_u32 (uint32x4_t)
   25816      _Form of expected instruction(s):_ `vqmovn.u32 D0, Q0'
   25817 
   25818    * uint8x8_t vqmovn_u16 (uint16x8_t)
   25819      _Form of expected instruction(s):_ `vqmovn.u16 D0, Q0'
   25820 
   25821    * int32x2_t vqmovn_s64 (int64x2_t)
   25822      _Form of expected instruction(s):_ `vqmovn.s64 D0, Q0'
   25823 
   25824    * int16x4_t vqmovn_s32 (int32x4_t)
   25825      _Form of expected instruction(s):_ `vqmovn.s32 D0, Q0'
   25826 
   25827    * int8x8_t vqmovn_s16 (int16x8_t)
   25828      _Form of expected instruction(s):_ `vqmovn.s16 D0, Q0'
   25829 
   25830    * uint32x2_t vqmovun_s64 (int64x2_t)
   25831      _Form of expected instruction(s):_ `vqmovun.s64 D0, Q0'
   25832 
   25833    * uint16x4_t vqmovun_s32 (int32x4_t)
   25834      _Form of expected instruction(s):_ `vqmovun.s32 D0, Q0'
   25835 
   25836    * uint8x8_t vqmovun_s16 (int16x8_t)
   25837      _Form of expected instruction(s):_ `vqmovun.s16 D0, Q0'
   25838 
   25839 5.50.3.47 Move, single_opcode long
   25840 ..................................
   25841 
   25842    * uint64x2_t vmovl_u32 (uint32x2_t)
   25843      _Form of expected instruction(s):_ `vmovl.u32 Q0, D0'
   25844 
   25845    * uint32x4_t vmovl_u16 (uint16x4_t)
   25846      _Form of expected instruction(s):_ `vmovl.u16 Q0, D0'
   25847 
   25848    * uint16x8_t vmovl_u8 (uint8x8_t)
   25849      _Form of expected instruction(s):_ `vmovl.u8 Q0, D0'
   25850 
   25851    * int64x2_t vmovl_s32 (int32x2_t)
   25852      _Form of expected instruction(s):_ `vmovl.s32 Q0, D0'
   25853 
   25854    * int32x4_t vmovl_s16 (int16x4_t)
   25855      _Form of expected instruction(s):_ `vmovl.s16 Q0, D0'
   25856 
   25857    * int16x8_t vmovl_s8 (int8x8_t)
   25858      _Form of expected instruction(s):_ `vmovl.s8 Q0, D0'
   25859 
   25860 5.50.3.48 Table lookup
   25861 ......................
   25862 
   25863    * poly8x8_t vtbl1_p8 (poly8x8_t, uint8x8_t)
   25864      _Form of expected instruction(s):_ `vtbl.8 D0, {D0}, D0'
   25865 
   25866    * int8x8_t vtbl1_s8 (int8x8_t, int8x8_t)
   25867      _Form of expected instruction(s):_ `vtbl.8 D0, {D0}, D0'
   25868 
   25869    * uint8x8_t vtbl1_u8 (uint8x8_t, uint8x8_t)
   25870      _Form of expected instruction(s):_ `vtbl.8 D0, {D0}, D0'
   25871 
   25872    * poly8x8_t vtbl2_p8 (poly8x8x2_t, uint8x8_t)
   25873      _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1}, D0'
   25874 
   25875    * int8x8_t vtbl2_s8 (int8x8x2_t, int8x8_t)
   25876      _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1}, D0'
   25877 
   25878    * uint8x8_t vtbl2_u8 (uint8x8x2_t, uint8x8_t)
   25879      _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1}, D0'
   25880 
   25881    * poly8x8_t vtbl3_p8 (poly8x8x3_t, uint8x8_t)
   25882      _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1, D2}, D0'
   25883 
   25884    * int8x8_t vtbl3_s8 (int8x8x3_t, int8x8_t)
   25885      _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1, D2}, D0'
   25886 
   25887    * uint8x8_t vtbl3_u8 (uint8x8x3_t, uint8x8_t)
   25888      _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1, D2}, D0'
   25889 
   25890    * poly8x8_t vtbl4_p8 (poly8x8x4_t, uint8x8_t)
   25891      _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1, D2, D3},
   25892      D0'
   25893 
   25894    * int8x8_t vtbl4_s8 (int8x8x4_t, int8x8_t)
   25895      _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1, D2, D3},
   25896      D0'
   25897 
   25898    * uint8x8_t vtbl4_u8 (uint8x8x4_t, uint8x8_t)
   25899      _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1, D2, D3},
   25900      D0'
   25901 
   25902 5.50.3.49 Extended table lookup
   25903 ...............................
   25904 
   25905    * poly8x8_t vtbx1_p8 (poly8x8_t, poly8x8_t, uint8x8_t)
   25906      _Form of expected instruction(s):_ `vtbx.8 D0, {D0}, D0'
   25907 
   25908    * int8x8_t vtbx1_s8 (int8x8_t, int8x8_t, int8x8_t)
   25909      _Form of expected instruction(s):_ `vtbx.8 D0, {D0}, D0'
   25910 
   25911    * uint8x8_t vtbx1_u8 (uint8x8_t, uint8x8_t, uint8x8_t)
   25912      _Form of expected instruction(s):_ `vtbx.8 D0, {D0}, D0'
   25913 
   25914    * poly8x8_t vtbx2_p8 (poly8x8_t, poly8x8x2_t, uint8x8_t)
   25915      _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1}, D0'
   25916 
   25917    * int8x8_t vtbx2_s8 (int8x8_t, int8x8x2_t, int8x8_t)
   25918      _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1}, D0'
   25919 
   25920    * uint8x8_t vtbx2_u8 (uint8x8_t, uint8x8x2_t, uint8x8_t)
   25921      _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1}, D0'
   25922 
   25923    * poly8x8_t vtbx3_p8 (poly8x8_t, poly8x8x3_t, uint8x8_t)
   25924      _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1, D2}, D0'
   25925 
   25926    * int8x8_t vtbx3_s8 (int8x8_t, int8x8x3_t, int8x8_t)
   25927      _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1, D2}, D0'
   25928 
   25929    * uint8x8_t vtbx3_u8 (uint8x8_t, uint8x8x3_t, uint8x8_t)
   25930      _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1, D2}, D0'
   25931 
   25932    * poly8x8_t vtbx4_p8 (poly8x8_t, poly8x8x4_t, uint8x8_t)
   25933      _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1, D2, D3},
   25934      D0'
   25935 
   25936    * int8x8_t vtbx4_s8 (int8x8_t, int8x8x4_t, int8x8_t)
   25937      _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1, D2, D3},
   25938      D0'
   25939 
   25940    * uint8x8_t vtbx4_u8 (uint8x8_t, uint8x8x4_t, uint8x8_t)
   25941      _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1, D2, D3},
   25942      D0'
   25943 
   25944 5.50.3.50 Multiply, lane
   25945 ........................
   25946 
   25947    * float32x2_t vmul_lane_f32 (float32x2_t, float32x2_t, const int)
   25948      _Form of expected instruction(s):_ `vmul.f32 D0, D0, D0[0]'
   25949 
   25950    * uint32x2_t vmul_lane_u32 (uint32x2_t, uint32x2_t, const int)
   25951      _Form of expected instruction(s):_ `vmul.i32 D0, D0, D0[0]'
   25952 
   25953    * uint16x4_t vmul_lane_u16 (uint16x4_t, uint16x4_t, const int)
   25954      _Form of expected instruction(s):_ `vmul.i16 D0, D0, D0[0]'
   25955 
   25956    * int32x2_t vmul_lane_s32 (int32x2_t, int32x2_t, const int)
   25957      _Form of expected instruction(s):_ `vmul.i32 D0, D0, D0[0]'
   25958 
   25959    * int16x4_t vmul_lane_s16 (int16x4_t, int16x4_t, const int)
   25960      _Form of expected instruction(s):_ `vmul.i16 D0, D0, D0[0]'
   25961 
   25962    * float32x4_t vmulq_lane_f32 (float32x4_t, float32x2_t, const int)
   25963      _Form of expected instruction(s):_ `vmul.f32 Q0, Q0, D0[0]'
   25964 
   25965    * uint32x4_t vmulq_lane_u32 (uint32x4_t, uint32x2_t, const int)
   25966      _Form of expected instruction(s):_ `vmul.i32 Q0, Q0, D0[0]'
   25967 
   25968    * uint16x8_t vmulq_lane_u16 (uint16x8_t, uint16x4_t, const int)
   25969      _Form of expected instruction(s):_ `vmul.i16 Q0, Q0, D0[0]'
   25970 
   25971    * int32x4_t vmulq_lane_s32 (int32x4_t, int32x2_t, const int)
   25972      _Form of expected instruction(s):_ `vmul.i32 Q0, Q0, D0[0]'
   25973 
   25974    * int16x8_t vmulq_lane_s16 (int16x8_t, int16x4_t, const int)
   25975      _Form of expected instruction(s):_ `vmul.i16 Q0, Q0, D0[0]'
   25976 
   25977 5.50.3.51 Long multiply, lane
   25978 .............................
   25979 
   25980    * uint64x2_t vmull_lane_u32 (uint32x2_t, uint32x2_t, const int)
   25981      _Form of expected instruction(s):_ `vmull.u32 Q0, D0, D0[0]'
   25982 
   25983    * uint32x4_t vmull_lane_u16 (uint16x4_t, uint16x4_t, const int)
   25984      _Form of expected instruction(s):_ `vmull.u16 Q0, D0, D0[0]'
   25985 
   25986    * int64x2_t vmull_lane_s32 (int32x2_t, int32x2_t, const int)
   25987      _Form of expected instruction(s):_ `vmull.s32 Q0, D0, D0[0]'
   25988 
   25989    * int32x4_t vmull_lane_s16 (int16x4_t, int16x4_t, const int)
   25990      _Form of expected instruction(s):_ `vmull.s16 Q0, D0, D0[0]'
   25991 
   25992 5.50.3.52 Saturating doubling long multiply, lane
   25993 .................................................
   25994 
   25995    * int64x2_t vqdmull_lane_s32 (int32x2_t, int32x2_t, const int)
   25996      _Form of expected instruction(s):_ `vqdmull.s32 Q0, D0, D0[0]'
   25997 
   25998    * int32x4_t vqdmull_lane_s16 (int16x4_t, int16x4_t, const int)
   25999      _Form of expected instruction(s):_ `vqdmull.s16 Q0, D0, D0[0]'
   26000 
   26001 5.50.3.53 Saturating doubling multiply high, lane
   26002 .................................................
   26003 
   26004    * int32x4_t vqdmulhq_lane_s32 (int32x4_t, int32x2_t, const int)
   26005      _Form of expected instruction(s):_ `vqdmulh.s32 Q0, Q0, D0[0]'
   26006 
   26007    * int16x8_t vqdmulhq_lane_s16 (int16x8_t, int16x4_t, const int)
   26008      _Form of expected instruction(s):_ `vqdmulh.s16 Q0, Q0, D0[0]'
   26009 
   26010    * int32x2_t vqdmulh_lane_s32 (int32x2_t, int32x2_t, const int)
   26011      _Form of expected instruction(s):_ `vqdmulh.s32 D0, D0, D0[0]'
   26012 
   26013    * int16x4_t vqdmulh_lane_s16 (int16x4_t, int16x4_t, const int)
   26014      _Form of expected instruction(s):_ `vqdmulh.s16 D0, D0, D0[0]'
   26015 
   26016    * int32x4_t vqrdmulhq_lane_s32 (int32x4_t, int32x2_t, const int)
   26017      _Form of expected instruction(s):_ `vqrdmulh.s32 Q0, Q0, D0[0]'
   26018 
   26019    * int16x8_t vqrdmulhq_lane_s16 (int16x8_t, int16x4_t, const int)
   26020      _Form of expected instruction(s):_ `vqrdmulh.s16 Q0, Q0, D0[0]'
   26021 
   26022    * int32x2_t vqrdmulh_lane_s32 (int32x2_t, int32x2_t, const int)
   26023      _Form of expected instruction(s):_ `vqrdmulh.s32 D0, D0, D0[0]'
   26024 
   26025    * int16x4_t vqrdmulh_lane_s16 (int16x4_t, int16x4_t, const int)
   26026      _Form of expected instruction(s):_ `vqrdmulh.s16 D0, D0, D0[0]'
   26027 
   26028 5.50.3.54 Multiply-accumulate, lane
   26029 ...................................
   26030 
   26031    * float32x2_t vmla_lane_f32 (float32x2_t, float32x2_t, float32x2_t,
   26032      const int)
   26033      _Form of expected instruction(s):_ `vmla.f32 D0, D0, D0[0]'
   26034 
   26035    * uint32x2_t vmla_lane_u32 (uint32x2_t, uint32x2_t, uint32x2_t,
   26036      const int)
   26037      _Form of expected instruction(s):_ `vmla.i32 D0, D0, D0[0]'
   26038 
   26039    * uint16x4_t vmla_lane_u16 (uint16x4_t, uint16x4_t, uint16x4_t,
   26040      const int)
   26041      _Form of expected instruction(s):_ `vmla.i16 D0, D0, D0[0]'
   26042 
   26043    * int32x2_t vmla_lane_s32 (int32x2_t, int32x2_t, int32x2_t, const
   26044      int)
   26045      _Form of expected instruction(s):_ `vmla.i32 D0, D0, D0[0]'
   26046 
   26047    * int16x4_t vmla_lane_s16 (int16x4_t, int16x4_t, int16x4_t, const
   26048      int)
   26049      _Form of expected instruction(s):_ `vmla.i16 D0, D0, D0[0]'
   26050 
   26051    * float32x4_t vmlaq_lane_f32 (float32x4_t, float32x4_t, float32x2_t,
   26052      const int)
   26053      _Form of expected instruction(s):_ `vmla.f32 Q0, Q0, D0[0]'
   26054 
   26055    * uint32x4_t vmlaq_lane_u32 (uint32x4_t, uint32x4_t, uint32x2_t,
   26056      const int)
   26057      _Form of expected instruction(s):_ `vmla.i32 Q0, Q0, D0[0]'
   26058 
   26059    * uint16x8_t vmlaq_lane_u16 (uint16x8_t, uint16x8_t, uint16x4_t,
   26060      const int)
   26061      _Form of expected instruction(s):_ `vmla.i16 Q0, Q0, D0[0]'
   26062 
   26063    * int32x4_t vmlaq_lane_s32 (int32x4_t, int32x4_t, int32x2_t, const
   26064      int)
   26065      _Form of expected instruction(s):_ `vmla.i32 Q0, Q0, D0[0]'
   26066 
   26067    * int16x8_t vmlaq_lane_s16 (int16x8_t, int16x8_t, int16x4_t, const
   26068      int)
   26069      _Form of expected instruction(s):_ `vmla.i16 Q0, Q0, D0[0]'
   26070 
   26071    * uint64x2_t vmlal_lane_u32 (uint64x2_t, uint32x2_t, uint32x2_t,
   26072      const int)
   26073      _Form of expected instruction(s):_ `vmlal.u32 Q0, D0, D0[0]'
   26074 
   26075    * uint32x4_t vmlal_lane_u16 (uint32x4_t, uint16x4_t, uint16x4_t,
   26076      const int)
   26077      _Form of expected instruction(s):_ `vmlal.u16 Q0, D0, D0[0]'
   26078 
   26079    * int64x2_t vmlal_lane_s32 (int64x2_t, int32x2_t, int32x2_t, const
   26080      int)
   26081      _Form of expected instruction(s):_ `vmlal.s32 Q0, D0, D0[0]'
   26082 
   26083    * int32x4_t vmlal_lane_s16 (int32x4_t, int16x4_t, int16x4_t, const
   26084      int)
   26085      _Form of expected instruction(s):_ `vmlal.s16 Q0, D0, D0[0]'
   26086 
   26087    * int64x2_t vqdmlal_lane_s32 (int64x2_t, int32x2_t, int32x2_t, const
   26088      int)
   26089      _Form of expected instruction(s):_ `vqdmlal.s32 Q0, D0, D0[0]'
   26090 
   26091    * int32x4_t vqdmlal_lane_s16 (int32x4_t, int16x4_t, int16x4_t, const
   26092      int)
   26093      _Form of expected instruction(s):_ `vqdmlal.s16 Q0, D0, D0[0]'
   26094 
   26095 5.50.3.55 Multiply-subtract, lane
   26096 .................................
   26097 
   26098    * float32x2_t vmls_lane_f32 (float32x2_t, float32x2_t, float32x2_t,
   26099      const int)
   26100      _Form of expected instruction(s):_ `vmls.f32 D0, D0, D0[0]'
   26101 
   26102    * uint32x2_t vmls_lane_u32 (uint32x2_t, uint32x2_t, uint32x2_t,
   26103      const int)
   26104      _Form of expected instruction(s):_ `vmls.i32 D0, D0, D0[0]'
   26105 
   26106    * uint16x4_t vmls_lane_u16 (uint16x4_t, uint16x4_t, uint16x4_t,
   26107      const int)
   26108      _Form of expected instruction(s):_ `vmls.i16 D0, D0, D0[0]'
   26109 
   26110    * int32x2_t vmls_lane_s32 (int32x2_t, int32x2_t, int32x2_t, const
   26111      int)
   26112      _Form of expected instruction(s):_ `vmls.i32 D0, D0, D0[0]'
   26113 
   26114    * int16x4_t vmls_lane_s16 (int16x4_t, int16x4_t, int16x4_t, const
   26115      int)
   26116      _Form of expected instruction(s):_ `vmls.i16 D0, D0, D0[0]'
   26117 
   26118    * float32x4_t vmlsq_lane_f32 (float32x4_t, float32x4_t, float32x2_t,
   26119      const int)
   26120      _Form of expected instruction(s):_ `vmls.f32 Q0, Q0, D0[0]'
   26121 
   26122    * uint32x4_t vmlsq_lane_u32 (uint32x4_t, uint32x4_t, uint32x2_t,
   26123      const int)
   26124      _Form of expected instruction(s):_ `vmls.i32 Q0, Q0, D0[0]'
   26125 
   26126    * uint16x8_t vmlsq_lane_u16 (uint16x8_t, uint16x8_t, uint16x4_t,
   26127      const int)
   26128      _Form of expected instruction(s):_ `vmls.i16 Q0, Q0, D0[0]'
   26129 
   26130    * int32x4_t vmlsq_lane_s32 (int32x4_t, int32x4_t, int32x2_t, const
   26131      int)
   26132      _Form of expected instruction(s):_ `vmls.i32 Q0, Q0, D0[0]'
   26133 
   26134    * int16x8_t vmlsq_lane_s16 (int16x8_t, int16x8_t, int16x4_t, const
   26135      int)
   26136      _Form of expected instruction(s):_ `vmls.i16 Q0, Q0, D0[0]'
   26137 
   26138    * uint64x2_t vmlsl_lane_u32 (uint64x2_t, uint32x2_t, uint32x2_t,
   26139      const int)
   26140      _Form of expected instruction(s):_ `vmlsl.u32 Q0, D0, D0[0]'
   26141 
   26142    * uint32x4_t vmlsl_lane_u16 (uint32x4_t, uint16x4_t, uint16x4_t,
   26143      const int)
   26144      _Form of expected instruction(s):_ `vmlsl.u16 Q0, D0, D0[0]'
   26145 
   26146    * int64x2_t vmlsl_lane_s32 (int64x2_t, int32x2_t, int32x2_t, const
   26147      int)
   26148      _Form of expected instruction(s):_ `vmlsl.s32 Q0, D0, D0[0]'
   26149 
   26150    * int32x4_t vmlsl_lane_s16 (int32x4_t, int16x4_t, int16x4_t, const
   26151      int)
   26152      _Form of expected instruction(s):_ `vmlsl.s16 Q0, D0, D0[0]'
   26153 
   26154    * int64x2_t vqdmlsl_lane_s32 (int64x2_t, int32x2_t, int32x2_t, const
   26155      int)
   26156      _Form of expected instruction(s):_ `vqdmlsl.s32 Q0, D0, D0[0]'
   26157 
   26158    * int32x4_t vqdmlsl_lane_s16 (int32x4_t, int16x4_t, int16x4_t, const
   26159      int)
   26160      _Form of expected instruction(s):_ `vqdmlsl.s16 Q0, D0, D0[0]'
   26161 
   26162 5.50.3.56 Vector multiply by scalar
   26163 ...................................
   26164 
   26165    * float32x2_t vmul_n_f32 (float32x2_t, float32_t)
   26166      _Form of expected instruction(s):_ `vmul.f32 D0, D0, D0[0]'
   26167 
   26168    * uint32x2_t vmul_n_u32 (uint32x2_t, uint32_t)
   26169      _Form of expected instruction(s):_ `vmul.i32 D0, D0, D0[0]'
   26170 
   26171    * uint16x4_t vmul_n_u16 (uint16x4_t, uint16_t)
   26172      _Form of expected instruction(s):_ `vmul.i16 D0, D0, D0[0]'
   26173 
   26174    * int32x2_t vmul_n_s32 (int32x2_t, int32_t)
   26175      _Form of expected instruction(s):_ `vmul.i32 D0, D0, D0[0]'
   26176 
   26177    * int16x4_t vmul_n_s16 (int16x4_t, int16_t)
   26178      _Form of expected instruction(s):_ `vmul.i16 D0, D0, D0[0]'
   26179 
   26180    * float32x4_t vmulq_n_f32 (float32x4_t, float32_t)
   26181      _Form of expected instruction(s):_ `vmul.f32 Q0, Q0, D0[0]'
   26182 
   26183    * uint32x4_t vmulq_n_u32 (uint32x4_t, uint32_t)
   26184      _Form of expected instruction(s):_ `vmul.i32 Q0, Q0, D0[0]'
   26185 
   26186    * uint16x8_t vmulq_n_u16 (uint16x8_t, uint16_t)
   26187      _Form of expected instruction(s):_ `vmul.i16 Q0, Q0, D0[0]'
   26188 
   26189    * int32x4_t vmulq_n_s32 (int32x4_t, int32_t)
   26190      _Form of expected instruction(s):_ `vmul.i32 Q0, Q0, D0[0]'
   26191 
   26192    * int16x8_t vmulq_n_s16 (int16x8_t, int16_t)
   26193      _Form of expected instruction(s):_ `vmul.i16 Q0, Q0, D0[0]'
   26194 
   26195 5.50.3.57 Vector long multiply by scalar
   26196 ........................................
   26197 
   26198    * uint64x2_t vmull_n_u32 (uint32x2_t, uint32_t)
   26199      _Form of expected instruction(s):_ `vmull.u32 Q0, D0, D0[0]'
   26200 
   26201    * uint32x4_t vmull_n_u16 (uint16x4_t, uint16_t)
   26202      _Form of expected instruction(s):_ `vmull.u16 Q0, D0, D0[0]'
   26203 
   26204    * int64x2_t vmull_n_s32 (int32x2_t, int32_t)
   26205      _Form of expected instruction(s):_ `vmull.s32 Q0, D0, D0[0]'
   26206 
   26207    * int32x4_t vmull_n_s16 (int16x4_t, int16_t)
   26208      _Form of expected instruction(s):_ `vmull.s16 Q0, D0, D0[0]'
   26209 
   26210 5.50.3.58 Vector saturating doubling long multiply by scalar
   26211 ............................................................
   26212 
   26213    * int64x2_t vqdmull_n_s32 (int32x2_t, int32_t)
   26214      _Form of expected instruction(s):_ `vqdmull.s32 Q0, D0, D0[0]'
   26215 
   26216    * int32x4_t vqdmull_n_s16 (int16x4_t, int16_t)
   26217      _Form of expected instruction(s):_ `vqdmull.s16 Q0, D0, D0[0]'
   26218 
   26219 5.50.3.59 Vector saturating doubling multiply high by scalar
   26220 ............................................................
   26221 
   26222    * int32x4_t vqdmulhq_n_s32 (int32x4_t, int32_t)
   26223      _Form of expected instruction(s):_ `vqdmulh.s32 Q0, Q0, D0[0]'
   26224 
   26225    * int16x8_t vqdmulhq_n_s16 (int16x8_t, int16_t)
   26226      _Form of expected instruction(s):_ `vqdmulh.s16 Q0, Q0, D0[0]'
   26227 
   26228    * int32x2_t vqdmulh_n_s32 (int32x2_t, int32_t)
   26229      _Form of expected instruction(s):_ `vqdmulh.s32 D0, D0, D0[0]'
   26230 
   26231    * int16x4_t vqdmulh_n_s16 (int16x4_t, int16_t)
   26232      _Form of expected instruction(s):_ `vqdmulh.s16 D0, D0, D0[0]'
   26233 
   26234    * int32x4_t vqrdmulhq_n_s32 (int32x4_t, int32_t)
   26235      _Form of expected instruction(s):_ `vqrdmulh.s32 Q0, Q0, D0[0]'
   26236 
   26237    * int16x8_t vqrdmulhq_n_s16 (int16x8_t, int16_t)
   26238      _Form of expected instruction(s):_ `vqrdmulh.s16 Q0, Q0, D0[0]'
   26239 
   26240    * int32x2_t vqrdmulh_n_s32 (int32x2_t, int32_t)
   26241      _Form of expected instruction(s):_ `vqrdmulh.s32 D0, D0, D0[0]'
   26242 
   26243    * int16x4_t vqrdmulh_n_s16 (int16x4_t, int16_t)
   26244      _Form of expected instruction(s):_ `vqrdmulh.s16 D0, D0, D0[0]'
   26245 
   26246 5.50.3.60 Vector multiply-accumulate by scalar
   26247 ..............................................
   26248 
   26249    * float32x2_t vmla_n_f32 (float32x2_t, float32x2_t, float32_t)
   26250      _Form of expected instruction(s):_ `vmla.f32 D0, D0, D0[0]'
   26251 
   26252    * uint32x2_t vmla_n_u32 (uint32x2_t, uint32x2_t, uint32_t)
   26253      _Form of expected instruction(s):_ `vmla.i32 D0, D0, D0[0]'
   26254 
   26255    * uint16x4_t vmla_n_u16 (uint16x4_t, uint16x4_t, uint16_t)
   26256      _Form of expected instruction(s):_ `vmla.i16 D0, D0, D0[0]'
   26257 
   26258    * int32x2_t vmla_n_s32 (int32x2_t, int32x2_t, int32_t)
   26259      _Form of expected instruction(s):_ `vmla.i32 D0, D0, D0[0]'
   26260 
   26261    * int16x4_t vmla_n_s16 (int16x4_t, int16x4_t, int16_t)
   26262      _Form of expected instruction(s):_ `vmla.i16 D0, D0, D0[0]'
   26263 
   26264    * float32x4_t vmlaq_n_f32 (float32x4_t, float32x4_t, float32_t)
   26265      _Form of expected instruction(s):_ `vmla.f32 Q0, Q0, D0[0]'
   26266 
   26267    * uint32x4_t vmlaq_n_u32 (uint32x4_t, uint32x4_t, uint32_t)
   26268      _Form of expected instruction(s):_ `vmla.i32 Q0, Q0, D0[0]'
   26269 
   26270    * uint16x8_t vmlaq_n_u16 (uint16x8_t, uint16x8_t, uint16_t)
   26271      _Form of expected instruction(s):_ `vmla.i16 Q0, Q0, D0[0]'
   26272 
   26273    * int32x4_t vmlaq_n_s32 (int32x4_t, int32x4_t, int32_t)
   26274      _Form of expected instruction(s):_ `vmla.i32 Q0, Q0, D0[0]'
   26275 
   26276    * int16x8_t vmlaq_n_s16 (int16x8_t, int16x8_t, int16_t)
   26277      _Form of expected instruction(s):_ `vmla.i16 Q0, Q0, D0[0]'
   26278 
   26279    * uint64x2_t vmlal_n_u32 (uint64x2_t, uint32x2_t, uint32_t)
   26280      _Form of expected instruction(s):_ `vmlal.u32 Q0, D0, D0[0]'
   26281 
   26282    * uint32x4_t vmlal_n_u16 (uint32x4_t, uint16x4_t, uint16_t)
   26283      _Form of expected instruction(s):_ `vmlal.u16 Q0, D0, D0[0]'
   26284 
   26285    * int64x2_t vmlal_n_s32 (int64x2_t, int32x2_t, int32_t)
   26286      _Form of expected instruction(s):_ `vmlal.s32 Q0, D0, D0[0]'
   26287 
   26288    * int32x4_t vmlal_n_s16 (int32x4_t, int16x4_t, int16_t)
   26289      _Form of expected instruction(s):_ `vmlal.s16 Q0, D0, D0[0]'
   26290 
   26291    * int64x2_t vqdmlal_n_s32 (int64x2_t, int32x2_t, int32_t)
   26292      _Form of expected instruction(s):_ `vqdmlal.s32 Q0, D0, D0[0]'
   26293 
   26294    * int32x4_t vqdmlal_n_s16 (int32x4_t, int16x4_t, int16_t)
   26295      _Form of expected instruction(s):_ `vqdmlal.s16 Q0, D0, D0[0]'
   26296 
   26297 5.50.3.61 Vector multiply-subtract by scalar
   26298 ............................................
   26299 
   26300    * float32x2_t vmls_n_f32 (float32x2_t, float32x2_t, float32_t)
   26301      _Form of expected instruction(s):_ `vmls.f32 D0, D0, D0[0]'
   26302 
   26303    * uint32x2_t vmls_n_u32 (uint32x2_t, uint32x2_t, uint32_t)
   26304      _Form of expected instruction(s):_ `vmls.i32 D0, D0, D0[0]'
   26305 
   26306    * uint16x4_t vmls_n_u16 (uint16x4_t, uint16x4_t, uint16_t)
   26307      _Form of expected instruction(s):_ `vmls.i16 D0, D0, D0[0]'
   26308 
   26309    * int32x2_t vmls_n_s32 (int32x2_t, int32x2_t, int32_t)
   26310      _Form of expected instruction(s):_ `vmls.i32 D0, D0, D0[0]'
   26311 
   26312    * int16x4_t vmls_n_s16 (int16x4_t, int16x4_t, int16_t)
   26313      _Form of expected instruction(s):_ `vmls.i16 D0, D0, D0[0]'
   26314 
   26315    * float32x4_t vmlsq_n_f32 (float32x4_t, float32x4_t, float32_t)
   26316      _Form of expected instruction(s):_ `vmls.f32 Q0, Q0, D0[0]'
   26317 
   26318    * uint32x4_t vmlsq_n_u32 (uint32x4_t, uint32x4_t, uint32_t)
   26319      _Form of expected instruction(s):_ `vmls.i32 Q0, Q0, D0[0]'
   26320 
   26321    * uint16x8_t vmlsq_n_u16 (uint16x8_t, uint16x8_t, uint16_t)
   26322      _Form of expected instruction(s):_ `vmls.i16 Q0, Q0, D0[0]'
   26323 
   26324    * int32x4_t vmlsq_n_s32 (int32x4_t, int32x4_t, int32_t)
   26325      _Form of expected instruction(s):_ `vmls.i32 Q0, Q0, D0[0]'
   26326 
   26327    * int16x8_t vmlsq_n_s16 (int16x8_t, int16x8_t, int16_t)
   26328      _Form of expected instruction(s):_ `vmls.i16 Q0, Q0, D0[0]'
   26329 
   26330    * uint64x2_t vmlsl_n_u32 (uint64x2_t, uint32x2_t, uint32_t)
   26331      _Form of expected instruction(s):_ `vmlsl.u32 Q0, D0, D0[0]'
   26332 
   26333    * uint32x4_t vmlsl_n_u16 (uint32x4_t, uint16x4_t, uint16_t)
   26334      _Form of expected instruction(s):_ `vmlsl.u16 Q0, D0, D0[0]'
   26335 
   26336    * int64x2_t vmlsl_n_s32 (int64x2_t, int32x2_t, int32_t)
   26337      _Form of expected instruction(s):_ `vmlsl.s32 Q0, D0, D0[0]'
   26338 
   26339    * int32x4_t vmlsl_n_s16 (int32x4_t, int16x4_t, int16_t)
   26340      _Form of expected instruction(s):_ `vmlsl.s16 Q0, D0, D0[0]'
   26341 
   26342    * int64x2_t vqdmlsl_n_s32 (int64x2_t, int32x2_t, int32_t)
   26343      _Form of expected instruction(s):_ `vqdmlsl.s32 Q0, D0, D0[0]'
   26344 
   26345    * int32x4_t vqdmlsl_n_s16 (int32x4_t, int16x4_t, int16_t)
   26346      _Form of expected instruction(s):_ `vqdmlsl.s16 Q0, D0, D0[0]'
   26347 
   26348 5.50.3.62 Vector extract
   26349 ........................
   26350 
   26351    * uint32x2_t vext_u32 (uint32x2_t, uint32x2_t, const int)
   26352      _Form of expected instruction(s):_ `vext.32 D0, D0, D0, #0'
   26353 
   26354    * uint16x4_t vext_u16 (uint16x4_t, uint16x4_t, const int)
   26355      _Form of expected instruction(s):_ `vext.16 D0, D0, D0, #0'
   26356 
   26357    * uint8x8_t vext_u8 (uint8x8_t, uint8x8_t, const int)
   26358      _Form of expected instruction(s):_ `vext.8 D0, D0, D0, #0'
   26359 
   26360    * int32x2_t vext_s32 (int32x2_t, int32x2_t, const int)
   26361      _Form of expected instruction(s):_ `vext.32 D0, D0, D0, #0'
   26362 
   26363    * int16x4_t vext_s16 (int16x4_t, int16x4_t, const int)
   26364      _Form of expected instruction(s):_ `vext.16 D0, D0, D0, #0'
   26365 
   26366    * int8x8_t vext_s8 (int8x8_t, int8x8_t, const int)
   26367      _Form of expected instruction(s):_ `vext.8 D0, D0, D0, #0'
   26368 
   26369    * uint64x1_t vext_u64 (uint64x1_t, uint64x1_t, const int)
   26370      _Form of expected instruction(s):_ `vext.64 D0, D0, D0, #0'
   26371 
   26372    * int64x1_t vext_s64 (int64x1_t, int64x1_t, const int)
   26373      _Form of expected instruction(s):_ `vext.64 D0, D0, D0, #0'
   26374 
   26375    * float32x2_t vext_f32 (float32x2_t, float32x2_t, const int)
   26376      _Form of expected instruction(s):_ `vext.32 D0, D0, D0, #0'
   26377 
   26378    * poly16x4_t vext_p16 (poly16x4_t, poly16x4_t, const int)
   26379      _Form of expected instruction(s):_ `vext.16 D0, D0, D0, #0'
   26380 
   26381    * poly8x8_t vext_p8 (poly8x8_t, poly8x8_t, const int)
   26382      _Form of expected instruction(s):_ `vext.8 D0, D0, D0, #0'
   26383 
   26384    * uint32x4_t vextq_u32 (uint32x4_t, uint32x4_t, const int)
   26385      _Form of expected instruction(s):_ `vext.32 Q0, Q0, Q0, #0'
   26386 
   26387    * uint16x8_t vextq_u16 (uint16x8_t, uint16x8_t, const int)
   26388      _Form of expected instruction(s):_ `vext.16 Q0, Q0, Q0, #0'
   26389 
   26390    * uint8x16_t vextq_u8 (uint8x16_t, uint8x16_t, const int)
   26391      _Form of expected instruction(s):_ `vext.8 Q0, Q0, Q0, #0'
   26392 
   26393    * int32x4_t vextq_s32 (int32x4_t, int32x4_t, const int)
   26394      _Form of expected instruction(s):_ `vext.32 Q0, Q0, Q0, #0'
   26395 
   26396    * int16x8_t vextq_s16 (int16x8_t, int16x8_t, const int)
   26397      _Form of expected instruction(s):_ `vext.16 Q0, Q0, Q0, #0'
   26398 
   26399    * int8x16_t vextq_s8 (int8x16_t, int8x16_t, const int)
   26400      _Form of expected instruction(s):_ `vext.8 Q0, Q0, Q0, #0'
   26401 
   26402    * uint64x2_t vextq_u64 (uint64x2_t, uint64x2_t, const int)
   26403      _Form of expected instruction(s):_ `vext.64 Q0, Q0, Q0, #0'
   26404 
   26405    * int64x2_t vextq_s64 (int64x2_t, int64x2_t, const int)
   26406      _Form of expected instruction(s):_ `vext.64 Q0, Q0, Q0, #0'
   26407 
   26408    * float32x4_t vextq_f32 (float32x4_t, float32x4_t, const int)
   26409      _Form of expected instruction(s):_ `vext.32 Q0, Q0, Q0, #0'
   26410 
   26411    * poly16x8_t vextq_p16 (poly16x8_t, poly16x8_t, const int)
   26412      _Form of expected instruction(s):_ `vext.16 Q0, Q0, Q0, #0'
   26413 
   26414    * poly8x16_t vextq_p8 (poly8x16_t, poly8x16_t, const int)
   26415      _Form of expected instruction(s):_ `vext.8 Q0, Q0, Q0, #0'
   26416 
   26417 5.50.3.63 Reverse elements
   26418 ..........................
   26419 
   26420    * uint32x2_t vrev64_u32 (uint32x2_t)
   26421      _Form of expected instruction(s):_ `vrev64.32 D0, D0'
   26422 
   26423    * uint16x4_t vrev64_u16 (uint16x4_t)
   26424      _Form of expected instruction(s):_ `vrev64.16 D0, D0'
   26425 
   26426    * uint8x8_t vrev64_u8 (uint8x8_t)
   26427      _Form of expected instruction(s):_ `vrev64.8 D0, D0'
   26428 
   26429    * int32x2_t vrev64_s32 (int32x2_t)
   26430      _Form of expected instruction(s):_ `vrev64.32 D0, D0'
   26431 
   26432    * int16x4_t vrev64_s16 (int16x4_t)
   26433      _Form of expected instruction(s):_ `vrev64.16 D0, D0'
   26434 
   26435    * int8x8_t vrev64_s8 (int8x8_t)
   26436      _Form of expected instruction(s):_ `vrev64.8 D0, D0'
   26437 
   26438    * float32x2_t vrev64_f32 (float32x2_t)
   26439      _Form of expected instruction(s):_ `vrev64.32 D0, D0'
   26440 
   26441    * poly16x4_t vrev64_p16 (poly16x4_t)
   26442      _Form of expected instruction(s):_ `vrev64.16 D0, D0'
   26443 
   26444    * poly8x8_t vrev64_p8 (poly8x8_t)
   26445      _Form of expected instruction(s):_ `vrev64.8 D0, D0'
   26446 
   26447    * uint32x4_t vrev64q_u32 (uint32x4_t)
   26448      _Form of expected instruction(s):_ `vrev64.32 Q0, Q0'
   26449 
   26450    * uint16x8_t vrev64q_u16 (uint16x8_t)
   26451      _Form of expected instruction(s):_ `vrev64.16 Q0, Q0'
   26452 
   26453    * uint8x16_t vrev64q_u8 (uint8x16_t)
   26454      _Form of expected instruction(s):_ `vrev64.8 Q0, Q0'
   26455 
   26456    * int32x4_t vrev64q_s32 (int32x4_t)
   26457      _Form of expected instruction(s):_ `vrev64.32 Q0, Q0'
   26458 
   26459    * int16x8_t vrev64q_s16 (int16x8_t)
   26460      _Form of expected instruction(s):_ `vrev64.16 Q0, Q0'
   26461 
   26462    * int8x16_t vrev64q_s8 (int8x16_t)
   26463      _Form of expected instruction(s):_ `vrev64.8 Q0, Q0'
   26464 
   26465    * float32x4_t vrev64q_f32 (float32x4_t)
   26466      _Form of expected instruction(s):_ `vrev64.32 Q0, Q0'
   26467 
   26468    * poly16x8_t vrev64q_p16 (poly16x8_t)
   26469      _Form of expected instruction(s):_ `vrev64.16 Q0, Q0'
   26470 
   26471    * poly8x16_t vrev64q_p8 (poly8x16_t)
   26472      _Form of expected instruction(s):_ `vrev64.8 Q0, Q0'
   26473 
   26474    * uint16x4_t vrev32_u16 (uint16x4_t)
   26475      _Form of expected instruction(s):_ `vrev32.16 D0, D0'
   26476 
   26477    * int16x4_t vrev32_s16 (int16x4_t)
   26478      _Form of expected instruction(s):_ `vrev32.16 D0, D0'
   26479 
   26480    * uint8x8_t vrev32_u8 (uint8x8_t)
   26481      _Form of expected instruction(s):_ `vrev32.8 D0, D0'
   26482 
   26483    * int8x8_t vrev32_s8 (int8x8_t)
   26484      _Form of expected instruction(s):_ `vrev32.8 D0, D0'
   26485 
   26486    * poly16x4_t vrev32_p16 (poly16x4_t)
   26487      _Form of expected instruction(s):_ `vrev32.16 D0, D0'
   26488 
   26489    * poly8x8_t vrev32_p8 (poly8x8_t)
   26490      _Form of expected instruction(s):_ `vrev32.8 D0, D0'
   26491 
   26492    * uint16x8_t vrev32q_u16 (uint16x8_t)
   26493      _Form of expected instruction(s):_ `vrev32.16 Q0, Q0'
   26494 
   26495    * int16x8_t vrev32q_s16 (int16x8_t)
   26496      _Form of expected instruction(s):_ `vrev32.16 Q0, Q0'
   26497 
   26498    * uint8x16_t vrev32q_u8 (uint8x16_t)
   26499      _Form of expected instruction(s):_ `vrev32.8 Q0, Q0'
   26500 
   26501    * int8x16_t vrev32q_s8 (int8x16_t)
   26502      _Form of expected instruction(s):_ `vrev32.8 Q0, Q0'
   26503 
   26504    * poly16x8_t vrev32q_p16 (poly16x8_t)
   26505      _Form of expected instruction(s):_ `vrev32.16 Q0, Q0'
   26506 
   26507    * poly8x16_t vrev32q_p8 (poly8x16_t)
   26508      _Form of expected instruction(s):_ `vrev32.8 Q0, Q0'
   26509 
   26510    * uint8x8_t vrev16_u8 (uint8x8_t)
   26511      _Form of expected instruction(s):_ `vrev16.8 D0, D0'
   26512 
   26513    * int8x8_t vrev16_s8 (int8x8_t)
   26514      _Form of expected instruction(s):_ `vrev16.8 D0, D0'
   26515 
   26516    * poly8x8_t vrev16_p8 (poly8x8_t)
   26517      _Form of expected instruction(s):_ `vrev16.8 D0, D0'
   26518 
   26519    * uint8x16_t vrev16q_u8 (uint8x16_t)
   26520      _Form of expected instruction(s):_ `vrev16.8 Q0, Q0'
   26521 
   26522    * int8x16_t vrev16q_s8 (int8x16_t)
   26523      _Form of expected instruction(s):_ `vrev16.8 Q0, Q0'
   26524 
   26525    * poly8x16_t vrev16q_p8 (poly8x16_t)
   26526      _Form of expected instruction(s):_ `vrev16.8 Q0, Q0'
   26527 
   26528 5.50.3.64 Bit selection
   26529 .......................
   26530 
   26531    * uint32x2_t vbsl_u32 (uint32x2_t, uint32x2_t, uint32x2_t)
   26532      _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit
   26533      D0, D0, D0' _or_ `vbif D0, D0, D0'
   26534 
   26535    * uint16x4_t vbsl_u16 (uint16x4_t, uint16x4_t, uint16x4_t)
   26536      _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit
   26537      D0, D0, D0' _or_ `vbif D0, D0, D0'
   26538 
   26539    * uint8x8_t vbsl_u8 (uint8x8_t, uint8x8_t, uint8x8_t)
   26540      _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit
   26541      D0, D0, D0' _or_ `vbif D0, D0, D0'
   26542 
   26543    * int32x2_t vbsl_s32 (uint32x2_t, int32x2_t, int32x2_t)
   26544      _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit
   26545      D0, D0, D0' _or_ `vbif D0, D0, D0'
   26546 
   26547    * int16x4_t vbsl_s16 (uint16x4_t, int16x4_t, int16x4_t)
   26548      _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit
   26549      D0, D0, D0' _or_ `vbif D0, D0, D0'
   26550 
   26551    * int8x8_t vbsl_s8 (uint8x8_t, int8x8_t, int8x8_t)
   26552      _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit
   26553      D0, D0, D0' _or_ `vbif D0, D0, D0'
   26554 
   26555    * uint64x1_t vbsl_u64 (uint64x1_t, uint64x1_t, uint64x1_t)
   26556      _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit
   26557      D0, D0, D0' _or_ `vbif D0, D0, D0'
   26558 
   26559    * int64x1_t vbsl_s64 (uint64x1_t, int64x1_t, int64x1_t)
   26560      _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit
   26561      D0, D0, D0' _or_ `vbif D0, D0, D0'
   26562 
   26563    * float32x2_t vbsl_f32 (uint32x2_t, float32x2_t, float32x2_t)
   26564      _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit
   26565      D0, D0, D0' _or_ `vbif D0, D0, D0'
   26566 
   26567    * poly16x4_t vbsl_p16 (uint16x4_t, poly16x4_t, poly16x4_t)
   26568      _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit
   26569      D0, D0, D0' _or_ `vbif D0, D0, D0'
   26570 
   26571    * poly8x8_t vbsl_p8 (uint8x8_t, poly8x8_t, poly8x8_t)
   26572      _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit
   26573      D0, D0, D0' _or_ `vbif D0, D0, D0'
   26574 
   26575    * uint32x4_t vbslq_u32 (uint32x4_t, uint32x4_t, uint32x4_t)
   26576      _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit
   26577      Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0'
   26578 
   26579    * uint16x8_t vbslq_u16 (uint16x8_t, uint16x8_t, uint16x8_t)
   26580      _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit
   26581      Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0'
   26582 
   26583    * uint8x16_t vbslq_u8 (uint8x16_t, uint8x16_t, uint8x16_t)
   26584      _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit
   26585      Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0'
   26586 
   26587    * int32x4_t vbslq_s32 (uint32x4_t, int32x4_t, int32x4_t)
   26588      _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit
   26589      Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0'
   26590 
   26591    * int16x8_t vbslq_s16 (uint16x8_t, int16x8_t, int16x8_t)
   26592      _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit
   26593      Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0'
   26594 
   26595    * int8x16_t vbslq_s8 (uint8x16_t, int8x16_t, int8x16_t)
   26596      _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit
   26597      Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0'
   26598 
   26599    * uint64x2_t vbslq_u64 (uint64x2_t, uint64x2_t, uint64x2_t)
   26600      _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit
   26601      Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0'
   26602 
   26603    * int64x2_t vbslq_s64 (uint64x2_t, int64x2_t, int64x2_t)
   26604      _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit
   26605      Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0'
   26606 
   26607    * float32x4_t vbslq_f32 (uint32x4_t, float32x4_t, float32x4_t)
   26608      _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit
   26609      Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0'
   26610 
   26611    * poly16x8_t vbslq_p16 (uint16x8_t, poly16x8_t, poly16x8_t)
   26612      _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit
   26613      Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0'
   26614 
   26615    * poly8x16_t vbslq_p8 (uint8x16_t, poly8x16_t, poly8x16_t)
   26616      _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit
   26617      Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0'
   26618 
   26619 5.50.3.65 Transpose elements
   26620 ............................
   26621 
   26622    * uint32x2x2_t vtrn_u32 (uint32x2_t, uint32x2_t)
   26623      _Form of expected instruction(s):_ `vtrn.32 D0, D1'
   26624 
   26625    * uint16x4x2_t vtrn_u16 (uint16x4_t, uint16x4_t)
   26626      _Form of expected instruction(s):_ `vtrn.16 D0, D1'
   26627 
   26628    * uint8x8x2_t vtrn_u8 (uint8x8_t, uint8x8_t)
   26629      _Form of expected instruction(s):_ `vtrn.8 D0, D1'
   26630 
   26631    * int32x2x2_t vtrn_s32 (int32x2_t, int32x2_t)
   26632      _Form of expected instruction(s):_ `vtrn.32 D0, D1'
   26633 
   26634    * int16x4x2_t vtrn_s16 (int16x4_t, int16x4_t)
   26635      _Form of expected instruction(s):_ `vtrn.16 D0, D1'
   26636 
   26637    * int8x8x2_t vtrn_s8 (int8x8_t, int8x8_t)
   26638      _Form of expected instruction(s):_ `vtrn.8 D0, D1'
   26639 
   26640    * float32x2x2_t vtrn_f32 (float32x2_t, float32x2_t)
   26641      _Form of expected instruction(s):_ `vtrn.32 D0, D1'
   26642 
   26643    * poly16x4x2_t vtrn_p16 (poly16x4_t, poly16x4_t)
   26644      _Form of expected instruction(s):_ `vtrn.16 D0, D1'
   26645 
   26646    * poly8x8x2_t vtrn_p8 (poly8x8_t, poly8x8_t)
   26647      _Form of expected instruction(s):_ `vtrn.8 D0, D1'
   26648 
   26649    * uint32x4x2_t vtrnq_u32 (uint32x4_t, uint32x4_t)
   26650      _Form of expected instruction(s):_ `vtrn.32 Q0, Q1'
   26651 
   26652    * uint16x8x2_t vtrnq_u16 (uint16x8_t, uint16x8_t)
   26653      _Form of expected instruction(s):_ `vtrn.16 Q0, Q1'
   26654 
   26655    * uint8x16x2_t vtrnq_u8 (uint8x16_t, uint8x16_t)
   26656      _Form of expected instruction(s):_ `vtrn.8 Q0, Q1'
   26657 
   26658    * int32x4x2_t vtrnq_s32 (int32x4_t, int32x4_t)
   26659      _Form of expected instruction(s):_ `vtrn.32 Q0, Q1'
   26660 
   26661    * int16x8x2_t vtrnq_s16 (int16x8_t, int16x8_t)
   26662      _Form of expected instruction(s):_ `vtrn.16 Q0, Q1'
   26663 
   26664    * int8x16x2_t vtrnq_s8 (int8x16_t, int8x16_t)
   26665      _Form of expected instruction(s):_ `vtrn.8 Q0, Q1'
   26666 
   26667    * float32x4x2_t vtrnq_f32 (float32x4_t, float32x4_t)
   26668      _Form of expected instruction(s):_ `vtrn.32 Q0, Q1'
   26669 
   26670    * poly16x8x2_t vtrnq_p16 (poly16x8_t, poly16x8_t)
   26671      _Form of expected instruction(s):_ `vtrn.16 Q0, Q1'
   26672 
   26673    * poly8x16x2_t vtrnq_p8 (poly8x16_t, poly8x16_t)
   26674      _Form of expected instruction(s):_ `vtrn.8 Q0, Q1'
   26675 
   26676 5.50.3.66 Zip elements
   26677 ......................
   26678 
   26679    * uint32x2x2_t vzip_u32 (uint32x2_t, uint32x2_t)
   26680      _Form of expected instruction(s):_ `vzip.32 D0, D1'
   26681 
   26682    * uint16x4x2_t vzip_u16 (uint16x4_t, uint16x4_t)
   26683      _Form of expected instruction(s):_ `vzip.16 D0, D1'
   26684 
   26685    * uint8x8x2_t vzip_u8 (uint8x8_t, uint8x8_t)
   26686      _Form of expected instruction(s):_ `vzip.8 D0, D1'
   26687 
   26688    * int32x2x2_t vzip_s32 (int32x2_t, int32x2_t)
   26689      _Form of expected instruction(s):_ `vzip.32 D0, D1'
   26690 
   26691    * int16x4x2_t vzip_s16 (int16x4_t, int16x4_t)
   26692      _Form of expected instruction(s):_ `vzip.16 D0, D1'
   26693 
   26694    * int8x8x2_t vzip_s8 (int8x8_t, int8x8_t)
   26695      _Form of expected instruction(s):_ `vzip.8 D0, D1'
   26696 
   26697    * float32x2x2_t vzip_f32 (float32x2_t, float32x2_t)
   26698      _Form of expected instruction(s):_ `vzip.32 D0, D1'
   26699 
   26700    * poly16x4x2_t vzip_p16 (poly16x4_t, poly16x4_t)
   26701      _Form of expected instruction(s):_ `vzip.16 D0, D1'
   26702 
   26703    * poly8x8x2_t vzip_p8 (poly8x8_t, poly8x8_t)
   26704      _Form of expected instruction(s):_ `vzip.8 D0, D1'
   26705 
   26706    * uint32x4x2_t vzipq_u32 (uint32x4_t, uint32x4_t)
   26707      _Form of expected instruction(s):_ `vzip.32 Q0, Q1'
   26708 
   26709    * uint16x8x2_t vzipq_u16 (uint16x8_t, uint16x8_t)
   26710      _Form of expected instruction(s):_ `vzip.16 Q0, Q1'
   26711 
   26712    * uint8x16x2_t vzipq_u8 (uint8x16_t, uint8x16_t)
   26713      _Form of expected instruction(s):_ `vzip.8 Q0, Q1'
   26714 
   26715    * int32x4x2_t vzipq_s32 (int32x4_t, int32x4_t)
   26716      _Form of expected instruction(s):_ `vzip.32 Q0, Q1'
   26717 
   26718    * int16x8x2_t vzipq_s16 (int16x8_t, int16x8_t)
   26719      _Form of expected instruction(s):_ `vzip.16 Q0, Q1'
   26720 
   26721    * int8x16x2_t vzipq_s8 (int8x16_t, int8x16_t)
   26722      _Form of expected instruction(s):_ `vzip.8 Q0, Q1'
   26723 
   26724    * float32x4x2_t vzipq_f32 (float32x4_t, float32x4_t)
   26725      _Form of expected instruction(s):_ `vzip.32 Q0, Q1'
   26726 
   26727    * poly16x8x2_t vzipq_p16 (poly16x8_t, poly16x8_t)
   26728      _Form of expected instruction(s):_ `vzip.16 Q0, Q1'
   26729 
   26730    * poly8x16x2_t vzipq_p8 (poly8x16_t, poly8x16_t)
   26731      _Form of expected instruction(s):_ `vzip.8 Q0, Q1'
   26732 
   26733 5.50.3.67 Unzip elements
   26734 ........................
   26735 
   26736    * uint32x2x2_t vuzp_u32 (uint32x2_t, uint32x2_t)
   26737      _Form of expected instruction(s):_ `vuzp.32 D0, D1'
   26738 
   26739    * uint16x4x2_t vuzp_u16 (uint16x4_t, uint16x4_t)
   26740      _Form of expected instruction(s):_ `vuzp.16 D0, D1'
   26741 
   26742    * uint8x8x2_t vuzp_u8 (uint8x8_t, uint8x8_t)
   26743      _Form of expected instruction(s):_ `vuzp.8 D0, D1'
   26744 
   26745    * int32x2x2_t vuzp_s32 (int32x2_t, int32x2_t)
   26746      _Form of expected instruction(s):_ `vuzp.32 D0, D1'
   26747 
   26748    * int16x4x2_t vuzp_s16 (int16x4_t, int16x4_t)
   26749      _Form of expected instruction(s):_ `vuzp.16 D0, D1'
   26750 
   26751    * int8x8x2_t vuzp_s8 (int8x8_t, int8x8_t)
   26752      _Form of expected instruction(s):_ `vuzp.8 D0, D1'
   26753 
   26754    * float32x2x2_t vuzp_f32 (float32x2_t, float32x2_t)
   26755      _Form of expected instruction(s):_ `vuzp.32 D0, D1'
   26756 
   26757    * poly16x4x2_t vuzp_p16 (poly16x4_t, poly16x4_t)
   26758      _Form of expected instruction(s):_ `vuzp.16 D0, D1'
   26759 
   26760    * poly8x8x2_t vuzp_p8 (poly8x8_t, poly8x8_t)
   26761      _Form of expected instruction(s):_ `vuzp.8 D0, D1'
   26762 
   26763    * uint32x4x2_t vuzpq_u32 (uint32x4_t, uint32x4_t)
   26764      _Form of expected instruction(s):_ `vuzp.32 Q0, Q1'
   26765 
   26766    * uint16x8x2_t vuzpq_u16 (uint16x8_t, uint16x8_t)
   26767      _Form of expected instruction(s):_ `vuzp.16 Q0, Q1'
   26768 
   26769    * uint8x16x2_t vuzpq_u8 (uint8x16_t, uint8x16_t)
   26770      _Form of expected instruction(s):_ `vuzp.8 Q0, Q1'
   26771 
   26772    * int32x4x2_t vuzpq_s32 (int32x4_t, int32x4_t)
   26773      _Form of expected instruction(s):_ `vuzp.32 Q0, Q1'
   26774 
   26775    * int16x8x2_t vuzpq_s16 (int16x8_t, int16x8_t)
   26776      _Form of expected instruction(s):_ `vuzp.16 Q0, Q1'
   26777 
   26778    * int8x16x2_t vuzpq_s8 (int8x16_t, int8x16_t)
   26779      _Form of expected instruction(s):_ `vuzp.8 Q0, Q1'
   26780 
   26781    * float32x4x2_t vuzpq_f32 (float32x4_t, float32x4_t)
   26782      _Form of expected instruction(s):_ `vuzp.32 Q0, Q1'
   26783 
   26784    * poly16x8x2_t vuzpq_p16 (poly16x8_t, poly16x8_t)
   26785      _Form of expected instruction(s):_ `vuzp.16 Q0, Q1'
   26786 
   26787    * poly8x16x2_t vuzpq_p8 (poly8x16_t, poly8x16_t)
   26788      _Form of expected instruction(s):_ `vuzp.8 Q0, Q1'
   26789 
   26790 5.50.3.68 Element/structure loads, VLD1 variants
   26791 ................................................
   26792 
   26793    * uint32x2_t vld1_u32 (const uint32_t *)
   26794      _Form of expected instruction(s):_ `vld1.32 {D0}, [R0]'
   26795 
   26796    * uint16x4_t vld1_u16 (const uint16_t *)
   26797      _Form of expected instruction(s):_ `vld1.16 {D0}, [R0]'
   26798 
   26799    * uint8x8_t vld1_u8 (const uint8_t *)
   26800      _Form of expected instruction(s):_ `vld1.8 {D0}, [R0]'
   26801 
   26802    * int32x2_t vld1_s32 (const int32_t *)
   26803      _Form of expected instruction(s):_ `vld1.32 {D0}, [R0]'
   26804 
   26805    * int16x4_t vld1_s16 (const int16_t *)
   26806      _Form of expected instruction(s):_ `vld1.16 {D0}, [R0]'
   26807 
   26808    * int8x8_t vld1_s8 (const int8_t *)
   26809      _Form of expected instruction(s):_ `vld1.8 {D0}, [R0]'
   26810 
   26811    * uint64x1_t vld1_u64 (const uint64_t *)
   26812      _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]'
   26813 
   26814    * int64x1_t vld1_s64 (const int64_t *)
   26815      _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]'
   26816 
   26817    * float32x2_t vld1_f32 (const float32_t *)
   26818      _Form of expected instruction(s):_ `vld1.32 {D0}, [R0]'
   26819 
   26820    * poly16x4_t vld1_p16 (const poly16_t *)
   26821      _Form of expected instruction(s):_ `vld1.16 {D0}, [R0]'
   26822 
   26823    * poly8x8_t vld1_p8 (const poly8_t *)
   26824      _Form of expected instruction(s):_ `vld1.8 {D0}, [R0]'
   26825 
   26826    * uint32x4_t vld1q_u32 (const uint32_t *)
   26827      _Form of expected instruction(s):_ `vld1.32 {D0, D1}, [R0]'
   26828 
   26829    * uint16x8_t vld1q_u16 (const uint16_t *)
   26830      _Form of expected instruction(s):_ `vld1.16 {D0, D1}, [R0]'
   26831 
   26832    * uint8x16_t vld1q_u8 (const uint8_t *)
   26833      _Form of expected instruction(s):_ `vld1.8 {D0, D1}, [R0]'
   26834 
   26835    * int32x4_t vld1q_s32 (const int32_t *)
   26836      _Form of expected instruction(s):_ `vld1.32 {D0, D1}, [R0]'
   26837 
   26838    * int16x8_t vld1q_s16 (const int16_t *)
   26839      _Form of expected instruction(s):_ `vld1.16 {D0, D1}, [R0]'
   26840 
   26841    * int8x16_t vld1q_s8 (const int8_t *)
   26842      _Form of expected instruction(s):_ `vld1.8 {D0, D1}, [R0]'
   26843 
   26844    * uint64x2_t vld1q_u64 (const uint64_t *)
   26845      _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]'
   26846 
   26847    * int64x2_t vld1q_s64 (const int64_t *)
   26848      _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]'
   26849 
   26850    * float32x4_t vld1q_f32 (const float32_t *)
   26851      _Form of expected instruction(s):_ `vld1.32 {D0, D1}, [R0]'
   26852 
   26853    * poly16x8_t vld1q_p16 (const poly16_t *)
   26854      _Form of expected instruction(s):_ `vld1.16 {D0, D1}, [R0]'
   26855 
   26856    * poly8x16_t vld1q_p8 (const poly8_t *)
   26857      _Form of expected instruction(s):_ `vld1.8 {D0, D1}, [R0]'
   26858 
   26859    * uint32x2_t vld1_lane_u32 (const uint32_t *, uint32x2_t, const int)
   26860      _Form of expected instruction(s):_ `vld1.32 {D0[0]}, [R0]'
   26861 
   26862    * uint16x4_t vld1_lane_u16 (const uint16_t *, uint16x4_t, const int)
   26863      _Form of expected instruction(s):_ `vld1.16 {D0[0]}, [R0]'
   26864 
   26865    * uint8x8_t vld1_lane_u8 (const uint8_t *, uint8x8_t, const int)
   26866      _Form of expected instruction(s):_ `vld1.8 {D0[0]}, [R0]'
   26867 
   26868    * int32x2_t vld1_lane_s32 (const int32_t *, int32x2_t, const int)
   26869      _Form of expected instruction(s):_ `vld1.32 {D0[0]}, [R0]'
   26870 
   26871    * int16x4_t vld1_lane_s16 (const int16_t *, int16x4_t, const int)
   26872      _Form of expected instruction(s):_ `vld1.16 {D0[0]}, [R0]'
   26873 
   26874    * int8x8_t vld1_lane_s8 (const int8_t *, int8x8_t, const int)
   26875      _Form of expected instruction(s):_ `vld1.8 {D0[0]}, [R0]'
   26876 
   26877    * float32x2_t vld1_lane_f32 (const float32_t *, float32x2_t, const
   26878      int)
   26879      _Form of expected instruction(s):_ `vld1.32 {D0[0]}, [R0]'
   26880 
   26881    * poly16x4_t vld1_lane_p16 (const poly16_t *, poly16x4_t, const int)
   26882      _Form of expected instruction(s):_ `vld1.16 {D0[0]}, [R0]'
   26883 
   26884    * poly8x8_t vld1_lane_p8 (const poly8_t *, poly8x8_t, const int)
   26885      _Form of expected instruction(s):_ `vld1.8 {D0[0]}, [R0]'
   26886 
   26887    * uint64x1_t vld1_lane_u64 (const uint64_t *, uint64x1_t, const int)
   26888      _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]'
   26889 
   26890    * int64x1_t vld1_lane_s64 (const int64_t *, int64x1_t, const int)
   26891      _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]'
   26892 
   26893    * uint32x4_t vld1q_lane_u32 (const uint32_t *, uint32x4_t, const int)
   26894      _Form of expected instruction(s):_ `vld1.32 {D0[0]}, [R0]'
   26895 
   26896    * uint16x8_t vld1q_lane_u16 (const uint16_t *, uint16x8_t, const int)
   26897      _Form of expected instruction(s):_ `vld1.16 {D0[0]}, [R0]'
   26898 
   26899    * uint8x16_t vld1q_lane_u8 (const uint8_t *, uint8x16_t, const int)
   26900      _Form of expected instruction(s):_ `vld1.8 {D0[0]}, [R0]'
   26901 
   26902    * int32x4_t vld1q_lane_s32 (const int32_t *, int32x4_t, const int)
   26903      _Form of expected instruction(s):_ `vld1.32 {D0[0]}, [R0]'
   26904 
   26905    * int16x8_t vld1q_lane_s16 (const int16_t *, int16x8_t, const int)
   26906      _Form of expected instruction(s):_ `vld1.16 {D0[0]}, [R0]'
   26907 
   26908    * int8x16_t vld1q_lane_s8 (const int8_t *, int8x16_t, const int)
   26909      _Form of expected instruction(s):_ `vld1.8 {D0[0]}, [R0]'
   26910 
   26911    * float32x4_t vld1q_lane_f32 (const float32_t *, float32x4_t, const
   26912      int)
   26913      _Form of expected instruction(s):_ `vld1.32 {D0[0]}, [R0]'
   26914 
   26915    * poly16x8_t vld1q_lane_p16 (const poly16_t *, poly16x8_t, const int)
   26916      _Form of expected instruction(s):_ `vld1.16 {D0[0]}, [R0]'
   26917 
   26918    * poly8x16_t vld1q_lane_p8 (const poly8_t *, poly8x16_t, const int)
   26919      _Form of expected instruction(s):_ `vld1.8 {D0[0]}, [R0]'
   26920 
   26921    * uint64x2_t vld1q_lane_u64 (const uint64_t *, uint64x2_t, const int)
   26922      _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]'
   26923 
   26924    * int64x2_t vld1q_lane_s64 (const int64_t *, int64x2_t, const int)
   26925      _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]'
   26926 
   26927    * uint32x2_t vld1_dup_u32 (const uint32_t *)
   26928      _Form of expected instruction(s):_ `vld1.32 {D0[]}, [R0]'
   26929 
   26930    * uint16x4_t vld1_dup_u16 (const uint16_t *)
   26931      _Form of expected instruction(s):_ `vld1.16 {D0[]}, [R0]'
   26932 
   26933    * uint8x8_t vld1_dup_u8 (const uint8_t *)
   26934      _Form of expected instruction(s):_ `vld1.8 {D0[]}, [R0]'
   26935 
   26936    * int32x2_t vld1_dup_s32 (const int32_t *)
   26937      _Form of expected instruction(s):_ `vld1.32 {D0[]}, [R0]'
   26938 
   26939    * int16x4_t vld1_dup_s16 (const int16_t *)
   26940      _Form of expected instruction(s):_ `vld1.16 {D0[]}, [R0]'
   26941 
   26942    * int8x8_t vld1_dup_s8 (const int8_t *)
   26943      _Form of expected instruction(s):_ `vld1.8 {D0[]}, [R0]'
   26944 
   26945    * float32x2_t vld1_dup_f32 (const float32_t *)
   26946      _Form of expected instruction(s):_ `vld1.32 {D0[]}, [R0]'
   26947 
   26948    * poly16x4_t vld1_dup_p16 (const poly16_t *)
   26949      _Form of expected instruction(s):_ `vld1.16 {D0[]}, [R0]'
   26950 
   26951    * poly8x8_t vld1_dup_p8 (const poly8_t *)
   26952      _Form of expected instruction(s):_ `vld1.8 {D0[]}, [R0]'
   26953 
   26954    * uint64x1_t vld1_dup_u64 (const uint64_t *)
   26955      _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]'
   26956 
   26957    * int64x1_t vld1_dup_s64 (const int64_t *)
   26958      _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]'
   26959 
   26960    * uint32x4_t vld1q_dup_u32 (const uint32_t *)
   26961      _Form of expected instruction(s):_ `vld1.32 {D0[], D1[]}, [R0]'
   26962 
   26963    * uint16x8_t vld1q_dup_u16 (const uint16_t *)
   26964      _Form of expected instruction(s):_ `vld1.16 {D0[], D1[]}, [R0]'
   26965 
   26966    * uint8x16_t vld1q_dup_u8 (const uint8_t *)
   26967      _Form of expected instruction(s):_ `vld1.8 {D0[], D1[]}, [R0]'
   26968 
   26969    * int32x4_t vld1q_dup_s32 (const int32_t *)
   26970      _Form of expected instruction(s):_ `vld1.32 {D0[], D1[]}, [R0]'
   26971 
   26972    * int16x8_t vld1q_dup_s16 (const int16_t *)
   26973      _Form of expected instruction(s):_ `vld1.16 {D0[], D1[]}, [R0]'
   26974 
   26975    * int8x16_t vld1q_dup_s8 (const int8_t *)
   26976      _Form of expected instruction(s):_ `vld1.8 {D0[], D1[]}, [R0]'
   26977 
   26978    * float32x4_t vld1q_dup_f32 (const float32_t *)
   26979      _Form of expected instruction(s):_ `vld1.32 {D0[], D1[]}, [R0]'
   26980 
   26981    * poly16x8_t vld1q_dup_p16 (const poly16_t *)
   26982      _Form of expected instruction(s):_ `vld1.16 {D0[], D1[]}, [R0]'
   26983 
   26984    * poly8x16_t vld1q_dup_p8 (const poly8_t *)
   26985      _Form of expected instruction(s):_ `vld1.8 {D0[], D1[]}, [R0]'
   26986 
   26987    * uint64x2_t vld1q_dup_u64 (const uint64_t *)
   26988      _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]'
   26989 
   26990    * int64x2_t vld1q_dup_s64 (const int64_t *)
   26991      _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]'
   26992 
   26993 5.50.3.69 Element/structure stores, VST1 variants
   26994 .................................................
   26995 
   26996    * void vst1_u32 (uint32_t *, uint32x2_t)
   26997      _Form of expected instruction(s):_ `vst1.32 {D0}, [R0]'
   26998 
   26999    * void vst1_u16 (uint16_t *, uint16x4_t)
   27000      _Form of expected instruction(s):_ `vst1.16 {D0}, [R0]'
   27001 
   27002    * void vst1_u8 (uint8_t *, uint8x8_t)
   27003      _Form of expected instruction(s):_ `vst1.8 {D0}, [R0]'
   27004 
   27005    * void vst1_s32 (int32_t *, int32x2_t)
   27006      _Form of expected instruction(s):_ `vst1.32 {D0}, [R0]'
   27007 
   27008    * void vst1_s16 (int16_t *, int16x4_t)
   27009      _Form of expected instruction(s):_ `vst1.16 {D0}, [R0]'
   27010 
   27011    * void vst1_s8 (int8_t *, int8x8_t)
   27012      _Form of expected instruction(s):_ `vst1.8 {D0}, [R0]'
   27013 
   27014    * void vst1_u64 (uint64_t *, uint64x1_t)
   27015      _Form of expected instruction(s):_ `vst1.64 {D0}, [R0]'
   27016 
   27017    * void vst1_s64 (int64_t *, int64x1_t)
   27018      _Form of expected instruction(s):_ `vst1.64 {D0}, [R0]'
   27019 
   27020    * void vst1_f32 (float32_t *, float32x2_t)
   27021      _Form of expected instruction(s):_ `vst1.32 {D0}, [R0]'
   27022 
   27023    * void vst1_p16 (poly16_t *, poly16x4_t)
   27024      _Form of expected instruction(s):_ `vst1.16 {D0}, [R0]'
   27025 
   27026    * void vst1_p8 (poly8_t *, poly8x8_t)
   27027      _Form of expected instruction(s):_ `vst1.8 {D0}, [R0]'
   27028 
   27029    * void vst1q_u32 (uint32_t *, uint32x4_t)
   27030      _Form of expected instruction(s):_ `vst1.32 {D0, D1}, [R0]'
   27031 
   27032    * void vst1q_u16 (uint16_t *, uint16x8_t)
   27033      _Form of expected instruction(s):_ `vst1.16 {D0, D1}, [R0]'
   27034 
   27035    * void vst1q_u8 (uint8_t *, uint8x16_t)
   27036      _Form of expected instruction(s):_ `vst1.8 {D0, D1}, [R0]'
   27037 
   27038    * void vst1q_s32 (int32_t *, int32x4_t)
   27039      _Form of expected instruction(s):_ `vst1.32 {D0, D1}, [R0]'
   27040 
   27041    * void vst1q_s16 (int16_t *, int16x8_t)
   27042      _Form of expected instruction(s):_ `vst1.16 {D0, D1}, [R0]'
   27043 
   27044    * void vst1q_s8 (int8_t *, int8x16_t)
   27045      _Form of expected instruction(s):_ `vst1.8 {D0, D1}, [R0]'
   27046 
   27047    * void vst1q_u64 (uint64_t *, uint64x2_t)
   27048      _Form of expected instruction(s):_ `vst1.64 {D0, D1}, [R0]'
   27049 
   27050    * void vst1q_s64 (int64_t *, int64x2_t)
   27051      _Form of expected instruction(s):_ `vst1.64 {D0, D1}, [R0]'
   27052 
   27053    * void vst1q_f32 (float32_t *, float32x4_t)
   27054      _Form of expected instruction(s):_ `vst1.32 {D0, D1}, [R0]'
   27055 
   27056    * void vst1q_p16 (poly16_t *, poly16x8_t)
   27057      _Form of expected instruction(s):_ `vst1.16 {D0, D1}, [R0]'
   27058 
   27059    * void vst1q_p8 (poly8_t *, poly8x16_t)
   27060      _Form of expected instruction(s):_ `vst1.8 {D0, D1}, [R0]'
   27061 
   27062    * void vst1_lane_u32 (uint32_t *, uint32x2_t, const int)
   27063      _Form of expected instruction(s):_ `vst1.32 {D0[0]}, [R0]'
   27064 
   27065    * void vst1_lane_u16 (uint16_t *, uint16x4_t, const int)
   27066      _Form of expected instruction(s):_ `vst1.16 {D0[0]}, [R0]'
   27067 
   27068    * void vst1_lane_u8 (uint8_t *, uint8x8_t, const int)
   27069      _Form of expected instruction(s):_ `vst1.8 {D0[0]}, [R0]'
   27070 
   27071    * void vst1_lane_s32 (int32_t *, int32x2_t, const int)
   27072      _Form of expected instruction(s):_ `vst1.32 {D0[0]}, [R0]'
   27073 
   27074    * void vst1_lane_s16 (int16_t *, int16x4_t, const int)
   27075      _Form of expected instruction(s):_ `vst1.16 {D0[0]}, [R0]'
   27076 
   27077    * void vst1_lane_s8 (int8_t *, int8x8_t, const int)
   27078      _Form of expected instruction(s):_ `vst1.8 {D0[0]}, [R0]'
   27079 
   27080    * void vst1_lane_f32 (float32_t *, float32x2_t, const int)
   27081      _Form of expected instruction(s):_ `vst1.32 {D0[0]}, [R0]'
   27082 
   27083    * void vst1_lane_p16 (poly16_t *, poly16x4_t, const int)
   27084      _Form of expected instruction(s):_ `vst1.16 {D0[0]}, [R0]'
   27085 
   27086    * void vst1_lane_p8 (poly8_t *, poly8x8_t, const int)
   27087      _Form of expected instruction(s):_ `vst1.8 {D0[0]}, [R0]'
   27088 
   27089    * void vst1_lane_s64 (int64_t *, int64x1_t, const int)
   27090      _Form of expected instruction(s):_ `vst1.64 {D0}, [R0]'
   27091 
   27092    * void vst1_lane_u64 (uint64_t *, uint64x1_t, const int)
   27093      _Form of expected instruction(s):_ `vst1.64 {D0}, [R0]'
   27094 
   27095    * void vst1q_lane_u32 (uint32_t *, uint32x4_t, const int)
   27096      _Form of expected instruction(s):_ `vst1.32 {D0[0]}, [R0]'
   27097 
   27098    * void vst1q_lane_u16 (uint16_t *, uint16x8_t, const int)
   27099      _Form of expected instruction(s):_ `vst1.16 {D0[0]}, [R0]'
   27100 
   27101    * void vst1q_lane_u8 (uint8_t *, uint8x16_t, const int)
   27102      _Form of expected instruction(s):_ `vst1.8 {D0[0]}, [R0]'
   27103 
   27104    * void vst1q_lane_s32 (int32_t *, int32x4_t, const int)
   27105      _Form of expected instruction(s):_ `vst1.32 {D0[0]}, [R0]'
   27106 
   27107    * void vst1q_lane_s16 (int16_t *, int16x8_t, const int)
   27108      _Form of expected instruction(s):_ `vst1.16 {D0[0]}, [R0]'
   27109 
   27110    * void vst1q_lane_s8 (int8_t *, int8x16_t, const int)
   27111      _Form of expected instruction(s):_ `vst1.8 {D0[0]}, [R0]'
   27112 
   27113    * void vst1q_lane_f32 (float32_t *, float32x4_t, const int)
   27114      _Form of expected instruction(s):_ `vst1.32 {D0[0]}, [R0]'
   27115 
   27116    * void vst1q_lane_p16 (poly16_t *, poly16x8_t, const int)
   27117      _Form of expected instruction(s):_ `vst1.16 {D0[0]}, [R0]'
   27118 
   27119    * void vst1q_lane_p8 (poly8_t *, poly8x16_t, const int)
   27120      _Form of expected instruction(s):_ `vst1.8 {D0[0]}, [R0]'
   27121 
   27122    * void vst1q_lane_s64 (int64_t *, int64x2_t, const int)
   27123      _Form of expected instruction(s):_ `vst1.64 {D0}, [R0]'
   27124 
   27125    * void vst1q_lane_u64 (uint64_t *, uint64x2_t, const int)
   27126      _Form of expected instruction(s):_ `vst1.64 {D0}, [R0]'
   27127 
   27128 5.50.3.70 Element/structure loads, VLD2 variants
   27129 ................................................
   27130 
   27131    * uint32x2x2_t vld2_u32 (const uint32_t *)
   27132      _Form of expected instruction(s):_ `vld2.32 {D0, D1}, [R0]'
   27133 
   27134    * uint16x4x2_t vld2_u16 (const uint16_t *)
   27135      _Form of expected instruction(s):_ `vld2.16 {D0, D1}, [R0]'
   27136 
   27137    * uint8x8x2_t vld2_u8 (const uint8_t *)
   27138      _Form of expected instruction(s):_ `vld2.8 {D0, D1}, [R0]'
   27139 
   27140    * int32x2x2_t vld2_s32 (const int32_t *)
   27141      _Form of expected instruction(s):_ `vld2.32 {D0, D1}, [R0]'
   27142 
   27143    * int16x4x2_t vld2_s16 (const int16_t *)
   27144      _Form of expected instruction(s):_ `vld2.16 {D0, D1}, [R0]'
   27145 
   27146    * int8x8x2_t vld2_s8 (const int8_t *)
   27147      _Form of expected instruction(s):_ `vld2.8 {D0, D1}, [R0]'
   27148 
   27149    * float32x2x2_t vld2_f32 (const float32_t *)
   27150      _Form of expected instruction(s):_ `vld2.32 {D0, D1}, [R0]'
   27151 
   27152    * poly16x4x2_t vld2_p16 (const poly16_t *)
   27153      _Form of expected instruction(s):_ `vld2.16 {D0, D1}, [R0]'
   27154 
   27155    * poly8x8x2_t vld2_p8 (const poly8_t *)
   27156      _Form of expected instruction(s):_ `vld2.8 {D0, D1}, [R0]'
   27157 
   27158    * uint64x1x2_t vld2_u64 (const uint64_t *)
   27159      _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]'
   27160 
   27161    * int64x1x2_t vld2_s64 (const int64_t *)
   27162      _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]'
   27163 
   27164    * uint32x4x2_t vld2q_u32 (const uint32_t *)
   27165      _Form of expected instruction(s):_ `vld2.32 {D0, D1}, [R0]'
   27166 
   27167    * uint16x8x2_t vld2q_u16 (const uint16_t *)
   27168      _Form of expected instruction(s):_ `vld2.16 {D0, D1}, [R0]'
   27169 
   27170    * uint8x16x2_t vld2q_u8 (const uint8_t *)
   27171      _Form of expected instruction(s):_ `vld2.8 {D0, D1}, [R0]'
   27172 
   27173    * int32x4x2_t vld2q_s32 (const int32_t *)
   27174      _Form of expected instruction(s):_ `vld2.32 {D0, D1}, [R0]'
   27175 
   27176    * int16x8x2_t vld2q_s16 (const int16_t *)
   27177      _Form of expected instruction(s):_ `vld2.16 {D0, D1}, [R0]'
   27178 
   27179    * int8x16x2_t vld2q_s8 (const int8_t *)
   27180      _Form of expected instruction(s):_ `vld2.8 {D0, D1}, [R0]'
   27181 
   27182    * float32x4x2_t vld2q_f32 (const float32_t *)
   27183      _Form of expected instruction(s):_ `vld2.32 {D0, D1}, [R0]'
   27184 
   27185    * poly16x8x2_t vld2q_p16 (const poly16_t *)
   27186      _Form of expected instruction(s):_ `vld2.16 {D0, D1}, [R0]'
   27187 
   27188    * poly8x16x2_t vld2q_p8 (const poly8_t *)
   27189      _Form of expected instruction(s):_ `vld2.8 {D0, D1}, [R0]'
   27190 
   27191    * uint32x2x2_t vld2_lane_u32 (const uint32_t *, uint32x2x2_t, const
   27192      int)
   27193      _Form of expected instruction(s):_ `vld2.32 {D0[0], D1[0]}, [R0]'
   27194 
   27195    * uint16x4x2_t vld2_lane_u16 (const uint16_t *, uint16x4x2_t, const
   27196      int)
   27197      _Form of expected instruction(s):_ `vld2.16 {D0[0], D1[0]}, [R0]'
   27198 
   27199    * uint8x8x2_t vld2_lane_u8 (const uint8_t *, uint8x8x2_t, const int)
   27200      _Form of expected instruction(s):_ `vld2.8 {D0[0], D1[0]}, [R0]'
   27201 
   27202    * int32x2x2_t vld2_lane_s32 (const int32_t *, int32x2x2_t, const int)
   27203      _Form of expected instruction(s):_ `vld2.32 {D0[0], D1[0]}, [R0]'
   27204 
   27205    * int16x4x2_t vld2_lane_s16 (const int16_t *, int16x4x2_t, const int)
   27206      _Form of expected instruction(s):_ `vld2.16 {D0[0], D1[0]}, [R0]'
   27207 
   27208    * int8x8x2_t vld2_lane_s8 (const int8_t *, int8x8x2_t, const int)
   27209      _Form of expected instruction(s):_ `vld2.8 {D0[0], D1[0]}, [R0]'
   27210 
   27211    * float32x2x2_t vld2_lane_f32 (const float32_t *, float32x2x2_t,
   27212      const int)
   27213      _Form of expected instruction(s):_ `vld2.32 {D0[0], D1[0]}, [R0]'
   27214 
   27215    * poly16x4x2_t vld2_lane_p16 (const poly16_t *, poly16x4x2_t, const
   27216      int)
   27217      _Form of expected instruction(s):_ `vld2.16 {D0[0], D1[0]}, [R0]'
   27218 
   27219    * poly8x8x2_t vld2_lane_p8 (const poly8_t *, poly8x8x2_t, const int)
   27220      _Form of expected instruction(s):_ `vld2.8 {D0[0], D1[0]}, [R0]'
   27221 
   27222    * int32x4x2_t vld2q_lane_s32 (const int32_t *, int32x4x2_t, const
   27223      int)
   27224      _Form of expected instruction(s):_ `vld2.32 {D0[0], D1[0]}, [R0]'
   27225 
   27226    * int16x8x2_t vld2q_lane_s16 (const int16_t *, int16x8x2_t, const
   27227      int)
   27228      _Form of expected instruction(s):_ `vld2.16 {D0[0], D1[0]}, [R0]'
   27229 
   27230    * uint32x4x2_t vld2q_lane_u32 (const uint32_t *, uint32x4x2_t, const
   27231      int)
   27232      _Form of expected instruction(s):_ `vld2.32 {D0[0], D1[0]}, [R0]'
   27233 
   27234    * uint16x8x2_t vld2q_lane_u16 (const uint16_t *, uint16x8x2_t, const
   27235      int)
   27236      _Form of expected instruction(s):_ `vld2.16 {D0[0], D1[0]}, [R0]'
   27237 
   27238    * float32x4x2_t vld2q_lane_f32 (const float32_t *, float32x4x2_t,
   27239      const int)
   27240      _Form of expected instruction(s):_ `vld2.32 {D0[0], D1[0]}, [R0]'
   27241 
   27242    * poly16x8x2_t vld2q_lane_p16 (const poly16_t *, poly16x8x2_t, const
   27243      int)
   27244      _Form of expected instruction(s):_ `vld2.16 {D0[0], D1[0]}, [R0]'
   27245 
   27246    * uint32x2x2_t vld2_dup_u32 (const uint32_t *)
   27247      _Form of expected instruction(s):_ `vld2.32 {D0[], D1[]}, [R0]'
   27248 
   27249    * uint16x4x2_t vld2_dup_u16 (const uint16_t *)
   27250      _Form of expected instruction(s):_ `vld2.16 {D0[], D1[]}, [R0]'
   27251 
   27252    * uint8x8x2_t vld2_dup_u8 (const uint8_t *)
   27253      _Form of expected instruction(s):_ `vld2.8 {D0[], D1[]}, [R0]'
   27254 
   27255    * int32x2x2_t vld2_dup_s32 (const int32_t *)
   27256      _Form of expected instruction(s):_ `vld2.32 {D0[], D1[]}, [R0]'
   27257 
   27258    * int16x4x2_t vld2_dup_s16 (const int16_t *)
   27259      _Form of expected instruction(s):_ `vld2.16 {D0[], D1[]}, [R0]'
   27260 
   27261    * int8x8x2_t vld2_dup_s8 (const int8_t *)
   27262      _Form of expected instruction(s):_ `vld2.8 {D0[], D1[]}, [R0]'
   27263 
   27264    * float32x2x2_t vld2_dup_f32 (const float32_t *)
   27265      _Form of expected instruction(s):_ `vld2.32 {D0[], D1[]}, [R0]'
   27266 
   27267    * poly16x4x2_t vld2_dup_p16 (const poly16_t *)
   27268      _Form of expected instruction(s):_ `vld2.16 {D0[], D1[]}, [R0]'
   27269 
   27270    * poly8x8x2_t vld2_dup_p8 (const poly8_t *)
   27271      _Form of expected instruction(s):_ `vld2.8 {D0[], D1[]}, [R0]'
   27272 
   27273    * uint64x1x2_t vld2_dup_u64 (const uint64_t *)
   27274      _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]'
   27275 
   27276    * int64x1x2_t vld2_dup_s64 (const int64_t *)
   27277      _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]'
   27278 
   27279 5.50.3.71 Element/structure stores, VST2 variants
   27280 .................................................
   27281 
   27282    * void vst2_u32 (uint32_t *, uint32x2x2_t)
   27283      _Form of expected instruction(s):_ `vst2.32 {D0, D1}, [R0]'
   27284 
   27285    * void vst2_u16 (uint16_t *, uint16x4x2_t)
   27286      _Form of expected instruction(s):_ `vst2.16 {D0, D1}, [R0]'
   27287 
   27288    * void vst2_u8 (uint8_t *, uint8x8x2_t)
   27289      _Form of expected instruction(s):_ `vst2.8 {D0, D1}, [R0]'
   27290 
   27291    * void vst2_s32 (int32_t *, int32x2x2_t)
   27292      _Form of expected instruction(s):_ `vst2.32 {D0, D1}, [R0]'
   27293 
   27294    * void vst2_s16 (int16_t *, int16x4x2_t)
   27295      _Form of expected instruction(s):_ `vst2.16 {D0, D1}, [R0]'
   27296 
   27297    * void vst2_s8 (int8_t *, int8x8x2_t)
   27298      _Form of expected instruction(s):_ `vst2.8 {D0, D1}, [R0]'
   27299 
   27300    * void vst2_f32 (float32_t *, float32x2x2_t)
   27301      _Form of expected instruction(s):_ `vst2.32 {D0, D1}, [R0]'
   27302 
   27303    * void vst2_p16 (poly16_t *, poly16x4x2_t)
   27304      _Form of expected instruction(s):_ `vst2.16 {D0, D1}, [R0]'
   27305 
   27306    * void vst2_p8 (poly8_t *, poly8x8x2_t)
   27307      _Form of expected instruction(s):_ `vst2.8 {D0, D1}, [R0]'
   27308 
   27309    * void vst2_u64 (uint64_t *, uint64x1x2_t)
   27310      _Form of expected instruction(s):_ `vst1.64 {D0, D1}, [R0]'
   27311 
   27312    * void vst2_s64 (int64_t *, int64x1x2_t)
   27313      _Form of expected instruction(s):_ `vst1.64 {D0, D1}, [R0]'
   27314 
   27315    * void vst2q_u32 (uint32_t *, uint32x4x2_t)
   27316      _Form of expected instruction(s):_ `vst2.32 {D0, D1}, [R0]'
   27317 
   27318    * void vst2q_u16 (uint16_t *, uint16x8x2_t)
   27319      _Form of expected instruction(s):_ `vst2.16 {D0, D1}, [R0]'
   27320 
   27321    * void vst2q_u8 (uint8_t *, uint8x16x2_t)
   27322      _Form of expected instruction(s):_ `vst2.8 {D0, D1}, [R0]'
   27323 
   27324    * void vst2q_s32 (int32_t *, int32x4x2_t)
   27325      _Form of expected instruction(s):_ `vst2.32 {D0, D1}, [R0]'
   27326 
   27327    * void vst2q_s16 (int16_t *, int16x8x2_t)
   27328      _Form of expected instruction(s):_ `vst2.16 {D0, D1}, [R0]'
   27329 
   27330    * void vst2q_s8 (int8_t *, int8x16x2_t)
   27331      _Form of expected instruction(s):_ `vst2.8 {D0, D1}, [R0]'
   27332 
   27333    * void vst2q_f32 (float32_t *, float32x4x2_t)
   27334      _Form of expected instruction(s):_ `vst2.32 {D0, D1}, [R0]'
   27335 
   27336    * void vst2q_p16 (poly16_t *, poly16x8x2_t)
   27337      _Form of expected instruction(s):_ `vst2.16 {D0, D1}, [R0]'
   27338 
   27339    * void vst2q_p8 (poly8_t *, poly8x16x2_t)
   27340      _Form of expected instruction(s):_ `vst2.8 {D0, D1}, [R0]'
   27341 
   27342    * void vst2_lane_u32 (uint32_t *, uint32x2x2_t, const int)
   27343      _Form of expected instruction(s):_ `vst2.32 {D0[0], D1[0]}, [R0]'
   27344 
   27345    * void vst2_lane_u16 (uint16_t *, uint16x4x2_t, const int)
   27346      _Form of expected instruction(s):_ `vst2.16 {D0[0], D1[0]}, [R0]'
   27347 
   27348    * void vst2_lane_u8 (uint8_t *, uint8x8x2_t, const int)
   27349      _Form of expected instruction(s):_ `vst2.8 {D0[0], D1[0]}, [R0]'
   27350 
   27351    * void vst2_lane_s32 (int32_t *, int32x2x2_t, const int)
   27352      _Form of expected instruction(s):_ `vst2.32 {D0[0], D1[0]}, [R0]'
   27353 
   27354    * void vst2_lane_s16 (int16_t *, int16x4x2_t, const int)
   27355      _Form of expected instruction(s):_ `vst2.16 {D0[0], D1[0]}, [R0]'
   27356 
   27357    * void vst2_lane_s8 (int8_t *, int8x8x2_t, const int)
   27358      _Form of expected instruction(s):_ `vst2.8 {D0[0], D1[0]}, [R0]'
   27359 
   27360    * void vst2_lane_f32 (float32_t *, float32x2x2_t, const int)
   27361      _Form of expected instruction(s):_ `vst2.32 {D0[0], D1[0]}, [R0]'
   27362 
   27363    * void vst2_lane_p16 (poly16_t *, poly16x4x2_t, const int)
   27364      _Form of expected instruction(s):_ `vst2.16 {D0[0], D1[0]}, [R0]'
   27365 
   27366    * void vst2_lane_p8 (poly8_t *, poly8x8x2_t, const int)
   27367      _Form of expected instruction(s):_ `vst2.8 {D0[0], D1[0]}, [R0]'
   27368 
   27369    * void vst2q_lane_s32 (int32_t *, int32x4x2_t, const int)
   27370      _Form of expected instruction(s):_ `vst2.32 {D0[0], D1[0]}, [R0]'
   27371 
   27372    * void vst2q_lane_s16 (int16_t *, int16x8x2_t, const int)
   27373      _Form of expected instruction(s):_ `vst2.16 {D0[0], D1[0]}, [R0]'
   27374 
   27375    * void vst2q_lane_u32 (uint32_t *, uint32x4x2_t, const int)
   27376      _Form of expected instruction(s):_ `vst2.32 {D0[0], D1[0]}, [R0]'
   27377 
   27378    * void vst2q_lane_u16 (uint16_t *, uint16x8x2_t, const int)
   27379      _Form of expected instruction(s):_ `vst2.16 {D0[0], D1[0]}, [R0]'
   27380 
   27381    * void vst2q_lane_f32 (float32_t *, float32x4x2_t, const int)
   27382      _Form of expected instruction(s):_ `vst2.32 {D0[0], D1[0]}, [R0]'
   27383 
   27384    * void vst2q_lane_p16 (poly16_t *, poly16x8x2_t, const int)
   27385      _Form of expected instruction(s):_ `vst2.16 {D0[0], D1[0]}, [R0]'
   27386 
   27387 5.50.3.72 Element/structure loads, VLD3 variants
   27388 ................................................
   27389 
   27390    * uint32x2x3_t vld3_u32 (const uint32_t *)
   27391      _Form of expected instruction(s):_ `vld3.32 {D0, D1, D2}, [R0]'
   27392 
   27393    * uint16x4x3_t vld3_u16 (const uint16_t *)
   27394      _Form of expected instruction(s):_ `vld3.16 {D0, D1, D2}, [R0]'
   27395 
   27396    * uint8x8x3_t vld3_u8 (const uint8_t *)
   27397      _Form of expected instruction(s):_ `vld3.8 {D0, D1, D2}, [R0]'
   27398 
   27399    * int32x2x3_t vld3_s32 (const int32_t *)
   27400      _Form of expected instruction(s):_ `vld3.32 {D0, D1, D2}, [R0]'
   27401 
   27402    * int16x4x3_t vld3_s16 (const int16_t *)
   27403      _Form of expected instruction(s):_ `vld3.16 {D0, D1, D2}, [R0]'
   27404 
   27405    * int8x8x3_t vld3_s8 (const int8_t *)
   27406      _Form of expected instruction(s):_ `vld3.8 {D0, D1, D2}, [R0]'
   27407 
   27408    * float32x2x3_t vld3_f32 (const float32_t *)
   27409      _Form of expected instruction(s):_ `vld3.32 {D0, D1, D2}, [R0]'
   27410 
   27411    * poly16x4x3_t vld3_p16 (const poly16_t *)
   27412      _Form of expected instruction(s):_ `vld3.16 {D0, D1, D2}, [R0]'
   27413 
   27414    * poly8x8x3_t vld3_p8 (const poly8_t *)
   27415      _Form of expected instruction(s):_ `vld3.8 {D0, D1, D2}, [R0]'
   27416 
   27417    * uint64x1x3_t vld3_u64 (const uint64_t *)
   27418      _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2}, [R0]'
   27419 
   27420    * int64x1x3_t vld3_s64 (const int64_t *)
   27421      _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2}, [R0]'
   27422 
   27423    * uint32x4x3_t vld3q_u32 (const uint32_t *)
   27424      _Form of expected instruction(s):_ `vld3.32 {D0, D1, D2}, [R0]'
   27425 
   27426    * uint16x8x3_t vld3q_u16 (const uint16_t *)
   27427      _Form of expected instruction(s):_ `vld3.16 {D0, D1, D2}, [R0]'
   27428 
   27429    * uint8x16x3_t vld3q_u8 (const uint8_t *)
   27430      _Form of expected instruction(s):_ `vld3.8 {D0, D1, D2}, [R0]'
   27431 
   27432    * int32x4x3_t vld3q_s32 (const int32_t *)
   27433      _Form of expected instruction(s):_ `vld3.32 {D0, D1, D2}, [R0]'
   27434 
   27435    * int16x8x3_t vld3q_s16 (const int16_t *)
   27436      _Form of expected instruction(s):_ `vld3.16 {D0, D1, D2}, [R0]'
   27437 
   27438    * int8x16x3_t vld3q_s8 (const int8_t *)
   27439      _Form of expected instruction(s):_ `vld3.8 {D0, D1, D2}, [R0]'
   27440 
   27441    * float32x4x3_t vld3q_f32 (const float32_t *)
   27442      _Form of expected instruction(s):_ `vld3.32 {D0, D1, D2}, [R0]'
   27443 
   27444    * poly16x8x3_t vld3q_p16 (const poly16_t *)
   27445      _Form of expected instruction(s):_ `vld3.16 {D0, D1, D2}, [R0]'
   27446 
   27447    * poly8x16x3_t vld3q_p8 (const poly8_t *)
   27448      _Form of expected instruction(s):_ `vld3.8 {D0, D1, D2}, [R0]'
   27449 
   27450    * uint32x2x3_t vld3_lane_u32 (const uint32_t *, uint32x2x3_t, const
   27451      int)
   27452      _Form of expected instruction(s):_ `vld3.32 {D0[0], D1[0], D2[0]},
   27453      [R0]'
   27454 
   27455    * uint16x4x3_t vld3_lane_u16 (const uint16_t *, uint16x4x3_t, const
   27456      int)
   27457      _Form of expected instruction(s):_ `vld3.16 {D0[0], D1[0], D2[0]},
   27458      [R0]'
   27459 
   27460    * uint8x8x3_t vld3_lane_u8 (const uint8_t *, uint8x8x3_t, const int)
   27461      _Form of expected instruction(s):_ `vld3.8 {D0[0], D1[0], D2[0]},
   27462      [R0]'
   27463 
   27464    * int32x2x3_t vld3_lane_s32 (const int32_t *, int32x2x3_t, const int)
   27465      _Form of expected instruction(s):_ `vld3.32 {D0[0], D1[0], D2[0]},
   27466      [R0]'
   27467 
   27468    * int16x4x3_t vld3_lane_s16 (const int16_t *, int16x4x3_t, const int)
   27469      _Form of expected instruction(s):_ `vld3.16 {D0[0], D1[0], D2[0]},
   27470      [R0]'
   27471 
   27472    * int8x8x3_t vld3_lane_s8 (const int8_t *, int8x8x3_t, const int)
   27473      _Form of expected instruction(s):_ `vld3.8 {D0[0], D1[0], D2[0]},
   27474      [R0]'
   27475 
   27476    * float32x2x3_t vld3_lane_f32 (const float32_t *, float32x2x3_t,
   27477      const int)
   27478      _Form of expected instruction(s):_ `vld3.32 {D0[0], D1[0], D2[0]},
   27479      [R0]'
   27480 
   27481    * poly16x4x3_t vld3_lane_p16 (const poly16_t *, poly16x4x3_t, const
   27482      int)
   27483      _Form of expected instruction(s):_ `vld3.16 {D0[0], D1[0], D2[0]},
   27484      [R0]'
   27485 
   27486    * poly8x8x3_t vld3_lane_p8 (const poly8_t *, poly8x8x3_t, const int)
   27487      _Form of expected instruction(s):_ `vld3.8 {D0[0], D1[0], D2[0]},
   27488      [R0]'
   27489 
   27490    * int32x4x3_t vld3q_lane_s32 (const int32_t *, int32x4x3_t, const
   27491      int)
   27492      _Form of expected instruction(s):_ `vld3.32 {D0[0], D1[0], D2[0]},
   27493      [R0]'
   27494 
   27495    * int16x8x3_t vld3q_lane_s16 (const int16_t *, int16x8x3_t, const
   27496      int)
   27497      _Form of expected instruction(s):_ `vld3.16 {D0[0], D1[0], D2[0]},
   27498      [R0]'
   27499 
   27500    * uint32x4x3_t vld3q_lane_u32 (const uint32_t *, uint32x4x3_t, const
   27501      int)
   27502      _Form of expected instruction(s):_ `vld3.32 {D0[0], D1[0], D2[0]},
   27503      [R0]'
   27504 
   27505    * uint16x8x3_t vld3q_lane_u16 (const uint16_t *, uint16x8x3_t, const
   27506      int)
   27507      _Form of expected instruction(s):_ `vld3.16 {D0[0], D1[0], D2[0]},
   27508      [R0]'
   27509 
   27510    * float32x4x3_t vld3q_lane_f32 (const float32_t *, float32x4x3_t,
   27511      const int)
   27512      _Form of expected instruction(s):_ `vld3.32 {D0[0], D1[0], D2[0]},
   27513      [R0]'
   27514 
   27515    * poly16x8x3_t vld3q_lane_p16 (const poly16_t *, poly16x8x3_t, const
   27516      int)
   27517      _Form of expected instruction(s):_ `vld3.16 {D0[0], D1[0], D2[0]},
   27518      [R0]'
   27519 
   27520    * uint32x2x3_t vld3_dup_u32 (const uint32_t *)
   27521      _Form of expected instruction(s):_ `vld3.32 {D0[], D1[], D2[]},
   27522      [R0]'
   27523 
   27524    * uint16x4x3_t vld3_dup_u16 (const uint16_t *)
   27525      _Form of expected instruction(s):_ `vld3.16 {D0[], D1[], D2[]},
   27526      [R0]'
   27527 
   27528    * uint8x8x3_t vld3_dup_u8 (const uint8_t *)
   27529      _Form of expected instruction(s):_ `vld3.8 {D0[], D1[], D2[]},
   27530      [R0]'
   27531 
   27532    * int32x2x3_t vld3_dup_s32 (const int32_t *)
   27533      _Form of expected instruction(s):_ `vld3.32 {D0[], D1[], D2[]},
   27534      [R0]'
   27535 
   27536    * int16x4x3_t vld3_dup_s16 (const int16_t *)
   27537      _Form of expected instruction(s):_ `vld3.16 {D0[], D1[], D2[]},
   27538      [R0]'
   27539 
   27540    * int8x8x3_t vld3_dup_s8 (const int8_t *)
   27541      _Form of expected instruction(s):_ `vld3.8 {D0[], D1[], D2[]},
   27542      [R0]'
   27543 
   27544    * float32x2x3_t vld3_dup_f32 (const float32_t *)
   27545      _Form of expected instruction(s):_ `vld3.32 {D0[], D1[], D2[]},
   27546      [R0]'
   27547 
   27548    * poly16x4x3_t vld3_dup_p16 (const poly16_t *)
   27549      _Form of expected instruction(s):_ `vld3.16 {D0[], D1[], D2[]},
   27550      [R0]'
   27551 
   27552    * poly8x8x3_t vld3_dup_p8 (const poly8_t *)
   27553      _Form of expected instruction(s):_ `vld3.8 {D0[], D1[], D2[]},
   27554      [R0]'
   27555 
   27556    * uint64x1x3_t vld3_dup_u64 (const uint64_t *)
   27557      _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2}, [R0]'
   27558 
   27559    * int64x1x3_t vld3_dup_s64 (const int64_t *)
   27560      _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2}, [R0]'
   27561 
   27562 5.50.3.73 Element/structure stores, VST3 variants
   27563 .................................................
   27564 
   27565    * void vst3_u32 (uint32_t *, uint32x2x3_t)
   27566      _Form of expected instruction(s):_ `vst3.32 {D0, D1, D2, D3}, [R0]'
   27567 
   27568    * void vst3_u16 (uint16_t *, uint16x4x3_t)
   27569      _Form of expected instruction(s):_ `vst3.16 {D0, D1, D2, D3}, [R0]'
   27570 
   27571    * void vst3_u8 (uint8_t *, uint8x8x3_t)
   27572      _Form of expected instruction(s):_ `vst3.8 {D0, D1, D2, D3}, [R0]'
   27573 
   27574    * void vst3_s32 (int32_t *, int32x2x3_t)
   27575      _Form of expected instruction(s):_ `vst3.32 {D0, D1, D2, D3}, [R0]'
   27576 
   27577    * void vst3_s16 (int16_t *, int16x4x3_t)
   27578      _Form of expected instruction(s):_ `vst3.16 {D0, D1, D2, D3}, [R0]'
   27579 
   27580    * void vst3_s8 (int8_t *, int8x8x3_t)
   27581      _Form of expected instruction(s):_ `vst3.8 {D0, D1, D2, D3}, [R0]'
   27582 
   27583    * void vst3_f32 (float32_t *, float32x2x3_t)
   27584      _Form of expected instruction(s):_ `vst3.32 {D0, D1, D2, D3}, [R0]'
   27585 
   27586    * void vst3_p16 (poly16_t *, poly16x4x3_t)
   27587      _Form of expected instruction(s):_ `vst3.16 {D0, D1, D2, D3}, [R0]'
   27588 
   27589    * void vst3_p8 (poly8_t *, poly8x8x3_t)
   27590      _Form of expected instruction(s):_ `vst3.8 {D0, D1, D2, D3}, [R0]'
   27591 
   27592    * void vst3_u64 (uint64_t *, uint64x1x3_t)
   27593      _Form of expected instruction(s):_ `vst1.64 {D0, D1, D2, D3}, [R0]'
   27594 
   27595    * void vst3_s64 (int64_t *, int64x1x3_t)
   27596      _Form of expected instruction(s):_ `vst1.64 {D0, D1, D2, D3}, [R0]'
   27597 
   27598    * void vst3q_u32 (uint32_t *, uint32x4x3_t)
   27599      _Form of expected instruction(s):_ `vst3.32 {D0, D1, D2}, [R0]'
   27600 
   27601    * void vst3q_u16 (uint16_t *, uint16x8x3_t)
   27602      _Form of expected instruction(s):_ `vst3.16 {D0, D1, D2}, [R0]'
   27603 
   27604    * void vst3q_u8 (uint8_t *, uint8x16x3_t)
   27605      _Form of expected instruction(s):_ `vst3.8 {D0, D1, D2}, [R0]'
   27606 
   27607    * void vst3q_s32 (int32_t *, int32x4x3_t)
   27608      _Form of expected instruction(s):_ `vst3.32 {D0, D1, D2}, [R0]'
   27609 
   27610    * void vst3q_s16 (int16_t *, int16x8x3_t)
   27611      _Form of expected instruction(s):_ `vst3.16 {D0, D1, D2}, [R0]'
   27612 
   27613    * void vst3q_s8 (int8_t *, int8x16x3_t)
   27614      _Form of expected instruction(s):_ `vst3.8 {D0, D1, D2}, [R0]'
   27615 
   27616    * void vst3q_f32 (float32_t *, float32x4x3_t)
   27617      _Form of expected instruction(s):_ `vst3.32 {D0, D1, D2}, [R0]'
   27618 
   27619    * void vst3q_p16 (poly16_t *, poly16x8x3_t)
   27620      _Form of expected instruction(s):_ `vst3.16 {D0, D1, D2}, [R0]'
   27621 
   27622    * void vst3q_p8 (poly8_t *, poly8x16x3_t)
   27623      _Form of expected instruction(s):_ `vst3.8 {D0, D1, D2}, [R0]'
   27624 
   27625    * void vst3_lane_u32 (uint32_t *, uint32x2x3_t, const int)
   27626      _Form of expected instruction(s):_ `vst3.32 {D0[0], D1[0], D2[0]},
   27627      [R0]'
   27628 
   27629    * void vst3_lane_u16 (uint16_t *, uint16x4x3_t, const int)
   27630      _Form of expected instruction(s):_ `vst3.16 {D0[0], D1[0], D2[0]},
   27631      [R0]'
   27632 
   27633    * void vst3_lane_u8 (uint8_t *, uint8x8x3_t, const int)
   27634      _Form of expected instruction(s):_ `vst3.8 {D0[0], D1[0], D2[0]},
   27635      [R0]'
   27636 
   27637    * void vst3_lane_s32 (int32_t *, int32x2x3_t, const int)
   27638      _Form of expected instruction(s):_ `vst3.32 {D0[0], D1[0], D2[0]},
   27639      [R0]'
   27640 
   27641    * void vst3_lane_s16 (int16_t *, int16x4x3_t, const int)
   27642      _Form of expected instruction(s):_ `vst3.16 {D0[0], D1[0], D2[0]},
   27643      [R0]'
   27644 
   27645    * void vst3_lane_s8 (int8_t *, int8x8x3_t, const int)
   27646      _Form of expected instruction(s):_ `vst3.8 {D0[0], D1[0], D2[0]},
   27647      [R0]'
   27648 
   27649    * void vst3_lane_f32 (float32_t *, float32x2x3_t, const int)
   27650      _Form of expected instruction(s):_ `vst3.32 {D0[0], D1[0], D2[0]},
   27651      [R0]'
   27652 
   27653    * void vst3_lane_p16 (poly16_t *, poly16x4x3_t, const int)
   27654      _Form of expected instruction(s):_ `vst3.16 {D0[0], D1[0], D2[0]},
   27655      [R0]'
   27656 
   27657    * void vst3_lane_p8 (poly8_t *, poly8x8x3_t, const int)
   27658      _Form of expected instruction(s):_ `vst3.8 {D0[0], D1[0], D2[0]},
   27659      [R0]'
   27660 
   27661    * void vst3q_lane_s32 (int32_t *, int32x4x3_t, const int)
   27662      _Form of expected instruction(s):_ `vst3.32 {D0[0], D1[0], D2[0]},
   27663      [R0]'
   27664 
   27665    * void vst3q_lane_s16 (int16_t *, int16x8x3_t, const int)
   27666      _Form of expected instruction(s):_ `vst3.16 {D0[0], D1[0], D2[0]},
   27667      [R0]'
   27668 
   27669    * void vst3q_lane_u32 (uint32_t *, uint32x4x3_t, const int)
   27670      _Form of expected instruction(s):_ `vst3.32 {D0[0], D1[0], D2[0]},
   27671      [R0]'
   27672 
   27673    * void vst3q_lane_u16 (uint16_t *, uint16x8x3_t, const int)
   27674      _Form of expected instruction(s):_ `vst3.16 {D0[0], D1[0], D2[0]},
   27675      [R0]'
   27676 
   27677    * void vst3q_lane_f32 (float32_t *, float32x4x3_t, const int)
   27678      _Form of expected instruction(s):_ `vst3.32 {D0[0], D1[0], D2[0]},
   27679      [R0]'
   27680 
   27681    * void vst3q_lane_p16 (poly16_t *, poly16x8x3_t, const int)
   27682      _Form of expected instruction(s):_ `vst3.16 {D0[0], D1[0], D2[0]},
   27683      [R0]'
   27684 
   27685 5.50.3.74 Element/structure loads, VLD4 variants
   27686 ................................................
   27687 
   27688    * uint32x2x4_t vld4_u32 (const uint32_t *)
   27689      _Form of expected instruction(s):_ `vld4.32 {D0, D1, D2, D3}, [R0]'
   27690 
   27691    * uint16x4x4_t vld4_u16 (const uint16_t *)
   27692      _Form of expected instruction(s):_ `vld4.16 {D0, D1, D2, D3}, [R0]'
   27693 
   27694    * uint8x8x4_t vld4_u8 (const uint8_t *)
   27695      _Form of expected instruction(s):_ `vld4.8 {D0, D1, D2, D3}, [R0]'
   27696 
   27697    * int32x2x4_t vld4_s32 (const int32_t *)
   27698      _Form of expected instruction(s):_ `vld4.32 {D0, D1, D2, D3}, [R0]'
   27699 
   27700    * int16x4x4_t vld4_s16 (const int16_t *)
   27701      _Form of expected instruction(s):_ `vld4.16 {D0, D1, D2, D3}, [R0]'
   27702 
   27703    * int8x8x4_t vld4_s8 (const int8_t *)
   27704      _Form of expected instruction(s):_ `vld4.8 {D0, D1, D2, D3}, [R0]'
   27705 
   27706    * float32x2x4_t vld4_f32 (const float32_t *)
   27707      _Form of expected instruction(s):_ `vld4.32 {D0, D1, D2, D3}, [R0]'
   27708 
   27709    * poly16x4x4_t vld4_p16 (const poly16_t *)
   27710      _Form of expected instruction(s):_ `vld4.16 {D0, D1, D2, D3}, [R0]'
   27711 
   27712    * poly8x8x4_t vld4_p8 (const poly8_t *)
   27713      _Form of expected instruction(s):_ `vld4.8 {D0, D1, D2, D3}, [R0]'
   27714 
   27715    * uint64x1x4_t vld4_u64 (const uint64_t *)
   27716      _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2, D3}, [R0]'
   27717 
   27718    * int64x1x4_t vld4_s64 (const int64_t *)
   27719      _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2, D3}, [R0]'
   27720 
   27721    * uint32x4x4_t vld4q_u32 (const uint32_t *)
   27722      _Form of expected instruction(s):_ `vld4.32 {D0, D1, D2, D3}, [R0]'
   27723 
   27724    * uint16x8x4_t vld4q_u16 (const uint16_t *)
   27725      _Form of expected instruction(s):_ `vld4.16 {D0, D1, D2, D3}, [R0]'
   27726 
   27727    * uint8x16x4_t vld4q_u8 (const uint8_t *)
   27728      _Form of expected instruction(s):_ `vld4.8 {D0, D1, D2, D3}, [R0]'
   27729 
   27730    * int32x4x4_t vld4q_s32 (const int32_t *)
   27731      _Form of expected instruction(s):_ `vld4.32 {D0, D1, D2, D3}, [R0]'
   27732 
   27733    * int16x8x4_t vld4q_s16 (const int16_t *)
   27734      _Form of expected instruction(s):_ `vld4.16 {D0, D1, D2, D3}, [R0]'
   27735 
   27736    * int8x16x4_t vld4q_s8 (const int8_t *)
   27737      _Form of expected instruction(s):_ `vld4.8 {D0, D1, D2, D3}, [R0]'
   27738 
   27739    * float32x4x4_t vld4q_f32 (const float32_t *)
   27740      _Form of expected instruction(s):_ `vld4.32 {D0, D1, D2, D3}, [R0]'
   27741 
   27742    * poly16x8x4_t vld4q_p16 (const poly16_t *)
   27743      _Form of expected instruction(s):_ `vld4.16 {D0, D1, D2, D3}, [R0]'
   27744 
   27745    * poly8x16x4_t vld4q_p8 (const poly8_t *)
   27746      _Form of expected instruction(s):_ `vld4.8 {D0, D1, D2, D3}, [R0]'
   27747 
   27748    * uint32x2x4_t vld4_lane_u32 (const uint32_t *, uint32x2x4_t, const
   27749      int)
   27750      _Form of expected instruction(s):_ `vld4.32 {D0[0], D1[0], D2[0],
   27751      D3[0]}, [R0]'
   27752 
   27753    * uint16x4x4_t vld4_lane_u16 (const uint16_t *, uint16x4x4_t, const
   27754      int)
   27755      _Form of expected instruction(s):_ `vld4.16 {D0[0], D1[0], D2[0],
   27756      D3[0]}, [R0]'
   27757 
   27758    * uint8x8x4_t vld4_lane_u8 (const uint8_t *, uint8x8x4_t, const int)
   27759      _Form of expected instruction(s):_ `vld4.8 {D0[0], D1[0], D2[0],
   27760      D3[0]}, [R0]'
   27761 
   27762    * int32x2x4_t vld4_lane_s32 (const int32_t *, int32x2x4_t, const int)
   27763      _Form of expected instruction(s):_ `vld4.32 {D0[0], D1[0], D2[0],
   27764      D3[0]}, [R0]'
   27765 
   27766    * int16x4x4_t vld4_lane_s16 (const int16_t *, int16x4x4_t, const int)
   27767      _Form of expected instruction(s):_ `vld4.16 {D0[0], D1[0], D2[0],
   27768      D3[0]}, [R0]'
   27769 
   27770    * int8x8x4_t vld4_lane_s8 (const int8_t *, int8x8x4_t, const int)
   27771      _Form of expected instruction(s):_ `vld4.8 {D0[0], D1[0], D2[0],
   27772      D3[0]}, [R0]'
   27773 
   27774    * float32x2x4_t vld4_lane_f32 (const float32_t *, float32x2x4_t,
   27775      const int)
   27776      _Form of expected instruction(s):_ `vld4.32 {D0[0], D1[0], D2[0],
   27777      D3[0]}, [R0]'
   27778 
   27779    * poly16x4x4_t vld4_lane_p16 (const poly16_t *, poly16x4x4_t, const
   27780      int)
   27781      _Form of expected instruction(s):_ `vld4.16 {D0[0], D1[0], D2[0],
   27782      D3[0]}, [R0]'
   27783 
   27784    * poly8x8x4_t vld4_lane_p8 (const poly8_t *, poly8x8x4_t, const int)
   27785      _Form of expected instruction(s):_ `vld4.8 {D0[0], D1[0], D2[0],
   27786      D3[0]}, [R0]'
   27787 
   27788    * int32x4x4_t vld4q_lane_s32 (const int32_t *, int32x4x4_t, const
   27789      int)
   27790      _Form of expected instruction(s):_ `vld4.32 {D0[0], D1[0], D2[0],
   27791      D3[0]}, [R0]'
   27792 
   27793    * int16x8x4_t vld4q_lane_s16 (const int16_t *, int16x8x4_t, const
   27794      int)
   27795      _Form of expected instruction(s):_ `vld4.16 {D0[0], D1[0], D2[0],
   27796      D3[0]}, [R0]'
   27797 
   27798    * uint32x4x4_t vld4q_lane_u32 (const uint32_t *, uint32x4x4_t, const
   27799      int)
   27800      _Form of expected instruction(s):_ `vld4.32 {D0[0], D1[0], D2[0],
   27801      D3[0]}, [R0]'
   27802 
   27803    * uint16x8x4_t vld4q_lane_u16 (const uint16_t *, uint16x8x4_t, const
   27804      int)
   27805      _Form of expected instruction(s):_ `vld4.16 {D0[0], D1[0], D2[0],
   27806      D3[0]}, [R0]'
   27807 
   27808    * float32x4x4_t vld4q_lane_f32 (const float32_t *, float32x4x4_t,
   27809      const int)
   27810      _Form of expected instruction(s):_ `vld4.32 {D0[0], D1[0], D2[0],
   27811      D3[0]}, [R0]'
   27812 
   27813    * poly16x8x4_t vld4q_lane_p16 (const poly16_t *, poly16x8x4_t, const
   27814      int)
   27815      _Form of expected instruction(s):_ `vld4.16 {D0[0], D1[0], D2[0],
   27816      D3[0]}, [R0]'
   27817 
   27818    * uint32x2x4_t vld4_dup_u32 (const uint32_t *)
   27819      _Form of expected instruction(s):_ `vld4.32 {D0[], D1[], D2[],
   27820      D3[]}, [R0]'
   27821 
   27822    * uint16x4x4_t vld4_dup_u16 (const uint16_t *)
   27823      _Form of expected instruction(s):_ `vld4.16 {D0[], D1[], D2[],
   27824      D3[]}, [R0]'
   27825 
   27826    * uint8x8x4_t vld4_dup_u8 (const uint8_t *)
   27827      _Form of expected instruction(s):_ `vld4.8 {D0[], D1[], D2[],
   27828      D3[]}, [R0]'
   27829 
   27830    * int32x2x4_t vld4_dup_s32 (const int32_t *)
   27831      _Form of expected instruction(s):_ `vld4.32 {D0[], D1[], D2[],
   27832      D3[]}, [R0]'
   27833 
   27834    * int16x4x4_t vld4_dup_s16 (const int16_t *)
   27835      _Form of expected instruction(s):_ `vld4.16 {D0[], D1[], D2[],
   27836      D3[]}, [R0]'
   27837 
   27838    * int8x8x4_t vld4_dup_s8 (const int8_t *)
   27839      _Form of expected instruction(s):_ `vld4.8 {D0[], D1[], D2[],
   27840      D3[]}, [R0]'
   27841 
   27842    * float32x2x4_t vld4_dup_f32 (const float32_t *)
   27843      _Form of expected instruction(s):_ `vld4.32 {D0[], D1[], D2[],
   27844      D3[]}, [R0]'
   27845 
   27846    * poly16x4x4_t vld4_dup_p16 (const poly16_t *)
   27847      _Form of expected instruction(s):_ `vld4.16 {D0[], D1[], D2[],
   27848      D3[]}, [R0]'
   27849 
   27850    * poly8x8x4_t vld4_dup_p8 (const poly8_t *)
   27851      _Form of expected instruction(s):_ `vld4.8 {D0[], D1[], D2[],
   27852      D3[]}, [R0]'
   27853 
   27854    * uint64x1x4_t vld4_dup_u64 (const uint64_t *)
   27855      _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2, D3}, [R0]'
   27856 
   27857    * int64x1x4_t vld4_dup_s64 (const int64_t *)
   27858      _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2, D3}, [R0]'
   27859 
   27860 5.50.3.75 Element/structure stores, VST4 variants
   27861 .................................................
   27862 
   27863    * void vst4_u32 (uint32_t *, uint32x2x4_t)
   27864      _Form of expected instruction(s):_ `vst4.32 {D0, D1, D2, D3}, [R0]'
   27865 
   27866    * void vst4_u16 (uint16_t *, uint16x4x4_t)
   27867      _Form of expected instruction(s):_ `vst4.16 {D0, D1, D2, D3}, [R0]'
   27868 
   27869    * void vst4_u8 (uint8_t *, uint8x8x4_t)
   27870      _Form of expected instruction(s):_ `vst4.8 {D0, D1, D2, D3}, [R0]'
   27871 
   27872    * void vst4_s32 (int32_t *, int32x2x4_t)
   27873      _Form of expected instruction(s):_ `vst4.32 {D0, D1, D2, D3}, [R0]'
   27874 
   27875    * void vst4_s16 (int16_t *, int16x4x4_t)
   27876      _Form of expected instruction(s):_ `vst4.16 {D0, D1, D2, D3}, [R0]'
   27877 
   27878    * void vst4_s8 (int8_t *, int8x8x4_t)
   27879      _Form of expected instruction(s):_ `vst4.8 {D0, D1, D2, D3}, [R0]'
   27880 
   27881    * void vst4_f32 (float32_t *, float32x2x4_t)
   27882      _Form of expected instruction(s):_ `vst4.32 {D0, D1, D2, D3}, [R0]'
   27883 
   27884    * void vst4_p16 (poly16_t *, poly16x4x4_t)
   27885      _Form of expected instruction(s):_ `vst4.16 {D0, D1, D2, D3}, [R0]'
   27886 
   27887    * void vst4_p8 (poly8_t *, poly8x8x4_t)
   27888      _Form of expected instruction(s):_ `vst4.8 {D0, D1, D2, D3}, [R0]'
   27889 
   27890    * void vst4_u64 (uint64_t *, uint64x1x4_t)
   27891      _Form of expected instruction(s):_ `vst1.64 {D0, D1, D2, D3}, [R0]'
   27892 
   27893    * void vst4_s64 (int64_t *, int64x1x4_t)
   27894      _Form of expected instruction(s):_ `vst1.64 {D0, D1, D2, D3}, [R0]'
   27895 
   27896    * void vst4q_u32 (uint32_t *, uint32x4x4_t)
   27897      _Form of expected instruction(s):_ `vst4.32 {D0, D1, D2, D3}, [R0]'
   27898 
   27899    * void vst4q_u16 (uint16_t *, uint16x8x4_t)
   27900      _Form of expected instruction(s):_ `vst4.16 {D0, D1, D2, D3}, [R0]'
   27901 
   27902    * void vst4q_u8 (uint8_t *, uint8x16x4_t)
   27903      _Form of expected instruction(s):_ `vst4.8 {D0, D1, D2, D3}, [R0]'
   27904 
   27905    * void vst4q_s32 (int32_t *, int32x4x4_t)
   27906      _Form of expected instruction(s):_ `vst4.32 {D0, D1, D2, D3}, [R0]'
   27907 
   27908    * void vst4q_s16 (int16_t *, int16x8x4_t)
   27909      _Form of expected instruction(s):_ `vst4.16 {D0, D1, D2, D3}, [R0]'
   27910 
   27911    * void vst4q_s8 (int8_t *, int8x16x4_t)
   27912      _Form of expected instruction(s):_ `vst4.8 {D0, D1, D2, D3}, [R0]'
   27913 
   27914    * void vst4q_f32 (float32_t *, float32x4x4_t)
   27915      _Form of expected instruction(s):_ `vst4.32 {D0, D1, D2, D3}, [R0]'
   27916 
   27917    * void vst4q_p16 (poly16_t *, poly16x8x4_t)
   27918      _Form of expected instruction(s):_ `vst4.16 {D0, D1, D2, D3}, [R0]'
   27919 
   27920    * void vst4q_p8 (poly8_t *, poly8x16x4_t)
   27921      _Form of expected instruction(s):_ `vst4.8 {D0, D1, D2, D3}, [R0]'
   27922 
   27923    * void vst4_lane_u32 (uint32_t *, uint32x2x4_t, const int)
   27924      _Form of expected instruction(s):_ `vst4.32 {D0[0], D1[0], D2[0],
   27925      D3[0]}, [R0]'
   27926 
   27927    * void vst4_lane_u16 (uint16_t *, uint16x4x4_t, const int)
   27928      _Form of expected instruction(s):_ `vst4.16 {D0[0], D1[0], D2[0],
   27929      D3[0]}, [R0]'
   27930 
   27931    * void vst4_lane_u8 (uint8_t *, uint8x8x4_t, const int)
   27932      _Form of expected instruction(s):_ `vst4.8 {D0[0], D1[0], D2[0],
   27933      D3[0]}, [R0]'
   27934 
   27935    * void vst4_lane_s32 (int32_t *, int32x2x4_t, const int)
   27936      _Form of expected instruction(s):_ `vst4.32 {D0[0], D1[0], D2[0],
   27937      D3[0]}, [R0]'
   27938 
   27939    * void vst4_lane_s16 (int16_t *, int16x4x4_t, const int)
   27940      _Form of expected instruction(s):_ `vst4.16 {D0[0], D1[0], D2[0],
   27941      D3[0]}, [R0]'
   27942 
   27943    * void vst4_lane_s8 (int8_t *, int8x8x4_t, const int)
   27944      _Form of expected instruction(s):_ `vst4.8 {D0[0], D1[0], D2[0],
   27945      D3[0]}, [R0]'
   27946 
   27947    * void vst4_lane_f32 (float32_t *, float32x2x4_t, const int)
   27948      _Form of expected instruction(s):_ `vst4.32 {D0[0], D1[0], D2[0],
   27949      D3[0]}, [R0]'
   27950 
   27951    * void vst4_lane_p16 (poly16_t *, poly16x4x4_t, const int)
   27952      _Form of expected instruction(s):_ `vst4.16 {D0[0], D1[0], D2[0],
   27953      D3[0]}, [R0]'
   27954 
   27955    * void vst4_lane_p8 (poly8_t *, poly8x8x4_t, const int)
   27956      _Form of expected instruction(s):_ `vst4.8 {D0[0], D1[0], D2[0],
   27957      D3[0]}, [R0]'
   27958 
   27959    * void vst4q_lane_s32 (int32_t *, int32x4x4_t, const int)
   27960      _Form of expected instruction(s):_ `vst4.32 {D0[0], D1[0], D2[0],
   27961      D3[0]}, [R0]'
   27962 
   27963    * void vst4q_lane_s16 (int16_t *, int16x8x4_t, const int)
   27964      _Form of expected instruction(s):_ `vst4.16 {D0[0], D1[0], D2[0],
   27965      D3[0]}, [R0]'
   27966 
   27967    * void vst4q_lane_u32 (uint32_t *, uint32x4x4_t, const int)
   27968      _Form of expected instruction(s):_ `vst4.32 {D0[0], D1[0], D2[0],
   27969      D3[0]}, [R0]'
   27970 
   27971    * void vst4q_lane_u16 (uint16_t *, uint16x8x4_t, const int)
   27972      _Form of expected instruction(s):_ `vst4.16 {D0[0], D1[0], D2[0],
   27973      D3[0]}, [R0]'
   27974 
   27975    * void vst4q_lane_f32 (float32_t *, float32x4x4_t, const int)
   27976      _Form of expected instruction(s):_ `vst4.32 {D0[0], D1[0], D2[0],
   27977      D3[0]}, [R0]'
   27978 
   27979    * void vst4q_lane_p16 (poly16_t *, poly16x8x4_t, const int)
   27980      _Form of expected instruction(s):_ `vst4.16 {D0[0], D1[0], D2[0],
   27981      D3[0]}, [R0]'
   27982 
   27983 5.50.3.76 Logical operations (AND)
   27984 ..................................
   27985 
   27986    * uint32x2_t vand_u32 (uint32x2_t, uint32x2_t)
   27987      _Form of expected instruction(s):_ `vand D0, D0, D0'
   27988 
   27989    * uint16x4_t vand_u16 (uint16x4_t, uint16x4_t)
   27990      _Form of expected instruction(s):_ `vand D0, D0, D0'
   27991 
   27992    * uint8x8_t vand_u8 (uint8x8_t, uint8x8_t)
   27993      _Form of expected instruction(s):_ `vand D0, D0, D0'
   27994 
   27995    * int32x2_t vand_s32 (int32x2_t, int32x2_t)
   27996      _Form of expected instruction(s):_ `vand D0, D0, D0'
   27997 
   27998    * int16x4_t vand_s16 (int16x4_t, int16x4_t)
   27999      _Form of expected instruction(s):_ `vand D0, D0, D0'
   28000 
   28001    * int8x8_t vand_s8 (int8x8_t, int8x8_t)
   28002      _Form of expected instruction(s):_ `vand D0, D0, D0'
   28003 
   28004    * uint64x1_t vand_u64 (uint64x1_t, uint64x1_t)
   28005      _Form of expected instruction(s):_ `vand D0, D0, D0'
   28006 
   28007    * int64x1_t vand_s64 (int64x1_t, int64x1_t)
   28008      _Form of expected instruction(s):_ `vand D0, D0, D0'
   28009 
   28010    * uint32x4_t vandq_u32 (uint32x4_t, uint32x4_t)
   28011      _Form of expected instruction(s):_ `vand Q0, Q0, Q0'
   28012 
   28013    * uint16x8_t vandq_u16 (uint16x8_t, uint16x8_t)
   28014      _Form of expected instruction(s):_ `vand Q0, Q0, Q0'
   28015 
   28016    * uint8x16_t vandq_u8 (uint8x16_t, uint8x16_t)
   28017      _Form of expected instruction(s):_ `vand Q0, Q0, Q0'
   28018 
   28019    * int32x4_t vandq_s32 (int32x4_t, int32x4_t)
   28020      _Form of expected instruction(s):_ `vand Q0, Q0, Q0'
   28021 
   28022    * int16x8_t vandq_s16 (int16x8_t, int16x8_t)
   28023      _Form of expected instruction(s):_ `vand Q0, Q0, Q0'
   28024 
   28025    * int8x16_t vandq_s8 (int8x16_t, int8x16_t)
   28026      _Form of expected instruction(s):_ `vand Q0, Q0, Q0'
   28027 
   28028    * uint64x2_t vandq_u64 (uint64x2_t, uint64x2_t)
   28029      _Form of expected instruction(s):_ `vand Q0, Q0, Q0'
   28030 
   28031    * int64x2_t vandq_s64 (int64x2_t, int64x2_t)
   28032      _Form of expected instruction(s):_ `vand Q0, Q0, Q0'
   28033 
   28034 5.50.3.77 Logical operations (OR)
   28035 .................................
   28036 
   28037    * uint32x2_t vorr_u32 (uint32x2_t, uint32x2_t)
   28038      _Form of expected instruction(s):_ `vorr D0, D0, D0'
   28039 
   28040    * uint16x4_t vorr_u16 (uint16x4_t, uint16x4_t)
   28041      _Form of expected instruction(s):_ `vorr D0, D0, D0'
   28042 
   28043    * uint8x8_t vorr_u8 (uint8x8_t, uint8x8_t)
   28044      _Form of expected instruction(s):_ `vorr D0, D0, D0'
   28045 
   28046    * int32x2_t vorr_s32 (int32x2_t, int32x2_t)
   28047      _Form of expected instruction(s):_ `vorr D0, D0, D0'
   28048 
   28049    * int16x4_t vorr_s16 (int16x4_t, int16x4_t)
   28050      _Form of expected instruction(s):_ `vorr D0, D0, D0'
   28051 
   28052    * int8x8_t vorr_s8 (int8x8_t, int8x8_t)
   28053      _Form of expected instruction(s):_ `vorr D0, D0, D0'
   28054 
   28055    * uint64x1_t vorr_u64 (uint64x1_t, uint64x1_t)
   28056      _Form of expected instruction(s):_ `vorr D0, D0, D0'
   28057 
   28058    * int64x1_t vorr_s64 (int64x1_t, int64x1_t)
   28059      _Form of expected instruction(s):_ `vorr D0, D0, D0'
   28060 
   28061    * uint32x4_t vorrq_u32 (uint32x4_t, uint32x4_t)
   28062      _Form of expected instruction(s):_ `vorr Q0, Q0, Q0'
   28063 
   28064    * uint16x8_t vorrq_u16 (uint16x8_t, uint16x8_t)
   28065      _Form of expected instruction(s):_ `vorr Q0, Q0, Q0'
   28066 
   28067    * uint8x16_t vorrq_u8 (uint8x16_t, uint8x16_t)
   28068      _Form of expected instruction(s):_ `vorr Q0, Q0, Q0'
   28069 
   28070    * int32x4_t vorrq_s32 (int32x4_t, int32x4_t)
   28071      _Form of expected instruction(s):_ `vorr Q0, Q0, Q0'
   28072 
   28073    * int16x8_t vorrq_s16 (int16x8_t, int16x8_t)
   28074      _Form of expected instruction(s):_ `vorr Q0, Q0, Q0'
   28075 
   28076    * int8x16_t vorrq_s8 (int8x16_t, int8x16_t)
   28077      _Form of expected instruction(s):_ `vorr Q0, Q0, Q0'
   28078 
   28079    * uint64x2_t vorrq_u64 (uint64x2_t, uint64x2_t)
   28080      _Form of expected instruction(s):_ `vorr Q0, Q0, Q0'
   28081 
   28082    * int64x2_t vorrq_s64 (int64x2_t, int64x2_t)
   28083      _Form of expected instruction(s):_ `vorr Q0, Q0, Q0'
   28084 
   28085 5.50.3.78 Logical operations (exclusive OR)
   28086 ...........................................
   28087 
   28088    * uint32x2_t veor_u32 (uint32x2_t, uint32x2_t)
   28089      _Form of expected instruction(s):_ `veor D0, D0, D0'
   28090 
   28091    * uint16x4_t veor_u16 (uint16x4_t, uint16x4_t)
   28092      _Form of expected instruction(s):_ `veor D0, D0, D0'
   28093 
   28094    * uint8x8_t veor_u8 (uint8x8_t, uint8x8_t)
   28095      _Form of expected instruction(s):_ `veor D0, D0, D0'
   28096 
   28097    * int32x2_t veor_s32 (int32x2_t, int32x2_t)
   28098      _Form of expected instruction(s):_ `veor D0, D0, D0'
   28099 
   28100    * int16x4_t veor_s16 (int16x4_t, int16x4_t)
   28101      _Form of expected instruction(s):_ `veor D0, D0, D0'
   28102 
   28103    * int8x8_t veor_s8 (int8x8_t, int8x8_t)
   28104      _Form of expected instruction(s):_ `veor D0, D0, D0'
   28105 
   28106    * uint64x1_t veor_u64 (uint64x1_t, uint64x1_t)
   28107      _Form of expected instruction(s):_ `veor D0, D0, D0'
   28108 
   28109    * int64x1_t veor_s64 (int64x1_t, int64x1_t)
   28110      _Form of expected instruction(s):_ `veor D0, D0, D0'
   28111 
   28112    * uint32x4_t veorq_u32 (uint32x4_t, uint32x4_t)
   28113      _Form of expected instruction(s):_ `veor Q0, Q0, Q0'
   28114 
   28115    * uint16x8_t veorq_u16 (uint16x8_t, uint16x8_t)
   28116      _Form of expected instruction(s):_ `veor Q0, Q0, Q0'
   28117 
   28118    * uint8x16_t veorq_u8 (uint8x16_t, uint8x16_t)
   28119      _Form of expected instruction(s):_ `veor Q0, Q0, Q0'
   28120 
   28121    * int32x4_t veorq_s32 (int32x4_t, int32x4_t)
   28122      _Form of expected instruction(s):_ `veor Q0, Q0, Q0'
   28123 
   28124    * int16x8_t veorq_s16 (int16x8_t, int16x8_t)
   28125      _Form of expected instruction(s):_ `veor Q0, Q0, Q0'
   28126 
   28127    * int8x16_t veorq_s8 (int8x16_t, int8x16_t)
   28128      _Form of expected instruction(s):_ `veor Q0, Q0, Q0'
   28129 
   28130    * uint64x2_t veorq_u64 (uint64x2_t, uint64x2_t)
   28131      _Form of expected instruction(s):_ `veor Q0, Q0, Q0'
   28132 
   28133    * int64x2_t veorq_s64 (int64x2_t, int64x2_t)
   28134      _Form of expected instruction(s):_ `veor Q0, Q0, Q0'
   28135 
   28136 5.50.3.79 Logical operations (AND-NOT)
   28137 ......................................
   28138 
   28139    * uint32x2_t vbic_u32 (uint32x2_t, uint32x2_t)
   28140      _Form of expected instruction(s):_ `vbic D0, D0, D0'
   28141 
   28142    * uint16x4_t vbic_u16 (uint16x4_t, uint16x4_t)
   28143      _Form of expected instruction(s):_ `vbic D0, D0, D0'
   28144 
   28145    * uint8x8_t vbic_u8 (uint8x8_t, uint8x8_t)
   28146      _Form of expected instruction(s):_ `vbic D0, D0, D0'
   28147 
   28148    * int32x2_t vbic_s32 (int32x2_t, int32x2_t)
   28149      _Form of expected instruction(s):_ `vbic D0, D0, D0'
   28150 
   28151    * int16x4_t vbic_s16 (int16x4_t, int16x4_t)
   28152      _Form of expected instruction(s):_ `vbic D0, D0, D0'
   28153 
   28154    * int8x8_t vbic_s8 (int8x8_t, int8x8_t)
   28155      _Form of expected instruction(s):_ `vbic D0, D0, D0'
   28156 
   28157    * uint64x1_t vbic_u64 (uint64x1_t, uint64x1_t)
   28158      _Form of expected instruction(s):_ `vbic D0, D0, D0'
   28159 
   28160    * int64x1_t vbic_s64 (int64x1_t, int64x1_t)
   28161      _Form of expected instruction(s):_ `vbic D0, D0, D0'
   28162 
   28163    * uint32x4_t vbicq_u32 (uint32x4_t, uint32x4_t)
   28164      _Form of expected instruction(s):_ `vbic Q0, Q0, Q0'
   28165 
   28166    * uint16x8_t vbicq_u16 (uint16x8_t, uint16x8_t)
   28167      _Form of expected instruction(s):_ `vbic Q0, Q0, Q0'
   28168 
   28169    * uint8x16_t vbicq_u8 (uint8x16_t, uint8x16_t)
   28170      _Form of expected instruction(s):_ `vbic Q0, Q0, Q0'
   28171 
   28172    * int32x4_t vbicq_s32 (int32x4_t, int32x4_t)
   28173      _Form of expected instruction(s):_ `vbic Q0, Q0, Q0'
   28174 
   28175    * int16x8_t vbicq_s16 (int16x8_t, int16x8_t)
   28176      _Form of expected instruction(s):_ `vbic Q0, Q0, Q0'
   28177 
   28178    * int8x16_t vbicq_s8 (int8x16_t, int8x16_t)
   28179      _Form of expected instruction(s):_ `vbic Q0, Q0, Q0'
   28180 
   28181    * uint64x2_t vbicq_u64 (uint64x2_t, uint64x2_t)
   28182      _Form of expected instruction(s):_ `vbic Q0, Q0, Q0'
   28183 
   28184    * int64x2_t vbicq_s64 (int64x2_t, int64x2_t)
   28185      _Form of expected instruction(s):_ `vbic Q0, Q0, Q0'
   28186 
   28187 5.50.3.80 Logical operations (OR-NOT)
   28188 .....................................
   28189 
   28190    * uint32x2_t vorn_u32 (uint32x2_t, uint32x2_t)
   28191      _Form of expected instruction(s):_ `vorn D0, D0, D0'
   28192 
   28193    * uint16x4_t vorn_u16 (uint16x4_t, uint16x4_t)
   28194      _Form of expected instruction(s):_ `vorn D0, D0, D0'
   28195 
   28196    * uint8x8_t vorn_u8 (uint8x8_t, uint8x8_t)
   28197      _Form of expected instruction(s):_ `vorn D0, D0, D0'
   28198 
   28199    * int32x2_t vorn_s32 (int32x2_t, int32x2_t)
   28200      _Form of expected instruction(s):_ `vorn D0, D0, D0'
   28201 
   28202    * int16x4_t vorn_s16 (int16x4_t, int16x4_t)
   28203      _Form of expected instruction(s):_ `vorn D0, D0, D0'
   28204 
   28205    * int8x8_t vorn_s8 (int8x8_t, int8x8_t)
   28206      _Form of expected instruction(s):_ `vorn D0, D0, D0'
   28207 
   28208    * uint64x1_t vorn_u64 (uint64x1_t, uint64x1_t)
   28209      _Form of expected instruction(s):_ `vorn D0, D0, D0'
   28210 
   28211    * int64x1_t vorn_s64 (int64x1_t, int64x1_t)
   28212      _Form of expected instruction(s):_ `vorn D0, D0, D0'
   28213 
   28214    * uint32x4_t vornq_u32 (uint32x4_t, uint32x4_t)
   28215      _Form of expected instruction(s):_ `vorn Q0, Q0, Q0'
   28216 
   28217    * uint16x8_t vornq_u16 (uint16x8_t, uint16x8_t)
   28218      _Form of expected instruction(s):_ `vorn Q0, Q0, Q0'
   28219 
   28220    * uint8x16_t vornq_u8 (uint8x16_t, uint8x16_t)
   28221      _Form of expected instruction(s):_ `vorn Q0, Q0, Q0'
   28222 
   28223    * int32x4_t vornq_s32 (int32x4_t, int32x4_t)
   28224      _Form of expected instruction(s):_ `vorn Q0, Q0, Q0'
   28225 
   28226    * int16x8_t vornq_s16 (int16x8_t, int16x8_t)
   28227      _Form of expected instruction(s):_ `vorn Q0, Q0, Q0'
   28228 
   28229    * int8x16_t vornq_s8 (int8x16_t, int8x16_t)
   28230      _Form of expected instruction(s):_ `vorn Q0, Q0, Q0'
   28231 
   28232    * uint64x2_t vornq_u64 (uint64x2_t, uint64x2_t)
   28233      _Form of expected instruction(s):_ `vorn Q0, Q0, Q0'
   28234 
   28235    * int64x2_t vornq_s64 (int64x2_t, int64x2_t)
   28236      _Form of expected instruction(s):_ `vorn Q0, Q0, Q0'
   28237 
   28238 5.50.3.81 Reinterpret casts
   28239 ...........................
   28240 
   28241    * poly8x8_t vreinterpret_p8_u32 (uint32x2_t)
   28242 
   28243    * poly8x8_t vreinterpret_p8_u16 (uint16x4_t)
   28244 
   28245    * poly8x8_t vreinterpret_p8_u8 (uint8x8_t)
   28246 
   28247    * poly8x8_t vreinterpret_p8_s32 (int32x2_t)
   28248 
   28249    * poly8x8_t vreinterpret_p8_s16 (int16x4_t)
   28250 
   28251    * poly8x8_t vreinterpret_p8_s8 (int8x8_t)
   28252 
   28253    * poly8x8_t vreinterpret_p8_u64 (uint64x1_t)
   28254 
   28255    * poly8x8_t vreinterpret_p8_s64 (int64x1_t)
   28256 
   28257    * poly8x8_t vreinterpret_p8_f32 (float32x2_t)
   28258 
   28259    * poly8x8_t vreinterpret_p8_p16 (poly16x4_t)
   28260 
   28261    * poly8x16_t vreinterpretq_p8_u32 (uint32x4_t)
   28262 
   28263    * poly8x16_t vreinterpretq_p8_u16 (uint16x8_t)
   28264 
   28265    * poly8x16_t vreinterpretq_p8_u8 (uint8x16_t)
   28266 
   28267    * poly8x16_t vreinterpretq_p8_s32 (int32x4_t)
   28268 
   28269    * poly8x16_t vreinterpretq_p8_s16 (int16x8_t)
   28270 
   28271    * poly8x16_t vreinterpretq_p8_s8 (int8x16_t)
   28272 
   28273    * poly8x16_t vreinterpretq_p8_u64 (uint64x2_t)
   28274 
   28275    * poly8x16_t vreinterpretq_p8_s64 (int64x2_t)
   28276 
   28277    * poly8x16_t vreinterpretq_p8_f32 (float32x4_t)
   28278 
   28279    * poly8x16_t vreinterpretq_p8_p16 (poly16x8_t)
   28280 
   28281    * poly16x4_t vreinterpret_p16_u32 (uint32x2_t)
   28282 
   28283    * poly16x4_t vreinterpret_p16_u16 (uint16x4_t)
   28284 
   28285    * poly16x4_t vreinterpret_p16_u8 (uint8x8_t)
   28286 
   28287    * poly16x4_t vreinterpret_p16_s32 (int32x2_t)
   28288 
   28289    * poly16x4_t vreinterpret_p16_s16 (int16x4_t)
   28290 
   28291    * poly16x4_t vreinterpret_p16_s8 (int8x8_t)
   28292 
   28293    * poly16x4_t vreinterpret_p16_u64 (uint64x1_t)
   28294 
   28295    * poly16x4_t vreinterpret_p16_s64 (int64x1_t)
   28296 
   28297    * poly16x4_t vreinterpret_p16_f32 (float32x2_t)
   28298 
   28299    * poly16x4_t vreinterpret_p16_p8 (poly8x8_t)
   28300 
   28301    * poly16x8_t vreinterpretq_p16_u32 (uint32x4_t)
   28302 
   28303    * poly16x8_t vreinterpretq_p16_u16 (uint16x8_t)
   28304 
   28305    * poly16x8_t vreinterpretq_p16_u8 (uint8x16_t)
   28306 
   28307    * poly16x8_t vreinterpretq_p16_s32 (int32x4_t)
   28308 
   28309    * poly16x8_t vreinterpretq_p16_s16 (int16x8_t)
   28310 
   28311    * poly16x8_t vreinterpretq_p16_s8 (int8x16_t)
   28312 
   28313    * poly16x8_t vreinterpretq_p16_u64 (uint64x2_t)
   28314 
   28315    * poly16x8_t vreinterpretq_p16_s64 (int64x2_t)
   28316 
   28317    * poly16x8_t vreinterpretq_p16_f32 (float32x4_t)
   28318 
   28319    * poly16x8_t vreinterpretq_p16_p8 (poly8x16_t)
   28320 
   28321    * float32x2_t vreinterpret_f32_u32 (uint32x2_t)
   28322 
   28323    * float32x2_t vreinterpret_f32_u16 (uint16x4_t)
   28324 
   28325    * float32x2_t vreinterpret_f32_u8 (uint8x8_t)
   28326 
   28327    * float32x2_t vreinterpret_f32_s32 (int32x2_t)
   28328 
   28329    * float32x2_t vreinterpret_f32_s16 (int16x4_t)
   28330 
   28331    * float32x2_t vreinterpret_f32_s8 (int8x8_t)
   28332 
   28333    * float32x2_t vreinterpret_f32_u64 (uint64x1_t)
   28334 
   28335    * float32x2_t vreinterpret_f32_s64 (int64x1_t)
   28336 
   28337    * float32x2_t vreinterpret_f32_p16 (poly16x4_t)
   28338 
   28339    * float32x2_t vreinterpret_f32_p8 (poly8x8_t)
   28340 
   28341    * float32x4_t vreinterpretq_f32_u32 (uint32x4_t)
   28342 
   28343    * float32x4_t vreinterpretq_f32_u16 (uint16x8_t)
   28344 
   28345    * float32x4_t vreinterpretq_f32_u8 (uint8x16_t)
   28346 
   28347    * float32x4_t vreinterpretq_f32_s32 (int32x4_t)
   28348 
   28349    * float32x4_t vreinterpretq_f32_s16 (int16x8_t)
   28350 
   28351    * float32x4_t vreinterpretq_f32_s8 (int8x16_t)
   28352 
   28353    * float32x4_t vreinterpretq_f32_u64 (uint64x2_t)
   28354 
   28355    * float32x4_t vreinterpretq_f32_s64 (int64x2_t)
   28356 
   28357    * float32x4_t vreinterpretq_f32_p16 (poly16x8_t)
   28358 
   28359    * float32x4_t vreinterpretq_f32_p8 (poly8x16_t)
   28360 
   28361    * int64x1_t vreinterpret_s64_u32 (uint32x2_t)
   28362 
   28363    * int64x1_t vreinterpret_s64_u16 (uint16x4_t)
   28364 
   28365    * int64x1_t vreinterpret_s64_u8 (uint8x8_t)
   28366 
   28367    * int64x1_t vreinterpret_s64_s32 (int32x2_t)
   28368 
   28369    * int64x1_t vreinterpret_s64_s16 (int16x4_t)
   28370 
   28371    * int64x1_t vreinterpret_s64_s8 (int8x8_t)
   28372 
   28373    * int64x1_t vreinterpret_s64_u64 (uint64x1_t)
   28374 
   28375    * int64x1_t vreinterpret_s64_f32 (float32x2_t)
   28376 
   28377    * int64x1_t vreinterpret_s64_p16 (poly16x4_t)
   28378 
   28379    * int64x1_t vreinterpret_s64_p8 (poly8x8_t)
   28380 
   28381    * int64x2_t vreinterpretq_s64_u32 (uint32x4_t)
   28382 
   28383    * int64x2_t vreinterpretq_s64_u16 (uint16x8_t)
   28384 
   28385    * int64x2_t vreinterpretq_s64_u8 (uint8x16_t)
   28386 
   28387    * int64x2_t vreinterpretq_s64_s32 (int32x4_t)
   28388 
   28389    * int64x2_t vreinterpretq_s64_s16 (int16x8_t)
   28390 
   28391    * int64x2_t vreinterpretq_s64_s8 (int8x16_t)
   28392 
   28393    * int64x2_t vreinterpretq_s64_u64 (uint64x2_t)
   28394 
   28395    * int64x2_t vreinterpretq_s64_f32 (float32x4_t)
   28396 
   28397    * int64x2_t vreinterpretq_s64_p16 (poly16x8_t)
   28398 
   28399    * int64x2_t vreinterpretq_s64_p8 (poly8x16_t)
   28400 
   28401    * uint64x1_t vreinterpret_u64_u32 (uint32x2_t)
   28402 
   28403    * uint64x1_t vreinterpret_u64_u16 (uint16x4_t)
   28404 
   28405    * uint64x1_t vreinterpret_u64_u8 (uint8x8_t)
   28406 
   28407    * uint64x1_t vreinterpret_u64_s32 (int32x2_t)
   28408 
   28409    * uint64x1_t vreinterpret_u64_s16 (int16x4_t)
   28410 
   28411    * uint64x1_t vreinterpret_u64_s8 (int8x8_t)
   28412 
   28413    * uint64x1_t vreinterpret_u64_s64 (int64x1_t)
   28414 
   28415    * uint64x1_t vreinterpret_u64_f32 (float32x2_t)
   28416 
   28417    * uint64x1_t vreinterpret_u64_p16 (poly16x4_t)
   28418 
   28419    * uint64x1_t vreinterpret_u64_p8 (poly8x8_t)
   28420 
   28421    * uint64x2_t vreinterpretq_u64_u32 (uint32x4_t)
   28422 
   28423    * uint64x2_t vreinterpretq_u64_u16 (uint16x8_t)
   28424 
   28425    * uint64x2_t vreinterpretq_u64_u8 (uint8x16_t)
   28426 
   28427    * uint64x2_t vreinterpretq_u64_s32 (int32x4_t)
   28428 
   28429    * uint64x2_t vreinterpretq_u64_s16 (int16x8_t)
   28430 
   28431    * uint64x2_t vreinterpretq_u64_s8 (int8x16_t)
   28432 
   28433    * uint64x2_t vreinterpretq_u64_s64 (int64x2_t)
   28434 
   28435    * uint64x2_t vreinterpretq_u64_f32 (float32x4_t)
   28436 
   28437    * uint64x2_t vreinterpretq_u64_p16 (poly16x8_t)
   28438 
   28439    * uint64x2_t vreinterpretq_u64_p8 (poly8x16_t)
   28440 
   28441    * int8x8_t vreinterpret_s8_u32 (uint32x2_t)
   28442 
   28443    * int8x8_t vreinterpret_s8_u16 (uint16x4_t)
   28444 
   28445    * int8x8_t vreinterpret_s8_u8 (uint8x8_t)
   28446 
   28447    * int8x8_t vreinterpret_s8_s32 (int32x2_t)
   28448 
   28449    * int8x8_t vreinterpret_s8_s16 (int16x4_t)
   28450 
   28451    * int8x8_t vreinterpret_s8_u64 (uint64x1_t)
   28452 
   28453    * int8x8_t vreinterpret_s8_s64 (int64x1_t)
   28454 
   28455    * int8x8_t vreinterpret_s8_f32 (float32x2_t)
   28456 
   28457    * int8x8_t vreinterpret_s8_p16 (poly16x4_t)
   28458 
   28459    * int8x8_t vreinterpret_s8_p8 (poly8x8_t)
   28460 
   28461    * int8x16_t vreinterpretq_s8_u32 (uint32x4_t)
   28462 
   28463    * int8x16_t vreinterpretq_s8_u16 (uint16x8_t)
   28464 
   28465    * int8x16_t vreinterpretq_s8_u8 (uint8x16_t)
   28466 
   28467    * int8x16_t vreinterpretq_s8_s32 (int32x4_t)
   28468 
   28469    * int8x16_t vreinterpretq_s8_s16 (int16x8_t)
   28470 
   28471    * int8x16_t vreinterpretq_s8_u64 (uint64x2_t)
   28472 
   28473    * int8x16_t vreinterpretq_s8_s64 (int64x2_t)
   28474 
   28475    * int8x16_t vreinterpretq_s8_f32 (float32x4_t)
   28476 
   28477    * int8x16_t vreinterpretq_s8_p16 (poly16x8_t)
   28478 
   28479    * int8x16_t vreinterpretq_s8_p8 (poly8x16_t)
   28480 
   28481    * int16x4_t vreinterpret_s16_u32 (uint32x2_t)
   28482 
   28483    * int16x4_t vreinterpret_s16_u16 (uint16x4_t)
   28484 
   28485    * int16x4_t vreinterpret_s16_u8 (uint8x8_t)
   28486 
   28487    * int16x4_t vreinterpret_s16_s32 (int32x2_t)
   28488 
   28489    * int16x4_t vreinterpret_s16_s8 (int8x8_t)
   28490 
   28491    * int16x4_t vreinterpret_s16_u64 (uint64x1_t)
   28492 
   28493    * int16x4_t vreinterpret_s16_s64 (int64x1_t)
   28494 
   28495    * int16x4_t vreinterpret_s16_f32 (float32x2_t)
   28496 
   28497    * int16x4_t vreinterpret_s16_p16 (poly16x4_t)
   28498 
   28499    * int16x4_t vreinterpret_s16_p8 (poly8x8_t)
   28500 
   28501    * int16x8_t vreinterpretq_s16_u32 (uint32x4_t)
   28502 
   28503    * int16x8_t vreinterpretq_s16_u16 (uint16x8_t)
   28504 
   28505    * int16x8_t vreinterpretq_s16_u8 (uint8x16_t)
   28506 
   28507    * int16x8_t vreinterpretq_s16_s32 (int32x4_t)
   28508 
   28509    * int16x8_t vreinterpretq_s16_s8 (int8x16_t)
   28510 
   28511    * int16x8_t vreinterpretq_s16_u64 (uint64x2_t)
   28512 
   28513    * int16x8_t vreinterpretq_s16_s64 (int64x2_t)
   28514 
   28515    * int16x8_t vreinterpretq_s16_f32 (float32x4_t)
   28516 
   28517    * int16x8_t vreinterpretq_s16_p16 (poly16x8_t)
   28518 
   28519    * int16x8_t vreinterpretq_s16_p8 (poly8x16_t)
   28520 
   28521    * int32x2_t vreinterpret_s32_u32 (uint32x2_t)
   28522 
   28523    * int32x2_t vreinterpret_s32_u16 (uint16x4_t)
   28524 
   28525    * int32x2_t vreinterpret_s32_u8 (uint8x8_t)
   28526 
   28527    * int32x2_t vreinterpret_s32_s16 (int16x4_t)
   28528 
   28529    * int32x2_t vreinterpret_s32_s8 (int8x8_t)
   28530 
   28531    * int32x2_t vreinterpret_s32_u64 (uint64x1_t)
   28532 
   28533    * int32x2_t vreinterpret_s32_s64 (int64x1_t)
   28534 
   28535    * int32x2_t vreinterpret_s32_f32 (float32x2_t)
   28536 
   28537    * int32x2_t vreinterpret_s32_p16 (poly16x4_t)
   28538 
   28539    * int32x2_t vreinterpret_s32_p8 (poly8x8_t)
   28540 
   28541    * int32x4_t vreinterpretq_s32_u32 (uint32x4_t)
   28542 
   28543    * int32x4_t vreinterpretq_s32_u16 (uint16x8_t)
   28544 
   28545    * int32x4_t vreinterpretq_s32_u8 (uint8x16_t)
   28546 
   28547    * int32x4_t vreinterpretq_s32_s16 (int16x8_t)
   28548 
   28549    * int32x4_t vreinterpretq_s32_s8 (int8x16_t)
   28550 
   28551    * int32x4_t vreinterpretq_s32_u64 (uint64x2_t)
   28552 
   28553    * int32x4_t vreinterpretq_s32_s64 (int64x2_t)
   28554 
   28555    * int32x4_t vreinterpretq_s32_f32 (float32x4_t)
   28556 
   28557    * int32x4_t vreinterpretq_s32_p16 (poly16x8_t)
   28558 
   28559    * int32x4_t vreinterpretq_s32_p8 (poly8x16_t)
   28560 
   28561    * uint8x8_t vreinterpret_u8_u32 (uint32x2_t)
   28562 
   28563    * uint8x8_t vreinterpret_u8_u16 (uint16x4_t)
   28564 
   28565    * uint8x8_t vreinterpret_u8_s32 (int32x2_t)
   28566 
   28567    * uint8x8_t vreinterpret_u8_s16 (int16x4_t)
   28568 
   28569    * uint8x8_t vreinterpret_u8_s8 (int8x8_t)
   28570 
   28571    * uint8x8_t vreinterpret_u8_u64 (uint64x1_t)
   28572 
   28573    * uint8x8_t vreinterpret_u8_s64 (int64x1_t)
   28574 
   28575    * uint8x8_t vreinterpret_u8_f32 (float32x2_t)
   28576 
   28577    * uint8x8_t vreinterpret_u8_p16 (poly16x4_t)
   28578 
   28579    * uint8x8_t vreinterpret_u8_p8 (poly8x8_t)
   28580 
   28581    * uint8x16_t vreinterpretq_u8_u32 (uint32x4_t)
   28582 
   28583    * uint8x16_t vreinterpretq_u8_u16 (uint16x8_t)
   28584 
   28585    * uint8x16_t vreinterpretq_u8_s32 (int32x4_t)
   28586 
   28587    * uint8x16_t vreinterpretq_u8_s16 (int16x8_t)
   28588 
   28589    * uint8x16_t vreinterpretq_u8_s8 (int8x16_t)
   28590 
   28591    * uint8x16_t vreinterpretq_u8_u64 (uint64x2_t)
   28592 
   28593    * uint8x16_t vreinterpretq_u8_s64 (int64x2_t)
   28594 
   28595    * uint8x16_t vreinterpretq_u8_f32 (float32x4_t)
   28596 
   28597    * uint8x16_t vreinterpretq_u8_p16 (poly16x8_t)
   28598 
   28599    * uint8x16_t vreinterpretq_u8_p8 (poly8x16_t)
   28600 
   28601    * uint16x4_t vreinterpret_u16_u32 (uint32x2_t)
   28602 
   28603    * uint16x4_t vreinterpret_u16_u8 (uint8x8_t)
   28604 
   28605    * uint16x4_t vreinterpret_u16_s32 (int32x2_t)
   28606 
   28607    * uint16x4_t vreinterpret_u16_s16 (int16x4_t)
   28608 
   28609    * uint16x4_t vreinterpret_u16_s8 (int8x8_t)
   28610 
   28611    * uint16x4_t vreinterpret_u16_u64 (uint64x1_t)
   28612 
   28613    * uint16x4_t vreinterpret_u16_s64 (int64x1_t)
   28614 
   28615    * uint16x4_t vreinterpret_u16_f32 (float32x2_t)
   28616 
   28617    * uint16x4_t vreinterpret_u16_p16 (poly16x4_t)
   28618 
   28619    * uint16x4_t vreinterpret_u16_p8 (poly8x8_t)
   28620 
   28621    * uint16x8_t vreinterpretq_u16_u32 (uint32x4_t)
   28622 
   28623    * uint16x8_t vreinterpretq_u16_u8 (uint8x16_t)
   28624 
   28625    * uint16x8_t vreinterpretq_u16_s32 (int32x4_t)
   28626 
   28627    * uint16x8_t vreinterpretq_u16_s16 (int16x8_t)
   28628 
   28629    * uint16x8_t vreinterpretq_u16_s8 (int8x16_t)
   28630 
   28631    * uint16x8_t vreinterpretq_u16_u64 (uint64x2_t)
   28632 
   28633    * uint16x8_t vreinterpretq_u16_s64 (int64x2_t)
   28634 
   28635    * uint16x8_t vreinterpretq_u16_f32 (float32x4_t)
   28636 
   28637    * uint16x8_t vreinterpretq_u16_p16 (poly16x8_t)
   28638 
   28639    * uint16x8_t vreinterpretq_u16_p8 (poly8x16_t)
   28640 
   28641    * uint32x2_t vreinterpret_u32_u16 (uint16x4_t)
   28642 
   28643    * uint32x2_t vreinterpret_u32_u8 (uint8x8_t)
   28644 
   28645    * uint32x2_t vreinterpret_u32_s32 (int32x2_t)
   28646 
   28647    * uint32x2_t vreinterpret_u32_s16 (int16x4_t)
   28648 
   28649    * uint32x2_t vreinterpret_u32_s8 (int8x8_t)
   28650 
   28651    * uint32x2_t vreinterpret_u32_u64 (uint64x1_t)
   28652 
   28653    * uint32x2_t vreinterpret_u32_s64 (int64x1_t)
   28654 
   28655    * uint32x2_t vreinterpret_u32_f32 (float32x2_t)
   28656 
   28657    * uint32x2_t vreinterpret_u32_p16 (poly16x4_t)
   28658 
   28659    * uint32x2_t vreinterpret_u32_p8 (poly8x8_t)
   28660 
   28661    * uint32x4_t vreinterpretq_u32_u16 (uint16x8_t)
   28662 
   28663    * uint32x4_t vreinterpretq_u32_u8 (uint8x16_t)
   28664 
   28665    * uint32x4_t vreinterpretq_u32_s32 (int32x4_t)
   28666 
   28667    * uint32x4_t vreinterpretq_u32_s16 (int16x8_t)
   28668 
   28669    * uint32x4_t vreinterpretq_u32_s8 (int8x16_t)
   28670 
   28671    * uint32x4_t vreinterpretq_u32_u64 (uint64x2_t)
   28672 
   28673    * uint32x4_t vreinterpretq_u32_s64 (int64x2_t)
   28674 
   28675    * uint32x4_t vreinterpretq_u32_f32 (float32x4_t)
   28676 
   28677    * uint32x4_t vreinterpretq_u32_p16 (poly16x8_t)
   28678 
   28679    * uint32x4_t vreinterpretq_u32_p8 (poly8x16_t)
   28680 
   28681 
   28682 File: gcc.info,  Node: Blackfin Built-in Functions,  Next: FR-V Built-in Functions,  Prev: ARM NEON Intrinsics,  Up: Target Builtins
   28683 
   28684 5.50.4 Blackfin Built-in Functions
   28685 ----------------------------------
   28686 
   28687 Currently, there are two Blackfin-specific built-in functions.  These
   28688 are used for generating `CSYNC' and `SSYNC' machine insns without using
   28689 inline assembly; by using these built-in functions the compiler can
   28690 automatically add workarounds for hardware errata involving these
   28691 instructions.  These functions are named as follows:
   28692 
   28693      void __builtin_bfin_csync (void)
   28694      void __builtin_bfin_ssync (void)
   28695 
   28696 
   28697 File: gcc.info,  Node: FR-V Built-in Functions,  Next: X86 Built-in Functions,  Prev: Blackfin Built-in Functions,  Up: Target Builtins
   28698 
   28699 5.50.5 FR-V Built-in Functions
   28700 ------------------------------
   28701 
   28702 GCC provides many FR-V-specific built-in functions.  In general, these
   28703 functions are intended to be compatible with those described by `FR-V
   28704 Family, Softune C/C++ Compiler Manual (V6), Fujitsu Semiconductor'.
   28705 The two exceptions are `__MDUNPACKH' and `__MBTOHE', the gcc forms of
   28706 which pass 128-bit values by pointer rather than by value.
   28707 
   28708  Most of the functions are named after specific FR-V instructions.
   28709 Such functions are said to be "directly mapped" and are summarized here
   28710 in tabular form.
   28711 
   28712 * Menu:
   28713 
   28714 * Argument Types::
   28715 * Directly-mapped Integer Functions::
   28716 * Directly-mapped Media Functions::
   28717 * Raw read/write Functions::
   28718 * Other Built-in Functions::
   28719 
   28720 
   28721 File: gcc.info,  Node: Argument Types,  Next: Directly-mapped Integer Functions,  Up: FR-V Built-in Functions
   28722 
   28723 5.50.5.1 Argument Types
   28724 .......................
   28725 
   28726 The arguments to the built-in functions can be divided into three
   28727 groups: register numbers, compile-time constants and run-time values.
   28728 In order to make this classification clear at a glance, the arguments
   28729 and return values are given the following pseudo types:
   28730 
   28731 Pseudo type    Real C type            Constant?   Description
   28732 `uh'           `unsigned short'       No          an unsigned halfword
   28733 `uw1'          `unsigned int'         No          an unsigned word
   28734 `sw1'          `int'                  No          a signed word
   28735 `uw2'          `unsigned long long'   No          an unsigned doubleword
   28736 `sw2'          `long long'            No          a signed doubleword
   28737 `const'        `int'                  Yes         an integer constant
   28738 `acc'          `int'                  Yes         an ACC register number
   28739 `iacc'         `int'                  Yes         an IACC register number
   28740 
   28741  These pseudo types are not defined by GCC, they are simply a notational
   28742 convenience used in this manual.
   28743 
   28744  Arguments of type `uh', `uw1', `sw1', `uw2' and `sw2' are evaluated at
   28745 run time.  They correspond to register operands in the underlying FR-V
   28746 instructions.
   28747 
   28748  `const' arguments represent immediate operands in the underlying FR-V
   28749 instructions.  They must be compile-time constants.
   28750 
   28751  `acc' arguments are evaluated at compile time and specify the number
   28752 of an accumulator register.  For example, an `acc' argument of 2 will
   28753 select the ACC2 register.
   28754 
   28755  `iacc' arguments are similar to `acc' arguments but specify the number
   28756 of an IACC register.  See *note Other Built-in Functions:: for more
   28757 details.
   28758 
   28759 
   28760 File: gcc.info,  Node: Directly-mapped Integer Functions,  Next: Directly-mapped Media Functions,  Prev: Argument Types,  Up: FR-V Built-in Functions
   28761 
   28762 5.50.5.2 Directly-mapped Integer Functions
   28763 ..........................................
   28764 
   28765 The functions listed below map directly to FR-V I-type instructions.
   28766 
   28767 Function prototype               Example usage           Assembly output
   28768 `sw1 __ADDSS (sw1, sw1)'         `C = __ADDSS (A, B)'    `ADDSS A,B,C'
   28769 `sw1 __SCAN (sw1, sw1)'          `C = __SCAN (A, B)'     `SCAN A,B,C'
   28770 `sw1 __SCUTSS (sw1)'             `B = __SCUTSS (A)'      `SCUTSS A,B'
   28771 `sw1 __SLASS (sw1, sw1)'         `C = __SLASS (A, B)'    `SLASS A,B,C'
   28772 `void __SMASS (sw1, sw1)'        `__SMASS (A, B)'        `SMASS A,B'
   28773 `void __SMSSS (sw1, sw1)'        `__SMSSS (A, B)'        `SMSSS A,B'
   28774 `void __SMU (sw1, sw1)'          `__SMU (A, B)'          `SMU A,B'
   28775 `sw2 __SMUL (sw1, sw1)'          `C = __SMUL (A, B)'     `SMUL A,B,C'
   28776 `sw1 __SUBSS (sw1, sw1)'         `C = __SUBSS (A, B)'    `SUBSS A,B,C'
   28777 `uw2 __UMUL (uw1, uw1)'          `C = __UMUL (A, B)'     `UMUL A,B,C'
   28778 
   28779 
   28780 File: gcc.info,  Node: Directly-mapped Media Functions,  Next: Raw read/write Functions,  Prev: Directly-mapped Integer Functions,  Up: FR-V Built-in Functions
   28781 
   28782 5.50.5.3 Directly-mapped Media Functions
   28783 ........................................
   28784 
   28785 The functions listed below map directly to FR-V M-type instructions.
   28786 
   28787 Function prototype               Example usage           Assembly output
   28788 `uw1 __MABSHS (sw1)'             `B = __MABSHS (A)'      `MABSHS A,B'
   28789 `void __MADDACCS (acc, acc)'     `__MADDACCS (B, A)'     `MADDACCS A,B'
   28790 `sw1 __MADDHSS (sw1, sw1)'       `C = __MADDHSS (A, B)'  `MADDHSS A,B,C'
   28791 `uw1 __MADDHUS (uw1, uw1)'       `C = __MADDHUS (A, B)'  `MADDHUS A,B,C'
   28792 `uw1 __MAND (uw1, uw1)'          `C = __MAND (A, B)'     `MAND A,B,C'
   28793 `void __MASACCS (acc, acc)'      `__MASACCS (B, A)'      `MASACCS A,B'
   28794 `uw1 __MAVEH (uw1, uw1)'         `C = __MAVEH (A, B)'    `MAVEH A,B,C'
   28795 `uw2 __MBTOH (uw1)'              `B = __MBTOH (A)'       `MBTOH A,B'
   28796 `void __MBTOHE (uw1 *, uw1)'     `__MBTOHE (&B, A)'      `MBTOHE A,B'
   28797 `void __MCLRACC (acc)'           `__MCLRACC (A)'         `MCLRACC A'
   28798 `void __MCLRACCA (void)'         `__MCLRACCA ()'         `MCLRACCA'
   28799 `uw1 __Mcop1 (uw1, uw1)'         `C = __Mcop1 (A, B)'    `Mcop1 A,B,C'
   28800 `uw1 __Mcop2 (uw1, uw1)'         `C = __Mcop2 (A, B)'    `Mcop2 A,B,C'
   28801 `uw1 __MCPLHI (uw2, const)'      `C = __MCPLHI (A, B)'   `MCPLHI A,#B,C'
   28802 `uw1 __MCPLI (uw2, const)'       `C = __MCPLI (A, B)'    `MCPLI A,#B,C'
   28803 `void __MCPXIS (acc, sw1, sw1)'  `__MCPXIS (C, A, B)'    `MCPXIS A,B,C'
   28804 `void __MCPXIU (acc, uw1, uw1)'  `__MCPXIU (C, A, B)'    `MCPXIU A,B,C'
   28805 `void __MCPXRS (acc, sw1, sw1)'  `__MCPXRS (C, A, B)'    `MCPXRS A,B,C'
   28806 `void __MCPXRU (acc, uw1, uw1)'  `__MCPXRU (C, A, B)'    `MCPXRU A,B,C'
   28807 `uw1 __MCUT (acc, uw1)'          `C = __MCUT (A, B)'     `MCUT A,B,C'
   28808 `uw1 __MCUTSS (acc, sw1)'        `C = __MCUTSS (A, B)'   `MCUTSS A,B,C'
   28809 `void __MDADDACCS (acc, acc)'    `__MDADDACCS (B, A)'    `MDADDACCS A,B'
   28810 `void __MDASACCS (acc, acc)'     `__MDASACCS (B, A)'     `MDASACCS A,B'
   28811 `uw2 __MDCUTSSI (acc, const)'    `C = __MDCUTSSI (A, B)' `MDCUTSSI A,#B,C'
   28812 `uw2 __MDPACKH (uw2, uw2)'       `C = __MDPACKH (A, B)'  `MDPACKH A,B,C'
   28813 `uw2 __MDROTLI (uw2, const)'     `C = __MDROTLI (A, B)'  `MDROTLI A,#B,C'
   28814 `void __MDSUBACCS (acc, acc)'    `__MDSUBACCS (B, A)'    `MDSUBACCS A,B'
   28815 `void __MDUNPACKH (uw1 *, uw2)'  `__MDUNPACKH (&B, A)'   `MDUNPACKH A,B'
   28816 `uw2 __MEXPDHD (uw1, const)'     `C = __MEXPDHD (A, B)'  `MEXPDHD A,#B,C'
   28817 `uw1 __MEXPDHW (uw1, const)'     `C = __MEXPDHW (A, B)'  `MEXPDHW A,#B,C'
   28818 `uw1 __MHDSETH (uw1, const)'     `C = __MHDSETH (A, B)'  `MHDSETH A,#B,C'
   28819 `sw1 __MHDSETS (const)'          `B = __MHDSETS (A)'     `MHDSETS #A,B'
   28820 `uw1 __MHSETHIH (uw1, const)'    `B = __MHSETHIH (B, A)' `MHSETHIH #A,B'
   28821 `sw1 __MHSETHIS (sw1, const)'    `B = __MHSETHIS (B, A)' `MHSETHIS #A,B'
   28822 `uw1 __MHSETLOH (uw1, const)'    `B = __MHSETLOH (B, A)' `MHSETLOH #A,B'
   28823 `sw1 __MHSETLOS (sw1, const)'    `B = __MHSETLOS (B, A)' `MHSETLOS #A,B'
   28824 `uw1 __MHTOB (uw2)'              `B = __MHTOB (A)'       `MHTOB A,B'
   28825 `void __MMACHS (acc, sw1, sw1)'  `__MMACHS (C, A, B)'    `MMACHS A,B,C'
   28826 `void __MMACHU (acc, uw1, uw1)'  `__MMACHU (C, A, B)'    `MMACHU A,B,C'
   28827 `void __MMRDHS (acc, sw1, sw1)'  `__MMRDHS (C, A, B)'    `MMRDHS A,B,C'
   28828 `void __MMRDHU (acc, uw1, uw1)'  `__MMRDHU (C, A, B)'    `MMRDHU A,B,C'
   28829 `void __MMULHS (acc, sw1, sw1)'  `__MMULHS (C, A, B)'    `MMULHS A,B,C'
   28830 `void __MMULHU (acc, uw1, uw1)'  `__MMULHU (C, A, B)'    `MMULHU A,B,C'
   28831 `void __MMULXHS (acc, sw1, sw1)' `__MMULXHS (C, A, B)'   `MMULXHS A,B,C'
   28832 `void __MMULXHU (acc, uw1, uw1)' `__MMULXHU (C, A, B)'   `MMULXHU A,B,C'
   28833 `uw1 __MNOT (uw1)'               `B = __MNOT (A)'        `MNOT A,B'
   28834 `uw1 __MOR (uw1, uw1)'           `C = __MOR (A, B)'      `MOR A,B,C'
   28835 `uw1 __MPACKH (uh, uh)'          `C = __MPACKH (A, B)'   `MPACKH A,B,C'
   28836 `sw2 __MQADDHSS (sw2, sw2)'      `C = __MQADDHSS (A, B)' `MQADDHSS A,B,C'
   28837 `uw2 __MQADDHUS (uw2, uw2)'      `C = __MQADDHUS (A, B)' `MQADDHUS A,B,C'
   28838 `void __MQCPXIS (acc, sw2, sw2)' `__MQCPXIS (C, A, B)'   `MQCPXIS A,B,C'
   28839 `void __MQCPXIU (acc, uw2, uw2)' `__MQCPXIU (C, A, B)'   `MQCPXIU A,B,C'
   28840 `void __MQCPXRS (acc, sw2, sw2)' `__MQCPXRS (C, A, B)'   `MQCPXRS A,B,C'
   28841 `void __MQCPXRU (acc, uw2, uw2)' `__MQCPXRU (C, A, B)'   `MQCPXRU A,B,C'
   28842 `sw2 __MQLCLRHS (sw2, sw2)'      `C = __MQLCLRHS (A, B)' `MQLCLRHS A,B,C'
   28843 `sw2 __MQLMTHS (sw2, sw2)'       `C = __MQLMTHS (A, B)'  `MQLMTHS A,B,C'
   28844 `void __MQMACHS (acc, sw2, sw2)' `__MQMACHS (C, A, B)'   `MQMACHS A,B,C'
   28845 `void __MQMACHU (acc, uw2, uw2)' `__MQMACHU (C, A, B)'   `MQMACHU A,B,C'
   28846 `void __MQMACXHS (acc, sw2,      `__MQMACXHS (C, A, B)'  `MQMACXHS A,B,C'
   28847 sw2)'                                                    
   28848 `void __MQMULHS (acc, sw2, sw2)' `__MQMULHS (C, A, B)'   `MQMULHS A,B,C'
   28849 `void __MQMULHU (acc, uw2, uw2)' `__MQMULHU (C, A, B)'   `MQMULHU A,B,C'
   28850 `void __MQMULXHS (acc, sw2,      `__MQMULXHS (C, A, B)'  `MQMULXHS A,B,C'
   28851 sw2)'                                                    
   28852 `void __MQMULXHU (acc, uw2,      `__MQMULXHU (C, A, B)'  `MQMULXHU A,B,C'
   28853 uw2)'                                                    
   28854 `sw2 __MQSATHS (sw2, sw2)'       `C = __MQSATHS (A, B)'  `MQSATHS A,B,C'
   28855 `uw2 __MQSLLHI (uw2, int)'       `C = __MQSLLHI (A, B)'  `MQSLLHI A,B,C'
   28856 `sw2 __MQSRAHI (sw2, int)'       `C = __MQSRAHI (A, B)'  `MQSRAHI A,B,C'
   28857 `sw2 __MQSUBHSS (sw2, sw2)'      `C = __MQSUBHSS (A, B)' `MQSUBHSS A,B,C'
   28858 `uw2 __MQSUBHUS (uw2, uw2)'      `C = __MQSUBHUS (A, B)' `MQSUBHUS A,B,C'
   28859 `void __MQXMACHS (acc, sw2,      `__MQXMACHS (C, A, B)'  `MQXMACHS A,B,C'
   28860 sw2)'                                                    
   28861 `void __MQXMACXHS (acc, sw2,     `__MQXMACXHS (C, A, B)' `MQXMACXHS A,B,C'
   28862 sw2)'                                                    
   28863 `uw1 __MRDACC (acc)'             `B = __MRDACC (A)'      `MRDACC A,B'
   28864 `uw1 __MRDACCG (acc)'            `B = __MRDACCG (A)'     `MRDACCG A,B'
   28865 `uw1 __MROTLI (uw1, const)'      `C = __MROTLI (A, B)'   `MROTLI A,#B,C'
   28866 `uw1 __MROTRI (uw1, const)'      `C = __MROTRI (A, B)'   `MROTRI A,#B,C'
   28867 `sw1 __MSATHS (sw1, sw1)'        `C = __MSATHS (A, B)'   `MSATHS A,B,C'
   28868 `uw1 __MSATHU (uw1, uw1)'        `C = __MSATHU (A, B)'   `MSATHU A,B,C'
   28869 `uw1 __MSLLHI (uw1, const)'      `C = __MSLLHI (A, B)'   `MSLLHI A,#B,C'
   28870 `sw1 __MSRAHI (sw1, const)'      `C = __MSRAHI (A, B)'   `MSRAHI A,#B,C'
   28871 `uw1 __MSRLHI (uw1, const)'      `C = __MSRLHI (A, B)'   `MSRLHI A,#B,C'
   28872 `void __MSUBACCS (acc, acc)'     `__MSUBACCS (B, A)'     `MSUBACCS A,B'
   28873 `sw1 __MSUBHSS (sw1, sw1)'       `C = __MSUBHSS (A, B)'  `MSUBHSS A,B,C'
   28874 `uw1 __MSUBHUS (uw1, uw1)'       `C = __MSUBHUS (A, B)'  `MSUBHUS A,B,C'
   28875 `void __MTRAP (void)'            `__MTRAP ()'            `MTRAP'
   28876 `uw2 __MUNPACKH (uw1)'           `B = __MUNPACKH (A)'    `MUNPACKH A,B'
   28877 `uw1 __MWCUT (uw2, uw1)'         `C = __MWCUT (A, B)'    `MWCUT A,B,C'
   28878 `void __MWTACC (acc, uw1)'       `__MWTACC (B, A)'       `MWTACC A,B'
   28879 `void __MWTACCG (acc, uw1)'      `__MWTACCG (B, A)'      `MWTACCG A,B'
   28880 `uw1 __MXOR (uw1, uw1)'          `C = __MXOR (A, B)'     `MXOR A,B,C'
   28881 
   28882 
   28883 File: gcc.info,  Node: Raw read/write Functions,  Next: Other Built-in Functions,  Prev: Directly-mapped Media Functions,  Up: FR-V Built-in Functions
   28884 
   28885 5.50.5.4 Raw read/write Functions
   28886 .................................
   28887 
   28888 This sections describes built-in functions related to read and write
   28889 instructions to access memory.  These functions generate `membar'
   28890 instructions to flush the I/O load and stores where appropriate, as
   28891 described in Fujitsu's manual described above.
   28892 
   28893 `unsigned char __builtin_read8 (void *DATA)'
   28894 
   28895 `unsigned short __builtin_read16 (void *DATA)'
   28896 
   28897 `unsigned long __builtin_read32 (void *DATA)'
   28898 
   28899 `unsigned long long __builtin_read64 (void *DATA)'
   28900 
   28901 `void __builtin_write8 (void *DATA, unsigned char DATUM)'
   28902 
   28903 `void __builtin_write16 (void *DATA, unsigned short DATUM)'
   28904 
   28905 `void __builtin_write32 (void *DATA, unsigned long DATUM)'
   28906 
   28907 `void __builtin_write64 (void *DATA, unsigned long long DATUM)'
   28908 
   28909 
   28910 File: gcc.info,  Node: Other Built-in Functions,  Prev: Raw read/write Functions,  Up: FR-V Built-in Functions
   28911 
   28912 5.50.5.5 Other Built-in Functions
   28913 .................................
   28914 
   28915 This section describes built-in functions that are not named after a
   28916 specific FR-V instruction.
   28917 
   28918 `sw2 __IACCreadll (iacc REG)'
   28919      Return the full 64-bit value of IACC0.  The REG argument is
   28920      reserved for future expansion and must be 0.
   28921 
   28922 `sw1 __IACCreadl (iacc REG)'
   28923      Return the value of IACC0H if REG is 0 and IACC0L if REG is 1.
   28924      Other values of REG are rejected as invalid.
   28925 
   28926 `void __IACCsetll (iacc REG, sw2 X)'
   28927      Set the full 64-bit value of IACC0 to X.  The REG argument is
   28928      reserved for future expansion and must be 0.
   28929 
   28930 `void __IACCsetl (iacc REG, sw1 X)'
   28931      Set IACC0H to X if REG is 0 and IACC0L to X if REG is 1.  Other
   28932      values of REG are rejected as invalid.
   28933 
   28934 `void __data_prefetch0 (const void *X)'
   28935      Use the `dcpl' instruction to load the contents of address X into
   28936      the data cache.
   28937 
   28938 `void __data_prefetch (const void *X)'
   28939      Use the `nldub' instruction to load the contents of address X into
   28940      the data cache.  The instruction will be issued in slot I1.
   28941 
   28942 
   28943 File: gcc.info,  Node: X86 Built-in Functions,  Next: MIPS DSP Built-in Functions,  Prev: FR-V Built-in Functions,  Up: Target Builtins
   28944 
   28945 5.50.6 X86 Built-in Functions
   28946 -----------------------------
   28947 
   28948 These built-in functions are available for the i386 and x86-64 family
   28949 of computers, depending on the command-line switches used.
   28950 
   28951  Note that, if you specify command-line switches such as `-msse', the
   28952 compiler could use the extended instruction sets even if the built-ins
   28953 are not used explicitly in the program.  For this reason, applications
   28954 which perform runtime CPU detection must compile separate files for each
   28955 supported architecture, using the appropriate flags.  In particular,
   28956 the file containing the CPU detection code should be compiled without
   28957 these options.
   28958 
   28959  The following machine modes are available for use with MMX built-in
   28960 functions (*note Vector Extensions::): `V2SI' for a vector of two
   28961 32-bit integers, `V4HI' for a vector of four 16-bit integers, and
   28962 `V8QI' for a vector of eight 8-bit integers.  Some of the built-in
   28963 functions operate on MMX registers as a whole 64-bit entity, these use
   28964 `DI' as their mode.
   28965 
   28966  If 3Dnow extensions are enabled, `V2SF' is used as a mode for a vector
   28967 of two 32-bit floating point values.
   28968 
   28969  If SSE extensions are enabled, `V4SF' is used for a vector of four
   28970 32-bit floating point values.  Some instructions use a vector of four
   28971 32-bit integers, these use `V4SI'.  Finally, some instructions operate
   28972 on an entire vector register, interpreting it as a 128-bit integer,
   28973 these use mode `TI'.
   28974 
   28975  In 64-bit mode, the x86-64 family of processors uses additional
   28976 built-in functions for efficient use of `TF' (`__float128') 128-bit
   28977 floating point and `TC' 128-bit complex floating point values.
   28978 
   28979  The following floating point built-in functions are available in 64-bit
   28980 mode.  All of them implement the function that is part of the name.
   28981 
   28982      __float128 __builtin_fabsq (__float128)
   28983      __float128 __builtin_copysignq (__float128, __float128)
   28984 
   28985  The following floating point built-in functions are made available in
   28986 the 64-bit mode.
   28987 
   28988 `__float128 __builtin_infq (void)'
   28989      Similar to `__builtin_inf', except the return type is `__float128'.
   28990 
   28991  The following built-in functions are made available by `-mmmx'.  All
   28992 of them generate the machine instruction that is part of the name.
   28993 
   28994      v8qi __builtin_ia32_paddb (v8qi, v8qi)
   28995      v4hi __builtin_ia32_paddw (v4hi, v4hi)
   28996      v2si __builtin_ia32_paddd (v2si, v2si)
   28997      v8qi __builtin_ia32_psubb (v8qi, v8qi)
   28998      v4hi __builtin_ia32_psubw (v4hi, v4hi)
   28999      v2si __builtin_ia32_psubd (v2si, v2si)
   29000      v8qi __builtin_ia32_paddsb (v8qi, v8qi)
   29001      v4hi __builtin_ia32_paddsw (v4hi, v4hi)
   29002      v8qi __builtin_ia32_psubsb (v8qi, v8qi)
   29003      v4hi __builtin_ia32_psubsw (v4hi, v4hi)
   29004      v8qi __builtin_ia32_paddusb (v8qi, v8qi)
   29005      v4hi __builtin_ia32_paddusw (v4hi, v4hi)
   29006      v8qi __builtin_ia32_psubusb (v8qi, v8qi)
   29007      v4hi __builtin_ia32_psubusw (v4hi, v4hi)
   29008      v4hi __builtin_ia32_pmullw (v4hi, v4hi)
   29009      v4hi __builtin_ia32_pmulhw (v4hi, v4hi)
   29010      di __builtin_ia32_pand (di, di)
   29011      di __builtin_ia32_pandn (di,di)
   29012      di __builtin_ia32_por (di, di)
   29013      di __builtin_ia32_pxor (di, di)
   29014      v8qi __builtin_ia32_pcmpeqb (v8qi, v8qi)
   29015      v4hi __builtin_ia32_pcmpeqw (v4hi, v4hi)
   29016      v2si __builtin_ia32_pcmpeqd (v2si, v2si)
   29017      v8qi __builtin_ia32_pcmpgtb (v8qi, v8qi)
   29018      v4hi __builtin_ia32_pcmpgtw (v4hi, v4hi)
   29019      v2si __builtin_ia32_pcmpgtd (v2si, v2si)
   29020      v8qi __builtin_ia32_punpckhbw (v8qi, v8qi)
   29021      v4hi __builtin_ia32_punpckhwd (v4hi, v4hi)
   29022      v2si __builtin_ia32_punpckhdq (v2si, v2si)
   29023      v8qi __builtin_ia32_punpcklbw (v8qi, v8qi)
   29024      v4hi __builtin_ia32_punpcklwd (v4hi, v4hi)
   29025      v2si __builtin_ia32_punpckldq (v2si, v2si)
   29026      v8qi __builtin_ia32_packsswb (v4hi, v4hi)
   29027      v4hi __builtin_ia32_packssdw (v2si, v2si)
   29028      v8qi __builtin_ia32_packuswb (v4hi, v4hi)
   29029 
   29030  The following built-in functions are made available either with
   29031 `-msse', or with a combination of `-m3dnow' and `-march=athlon'.  All
   29032 of them generate the machine instruction that is part of the name.
   29033 
   29034      v4hi __builtin_ia32_pmulhuw (v4hi, v4hi)
   29035      v8qi __builtin_ia32_pavgb (v8qi, v8qi)
   29036      v4hi __builtin_ia32_pavgw (v4hi, v4hi)
   29037      v4hi __builtin_ia32_psadbw (v8qi, v8qi)
   29038      v8qi __builtin_ia32_pmaxub (v8qi, v8qi)
   29039      v4hi __builtin_ia32_pmaxsw (v4hi, v4hi)
   29040      v8qi __builtin_ia32_pminub (v8qi, v8qi)
   29041      v4hi __builtin_ia32_pminsw (v4hi, v4hi)
   29042      int __builtin_ia32_pextrw (v4hi, int)
   29043      v4hi __builtin_ia32_pinsrw (v4hi, int, int)
   29044      int __builtin_ia32_pmovmskb (v8qi)
   29045      void __builtin_ia32_maskmovq (v8qi, v8qi, char *)
   29046      void __builtin_ia32_movntq (di *, di)
   29047      void __builtin_ia32_sfence (void)
   29048 
   29049  The following built-in functions are available when `-msse' is used.
   29050 All of them generate the machine instruction that is part of the name.
   29051 
   29052      int __builtin_ia32_comieq (v4sf, v4sf)
   29053      int __builtin_ia32_comineq (v4sf, v4sf)
   29054      int __builtin_ia32_comilt (v4sf, v4sf)
   29055      int __builtin_ia32_comile (v4sf, v4sf)
   29056      int __builtin_ia32_comigt (v4sf, v4sf)
   29057      int __builtin_ia32_comige (v4sf, v4sf)
   29058      int __builtin_ia32_ucomieq (v4sf, v4sf)
   29059      int __builtin_ia32_ucomineq (v4sf, v4sf)
   29060      int __builtin_ia32_ucomilt (v4sf, v4sf)
   29061      int __builtin_ia32_ucomile (v4sf, v4sf)
   29062      int __builtin_ia32_ucomigt (v4sf, v4sf)
   29063      int __builtin_ia32_ucomige (v4sf, v4sf)
   29064      v4sf __builtin_ia32_addps (v4sf, v4sf)
   29065      v4sf __builtin_ia32_subps (v4sf, v4sf)
   29066      v4sf __builtin_ia32_mulps (v4sf, v4sf)
   29067      v4sf __builtin_ia32_divps (v4sf, v4sf)
   29068      v4sf __builtin_ia32_addss (v4sf, v4sf)
   29069      v4sf __builtin_ia32_subss (v4sf, v4sf)
   29070      v4sf __builtin_ia32_mulss (v4sf, v4sf)
   29071      v4sf __builtin_ia32_divss (v4sf, v4sf)
   29072      v4si __builtin_ia32_cmpeqps (v4sf, v4sf)
   29073      v4si __builtin_ia32_cmpltps (v4sf, v4sf)
   29074      v4si __builtin_ia32_cmpleps (v4sf, v4sf)
   29075      v4si __builtin_ia32_cmpgtps (v4sf, v4sf)
   29076      v4si __builtin_ia32_cmpgeps (v4sf, v4sf)
   29077      v4si __builtin_ia32_cmpunordps (v4sf, v4sf)
   29078      v4si __builtin_ia32_cmpneqps (v4sf, v4sf)
   29079      v4si __builtin_ia32_cmpnltps (v4sf, v4sf)
   29080      v4si __builtin_ia32_cmpnleps (v4sf, v4sf)
   29081      v4si __builtin_ia32_cmpngtps (v4sf, v4sf)
   29082      v4si __builtin_ia32_cmpngeps (v4sf, v4sf)
   29083      v4si __builtin_ia32_cmpordps (v4sf, v4sf)
   29084      v4si __builtin_ia32_cmpeqss (v4sf, v4sf)
   29085      v4si __builtin_ia32_cmpltss (v4sf, v4sf)
   29086      v4si __builtin_ia32_cmpless (v4sf, v4sf)
   29087      v4si __builtin_ia32_cmpunordss (v4sf, v4sf)
   29088      v4si __builtin_ia32_cmpneqss (v4sf, v4sf)
   29089      v4si __builtin_ia32_cmpnlts (v4sf, v4sf)
   29090      v4si __builtin_ia32_cmpnless (v4sf, v4sf)
   29091      v4si __builtin_ia32_cmpordss (v4sf, v4sf)
   29092      v4sf __builtin_ia32_maxps (v4sf, v4sf)
   29093      v4sf __builtin_ia32_maxss (v4sf, v4sf)
   29094      v4sf __builtin_ia32_minps (v4sf, v4sf)
   29095      v4sf __builtin_ia32_minss (v4sf, v4sf)
   29096      v4sf __builtin_ia32_andps (v4sf, v4sf)
   29097      v4sf __builtin_ia32_andnps (v4sf, v4sf)
   29098      v4sf __builtin_ia32_orps (v4sf, v4sf)
   29099      v4sf __builtin_ia32_xorps (v4sf, v4sf)
   29100      v4sf __builtin_ia32_movss (v4sf, v4sf)
   29101      v4sf __builtin_ia32_movhlps (v4sf, v4sf)
   29102      v4sf __builtin_ia32_movlhps (v4sf, v4sf)
   29103      v4sf __builtin_ia32_unpckhps (v4sf, v4sf)
   29104      v4sf __builtin_ia32_unpcklps (v4sf, v4sf)
   29105      v4sf __builtin_ia32_cvtpi2ps (v4sf, v2si)
   29106      v4sf __builtin_ia32_cvtsi2ss (v4sf, int)
   29107      v2si __builtin_ia32_cvtps2pi (v4sf)
   29108      int __builtin_ia32_cvtss2si (v4sf)
   29109      v2si __builtin_ia32_cvttps2pi (v4sf)
   29110      int __builtin_ia32_cvttss2si (v4sf)
   29111      v4sf __builtin_ia32_rcpps (v4sf)
   29112      v4sf __builtin_ia32_rsqrtps (v4sf)
   29113      v4sf __builtin_ia32_sqrtps (v4sf)
   29114      v4sf __builtin_ia32_rcpss (v4sf)
   29115      v4sf __builtin_ia32_rsqrtss (v4sf)
   29116      v4sf __builtin_ia32_sqrtss (v4sf)
   29117      v4sf __builtin_ia32_shufps (v4sf, v4sf, int)
   29118      void __builtin_ia32_movntps (float *, v4sf)
   29119      int __builtin_ia32_movmskps (v4sf)
   29120 
   29121  The following built-in functions are available when `-msse' is used.
   29122 
   29123 `v4sf __builtin_ia32_loadaps (float *)'
   29124      Generates the `movaps' machine instruction as a load from memory.
   29125 
   29126 `void __builtin_ia32_storeaps (float *, v4sf)'
   29127      Generates the `movaps' machine instruction as a store to memory.
   29128 
   29129 `v4sf __builtin_ia32_loadups (float *)'
   29130      Generates the `movups' machine instruction as a load from memory.
   29131 
   29132 `void __builtin_ia32_storeups (float *, v4sf)'
   29133      Generates the `movups' machine instruction as a store to memory.
   29134 
   29135 `v4sf __builtin_ia32_loadsss (float *)'
   29136      Generates the `movss' machine instruction as a load from memory.
   29137 
   29138 `void __builtin_ia32_storess (float *, v4sf)'
   29139      Generates the `movss' machine instruction as a store to memory.
   29140 
   29141 `v4sf __builtin_ia32_loadhps (v4sf, v2si *)'
   29142      Generates the `movhps' machine instruction as a load from memory.
   29143 
   29144 `v4sf __builtin_ia32_loadlps (v4sf, v2si *)'
   29145      Generates the `movlps' machine instruction as a load from memory
   29146 
   29147 `void __builtin_ia32_storehps (v4sf, v2si *)'
   29148      Generates the `movhps' machine instruction as a store to memory.
   29149 
   29150 `void __builtin_ia32_storelps (v4sf, v2si *)'
   29151      Generates the `movlps' machine instruction as a store to memory.
   29152 
   29153  The following built-in functions are available when `-msse2' is used.
   29154 All of them generate the machine instruction that is part of the name.
   29155 
   29156      int __builtin_ia32_comisdeq (v2df, v2df)
   29157      int __builtin_ia32_comisdlt (v2df, v2df)
   29158      int __builtin_ia32_comisdle (v2df, v2df)
   29159      int __builtin_ia32_comisdgt (v2df, v2df)
   29160      int __builtin_ia32_comisdge (v2df, v2df)
   29161      int __builtin_ia32_comisdneq (v2df, v2df)
   29162      int __builtin_ia32_ucomisdeq (v2df, v2df)
   29163      int __builtin_ia32_ucomisdlt (v2df, v2df)
   29164      int __builtin_ia32_ucomisdle (v2df, v2df)
   29165      int __builtin_ia32_ucomisdgt (v2df, v2df)
   29166      int __builtin_ia32_ucomisdge (v2df, v2df)
   29167      int __builtin_ia32_ucomisdneq (v2df, v2df)
   29168      v2df __builtin_ia32_cmpeqpd (v2df, v2df)
   29169      v2df __builtin_ia32_cmpltpd (v2df, v2df)
   29170      v2df __builtin_ia32_cmplepd (v2df, v2df)
   29171      v2df __builtin_ia32_cmpgtpd (v2df, v2df)
   29172      v2df __builtin_ia32_cmpgepd (v2df, v2df)
   29173      v2df __builtin_ia32_cmpunordpd (v2df, v2df)
   29174      v2df __builtin_ia32_cmpneqpd (v2df, v2df)
   29175      v2df __builtin_ia32_cmpnltpd (v2df, v2df)
   29176      v2df __builtin_ia32_cmpnlepd (v2df, v2df)
   29177      v2df __builtin_ia32_cmpngtpd (v2df, v2df)
   29178      v2df __builtin_ia32_cmpngepd (v2df, v2df)
   29179      v2df __builtin_ia32_cmpordpd (v2df, v2df)
   29180      v2df __builtin_ia32_cmpeqsd (v2df, v2df)
   29181      v2df __builtin_ia32_cmpltsd (v2df, v2df)
   29182      v2df __builtin_ia32_cmplesd (v2df, v2df)
   29183      v2df __builtin_ia32_cmpunordsd (v2df, v2df)
   29184      v2df __builtin_ia32_cmpneqsd (v2df, v2df)
   29185      v2df __builtin_ia32_cmpnltsd (v2df, v2df)
   29186      v2df __builtin_ia32_cmpnlesd (v2df, v2df)
   29187      v2df __builtin_ia32_cmpordsd (v2df, v2df)
   29188      v2di __builtin_ia32_paddq (v2di, v2di)
   29189      v2di __builtin_ia32_psubq (v2di, v2di)
   29190      v2df __builtin_ia32_addpd (v2df, v2df)
   29191      v2df __builtin_ia32_subpd (v2df, v2df)
   29192      v2df __builtin_ia32_mulpd (v2df, v2df)
   29193      v2df __builtin_ia32_divpd (v2df, v2df)
   29194      v2df __builtin_ia32_addsd (v2df, v2df)
   29195      v2df __builtin_ia32_subsd (v2df, v2df)
   29196      v2df __builtin_ia32_mulsd (v2df, v2df)
   29197      v2df __builtin_ia32_divsd (v2df, v2df)
   29198      v2df __builtin_ia32_minpd (v2df, v2df)
   29199      v2df __builtin_ia32_maxpd (v2df, v2df)
   29200      v2df __builtin_ia32_minsd (v2df, v2df)
   29201      v2df __builtin_ia32_maxsd (v2df, v2df)
   29202      v2df __builtin_ia32_andpd (v2df, v2df)
   29203      v2df __builtin_ia32_andnpd (v2df, v2df)
   29204      v2df __builtin_ia32_orpd (v2df, v2df)
   29205      v2df __builtin_ia32_xorpd (v2df, v2df)
   29206      v2df __builtin_ia32_movsd (v2df, v2df)
   29207      v2df __builtin_ia32_unpckhpd (v2df, v2df)
   29208      v2df __builtin_ia32_unpcklpd (v2df, v2df)
   29209      v16qi __builtin_ia32_paddb128 (v16qi, v16qi)
   29210      v8hi __builtin_ia32_paddw128 (v8hi, v8hi)
   29211      v4si __builtin_ia32_paddd128 (v4si, v4si)
   29212      v2di __builtin_ia32_paddq128 (v2di, v2di)
   29213      v16qi __builtin_ia32_psubb128 (v16qi, v16qi)
   29214      v8hi __builtin_ia32_psubw128 (v8hi, v8hi)
   29215      v4si __builtin_ia32_psubd128 (v4si, v4si)
   29216      v2di __builtin_ia32_psubq128 (v2di, v2di)
   29217      v8hi __builtin_ia32_pmullw128 (v8hi, v8hi)
   29218      v8hi __builtin_ia32_pmulhw128 (v8hi, v8hi)
   29219      v2di __builtin_ia32_pand128 (v2di, v2di)
   29220      v2di __builtin_ia32_pandn128 (v2di, v2di)
   29221      v2di __builtin_ia32_por128 (v2di, v2di)
   29222      v2di __builtin_ia32_pxor128 (v2di, v2di)
   29223      v16qi __builtin_ia32_pavgb128 (v16qi, v16qi)
   29224      v8hi __builtin_ia32_pavgw128 (v8hi, v8hi)
   29225      v16qi __builtin_ia32_pcmpeqb128 (v16qi, v16qi)
   29226      v8hi __builtin_ia32_pcmpeqw128 (v8hi, v8hi)
   29227      v4si __builtin_ia32_pcmpeqd128 (v4si, v4si)
   29228      v16qi __builtin_ia32_pcmpgtb128 (v16qi, v16qi)
   29229      v8hi __builtin_ia32_pcmpgtw128 (v8hi, v8hi)
   29230      v4si __builtin_ia32_pcmpgtd128 (v4si, v4si)
   29231      v16qi __builtin_ia32_pmaxub128 (v16qi, v16qi)
   29232      v8hi __builtin_ia32_pmaxsw128 (v8hi, v8hi)
   29233      v16qi __builtin_ia32_pminub128 (v16qi, v16qi)
   29234      v8hi __builtin_ia32_pminsw128 (v8hi, v8hi)
   29235      v16qi __builtin_ia32_punpckhbw128 (v16qi, v16qi)
   29236      v8hi __builtin_ia32_punpckhwd128 (v8hi, v8hi)
   29237      v4si __builtin_ia32_punpckhdq128 (v4si, v4si)
   29238      v2di __builtin_ia32_punpckhqdq128 (v2di, v2di)
   29239      v16qi __builtin_ia32_punpcklbw128 (v16qi, v16qi)
   29240      v8hi __builtin_ia32_punpcklwd128 (v8hi, v8hi)
   29241      v4si __builtin_ia32_punpckldq128 (v4si, v4si)
   29242      v2di __builtin_ia32_punpcklqdq128 (v2di, v2di)
   29243      v16qi __builtin_ia32_packsswb128 (v16qi, v16qi)
   29244      v8hi __builtin_ia32_packssdw128 (v8hi, v8hi)
   29245      v16qi __builtin_ia32_packuswb128 (v16qi, v16qi)
   29246      v8hi __builtin_ia32_pmulhuw128 (v8hi, v8hi)
   29247      void __builtin_ia32_maskmovdqu (v16qi, v16qi)
   29248      v2df __builtin_ia32_loadupd (double *)
   29249      void __builtin_ia32_storeupd (double *, v2df)
   29250      v2df __builtin_ia32_loadhpd (v2df, double *)
   29251      v2df __builtin_ia32_loadlpd (v2df, double *)
   29252      int __builtin_ia32_movmskpd (v2df)
   29253      int __builtin_ia32_pmovmskb128 (v16qi)
   29254      void __builtin_ia32_movnti (int *, int)
   29255      void __builtin_ia32_movntpd (double *, v2df)
   29256      void __builtin_ia32_movntdq (v2df *, v2df)
   29257      v4si __builtin_ia32_pshufd (v4si, int)
   29258      v8hi __builtin_ia32_pshuflw (v8hi, int)
   29259      v8hi __builtin_ia32_pshufhw (v8hi, int)
   29260      v2di __builtin_ia32_psadbw128 (v16qi, v16qi)
   29261      v2df __builtin_ia32_sqrtpd (v2df)
   29262      v2df __builtin_ia32_sqrtsd (v2df)
   29263      v2df __builtin_ia32_shufpd (v2df, v2df, int)
   29264      v2df __builtin_ia32_cvtdq2pd (v4si)
   29265      v4sf __builtin_ia32_cvtdq2ps (v4si)
   29266      v4si __builtin_ia32_cvtpd2dq (v2df)
   29267      v2si __builtin_ia32_cvtpd2pi (v2df)
   29268      v4sf __builtin_ia32_cvtpd2ps (v2df)
   29269      v4si __builtin_ia32_cvttpd2dq (v2df)
   29270      v2si __builtin_ia32_cvttpd2pi (v2df)
   29271      v2df __builtin_ia32_cvtpi2pd (v2si)
   29272      int __builtin_ia32_cvtsd2si (v2df)
   29273      int __builtin_ia32_cvttsd2si (v2df)
   29274      long long __builtin_ia32_cvtsd2si64 (v2df)
   29275      long long __builtin_ia32_cvttsd2si64 (v2df)
   29276      v4si __builtin_ia32_cvtps2dq (v4sf)
   29277      v2df __builtin_ia32_cvtps2pd (v4sf)
   29278      v4si __builtin_ia32_cvttps2dq (v4sf)
   29279      v2df __builtin_ia32_cvtsi2sd (v2df, int)
   29280      v2df __builtin_ia32_cvtsi642sd (v2df, long long)
   29281      v4sf __builtin_ia32_cvtsd2ss (v4sf, v2df)
   29282      v2df __builtin_ia32_cvtss2sd (v2df, v4sf)
   29283      void __builtin_ia32_clflush (const void *)
   29284      void __builtin_ia32_lfence (void)
   29285      void __builtin_ia32_mfence (void)
   29286      v16qi __builtin_ia32_loaddqu (const char *)
   29287      void __builtin_ia32_storedqu (char *, v16qi)
   29288      unsigned long long __builtin_ia32_pmuludq (v2si, v2si)
   29289      v2di __builtin_ia32_pmuludq128 (v4si, v4si)
   29290      v8hi __builtin_ia32_psllw128 (v8hi, v2di)
   29291      v4si __builtin_ia32_pslld128 (v4si, v2di)
   29292      v2di __builtin_ia32_psllq128 (v4si, v2di)
   29293      v8hi __builtin_ia32_psrlw128 (v8hi, v2di)
   29294      v4si __builtin_ia32_psrld128 (v4si, v2di)
   29295      v2di __builtin_ia32_psrlq128 (v2di, v2di)
   29296      v8hi __builtin_ia32_psraw128 (v8hi, v2di)
   29297      v4si __builtin_ia32_psrad128 (v4si, v2di)
   29298      v2di __builtin_ia32_pslldqi128 (v2di, int)
   29299      v8hi __builtin_ia32_psllwi128 (v8hi, int)
   29300      v4si __builtin_ia32_pslldi128 (v4si, int)
   29301      v2di __builtin_ia32_psllqi128 (v2di, int)
   29302      v2di __builtin_ia32_psrldqi128 (v2di, int)
   29303      v8hi __builtin_ia32_psrlwi128 (v8hi, int)
   29304      v4si __builtin_ia32_psrldi128 (v4si, int)
   29305      v2di __builtin_ia32_psrlqi128 (v2di, int)
   29306      v8hi __builtin_ia32_psrawi128 (v8hi, int)
   29307      v4si __builtin_ia32_psradi128 (v4si, int)
   29308      v4si __builtin_ia32_pmaddwd128 (v8hi, v8hi)
   29309 
   29310  The following built-in functions are available when `-msse3' is used.
   29311 All of them generate the machine instruction that is part of the name.
   29312 
   29313      v2df __builtin_ia32_addsubpd (v2df, v2df)
   29314      v4sf __builtin_ia32_addsubps (v4sf, v4sf)
   29315      v2df __builtin_ia32_haddpd (v2df, v2df)
   29316      v4sf __builtin_ia32_haddps (v4sf, v4sf)
   29317      v2df __builtin_ia32_hsubpd (v2df, v2df)
   29318      v4sf __builtin_ia32_hsubps (v4sf, v4sf)
   29319      v16qi __builtin_ia32_lddqu (char const *)
   29320      void __builtin_ia32_monitor (void *, unsigned int, unsigned int)
   29321      v2df __builtin_ia32_movddup (v2df)
   29322      v4sf __builtin_ia32_movshdup (v4sf)
   29323      v4sf __builtin_ia32_movsldup (v4sf)
   29324      void __builtin_ia32_mwait (unsigned int, unsigned int)
   29325 
   29326  The following built-in functions are available when `-msse3' is used.
   29327 
   29328 `v2df __builtin_ia32_loadddup (double const *)'
   29329      Generates the `movddup' machine instruction as a load from memory.
   29330 
   29331  The following built-in functions are available when `-mssse3' is used.
   29332 All of them generate the machine instruction that is part of the name
   29333 with MMX registers.
   29334 
   29335      v2si __builtin_ia32_phaddd (v2si, v2si)
   29336      v4hi __builtin_ia32_phaddw (v4hi, v4hi)
   29337      v4hi __builtin_ia32_phaddsw (v4hi, v4hi)
   29338      v2si __builtin_ia32_phsubd (v2si, v2si)
   29339      v4hi __builtin_ia32_phsubw (v4hi, v4hi)
   29340      v4hi __builtin_ia32_phsubsw (v4hi, v4hi)
   29341      v8qi __builtin_ia32_pmaddubsw (v8qi, v8qi)
   29342      v4hi __builtin_ia32_pmulhrsw (v4hi, v4hi)
   29343      v8qi __builtin_ia32_pshufb (v8qi, v8qi)
   29344      v8qi __builtin_ia32_psignb (v8qi, v8qi)
   29345      v2si __builtin_ia32_psignd (v2si, v2si)
   29346      v4hi __builtin_ia32_psignw (v4hi, v4hi)
   29347      long long __builtin_ia32_palignr (long long, long long, int)
   29348      v8qi __builtin_ia32_pabsb (v8qi)
   29349      v2si __builtin_ia32_pabsd (v2si)
   29350      v4hi __builtin_ia32_pabsw (v4hi)
   29351 
   29352  The following built-in functions are available when `-mssse3' is used.
   29353 All of them generate the machine instruction that is part of the name
   29354 with SSE registers.
   29355 
   29356      v4si __builtin_ia32_phaddd128 (v4si, v4si)
   29357      v8hi __builtin_ia32_phaddw128 (v8hi, v8hi)
   29358      v8hi __builtin_ia32_phaddsw128 (v8hi, v8hi)
   29359      v4si __builtin_ia32_phsubd128 (v4si, v4si)
   29360      v8hi __builtin_ia32_phsubw128 (v8hi, v8hi)
   29361      v8hi __builtin_ia32_phsubsw128 (v8hi, v8hi)
   29362      v16qi __builtin_ia32_pmaddubsw128 (v16qi, v16qi)
   29363      v8hi __builtin_ia32_pmulhrsw128 (v8hi, v8hi)
   29364      v16qi __builtin_ia32_pshufb128 (v16qi, v16qi)
   29365      v16qi __builtin_ia32_psignb128 (v16qi, v16qi)
   29366      v4si __builtin_ia32_psignd128 (v4si, v4si)
   29367      v8hi __builtin_ia32_psignw128 (v8hi, v8hi)
   29368      v2di __builtin_ia32_palignr (v2di, v2di, int)
   29369      v16qi __builtin_ia32_pabsb128 (v16qi)
   29370      v4si __builtin_ia32_pabsd128 (v4si)
   29371      v8hi __builtin_ia32_pabsw128 (v8hi)
   29372 
   29373  The following built-in functions are available when `-msse4.1' is
   29374 used.  All of them generate the machine instruction that is part of the
   29375 name.
   29376 
   29377      v2df __builtin_ia32_blendpd (v2df, v2df, const int)
   29378      v4sf __builtin_ia32_blendps (v4sf, v4sf, const int)
   29379      v2df __builtin_ia32_blendvpd (v2df, v2df, v2df)
   29380      v4sf __builtin_ia32_blendvps (v4sf, v4sf, v4sf)
   29381      v2df __builtin_ia32_dppd (v2df, v2df, const int)
   29382      v4sf __builtin_ia32_dpps (v4sf, v4sf, const int)
   29383      v4sf __builtin_ia32_insertps128 (v4sf, v4sf, const int)
   29384      v2di __builtin_ia32_movntdqa (v2di *);
   29385      v16qi __builtin_ia32_mpsadbw128 (v16qi, v16qi, const int)
   29386      v8hi __builtin_ia32_packusdw128 (v4si, v4si)
   29387      v16qi __builtin_ia32_pblendvb128 (v16qi, v16qi, v16qi)
   29388      v8hi __builtin_ia32_pblendw128 (v8hi, v8hi, const int)
   29389      v2di __builtin_ia32_pcmpeqq (v2di, v2di)
   29390      v8hi __builtin_ia32_phminposuw128 (v8hi)
   29391      v16qi __builtin_ia32_pmaxsb128 (v16qi, v16qi)
   29392      v4si __builtin_ia32_pmaxsd128 (v4si, v4si)
   29393      v4si __builtin_ia32_pmaxud128 (v4si, v4si)
   29394      v8hi __builtin_ia32_pmaxuw128 (v8hi, v8hi)
   29395      v16qi __builtin_ia32_pminsb128 (v16qi, v16qi)
   29396      v4si __builtin_ia32_pminsd128 (v4si, v4si)
   29397      v4si __builtin_ia32_pminud128 (v4si, v4si)
   29398      v8hi __builtin_ia32_pminuw128 (v8hi, v8hi)
   29399      v4si __builtin_ia32_pmovsxbd128 (v16qi)
   29400      v2di __builtin_ia32_pmovsxbq128 (v16qi)
   29401      v8hi __builtin_ia32_pmovsxbw128 (v16qi)
   29402      v2di __builtin_ia32_pmovsxdq128 (v4si)
   29403      v4si __builtin_ia32_pmovsxwd128 (v8hi)
   29404      v2di __builtin_ia32_pmovsxwq128 (v8hi)
   29405      v4si __builtin_ia32_pmovzxbd128 (v16qi)
   29406      v2di __builtin_ia32_pmovzxbq128 (v16qi)
   29407      v8hi __builtin_ia32_pmovzxbw128 (v16qi)
   29408      v2di __builtin_ia32_pmovzxdq128 (v4si)
   29409      v4si __builtin_ia32_pmovzxwd128 (v8hi)
   29410      v2di __builtin_ia32_pmovzxwq128 (v8hi)
   29411      v2di __builtin_ia32_pmuldq128 (v4si, v4si)
   29412      v4si __builtin_ia32_pmulld128 (v4si, v4si)
   29413      int __builtin_ia32_ptestc128 (v2di, v2di)
   29414      int __builtin_ia32_ptestnzc128 (v2di, v2di)
   29415      int __builtin_ia32_ptestz128 (v2di, v2di)
   29416      v2df __builtin_ia32_roundpd (v2df, const int)
   29417      v4sf __builtin_ia32_roundps (v4sf, const int)
   29418      v2df __builtin_ia32_roundsd (v2df, v2df, const int)
   29419      v4sf __builtin_ia32_roundss (v4sf, v4sf, const int)
   29420 
   29421  The following built-in functions are available when `-msse4.1' is used.
   29422 
   29423 `v4sf __builtin_ia32_vec_set_v4sf (v4sf, float, const int)'
   29424      Generates the `insertps' machine instruction.
   29425 
   29426 `int __builtin_ia32_vec_ext_v16qi (v16qi, const int)'
   29427      Generates the `pextrb' machine instruction.
   29428 
   29429 `v16qi __builtin_ia32_vec_set_v16qi (v16qi, int, const int)'
   29430      Generates the `pinsrb' machine instruction.
   29431 
   29432 `v4si __builtin_ia32_vec_set_v4si (v4si, int, const int)'
   29433      Generates the `pinsrd' machine instruction.
   29434 
   29435 `v2di __builtin_ia32_vec_set_v2di (v2di, long long, const int)'
   29436      Generates the `pinsrq' machine instruction in 64bit mode.
   29437 
   29438  The following built-in functions are changed to generate new SSE4.1
   29439 instructions when `-msse4.1' is used.
   29440 
   29441 `float __builtin_ia32_vec_ext_v4sf (v4sf, const int)'
   29442      Generates the `extractps' machine instruction.
   29443 
   29444 `int __builtin_ia32_vec_ext_v4si (v4si, const int)'
   29445      Generates the `pextrd' machine instruction.
   29446 
   29447 `long long __builtin_ia32_vec_ext_v2di (v2di, const int)'
   29448      Generates the `pextrq' machine instruction in 64bit mode.
   29449 
   29450  The following built-in functions are available when `-msse4.2' is
   29451 used.  All of them generate the machine instruction that is part of the
   29452 name.
   29453 
   29454      v16qi __builtin_ia32_pcmpestrm128 (v16qi, int, v16qi, int, const int)
   29455      int __builtin_ia32_pcmpestri128 (v16qi, int, v16qi, int, const int)
   29456      int __builtin_ia32_pcmpestria128 (v16qi, int, v16qi, int, const int)
   29457      int __builtin_ia32_pcmpestric128 (v16qi, int, v16qi, int, const int)
   29458      int __builtin_ia32_pcmpestrio128 (v16qi, int, v16qi, int, const int)
   29459      int __builtin_ia32_pcmpestris128 (v16qi, int, v16qi, int, const int)
   29460      int __builtin_ia32_pcmpestriz128 (v16qi, int, v16qi, int, const int)
   29461      v16qi __builtin_ia32_pcmpistrm128 (v16qi, v16qi, const int)
   29462      int __builtin_ia32_pcmpistri128 (v16qi, v16qi, const int)
   29463      int __builtin_ia32_pcmpistria128 (v16qi, v16qi, const int)
   29464      int __builtin_ia32_pcmpistric128 (v16qi, v16qi, const int)
   29465      int __builtin_ia32_pcmpistrio128 (v16qi, v16qi, const int)
   29466      int __builtin_ia32_pcmpistris128 (v16qi, v16qi, const int)
   29467      int __builtin_ia32_pcmpistriz128 (v16qi, v16qi, const int)
   29468      v2di __builtin_ia32_pcmpgtq (v2di, v2di)
   29469 
   29470  The following built-in functions are available when `-msse4.2' is used.
   29471 
   29472 `unsigned int __builtin_ia32_crc32qi (unsigned int, unsigned char)'
   29473      Generates the `crc32b' machine instruction.
   29474 
   29475 `unsigned int __builtin_ia32_crc32hi (unsigned int, unsigned short)'
   29476      Generates the `crc32w' machine instruction.
   29477 
   29478 `unsigned int __builtin_ia32_crc32si (unsigned int, unsigned int)'
   29479      Generates the `crc32l' machine instruction.
   29480 
   29481 `unsigned long long __builtin_ia32_crc32di (unsigned long long, unsigned long long)'
   29482 
   29483  The following built-in functions are changed to generate new SSE4.2
   29484 instructions when `-msse4.2' is used.
   29485 
   29486 `int __builtin_popcount (unsigned int)'
   29487      Generates the `popcntl' machine instruction.
   29488 
   29489 `int __builtin_popcountl (unsigned long)'
   29490      Generates the `popcntl' or `popcntq' machine instruction,
   29491      depending on the size of `unsigned long'.
   29492 
   29493 `int __builtin_popcountll (unsigned long long)'
   29494      Generates the `popcntq' machine instruction.
   29495 
   29496  The following built-in functions are available when `-msse4a' is used.
   29497 All of them generate the machine instruction that is part of the name.
   29498 
   29499      void __builtin_ia32_movntsd (double *, v2df)
   29500      void __builtin_ia32_movntss (float *, v4sf)
   29501      v2di __builtin_ia32_extrq  (v2di, v16qi)
   29502      v2di __builtin_ia32_extrqi (v2di, const unsigned int, const unsigned int)
   29503      v2di __builtin_ia32_insertq (v2di, v2di)
   29504      v2di __builtin_ia32_insertqi (v2di, v2di, const unsigned int, const unsigned int)
   29505 
   29506  The following built-in functions are available when `-msse5' is used.
   29507 All of them generate the machine instruction that is part of the name
   29508 with MMX registers.
   29509 
   29510      v2df __builtin_ia32_comeqpd (v2df, v2df)
   29511      v2df __builtin_ia32_comeqps (v2df, v2df)
   29512      v4sf __builtin_ia32_comeqsd (v4sf, v4sf)
   29513      v4sf __builtin_ia32_comeqss (v4sf, v4sf)
   29514      v2df __builtin_ia32_comfalsepd (v2df, v2df)
   29515      v2df __builtin_ia32_comfalseps (v2df, v2df)
   29516      v4sf __builtin_ia32_comfalsesd (v4sf, v4sf)
   29517      v4sf __builtin_ia32_comfalsess (v4sf, v4sf)
   29518      v2df __builtin_ia32_comgepd (v2df, v2df)
   29519      v2df __builtin_ia32_comgeps (v2df, v2df)
   29520      v4sf __builtin_ia32_comgesd (v4sf, v4sf)
   29521      v4sf __builtin_ia32_comgess (v4sf, v4sf)
   29522      v2df __builtin_ia32_comgtpd (v2df, v2df)
   29523      v2df __builtin_ia32_comgtps (v2df, v2df)
   29524      v4sf __builtin_ia32_comgtsd (v4sf, v4sf)
   29525      v4sf __builtin_ia32_comgtss (v4sf, v4sf)
   29526      v2df __builtin_ia32_comlepd (v2df, v2df)
   29527      v2df __builtin_ia32_comleps (v2df, v2df)
   29528      v4sf __builtin_ia32_comlesd (v4sf, v4sf)
   29529      v4sf __builtin_ia32_comless (v4sf, v4sf)
   29530      v2df __builtin_ia32_comltpd (v2df, v2df)
   29531      v2df __builtin_ia32_comltps (v2df, v2df)
   29532      v4sf __builtin_ia32_comltsd (v4sf, v4sf)
   29533      v4sf __builtin_ia32_comltss (v4sf, v4sf)
   29534      v2df __builtin_ia32_comnepd (v2df, v2df)
   29535      v2df __builtin_ia32_comneps (v2df, v2df)
   29536      v4sf __builtin_ia32_comnesd (v4sf, v4sf)
   29537      v4sf __builtin_ia32_comness (v4sf, v4sf)
   29538      v2df __builtin_ia32_comordpd (v2df, v2df)
   29539      v2df __builtin_ia32_comordps (v2df, v2df)
   29540      v4sf __builtin_ia32_comordsd (v4sf, v4sf)
   29541      v4sf __builtin_ia32_comordss (v4sf, v4sf)
   29542      v2df __builtin_ia32_comtruepd (v2df, v2df)
   29543      v2df __builtin_ia32_comtrueps (v2df, v2df)
   29544      v4sf __builtin_ia32_comtruesd (v4sf, v4sf)
   29545      v4sf __builtin_ia32_comtruess (v4sf, v4sf)
   29546      v2df __builtin_ia32_comueqpd (v2df, v2df)
   29547      v2df __builtin_ia32_comueqps (v2df, v2df)
   29548      v4sf __builtin_ia32_comueqsd (v4sf, v4sf)
   29549      v4sf __builtin_ia32_comueqss (v4sf, v4sf)
   29550      v2df __builtin_ia32_comugepd (v2df, v2df)
   29551      v2df __builtin_ia32_comugeps (v2df, v2df)
   29552      v4sf __builtin_ia32_comugesd (v4sf, v4sf)
   29553      v4sf __builtin_ia32_comugess (v4sf, v4sf)
   29554      v2df __builtin_ia32_comugtpd (v2df, v2df)
   29555      v2df __builtin_ia32_comugtps (v2df, v2df)
   29556      v4sf __builtin_ia32_comugtsd (v4sf, v4sf)
   29557      v4sf __builtin_ia32_comugtss (v4sf, v4sf)
   29558      v2df __builtin_ia32_comulepd (v2df, v2df)
   29559      v2df __builtin_ia32_comuleps (v2df, v2df)
   29560      v4sf __builtin_ia32_comulesd (v4sf, v4sf)
   29561      v4sf __builtin_ia32_comuless (v4sf, v4sf)
   29562      v2df __builtin_ia32_comultpd (v2df, v2df)
   29563      v2df __builtin_ia32_comultps (v2df, v2df)
   29564      v4sf __builtin_ia32_comultsd (v4sf, v4sf)
   29565      v4sf __builtin_ia32_comultss (v4sf, v4sf)
   29566      v2df __builtin_ia32_comunepd (v2df, v2df)
   29567      v2df __builtin_ia32_comuneps (v2df, v2df)
   29568      v4sf __builtin_ia32_comunesd (v4sf, v4sf)
   29569      v4sf __builtin_ia32_comuness (v4sf, v4sf)
   29570      v2df __builtin_ia32_comunordpd (v2df, v2df)
   29571      v2df __builtin_ia32_comunordps (v2df, v2df)
   29572      v4sf __builtin_ia32_comunordsd (v4sf, v4sf)
   29573      v4sf __builtin_ia32_comunordss (v4sf, v4sf)
   29574      v2df __builtin_ia32_fmaddpd (v2df, v2df, v2df)
   29575      v4sf __builtin_ia32_fmaddps (v4sf, v4sf, v4sf)
   29576      v2df __builtin_ia32_fmaddsd (v2df, v2df, v2df)
   29577      v4sf __builtin_ia32_fmaddss (v4sf, v4sf, v4sf)
   29578      v2df __builtin_ia32_fmsubpd (v2df, v2df, v2df)
   29579      v4sf __builtin_ia32_fmsubps (v4sf, v4sf, v4sf)
   29580      v2df __builtin_ia32_fmsubsd (v2df, v2df, v2df)
   29581      v4sf __builtin_ia32_fmsubss (v4sf, v4sf, v4sf)
   29582      v2df __builtin_ia32_fnmaddpd (v2df, v2df, v2df)
   29583      v4sf __builtin_ia32_fnmaddps (v4sf, v4sf, v4sf)
   29584      v2df __builtin_ia32_fnmaddsd (v2df, v2df, v2df)
   29585      v4sf __builtin_ia32_fnmaddss (v4sf, v4sf, v4sf)
   29586      v2df __builtin_ia32_fnmsubpd (v2df, v2df, v2df)
   29587      v4sf __builtin_ia32_fnmsubps (v4sf, v4sf, v4sf)
   29588      v2df __builtin_ia32_fnmsubsd (v2df, v2df, v2df)
   29589      v4sf __builtin_ia32_fnmsubss (v4sf, v4sf, v4sf)
   29590      v2df __builtin_ia32_frczpd (v2df)
   29591      v4sf __builtin_ia32_frczps (v4sf)
   29592      v2df __builtin_ia32_frczsd (v2df, v2df)
   29593      v4sf __builtin_ia32_frczss (v4sf, v4sf)
   29594      v2di __builtin_ia32_pcmov (v2di, v2di, v2di)
   29595      v2di __builtin_ia32_pcmov_v2di (v2di, v2di, v2di)
   29596      v4si __builtin_ia32_pcmov_v4si (v4si, v4si, v4si)
   29597      v8hi __builtin_ia32_pcmov_v8hi (v8hi, v8hi, v8hi)
   29598      v16qi __builtin_ia32_pcmov_v16qi (v16qi, v16qi, v16qi)
   29599      v2df __builtin_ia32_pcmov_v2df (v2df, v2df, v2df)
   29600      v4sf __builtin_ia32_pcmov_v4sf (v4sf, v4sf, v4sf)
   29601      v16qi __builtin_ia32_pcomeqb (v16qi, v16qi)
   29602      v8hi __builtin_ia32_pcomeqw (v8hi, v8hi)
   29603      v4si __builtin_ia32_pcomeqd (v4si, v4si)
   29604      v2di __builtin_ia32_pcomeqq (v2di, v2di)
   29605      v16qi __builtin_ia32_pcomequb (v16qi, v16qi)
   29606      v4si __builtin_ia32_pcomequd (v4si, v4si)
   29607      v2di __builtin_ia32_pcomequq (v2di, v2di)
   29608      v8hi __builtin_ia32_pcomequw (v8hi, v8hi)
   29609      v8hi __builtin_ia32_pcomeqw (v8hi, v8hi)
   29610      v16qi __builtin_ia32_pcomfalseb (v16qi, v16qi)
   29611      v4si __builtin_ia32_pcomfalsed (v4si, v4si)
   29612      v2di __builtin_ia32_pcomfalseq (v2di, v2di)
   29613      v16qi __builtin_ia32_pcomfalseub (v16qi, v16qi)
   29614      v4si __builtin_ia32_pcomfalseud (v4si, v4si)
   29615      v2di __builtin_ia32_pcomfalseuq (v2di, v2di)
   29616      v8hi __builtin_ia32_pcomfalseuw (v8hi, v8hi)
   29617      v8hi __builtin_ia32_pcomfalsew (v8hi, v8hi)
   29618      v16qi __builtin_ia32_pcomgeb (v16qi, v16qi)
   29619      v4si __builtin_ia32_pcomged (v4si, v4si)
   29620      v2di __builtin_ia32_pcomgeq (v2di, v2di)
   29621      v16qi __builtin_ia32_pcomgeub (v16qi, v16qi)
   29622      v4si __builtin_ia32_pcomgeud (v4si, v4si)
   29623      v2di __builtin_ia32_pcomgeuq (v2di, v2di)
   29624      v8hi __builtin_ia32_pcomgeuw (v8hi, v8hi)
   29625      v8hi __builtin_ia32_pcomgew (v8hi, v8hi)
   29626      v16qi __builtin_ia32_pcomgtb (v16qi, v16qi)
   29627      v4si __builtin_ia32_pcomgtd (v4si, v4si)
   29628      v2di __builtin_ia32_pcomgtq (v2di, v2di)
   29629      v16qi __builtin_ia32_pcomgtub (v16qi, v16qi)
   29630      v4si __builtin_ia32_pcomgtud (v4si, v4si)
   29631      v2di __builtin_ia32_pcomgtuq (v2di, v2di)
   29632      v8hi __builtin_ia32_pcomgtuw (v8hi, v8hi)
   29633      v8hi __builtin_ia32_pcomgtw (v8hi, v8hi)
   29634      v16qi __builtin_ia32_pcomleb (v16qi, v16qi)
   29635      v4si __builtin_ia32_pcomled (v4si, v4si)
   29636      v2di __builtin_ia32_pcomleq (v2di, v2di)
   29637      v16qi __builtin_ia32_pcomleub (v16qi, v16qi)
   29638      v4si __builtin_ia32_pcomleud (v4si, v4si)
   29639      v2di __builtin_ia32_pcomleuq (v2di, v2di)
   29640      v8hi __builtin_ia32_pcomleuw (v8hi, v8hi)
   29641      v8hi __builtin_ia32_pcomlew (v8hi, v8hi)
   29642      v16qi __builtin_ia32_pcomltb (v16qi, v16qi)
   29643      v4si __builtin_ia32_pcomltd (v4si, v4si)
   29644      v2di __builtin_ia32_pcomltq (v2di, v2di)
   29645      v16qi __builtin_ia32_pcomltub (v16qi, v16qi)
   29646      v4si __builtin_ia32_pcomltud (v4si, v4si)
   29647      v2di __builtin_ia32_pcomltuq (v2di, v2di)
   29648      v8hi __builtin_ia32_pcomltuw (v8hi, v8hi)
   29649      v8hi __builtin_ia32_pcomltw (v8hi, v8hi)
   29650      v16qi __builtin_ia32_pcomneb (v16qi, v16qi)
   29651      v4si __builtin_ia32_pcomned (v4si, v4si)
   29652      v2di __builtin_ia32_pcomneq (v2di, v2di)
   29653      v16qi __builtin_ia32_pcomneub (v16qi, v16qi)
   29654      v4si __builtin_ia32_pcomneud (v4si, v4si)
   29655      v2di __builtin_ia32_pcomneuq (v2di, v2di)
   29656      v8hi __builtin_ia32_pcomneuw (v8hi, v8hi)
   29657      v8hi __builtin_ia32_pcomnew (v8hi, v8hi)
   29658      v16qi __builtin_ia32_pcomtrueb (v16qi, v16qi)
   29659      v4si __builtin_ia32_pcomtrued (v4si, v4si)
   29660      v2di __builtin_ia32_pcomtrueq (v2di, v2di)
   29661      v16qi __builtin_ia32_pcomtrueub (v16qi, v16qi)
   29662      v4si __builtin_ia32_pcomtrueud (v4si, v4si)
   29663      v2di __builtin_ia32_pcomtrueuq (v2di, v2di)
   29664      v8hi __builtin_ia32_pcomtrueuw (v8hi, v8hi)
   29665      v8hi __builtin_ia32_pcomtruew (v8hi, v8hi)
   29666      v4df __builtin_ia32_permpd (v2df, v2df, v16qi)
   29667      v4sf __builtin_ia32_permps (v4sf, v4sf, v16qi)
   29668      v4si __builtin_ia32_phaddbd (v16qi)
   29669      v2di __builtin_ia32_phaddbq (v16qi)
   29670      v8hi __builtin_ia32_phaddbw (v16qi)
   29671      v2di __builtin_ia32_phadddq (v4si)
   29672      v4si __builtin_ia32_phaddubd (v16qi)
   29673      v2di __builtin_ia32_phaddubq (v16qi)
   29674      v8hi __builtin_ia32_phaddubw (v16qi)
   29675      v2di __builtin_ia32_phaddudq (v4si)
   29676      v4si __builtin_ia32_phadduwd (v8hi)
   29677      v2di __builtin_ia32_phadduwq (v8hi)
   29678      v4si __builtin_ia32_phaddwd (v8hi)
   29679      v2di __builtin_ia32_phaddwq (v8hi)
   29680      v8hi __builtin_ia32_phsubbw (v16qi)
   29681      v2di __builtin_ia32_phsubdq (v4si)
   29682      v4si __builtin_ia32_phsubwd (v8hi)
   29683      v4si __builtin_ia32_pmacsdd (v4si, v4si, v4si)
   29684      v2di __builtin_ia32_pmacsdqh (v4si, v4si, v2di)
   29685      v2di __builtin_ia32_pmacsdql (v4si, v4si, v2di)
   29686      v4si __builtin_ia32_pmacssdd (v4si, v4si, v4si)
   29687      v2di __builtin_ia32_pmacssdqh (v4si, v4si, v2di)
   29688      v2di __builtin_ia32_pmacssdql (v4si, v4si, v2di)
   29689      v4si __builtin_ia32_pmacsswd (v8hi, v8hi, v4si)
   29690      v8hi __builtin_ia32_pmacssww (v8hi, v8hi, v8hi)
   29691      v4si __builtin_ia32_pmacswd (v8hi, v8hi, v4si)
   29692      v8hi __builtin_ia32_pmacsww (v8hi, v8hi, v8hi)
   29693      v4si __builtin_ia32_pmadcsswd (v8hi, v8hi, v4si)
   29694      v4si __builtin_ia32_pmadcswd (v8hi, v8hi, v4si)
   29695      v16qi __builtin_ia32_pperm (v16qi, v16qi, v16qi)
   29696      v16qi __builtin_ia32_protb (v16qi, v16qi)
   29697      v4si __builtin_ia32_protd (v4si, v4si)
   29698      v2di __builtin_ia32_protq (v2di, v2di)
   29699      v8hi __builtin_ia32_protw (v8hi, v8hi)
   29700      v16qi __builtin_ia32_pshab (v16qi, v16qi)
   29701      v4si __builtin_ia32_pshad (v4si, v4si)
   29702      v2di __builtin_ia32_pshaq (v2di, v2di)
   29703      v8hi __builtin_ia32_pshaw (v8hi, v8hi)
   29704      v16qi __builtin_ia32_pshlb (v16qi, v16qi)
   29705      v4si __builtin_ia32_pshld (v4si, v4si)
   29706      v2di __builtin_ia32_pshlq (v2di, v2di)
   29707      v8hi __builtin_ia32_pshlw (v8hi, v8hi)
   29708 
   29709  The following builtin-in functions are available when `-msse5' is
   29710 used.  The second argument must be an integer constant and generate the
   29711 machine instruction that is part of the name with the `_imm' suffix
   29712 removed.
   29713 
   29714      v16qi __builtin_ia32_protb_imm (v16qi, int)
   29715      v4si __builtin_ia32_protd_imm (v4si, int)
   29716      v2di __builtin_ia32_protq_imm (v2di, int)
   29717      v8hi __builtin_ia32_protw_imm (v8hi, int)
   29718 
   29719  The following built-in functions are available when `-m3dnow' is used.
   29720 All of them generate the machine instruction that is part of the name.
   29721 
   29722      void __builtin_ia32_femms (void)
   29723      v8qi __builtin_ia32_pavgusb (v8qi, v8qi)
   29724      v2si __builtin_ia32_pf2id (v2sf)
   29725      v2sf __builtin_ia32_pfacc (v2sf, v2sf)
   29726      v2sf __builtin_ia32_pfadd (v2sf, v2sf)
   29727      v2si __builtin_ia32_pfcmpeq (v2sf, v2sf)
   29728      v2si __builtin_ia32_pfcmpge (v2sf, v2sf)
   29729      v2si __builtin_ia32_pfcmpgt (v2sf, v2sf)
   29730      v2sf __builtin_ia32_pfmax (v2sf, v2sf)
   29731      v2sf __builtin_ia32_pfmin (v2sf, v2sf)
   29732      v2sf __builtin_ia32_pfmul (v2sf, v2sf)
   29733      v2sf __builtin_ia32_pfrcp (v2sf)
   29734      v2sf __builtin_ia32_pfrcpit1 (v2sf, v2sf)
   29735      v2sf __builtin_ia32_pfrcpit2 (v2sf, v2sf)
   29736      v2sf __builtin_ia32_pfrsqrt (v2sf)
   29737      v2sf __builtin_ia32_pfrsqrtit1 (v2sf, v2sf)
   29738      v2sf __builtin_ia32_pfsub (v2sf, v2sf)
   29739      v2sf __builtin_ia32_pfsubr (v2sf, v2sf)
   29740      v2sf __builtin_ia32_pi2fd (v2si)
   29741      v4hi __builtin_ia32_pmulhrw (v4hi, v4hi)
   29742 
   29743  The following built-in functions are available when both `-m3dnow' and
   29744 `-march=athlon' are used.  All of them generate the machine instruction
   29745 that is part of the name.
   29746 
   29747      v2si __builtin_ia32_pf2iw (v2sf)
   29748      v2sf __builtin_ia32_pfnacc (v2sf, v2sf)
   29749      v2sf __builtin_ia32_pfpnacc (v2sf, v2sf)
   29750      v2sf __builtin_ia32_pi2fw (v2si)
   29751      v2sf __builtin_ia32_pswapdsf (v2sf)
   29752      v2si __builtin_ia32_pswapdsi (v2si)
   29753 
   29754 
   29755 File: gcc.info,  Node: MIPS DSP Built-in Functions,  Next: MIPS Paired-Single Support,  Prev: X86 Built-in Functions,  Up: Target Builtins
   29756 
   29757 5.50.7 MIPS DSP Built-in Functions
   29758 ----------------------------------
   29759 
   29760 The MIPS DSP Application-Specific Extension (ASE) includes new
   29761 instructions that are designed to improve the performance of DSP and
   29762 media applications.  It provides instructions that operate on packed
   29763 8-bit/16-bit integer data, Q7, Q15 and Q31 fractional data.
   29764 
   29765  GCC supports MIPS DSP operations using both the generic vector
   29766 extensions (*note Vector Extensions::) and a collection of
   29767 MIPS-specific built-in functions.  Both kinds of support are enabled by
   29768 the `-mdsp' command-line option.
   29769 
   29770  Revision 2 of the ASE was introduced in the second half of 2006.  This
   29771 revision adds extra instructions to the original ASE, but is otherwise
   29772 backwards-compatible with it.  You can select revision 2 using the
   29773 command-line option `-mdspr2'; this option implies `-mdsp'.
   29774 
   29775  At present, GCC only provides support for operations on 32-bit
   29776 vectors.  The vector type associated with 8-bit integer data is usually
   29777 called `v4i8', the vector type associated with Q7 is usually called
   29778 `v4q7', the vector type associated with 16-bit integer data is usually
   29779 called `v2i16', and the vector type associated with Q15 is usually
   29780 called `v2q15'.  They can be defined in C as follows:
   29781 
   29782      typedef signed char v4i8 __attribute__ ((vector_size(4)));
   29783      typedef signed char v4q7 __attribute__ ((vector_size(4)));
   29784      typedef short v2i16 __attribute__ ((vector_size(4)));
   29785      typedef short v2q15 __attribute__ ((vector_size(4)));
   29786 
   29787  `v4i8', `v4q7', `v2i16' and `v2q15' values are initialized in the same
   29788 way as aggregates.  For example:
   29789 
   29790      v4i8 a = {1, 2, 3, 4};
   29791      v4i8 b;
   29792      b = (v4i8) {5, 6, 7, 8};
   29793 
   29794      v2q15 c = {0x0fcb, 0x3a75};
   29795      v2q15 d;
   29796      d = (v2q15) {0.1234 * 0x1.0p15, 0.4567 * 0x1.0p15};
   29797 
   29798  _Note:_ The CPU's endianness determines the order in which values are
   29799 packed.  On little-endian targets, the first value is the least
   29800 significant and the last value is the most significant.  The opposite
   29801 order applies to big-endian targets.  For example, the code above will
   29802 set the lowest byte of `a' to `1' on little-endian targets and `4' on
   29803 big-endian targets.
   29804 
   29805  _Note:_ Q7, Q15 and Q31 values must be initialized with their integer
   29806 representation.  As shown in this example, the integer representation
   29807 of a Q7 value can be obtained by multiplying the fractional value by
   29808 `0x1.0p7'.  The equivalent for Q15 values is to multiply by `0x1.0p15'.
   29809 The equivalent for Q31 values is to multiply by `0x1.0p31'.
   29810 
   29811  The table below lists the `v4i8' and `v2q15' operations for which
   29812 hardware support exists.  `a' and `b' are `v4i8' values, and `c' and
   29813 `d' are `v2q15' values.
   29814 
   29815 C code                               MIPS instruction
   29816 `a + b'                              `addu.qb'
   29817 `c + d'                              `addq.ph'
   29818 `a - b'                              `subu.qb'
   29819 `c - d'                              `subq.ph'
   29820 
   29821  The table below lists the `v2i16' operation for which hardware support
   29822 exists for the DSP ASE REV 2.  `e' and `f' are `v2i16' values.
   29823 
   29824 C code                               MIPS instruction
   29825 `e * f'                              `mul.ph'
   29826 
   29827  It is easier to describe the DSP built-in functions if we first define
   29828 the following types:
   29829 
   29830      typedef int q31;
   29831      typedef int i32;
   29832      typedef unsigned int ui32;
   29833      typedef long long a64;
   29834 
   29835  `q31' and `i32' are actually the same as `int', but we use `q31' to
   29836 indicate a Q31 fractional value and `i32' to indicate a 32-bit integer
   29837 value.  Similarly, `a64' is the same as `long long', but we use `a64'
   29838 to indicate values that will be placed in one of the four DSP
   29839 accumulators (`$ac0', `$ac1', `$ac2' or `$ac3').
   29840 
   29841  Also, some built-in functions prefer or require immediate numbers as
   29842 parameters, because the corresponding DSP instructions accept both
   29843 immediate numbers and register operands, or accept immediate numbers
   29844 only.  The immediate parameters are listed as follows.
   29845 
   29846      imm0_3: 0 to 3.
   29847      imm0_7: 0 to 7.
   29848      imm0_15: 0 to 15.
   29849      imm0_31: 0 to 31.
   29850      imm0_63: 0 to 63.
   29851      imm0_255: 0 to 255.
   29852      imm_n32_31: -32 to 31.
   29853      imm_n512_511: -512 to 511.
   29854 
   29855  The following built-in functions map directly to a particular MIPS DSP
   29856 instruction.  Please refer to the architecture specification for
   29857 details on what each instruction does.
   29858 
   29859      v2q15 __builtin_mips_addq_ph (v2q15, v2q15)
   29860      v2q15 __builtin_mips_addq_s_ph (v2q15, v2q15)
   29861      q31 __builtin_mips_addq_s_w (q31, q31)
   29862      v4i8 __builtin_mips_addu_qb (v4i8, v4i8)
   29863      v4i8 __builtin_mips_addu_s_qb (v4i8, v4i8)
   29864      v2q15 __builtin_mips_subq_ph (v2q15, v2q15)
   29865      v2q15 __builtin_mips_subq_s_ph (v2q15, v2q15)
   29866      q31 __builtin_mips_subq_s_w (q31, q31)
   29867      v4i8 __builtin_mips_subu_qb (v4i8, v4i8)
   29868      v4i8 __builtin_mips_subu_s_qb (v4i8, v4i8)
   29869      i32 __builtin_mips_addsc (i32, i32)
   29870      i32 __builtin_mips_addwc (i32, i32)
   29871      i32 __builtin_mips_modsub (i32, i32)
   29872      i32 __builtin_mips_raddu_w_qb (v4i8)
   29873      v2q15 __builtin_mips_absq_s_ph (v2q15)
   29874      q31 __builtin_mips_absq_s_w (q31)
   29875      v4i8 __builtin_mips_precrq_qb_ph (v2q15, v2q15)
   29876      v2q15 __builtin_mips_precrq_ph_w (q31, q31)
   29877      v2q15 __builtin_mips_precrq_rs_ph_w (q31, q31)
   29878      v4i8 __builtin_mips_precrqu_s_qb_ph (v2q15, v2q15)
   29879      q31 __builtin_mips_preceq_w_phl (v2q15)
   29880      q31 __builtin_mips_preceq_w_phr (v2q15)
   29881      v2q15 __builtin_mips_precequ_ph_qbl (v4i8)
   29882      v2q15 __builtin_mips_precequ_ph_qbr (v4i8)
   29883      v2q15 __builtin_mips_precequ_ph_qbla (v4i8)
   29884      v2q15 __builtin_mips_precequ_ph_qbra (v4i8)
   29885      v2q15 __builtin_mips_preceu_ph_qbl (v4i8)
   29886      v2q15 __builtin_mips_preceu_ph_qbr (v4i8)
   29887      v2q15 __builtin_mips_preceu_ph_qbla (v4i8)
   29888      v2q15 __builtin_mips_preceu_ph_qbra (v4i8)
   29889      v4i8 __builtin_mips_shll_qb (v4i8, imm0_7)
   29890      v4i8 __builtin_mips_shll_qb (v4i8, i32)
   29891      v2q15 __builtin_mips_shll_ph (v2q15, imm0_15)
   29892      v2q15 __builtin_mips_shll_ph (v2q15, i32)
   29893      v2q15 __builtin_mips_shll_s_ph (v2q15, imm0_15)
   29894      v2q15 __builtin_mips_shll_s_ph (v2q15, i32)
   29895      q31 __builtin_mips_shll_s_w (q31, imm0_31)
   29896      q31 __builtin_mips_shll_s_w (q31, i32)
   29897      v4i8 __builtin_mips_shrl_qb (v4i8, imm0_7)
   29898      v4i8 __builtin_mips_shrl_qb (v4i8, i32)
   29899      v2q15 __builtin_mips_shra_ph (v2q15, imm0_15)
   29900      v2q15 __builtin_mips_shra_ph (v2q15, i32)
   29901      v2q15 __builtin_mips_shra_r_ph (v2q15, imm0_15)
   29902      v2q15 __builtin_mips_shra_r_ph (v2q15, i32)
   29903      q31 __builtin_mips_shra_r_w (q31, imm0_31)
   29904      q31 __builtin_mips_shra_r_w (q31, i32)
   29905      v2q15 __builtin_mips_muleu_s_ph_qbl (v4i8, v2q15)
   29906      v2q15 __builtin_mips_muleu_s_ph_qbr (v4i8, v2q15)
   29907      v2q15 __builtin_mips_mulq_rs_ph (v2q15, v2q15)
   29908      q31 __builtin_mips_muleq_s_w_phl (v2q15, v2q15)
   29909      q31 __builtin_mips_muleq_s_w_phr (v2q15, v2q15)
   29910      a64 __builtin_mips_dpau_h_qbl (a64, v4i8, v4i8)
   29911      a64 __builtin_mips_dpau_h_qbr (a64, v4i8, v4i8)
   29912      a64 __builtin_mips_dpsu_h_qbl (a64, v4i8, v4i8)
   29913      a64 __builtin_mips_dpsu_h_qbr (a64, v4i8, v4i8)
   29914      a64 __builtin_mips_dpaq_s_w_ph (a64, v2q15, v2q15)
   29915      a64 __builtin_mips_dpaq_sa_l_w (a64, q31, q31)
   29916      a64 __builtin_mips_dpsq_s_w_ph (a64, v2q15, v2q15)
   29917      a64 __builtin_mips_dpsq_sa_l_w (a64, q31, q31)
   29918      a64 __builtin_mips_mulsaq_s_w_ph (a64, v2q15, v2q15)
   29919      a64 __builtin_mips_maq_s_w_phl (a64, v2q15, v2q15)
   29920      a64 __builtin_mips_maq_s_w_phr (a64, v2q15, v2q15)
   29921      a64 __builtin_mips_maq_sa_w_phl (a64, v2q15, v2q15)
   29922      a64 __builtin_mips_maq_sa_w_phr (a64, v2q15, v2q15)
   29923      i32 __builtin_mips_bitrev (i32)
   29924      i32 __builtin_mips_insv (i32, i32)
   29925      v4i8 __builtin_mips_repl_qb (imm0_255)
   29926      v4i8 __builtin_mips_repl_qb (i32)
   29927      v2q15 __builtin_mips_repl_ph (imm_n512_511)
   29928      v2q15 __builtin_mips_repl_ph (i32)
   29929      void __builtin_mips_cmpu_eq_qb (v4i8, v4i8)
   29930      void __builtin_mips_cmpu_lt_qb (v4i8, v4i8)
   29931      void __builtin_mips_cmpu_le_qb (v4i8, v4i8)
   29932      i32 __builtin_mips_cmpgu_eq_qb (v4i8, v4i8)
   29933      i32 __builtin_mips_cmpgu_lt_qb (v4i8, v4i8)
   29934      i32 __builtin_mips_cmpgu_le_qb (v4i8, v4i8)
   29935      void __builtin_mips_cmp_eq_ph (v2q15, v2q15)
   29936      void __builtin_mips_cmp_lt_ph (v2q15, v2q15)
   29937      void __builtin_mips_cmp_le_ph (v2q15, v2q15)
   29938      v4i8 __builtin_mips_pick_qb (v4i8, v4i8)
   29939      v2q15 __builtin_mips_pick_ph (v2q15, v2q15)
   29940      v2q15 __builtin_mips_packrl_ph (v2q15, v2q15)
   29941      i32 __builtin_mips_extr_w (a64, imm0_31)
   29942      i32 __builtin_mips_extr_w (a64, i32)
   29943      i32 __builtin_mips_extr_r_w (a64, imm0_31)
   29944      i32 __builtin_mips_extr_s_h (a64, i32)
   29945      i32 __builtin_mips_extr_rs_w (a64, imm0_31)
   29946      i32 __builtin_mips_extr_rs_w (a64, i32)
   29947      i32 __builtin_mips_extr_s_h (a64, imm0_31)
   29948      i32 __builtin_mips_extr_r_w (a64, i32)
   29949      i32 __builtin_mips_extp (a64, imm0_31)
   29950      i32 __builtin_mips_extp (a64, i32)
   29951      i32 __builtin_mips_extpdp (a64, imm0_31)
   29952      i32 __builtin_mips_extpdp (a64, i32)
   29953      a64 __builtin_mips_shilo (a64, imm_n32_31)
   29954      a64 __builtin_mips_shilo (a64, i32)
   29955      a64 __builtin_mips_mthlip (a64, i32)
   29956      void __builtin_mips_wrdsp (i32, imm0_63)
   29957      i32 __builtin_mips_rddsp (imm0_63)
   29958      i32 __builtin_mips_lbux (void *, i32)
   29959      i32 __builtin_mips_lhx (void *, i32)
   29960      i32 __builtin_mips_lwx (void *, i32)
   29961      i32 __builtin_mips_bposge32 (void)
   29962 
   29963  The following built-in functions map directly to a particular MIPS DSP
   29964 REV 2 instruction.  Please refer to the architecture specification for
   29965 details on what each instruction does.
   29966 
   29967      v4q7 __builtin_mips_absq_s_qb (v4q7);
   29968      v2i16 __builtin_mips_addu_ph (v2i16, v2i16);
   29969      v2i16 __builtin_mips_addu_s_ph (v2i16, v2i16);
   29970      v4i8 __builtin_mips_adduh_qb (v4i8, v4i8);
   29971      v4i8 __builtin_mips_adduh_r_qb (v4i8, v4i8);
   29972      i32 __builtin_mips_append (i32, i32, imm0_31);
   29973      i32 __builtin_mips_balign (i32, i32, imm0_3);
   29974      i32 __builtin_mips_cmpgdu_eq_qb (v4i8, v4i8);
   29975      i32 __builtin_mips_cmpgdu_lt_qb (v4i8, v4i8);
   29976      i32 __builtin_mips_cmpgdu_le_qb (v4i8, v4i8);
   29977      a64 __builtin_mips_dpa_w_ph (a64, v2i16, v2i16);
   29978      a64 __builtin_mips_dps_w_ph (a64, v2i16, v2i16);
   29979      a64 __builtin_mips_madd (a64, i32, i32);
   29980      a64 __builtin_mips_maddu (a64, ui32, ui32);
   29981      a64 __builtin_mips_msub (a64, i32, i32);
   29982      a64 __builtin_mips_msubu (a64, ui32, ui32);
   29983      v2i16 __builtin_mips_mul_ph (v2i16, v2i16);
   29984      v2i16 __builtin_mips_mul_s_ph (v2i16, v2i16);
   29985      q31 __builtin_mips_mulq_rs_w (q31, q31);
   29986      v2q15 __builtin_mips_mulq_s_ph (v2q15, v2q15);
   29987      q31 __builtin_mips_mulq_s_w (q31, q31);
   29988      a64 __builtin_mips_mulsa_w_ph (a64, v2i16, v2i16);
   29989      a64 __builtin_mips_mult (i32, i32);
   29990      a64 __builtin_mips_multu (ui32, ui32);
   29991      v4i8 __builtin_mips_precr_qb_ph (v2i16, v2i16);
   29992      v2i16 __builtin_mips_precr_sra_ph_w (i32, i32, imm0_31);
   29993      v2i16 __builtin_mips_precr_sra_r_ph_w (i32, i32, imm0_31);
   29994      i32 __builtin_mips_prepend (i32, i32, imm0_31);
   29995      v4i8 __builtin_mips_shra_qb (v4i8, imm0_7);
   29996      v4i8 __builtin_mips_shra_r_qb (v4i8, imm0_7);
   29997      v4i8 __builtin_mips_shra_qb (v4i8, i32);
   29998      v4i8 __builtin_mips_shra_r_qb (v4i8, i32);
   29999      v2i16 __builtin_mips_shrl_ph (v2i16, imm0_15);
   30000      v2i16 __builtin_mips_shrl_ph (v2i16, i32);
   30001      v2i16 __builtin_mips_subu_ph (v2i16, v2i16);
   30002      v2i16 __builtin_mips_subu_s_ph (v2i16, v2i16);
   30003      v4i8 __builtin_mips_subuh_qb (v4i8, v4i8);
   30004      v4i8 __builtin_mips_subuh_r_qb (v4i8, v4i8);
   30005      v2q15 __builtin_mips_addqh_ph (v2q15, v2q15);
   30006      v2q15 __builtin_mips_addqh_r_ph (v2q15, v2q15);
   30007      q31 __builtin_mips_addqh_w (q31, q31);
   30008      q31 __builtin_mips_addqh_r_w (q31, q31);
   30009      v2q15 __builtin_mips_subqh_ph (v2q15, v2q15);
   30010      v2q15 __builtin_mips_subqh_r_ph (v2q15, v2q15);
   30011      q31 __builtin_mips_subqh_w (q31, q31);
   30012      q31 __builtin_mips_subqh_r_w (q31, q31);
   30013      a64 __builtin_mips_dpax_w_ph (a64, v2i16, v2i16);
   30014      a64 __builtin_mips_dpsx_w_ph (a64, v2i16, v2i16);
   30015      a64 __builtin_mips_dpaqx_s_w_ph (a64, v2q15, v2q15);
   30016      a64 __builtin_mips_dpaqx_sa_w_ph (a64, v2q15, v2q15);
   30017      a64 __builtin_mips_dpsqx_s_w_ph (a64, v2q15, v2q15);
   30018      a64 __builtin_mips_dpsqx_sa_w_ph (a64, v2q15, v2q15);
   30019 
   30020 
   30021 File: gcc.info,  Node: MIPS Paired-Single Support,  Next: PowerPC AltiVec Built-in Functions,  Prev: MIPS DSP Built-in Functions,  Up: Target Builtins
   30022 
   30023 5.50.8 MIPS Paired-Single Support
   30024 ---------------------------------
   30025 
   30026 The MIPS64 architecture includes a number of instructions that operate
   30027 on pairs of single-precision floating-point values.  Each pair is
   30028 packed into a 64-bit floating-point register, with one element being
   30029 designated the "upper half" and the other being designated the "lower
   30030 half".
   30031 
   30032  GCC supports paired-single operations using both the generic vector
   30033 extensions (*note Vector Extensions::) and a collection of
   30034 MIPS-specific built-in functions.  Both kinds of support are enabled by
   30035 the `-mpaired-single' command-line option.
   30036 
   30037  The vector type associated with paired-single values is usually called
   30038 `v2sf'.  It can be defined in C as follows:
   30039 
   30040      typedef float v2sf __attribute__ ((vector_size (8)));
   30041 
   30042  `v2sf' values are initialized in the same way as aggregates.  For
   30043 example:
   30044 
   30045      v2sf a = {1.5, 9.1};
   30046      v2sf b;
   30047      float e, f;
   30048      b = (v2sf) {e, f};
   30049 
   30050  _Note:_ The CPU's endianness determines which value is stored in the
   30051 upper half of a register and which value is stored in the lower half.
   30052 On little-endian targets, the first value is the lower one and the
   30053 second value is the upper one.  The opposite order applies to
   30054 big-endian targets.  For example, the code above will set the lower
   30055 half of `a' to `1.5' on little-endian targets and `9.1' on big-endian
   30056 targets.
   30057 
   30058 * Menu:
   30059 
   30060 * Paired-Single Arithmetic::
   30061 * Paired-Single Built-in Functions::
   30062 * MIPS-3D Built-in Functions::
   30063 
   30064 
   30065 File: gcc.info,  Node: Paired-Single Arithmetic,  Next: Paired-Single Built-in Functions,  Up: MIPS Paired-Single Support
   30066 
   30067 5.50.8.1 Paired-Single Arithmetic
   30068 .................................
   30069 
   30070 The table below lists the `v2sf' operations for which hardware support
   30071 exists.  `a', `b' and `c' are `v2sf' values and `x' is an integral
   30072 value.
   30073 
   30074 C code                               MIPS instruction
   30075 `a + b'                              `add.ps'
   30076 `a - b'                              `sub.ps'
   30077 `-a'                                 `neg.ps'
   30078 `a * b'                              `mul.ps'
   30079 `a * b + c'                          `madd.ps'
   30080 `a * b - c'                          `msub.ps'
   30081 `-(a * b + c)'                       `nmadd.ps'
   30082 `-(a * b - c)'                       `nmsub.ps'
   30083 `x ? a : b'                          `movn.ps'/`movz.ps'
   30084 
   30085  Note that the multiply-accumulate instructions can be disabled using
   30086 the command-line option `-mno-fused-madd'.
   30087 
   30088 
   30089 File: gcc.info,  Node: Paired-Single Built-in Functions,  Next: MIPS-3D Built-in Functions,  Prev: Paired-Single Arithmetic,  Up: MIPS Paired-Single Support
   30090 
   30091 5.50.8.2 Paired-Single Built-in Functions
   30092 .........................................
   30093 
   30094 The following paired-single functions map directly to a particular MIPS
   30095 instruction.  Please refer to the architecture specification for
   30096 details on what each instruction does.
   30097 
   30098 `v2sf __builtin_mips_pll_ps (v2sf, v2sf)'
   30099      Pair lower lower (`pll.ps').
   30100 
   30101 `v2sf __builtin_mips_pul_ps (v2sf, v2sf)'
   30102      Pair upper lower (`pul.ps').
   30103 
   30104 `v2sf __builtin_mips_plu_ps (v2sf, v2sf)'
   30105      Pair lower upper (`plu.ps').
   30106 
   30107 `v2sf __builtin_mips_puu_ps (v2sf, v2sf)'
   30108      Pair upper upper (`puu.ps').
   30109 
   30110 `v2sf __builtin_mips_cvt_ps_s (float, float)'
   30111      Convert pair to paired single (`cvt.ps.s').
   30112 
   30113 `float __builtin_mips_cvt_s_pl (v2sf)'
   30114      Convert pair lower to single (`cvt.s.pl').
   30115 
   30116 `float __builtin_mips_cvt_s_pu (v2sf)'
   30117      Convert pair upper to single (`cvt.s.pu').
   30118 
   30119 `v2sf __builtin_mips_abs_ps (v2sf)'
   30120      Absolute value (`abs.ps').
   30121 
   30122 `v2sf __builtin_mips_alnv_ps (v2sf, v2sf, int)'
   30123      Align variable (`alnv.ps').
   30124 
   30125      _Note:_ The value of the third parameter must be 0 or 4 modulo 8,
   30126      otherwise the result will be unpredictable.  Please read the
   30127      instruction description for details.
   30128 
   30129  The following multi-instruction functions are also available.  In each
   30130 case, COND can be any of the 16 floating-point conditions: `f', `un',
   30131 `eq', `ueq', `olt', `ult', `ole', `ule', `sf', `ngle', `seq', `ngl',
   30132 `lt', `nge', `le' or `ngt'.
   30133 
   30134 `v2sf __builtin_mips_movt_c_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)'
   30135 `v2sf __builtin_mips_movf_c_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)'
   30136      Conditional move based on floating point comparison (`c.COND.ps',
   30137      `movt.ps'/`movf.ps').
   30138 
   30139      The `movt' functions return the value X computed by:
   30140 
   30141           c.COND.ps CC,A,B
   30142           mov.ps X,C
   30143           movt.ps X,D,CC
   30144 
   30145      The `movf' functions are similar but use `movf.ps' instead of
   30146      `movt.ps'.
   30147 
   30148 `int __builtin_mips_upper_c_COND_ps (v2sf A, v2sf B)'
   30149 `int __builtin_mips_lower_c_COND_ps (v2sf A, v2sf B)'
   30150      Comparison of two paired-single values (`c.COND.ps',
   30151      `bc1t'/`bc1f').
   30152 
   30153      These functions compare A and B using `c.COND.ps' and return
   30154      either the upper or lower half of the result.  For example:
   30155 
   30156           v2sf a, b;
   30157           if (__builtin_mips_upper_c_eq_ps (a, b))
   30158             upper_halves_are_equal ();
   30159           else
   30160             upper_halves_are_unequal ();
   30161 
   30162           if (__builtin_mips_lower_c_eq_ps (a, b))
   30163             lower_halves_are_equal ();
   30164           else
   30165             lower_halves_are_unequal ();
   30166 
   30167 
   30168 File: gcc.info,  Node: MIPS-3D Built-in Functions,  Prev: Paired-Single Built-in Functions,  Up: MIPS Paired-Single Support
   30169 
   30170 5.50.8.3 MIPS-3D Built-in Functions
   30171 ...................................
   30172 
   30173 The MIPS-3D Application-Specific Extension (ASE) includes additional
   30174 paired-single instructions that are designed to improve the performance
   30175 of 3D graphics operations.  Support for these instructions is controlled
   30176 by the `-mips3d' command-line option.
   30177 
   30178  The functions listed below map directly to a particular MIPS-3D
   30179 instruction.  Please refer to the architecture specification for more
   30180 details on what each instruction does.
   30181 
   30182 `v2sf __builtin_mips_addr_ps (v2sf, v2sf)'
   30183      Reduction add (`addr.ps').
   30184 
   30185 `v2sf __builtin_mips_mulr_ps (v2sf, v2sf)'
   30186      Reduction multiply (`mulr.ps').
   30187 
   30188 `v2sf __builtin_mips_cvt_pw_ps (v2sf)'
   30189      Convert paired single to paired word (`cvt.pw.ps').
   30190 
   30191 `v2sf __builtin_mips_cvt_ps_pw (v2sf)'
   30192      Convert paired word to paired single (`cvt.ps.pw').
   30193 
   30194 `float __builtin_mips_recip1_s (float)'
   30195 `double __builtin_mips_recip1_d (double)'
   30196 `v2sf __builtin_mips_recip1_ps (v2sf)'
   30197      Reduced precision reciprocal (sequence step 1) (`recip1.FMT').
   30198 
   30199 `float __builtin_mips_recip2_s (float, float)'
   30200 `double __builtin_mips_recip2_d (double, double)'
   30201 `v2sf __builtin_mips_recip2_ps (v2sf, v2sf)'
   30202      Reduced precision reciprocal (sequence step 2) (`recip2.FMT').
   30203 
   30204 `float __builtin_mips_rsqrt1_s (float)'
   30205 `double __builtin_mips_rsqrt1_d (double)'
   30206 `v2sf __builtin_mips_rsqrt1_ps (v2sf)'
   30207      Reduced precision reciprocal square root (sequence step 1)
   30208      (`rsqrt1.FMT').
   30209 
   30210 `float __builtin_mips_rsqrt2_s (float, float)'
   30211 `double __builtin_mips_rsqrt2_d (double, double)'
   30212 `v2sf __builtin_mips_rsqrt2_ps (v2sf, v2sf)'
   30213      Reduced precision reciprocal square root (sequence step 2)
   30214      (`rsqrt2.FMT').
   30215 
   30216  The following multi-instruction functions are also available.  In each
   30217 case, COND can be any of the 16 floating-point conditions: `f', `un',
   30218 `eq', `ueq', `olt', `ult', `ole', `ule', `sf', `ngle', `seq', `ngl',
   30219 `lt', `nge', `le' or `ngt'.
   30220 
   30221 `int __builtin_mips_cabs_COND_s (float A, float B)'
   30222 `int __builtin_mips_cabs_COND_d (double A, double B)'
   30223      Absolute comparison of two scalar values (`cabs.COND.FMT',
   30224      `bc1t'/`bc1f').
   30225 
   30226      These functions compare A and B using `cabs.COND.s' or
   30227      `cabs.COND.d' and return the result as a boolean value.  For
   30228      example:
   30229 
   30230           float a, b;
   30231           if (__builtin_mips_cabs_eq_s (a, b))
   30232             true ();
   30233           else
   30234             false ();
   30235 
   30236 `int __builtin_mips_upper_cabs_COND_ps (v2sf A, v2sf B)'
   30237 `int __builtin_mips_lower_cabs_COND_ps (v2sf A, v2sf B)'
   30238      Absolute comparison of two paired-single values (`cabs.COND.ps',
   30239      `bc1t'/`bc1f').
   30240 
   30241      These functions compare A and B using `cabs.COND.ps' and return
   30242      either the upper or lower half of the result.  For example:
   30243 
   30244           v2sf a, b;
   30245           if (__builtin_mips_upper_cabs_eq_ps (a, b))
   30246             upper_halves_are_equal ();
   30247           else
   30248             upper_halves_are_unequal ();
   30249 
   30250           if (__builtin_mips_lower_cabs_eq_ps (a, b))
   30251             lower_halves_are_equal ();
   30252           else
   30253             lower_halves_are_unequal ();
   30254 
   30255 `v2sf __builtin_mips_movt_cabs_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)'
   30256 `v2sf __builtin_mips_movf_cabs_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)'
   30257      Conditional move based on absolute comparison (`cabs.COND.ps',
   30258      `movt.ps'/`movf.ps').
   30259 
   30260      The `movt' functions return the value X computed by:
   30261 
   30262           cabs.COND.ps CC,A,B
   30263           mov.ps X,C
   30264           movt.ps X,D,CC
   30265 
   30266      The `movf' functions are similar but use `movf.ps' instead of
   30267      `movt.ps'.
   30268 
   30269 `int __builtin_mips_any_c_COND_ps (v2sf A, v2sf B)'
   30270 `int __builtin_mips_all_c_COND_ps (v2sf A, v2sf B)'
   30271 `int __builtin_mips_any_cabs_COND_ps (v2sf A, v2sf B)'
   30272 `int __builtin_mips_all_cabs_COND_ps (v2sf A, v2sf B)'
   30273      Comparison of two paired-single values (`c.COND.ps'/`cabs.COND.ps',
   30274      `bc1any2t'/`bc1any2f').
   30275 
   30276      These functions compare A and B using `c.COND.ps' or
   30277      `cabs.COND.ps'.  The `any' forms return true if either result is
   30278      true and the `all' forms return true if both results are true.
   30279      For example:
   30280 
   30281           v2sf a, b;
   30282           if (__builtin_mips_any_c_eq_ps (a, b))
   30283             one_is_true ();
   30284           else
   30285             both_are_false ();
   30286 
   30287           if (__builtin_mips_all_c_eq_ps (a, b))
   30288             both_are_true ();
   30289           else
   30290             one_is_false ();
   30291 
   30292 `int __builtin_mips_any_c_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)'
   30293 `int __builtin_mips_all_c_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)'
   30294 `int __builtin_mips_any_cabs_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)'
   30295 `int __builtin_mips_all_cabs_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)'
   30296      Comparison of four paired-single values
   30297      (`c.COND.ps'/`cabs.COND.ps', `bc1any4t'/`bc1any4f').
   30298 
   30299      These functions use `c.COND.ps' or `cabs.COND.ps' to compare A
   30300      with B and to compare C with D.  The `any' forms return true if
   30301      any of the four results are true and the `all' forms return true
   30302      if all four results are true.  For example:
   30303 
   30304           v2sf a, b, c, d;
   30305           if (__builtin_mips_any_c_eq_4s (a, b, c, d))
   30306             some_are_true ();
   30307           else
   30308             all_are_false ();
   30309 
   30310           if (__builtin_mips_all_c_eq_4s (a, b, c, d))
   30311             all_are_true ();
   30312           else
   30313             some_are_false ();
   30314 
   30315 
   30316 File: gcc.info,  Node: PowerPC AltiVec Built-in Functions,  Next: SPARC VIS Built-in Functions,  Prev: MIPS Paired-Single Support,  Up: Target Builtins
   30317 
   30318 5.50.9 PowerPC AltiVec Built-in Functions
   30319 -----------------------------------------
   30320 
   30321 GCC provides an interface for the PowerPC family of processors to access
   30322 the AltiVec operations described in Motorola's AltiVec Programming
   30323 Interface Manual.  The interface is made available by including
   30324 `<altivec.h>' and using `-maltivec' and `-mabi=altivec'.  The interface
   30325 supports the following vector types.
   30326 
   30327      vector unsigned char
   30328      vector signed char
   30329      vector bool char
   30330 
   30331      vector unsigned short
   30332      vector signed short
   30333      vector bool short
   30334      vector pixel
   30335 
   30336      vector unsigned int
   30337      vector signed int
   30338      vector bool int
   30339      vector float
   30340 
   30341  GCC's implementation of the high-level language interface available
   30342 from C and C++ code differs from Motorola's documentation in several
   30343 ways.
   30344 
   30345    * A vector constant is a list of constant expressions within curly
   30346      braces.
   30347 
   30348    * A vector initializer requires no cast if the vector constant is of
   30349      the same type as the variable it is initializing.
   30350 
   30351    * If `signed' or `unsigned' is omitted, the signedness of the vector
   30352      type is the default signedness of the base type.  The default
   30353      varies depending on the operating system, so a portable program
   30354      should always specify the signedness.
   30355 
   30356    * Compiling with `-maltivec' adds keywords `__vector', `__pixel',
   30357      and `__bool'.  Macros `vector', `pixel', and `bool' are defined in
   30358      `<altivec.h>' and can be undefined.
   30359 
   30360    * GCC allows using a `typedef' name as the type specifier for a
   30361      vector type.
   30362 
   30363    * For C, overloaded functions are implemented with macros so the
   30364      following does not work:
   30365 
   30366             vec_add ((vector signed int){1, 2, 3, 4}, foo);
   30367 
   30368      Since `vec_add' is a macro, the vector constant in the example is
   30369      treated as four separate arguments.  Wrap the entire argument in
   30370      parentheses for this to work.
   30371 
   30372  _Note:_ Only the `<altivec.h>' interface is supported.  Internally,
   30373 GCC uses built-in functions to achieve the functionality in the
   30374 aforementioned header file, but they are not supported and are subject
   30375 to change without notice.
   30376 
   30377  The following interfaces are supported for the generic and specific
   30378 AltiVec operations and the AltiVec predicates.  In cases where there is
   30379 a direct mapping between generic and specific operations, only the
   30380 generic names are shown here, although the specific operations can also
   30381 be used.
   30382 
   30383  Arguments that are documented as `const int' require literal integral
   30384 values within the range required for that operation.
   30385 
   30386      vector signed char vec_abs (vector signed char);
   30387      vector signed short vec_abs (vector signed short);
   30388      vector signed int vec_abs (vector signed int);
   30389      vector float vec_abs (vector float);
   30390 
   30391      vector signed char vec_abss (vector signed char);
   30392      vector signed short vec_abss (vector signed short);
   30393      vector signed int vec_abss (vector signed int);
   30394 
   30395      vector signed char vec_add (vector bool char, vector signed char);
   30396      vector signed char vec_add (vector signed char, vector bool char);
   30397      vector signed char vec_add (vector signed char, vector signed char);
   30398      vector unsigned char vec_add (vector bool char, vector unsigned char);
   30399      vector unsigned char vec_add (vector unsigned char, vector bool char);
   30400      vector unsigned char vec_add (vector unsigned char,
   30401                                    vector unsigned char);
   30402      vector signed short vec_add (vector bool short, vector signed short);
   30403      vector signed short vec_add (vector signed short, vector bool short);
   30404      vector signed short vec_add (vector signed short, vector signed short);
   30405      vector unsigned short vec_add (vector bool short,
   30406                                     vector unsigned short);
   30407      vector unsigned short vec_add (vector unsigned short,
   30408                                     vector bool short);
   30409      vector unsigned short vec_add (vector unsigned short,
   30410                                     vector unsigned short);
   30411      vector signed int vec_add (vector bool int, vector signed int);
   30412      vector signed int vec_add (vector signed int, vector bool int);
   30413      vector signed int vec_add (vector signed int, vector signed int);
   30414      vector unsigned int vec_add (vector bool int, vector unsigned int);
   30415      vector unsigned int vec_add (vector unsigned int, vector bool int);
   30416      vector unsigned int vec_add (vector unsigned int, vector unsigned int);
   30417      vector float vec_add (vector float, vector float);
   30418 
   30419      vector float vec_vaddfp (vector float, vector float);
   30420 
   30421      vector signed int vec_vadduwm (vector bool int, vector signed int);
   30422      vector signed int vec_vadduwm (vector signed int, vector bool int);
   30423      vector signed int vec_vadduwm (vector signed int, vector signed int);
   30424      vector unsigned int vec_vadduwm (vector bool int, vector unsigned int);
   30425      vector unsigned int vec_vadduwm (vector unsigned int, vector bool int);
   30426      vector unsigned int vec_vadduwm (vector unsigned int,
   30427                                       vector unsigned int);
   30428 
   30429      vector signed short vec_vadduhm (vector bool short,
   30430                                       vector signed short);
   30431      vector signed short vec_vadduhm (vector signed short,
   30432                                       vector bool short);
   30433      vector signed short vec_vadduhm (vector signed short,
   30434                                       vector signed short);
   30435      vector unsigned short vec_vadduhm (vector bool short,
   30436                                         vector unsigned short);
   30437      vector unsigned short vec_vadduhm (vector unsigned short,
   30438                                         vector bool short);
   30439      vector unsigned short vec_vadduhm (vector unsigned short,
   30440                                         vector unsigned short);
   30441 
   30442      vector signed char vec_vaddubm (vector bool char, vector signed char);
   30443      vector signed char vec_vaddubm (vector signed char, vector bool char);
   30444      vector signed char vec_vaddubm (vector signed char, vector signed char);
   30445      vector unsigned char vec_vaddubm (vector bool char,
   30446                                        vector unsigned char);
   30447      vector unsigned char vec_vaddubm (vector unsigned char,
   30448                                        vector bool char);
   30449      vector unsigned char vec_vaddubm (vector unsigned char,
   30450                                        vector unsigned char);
   30451 
   30452      vector unsigned int vec_addc (vector unsigned int, vector unsigned int);
   30453 
   30454      vector unsigned char vec_adds (vector bool char, vector unsigned char);
   30455      vector unsigned char vec_adds (vector unsigned char, vector bool char);
   30456      vector unsigned char vec_adds (vector unsigned char,
   30457                                     vector unsigned char);
   30458      vector signed char vec_adds (vector bool char, vector signed char);
   30459      vector signed char vec_adds (vector signed char, vector bool char);
   30460      vector signed char vec_adds (vector signed char, vector signed char);
   30461      vector unsigned short vec_adds (vector bool short,
   30462                                      vector unsigned short);
   30463      vector unsigned short vec_adds (vector unsigned short,
   30464                                      vector bool short);
   30465      vector unsigned short vec_adds (vector unsigned short,
   30466                                      vector unsigned short);
   30467      vector signed short vec_adds (vector bool short, vector signed short);
   30468      vector signed short vec_adds (vector signed short, vector bool short);
   30469      vector signed short vec_adds (vector signed short, vector signed short);
   30470      vector unsigned int vec_adds (vector bool int, vector unsigned int);
   30471      vector unsigned int vec_adds (vector unsigned int, vector bool int);
   30472      vector unsigned int vec_adds (vector unsigned int, vector unsigned int);
   30473      vector signed int vec_adds (vector bool int, vector signed int);
   30474      vector signed int vec_adds (vector signed int, vector bool int);
   30475      vector signed int vec_adds (vector signed int, vector signed int);
   30476 
   30477      vector signed int vec_vaddsws (vector bool int, vector signed int);
   30478      vector signed int vec_vaddsws (vector signed int, vector bool int);
   30479      vector signed int vec_vaddsws (vector signed int, vector signed int);
   30480 
   30481      vector unsigned int vec_vadduws (vector bool int, vector unsigned int);
   30482      vector unsigned int vec_vadduws (vector unsigned int, vector bool int);
   30483      vector unsigned int vec_vadduws (vector unsigned int,
   30484                                       vector unsigned int);
   30485 
   30486      vector signed short vec_vaddshs (vector bool short,
   30487                                       vector signed short);
   30488      vector signed short vec_vaddshs (vector signed short,
   30489                                       vector bool short);
   30490      vector signed short vec_vaddshs (vector signed short,
   30491                                       vector signed short);
   30492 
   30493      vector unsigned short vec_vadduhs (vector bool short,
   30494                                         vector unsigned short);
   30495      vector unsigned short vec_vadduhs (vector unsigned short,
   30496                                         vector bool short);
   30497      vector unsigned short vec_vadduhs (vector unsigned short,
   30498                                         vector unsigned short);
   30499 
   30500      vector signed char vec_vaddsbs (vector bool char, vector signed char);
   30501      vector signed char vec_vaddsbs (vector signed char, vector bool char);
   30502      vector signed char vec_vaddsbs (vector signed char, vector signed char);
   30503 
   30504      vector unsigned char vec_vaddubs (vector bool char,
   30505                                        vector unsigned char);
   30506      vector unsigned char vec_vaddubs (vector unsigned char,
   30507                                        vector bool char);
   30508      vector unsigned char vec_vaddubs (vector unsigned char,
   30509                                        vector unsigned char);
   30510 
   30511      vector float vec_and (vector float, vector float);
   30512      vector float vec_and (vector float, vector bool int);
   30513      vector float vec_and (vector bool int, vector float);
   30514      vector bool int vec_and (vector bool int, vector bool int);
   30515      vector signed int vec_and (vector bool int, vector signed int);
   30516      vector signed int vec_and (vector signed int, vector bool int);
   30517      vector signed int vec_and (vector signed int, vector signed int);
   30518      vector unsigned int vec_and (vector bool int, vector unsigned int);
   30519      vector unsigned int vec_and (vector unsigned int, vector bool int);
   30520      vector unsigned int vec_and (vector unsigned int, vector unsigned int);
   30521      vector bool short vec_and (vector bool short, vector bool short);
   30522      vector signed short vec_and (vector bool short, vector signed short);
   30523      vector signed short vec_and (vector signed short, vector bool short);
   30524      vector signed short vec_and (vector signed short, vector signed short);
   30525      vector unsigned short vec_and (vector bool short,
   30526                                     vector unsigned short);
   30527      vector unsigned short vec_and (vector unsigned short,
   30528                                     vector bool short);
   30529      vector unsigned short vec_and (vector unsigned short,
   30530                                     vector unsigned short);
   30531      vector signed char vec_and (vector bool char, vector signed char);
   30532      vector bool char vec_and (vector bool char, vector bool char);
   30533      vector signed char vec_and (vector signed char, vector bool char);
   30534      vector signed char vec_and (vector signed char, vector signed char);
   30535      vector unsigned char vec_and (vector bool char, vector unsigned char);
   30536      vector unsigned char vec_and (vector unsigned char, vector bool char);
   30537      vector unsigned char vec_and (vector unsigned char,
   30538                                    vector unsigned char);
   30539 
   30540      vector float vec_andc (vector float, vector float);
   30541      vector float vec_andc (vector float, vector bool int);
   30542      vector float vec_andc (vector bool int, vector float);
   30543      vector bool int vec_andc (vector bool int, vector bool int);
   30544      vector signed int vec_andc (vector bool int, vector signed int);
   30545      vector signed int vec_andc (vector signed int, vector bool int);
   30546      vector signed int vec_andc (vector signed int, vector signed int);
   30547      vector unsigned int vec_andc (vector bool int, vector unsigned int);
   30548      vector unsigned int vec_andc (vector unsigned int, vector bool int);
   30549      vector unsigned int vec_andc (vector unsigned int, vector unsigned int);
   30550      vector bool short vec_andc (vector bool short, vector bool short);
   30551      vector signed short vec_andc (vector bool short, vector signed short);
   30552      vector signed short vec_andc (vector signed short, vector bool short);
   30553      vector signed short vec_andc (vector signed short, vector signed short);
   30554      vector unsigned short vec_andc (vector bool short,
   30555                                      vector unsigned short);
   30556      vector unsigned short vec_andc (vector unsigned short,
   30557                                      vector bool short);
   30558      vector unsigned short vec_andc (vector unsigned short,
   30559                                      vector unsigned short);
   30560      vector signed char vec_andc (vector bool char, vector signed char);
   30561      vector bool char vec_andc (vector bool char, vector bool char);
   30562      vector signed char vec_andc (vector signed char, vector bool char);
   30563      vector signed char vec_andc (vector signed char, vector signed char);
   30564      vector unsigned char vec_andc (vector bool char, vector unsigned char);
   30565      vector unsigned char vec_andc (vector unsigned char, vector bool char);
   30566      vector unsigned char vec_andc (vector unsigned char,
   30567                                     vector unsigned char);
   30568 
   30569      vector unsigned char vec_avg (vector unsigned char,
   30570                                    vector unsigned char);
   30571      vector signed char vec_avg (vector signed char, vector signed char);
   30572      vector unsigned short vec_avg (vector unsigned short,
   30573                                     vector unsigned short);
   30574      vector signed short vec_avg (vector signed short, vector signed short);
   30575      vector unsigned int vec_avg (vector unsigned int, vector unsigned int);
   30576      vector signed int vec_avg (vector signed int, vector signed int);
   30577 
   30578      vector signed int vec_vavgsw (vector signed int, vector signed int);
   30579 
   30580      vector unsigned int vec_vavguw (vector unsigned int,
   30581                                      vector unsigned int);
   30582 
   30583      vector signed short vec_vavgsh (vector signed short,
   30584                                      vector signed short);
   30585 
   30586      vector unsigned short vec_vavguh (vector unsigned short,
   30587                                        vector unsigned short);
   30588 
   30589      vector signed char vec_vavgsb (vector signed char, vector signed char);
   30590 
   30591      vector unsigned char vec_vavgub (vector unsigned char,
   30592                                       vector unsigned char);
   30593 
   30594      vector float vec_ceil (vector float);
   30595 
   30596      vector signed int vec_cmpb (vector float, vector float);
   30597 
   30598      vector bool char vec_cmpeq (vector signed char, vector signed char);
   30599      vector bool char vec_cmpeq (vector unsigned char, vector unsigned char);
   30600      vector bool short vec_cmpeq (vector signed short, vector signed short);
   30601      vector bool short vec_cmpeq (vector unsigned short,
   30602                                   vector unsigned short);
   30603      vector bool int vec_cmpeq (vector signed int, vector signed int);
   30604      vector bool int vec_cmpeq (vector unsigned int, vector unsigned int);
   30605      vector bool int vec_cmpeq (vector float, vector float);
   30606 
   30607      vector bool int vec_vcmpeqfp (vector float, vector float);
   30608 
   30609      vector bool int vec_vcmpequw (vector signed int, vector signed int);
   30610      vector bool int vec_vcmpequw (vector unsigned int, vector unsigned int);
   30611 
   30612      vector bool short vec_vcmpequh (vector signed short,
   30613                                      vector signed short);
   30614      vector bool short vec_vcmpequh (vector unsigned short,
   30615                                      vector unsigned short);
   30616 
   30617      vector bool char vec_vcmpequb (vector signed char, vector signed char);
   30618      vector bool char vec_vcmpequb (vector unsigned char,
   30619                                     vector unsigned char);
   30620 
   30621      vector bool int vec_cmpge (vector float, vector float);
   30622 
   30623      vector bool char vec_cmpgt (vector unsigned char, vector unsigned char);
   30624      vector bool char vec_cmpgt (vector signed char, vector signed char);
   30625      vector bool short vec_cmpgt (vector unsigned short,
   30626                                   vector unsigned short);
   30627      vector bool short vec_cmpgt (vector signed short, vector signed short);
   30628      vector bool int vec_cmpgt (vector unsigned int, vector unsigned int);
   30629      vector bool int vec_cmpgt (vector signed int, vector signed int);
   30630      vector bool int vec_cmpgt (vector float, vector float);
   30631 
   30632      vector bool int vec_vcmpgtfp (vector float, vector float);
   30633 
   30634      vector bool int vec_vcmpgtsw (vector signed int, vector signed int);
   30635 
   30636      vector bool int vec_vcmpgtuw (vector unsigned int, vector unsigned int);
   30637 
   30638      vector bool short vec_vcmpgtsh (vector signed short,
   30639                                      vector signed short);
   30640 
   30641      vector bool short vec_vcmpgtuh (vector unsigned short,
   30642                                      vector unsigned short);
   30643 
   30644      vector bool char vec_vcmpgtsb (vector signed char, vector signed char);
   30645 
   30646      vector bool char vec_vcmpgtub (vector unsigned char,
   30647                                     vector unsigned char);
   30648 
   30649      vector bool int vec_cmple (vector float, vector float);
   30650 
   30651      vector bool char vec_cmplt (vector unsigned char, vector unsigned char);
   30652      vector bool char vec_cmplt (vector signed char, vector signed char);
   30653      vector bool short vec_cmplt (vector unsigned short,
   30654                                   vector unsigned short);
   30655      vector bool short vec_cmplt (vector signed short, vector signed short);
   30656      vector bool int vec_cmplt (vector unsigned int, vector unsigned int);
   30657      vector bool int vec_cmplt (vector signed int, vector signed int);
   30658      vector bool int vec_cmplt (vector float, vector float);
   30659 
   30660      vector float vec_ctf (vector unsigned int, const int);
   30661      vector float vec_ctf (vector signed int, const int);
   30662 
   30663      vector float vec_vcfsx (vector signed int, const int);
   30664 
   30665      vector float vec_vcfux (vector unsigned int, const int);
   30666 
   30667      vector signed int vec_cts (vector float, const int);
   30668 
   30669      vector unsigned int vec_ctu (vector float, const int);
   30670 
   30671      void vec_dss (const int);
   30672 
   30673      void vec_dssall (void);
   30674 
   30675      void vec_dst (const vector unsigned char *, int, const int);
   30676      void vec_dst (const vector signed char *, int, const int);
   30677      void vec_dst (const vector bool char *, int, const int);
   30678      void vec_dst (const vector unsigned short *, int, const int);
   30679      void vec_dst (const vector signed short *, int, const int);
   30680      void vec_dst (const vector bool short *, int, const int);
   30681      void vec_dst (const vector pixel *, int, const int);
   30682      void vec_dst (const vector unsigned int *, int, const int);
   30683      void vec_dst (const vector signed int *, int, const int);
   30684      void vec_dst (const vector bool int *, int, const int);
   30685      void vec_dst (const vector float *, int, const int);
   30686      void vec_dst (const unsigned char *, int, const int);
   30687      void vec_dst (const signed char *, int, const int);
   30688      void vec_dst (const unsigned short *, int, const int);
   30689      void vec_dst (const short *, int, const int);
   30690      void vec_dst (const unsigned int *, int, const int);
   30691      void vec_dst (const int *, int, const int);
   30692      void vec_dst (const unsigned long *, int, const int);
   30693      void vec_dst (const long *, int, const int);
   30694      void vec_dst (const float *, int, const int);
   30695 
   30696      void vec_dstst (const vector unsigned char *, int, const int);
   30697      void vec_dstst (const vector signed char *, int, const int);
   30698      void vec_dstst (const vector bool char *, int, const int);
   30699      void vec_dstst (const vector unsigned short *, int, const int);
   30700      void vec_dstst (const vector signed short *, int, const int);
   30701      void vec_dstst (const vector bool short *, int, const int);
   30702      void vec_dstst (const vector pixel *, int, const int);
   30703      void vec_dstst (const vector unsigned int *, int, const int);
   30704      void vec_dstst (const vector signed int *, int, const int);
   30705      void vec_dstst (const vector bool int *, int, const int);
   30706      void vec_dstst (const vector float *, int, const int);
   30707      void vec_dstst (const unsigned char *, int, const int);
   30708      void vec_dstst (const signed char *, int, const int);
   30709      void vec_dstst (const unsigned short *, int, const int);
   30710      void vec_dstst (const short *, int, const int);
   30711      void vec_dstst (const unsigned int *, int, const int);
   30712      void vec_dstst (const int *, int, const int);
   30713      void vec_dstst (const unsigned long *, int, const int);
   30714      void vec_dstst (const long *, int, const int);
   30715      void vec_dstst (const float *, int, const int);
   30716 
   30717      void vec_dststt (const vector unsigned char *, int, const int);
   30718      void vec_dststt (const vector signed char *, int, const int);
   30719      void vec_dststt (const vector bool char *, int, const int);
   30720      void vec_dststt (const vector unsigned short *, int, const int);
   30721      void vec_dststt (const vector signed short *, int, const int);
   30722      void vec_dststt (const vector bool short *, int, const int);
   30723      void vec_dststt (const vector pixel *, int, const int);
   30724      void vec_dststt (const vector unsigned int *, int, const int);
   30725      void vec_dststt (const vector signed int *, int, const int);
   30726      void vec_dststt (const vector bool int *, int, const int);
   30727      void vec_dststt (const vector float *, int, const int);
   30728      void vec_dststt (const unsigned char *, int, const int);
   30729      void vec_dststt (const signed char *, int, const int);
   30730      void vec_dststt (const unsigned short *, int, const int);
   30731      void vec_dststt (const short *, int, const int);
   30732      void vec_dststt (const unsigned int *, int, const int);
   30733      void vec_dststt (const int *, int, const int);
   30734      void vec_dststt (const unsigned long *, int, const int);
   30735      void vec_dststt (const long *, int, const int);
   30736      void vec_dststt (const float *, int, const int);
   30737 
   30738      void vec_dstt (const vector unsigned char *, int, const int);
   30739      void vec_dstt (const vector signed char *, int, const int);
   30740      void vec_dstt (const vector bool char *, int, const int);
   30741      void vec_dstt (const vector unsigned short *, int, const int);
   30742      void vec_dstt (const vector signed short *, int, const int);
   30743      void vec_dstt (const vector bool short *, int, const int);
   30744      void vec_dstt (const vector pixel *, int, const int);
   30745      void vec_dstt (const vector unsigned int *, int, const int);
   30746      void vec_dstt (const vector signed int *, int, const int);
   30747      void vec_dstt (const vector bool int *, int, const int);
   30748      void vec_dstt (const vector float *, int, const int);
   30749      void vec_dstt (const unsigned char *, int, const int);
   30750      void vec_dstt (const signed char *, int, const int);
   30751      void vec_dstt (const unsigned short *, int, const int);
   30752      void vec_dstt (const short *, int, const int);
   30753      void vec_dstt (const unsigned int *, int, const int);
   30754      void vec_dstt (const int *, int, const int);
   30755      void vec_dstt (const unsigned long *, int, const int);
   30756      void vec_dstt (const long *, int, const int);
   30757      void vec_dstt (const float *, int, const int);
   30758 
   30759      vector float vec_expte (vector float);
   30760 
   30761      vector float vec_floor (vector float);
   30762 
   30763      vector float vec_ld (int, const vector float *);
   30764      vector float vec_ld (int, const float *);
   30765      vector bool int vec_ld (int, const vector bool int *);
   30766      vector signed int vec_ld (int, const vector signed int *);
   30767      vector signed int vec_ld (int, const int *);
   30768      vector signed int vec_ld (int, const long *);
   30769      vector unsigned int vec_ld (int, const vector unsigned int *);
   30770      vector unsigned int vec_ld (int, const unsigned int *);
   30771      vector unsigned int vec_ld (int, const unsigned long *);
   30772      vector bool short vec_ld (int, const vector bool short *);
   30773      vector pixel vec_ld (int, const vector pixel *);
   30774      vector signed short vec_ld (int, const vector signed short *);
   30775      vector signed short vec_ld (int, const short *);
   30776      vector unsigned short vec_ld (int, const vector unsigned short *);
   30777      vector unsigned short vec_ld (int, const unsigned short *);
   30778      vector bool char vec_ld (int, const vector bool char *);
   30779      vector signed char vec_ld (int, const vector signed char *);
   30780      vector signed char vec_ld (int, const signed char *);
   30781      vector unsigned char vec_ld (int, const vector unsigned char *);
   30782      vector unsigned char vec_ld (int, const unsigned char *);
   30783 
   30784      vector signed char vec_lde (int, const signed char *);
   30785      vector unsigned char vec_lde (int, const unsigned char *);
   30786      vector signed short vec_lde (int, const short *);
   30787      vector unsigned short vec_lde (int, const unsigned short *);
   30788      vector float vec_lde (int, const float *);
   30789      vector signed int vec_lde (int, const int *);
   30790      vector unsigned int vec_lde (int, const unsigned int *);
   30791      vector signed int vec_lde (int, const long *);
   30792      vector unsigned int vec_lde (int, const unsigned long *);
   30793 
   30794      vector float vec_lvewx (int, float *);
   30795      vector signed int vec_lvewx (int, int *);
   30796      vector unsigned int vec_lvewx (int, unsigned int *);
   30797      vector signed int vec_lvewx (int, long *);
   30798      vector unsigned int vec_lvewx (int, unsigned long *);
   30799 
   30800      vector signed short vec_lvehx (int, short *);
   30801      vector unsigned short vec_lvehx (int, unsigned short *);
   30802 
   30803      vector signed char vec_lvebx (int, char *);
   30804      vector unsigned char vec_lvebx (int, unsigned char *);
   30805 
   30806      vector float vec_ldl (int, const vector float *);
   30807      vector float vec_ldl (int, const float *);
   30808      vector bool int vec_ldl (int, const vector bool int *);
   30809      vector signed int vec_ldl (int, const vector signed int *);
   30810      vector signed int vec_ldl (int, const int *);
   30811      vector signed int vec_ldl (int, const long *);
   30812      vector unsigned int vec_ldl (int, const vector unsigned int *);
   30813      vector unsigned int vec_ldl (int, const unsigned int *);
   30814      vector unsigned int vec_ldl (int, const unsigned long *);
   30815      vector bool short vec_ldl (int, const vector bool short *);
   30816      vector pixel vec_ldl (int, const vector pixel *);
   30817      vector signed short vec_ldl (int, const vector signed short *);
   30818      vector signed short vec_ldl (int, const short *);
   30819      vector unsigned short vec_ldl (int, const vector unsigned short *);
   30820      vector unsigned short vec_ldl (int, const unsigned short *);
   30821      vector bool char vec_ldl (int, const vector bool char *);
   30822      vector signed char vec_ldl (int, const vector signed char *);
   30823      vector signed char vec_ldl (int, const signed char *);
   30824      vector unsigned char vec_ldl (int, const vector unsigned char *);
   30825      vector unsigned char vec_ldl (int, const unsigned char *);
   30826 
   30827      vector float vec_loge (vector float);
   30828 
   30829      vector unsigned char vec_lvsl (int, const volatile unsigned char *);
   30830      vector unsigned char vec_lvsl (int, const volatile signed char *);
   30831      vector unsigned char vec_lvsl (int, const volatile unsigned short *);
   30832      vector unsigned char vec_lvsl (int, const volatile short *);
   30833      vector unsigned char vec_lvsl (int, const volatile unsigned int *);
   30834      vector unsigned char vec_lvsl (int, const volatile int *);
   30835      vector unsigned char vec_lvsl (int, const volatile unsigned long *);
   30836      vector unsigned char vec_lvsl (int, const volatile long *);
   30837      vector unsigned char vec_lvsl (int, const volatile float *);
   30838 
   30839      vector unsigned char vec_lvsr (int, const volatile unsigned char *);
   30840      vector unsigned char vec_lvsr (int, const volatile signed char *);
   30841      vector unsigned char vec_lvsr (int, const volatile unsigned short *);
   30842      vector unsigned char vec_lvsr (int, const volatile short *);
   30843      vector unsigned char vec_lvsr (int, const volatile unsigned int *);
   30844      vector unsigned char vec_lvsr (int, const volatile int *);
   30845      vector unsigned char vec_lvsr (int, const volatile unsigned long *);
   30846      vector unsigned char vec_lvsr (int, const volatile long *);
   30847      vector unsigned char vec_lvsr (int, const volatile float *);
   30848 
   30849      vector float vec_madd (vector float, vector float, vector float);
   30850 
   30851      vector signed short vec_madds (vector signed short,
   30852                                     vector signed short,
   30853                                     vector signed short);
   30854 
   30855      vector unsigned char vec_max (vector bool char, vector unsigned char);
   30856      vector unsigned char vec_max (vector unsigned char, vector bool char);
   30857      vector unsigned char vec_max (vector unsigned char,
   30858                                    vector unsigned char);
   30859      vector signed char vec_max (vector bool char, vector signed char);
   30860      vector signed char vec_max (vector signed char, vector bool char);
   30861      vector signed char vec_max (vector signed char, vector signed char);
   30862      vector unsigned short vec_max (vector bool short,
   30863                                     vector unsigned short);
   30864      vector unsigned short vec_max (vector unsigned short,
   30865                                     vector bool short);
   30866      vector unsigned short vec_max (vector unsigned short,
   30867                                     vector unsigned short);
   30868      vector signed short vec_max (vector bool short, vector signed short);
   30869      vector signed short vec_max (vector signed short, vector bool short);
   30870      vector signed short vec_max (vector signed short, vector signed short);
   30871      vector unsigned int vec_max (vector bool int, vector unsigned int);
   30872      vector unsigned int vec_max (vector unsigned int, vector bool int);
   30873      vector unsigned int vec_max (vector unsigned int, vector unsigned int);
   30874      vector signed int vec_max (vector bool int, vector signed int);
   30875      vector signed int vec_max (vector signed int, vector bool int);
   30876      vector signed int vec_max (vector signed int, vector signed int);
   30877      vector float vec_max (vector float, vector float);
   30878 
   30879      vector float vec_vmaxfp (vector float, vector float);
   30880 
   30881      vector signed int vec_vmaxsw (vector bool int, vector signed int);
   30882      vector signed int vec_vmaxsw (vector signed int, vector bool int);
   30883      vector signed int vec_vmaxsw (vector signed int, vector signed int);
   30884 
   30885      vector unsigned int vec_vmaxuw (vector bool int, vector unsigned int);
   30886      vector unsigned int vec_vmaxuw (vector unsigned int, vector bool int);
   30887      vector unsigned int vec_vmaxuw (vector unsigned int,
   30888                                      vector unsigned int);
   30889 
   30890      vector signed short vec_vmaxsh (vector bool short, vector signed short);
   30891      vector signed short vec_vmaxsh (vector signed short, vector bool short);
   30892      vector signed short vec_vmaxsh (vector signed short,
   30893                                      vector signed short);
   30894 
   30895      vector unsigned short vec_vmaxuh (vector bool short,
   30896                                        vector unsigned short);
   30897      vector unsigned short vec_vmaxuh (vector unsigned short,
   30898                                        vector bool short);
   30899      vector unsigned short vec_vmaxuh (vector unsigned short,
   30900                                        vector unsigned short);
   30901 
   30902      vector signed char vec_vmaxsb (vector bool char, vector signed char);
   30903      vector signed char vec_vmaxsb (vector signed char, vector bool char);
   30904      vector signed char vec_vmaxsb (vector signed char, vector signed char);
   30905 
   30906      vector unsigned char vec_vmaxub (vector bool char,
   30907                                       vector unsigned char);
   30908      vector unsigned char vec_vmaxub (vector unsigned char,
   30909                                       vector bool char);
   30910      vector unsigned char vec_vmaxub (vector unsigned char,
   30911                                       vector unsigned char);
   30912 
   30913      vector bool char vec_mergeh (vector bool char, vector bool char);
   30914      vector signed char vec_mergeh (vector signed char, vector signed char);
   30915      vector unsigned char vec_mergeh (vector unsigned char,
   30916                                       vector unsigned char);
   30917      vector bool short vec_mergeh (vector bool short, vector bool short);
   30918      vector pixel vec_mergeh (vector pixel, vector pixel);
   30919      vector signed short vec_mergeh (vector signed short,
   30920                                      vector signed short);
   30921      vector unsigned short vec_mergeh (vector unsigned short,
   30922                                        vector unsigned short);
   30923      vector float vec_mergeh (vector float, vector float);
   30924      vector bool int vec_mergeh (vector bool int, vector bool int);
   30925      vector signed int vec_mergeh (vector signed int, vector signed int);
   30926      vector unsigned int vec_mergeh (vector unsigned int,
   30927                                      vector unsigned int);
   30928 
   30929      vector float vec_vmrghw (vector float, vector float);
   30930      vector bool int vec_vmrghw (vector bool int, vector bool int);
   30931      vector signed int vec_vmrghw (vector signed int, vector signed int);
   30932      vector unsigned int vec_vmrghw (vector unsigned int,
   30933                                      vector unsigned int);
   30934 
   30935      vector bool short vec_vmrghh (vector bool short, vector bool short);
   30936      vector signed short vec_vmrghh (vector signed short,
   30937                                      vector signed short);
   30938      vector unsigned short vec_vmrghh (vector unsigned short,
   30939                                        vector unsigned short);
   30940      vector pixel vec_vmrghh (vector pixel, vector pixel);
   30941 
   30942      vector bool char vec_vmrghb (vector bool char, vector bool char);
   30943      vector signed char vec_vmrghb (vector signed char, vector signed char);
   30944      vector unsigned char vec_vmrghb (vector unsigned char,
   30945                                       vector unsigned char);
   30946 
   30947      vector bool char vec_mergel (vector bool char, vector bool char);
   30948      vector signed char vec_mergel (vector signed char, vector signed char);
   30949      vector unsigned char vec_mergel (vector unsigned char,
   30950                                       vector unsigned char);
   30951      vector bool short vec_mergel (vector bool short, vector bool short);
   30952      vector pixel vec_mergel (vector pixel, vector pixel);
   30953      vector signed short vec_mergel (vector signed short,
   30954                                      vector signed short);
   30955      vector unsigned short vec_mergel (vector unsigned short,
   30956                                        vector unsigned short);
   30957      vector float vec_mergel (vector float, vector float);
   30958      vector bool int vec_mergel (vector bool int, vector bool int);
   30959      vector signed int vec_mergel (vector signed int, vector signed int);
   30960      vector unsigned int vec_mergel (vector unsigned int,
   30961                                      vector unsigned int);
   30962 
   30963      vector float vec_vmrglw (vector float, vector float);
   30964      vector signed int vec_vmrglw (vector signed int, vector signed int);
   30965      vector unsigned int vec_vmrglw (vector unsigned int,
   30966                                      vector unsigned int);
   30967      vector bool int vec_vmrglw (vector bool int, vector bool int);
   30968 
   30969      vector bool short vec_vmrglh (vector bool short, vector bool short);
   30970      vector signed short vec_vmrglh (vector signed short,
   30971                                      vector signed short);
   30972      vector unsigned short vec_vmrglh (vector unsigned short,
   30973                                        vector unsigned short);
   30974      vector pixel vec_vmrglh (vector pixel, vector pixel);
   30975 
   30976      vector bool char vec_vmrglb (vector bool char, vector bool char);
   30977      vector signed char vec_vmrglb (vector signed char, vector signed char);
   30978      vector unsigned char vec_vmrglb (vector unsigned char,
   30979                                       vector unsigned char);
   30980 
   30981      vector unsigned short vec_mfvscr (void);
   30982 
   30983      vector unsigned char vec_min (vector bool char, vector unsigned char);
   30984      vector unsigned char vec_min (vector unsigned char, vector bool char);
   30985      vector unsigned char vec_min (vector unsigned char,
   30986                                    vector unsigned char);
   30987      vector signed char vec_min (vector bool char, vector signed char);
   30988      vector signed char vec_min (vector signed char, vector bool char);
   30989      vector signed char vec_min (vector signed char, vector signed char);
   30990      vector unsigned short vec_min (vector bool short,
   30991                                     vector unsigned short);
   30992      vector unsigned short vec_min (vector unsigned short,
   30993                                     vector bool short);
   30994      vector unsigned short vec_min (vector unsigned short,
   30995                                     vector unsigned short);
   30996      vector signed short vec_min (vector bool short, vector signed short);
   30997      vector signed short vec_min (vector signed short, vector bool short);
   30998      vector signed short vec_min (vector signed short, vector signed short);
   30999      vector unsigned int vec_min (vector bool int, vector unsigned int);
   31000      vector unsigned int vec_min (vector unsigned int, vector bool int);
   31001      vector unsigned int vec_min (vector unsigned int, vector unsigned int);
   31002      vector signed int vec_min (vector bool int, vector signed int);
   31003      vector signed int vec_min (vector signed int, vector bool int);
   31004      vector signed int vec_min (vector signed int, vector signed int);
   31005      vector float vec_min (vector float, vector float);
   31006 
   31007      vector float vec_vminfp (vector float, vector float);
   31008 
   31009      vector signed int vec_vminsw (vector bool int, vector signed int);
   31010      vector signed int vec_vminsw (vector signed int, vector bool int);
   31011      vector signed int vec_vminsw (vector signed int, vector signed int);
   31012 
   31013      vector unsigned int vec_vminuw (vector bool int, vector unsigned int);
   31014      vector unsigned int vec_vminuw (vector unsigned int, vector bool int);
   31015      vector unsigned int vec_vminuw (vector unsigned int,
   31016                                      vector unsigned int);
   31017 
   31018      vector signed short vec_vminsh (vector bool short, vector signed short);
   31019      vector signed short vec_vminsh (vector signed short, vector bool short);
   31020      vector signed short vec_vminsh (vector signed short,
   31021                                      vector signed short);
   31022 
   31023      vector unsigned short vec_vminuh (vector bool short,
   31024                                        vector unsigned short);
   31025      vector unsigned short vec_vminuh (vector unsigned short,
   31026                                        vector bool short);
   31027      vector unsigned short vec_vminuh (vector unsigned short,
   31028                                        vector unsigned short);
   31029 
   31030      vector signed char vec_vminsb (vector bool char, vector signed char);
   31031      vector signed char vec_vminsb (vector signed char, vector bool char);
   31032      vector signed char vec_vminsb (vector signed char, vector signed char);
   31033 
   31034      vector unsigned char vec_vminub (vector bool char,
   31035                                       vector unsigned char);
   31036      vector unsigned char vec_vminub (vector unsigned char,
   31037                                       vector bool char);
   31038      vector unsigned char vec_vminub (vector unsigned char,
   31039                                       vector unsigned char);
   31040 
   31041      vector signed short vec_mladd (vector signed short,
   31042                                     vector signed short,
   31043                                     vector signed short);
   31044      vector signed short vec_mladd (vector signed short,
   31045                                     vector unsigned short,
   31046                                     vector unsigned short);
   31047      vector signed short vec_mladd (vector unsigned short,
   31048                                     vector signed short,
   31049                                     vector signed short);
   31050      vector unsigned short vec_mladd (vector unsigned short,
   31051                                       vector unsigned short,
   31052                                       vector unsigned short);
   31053 
   31054      vector signed short vec_mradds (vector signed short,
   31055                                      vector signed short,
   31056                                      vector signed short);
   31057 
   31058      vector unsigned int vec_msum (vector unsigned char,
   31059                                    vector unsigned char,
   31060                                    vector unsigned int);
   31061      vector signed int vec_msum (vector signed char,
   31062                                  vector unsigned char,
   31063                                  vector signed int);
   31064      vector unsigned int vec_msum (vector unsigned short,
   31065                                    vector unsigned short,
   31066                                    vector unsigned int);
   31067      vector signed int vec_msum (vector signed short,
   31068                                  vector signed short,
   31069                                  vector signed int);
   31070 
   31071      vector signed int vec_vmsumshm (vector signed short,
   31072                                      vector signed short,
   31073                                      vector signed int);
   31074 
   31075      vector unsigned int vec_vmsumuhm (vector unsigned short,
   31076                                        vector unsigned short,
   31077                                        vector unsigned int);
   31078 
   31079      vector signed int vec_vmsummbm (vector signed char,
   31080                                      vector unsigned char,
   31081                                      vector signed int);
   31082 
   31083      vector unsigned int vec_vmsumubm (vector unsigned char,
   31084                                        vector unsigned char,
   31085                                        vector unsigned int);
   31086 
   31087      vector unsigned int vec_msums (vector unsigned short,
   31088                                     vector unsigned short,
   31089                                     vector unsigned int);
   31090      vector signed int vec_msums (vector signed short,
   31091                                   vector signed short,
   31092                                   vector signed int);
   31093 
   31094      vector signed int vec_vmsumshs (vector signed short,
   31095                                      vector signed short,
   31096                                      vector signed int);
   31097 
   31098      vector unsigned int vec_vmsumuhs (vector unsigned short,
   31099                                        vector unsigned short,
   31100                                        vector unsigned int);
   31101 
   31102      void vec_mtvscr (vector signed int);
   31103      void vec_mtvscr (vector unsigned int);
   31104      void vec_mtvscr (vector bool int);
   31105      void vec_mtvscr (vector signed short);
   31106      void vec_mtvscr (vector unsigned short);
   31107      void vec_mtvscr (vector bool short);
   31108      void vec_mtvscr (vector pixel);
   31109      void vec_mtvscr (vector signed char);
   31110      void vec_mtvscr (vector unsigned char);
   31111      void vec_mtvscr (vector bool char);
   31112 
   31113      vector unsigned short vec_mule (vector unsigned char,
   31114                                      vector unsigned char);
   31115      vector signed short vec_mule (vector signed char,
   31116                                    vector signed char);
   31117      vector unsigned int vec_mule (vector unsigned short,
   31118                                    vector unsigned short);
   31119      vector signed int vec_mule (vector signed short, vector signed short);
   31120 
   31121      vector signed int vec_vmulesh (vector signed short,
   31122                                     vector signed short);
   31123 
   31124      vector unsigned int vec_vmuleuh (vector unsigned short,
   31125                                       vector unsigned short);
   31126 
   31127      vector signed short vec_vmulesb (vector signed char,
   31128                                       vector signed char);
   31129 
   31130      vector unsigned short vec_vmuleub (vector unsigned char,
   31131                                        vector unsigned char);
   31132 
   31133      vector unsigned short vec_mulo (vector unsigned char,
   31134                                      vector unsigned char);
   31135      vector signed short vec_mulo (vector signed char, vector signed char);
   31136      vector unsigned int vec_mulo (vector unsigned short,
   31137                                    vector unsigned short);
   31138      vector signed int vec_mulo (vector signed short, vector signed short);
   31139 
   31140      vector signed int vec_vmulosh (vector signed short,
   31141                                     vector signed short);
   31142 
   31143      vector unsigned int vec_vmulouh (vector unsigned short,
   31144                                       vector unsigned short);
   31145 
   31146      vector signed short vec_vmulosb (vector signed char,
   31147                                       vector signed char);
   31148 
   31149      vector unsigned short vec_vmuloub (vector unsigned char,
   31150                                         vector unsigned char);
   31151 
   31152      vector float vec_nmsub (vector float, vector float, vector float);
   31153 
   31154      vector float vec_nor (vector float, vector float);
   31155      vector signed int vec_nor (vector signed int, vector signed int);
   31156      vector unsigned int vec_nor (vector unsigned int, vector unsigned int);
   31157      vector bool int vec_nor (vector bool int, vector bool int);
   31158      vector signed short vec_nor (vector signed short, vector signed short);
   31159      vector unsigned short vec_nor (vector unsigned short,
   31160                                     vector unsigned short);
   31161      vector bool short vec_nor (vector bool short, vector bool short);
   31162      vector signed char vec_nor (vector signed char, vector signed char);
   31163      vector unsigned char vec_nor (vector unsigned char,
   31164                                    vector unsigned char);
   31165      vector bool char vec_nor (vector bool char, vector bool char);
   31166 
   31167      vector float vec_or (vector float, vector float);
   31168      vector float vec_or (vector float, vector bool int);
   31169      vector float vec_or (vector bool int, vector float);
   31170      vector bool int vec_or (vector bool int, vector bool int);
   31171      vector signed int vec_or (vector bool int, vector signed int);
   31172      vector signed int vec_or (vector signed int, vector bool int);
   31173      vector signed int vec_or (vector signed int, vector signed int);
   31174      vector unsigned int vec_or (vector bool int, vector unsigned int);
   31175      vector unsigned int vec_or (vector unsigned int, vector bool int);
   31176      vector unsigned int vec_or (vector unsigned int, vector unsigned int);
   31177      vector bool short vec_or (vector bool short, vector bool short);
   31178      vector signed short vec_or (vector bool short, vector signed short);
   31179      vector signed short vec_or (vector signed short, vector bool short);
   31180      vector signed short vec_or (vector signed short, vector signed short);
   31181      vector unsigned short vec_or (vector bool short, vector unsigned short);
   31182      vector unsigned short vec_or (vector unsigned short, vector bool short);
   31183      vector unsigned short vec_or (vector unsigned short,
   31184                                    vector unsigned short);
   31185      vector signed char vec_or (vector bool char, vector signed char);
   31186      vector bool char vec_or (vector bool char, vector bool char);
   31187      vector signed char vec_or (vector signed char, vector bool char);
   31188      vector signed char vec_or (vector signed char, vector signed char);
   31189      vector unsigned char vec_or (vector bool char, vector unsigned char);
   31190      vector unsigned char vec_or (vector unsigned char, vector bool char);
   31191      vector unsigned char vec_or (vector unsigned char,
   31192                                   vector unsigned char);
   31193 
   31194      vector signed char vec_pack (vector signed short, vector signed short);
   31195      vector unsigned char vec_pack (vector unsigned short,
   31196                                     vector unsigned short);
   31197      vector bool char vec_pack (vector bool short, vector bool short);
   31198      vector signed short vec_pack (vector signed int, vector signed int);
   31199      vector unsigned short vec_pack (vector unsigned int,
   31200                                      vector unsigned int);
   31201      vector bool short vec_pack (vector bool int, vector bool int);
   31202 
   31203      vector bool short vec_vpkuwum (vector bool int, vector bool int);
   31204      vector signed short vec_vpkuwum (vector signed int, vector signed int);
   31205      vector unsigned short vec_vpkuwum (vector unsigned int,
   31206                                         vector unsigned int);
   31207 
   31208      vector bool char vec_vpkuhum (vector bool short, vector bool short);
   31209      vector signed char vec_vpkuhum (vector signed short,
   31210                                      vector signed short);
   31211      vector unsigned char vec_vpkuhum (vector unsigned short,
   31212                                        vector unsigned short);
   31213 
   31214      vector pixel vec_packpx (vector unsigned int, vector unsigned int);
   31215 
   31216      vector unsigned char vec_packs (vector unsigned short,
   31217                                      vector unsigned short);
   31218      vector signed char vec_packs (vector signed short, vector signed short);
   31219      vector unsigned short vec_packs (vector unsigned int,
   31220                                       vector unsigned int);
   31221      vector signed short vec_packs (vector signed int, vector signed int);
   31222 
   31223      vector signed short vec_vpkswss (vector signed int, vector signed int);
   31224 
   31225      vector unsigned short vec_vpkuwus (vector unsigned int,
   31226                                         vector unsigned int);
   31227 
   31228      vector signed char vec_vpkshss (vector signed short,
   31229                                      vector signed short);
   31230 
   31231      vector unsigned char vec_vpkuhus (vector unsigned short,
   31232                                        vector unsigned short);
   31233 
   31234      vector unsigned char vec_packsu (vector unsigned short,
   31235                                       vector unsigned short);
   31236      vector unsigned char vec_packsu (vector signed short,
   31237                                       vector signed short);
   31238      vector unsigned short vec_packsu (vector unsigned int,
   31239                                        vector unsigned int);
   31240      vector unsigned short vec_packsu (vector signed int, vector signed int);
   31241 
   31242      vector unsigned short vec_vpkswus (vector signed int,
   31243                                         vector signed int);
   31244 
   31245      vector unsigned char vec_vpkshus (vector signed short,
   31246                                        vector signed short);
   31247 
   31248      vector float vec_perm (vector float,
   31249                             vector float,
   31250                             vector unsigned char);
   31251      vector signed int vec_perm (vector signed int,
   31252                                  vector signed int,
   31253                                  vector unsigned char);
   31254      vector unsigned int vec_perm (vector unsigned int,
   31255                                    vector unsigned int,
   31256                                    vector unsigned char);
   31257      vector bool int vec_perm (vector bool int,
   31258                                vector bool int,
   31259                                vector unsigned char);
   31260      vector signed short vec_perm (vector signed short,
   31261                                    vector signed short,
   31262                                    vector unsigned char);
   31263      vector unsigned short vec_perm (vector unsigned short,
   31264                                      vector unsigned short,
   31265                                      vector unsigned char);
   31266      vector bool short vec_perm (vector bool short,
   31267                                  vector bool short,
   31268                                  vector unsigned char);
   31269      vector pixel vec_perm (vector pixel,
   31270                             vector pixel,
   31271                             vector unsigned char);
   31272      vector signed char vec_perm (vector signed char,
   31273                                   vector signed char,
   31274                                   vector unsigned char);
   31275      vector unsigned char vec_perm (vector unsigned char,
   31276                                     vector unsigned char,
   31277                                     vector unsigned char);
   31278      vector bool char vec_perm (vector bool char,
   31279                                 vector bool char,
   31280                                 vector unsigned char);
   31281 
   31282      vector float vec_re (vector float);
   31283 
   31284      vector signed char vec_rl (vector signed char,
   31285                                 vector unsigned char);
   31286      vector unsigned char vec_rl (vector unsigned char,
   31287                                   vector unsigned char);
   31288      vector signed short vec_rl (vector signed short, vector unsigned short);
   31289      vector unsigned short vec_rl (vector unsigned short,
   31290                                    vector unsigned short);
   31291      vector signed int vec_rl (vector signed int, vector unsigned int);
   31292      vector unsigned int vec_rl (vector unsigned int, vector unsigned int);
   31293 
   31294      vector signed int vec_vrlw (vector signed int, vector unsigned int);
   31295      vector unsigned int vec_vrlw (vector unsigned int, vector unsigned int);
   31296 
   31297      vector signed short vec_vrlh (vector signed short,
   31298                                    vector unsigned short);
   31299      vector unsigned short vec_vrlh (vector unsigned short,
   31300                                      vector unsigned short);
   31301 
   31302      vector signed char vec_vrlb (vector signed char, vector unsigned char);
   31303      vector unsigned char vec_vrlb (vector unsigned char,
   31304                                     vector unsigned char);
   31305 
   31306      vector float vec_round (vector float);
   31307 
   31308      vector float vec_rsqrte (vector float);
   31309 
   31310      vector float vec_sel (vector float, vector float, vector bool int);
   31311      vector float vec_sel (vector float, vector float, vector unsigned int);
   31312      vector signed int vec_sel (vector signed int,
   31313                                 vector signed int,
   31314                                 vector bool int);
   31315      vector signed int vec_sel (vector signed int,
   31316                                 vector signed int,
   31317                                 vector unsigned int);
   31318      vector unsigned int vec_sel (vector unsigned int,
   31319                                   vector unsigned int,
   31320                                   vector bool int);
   31321      vector unsigned int vec_sel (vector unsigned int,
   31322                                   vector unsigned int,
   31323                                   vector unsigned int);
   31324      vector bool int vec_sel (vector bool int,
   31325                               vector bool int,
   31326                               vector bool int);
   31327      vector bool int vec_sel (vector bool int,
   31328                               vector bool int,
   31329                               vector unsigned int);
   31330      vector signed short vec_sel (vector signed short,
   31331                                   vector signed short,
   31332                                   vector bool short);
   31333      vector signed short vec_sel (vector signed short,
   31334                                   vector signed short,
   31335                                   vector unsigned short);
   31336      vector unsigned short vec_sel (vector unsigned short,
   31337                                     vector unsigned short,
   31338                                     vector bool short);
   31339      vector unsigned short vec_sel (vector unsigned short,
   31340                                     vector unsigned short,
   31341                                     vector unsigned short);
   31342      vector bool short vec_sel (vector bool short,
   31343                                 vector bool short,
   31344                                 vector bool short);
   31345      vector bool short vec_sel (vector bool short,
   31346                                 vector bool short,
   31347                                 vector unsigned short);
   31348      vector signed char vec_sel (vector signed char,
   31349                                  vector signed char,
   31350                                  vector bool char);
   31351      vector signed char vec_sel (vector signed char,
   31352                                  vector signed char,
   31353                                  vector unsigned char);
   31354      vector unsigned char vec_sel (vector unsigned char,
   31355                                    vector unsigned char,
   31356                                    vector bool char);
   31357      vector unsigned char vec_sel (vector unsigned char,
   31358                                    vector unsigned char,
   31359                                    vector unsigned char);
   31360      vector bool char vec_sel (vector bool char,
   31361                                vector bool char,
   31362                                vector bool char);
   31363      vector bool char vec_sel (vector bool char,
   31364                                vector bool char,
   31365                                vector unsigned char);
   31366 
   31367      vector signed char vec_sl (vector signed char,
   31368                                 vector unsigned char);
   31369      vector unsigned char vec_sl (vector unsigned char,
   31370                                   vector unsigned char);
   31371      vector signed short vec_sl (vector signed short, vector unsigned short);
   31372      vector unsigned short vec_sl (vector unsigned short,
   31373                                    vector unsigned short);
   31374      vector signed int vec_sl (vector signed int, vector unsigned int);
   31375      vector unsigned int vec_sl (vector unsigned int, vector unsigned int);
   31376 
   31377      vector signed int vec_vslw (vector signed int, vector unsigned int);
   31378      vector unsigned int vec_vslw (vector unsigned int, vector unsigned int);
   31379 
   31380      vector signed short vec_vslh (vector signed short,
   31381                                    vector unsigned short);
   31382      vector unsigned short vec_vslh (vector unsigned short,
   31383                                      vector unsigned short);
   31384 
   31385      vector signed char vec_vslb (vector signed char, vector unsigned char);
   31386      vector unsigned char vec_vslb (vector unsigned char,
   31387                                     vector unsigned char);
   31388 
   31389      vector float vec_sld (vector float, vector float, const int);
   31390      vector signed int vec_sld (vector signed int,
   31391                                 vector signed int,
   31392                                 const int);
   31393      vector unsigned int vec_sld (vector unsigned int,
   31394                                   vector unsigned int,
   31395                                   const int);
   31396      vector bool int vec_sld (vector bool int,
   31397                               vector bool int,
   31398                               const int);
   31399      vector signed short vec_sld (vector signed short,
   31400                                   vector signed short,
   31401                                   const int);
   31402      vector unsigned short vec_sld (vector unsigned short,
   31403                                     vector unsigned short,
   31404                                     const int);
   31405      vector bool short vec_sld (vector bool short,
   31406                                 vector bool short,
   31407                                 const int);
   31408      vector pixel vec_sld (vector pixel,
   31409                            vector pixel,
   31410                            const int);
   31411      vector signed char vec_sld (vector signed char,
   31412                                  vector signed char,
   31413                                  const int);
   31414      vector unsigned char vec_sld (vector unsigned char,
   31415                                    vector unsigned char,
   31416                                    const int);
   31417      vector bool char vec_sld (vector bool char,
   31418                                vector bool char,
   31419                                const int);
   31420 
   31421      vector signed int vec_sll (vector signed int,
   31422                                 vector unsigned int);
   31423      vector signed int vec_sll (vector signed int,
   31424                                 vector unsigned short);
   31425      vector signed int vec_sll (vector signed int,
   31426                                 vector unsigned char);
   31427      vector unsigned int vec_sll (vector unsigned int,
   31428                                   vector unsigned int);
   31429      vector unsigned int vec_sll (vector unsigned int,
   31430                                   vector unsigned short);
   31431      vector unsigned int vec_sll (vector unsigned int,
   31432                                   vector unsigned char);
   31433      vector bool int vec_sll (vector bool int,
   31434                               vector unsigned int);
   31435      vector bool int vec_sll (vector bool int,
   31436                               vector unsigned short);
   31437      vector bool int vec_sll (vector bool int,
   31438                               vector unsigned char);
   31439      vector signed short vec_sll (vector signed short,
   31440                                   vector unsigned int);
   31441      vector signed short vec_sll (vector signed short,
   31442                                   vector unsigned short);
   31443      vector signed short vec_sll (vector signed short,
   31444                                   vector unsigned char);
   31445      vector unsigned short vec_sll (vector unsigned short,
   31446                                     vector unsigned int);
   31447      vector unsigned short vec_sll (vector unsigned short,
   31448                                     vector unsigned short);
   31449      vector unsigned short vec_sll (vector unsigned short,
   31450                                     vector unsigned char);
   31451      vector bool short vec_sll (vector bool short, vector unsigned int);
   31452      vector bool short vec_sll (vector bool short, vector unsigned short);
   31453      vector bool short vec_sll (vector bool short, vector unsigned char);
   31454      vector pixel vec_sll (vector pixel, vector unsigned int);
   31455      vector pixel vec_sll (vector pixel, vector unsigned short);
   31456      vector pixel vec_sll (vector pixel, vector unsigned char);
   31457      vector signed char vec_sll (vector signed char, vector unsigned int);
   31458      vector signed char vec_sll (vector signed char, vector unsigned short);
   31459      vector signed char vec_sll (vector signed char, vector unsigned char);
   31460      vector unsigned char vec_sll (vector unsigned char,
   31461                                    vector unsigned int);
   31462      vector unsigned char vec_sll (vector unsigned char,
   31463                                    vector unsigned short);
   31464      vector unsigned char vec_sll (vector unsigned char,
   31465                                    vector unsigned char);
   31466      vector bool char vec_sll (vector bool char, vector unsigned int);
   31467      vector bool char vec_sll (vector bool char, vector unsigned short);
   31468      vector bool char vec_sll (vector bool char, vector unsigned char);
   31469 
   31470      vector float vec_slo (vector float, vector signed char);
   31471      vector float vec_slo (vector float, vector unsigned char);
   31472      vector signed int vec_slo (vector signed int, vector signed char);
   31473      vector signed int vec_slo (vector signed int, vector unsigned char);
   31474      vector unsigned int vec_slo (vector unsigned int, vector signed char);
   31475      vector unsigned int vec_slo (vector unsigned int, vector unsigned char);
   31476      vector signed short vec_slo (vector signed short, vector signed char);
   31477      vector signed short vec_slo (vector signed short, vector unsigned char);
   31478      vector unsigned short vec_slo (vector unsigned short,
   31479                                     vector signed char);
   31480      vector unsigned short vec_slo (vector unsigned short,
   31481                                     vector unsigned char);
   31482      vector pixel vec_slo (vector pixel, vector signed char);
   31483      vector pixel vec_slo (vector pixel, vector unsigned char);
   31484      vector signed char vec_slo (vector signed char, vector signed char);
   31485      vector signed char vec_slo (vector signed char, vector unsigned char);
   31486      vector unsigned char vec_slo (vector unsigned char, vector signed char);
   31487      vector unsigned char vec_slo (vector unsigned char,
   31488                                    vector unsigned char);
   31489 
   31490      vector signed char vec_splat (vector signed char, const int);
   31491      vector unsigned char vec_splat (vector unsigned char, const int);
   31492      vector bool char vec_splat (vector bool char, const int);
   31493      vector signed short vec_splat (vector signed short, const int);
   31494      vector unsigned short vec_splat (vector unsigned short, const int);
   31495      vector bool short vec_splat (vector bool short, const int);
   31496      vector pixel vec_splat (vector pixel, const int);
   31497      vector float vec_splat (vector float, const int);
   31498      vector signed int vec_splat (vector signed int, const int);
   31499      vector unsigned int vec_splat (vector unsigned int, const int);
   31500      vector bool int vec_splat (vector bool int, const int);
   31501 
   31502      vector float vec_vspltw (vector float, const int);
   31503      vector signed int vec_vspltw (vector signed int, const int);
   31504      vector unsigned int vec_vspltw (vector unsigned int, const int);
   31505      vector bool int vec_vspltw (vector bool int, const int);
   31506 
   31507      vector bool short vec_vsplth (vector bool short, const int);
   31508      vector signed short vec_vsplth (vector signed short, const int);
   31509      vector unsigned short vec_vsplth (vector unsigned short, const int);
   31510      vector pixel vec_vsplth (vector pixel, const int);
   31511 
   31512      vector signed char vec_vspltb (vector signed char, const int);
   31513      vector unsigned char vec_vspltb (vector unsigned char, const int);
   31514      vector bool char vec_vspltb (vector bool char, const int);
   31515 
   31516      vector signed char vec_splat_s8 (const int);
   31517 
   31518      vector signed short vec_splat_s16 (const int);
   31519 
   31520      vector signed int vec_splat_s32 (const int);
   31521 
   31522      vector unsigned char vec_splat_u8 (const int);
   31523 
   31524      vector unsigned short vec_splat_u16 (const int);
   31525 
   31526      vector unsigned int vec_splat_u32 (const int);
   31527 
   31528      vector signed char vec_sr (vector signed char, vector unsigned char);
   31529      vector unsigned char vec_sr (vector unsigned char,
   31530                                   vector unsigned char);
   31531      vector signed short vec_sr (vector signed short,
   31532                                  vector unsigned short);
   31533      vector unsigned short vec_sr (vector unsigned short,
   31534                                    vector unsigned short);
   31535      vector signed int vec_sr (vector signed int, vector unsigned int);
   31536      vector unsigned int vec_sr (vector unsigned int, vector unsigned int);
   31537 
   31538      vector signed int vec_vsrw (vector signed int, vector unsigned int);
   31539      vector unsigned int vec_vsrw (vector unsigned int, vector unsigned int);
   31540 
   31541      vector signed short vec_vsrh (vector signed short,
   31542                                    vector unsigned short);
   31543      vector unsigned short vec_vsrh (vector unsigned short,
   31544                                      vector unsigned short);
   31545 
   31546      vector signed char vec_vsrb (vector signed char, vector unsigned char);
   31547      vector unsigned char vec_vsrb (vector unsigned char,
   31548                                     vector unsigned char);
   31549 
   31550      vector signed char vec_sra (vector signed char, vector unsigned char);
   31551      vector unsigned char vec_sra (vector unsigned char,
   31552                                    vector unsigned char);
   31553      vector signed short vec_sra (vector signed short,
   31554                                   vector unsigned short);
   31555      vector unsigned short vec_sra (vector unsigned short,
   31556                                     vector unsigned short);
   31557      vector signed int vec_sra (vector signed int, vector unsigned int);
   31558      vector unsigned int vec_sra (vector unsigned int, vector unsigned int);
   31559 
   31560      vector signed int vec_vsraw (vector signed int, vector unsigned int);
   31561      vector unsigned int vec_vsraw (vector unsigned int,
   31562                                     vector unsigned int);
   31563 
   31564      vector signed short vec_vsrah (vector signed short,
   31565                                     vector unsigned short);
   31566      vector unsigned short vec_vsrah (vector unsigned short,
   31567                                       vector unsigned short);
   31568 
   31569      vector signed char vec_vsrab (vector signed char, vector unsigned char);
   31570      vector unsigned char vec_vsrab (vector unsigned char,
   31571                                      vector unsigned char);
   31572 
   31573      vector signed int vec_srl (vector signed int, vector unsigned int);
   31574      vector signed int vec_srl (vector signed int, vector unsigned short);
   31575      vector signed int vec_srl (vector signed int, vector unsigned char);
   31576      vector unsigned int vec_srl (vector unsigned int, vector unsigned int);
   31577      vector unsigned int vec_srl (vector unsigned int,
   31578                                   vector unsigned short);
   31579      vector unsigned int vec_srl (vector unsigned int, vector unsigned char);
   31580      vector bool int vec_srl (vector bool int, vector unsigned int);
   31581      vector bool int vec_srl (vector bool int, vector unsigned short);
   31582      vector bool int vec_srl (vector bool int, vector unsigned char);
   31583      vector signed short vec_srl (vector signed short, vector unsigned int);
   31584      vector signed short vec_srl (vector signed short,
   31585                                   vector unsigned short);
   31586      vector signed short vec_srl (vector signed short, vector unsigned char);
   31587      vector unsigned short vec_srl (vector unsigned short,
   31588                                     vector unsigned int);
   31589      vector unsigned short vec_srl (vector unsigned short,
   31590                                     vector unsigned short);
   31591      vector unsigned short vec_srl (vector unsigned short,
   31592                                     vector unsigned char);
   31593      vector bool short vec_srl (vector bool short, vector unsigned int);
   31594      vector bool short vec_srl (vector bool short, vector unsigned short);
   31595      vector bool short vec_srl (vector bool short, vector unsigned char);
   31596      vector pixel vec_srl (vector pixel, vector unsigned int);
   31597      vector pixel vec_srl (vector pixel, vector unsigned short);
   31598      vector pixel vec_srl (vector pixel, vector unsigned char);
   31599      vector signed char vec_srl (vector signed char, vector unsigned int);
   31600      vector signed char vec_srl (vector signed char, vector unsigned short);
   31601      vector signed char vec_srl (vector signed char, vector unsigned char);
   31602      vector unsigned char vec_srl (vector unsigned char,
   31603                                    vector unsigned int);
   31604      vector unsigned char vec_srl (vector unsigned char,
   31605                                    vector unsigned short);
   31606      vector unsigned char vec_srl (vector unsigned char,
   31607                                    vector unsigned char);
   31608      vector bool char vec_srl (vector bool char, vector unsigned int);
   31609      vector bool char vec_srl (vector bool char, vector unsigned short);
   31610      vector bool char vec_srl (vector bool char, vector unsigned char);
   31611 
   31612      vector float vec_sro (vector float, vector signed char);
   31613      vector float vec_sro (vector float, vector unsigned char);
   31614      vector signed int vec_sro (vector signed int, vector signed char);
   31615      vector signed int vec_sro (vector signed int, vector unsigned char);
   31616      vector unsigned int vec_sro (vector unsigned int, vector signed char);
   31617      vector unsigned int vec_sro (vector unsigned int, vector unsigned char);
   31618      vector signed short vec_sro (vector signed short, vector signed char);
   31619      vector signed short vec_sro (vector signed short, vector unsigned char);
   31620      vector unsigned short vec_sro (vector unsigned short,
   31621                                     vector signed char);
   31622      vector unsigned short vec_sro (vector unsigned short,
   31623                                     vector unsigned char);
   31624      vector pixel vec_sro (vector pixel, vector signed char);
   31625      vector pixel vec_sro (vector pixel, vector unsigned char);
   31626      vector signed char vec_sro (vector signed char, vector signed char);
   31627      vector signed char vec_sro (vector signed char, vector unsigned char);
   31628      vector unsigned char vec_sro (vector unsigned char, vector signed char);
   31629      vector unsigned char vec_sro (vector unsigned char,
   31630                                    vector unsigned char);
   31631 
   31632      void vec_st (vector float, int, vector float *);
   31633      void vec_st (vector float, int, float *);
   31634      void vec_st (vector signed int, int, vector signed int *);
   31635      void vec_st (vector signed int, int, int *);
   31636      void vec_st (vector unsigned int, int, vector unsigned int *);
   31637      void vec_st (vector unsigned int, int, unsigned int *);
   31638      void vec_st (vector bool int, int, vector bool int *);
   31639      void vec_st (vector bool int, int, unsigned int *);
   31640      void vec_st (vector bool int, int, int *);
   31641      void vec_st (vector signed short, int, vector signed short *);
   31642      void vec_st (vector signed short, int, short *);
   31643      void vec_st (vector unsigned short, int, vector unsigned short *);
   31644      void vec_st (vector unsigned short, int, unsigned short *);
   31645      void vec_st (vector bool short, int, vector bool short *);
   31646      void vec_st (vector bool short, int, unsigned short *);
   31647      void vec_st (vector pixel, int, vector pixel *);
   31648      void vec_st (vector pixel, int, unsigned short *);
   31649      void vec_st (vector pixel, int, short *);
   31650      void vec_st (vector bool short, int, short *);
   31651      void vec_st (vector signed char, int, vector signed char *);
   31652      void vec_st (vector signed char, int, signed char *);
   31653      void vec_st (vector unsigned char, int, vector unsigned char *);
   31654      void vec_st (vector unsigned char, int, unsigned char *);
   31655      void vec_st (vector bool char, int, vector bool char *);
   31656      void vec_st (vector bool char, int, unsigned char *);
   31657      void vec_st (vector bool char, int, signed char *);
   31658 
   31659      void vec_ste (vector signed char, int, signed char *);
   31660      void vec_ste (vector unsigned char, int, unsigned char *);
   31661      void vec_ste (vector bool char, int, signed char *);
   31662      void vec_ste (vector bool char, int, unsigned char *);
   31663      void vec_ste (vector signed short, int, short *);
   31664      void vec_ste (vector unsigned short, int, unsigned short *);
   31665      void vec_ste (vector bool short, int, short *);
   31666      void vec_ste (vector bool short, int, unsigned short *);
   31667      void vec_ste (vector pixel, int, short *);
   31668      void vec_ste (vector pixel, int, unsigned short *);
   31669      void vec_ste (vector float, int, float *);
   31670      void vec_ste (vector signed int, int, int *);
   31671      void vec_ste (vector unsigned int, int, unsigned int *);
   31672      void vec_ste (vector bool int, int, int *);
   31673      void vec_ste (vector bool int, int, unsigned int *);
   31674 
   31675      void vec_stvewx (vector float, int, float *);
   31676      void vec_stvewx (vector signed int, int, int *);
   31677      void vec_stvewx (vector unsigned int, int, unsigned int *);
   31678      void vec_stvewx (vector bool int, int, int *);
   31679      void vec_stvewx (vector bool int, int, unsigned int *);
   31680 
   31681      void vec_stvehx (vector signed short, int, short *);
   31682      void vec_stvehx (vector unsigned short, int, unsigned short *);
   31683      void vec_stvehx (vector bool short, int, short *);
   31684      void vec_stvehx (vector bool short, int, unsigned short *);
   31685      void vec_stvehx (vector pixel, int, short *);
   31686      void vec_stvehx (vector pixel, int, unsigned short *);
   31687 
   31688      void vec_stvebx (vector signed char, int, signed char *);
   31689      void vec_stvebx (vector unsigned char, int, unsigned char *);
   31690      void vec_stvebx (vector bool char, int, signed char *);
   31691      void vec_stvebx (vector bool char, int, unsigned char *);
   31692 
   31693      void vec_stl (vector float, int, vector float *);
   31694      void vec_stl (vector float, int, float *);
   31695      void vec_stl (vector signed int, int, vector signed int *);
   31696      void vec_stl (vector signed int, int, int *);
   31697      void vec_stl (vector unsigned int, int, vector unsigned int *);
   31698      void vec_stl (vector unsigned int, int, unsigned int *);
   31699      void vec_stl (vector bool int, int, vector bool int *);
   31700      void vec_stl (vector bool int, int, unsigned int *);
   31701      void vec_stl (vector bool int, int, int *);
   31702      void vec_stl (vector signed short, int, vector signed short *);
   31703      void vec_stl (vector signed short, int, short *);
   31704      void vec_stl (vector unsigned short, int, vector unsigned short *);
   31705      void vec_stl (vector unsigned short, int, unsigned short *);
   31706      void vec_stl (vector bool short, int, vector bool short *);
   31707      void vec_stl (vector bool short, int, unsigned short *);
   31708      void vec_stl (vector bool short, int, short *);
   31709      void vec_stl (vector pixel, int, vector pixel *);
   31710      void vec_stl (vector pixel, int, unsigned short *);
   31711      void vec_stl (vector pixel, int, short *);
   31712      void vec_stl (vector signed char, int, vector signed char *);
   31713      void vec_stl (vector signed char, int, signed char *);
   31714      void vec_stl (vector unsigned char, int, vector unsigned char *);
   31715      void vec_stl (vector unsigned char, int, unsigned char *);
   31716      void vec_stl (vector bool char, int, vector bool char *);
   31717      void vec_stl (vector bool char, int, unsigned char *);
   31718      void vec_stl (vector bool char, int, signed char *);
   31719 
   31720      vector signed char vec_sub (vector bool char, vector signed char);
   31721      vector signed char vec_sub (vector signed char, vector bool char);
   31722      vector signed char vec_sub (vector signed char, vector signed char);
   31723      vector unsigned char vec_sub (vector bool char, vector unsigned char);
   31724      vector unsigned char vec_sub (vector unsigned char, vector bool char);
   31725      vector unsigned char vec_sub (vector unsigned char,
   31726                                    vector unsigned char);
   31727      vector signed short vec_sub (vector bool short, vector signed short);
   31728      vector signed short vec_sub (vector signed short, vector bool short);
   31729      vector signed short vec_sub (vector signed short, vector signed short);
   31730      vector unsigned short vec_sub (vector bool short,
   31731                                     vector unsigned short);
   31732      vector unsigned short vec_sub (vector unsigned short,
   31733                                     vector bool short);
   31734      vector unsigned short vec_sub (vector unsigned short,
   31735                                     vector unsigned short);
   31736      vector signed int vec_sub (vector bool int, vector signed int);
   31737      vector signed int vec_sub (vector signed int, vector bool int);
   31738      vector signed int vec_sub (vector signed int, vector signed int);
   31739      vector unsigned int vec_sub (vector bool int, vector unsigned int);
   31740      vector unsigned int vec_sub (vector unsigned int, vector bool int);
   31741      vector unsigned int vec_sub (vector unsigned int, vector unsigned int);
   31742      vector float vec_sub (vector float, vector float);
   31743 
   31744      vector float vec_vsubfp (vector float, vector float);
   31745 
   31746      vector signed int vec_vsubuwm (vector bool int, vector signed int);
   31747      vector signed int vec_vsubuwm (vector signed int, vector bool int);
   31748      vector signed int vec_vsubuwm (vector signed int, vector signed int);
   31749      vector unsigned int vec_vsubuwm (vector bool int, vector unsigned int);
   31750      vector unsigned int vec_vsubuwm (vector unsigned int, vector bool int);
   31751      vector unsigned int vec_vsubuwm (vector unsigned int,
   31752                                       vector unsigned int);
   31753 
   31754      vector signed short vec_vsubuhm (vector bool short,
   31755                                       vector signed short);
   31756      vector signed short vec_vsubuhm (vector signed short,
   31757                                       vector bool short);
   31758      vector signed short vec_vsubuhm (vector signed short,
   31759                                       vector signed short);
   31760      vector unsigned short vec_vsubuhm (vector bool short,
   31761                                         vector unsigned short);
   31762      vector unsigned short vec_vsubuhm (vector unsigned short,
   31763                                         vector bool short);
   31764      vector unsigned short vec_vsubuhm (vector unsigned short,
   31765                                         vector unsigned short);
   31766 
   31767      vector signed char vec_vsububm (vector bool char, vector signed char);
   31768      vector signed char vec_vsububm (vector signed char, vector bool char);
   31769      vector signed char vec_vsububm (vector signed char, vector signed char);
   31770      vector unsigned char vec_vsububm (vector bool char,
   31771                                        vector unsigned char);
   31772      vector unsigned char vec_vsububm (vector unsigned char,
   31773                                        vector bool char);
   31774      vector unsigned char vec_vsububm (vector unsigned char,
   31775                                        vector unsigned char);
   31776 
   31777      vector unsigned int vec_subc (vector unsigned int, vector unsigned int);
   31778 
   31779      vector unsigned char vec_subs (vector bool char, vector unsigned char);
   31780      vector unsigned char vec_subs (vector unsigned char, vector bool char);
   31781      vector unsigned char vec_subs (vector unsigned char,
   31782                                     vector unsigned char);
   31783      vector signed char vec_subs (vector bool char, vector signed char);
   31784      vector signed char vec_subs (vector signed char, vector bool char);
   31785      vector signed char vec_subs (vector signed char, vector signed char);
   31786      vector unsigned short vec_subs (vector bool short,
   31787                                      vector unsigned short);
   31788      vector unsigned short vec_subs (vector unsigned short,
   31789                                      vector bool short);
   31790      vector unsigned short vec_subs (vector unsigned short,
   31791                                      vector unsigned short);
   31792      vector signed short vec_subs (vector bool short, vector signed short);
   31793      vector signed short vec_subs (vector signed short, vector bool short);
   31794      vector signed short vec_subs (vector signed short, vector signed short);
   31795      vector unsigned int vec_subs (vector bool int, vector unsigned int);
   31796      vector unsigned int vec_subs (vector unsigned int, vector bool int);
   31797      vector unsigned int vec_subs (vector unsigned int, vector unsigned int);
   31798      vector signed int vec_subs (vector bool int, vector signed int);
   31799      vector signed int vec_subs (vector signed int, vector bool int);
   31800      vector signed int vec_subs (vector signed int, vector signed int);
   31801 
   31802      vector signed int vec_vsubsws (vector bool int, vector signed int);
   31803      vector signed int vec_vsubsws (vector signed int, vector bool int);
   31804      vector signed int vec_vsubsws (vector signed int, vector signed int);
   31805 
   31806      vector unsigned int vec_vsubuws (vector bool int, vector unsigned int);
   31807      vector unsigned int vec_vsubuws (vector unsigned int, vector bool int);
   31808      vector unsigned int vec_vsubuws (vector unsigned int,
   31809                                       vector unsigned int);
   31810 
   31811      vector signed short vec_vsubshs (vector bool short,
   31812                                       vector signed short);
   31813      vector signed short vec_vsubshs (vector signed short,
   31814                                       vector bool short);
   31815      vector signed short vec_vsubshs (vector signed short,
   31816                                       vector signed short);
   31817 
   31818      vector unsigned short vec_vsubuhs (vector bool short,
   31819                                         vector unsigned short);
   31820      vector unsigned short vec_vsubuhs (vector unsigned short,
   31821                                         vector bool short);
   31822      vector unsigned short vec_vsubuhs (vector unsigned short,
   31823                                         vector unsigned short);
   31824 
   31825      vector signed char vec_vsubsbs (vector bool char, vector signed char);
   31826      vector signed char vec_vsubsbs (vector signed char, vector bool char);
   31827      vector signed char vec_vsubsbs (vector signed char, vector signed char);
   31828 
   31829      vector unsigned char vec_vsububs (vector bool char,
   31830                                        vector unsigned char);
   31831      vector unsigned char vec_vsububs (vector unsigned char,
   31832                                        vector bool char);
   31833      vector unsigned char vec_vsububs (vector unsigned char,
   31834                                        vector unsigned char);
   31835 
   31836      vector unsigned int vec_sum4s (vector unsigned char,
   31837                                     vector unsigned int);
   31838      vector signed int vec_sum4s (vector signed char, vector signed int);
   31839      vector signed int vec_sum4s (vector signed short, vector signed int);
   31840 
   31841      vector signed int vec_vsum4shs (vector signed short, vector signed int);
   31842 
   31843      vector signed int vec_vsum4sbs (vector signed char, vector signed int);
   31844 
   31845      vector unsigned int vec_vsum4ubs (vector unsigned char,
   31846                                        vector unsigned int);
   31847 
   31848      vector signed int vec_sum2s (vector signed int, vector signed int);
   31849 
   31850      vector signed int vec_sums (vector signed int, vector signed int);
   31851 
   31852      vector float vec_trunc (vector float);
   31853 
   31854      vector signed short vec_unpackh (vector signed char);
   31855      vector bool short vec_unpackh (vector bool char);
   31856      vector signed int vec_unpackh (vector signed short);
   31857      vector bool int vec_unpackh (vector bool short);
   31858      vector unsigned int vec_unpackh (vector pixel);
   31859 
   31860      vector bool int vec_vupkhsh (vector bool short);
   31861      vector signed int vec_vupkhsh (vector signed short);
   31862 
   31863      vector unsigned int vec_vupkhpx (vector pixel);
   31864 
   31865      vector bool short vec_vupkhsb (vector bool char);
   31866      vector signed short vec_vupkhsb (vector signed char);
   31867 
   31868      vector signed short vec_unpackl (vector signed char);
   31869      vector bool short vec_unpackl (vector bool char);
   31870      vector unsigned int vec_unpackl (vector pixel);
   31871      vector signed int vec_unpackl (vector signed short);
   31872      vector bool int vec_unpackl (vector bool short);
   31873 
   31874      vector unsigned int vec_vupklpx (vector pixel);
   31875 
   31876      vector bool int vec_vupklsh (vector bool short);
   31877      vector signed int vec_vupklsh (vector signed short);
   31878 
   31879      vector bool short vec_vupklsb (vector bool char);
   31880      vector signed short vec_vupklsb (vector signed char);
   31881 
   31882      vector float vec_xor (vector float, vector float);
   31883      vector float vec_xor (vector float, vector bool int);
   31884      vector float vec_xor (vector bool int, vector float);
   31885      vector bool int vec_xor (vector bool int, vector bool int);
   31886      vector signed int vec_xor (vector bool int, vector signed int);
   31887      vector signed int vec_xor (vector signed int, vector bool int);
   31888      vector signed int vec_xor (vector signed int, vector signed int);
   31889      vector unsigned int vec_xor (vector bool int, vector unsigned int);
   31890      vector unsigned int vec_xor (vector unsigned int, vector bool int);
   31891      vector unsigned int vec_xor (vector unsigned int, vector unsigned int);
   31892      vector bool short vec_xor (vector bool short, vector bool short);
   31893      vector signed short vec_xor (vector bool short, vector signed short);
   31894      vector signed short vec_xor (vector signed short, vector bool short);
   31895      vector signed short vec_xor (vector signed short, vector signed short);
   31896      vector unsigned short vec_xor (vector bool short,
   31897                                     vector unsigned short);
   31898      vector unsigned short vec_xor (vector unsigned short,
   31899                                     vector bool short);
   31900      vector unsigned short vec_xor (vector unsigned short,
   31901                                     vector unsigned short);
   31902      vector signed char vec_xor (vector bool char, vector signed char);
   31903      vector bool char vec_xor (vector bool char, vector bool char);
   31904      vector signed char vec_xor (vector signed char, vector bool char);
   31905      vector signed char vec_xor (vector signed char, vector signed char);
   31906      vector unsigned char vec_xor (vector bool char, vector unsigned char);
   31907      vector unsigned char vec_xor (vector unsigned char, vector bool char);
   31908      vector unsigned char vec_xor (vector unsigned char,
   31909                                    vector unsigned char);
   31910 
   31911      int vec_all_eq (vector signed char, vector bool char);
   31912      int vec_all_eq (vector signed char, vector signed char);
   31913      int vec_all_eq (vector unsigned char, vector bool char);
   31914      int vec_all_eq (vector unsigned char, vector unsigned char);
   31915      int vec_all_eq (vector bool char, vector bool char);
   31916      int vec_all_eq (vector bool char, vector unsigned char);
   31917      int vec_all_eq (vector bool char, vector signed char);
   31918      int vec_all_eq (vector signed short, vector bool short);
   31919      int vec_all_eq (vector signed short, vector signed short);
   31920      int vec_all_eq (vector unsigned short, vector bool short);
   31921      int vec_all_eq (vector unsigned short, vector unsigned short);
   31922      int vec_all_eq (vector bool short, vector bool short);
   31923      int vec_all_eq (vector bool short, vector unsigned short);
   31924      int vec_all_eq (vector bool short, vector signed short);
   31925      int vec_all_eq (vector pixel, vector pixel);
   31926      int vec_all_eq (vector signed int, vector bool int);
   31927      int vec_all_eq (vector signed int, vector signed int);
   31928      int vec_all_eq (vector unsigned int, vector bool int);
   31929      int vec_all_eq (vector unsigned int, vector unsigned int);
   31930      int vec_all_eq (vector bool int, vector bool int);
   31931      int vec_all_eq (vector bool int, vector unsigned int);
   31932      int vec_all_eq (vector bool int, vector signed int);
   31933      int vec_all_eq (vector float, vector float);
   31934 
   31935      int vec_all_ge (vector bool char, vector unsigned char);
   31936      int vec_all_ge (vector unsigned char, vector bool char);
   31937      int vec_all_ge (vector unsigned char, vector unsigned char);
   31938      int vec_all_ge (vector bool char, vector signed char);
   31939      int vec_all_ge (vector signed char, vector bool char);
   31940      int vec_all_ge (vector signed char, vector signed char);
   31941      int vec_all_ge (vector bool short, vector unsigned short);
   31942      int vec_all_ge (vector unsigned short, vector bool short);
   31943      int vec_all_ge (vector unsigned short, vector unsigned short);
   31944      int vec_all_ge (vector signed short, vector signed short);
   31945      int vec_all_ge (vector bool short, vector signed short);
   31946      int vec_all_ge (vector signed short, vector bool short);
   31947      int vec_all_ge (vector bool int, vector unsigned int);
   31948      int vec_all_ge (vector unsigned int, vector bool int);
   31949      int vec_all_ge (vector unsigned int, vector unsigned int);
   31950      int vec_all_ge (vector bool int, vector signed int);
   31951      int vec_all_ge (vector signed int, vector bool int);
   31952      int vec_all_ge (vector signed int, vector signed int);
   31953      int vec_all_ge (vector float, vector float);
   31954 
   31955      int vec_all_gt (vector bool char, vector unsigned char);
   31956      int vec_all_gt (vector unsigned char, vector bool char);
   31957      int vec_all_gt (vector unsigned char, vector unsigned char);
   31958      int vec_all_gt (vector bool char, vector signed char);
   31959      int vec_all_gt (vector signed char, vector bool char);
   31960      int vec_all_gt (vector signed char, vector signed char);
   31961      int vec_all_gt (vector bool short, vector unsigned short);
   31962      int vec_all_gt (vector unsigned short, vector bool short);
   31963      int vec_all_gt (vector unsigned short, vector unsigned short);
   31964      int vec_all_gt (vector bool short, vector signed short);
   31965      int vec_all_gt (vector signed short, vector bool short);
   31966      int vec_all_gt (vector signed short, vector signed short);
   31967      int vec_all_gt (vector bool int, vector unsigned int);
   31968      int vec_all_gt (vector unsigned int, vector bool int);
   31969      int vec_all_gt (vector unsigned int, vector unsigned int);
   31970      int vec_all_gt (vector bool int, vector signed int);
   31971      int vec_all_gt (vector signed int, vector bool int);
   31972      int vec_all_gt (vector signed int, vector signed int);
   31973      int vec_all_gt (vector float, vector float);
   31974 
   31975      int vec_all_in (vector float, vector float);
   31976 
   31977      int vec_all_le (vector bool char, vector unsigned char);
   31978      int vec_all_le (vector unsigned char, vector bool char);
   31979      int vec_all_le (vector unsigned char, vector unsigned char);
   31980      int vec_all_le (vector bool char, vector signed char);
   31981      int vec_all_le (vector signed char, vector bool char);
   31982      int vec_all_le (vector signed char, vector signed char);
   31983      int vec_all_le (vector bool short, vector unsigned short);
   31984      int vec_all_le (vector unsigned short, vector bool short);
   31985      int vec_all_le (vector unsigned short, vector unsigned short);
   31986      int vec_all_le (vector bool short, vector signed short);
   31987      int vec_all_le (vector signed short, vector bool short);
   31988      int vec_all_le (vector signed short, vector signed short);
   31989      int vec_all_le (vector bool int, vector unsigned int);
   31990      int vec_all_le (vector unsigned int, vector bool int);
   31991      int vec_all_le (vector unsigned int, vector unsigned int);
   31992      int vec_all_le (vector bool int, vector signed int);
   31993      int vec_all_le (vector signed int, vector bool int);
   31994      int vec_all_le (vector signed int, vector signed int);
   31995      int vec_all_le (vector float, vector float);
   31996 
   31997      int vec_all_lt (vector bool char, vector unsigned char);
   31998      int vec_all_lt (vector unsigned char, vector bool char);
   31999      int vec_all_lt (vector unsigned char, vector unsigned char);
   32000      int vec_all_lt (vector bool char, vector signed char);
   32001      int vec_all_lt (vector signed char, vector bool char);
   32002      int vec_all_lt (vector signed char, vector signed char);
   32003      int vec_all_lt (vector bool short, vector unsigned short);
   32004      int vec_all_lt (vector unsigned short, vector bool short);
   32005      int vec_all_lt (vector unsigned short, vector unsigned short);
   32006      int vec_all_lt (vector bool short, vector signed short);
   32007      int vec_all_lt (vector signed short, vector bool short);
   32008      int vec_all_lt (vector signed short, vector signed short);
   32009      int vec_all_lt (vector bool int, vector unsigned int);
   32010      int vec_all_lt (vector unsigned int, vector bool int);
   32011      int vec_all_lt (vector unsigned int, vector unsigned int);
   32012      int vec_all_lt (vector bool int, vector signed int);
   32013      int vec_all_lt (vector signed int, vector bool int);
   32014      int vec_all_lt (vector signed int, vector signed int);
   32015      int vec_all_lt (vector float, vector float);
   32016 
   32017      int vec_all_nan (vector float);
   32018 
   32019      int vec_all_ne (vector signed char, vector bool char);
   32020      int vec_all_ne (vector signed char, vector signed char);
   32021      int vec_all_ne (vector unsigned char, vector bool char);
   32022      int vec_all_ne (vector unsigned char, vector unsigned char);
   32023      int vec_all_ne (vector bool char, vector bool char);
   32024      int vec_all_ne (vector bool char, vector unsigned char);
   32025      int vec_all_ne (vector bool char, vector signed char);
   32026      int vec_all_ne (vector signed short, vector bool short);
   32027      int vec_all_ne (vector signed short, vector signed short);
   32028      int vec_all_ne (vector unsigned short, vector bool short);
   32029      int vec_all_ne (vector unsigned short, vector unsigned short);
   32030      int vec_all_ne (vector bool short, vector bool short);
   32031      int vec_all_ne (vector bool short, vector unsigned short);
   32032      int vec_all_ne (vector bool short, vector signed short);
   32033      int vec_all_ne (vector pixel, vector pixel);
   32034      int vec_all_ne (vector signed int, vector bool int);
   32035      int vec_all_ne (vector signed int, vector signed int);
   32036      int vec_all_ne (vector unsigned int, vector bool int);
   32037      int vec_all_ne (vector unsigned int, vector unsigned int);
   32038      int vec_all_ne (vector bool int, vector bool int);
   32039      int vec_all_ne (vector bool int, vector unsigned int);
   32040      int vec_all_ne (vector bool int, vector signed int);
   32041      int vec_all_ne (vector float, vector float);
   32042 
   32043      int vec_all_nge (vector float, vector float);
   32044 
   32045      int vec_all_ngt (vector float, vector float);
   32046 
   32047      int vec_all_nle (vector float, vector float);
   32048 
   32049      int vec_all_nlt (vector float, vector float);
   32050 
   32051      int vec_all_numeric (vector float);
   32052 
   32053      int vec_any_eq (vector signed char, vector bool char);
   32054      int vec_any_eq (vector signed char, vector signed char);
   32055      int vec_any_eq (vector unsigned char, vector bool char);
   32056      int vec_any_eq (vector unsigned char, vector unsigned char);
   32057      int vec_any_eq (vector bool char, vector bool char);
   32058      int vec_any_eq (vector bool char, vector unsigned char);
   32059      int vec_any_eq (vector bool char, vector signed char);
   32060      int vec_any_eq (vector signed short, vector bool short);
   32061      int vec_any_eq (vector signed short, vector signed short);
   32062      int vec_any_eq (vector unsigned short, vector bool short);
   32063      int vec_any_eq (vector unsigned short, vector unsigned short);
   32064      int vec_any_eq (vector bool short, vector bool short);
   32065      int vec_any_eq (vector bool short, vector unsigned short);
   32066      int vec_any_eq (vector bool short, vector signed short);
   32067      int vec_any_eq (vector pixel, vector pixel);
   32068      int vec_any_eq (vector signed int, vector bool int);
   32069      int vec_any_eq (vector signed int, vector signed int);
   32070      int vec_any_eq (vector unsigned int, vector bool int);
   32071      int vec_any_eq (vector unsigned int, vector unsigned int);
   32072      int vec_any_eq (vector bool int, vector bool int);
   32073      int vec_any_eq (vector bool int, vector unsigned int);
   32074      int vec_any_eq (vector bool int, vector signed int);
   32075      int vec_any_eq (vector float, vector float);
   32076 
   32077      int vec_any_ge (vector signed char, vector bool char);
   32078      int vec_any_ge (vector unsigned char, vector bool char);
   32079      int vec_any_ge (vector unsigned char, vector unsigned char);
   32080      int vec_any_ge (vector signed char, vector signed char);
   32081      int vec_any_ge (vector bool char, vector unsigned char);
   32082      int vec_any_ge (vector bool char, vector signed char);
   32083      int vec_any_ge (vector unsigned short, vector bool short);
   32084      int vec_any_ge (vector unsigned short, vector unsigned short);
   32085      int vec_any_ge (vector signed short, vector signed short);
   32086      int vec_any_ge (vector signed short, vector bool short);
   32087      int vec_any_ge (vector bool short, vector unsigned short);
   32088      int vec_any_ge (vector bool short, vector signed short);
   32089      int vec_any_ge (vector signed int, vector bool int);
   32090      int vec_any_ge (vector unsigned int, vector bool int);
   32091      int vec_any_ge (vector unsigned int, vector unsigned int);
   32092      int vec_any_ge (vector signed int, vector signed int);
   32093      int vec_any_ge (vector bool int, vector unsigned int);
   32094      int vec_any_ge (vector bool int, vector signed int);
   32095      int vec_any_ge (vector float, vector float);
   32096 
   32097      int vec_any_gt (vector bool char, vector unsigned char);
   32098      int vec_any_gt (vector unsigned char, vector bool char);
   32099      int vec_any_gt (vector unsigned char, vector unsigned char);
   32100      int vec_any_gt (vector bool char, vector signed char);
   32101      int vec_any_gt (vector signed char, vector bool char);
   32102      int vec_any_gt (vector signed char, vector signed char);
   32103      int vec_any_gt (vector bool short, vector unsigned short);
   32104      int vec_any_gt (vector unsigned short, vector bool short);
   32105      int vec_any_gt (vector unsigned short, vector unsigned short);
   32106      int vec_any_gt (vector bool short, vector signed short);
   32107      int vec_any_gt (vector signed short, vector bool short);
   32108      int vec_any_gt (vector signed short, vector signed short);
   32109      int vec_any_gt (vector bool int, vector unsigned int);
   32110      int vec_any_gt (vector unsigned int, vector bool int);
   32111      int vec_any_gt (vector unsigned int, vector unsigned int);
   32112      int vec_any_gt (vector bool int, vector signed int);
   32113      int vec_any_gt (vector signed int, vector bool int);
   32114      int vec_any_gt (vector signed int, vector signed int);
   32115      int vec_any_gt (vector float, vector float);
   32116 
   32117      int vec_any_le (vector bool char, vector unsigned char);
   32118      int vec_any_le (vector unsigned char, vector bool char);
   32119      int vec_any_le (vector unsigned char, vector unsigned char);
   32120      int vec_any_le (vector bool char, vector signed char);
   32121      int vec_any_le (vector signed char, vector bool char);
   32122      int vec_any_le (vector signed char, vector signed char);
   32123      int vec_any_le (vector bool short, vector unsigned short);
   32124      int vec_any_le (vector unsigned short, vector bool short);
   32125      int vec_any_le (vector unsigned short, vector unsigned short);
   32126      int vec_any_le (vector bool short, vector signed short);
   32127      int vec_any_le (vector signed short, vector bool short);
   32128      int vec_any_le (vector signed short, vector signed short);
   32129      int vec_any_le (vector bool int, vector unsigned int);
   32130      int vec_any_le (vector unsigned int, vector bool int);
   32131      int vec_any_le (vector unsigned int, vector unsigned int);
   32132      int vec_any_le (vector bool int, vector signed int);
   32133      int vec_any_le (vector signed int, vector bool int);
   32134      int vec_any_le (vector signed int, vector signed int);
   32135      int vec_any_le (vector float, vector float);
   32136 
   32137      int vec_any_lt (vector bool char, vector unsigned char);
   32138      int vec_any_lt (vector unsigned char, vector bool char);
   32139      int vec_any_lt (vector unsigned char, vector unsigned char);
   32140      int vec_any_lt (vector bool char, vector signed char);
   32141      int vec_any_lt (vector signed char, vector bool char);
   32142      int vec_any_lt (vector signed char, vector signed char);
   32143      int vec_any_lt (vector bool short, vector unsigned short);
   32144      int vec_any_lt (vector unsigned short, vector bool short);
   32145      int vec_any_lt (vector unsigned short, vector unsigned short);
   32146      int vec_any_lt (vector bool short, vector signed short);
   32147      int vec_any_lt (vector signed short, vector bool short);
   32148      int vec_any_lt (vector signed short, vector signed short);
   32149      int vec_any_lt (vector bool int, vector unsigned int);
   32150      int vec_any_lt (vector unsigned int, vector bool int);
   32151      int vec_any_lt (vector unsigned int, vector unsigned int);
   32152      int vec_any_lt (vector bool int, vector signed int);
   32153      int vec_any_lt (vector signed int, vector bool int);
   32154      int vec_any_lt (vector signed int, vector signed int);
   32155      int vec_any_lt (vector float, vector float);
   32156 
   32157      int vec_any_nan (vector float);
   32158 
   32159      int vec_any_ne (vector signed char, vector bool char);
   32160      int vec_any_ne (vector signed char, vector signed char);
   32161      int vec_any_ne (vector unsigned char, vector bool char);
   32162      int vec_any_ne (vector unsigned char, vector unsigned char);
   32163      int vec_any_ne (vector bool char, vector bool char);
   32164      int vec_any_ne (vector bool char, vector unsigned char);
   32165      int vec_any_ne (vector bool char, vector signed char);
   32166      int vec_any_ne (vector signed short, vector bool short);
   32167      int vec_any_ne (vector signed short, vector signed short);
   32168      int vec_any_ne (vector unsigned short, vector bool short);
   32169      int vec_any_ne (vector unsigned short, vector unsigned short);
   32170      int vec_any_ne (vector bool short, vector bool short);
   32171      int vec_any_ne (vector bool short, vector unsigned short);
   32172      int vec_any_ne (vector bool short, vector signed short);
   32173      int vec_any_ne (vector pixel, vector pixel);
   32174      int vec_any_ne (vector signed int, vector bool int);
   32175      int vec_any_ne (vector signed int, vector signed int);
   32176      int vec_any_ne (vector unsigned int, vector bool int);
   32177      int vec_any_ne (vector unsigned int, vector unsigned int);
   32178      int vec_any_ne (vector bool int, vector bool int);
   32179      int vec_any_ne (vector bool int, vector unsigned int);
   32180      int vec_any_ne (vector bool int, vector signed int);
   32181      int vec_any_ne (vector float, vector float);
   32182 
   32183      int vec_any_nge (vector float, vector float);
   32184 
   32185      int vec_any_ngt (vector float, vector float);
   32186 
   32187      int vec_any_nle (vector float, vector float);
   32188 
   32189      int vec_any_nlt (vector float, vector float);
   32190 
   32191      int vec_any_numeric (vector float);
   32192 
   32193      int vec_any_out (vector float, vector float);
   32194 
   32195 
   32196 File: gcc.info,  Node: SPARC VIS Built-in Functions,  Next: SPU Built-in Functions,  Prev: PowerPC AltiVec Built-in Functions,  Up: Target Builtins
   32197 
   32198 5.50.10 SPARC VIS Built-in Functions
   32199 ------------------------------------
   32200 
   32201 GCC supports SIMD operations on the SPARC using both the generic vector
   32202 extensions (*note Vector Extensions::) as well as built-in functions for
   32203 the SPARC Visual Instruction Set (VIS).  When you use the `-mvis'
   32204 switch, the VIS extension is exposed as the following built-in
   32205 functions:
   32206 
   32207      typedef int v2si __attribute__ ((vector_size (8)));
   32208      typedef short v4hi __attribute__ ((vector_size (8)));
   32209      typedef short v2hi __attribute__ ((vector_size (4)));
   32210      typedef char v8qi __attribute__ ((vector_size (8)));
   32211      typedef char v4qi __attribute__ ((vector_size (4)));
   32212 
   32213      void * __builtin_vis_alignaddr (void *, long);
   32214      int64_t __builtin_vis_faligndatadi (int64_t, int64_t);
   32215      v2si __builtin_vis_faligndatav2si (v2si, v2si);
   32216      v4hi __builtin_vis_faligndatav4hi (v4si, v4si);
   32217      v8qi __builtin_vis_faligndatav8qi (v8qi, v8qi);
   32218 
   32219      v4hi __builtin_vis_fexpand (v4qi);
   32220 
   32221      v4hi __builtin_vis_fmul8x16 (v4qi, v4hi);
   32222      v4hi __builtin_vis_fmul8x16au (v4qi, v4hi);
   32223      v4hi __builtin_vis_fmul8x16al (v4qi, v4hi);
   32224      v4hi __builtin_vis_fmul8sux16 (v8qi, v4hi);
   32225      v4hi __builtin_vis_fmul8ulx16 (v8qi, v4hi);
   32226      v2si __builtin_vis_fmuld8sux16 (v4qi, v2hi);
   32227      v2si __builtin_vis_fmuld8ulx16 (v4qi, v2hi);
   32228 
   32229      v4qi __builtin_vis_fpack16 (v4hi);
   32230      v8qi __builtin_vis_fpack32 (v2si, v2si);
   32231      v2hi __builtin_vis_fpackfix (v2si);
   32232      v8qi __builtin_vis_fpmerge (v4qi, v4qi);
   32233 
   32234      int64_t __builtin_vis_pdist (v8qi, v8qi, int64_t);
   32235 
   32236 
   32237 File: gcc.info,  Node: SPU Built-in Functions,  Prev: SPARC VIS Built-in Functions,  Up: Target Builtins
   32238 
   32239 5.50.11 SPU Built-in Functions
   32240 ------------------------------
   32241 
   32242 GCC provides extensions for the SPU processor as described in the
   32243 Sony/Toshiba/IBM SPU Language Extensions Specification, which can be
   32244 found at `http://cell.scei.co.jp/' or
   32245 `http://www.ibm.com/developerworks/power/cell/'.  GCC's implementation
   32246 differs in several ways.
   32247 
   32248    * The optional extension of specifying vector constants in
   32249      parentheses is not supported.
   32250 
   32251    * A vector initializer requires no cast if the vector constant is of
   32252      the same type as the variable it is initializing.
   32253 
   32254    * If `signed' or `unsigned' is omitted, the signedness of the vector
   32255      type is the default signedness of the base type.  The default
   32256      varies depending on the operating system, so a portable program
   32257      should always specify the signedness.
   32258 
   32259    * By default, the keyword `__vector' is added. The macro `vector' is
   32260      defined in `<spu_intrinsics.h>' and can be undefined.
   32261 
   32262    * GCC allows using a `typedef' name as the type specifier for a
   32263      vector type.
   32264 
   32265    * For C, overloaded functions are implemented with macros so the
   32266      following does not work:
   32267 
   32268             spu_add ((vector signed int){1, 2, 3, 4}, foo);
   32269 
   32270      Since `spu_add' is a macro, the vector constant in the example is
   32271      treated as four separate arguments.  Wrap the entire argument in
   32272      parentheses for this to work.
   32273 
   32274    * The extended version of `__builtin_expect' is not supported.
   32275 
   32276 
   32277  _Note:_ Only the interface described in the aforementioned
   32278 specification is supported. Internally, GCC uses built-in functions to
   32279 implement the required functionality, but these are not supported and
   32280 are subject to change without notice.
   32281 
   32282 
   32283 File: gcc.info,  Node: Target Format Checks,  Next: Pragmas,  Prev: Target Builtins,  Up: C Extensions
   32284 
   32285 5.51 Format Checks Specific to Particular Target Machines
   32286 =========================================================
   32287 
   32288 For some target machines, GCC supports additional options to the format
   32289 attribute (*note Declaring Attributes of Functions: Function
   32290 Attributes.).
   32291 
   32292 * Menu:
   32293 
   32294 * Solaris Format Checks::
   32295 
   32296 
   32297 File: gcc.info,  Node: Solaris Format Checks,  Up: Target Format Checks
   32298 
   32299 5.51.1 Solaris Format Checks
   32300 ----------------------------
   32301 
   32302 Solaris targets support the `cmn_err' (or `__cmn_err__') format check.
   32303 `cmn_err' accepts a subset of the standard `printf' conversions, and
   32304 the two-argument `%b' conversion for displaying bit-fields.  See the
   32305 Solaris man page for `cmn_err' for more information.
   32306 
   32307 
   32308 File: gcc.info,  Node: Pragmas,  Next: Unnamed Fields,  Prev: Target Format Checks,  Up: C Extensions
   32309 
   32310 5.52 Pragmas Accepted by GCC
   32311 ============================
   32312 
   32313 GCC supports several types of pragmas, primarily in order to compile
   32314 code originally written for other compilers.  Note that in general we
   32315 do not recommend the use of pragmas; *Note Function Attributes::, for
   32316 further explanation.
   32317 
   32318 * Menu:
   32319 
   32320 * ARM Pragmas::
   32321 * M32C Pragmas::
   32322 * RS/6000 and PowerPC Pragmas::
   32323 * Darwin Pragmas::
   32324 * Solaris Pragmas::
   32325 * Symbol-Renaming Pragmas::
   32326 * Structure-Packing Pragmas::
   32327 * Weak Pragmas::
   32328 * Diagnostic Pragmas::
   32329 * Visibility Pragmas::
   32330 
   32331 
   32332 File: gcc.info,  Node: ARM Pragmas,  Next: M32C Pragmas,  Up: Pragmas
   32333 
   32334 5.52.1 ARM Pragmas
   32335 ------------------
   32336 
   32337 The ARM target defines pragmas for controlling the default addition of
   32338 `long_call' and `short_call' attributes to functions.  *Note Function
   32339 Attributes::, for information about the effects of these attributes.
   32340 
   32341 `long_calls'
   32342      Set all subsequent functions to have the `long_call' attribute.
   32343 
   32344 `no_long_calls'
   32345      Set all subsequent functions to have the `short_call' attribute.
   32346 
   32347 `long_calls_off'
   32348      Do not affect the `long_call' or `short_call' attributes of
   32349      subsequent functions.
   32350 
   32351 
   32352 File: gcc.info,  Node: M32C Pragmas,  Next: RS/6000 and PowerPC Pragmas,  Prev: ARM Pragmas,  Up: Pragmas
   32353 
   32354 5.52.2 M32C Pragmas
   32355 -------------------
   32356 
   32357 `memregs NUMBER'
   32358      Overrides the command line option `-memregs=' for the current
   32359      file.  Use with care!  This pragma must be before any function in
   32360      the file, and mixing different memregs values in different objects
   32361      may make them incompatible.  This pragma is useful when a
   32362      performance-critical function uses a memreg for temporary values,
   32363      as it may allow you to reduce the number of memregs used.
   32364 
   32365 
   32366 
   32367 File: gcc.info,  Node: RS/6000 and PowerPC Pragmas,  Next: Darwin Pragmas,  Prev: M32C Pragmas,  Up: Pragmas
   32368 
   32369 5.52.3 RS/6000 and PowerPC Pragmas
   32370 ----------------------------------
   32371 
   32372 The RS/6000 and PowerPC targets define one pragma for controlling
   32373 whether or not the `longcall' attribute is added to function
   32374 declarations by default.  This pragma overrides the `-mlongcall'
   32375 option, but not the `longcall' and `shortcall' attributes.  *Note
   32376 RS/6000 and PowerPC Options::, for more information about when long
   32377 calls are and are not necessary.
   32378 
   32379 `longcall (1)'
   32380      Apply the `longcall' attribute to all subsequent function
   32381      declarations.
   32382 
   32383 `longcall (0)'
   32384      Do not apply the `longcall' attribute to subsequent function
   32385      declarations.
   32386 
   32387 
   32388 File: gcc.info,  Node: Darwin Pragmas,  Next: Solaris Pragmas,  Prev: RS/6000 and PowerPC Pragmas,  Up: Pragmas
   32389 
   32390 5.52.4 Darwin Pragmas
   32391 ---------------------
   32392 
   32393 The following pragmas are available for all architectures running the
   32394 Darwin operating system.  These are useful for compatibility with other
   32395 Mac OS compilers.
   32396 
   32397 `mark TOKENS...'
   32398      This pragma is accepted, but has no effect.
   32399 
   32400 `options align=ALIGNMENT'
   32401      This pragma sets the alignment of fields in structures.  The
   32402      values of ALIGNMENT may be `mac68k', to emulate m68k alignment, or
   32403      `power', to emulate PowerPC alignment.  Uses of this pragma nest
   32404      properly; to restore the previous setting, use `reset' for the
   32405      ALIGNMENT.
   32406 
   32407 `segment TOKENS...'
   32408      This pragma is accepted, but has no effect.
   32409 
   32410 `unused (VAR [, VAR]...)'
   32411      This pragma declares variables to be possibly unused.  GCC will not
   32412      produce warnings for the listed variables.  The effect is similar
   32413      to that of the `unused' attribute, except that this pragma may
   32414      appear anywhere within the variables' scopes.
   32415 
   32416 
   32417 File: gcc.info,  Node: Solaris Pragmas,  Next: Symbol-Renaming Pragmas,  Prev: Darwin Pragmas,  Up: Pragmas
   32418 
   32419 5.52.5 Solaris Pragmas
   32420 ----------------------
   32421 
   32422 The Solaris target supports `#pragma redefine_extname' (*note
   32423 Symbol-Renaming Pragmas::).  It also supports additional `#pragma'
   32424 directives for compatibility with the system compiler.
   32425 
   32426 `align ALIGNMENT (VARIABLE [, VARIABLE]...)'
   32427      Increase the minimum alignment of each VARIABLE to ALIGNMENT.
   32428      This is the same as GCC's `aligned' attribute *note Variable
   32429      Attributes::).  Macro expansion occurs on the arguments to this
   32430      pragma when compiling C and Objective-C.  It does not currently
   32431      occur when compiling C++, but this is a bug which may be fixed in
   32432      a future release.
   32433 
   32434 `fini (FUNCTION [, FUNCTION]...)'
   32435      This pragma causes each listed FUNCTION to be called after main,
   32436      or during shared module unloading, by adding a call to the `.fini'
   32437      section.
   32438 
   32439 `init (FUNCTION [, FUNCTION]...)'
   32440      This pragma causes each listed FUNCTION to be called during
   32441      initialization (before `main') or during shared module loading, by
   32442      adding a call to the `.init' section.
   32443 
   32444 
   32445 
   32446 File: gcc.info,  Node: Symbol-Renaming Pragmas,  Next: Structure-Packing Pragmas,  Prev: Solaris Pragmas,  Up: Pragmas
   32447 
   32448 5.52.6 Symbol-Renaming Pragmas
   32449 ------------------------------
   32450 
   32451 For compatibility with the Solaris and Tru64 UNIX system headers, GCC
   32452 supports two `#pragma' directives which change the name used in
   32453 assembly for a given declaration.  These pragmas are only available on
   32454 platforms whose system headers need them.  To get this effect on all
   32455 platforms supported by GCC, use the asm labels extension (*note Asm
   32456 Labels::).
   32457 
   32458 `redefine_extname OLDNAME NEWNAME'
   32459      This pragma gives the C function OLDNAME the assembly symbol
   32460      NEWNAME.  The preprocessor macro `__PRAGMA_REDEFINE_EXTNAME' will
   32461      be defined if this pragma is available (currently only on Solaris).
   32462 
   32463 `extern_prefix STRING'
   32464      This pragma causes all subsequent external function and variable
   32465      declarations to have STRING prepended to their assembly symbols.
   32466      This effect may be terminated with another `extern_prefix' pragma
   32467      whose argument is an empty string.  The preprocessor macro
   32468      `__PRAGMA_EXTERN_PREFIX' will be defined if this pragma is
   32469      available (currently only on Tru64 UNIX).
   32470 
   32471  These pragmas and the asm labels extension interact in a complicated
   32472 manner.  Here are some corner cases you may want to be aware of.
   32473 
   32474   1. Both pragmas silently apply only to declarations with external
   32475      linkage.  Asm labels do not have this restriction.
   32476 
   32477   2. In C++, both pragmas silently apply only to declarations with "C"
   32478      linkage.  Again, asm labels do not have this restriction.
   32479 
   32480   3. If any of the three ways of changing the assembly name of a
   32481      declaration is applied to a declaration whose assembly name has
   32482      already been determined (either by a previous use of one of these
   32483      features, or because the compiler needed the assembly name in
   32484      order to generate code), and the new name is different, a warning
   32485      issues and the name does not change.
   32486 
   32487   4. The OLDNAME used by `#pragma redefine_extname' is always the
   32488      C-language name.
   32489 
   32490   5. If `#pragma extern_prefix' is in effect, and a declaration occurs
   32491      with an asm label attached, the prefix is silently ignored for
   32492      that declaration.
   32493 
   32494   6. If `#pragma extern_prefix' and `#pragma redefine_extname' apply to
   32495      the same declaration, whichever triggered first wins, and a
   32496      warning issues if they contradict each other.  (We would like to
   32497      have `#pragma redefine_extname' always win, for consistency with
   32498      asm labels, but if `#pragma extern_prefix' triggers first we have
   32499      no way of knowing that that happened.)
   32500 
   32501 
   32502 File: gcc.info,  Node: Structure-Packing Pragmas,  Next: Weak Pragmas,  Prev: Symbol-Renaming Pragmas,  Up: Pragmas
   32503 
   32504 5.52.7 Structure-Packing Pragmas
   32505 --------------------------------
   32506 
   32507 For compatibility with Win32, GCC supports a set of `#pragma'
   32508 directives which change the maximum alignment of members of structures
   32509 (other than zero-width bitfields), unions, and classes subsequently
   32510 defined.  The N value below always is required to be a small power of
   32511 two and specifies the new alignment in bytes.
   32512 
   32513   1. `#pragma pack(N)' simply sets the new alignment.
   32514 
   32515   2. `#pragma pack()' sets the alignment to the one that was in effect
   32516      when compilation started (see also command line option
   32517      `-fpack-struct[=<n>]' *note Code Gen Options::).
   32518 
   32519   3. `#pragma pack(push[,N])' pushes the current alignment setting on
   32520      an internal stack and then optionally sets the new alignment.
   32521 
   32522   4. `#pragma pack(pop)' restores the alignment setting to the one
   32523      saved at the top of the internal stack (and removes that stack
   32524      entry).  Note that `#pragma pack([N])' does not influence this
   32525      internal stack; thus it is possible to have `#pragma pack(push)'
   32526      followed by multiple `#pragma pack(N)' instances and finalized by
   32527      a single `#pragma pack(pop)'.
   32528 
   32529  Some targets, e.g. i386 and powerpc, support the `ms_struct' `#pragma'
   32530 which lays out a structure as the documented `__attribute__
   32531 ((ms_struct))'.
   32532   1. `#pragma ms_struct on' turns on the layout for structures declared.
   32533 
   32534   2. `#pragma ms_struct off' turns off the layout for structures
   32535      declared.
   32536 
   32537   3. `#pragma ms_struct reset' goes back to the default layout.
   32538 
   32539 
   32540 File: gcc.info,  Node: Weak Pragmas,  Next: Diagnostic Pragmas,  Prev: Structure-Packing Pragmas,  Up: Pragmas
   32541 
   32542 5.52.8 Weak Pragmas
   32543 -------------------
   32544 
   32545 For compatibility with SVR4, GCC supports a set of `#pragma' directives
   32546 for declaring symbols to be weak, and defining weak aliases.
   32547 
   32548 `#pragma weak SYMBOL'
   32549      This pragma declares SYMBOL to be weak, as if the declaration had
   32550      the attribute of the same name.  The pragma may appear before or
   32551      after the declaration of SYMBOL, but must appear before either its
   32552      first use or its definition.  It is not an error for SYMBOL to
   32553      never be defined at all.
   32554 
   32555 `#pragma weak SYMBOL1 = SYMBOL2'
   32556      This pragma declares SYMBOL1 to be a weak alias of SYMBOL2.  It is
   32557      an error if SYMBOL2 is not defined in the current translation unit.
   32558 
   32559 
   32560 File: gcc.info,  Node: Diagnostic Pragmas,  Next: Visibility Pragmas,  Prev: Weak Pragmas,  Up: Pragmas
   32561 
   32562 5.52.9 Diagnostic Pragmas
   32563 -------------------------
   32564 
   32565 GCC allows the user to selectively enable or disable certain types of
   32566 diagnostics, and change the kind of the diagnostic.  For example, a
   32567 project's policy might require that all sources compile with `-Werror'
   32568 but certain files might have exceptions allowing specific types of
   32569 warnings.  Or, a project might selectively enable diagnostics and treat
   32570 them as errors depending on which preprocessor macros are defined.
   32571 
   32572 `#pragma GCC diagnostic KIND OPTION'
   32573      Modifies the disposition of a diagnostic.  Note that not all
   32574      diagnostics are modifiable; at the moment only warnings (normally
   32575      controlled by `-W...') can be controlled, and not all of them.
   32576      Use `-fdiagnostics-show-option' to determine which diagnostics are
   32577      controllable and which option controls them.
   32578 
   32579      KIND is `error' to treat this diagnostic as an error, `warning' to
   32580      treat it like a warning (even if `-Werror' is in effect), or
   32581      `ignored' if the diagnostic is to be ignored.  OPTION is a double
   32582      quoted string which matches the command line option.
   32583 
   32584           #pragma GCC diagnostic warning "-Wformat"
   32585           #pragma GCC diagnostic error "-Wformat"
   32586           #pragma GCC diagnostic ignored "-Wformat"
   32587 
   32588      Note that these pragmas override any command line options.  Also,
   32589      while it is syntactically valid to put these pragmas anywhere in
   32590      your sources, the only supported location for them is before any
   32591      data or functions are defined.  Doing otherwise may result in
   32592      unpredictable results depending on how the optimizer manages your
   32593      sources.  If the same option is listed multiple times, the last
   32594      one specified is the one that is in effect.  This pragma is not
   32595      intended to be a general purpose replacement for command line
   32596      options, but for implementing strict control over project policies.
   32597 
   32598 
   32599 
   32600 File: gcc.info,  Node: Visibility Pragmas,  Prev: Diagnostic Pragmas,  Up: Pragmas
   32601 
   32602 5.52.10 Visibility Pragmas
   32603 --------------------------
   32604 
   32605 `#pragma GCC visibility push(VISIBILITY)'
   32606 `#pragma GCC visibility pop'
   32607      This pragma allows the user to set the visibility for multiple
   32608      declarations without having to give each a visibility attribute
   32609      *Note Function Attributes::, for more information about visibility
   32610      and the attribute syntax.
   32611 
   32612      In C++, `#pragma GCC visibility' affects only namespace-scope
   32613      declarations.  Class members and template specializations are not
   32614      affected; if you want to override the visibility for a particular
   32615      member or instantiation, you must use an attribute.
   32616 
   32617 
   32618 
   32619 File: gcc.info,  Node: Unnamed Fields,  Next: Thread-Local,  Prev: Pragmas,  Up: C Extensions
   32620 
   32621 5.53 Unnamed struct/union fields within structs/unions
   32622 ======================================================
   32623 
   32624 For compatibility with other compilers, GCC allows you to define a
   32625 structure or union that contains, as fields, structures and unions
   32626 without names.  For example:
   32627 
   32628      struct {
   32629        int a;
   32630        union {
   32631          int b;
   32632          float c;
   32633        };
   32634        int d;
   32635      } foo;
   32636 
   32637  In this example, the user would be able to access members of the
   32638 unnamed union with code like `foo.b'.  Note that only unnamed structs
   32639 and unions are allowed, you may not have, for example, an unnamed `int'.
   32640 
   32641  You must never create such structures that cause ambiguous field
   32642 definitions.  For example, this structure:
   32643 
   32644      struct {
   32645        int a;
   32646        struct {
   32647          int a;
   32648        };
   32649      } foo;
   32650 
   32651  It is ambiguous which `a' is being referred to with `foo.a'.  Such
   32652 constructs are not supported and must be avoided.  In the future, such
   32653 constructs may be detected and treated as compilation errors.
   32654 
   32655  Unless `-fms-extensions' is used, the unnamed field must be a
   32656 structure or union definition without a tag (for example, `struct { int
   32657 a; };').  If `-fms-extensions' is used, the field may also be a
   32658 definition with a tag such as `struct foo { int a; };', a reference to
   32659 a previously defined structure or union such as `struct foo;', or a
   32660 reference to a `typedef' name for a previously defined structure or
   32661 union type.
   32662 
   32663 
   32664 File: gcc.info,  Node: Thread-Local,  Next: Binary constants,  Prev: Unnamed Fields,  Up: C Extensions
   32665 
   32666 5.54 Thread-Local Storage
   32667 =========================
   32668 
   32669 Thread-local storage (TLS) is a mechanism by which variables are
   32670 allocated such that there is one instance of the variable per extant
   32671 thread.  The run-time model GCC uses to implement this originates in
   32672 the IA-64 processor-specific ABI, but has since been migrated to other
   32673 processors as well.  It requires significant support from the linker
   32674 (`ld'), dynamic linker (`ld.so'), and system libraries (`libc.so' and
   32675 `libpthread.so'), so it is not available everywhere.
   32676 
   32677  At the user level, the extension is visible with a new storage class
   32678 keyword: `__thread'.  For example:
   32679 
   32680      __thread int i;
   32681      extern __thread struct state s;
   32682      static __thread char *p;
   32683 
   32684  The `__thread' specifier may be used alone, with the `extern' or
   32685 `static' specifiers, but with no other storage class specifier.  When
   32686 used with `extern' or `static', `__thread' must appear immediately
   32687 after the other storage class specifier.
   32688 
   32689  The `__thread' specifier may be applied to any global, file-scoped
   32690 static, function-scoped static, or static data member of a class.  It
   32691 may not be applied to block-scoped automatic or non-static data member.
   32692 
   32693  When the address-of operator is applied to a thread-local variable, it
   32694 is evaluated at run-time and returns the address of the current thread's
   32695 instance of that variable.  An address so obtained may be used by any
   32696 thread.  When a thread terminates, any pointers to thread-local
   32697 variables in that thread become invalid.
   32698 
   32699  No static initialization may refer to the address of a thread-local
   32700 variable.
   32701 
   32702  In C++, if an initializer is present for a thread-local variable, it
   32703 must be a CONSTANT-EXPRESSION, as defined in 5.19.2 of the ANSI/ISO C++
   32704 standard.
   32705 
   32706  See ELF Handling For Thread-Local Storage
   32707 (http://people.redhat.com/drepper/tls.pdf) for a detailed explanation of
   32708 the four thread-local storage addressing models, and how the run-time
   32709 is expected to function.
   32710 
   32711 * Menu:
   32712 
   32713 * C99 Thread-Local Edits::
   32714 * C++98 Thread-Local Edits::
   32715 
   32716 
   32717 File: gcc.info,  Node: C99 Thread-Local Edits,  Next: C++98 Thread-Local Edits,  Up: Thread-Local
   32718 
   32719 5.54.1 ISO/IEC 9899:1999 Edits for Thread-Local Storage
   32720 -------------------------------------------------------
   32721 
   32722 The following are a set of changes to ISO/IEC 9899:1999 (aka C99) that
   32723 document the exact semantics of the language extension.
   32724 
   32725    * `5.1.2  Execution environments'
   32726 
   32727      Add new text after paragraph 1
   32728 
   32729           Within either execution environment, a "thread" is a flow of
   32730           control within a program.  It is implementation defined
   32731           whether or not there may be more than one thread associated
   32732           with a program.  It is implementation defined how threads
   32733           beyond the first are created, the name and type of the
   32734           function called at thread startup, and how threads may be
   32735           terminated.  However, objects with thread storage duration
   32736           shall be initialized before thread startup.
   32737 
   32738    * `6.2.4  Storage durations of objects'
   32739 
   32740      Add new text before paragraph 3
   32741 
   32742           An object whose identifier is declared with the storage-class
   32743           specifier `__thread' has "thread storage duration".  Its
   32744           lifetime is the entire execution of the thread, and its
   32745           stored value is initialized only once, prior to thread
   32746           startup.
   32747 
   32748    * `6.4.1  Keywords'
   32749 
   32750      Add `__thread'.
   32751 
   32752    * `6.7.1  Storage-class specifiers'
   32753 
   32754      Add `__thread' to the list of storage class specifiers in
   32755      paragraph 1.
   32756 
   32757      Change paragraph 2 to
   32758 
   32759           With the exception of `__thread', at most one storage-class
   32760           specifier may be given [...].  The `__thread' specifier may
   32761           be used alone, or immediately following `extern' or `static'.
   32762 
   32763      Add new text after paragraph 6
   32764 
   32765           The declaration of an identifier for a variable that has
   32766           block scope that specifies `__thread' shall also specify
   32767           either `extern' or `static'.
   32768 
   32769           The `__thread' specifier shall be used only with variables.
   32770 
   32771 
   32772 File: gcc.info,  Node: C++98 Thread-Local Edits,  Prev: C99 Thread-Local Edits,  Up: Thread-Local
   32773 
   32774 5.54.2 ISO/IEC 14882:1998 Edits for Thread-Local Storage
   32775 --------------------------------------------------------
   32776 
   32777 The following are a set of changes to ISO/IEC 14882:1998 (aka C++98)
   32778 that document the exact semantics of the language extension.
   32779 
   32780    * [intro.execution]
   32781 
   32782      New text after paragraph 4
   32783 
   32784           A "thread" is a flow of control within the abstract machine.
   32785           It is implementation defined whether or not there may be more
   32786           than one thread.
   32787 
   32788      New text after paragraph 7
   32789 
   32790           It is unspecified whether additional action must be taken to
   32791           ensure when and whether side effects are visible to other
   32792           threads.
   32793 
   32794    * [lex.key]
   32795 
   32796      Add `__thread'.
   32797 
   32798    * [basic.start.main]
   32799 
   32800      Add after paragraph 5
   32801 
   32802           The thread that begins execution at the `main' function is
   32803           called the "main thread".  It is implementation defined how
   32804           functions beginning threads other than the main thread are
   32805           designated or typed.  A function so designated, as well as
   32806           the `main' function, is called a "thread startup function".
   32807           It is implementation defined what happens if a thread startup
   32808           function returns.  It is implementation defined what happens
   32809           to other threads when any thread calls `exit'.
   32810 
   32811    * [basic.start.init]
   32812 
   32813      Add after paragraph 4
   32814 
   32815           The storage for an object of thread storage duration shall be
   32816           statically initialized before the first statement of the
   32817           thread startup function.  An object of thread storage
   32818           duration shall not require dynamic initialization.
   32819 
   32820    * [basic.start.term]
   32821 
   32822      Add after paragraph 3
   32823 
   32824           The type of an object with thread storage duration shall not
   32825           have a non-trivial destructor, nor shall it be an array type
   32826           whose elements (directly or indirectly) have non-trivial
   32827           destructors.
   32828 
   32829    * [basic.stc]
   32830 
   32831      Add "thread storage duration" to the list in paragraph 1.
   32832 
   32833      Change paragraph 2
   32834 
   32835           Thread, static, and automatic storage durations are
   32836           associated with objects introduced by declarations [...].
   32837 
   32838      Add `__thread' to the list of specifiers in paragraph 3.
   32839 
   32840    * [basic.stc.thread]
   32841 
   32842      New section before [basic.stc.static]
   32843 
   32844           The keyword `__thread' applied to a non-local object gives the
   32845           object thread storage duration.
   32846 
   32847           A local variable or class data member declared both `static'
   32848           and `__thread' gives the variable or member thread storage
   32849           duration.
   32850 
   32851    * [basic.stc.static]
   32852 
   32853      Change paragraph 1
   32854 
   32855           All objects which have neither thread storage duration,
   32856           dynamic storage duration nor are local [...].
   32857 
   32858    * [dcl.stc]
   32859 
   32860      Add `__thread' to the list in paragraph 1.
   32861 
   32862      Change paragraph 1
   32863 
   32864           With the exception of `__thread', at most one
   32865           STORAGE-CLASS-SPECIFIER shall appear in a given
   32866           DECL-SPECIFIER-SEQ.  The `__thread' specifier may be used
   32867           alone, or immediately following the `extern' or `static'
   32868           specifiers.  [...]
   32869 
   32870      Add after paragraph 5
   32871 
   32872           The `__thread' specifier can be applied only to the names of
   32873           objects and to anonymous unions.
   32874 
   32875    * [class.mem]
   32876 
   32877      Add after paragraph 6
   32878 
   32879           Non-`static' members shall not be `__thread'.
   32880 
   32881 
   32882 File: gcc.info,  Node: Binary constants,  Prev: Thread-Local,  Up: C Extensions
   32883 
   32884 5.55 Binary constants using the `0b' prefix
   32885 ===========================================
   32886 
   32887 Integer constants can be written as binary constants, consisting of a
   32888 sequence of `0' and `1' digits, prefixed by `0b' or `0B'.  This is
   32889 particularly useful in environments that operate a lot on the bit-level
   32890 (like microcontrollers).
   32891 
   32892  The following statements are identical:
   32893 
   32894      i =       42;
   32895      i =     0x2a;
   32896      i =      052;
   32897      i = 0b101010;
   32898 
   32899  The type of these constants follows the same rules as for octal or
   32900 hexadecimal integer constants, so suffixes like `L' or `UL' can be
   32901 applied.
   32902 
   32903 
   32904 File: gcc.info,  Node: C++ Extensions,  Next: Objective-C,  Prev: C Extensions,  Up: Top
   32905 
   32906 6 Extensions to the C++ Language
   32907 ********************************
   32908 
   32909 The GNU compiler provides these extensions to the C++ language (and you
   32910 can also use most of the C language extensions in your C++ programs).
   32911 If you want to write code that checks whether these features are
   32912 available, you can test for the GNU compiler the same way as for C
   32913 programs: check for a predefined macro `__GNUC__'.  You can also use
   32914 `__GNUG__' to test specifically for GNU C++ (*note Predefined Macros:
   32915 (cpp)Common Predefined Macros.).
   32916 
   32917 * Menu:
   32918 
   32919 * Volatiles::		What constitutes an access to a volatile object.
   32920 * Restricted Pointers:: C99 restricted pointers and references.
   32921 * Vague Linkage::       Where G++ puts inlines, vtables and such.
   32922 * C++ Interface::       You can use a single C++ header file for both
   32923                         declarations and definitions.
   32924 * Template Instantiation:: Methods for ensuring that exactly one copy of
   32925                         each needed template instantiation is emitted.
   32926 * Bound member functions:: You can extract a function pointer to the
   32927                         method denoted by a `->*' or `.*' expression.
   32928 * C++ Attributes::      Variable, function, and type attributes for C++ only.
   32929 * Namespace Association:: Strong using-directives for namespace association.
   32930 * Type Traits::         Compiler support for type traits
   32931 * Java Exceptions::     Tweaking exception handling to work with Java.
   32932 * Deprecated Features:: Things will disappear from g++.
   32933 * Backwards Compatibility:: Compatibilities with earlier definitions of C++.
   32934 
   32935 
   32936 File: gcc.info,  Node: Volatiles,  Next: Restricted Pointers,  Up: C++ Extensions
   32937 
   32938 6.1 When is a Volatile Object Accessed?
   32939 =======================================
   32940 
   32941 Both the C and C++ standard have the concept of volatile objects.  These
   32942 are normally accessed by pointers and used for accessing hardware.  The
   32943 standards encourage compilers to refrain from optimizations concerning
   32944 accesses to volatile objects.  The C standard leaves it implementation
   32945 defined  as to what constitutes a volatile access.  The C++ standard
   32946 omits to specify this, except to say that C++ should behave in a
   32947 similar manner to C with respect to volatiles, where possible.  The
   32948 minimum either standard specifies is that at a sequence point all
   32949 previous accesses to volatile objects have stabilized and no subsequent
   32950 accesses have occurred.  Thus an implementation is free to reorder and
   32951 combine volatile accesses which occur between sequence points, but
   32952 cannot do so for accesses across a sequence point.  The use of
   32953 volatiles does not allow you to violate the restriction on updating
   32954 objects multiple times within a sequence point.
   32955 
   32956  *Note Volatile qualifier and the C compiler: Qualifiers implementation.
   32957 
   32958  The behavior differs slightly between C and C++ in the non-obvious
   32959 cases:
   32960 
   32961      volatile int *src = SOMEVALUE;
   32962      *src;
   32963 
   32964  With C, such expressions are rvalues, and GCC interprets this either
   32965 as a read of the volatile object being pointed to or only as request to
   32966 evaluate the side-effects.  The C++ standard specifies that such
   32967 expressions do not undergo lvalue to rvalue conversion, and that the
   32968 type of the dereferenced object may be incomplete.  The C++ standard
   32969 does not specify explicitly that it is this lvalue to rvalue conversion
   32970 which may be responsible for causing an access.  However, there is
   32971 reason to believe that it is, because otherwise certain simple
   32972 expressions become undefined.  However, because it would surprise most
   32973 programmers, G++ treats dereferencing a pointer to volatile object of
   32974 complete type when the value is unused as GCC would do for an
   32975 equivalent type in C.  When the object has incomplete type, G++ issues
   32976 a warning; if you wish to force an error, you must force a conversion
   32977 to rvalue with, for instance, a static cast.
   32978 
   32979  When using a reference to volatile, G++ does not treat equivalent
   32980 expressions as accesses to volatiles, but instead issues a warning that
   32981 no volatile is accessed.  The rationale for this is that otherwise it
   32982 becomes difficult to determine where volatile access occur, and not
   32983 possible to ignore the return value from functions returning volatile
   32984 references.  Again, if you wish to force a read, cast the reference to
   32985 an rvalue.
   32986 
   32987 
   32988 File: gcc.info,  Node: Restricted Pointers,  Next: Vague Linkage,  Prev: Volatiles,  Up: C++ Extensions
   32989 
   32990 6.2 Restricting Pointer Aliasing
   32991 ================================
   32992 
   32993 As with the C front end, G++ understands the C99 feature of restricted
   32994 pointers, specified with the `__restrict__', or `__restrict' type
   32995 qualifier.  Because you cannot compile C++ by specifying the `-std=c99'
   32996 language flag, `restrict' is not a keyword in C++.
   32997 
   32998  In addition to allowing restricted pointers, you can specify restricted
   32999 references, which indicate that the reference is not aliased in the
   33000 local context.
   33001 
   33002      void fn (int *__restrict__ rptr, int &__restrict__ rref)
   33003      {
   33004        /* ... */
   33005      }
   33006 
   33007 In the body of `fn', RPTR points to an unaliased integer and RREF
   33008 refers to a (different) unaliased integer.
   33009 
   33010  You may also specify whether a member function's THIS pointer is
   33011 unaliased by using `__restrict__' as a member function qualifier.
   33012 
   33013      void T::fn () __restrict__
   33014      {
   33015        /* ... */
   33016      }
   33017 
   33018 Within the body of `T::fn', THIS will have the effective definition `T
   33019 *__restrict__ const this'.  Notice that the interpretation of a
   33020 `__restrict__' member function qualifier is different to that of
   33021 `const' or `volatile' qualifier, in that it is applied to the pointer
   33022 rather than the object.  This is consistent with other compilers which
   33023 implement restricted pointers.
   33024 
   33025  As with all outermost parameter qualifiers, `__restrict__' is ignored
   33026 in function definition matching.  This means you only need to specify
   33027 `__restrict__' in a function definition, rather than in a function
   33028 prototype as well.
   33029 
   33030 
   33031 File: gcc.info,  Node: Vague Linkage,  Next: C++ Interface,  Prev: Restricted Pointers,  Up: C++ Extensions
   33032 
   33033 6.3 Vague Linkage
   33034 =================
   33035 
   33036 There are several constructs in C++ which require space in the object
   33037 file but are not clearly tied to a single translation unit.  We say that
   33038 these constructs have "vague linkage".  Typically such constructs are
   33039 emitted wherever they are needed, though sometimes we can be more
   33040 clever.
   33041 
   33042 Inline Functions
   33043      Inline functions are typically defined in a header file which can
   33044      be included in many different compilations.  Hopefully they can
   33045      usually be inlined, but sometimes an out-of-line copy is
   33046      necessary, if the address of the function is taken or if inlining
   33047      fails.  In general, we emit an out-of-line copy in all translation
   33048      units where one is needed.  As an exception, we only emit inline
   33049      virtual functions with the vtable, since it will always require a
   33050      copy.
   33051 
   33052      Local static variables and string constants used in an inline
   33053      function are also considered to have vague linkage, since they
   33054      must be shared between all inlined and out-of-line instances of
   33055      the function.
   33056 
   33057 VTables
   33058      C++ virtual functions are implemented in most compilers using a
   33059      lookup table, known as a vtable.  The vtable contains pointers to
   33060      the virtual functions provided by a class, and each object of the
   33061      class contains a pointer to its vtable (or vtables, in some
   33062      multiple-inheritance situations).  If the class declares any
   33063      non-inline, non-pure virtual functions, the first one is chosen as
   33064      the "key method" for the class, and the vtable is only emitted in
   33065      the translation unit where the key method is defined.
   33066 
   33067      _Note:_ If the chosen key method is later defined as inline, the
   33068      vtable will still be emitted in every translation unit which
   33069      defines it.  Make sure that any inline virtuals are declared
   33070      inline in the class body, even if they are not defined there.
   33071 
   33072 type_info objects
   33073      C++ requires information about types to be written out in order to
   33074      implement `dynamic_cast', `typeid' and exception handling.  For
   33075      polymorphic classes (classes with virtual functions), the type_info
   33076      object is written out along with the vtable so that `dynamic_cast'
   33077      can determine the dynamic type of a class object at runtime.  For
   33078      all other types, we write out the type_info object when it is
   33079      used: when applying `typeid' to an expression, throwing an object,
   33080      or referring to a type in a catch clause or exception
   33081      specification.
   33082 
   33083 Template Instantiations
   33084      Most everything in this section also applies to template
   33085      instantiations, but there are other options as well.  *Note
   33086      Where's the Template?: Template Instantiation.
   33087 
   33088 
   33089  When used with GNU ld version 2.8 or later on an ELF system such as
   33090 GNU/Linux or Solaris 2, or on Microsoft Windows, duplicate copies of
   33091 these constructs will be discarded at link time.  This is known as
   33092 COMDAT support.
   33093 
   33094  On targets that don't support COMDAT, but do support weak symbols, GCC
   33095 will use them.  This way one copy will override all the others, but the
   33096 unused copies will still take up space in the executable.
   33097 
   33098  For targets which do not support either COMDAT or weak symbols, most
   33099 entities with vague linkage will be emitted as local symbols to avoid
   33100 duplicate definition errors from the linker.  This will not happen for
   33101 local statics in inlines, however, as having multiple copies will
   33102 almost certainly break things.
   33103 
   33104  *Note Declarations and Definitions in One Header: C++ Interface, for
   33105 another way to control placement of these constructs.
   33106 
   33107 
   33108 File: gcc.info,  Node: C++ Interface,  Next: Template Instantiation,  Prev: Vague Linkage,  Up: C++ Extensions
   33109 
   33110 6.4 #pragma interface and implementation
   33111 ========================================
   33112 
   33113 `#pragma interface' and `#pragma implementation' provide the user with
   33114 a way of explicitly directing the compiler to emit entities with vague
   33115 linkage (and debugging information) in a particular translation unit.
   33116 
   33117  _Note:_ As of GCC 2.7.2, these `#pragma's are not useful in most
   33118 cases, because of COMDAT support and the "key method" heuristic
   33119 mentioned in *Note Vague Linkage::.  Using them can actually cause your
   33120 program to grow due to unnecessary out-of-line copies of inline
   33121 functions.  Currently (3.4) the only benefit of these `#pragma's is
   33122 reduced duplication of debugging information, and that should be
   33123 addressed soon on DWARF 2 targets with the use of COMDAT groups.
   33124 
   33125 `#pragma interface'
   33126 `#pragma interface "SUBDIR/OBJECTS.h"'
   33127      Use this directive in _header files_ that define object classes,
   33128      to save space in most of the object files that use those classes.
   33129      Normally, local copies of certain information (backup copies of
   33130      inline member functions, debugging information, and the internal
   33131      tables that implement virtual functions) must be kept in each
   33132      object file that includes class definitions.  You can use this
   33133      pragma to avoid such duplication.  When a header file containing
   33134      `#pragma interface' is included in a compilation, this auxiliary
   33135      information will not be generated (unless the main input source
   33136      file itself uses `#pragma implementation').  Instead, the object
   33137      files will contain references to be resolved at link time.
   33138 
   33139      The second form of this directive is useful for the case where you
   33140      have multiple headers with the same name in different directories.
   33141      If you use this form, you must specify the same string to `#pragma
   33142      implementation'.
   33143 
   33144 `#pragma implementation'
   33145 `#pragma implementation "OBJECTS.h"'
   33146      Use this pragma in a _main input file_, when you want full output
   33147      from included header files to be generated (and made globally
   33148      visible).  The included header file, in turn, should use `#pragma
   33149      interface'.  Backup copies of inline member functions, debugging
   33150      information, and the internal tables used to implement virtual
   33151      functions are all generated in implementation files.
   33152 
   33153      If you use `#pragma implementation' with no argument, it applies to
   33154      an include file with the same basename(1) as your source file.
   33155      For example, in `allclass.cc', giving just `#pragma implementation'
   33156      by itself is equivalent to `#pragma implementation "allclass.h"'.
   33157 
   33158      In versions of GNU C++ prior to 2.6.0 `allclass.h' was treated as
   33159      an implementation file whenever you would include it from
   33160      `allclass.cc' even if you never specified `#pragma
   33161      implementation'.  This was deemed to be more trouble than it was
   33162      worth, however, and disabled.
   33163 
   33164      Use the string argument if you want a single implementation file to
   33165      include code from multiple header files.  (You must also use
   33166      `#include' to include the header file; `#pragma implementation'
   33167      only specifies how to use the file--it doesn't actually include
   33168      it.)
   33169 
   33170      There is no way to split up the contents of a single header file
   33171      into multiple implementation files.
   33172 
   33173  `#pragma implementation' and `#pragma interface' also have an effect
   33174 on function inlining.
   33175 
   33176  If you define a class in a header file marked with `#pragma
   33177 interface', the effect on an inline function defined in that class is
   33178 similar to an explicit `extern' declaration--the compiler emits no code
   33179 at all to define an independent version of the function.  Its
   33180 definition is used only for inlining with its callers.
   33181 
   33182  Conversely, when you include the same header file in a main source file
   33183 that declares it as `#pragma implementation', the compiler emits code
   33184 for the function itself; this defines a version of the function that
   33185 can be found via pointers (or by callers compiled without inlining).
   33186 If all calls to the function can be inlined, you can avoid emitting the
   33187 function by compiling with `-fno-implement-inlines'.  If any calls were
   33188 not inlined, you will get linker errors.
   33189 
   33190  ---------- Footnotes ----------
   33191 
   33192  (1) A file's "basename" was the name stripped of all leading path
   33193 information and of trailing suffixes, such as `.h' or `.C' or `.cc'.
   33194 
   33195 
   33196 File: gcc.info,  Node: Template Instantiation,  Next: Bound member functions,  Prev: C++ Interface,  Up: C++ Extensions
   33197 
   33198 6.5 Where's the Template?
   33199 =========================
   33200 
   33201 C++ templates are the first language feature to require more
   33202 intelligence from the environment than one usually finds on a UNIX
   33203 system.  Somehow the compiler and linker have to make sure that each
   33204 template instance occurs exactly once in the executable if it is needed,
   33205 and not at all otherwise.  There are two basic approaches to this
   33206 problem, which are referred to as the Borland model and the Cfront
   33207 model.
   33208 
   33209 Borland model
   33210      Borland C++ solved the template instantiation problem by adding
   33211      the code equivalent of common blocks to their linker; the compiler
   33212      emits template instances in each translation unit that uses them,
   33213      and the linker collapses them together.  The advantage of this
   33214      model is that the linker only has to consider the object files
   33215      themselves; there is no external complexity to worry about.  This
   33216      disadvantage is that compilation time is increased because the
   33217      template code is being compiled repeatedly.  Code written for this
   33218      model tends to include definitions of all templates in the header
   33219      file, since they must be seen to be instantiated.
   33220 
   33221 Cfront model
   33222      The AT&T C++ translator, Cfront, solved the template instantiation
   33223      problem by creating the notion of a template repository, an
   33224      automatically maintained place where template instances are
   33225      stored.  A more modern version of the repository works as follows:
   33226      As individual object files are built, the compiler places any
   33227      template definitions and instantiations encountered in the
   33228      repository.  At link time, the link wrapper adds in the objects in
   33229      the repository and compiles any needed instances that were not
   33230      previously emitted.  The advantages of this model are more optimal
   33231      compilation speed and the ability to use the system linker; to
   33232      implement the Borland model a compiler vendor also needs to
   33233      replace the linker.  The disadvantages are vastly increased
   33234      complexity, and thus potential for error; for some code this can be
   33235      just as transparent, but in practice it can been very difficult to
   33236      build multiple programs in one directory and one program in
   33237      multiple directories.  Code written for this model tends to
   33238      separate definitions of non-inline member templates into a
   33239      separate file, which should be compiled separately.
   33240 
   33241  When used with GNU ld version 2.8 or later on an ELF system such as
   33242 GNU/Linux or Solaris 2, or on Microsoft Windows, G++ supports the
   33243 Borland model.  On other systems, G++ implements neither automatic
   33244 model.
   33245 
   33246  A future version of G++ will support a hybrid model whereby the
   33247 compiler will emit any instantiations for which the template definition
   33248 is included in the compile, and store template definitions and
   33249 instantiation context information into the object file for the rest.
   33250 The link wrapper will extract that information as necessary and invoke
   33251 the compiler to produce the remaining instantiations.  The linker will
   33252 then combine duplicate instantiations.
   33253 
   33254  In the mean time, you have the following options for dealing with
   33255 template instantiations:
   33256 
   33257   1. Compile your template-using code with `-frepo'.  The compiler will
   33258      generate files with the extension `.rpo' listing all of the
   33259      template instantiations used in the corresponding object files
   33260      which could be instantiated there; the link wrapper, `collect2',
   33261      will then update the `.rpo' files to tell the compiler where to
   33262      place those instantiations and rebuild any affected object files.
   33263      The link-time overhead is negligible after the first pass, as the
   33264      compiler will continue to place the instantiations in the same
   33265      files.
   33266 
   33267      This is your best option for application code written for the
   33268      Borland model, as it will just work.  Code written for the Cfront
   33269      model will need to be modified so that the template definitions
   33270      are available at one or more points of instantiation; usually this
   33271      is as simple as adding `#include <tmethods.cc>' to the end of each
   33272      template header.
   33273 
   33274      For library code, if you want the library to provide all of the
   33275      template instantiations it needs, just try to link all of its
   33276      object files together; the link will fail, but cause the
   33277      instantiations to be generated as a side effect.  Be warned,
   33278      however, that this may cause conflicts if multiple libraries try
   33279      to provide the same instantiations.  For greater control, use
   33280      explicit instantiation as described in the next option.
   33281 
   33282   2. Compile your code with `-fno-implicit-templates' to disable the
   33283      implicit generation of template instances, and explicitly
   33284      instantiate all the ones you use.  This approach requires more
   33285      knowledge of exactly which instances you need than do the others,
   33286      but it's less mysterious and allows greater control.  You can
   33287      scatter the explicit instantiations throughout your program,
   33288      perhaps putting them in the translation units where the instances
   33289      are used or the translation units that define the templates
   33290      themselves; you can put all of the explicit instantiations you
   33291      need into one big file; or you can create small files like
   33292 
   33293           #include "Foo.h"
   33294           #include "Foo.cc"
   33295 
   33296           template class Foo<int>;
   33297           template ostream& operator <<
   33298                           (ostream&, const Foo<int>&);
   33299 
   33300      for each of the instances you need, and create a template
   33301      instantiation library from those.
   33302 
   33303      If you are using Cfront-model code, you can probably get away with
   33304      not using `-fno-implicit-templates' when compiling files that don't
   33305      `#include' the member template definitions.
   33306 
   33307      If you use one big file to do the instantiations, you may want to
   33308      compile it without `-fno-implicit-templates' so you get all of the
   33309      instances required by your explicit instantiations (but not by any
   33310      other files) without having to specify them as well.
   33311 
   33312      G++ has extended the template instantiation syntax given in the ISO
   33313      standard to allow forward declaration of explicit instantiations
   33314      (with `extern'), instantiation of the compiler support data for a
   33315      template class (i.e. the vtable) without instantiating any of its
   33316      members (with `inline'), and instantiation of only the static data
   33317      members of a template class, without the support data or member
   33318      functions (with (`static'):
   33319 
   33320           extern template int max (int, int);
   33321           inline template class Foo<int>;
   33322           static template class Foo<int>;
   33323 
   33324   3. Do nothing.  Pretend G++ does implement automatic instantiation
   33325      management.  Code written for the Borland model will work fine, but
   33326      each translation unit will contain instances of each of the
   33327      templates it uses.  In a large program, this can lead to an
   33328      unacceptable amount of code duplication.
   33329 
   33330 
   33331 File: gcc.info,  Node: Bound member functions,  Next: C++ Attributes,  Prev: Template Instantiation,  Up: C++ Extensions
   33332 
   33333 6.6 Extracting the function pointer from a bound pointer to member function
   33334 ===========================================================================
   33335 
   33336 In C++, pointer to member functions (PMFs) are implemented using a wide
   33337 pointer of sorts to handle all the possible call mechanisms; the PMF
   33338 needs to store information about how to adjust the `this' pointer, and
   33339 if the function pointed to is virtual, where to find the vtable, and
   33340 where in the vtable to look for the member function.  If you are using
   33341 PMFs in an inner loop, you should really reconsider that decision.  If
   33342 that is not an option, you can extract the pointer to the function that
   33343 would be called for a given object/PMF pair and call it directly inside
   33344 the inner loop, to save a bit of time.
   33345 
   33346  Note that you will still be paying the penalty for the call through a
   33347 function pointer; on most modern architectures, such a call defeats the
   33348 branch prediction features of the CPU.  This is also true of normal
   33349 virtual function calls.
   33350 
   33351  The syntax for this extension is
   33352 
   33353      extern A a;
   33354      extern int (A::*fp)();
   33355      typedef int (*fptr)(A *);
   33356 
   33357      fptr p = (fptr)(a.*fp);
   33358 
   33359  For PMF constants (i.e. expressions of the form `&Klasse::Member'), no
   33360 object is needed to obtain the address of the function.  They can be
   33361 converted to function pointers directly:
   33362 
   33363      fptr p1 = (fptr)(&A::foo);
   33364 
   33365  You must specify `-Wno-pmf-conversions' to use this extension.
   33366 
   33367 
   33368 File: gcc.info,  Node: C++ Attributes,  Next: Namespace Association,  Prev: Bound member functions,  Up: C++ Extensions
   33369 
   33370 6.7 C++-Specific Variable, Function, and Type Attributes
   33371 ========================================================
   33372 
   33373 Some attributes only make sense for C++ programs.
   33374 
   33375 `init_priority (PRIORITY)'
   33376      In Standard C++, objects defined at namespace scope are guaranteed
   33377      to be initialized in an order in strict accordance with that of
   33378      their definitions _in a given translation unit_.  No guarantee is
   33379      made for initializations across translation units.  However, GNU
   33380      C++ allows users to control the order of initialization of objects
   33381      defined at namespace scope with the `init_priority' attribute by
   33382      specifying a relative PRIORITY, a constant integral expression
   33383      currently bounded between 101 and 65535 inclusive.  Lower numbers
   33384      indicate a higher priority.
   33385 
   33386      In the following example, `A' would normally be created before
   33387      `B', but the `init_priority' attribute has reversed that order:
   33388 
   33389           Some_Class  A  __attribute__ ((init_priority (2000)));
   33390           Some_Class  B  __attribute__ ((init_priority (543)));
   33391 
   33392      Note that the particular values of PRIORITY do not matter; only
   33393      their relative ordering.
   33394 
   33395 `java_interface'
   33396      This type attribute informs C++ that the class is a Java
   33397      interface.  It may only be applied to classes declared within an
   33398      `extern "Java"' block.  Calls to methods declared in this
   33399      interface will be dispatched using GCJ's interface table
   33400      mechanism, instead of regular virtual table dispatch.
   33401 
   33402 
   33403  See also *Note Namespace Association::.
   33404 
   33405 
   33406 File: gcc.info,  Node: Namespace Association,  Next: Type Traits,  Prev: C++ Attributes,  Up: C++ Extensions
   33407 
   33408 6.8 Namespace Association
   33409 =========================
   33410 
   33411 *Caution:* The semantics of this extension are not fully defined.
   33412 Users should refrain from using this extension as its semantics may
   33413 change subtly over time.  It is possible that this extension will be
   33414 removed in future versions of G++.
   33415 
   33416  A using-directive with `__attribute ((strong))' is stronger than a
   33417 normal using-directive in two ways:
   33418 
   33419    * Templates from the used namespace can be specialized and explicitly
   33420      instantiated as though they were members of the using namespace.
   33421 
   33422    * The using namespace is considered an associated namespace of all
   33423      templates in the used namespace for purposes of argument-dependent
   33424      name lookup.
   33425 
   33426  The used namespace must be nested within the using namespace so that
   33427 normal unqualified lookup works properly.
   33428 
   33429  This is useful for composing a namespace transparently from
   33430 implementation namespaces.  For example:
   33431 
   33432      namespace std {
   33433        namespace debug {
   33434          template <class T> struct A { };
   33435        }
   33436        using namespace debug __attribute ((__strong__));
   33437        template <> struct A<int> { };   // ok to specialize
   33438 
   33439        template <class T> void f (A<T>);
   33440      }
   33441 
   33442      int main()
   33443      {
   33444        f (std::A<float>());             // lookup finds std::f
   33445        f (std::A<int>());
   33446      }
   33447 
   33448 
   33449 File: gcc.info,  Node: Type Traits,  Next: Java Exceptions,  Prev: Namespace Association,  Up: C++ Extensions
   33450 
   33451 6.9 Type Traits
   33452 ===============
   33453 
   33454 The C++ front-end implements syntactic extensions that allow to
   33455 determine at compile time various characteristics of a type (or of a
   33456 pair of types).
   33457 
   33458 `__has_nothrow_assign (type)'
   33459      If `type' is const qualified or is a reference type then the trait
   33460      is false.  Otherwise if `__has_trivial_assign (type)' is true then
   33461      the trait is true, else if `type' is a cv class or union type with
   33462      copy assignment operators that are known not to throw an exception
   33463      then the trait is true, else it is false.  Requires: `type' shall
   33464      be a complete type, an array type of unknown bound, or is a `void'
   33465      type.
   33466 
   33467 `__has_nothrow_copy (type)'
   33468      If `__has_trivial_copy (type)' is true then the trait is true,
   33469      else if `type' is a cv class or union type with copy constructors
   33470      that are known not to throw an exception then the trait is true,
   33471      else it is false.  Requires: `type' shall be a complete type, an
   33472      array type of unknown bound, or is a `void' type.
   33473 
   33474 `__has_nothrow_constructor (type)'
   33475      If `__has_trivial_constructor (type)' is true then the trait is
   33476      true, else if `type' is a cv class or union type (or array
   33477      thereof) with a default constructor that is known not to throw an
   33478      exception then the trait is true, else it is false.  Requires:
   33479      `type' shall be a complete type, an array type of unknown bound,
   33480      or is a `void' type.
   33481 
   33482 `__has_trivial_assign (type)'
   33483      If `type' is const qualified or is a reference type then the trait
   33484      is false.  Otherwise if `__is_pod (type)' is true then the trait is
   33485      true, else if `type' is a cv class or union type with a trivial
   33486      copy assignment ([class.copy]) then the trait is true, else it is
   33487      false.  Requires: `type' shall be a complete type, an array type
   33488      of unknown bound, or is a `void' type.
   33489 
   33490 `__has_trivial_copy (type)'
   33491      If `__is_pod (type)' is true or `type' is a reference type then
   33492      the trait is true, else if `type' is a cv class or union type with
   33493      a trivial copy constructor ([class.copy]) then the trait is true,
   33494      else it is false.  Requires: `type' shall be a complete type, an
   33495      array type of unknown bound, or is a `void' type.
   33496 
   33497 `__has_trivial_constructor (type)'
   33498      If `__is_pod (type)' is true then the trait is true, else if
   33499      `type' is a cv class or union type (or array thereof) with a
   33500      trivial default constructor ([class.ctor]) then the trait is true,
   33501      else it is false.  Requires: `type' shall be a complete type, an
   33502      array type of unknown bound, or is a `void' type.
   33503 
   33504 `__has_trivial_destructor (type)'
   33505      If `__is_pod (type)' is true or `type' is a reference type then
   33506      the trait is true, else if `type' is a cv class or union type (or
   33507      array thereof) with a trivial destructor ([class.dtor]) then the
   33508      trait is true, else it is false.  Requires: `type' shall be a
   33509      complete type, an array type of unknown bound, or is a `void' type.
   33510 
   33511 `__has_virtual_destructor (type)'
   33512      If `type' is a class type with a virtual destructor ([class.dtor])
   33513      then the trait is true, else it is false.  Requires: `type'  shall
   33514      be a complete type, an array type of unknown bound, or is a `void'
   33515      type.
   33516 
   33517 `__is_abstract (type)'
   33518      If `type' is an abstract class ([class.abstract]) then the trait
   33519      is true, else it is false.  Requires: `type' shall be a complete
   33520      type, an array type of unknown bound, or is a `void' type.
   33521 
   33522 `__is_base_of (base_type, derived_type)'
   33523      If `base_type' is a base class of `derived_type' ([class.derived])
   33524      then the trait is true, otherwise it is false.  Top-level cv
   33525      qualifications of `base_type' and `derived_type' are ignored.  For
   33526      the purposes of this trait, a class type is considered is own
   33527      base.  Requires: if `__is_class (base_type)' and `__is_class
   33528      (derived_type)' are true and `base_type' and `derived_type' are
   33529      not the same type (disregarding cv-qualifiers), `derived_type'
   33530      shall be a complete type.  Diagnostic is produced if this
   33531      requirement is not met.
   33532 
   33533 `__is_class (type)'
   33534      If `type' is a cv class type, and not a union type
   33535      ([basic.compound]) the the trait is true, else it is false.
   33536 
   33537 `__is_empty (type)'
   33538      If `__is_class (type)' is false then the trait is false.
   33539      Otherwise `type' is considered empty if and only if: `type' has no
   33540      non-static data members, or all non-static data members, if any,
   33541      are bit-fields of lenght 0, and `type' has no virtual members, and
   33542      `type' has no virtual base classes, and `type' has no base classes
   33543      `base_type' for which `__is_empty (base_type)' is false.
   33544      Requires: `type' shall be a complete type, an array type of
   33545      unknown bound, or is a `void' type.
   33546 
   33547 `__is_enum (type)'
   33548      If `type' is a cv enumeration type ([basic.compound]) the the
   33549      trait is true, else it is false.
   33550 
   33551 `__is_pod (type)'
   33552      If `type' is a cv POD type ([basic.types]) then the trait is true,
   33553      else it is false.  Requires: `type' shall be a complete type, an
   33554      array type of unknown bound, or is a `void' type.
   33555 
   33556 `__is_polymorphic (type)'
   33557      If `type' is a polymorphic class ([class.virtual]) then the trait
   33558      is true, else it is false.  Requires: `type' shall be a complete
   33559      type, an array type of unknown bound, or is a `void' type.
   33560 
   33561 `__is_union (type)'
   33562      If `type' is a cv union type ([basic.compound]) the the trait is
   33563      true, else it is false.
   33564 
   33565 
   33566 
   33567 File: gcc.info,  Node: Java Exceptions,  Next: Deprecated Features,  Prev: Type Traits,  Up: C++ Extensions
   33568 
   33569 6.10 Java Exceptions
   33570 ====================
   33571 
   33572 The Java language uses a slightly different exception handling model
   33573 from C++.  Normally, GNU C++ will automatically detect when you are
   33574 writing C++ code that uses Java exceptions, and handle them
   33575 appropriately.  However, if C++ code only needs to execute destructors
   33576 when Java exceptions are thrown through it, GCC will guess incorrectly.
   33577 Sample problematic code is:
   33578 
   33579        struct S { ~S(); };
   33580        extern void bar();    // is written in Java, and may throw exceptions
   33581        void foo()
   33582        {
   33583          S s;
   33584          bar();
   33585        }
   33586 
   33587 The usual effect of an incorrect guess is a link failure, complaining of
   33588 a missing routine called `__gxx_personality_v0'.
   33589 
   33590  You can inform the compiler that Java exceptions are to be used in a
   33591 translation unit, irrespective of what it might think, by writing
   33592 `#pragma GCC java_exceptions' at the head of the file.  This `#pragma'
   33593 must appear before any functions that throw or catch exceptions, or run
   33594 destructors when exceptions are thrown through them.
   33595 
   33596  You cannot mix Java and C++ exceptions in the same translation unit.
   33597 It is believed to be safe to throw a C++ exception from one file through
   33598 another file compiled for the Java exception model, or vice versa, but
   33599 there may be bugs in this area.
   33600 
   33601 
   33602 File: gcc.info,  Node: Deprecated Features,  Next: Backwards Compatibility,  Prev: Java Exceptions,  Up: C++ Extensions
   33603 
   33604 6.11 Deprecated Features
   33605 ========================
   33606 
   33607 In the past, the GNU C++ compiler was extended to experiment with new
   33608 features, at a time when the C++ language was still evolving.  Now that
   33609 the C++ standard is complete, some of those features are superseded by
   33610 superior alternatives.  Using the old features might cause a warning in
   33611 some cases that the feature will be dropped in the future.  In other
   33612 cases, the feature might be gone already.
   33613 
   33614  While the list below is not exhaustive, it documents some of the
   33615 options that are now deprecated:
   33616 
   33617 `-fexternal-templates'
   33618 `-falt-external-templates'
   33619      These are two of the many ways for G++ to implement template
   33620      instantiation.  *Note Template Instantiation::.  The C++ standard
   33621      clearly defines how template definitions have to be organized
   33622      across implementation units.  G++ has an implicit instantiation
   33623      mechanism that should work just fine for standard-conforming code.
   33624 
   33625 `-fstrict-prototype'
   33626 `-fno-strict-prototype'
   33627      Previously it was possible to use an empty prototype parameter
   33628      list to indicate an unspecified number of parameters (like C),
   33629      rather than no parameters, as C++ demands.  This feature has been
   33630      removed, except where it is required for backwards compatibility
   33631      *Note Backwards Compatibility::.
   33632 
   33633  G++ allows a virtual function returning `void *' to be overridden by
   33634 one returning a different pointer type.  This extension to the
   33635 covariant return type rules is now deprecated and will be removed from a
   33636 future version.
   33637 
   33638  The G++ minimum and maximum operators (`<?' and `>?') and their
   33639 compound forms (`<?=') and `>?=') have been deprecated and are now
   33640 removed from G++.  Code using these operators should be modified to use
   33641 `std::min' and `std::max' instead.
   33642 
   33643  The named return value extension has been deprecated, and is now
   33644 removed from G++.
   33645 
   33646  The use of initializer lists with new expressions has been deprecated,
   33647 and is now removed from G++.
   33648 
   33649  Floating and complex non-type template parameters have been deprecated,
   33650 and are now removed from G++.
   33651 
   33652  The implicit typename extension has been deprecated and is now removed
   33653 from G++.
   33654 
   33655  The use of default arguments in function pointers, function typedefs
   33656 and other places where they are not permitted by the standard is
   33657 deprecated and will be removed from a future version of G++.
   33658 
   33659  G++ allows floating-point literals to appear in integral constant
   33660 expressions, e.g. ` enum E { e = int(2.2 * 3.7) } ' This extension is
   33661 deprecated and will be removed from a future version.
   33662 
   33663  G++ allows static data members of const floating-point type to be
   33664 declared with an initializer in a class definition. The standard only
   33665 allows initializers for static members of const integral types and const
   33666 enumeration types so this extension has been deprecated and will be
   33667 removed from a future version.
   33668 
   33669 
   33670 File: gcc.info,  Node: Backwards Compatibility,  Prev: Deprecated Features,  Up: C++ Extensions
   33671 
   33672 6.12 Backwards Compatibility
   33673 ============================
   33674 
   33675 Now that there is a definitive ISO standard C++, G++ has a specification
   33676 to adhere to.  The C++ language evolved over time, and features that
   33677 used to be acceptable in previous drafts of the standard, such as the
   33678 ARM [Annotated C++ Reference Manual], are no longer accepted.  In order
   33679 to allow compilation of C++ written to such drafts, G++ contains some
   33680 backwards compatibilities.  _All such backwards compatibility features
   33681 are liable to disappear in future versions of G++._ They should be
   33682 considered deprecated *Note Deprecated Features::.
   33683 
   33684 `For scope'
   33685      If a variable is declared at for scope, it used to remain in scope
   33686      until the end of the scope which contained the for statement
   33687      (rather than just within the for scope).  G++ retains this, but
   33688      issues a warning, if such a variable is accessed outside the for
   33689      scope.
   33690 
   33691 `Implicit C language'
   33692      Old C system header files did not contain an `extern "C" {...}'
   33693      scope to set the language.  On such systems, all header files are
   33694      implicitly scoped inside a C language scope.  Also, an empty
   33695      prototype `()' will be treated as an unspecified number of
   33696      arguments, rather than no arguments, as C++ demands.
   33697 
   33698 
   33699 File: gcc.info,  Node: Objective-C,  Next: Compatibility,  Prev: C++ Extensions,  Up: Top
   33700 
   33701 7 GNU Objective-C runtime features
   33702 **********************************
   33703 
   33704 This document is meant to describe some of the GNU Objective-C runtime
   33705 features.  It is not intended to teach you Objective-C, there are
   33706 several resources on the Internet that present the language.  Questions
   33707 and comments about this document to Ovidiu Predescu <ovidiu (a] cup.hp.com>.
   33708 
   33709 * Menu:
   33710 
   33711 * Executing code before main::
   33712 * Type encoding::
   33713 * Garbage Collection::
   33714 * Constant string objects::
   33715 * compatibility_alias::
   33716 
   33717 
   33718 File: gcc.info,  Node: Executing code before main,  Next: Type encoding,  Prev: Objective-C,  Up: Objective-C
   33719 
   33720 7.1 `+load': Executing code before main
   33721 =======================================
   33722 
   33723 The GNU Objective-C runtime provides a way that allows you to execute
   33724 code before the execution of the program enters the `main' function.
   33725 The code is executed on a per-class and a per-category basis, through a
   33726 special class method `+load'.
   33727 
   33728  This facility is very useful if you want to initialize global variables
   33729 which can be accessed by the program directly, without sending a message
   33730 to the class first.  The usual way to initialize global variables, in
   33731 the `+initialize' method, might not be useful because `+initialize' is
   33732 only called when the first message is sent to a class object, which in
   33733 some cases could be too late.
   33734 
   33735  Suppose for example you have a `FileStream' class that declares
   33736 `Stdin', `Stdout' and `Stderr' as global variables, like below:
   33737 
   33738 
   33739      FileStream *Stdin = nil;
   33740      FileStream *Stdout = nil;
   33741      FileStream *Stderr = nil;
   33742 
   33743      @implementation FileStream
   33744 
   33745      + (void)initialize
   33746      {
   33747          Stdin = [[FileStream new] initWithFd:0];
   33748          Stdout = [[FileStream new] initWithFd:1];
   33749          Stderr = [[FileStream new] initWithFd:2];
   33750      }
   33751 
   33752      /* Other methods here */
   33753      @end
   33754 
   33755  In this example, the initialization of `Stdin', `Stdout' and `Stderr'
   33756 in `+initialize' occurs too late.  The programmer can send a message to
   33757 one of these objects before the variables are actually initialized,
   33758 thus sending messages to the `nil' object.  The `+initialize' method
   33759 which actually initializes the global variables is not invoked until
   33760 the first message is sent to the class object.  The solution would
   33761 require these variables to be initialized just before entering `main'.
   33762 
   33763  The correct solution of the above problem is to use the `+load' method
   33764 instead of `+initialize':
   33765 
   33766 
   33767      @implementation FileStream
   33768 
   33769      + (void)load
   33770      {
   33771          Stdin = [[FileStream new] initWithFd:0];
   33772          Stdout = [[FileStream new] initWithFd:1];
   33773          Stderr = [[FileStream new] initWithFd:2];
   33774      }
   33775 
   33776      /* Other methods here */
   33777      @end
   33778 
   33779  The `+load' is a method that is not overridden by categories.  If a
   33780 class and a category of it both implement `+load', both methods are
   33781 invoked.  This allows some additional initializations to be performed in
   33782 a category.
   33783 
   33784  This mechanism is not intended to be a replacement for `+initialize'.
   33785 You should be aware of its limitations when you decide to use it
   33786 instead of `+initialize'.
   33787 
   33788 * Menu:
   33789 
   33790 * What you can and what you cannot do in +load::
   33791 
   33792 
   33793 File: gcc.info,  Node: What you can and what you cannot do in +load,  Prev: Executing code before main,  Up: Executing code before main
   33794 
   33795 7.1.1 What you can and what you cannot do in `+load'
   33796 ----------------------------------------------------
   33797 
   33798 The `+load' implementation in the GNU runtime guarantees you the
   33799 following things:
   33800 
   33801    * you can write whatever C code you like;
   33802 
   33803    * you can send messages to Objective-C constant strings (`@"this is a
   33804      constant string"');
   33805 
   33806    * you can allocate and send messages to objects whose class is
   33807      implemented in the same file;
   33808 
   33809    * the `+load' implementation of all super classes of a class are
   33810      executed before the `+load' of that class is executed;
   33811 
   33812    * the `+load' implementation of a class is executed before the
   33813      `+load' implementation of any category.
   33814 
   33815 
   33816  In particular, the following things, even if they can work in a
   33817 particular case, are not guaranteed:
   33818 
   33819    * allocation of or sending messages to arbitrary objects;
   33820 
   33821    * allocation of or sending messages to objects whose classes have a
   33822      category implemented in the same file;
   33823 
   33824 
   33825  You should make no assumptions about receiving `+load' in sibling
   33826 classes when you write `+load' of a class.  The order in which sibling
   33827 classes receive `+load' is not guaranteed.
   33828 
   33829  The order in which `+load' and `+initialize' are called could be
   33830 problematic if this matters.  If you don't allocate objects inside
   33831 `+load', it is guaranteed that `+load' is called before `+initialize'.
   33832 If you create an object inside `+load' the `+initialize' method of
   33833 object's class is invoked even if `+load' was not invoked.  Note if you
   33834 explicitly call `+load' on a class, `+initialize' will be called first.
   33835 To avoid possible problems try to implement only one of these methods.
   33836 
   33837  The `+load' method is also invoked when a bundle is dynamically loaded
   33838 into your running program.  This happens automatically without any
   33839 intervening operation from you.  When you write bundles and you need to
   33840 write `+load' you can safely create and send messages to objects whose
   33841 classes already exist in the running program.  The same restrictions as
   33842 above apply to classes defined in bundle.
   33843 
   33844 
   33845 File: gcc.info,  Node: Type encoding,  Next: Garbage Collection,  Prev: Executing code before main,  Up: Objective-C
   33846 
   33847 7.2 Type encoding
   33848 =================
   33849 
   33850 The Objective-C compiler generates type encodings for all the types.
   33851 These type encodings are used at runtime to find out information about
   33852 selectors and methods and about objects and classes.
   33853 
   33854  The types are encoded in the following way:
   33855 
   33856 `_Bool'            `B'
   33857 `char'             `c'
   33858 `unsigned char'    `C'
   33859 `short'            `s'
   33860 `unsigned short'   `S'
   33861 `int'              `i'
   33862 `unsigned int'     `I'
   33863 `long'             `l'
   33864 `unsigned long'    `L'
   33865 `long long'        `q'
   33866 `unsigned long     `Q'
   33867 long'              
   33868 `float'            `f'
   33869 `double'           `d'
   33870 `void'             `v'
   33871 `id'               `@'
   33872 `Class'            `#'
   33873 `SEL'              `:'
   33874 `char*'            `*'
   33875 unknown type       `?'
   33876 Complex types      `j' followed by the inner type.  For example
   33877                    `_Complex double' is encoded as "jd".
   33878 bit-fields         `b' followed by the starting position of the
   33879                    bit-field, the type of the bit-field and the size of
   33880                    the bit-field (the bit-fields encoding was changed
   33881                    from the NeXT's compiler encoding, see below)
   33882 
   33883  The encoding of bit-fields has changed to allow bit-fields to be
   33884 properly handled by the runtime functions that compute sizes and
   33885 alignments of types that contain bit-fields.  The previous encoding
   33886 contained only the size of the bit-field.  Using only this information
   33887 it is not possible to reliably compute the size occupied by the
   33888 bit-field.  This is very important in the presence of the Boehm's
   33889 garbage collector because the objects are allocated using the typed
   33890 memory facility available in this collector.  The typed memory
   33891 allocation requires information about where the pointers are located
   33892 inside the object.
   33893 
   33894  The position in the bit-field is the position, counting in bits, of the
   33895 bit closest to the beginning of the structure.
   33896 
   33897  The non-atomic types are encoded as follows:
   33898 
   33899 pointers       `^' followed by the pointed type.
   33900 arrays         `[' followed by the number of elements in the array
   33901                followed by the type of the elements followed by `]'
   33902 structures     `{' followed by the name of the structure (or `?' if the
   33903                structure is unnamed), the `=' sign, the type of the
   33904                members and by `}'
   33905 unions         `(' followed by the name of the structure (or `?' if the
   33906                union is unnamed), the `=' sign, the type of the members
   33907                followed by `)'
   33908 
   33909  Here are some types and their encodings, as they are generated by the
   33910 compiler on an i386 machine:
   33911 
   33912 
   33913 Objective-C type   Compiler encoding
   33914      int a[10];    `[10i]'
   33915      struct {      `{?=i[3f]b128i3b131i2c}'
   33916        int i;      
   33917        float f[3]; 
   33918        int a:3;    
   33919        int b:2;    
   33920        char c;     
   33921      }             
   33922 
   33923 
   33924  In addition to the types the compiler also encodes the type
   33925 specifiers.  The table below describes the encoding of the current
   33926 Objective-C type specifiers:
   33927 
   33928 
   33929 Specifier          Encoding
   33930 `const'            `r'
   33931 `in'               `n'
   33932 `inout'            `N'
   33933 `out'              `o'
   33934 `bycopy'           `O'
   33935 `oneway'           `V'
   33936 
   33937 
   33938  The type specifiers are encoded just before the type.  Unlike types
   33939 however, the type specifiers are only encoded when they appear in method
   33940 argument types.
   33941 
   33942 
   33943 File: gcc.info,  Node: Garbage Collection,  Next: Constant string objects,  Prev: Type encoding,  Up: Objective-C
   33944 
   33945 7.3 Garbage Collection
   33946 ======================
   33947 
   33948 Support for a new memory management policy has been added by using a
   33949 powerful conservative garbage collector, known as the
   33950 Boehm-Demers-Weiser conservative garbage collector.  It is available
   33951 from `http://www.hpl.hp.com/personal/Hans_Boehm/gc/'.
   33952 
   33953  To enable the support for it you have to configure the compiler using
   33954 an additional argument, `--enable-objc-gc'.  You need to have garbage
   33955 collector installed before building the compiler.  This will build an
   33956 additional runtime library which has several enhancements to support
   33957 the garbage collector.  The new library has a new name, `libobjc_gc.a'
   33958 to not conflict with the non-garbage-collected library.
   33959 
   33960  When the garbage collector is used, the objects are allocated using the
   33961 so-called typed memory allocation mechanism available in the
   33962 Boehm-Demers-Weiser collector.  This mode requires precise information
   33963 on where pointers are located inside objects.  This information is
   33964 computed once per class, immediately after the class has been
   33965 initialized.
   33966 
   33967  There is a new runtime function `class_ivar_set_gcinvisible()' which
   33968 can be used to declare a so-called "weak pointer" reference.  Such a
   33969 pointer is basically hidden for the garbage collector; this can be
   33970 useful in certain situations, especially when you want to keep track of
   33971 the allocated objects, yet allow them to be collected.  This kind of
   33972 pointers can only be members of objects, you cannot declare a global
   33973 pointer as a weak reference.  Every type which is a pointer type can be
   33974 declared a weak pointer, including `id', `Class' and `SEL'.
   33975 
   33976  Here is an example of how to use this feature.  Suppose you want to
   33977 implement a class whose instances hold a weak pointer reference; the
   33978 following class does this:
   33979 
   33980 
   33981      @interface WeakPointer : Object
   33982      {
   33983          const void* weakPointer;
   33984      }
   33985 
   33986      - initWithPointer:(const void*)p;
   33987      - (const void*)weakPointer;
   33988      @end
   33989 
   33990 
   33991      @implementation WeakPointer
   33992 
   33993      + (void)initialize
   33994      {
   33995        class_ivar_set_gcinvisible (self, "weakPointer", YES);
   33996      }
   33997 
   33998      - initWithPointer:(const void*)p
   33999      {
   34000        weakPointer = p;
   34001        return self;
   34002      }
   34003 
   34004      - (const void*)weakPointer
   34005      {
   34006        return weakPointer;
   34007      }
   34008 
   34009      @end
   34010 
   34011  Weak pointers are supported through a new type character specifier
   34012 represented by the `!' character.  The `class_ivar_set_gcinvisible()'
   34013 function adds or removes this specifier to the string type description
   34014 of the instance variable named as argument.
   34015 
   34016 
   34017 File: gcc.info,  Node: Constant string objects,  Next: compatibility_alias,  Prev: Garbage Collection,  Up: Objective-C
   34018 
   34019 7.4 Constant string objects
   34020 ===========================
   34021 
   34022 GNU Objective-C provides constant string objects that are generated
   34023 directly by the compiler.  You declare a constant string object by
   34024 prefixing a C constant string with the character `@':
   34025 
   34026        id myString = @"this is a constant string object";
   34027 
   34028  The constant string objects are by default instances of the
   34029 `NXConstantString' class which is provided by the GNU Objective-C
   34030 runtime.  To get the definition of this class you must include the
   34031 `objc/NXConstStr.h' header file.
   34032 
   34033  User defined libraries may want to implement their own constant string
   34034 class.  To be able to support them, the GNU Objective-C compiler
   34035 provides a new command line options
   34036 `-fconstant-string-class=CLASS-NAME'.  The provided class should adhere
   34037 to a strict structure, the same as `NXConstantString''s structure:
   34038 
   34039 
   34040      @interface MyConstantStringClass
   34041      {
   34042        Class isa;
   34043        char *c_string;
   34044        unsigned int len;
   34045      }
   34046      @end
   34047 
   34048  `NXConstantString' inherits from `Object'; user class libraries may
   34049 choose to inherit the customized constant string class from a different
   34050 class than `Object'.  There is no requirement in the methods the
   34051 constant string class has to implement, but the final ivar layout of
   34052 the class must be the compatible with the given structure.
   34053 
   34054  When the compiler creates the statically allocated constant string
   34055 object, the `c_string' field will be filled by the compiler with the
   34056 string; the `length' field will be filled by the compiler with the
   34057 string length; the `isa' pointer will be filled with `NULL' by the
   34058 compiler, and it will later be fixed up automatically at runtime by the
   34059 GNU Objective-C runtime library to point to the class which was set by
   34060 the `-fconstant-string-class' option when the object file is loaded (if
   34061 you wonder how it works behind the scenes, the name of the class to
   34062 use, and the list of static objects to fixup, are stored by the
   34063 compiler in the object file in a place where the GNU runtime library
   34064 will find them at runtime).
   34065 
   34066  As a result, when a file is compiled with the
   34067 `-fconstant-string-class' option, all the constant string objects will
   34068 be instances of the class specified as argument to this option.  It is
   34069 possible to have multiple compilation units referring to different
   34070 constant string classes, neither the compiler nor the linker impose any
   34071 restrictions in doing this.
   34072 
   34073 
   34074 File: gcc.info,  Node: compatibility_alias,  Prev: Constant string objects,  Up: Objective-C
   34075 
   34076 7.5 compatibility_alias
   34077 =======================
   34078 
   34079 This is a feature of the Objective-C compiler rather than of the
   34080 runtime, anyway since it is documented nowhere and its existence was
   34081 forgotten, we are documenting it here.
   34082 
   34083  The keyword `@compatibility_alias' allows you to define a class name
   34084 as equivalent to another class name.  For example:
   34085 
   34086      @compatibility_alias WOApplication GSWApplication;
   34087 
   34088  tells the compiler that each time it encounters `WOApplication' as a
   34089 class name, it should replace it with `GSWApplication' (that is,
   34090 `WOApplication' is just an alias for `GSWApplication').
   34091 
   34092  There are some constraints on how this can be used--
   34093 
   34094    * `WOApplication' (the alias) must not be an existing class;
   34095 
   34096    * `GSWApplication' (the real class) must be an existing class.
   34097 
   34098 
   34099 
   34100 File: gcc.info,  Node: Compatibility,  Next: Gcov,  Prev: Objective-C,  Up: Top
   34101 
   34102 8 Binary Compatibility
   34103 **********************
   34104 
   34105 Binary compatibility encompasses several related concepts:
   34106 
   34107 "application binary interface (ABI)"
   34108      The set of runtime conventions followed by all of the tools that
   34109      deal with binary representations of a program, including
   34110      compilers, assemblers, linkers, and language runtime support.
   34111      Some ABIs are formal with a written specification, possibly
   34112      designed by multiple interested parties.  Others are simply the
   34113      way things are actually done by a particular set of tools.
   34114 
   34115 "ABI conformance"
   34116      A compiler conforms to an ABI if it generates code that follows
   34117      all of the specifications enumerated by that ABI.  A library
   34118      conforms to an ABI if it is implemented according to that ABI.  An
   34119      application conforms to an ABI if it is built using tools that
   34120      conform to that ABI and does not contain source code that
   34121      specifically changes behavior specified by the ABI.
   34122 
   34123 "calling conventions"
   34124      Calling conventions are a subset of an ABI that specify of how
   34125      arguments are passed and function results are returned.
   34126 
   34127 "interoperability"
   34128      Different sets of tools are interoperable if they generate files
   34129      that can be used in the same program.  The set of tools includes
   34130      compilers, assemblers, linkers, libraries, header files, startup
   34131      files, and debuggers.  Binaries produced by different sets of
   34132      tools are not interoperable unless they implement the same ABI.
   34133      This applies to different versions of the same tools as well as
   34134      tools from different vendors.
   34135 
   34136 "intercallability"
   34137      Whether a function in a binary built by one set of tools can call a
   34138      function in a binary built by a different set of tools is a subset
   34139      of interoperability.
   34140 
   34141 "implementation-defined features"
   34142      Language standards include lists of implementation-defined
   34143      features whose behavior can vary from one implementation to
   34144      another.  Some of these features are normally covered by a
   34145      platform's ABI and others are not.  The features that are not
   34146      covered by an ABI generally affect how a program behaves, but not
   34147      intercallability.
   34148 
   34149 "compatibility"
   34150      Conformance to the same ABI and the same behavior of
   34151      implementation-defined features are both relevant for
   34152      compatibility.
   34153 
   34154  The application binary interface implemented by a C or C++ compiler
   34155 affects code generation and runtime support for:
   34156 
   34157    * size and alignment of data types
   34158 
   34159    * layout of structured types
   34160 
   34161    * calling conventions
   34162 
   34163    * register usage conventions
   34164 
   34165    * interfaces for runtime arithmetic support
   34166 
   34167    * object file formats
   34168 
   34169  In addition, the application binary interface implemented by a C++
   34170 compiler affects code generation and runtime support for:
   34171    * name mangling
   34172 
   34173    * exception handling
   34174 
   34175    * invoking constructors and destructors
   34176 
   34177    * layout, alignment, and padding of classes
   34178 
   34179    * layout and alignment of virtual tables
   34180 
   34181  Some GCC compilation options cause the compiler to generate code that
   34182 does not conform to the platform's default ABI.  Other options cause
   34183 different program behavior for implementation-defined features that are
   34184 not covered by an ABI.  These options are provided for consistency with
   34185 other compilers that do not follow the platform's default ABI or the
   34186 usual behavior of implementation-defined features for the platform.  Be
   34187 very careful about using such options.
   34188 
   34189  Most platforms have a well-defined ABI that covers C code, but ABIs
   34190 that cover C++ functionality are not yet common.
   34191 
   34192  Starting with GCC 3.2, GCC binary conventions for C++ are based on a
   34193 written, vendor-neutral C++ ABI that was designed to be specific to
   34194 64-bit Itanium but also includes generic specifications that apply to
   34195 any platform.  This C++ ABI is also implemented by other compiler
   34196 vendors on some platforms, notably GNU/Linux and BSD systems.  We have
   34197 tried hard to provide a stable ABI that will be compatible with future
   34198 GCC releases, but it is possible that we will encounter problems that
   34199 make this difficult.  Such problems could include different
   34200 interpretations of the C++ ABI by different vendors, bugs in the ABI, or
   34201 bugs in the implementation of the ABI in different compilers.  GCC's
   34202 `-Wabi' switch warns when G++ generates code that is probably not
   34203 compatible with the C++ ABI.
   34204 
   34205  The C++ library used with a C++ compiler includes the Standard C++
   34206 Library, with functionality defined in the C++ Standard, plus language
   34207 runtime support.  The runtime support is included in a C++ ABI, but
   34208 there is no formal ABI for the Standard C++ Library.  Two
   34209 implementations of that library are interoperable if one follows the
   34210 de-facto ABI of the other and if they are both built with the same
   34211 compiler, or with compilers that conform to the same ABI for C++
   34212 compiler and runtime support.
   34213 
   34214  When G++ and another C++ compiler conform to the same C++ ABI, but the
   34215 implementations of the Standard C++ Library that they normally use do
   34216 not follow the same ABI for the Standard C++ Library, object files
   34217 built with those compilers can be used in the same program only if they
   34218 use the same C++ library.  This requires specifying the location of the
   34219 C++ library header files when invoking the compiler whose usual library
   34220 is not being used.  The location of GCC's C++ header files depends on
   34221 how the GCC build was configured, but can be seen by using the G++ `-v'
   34222 option.  With default configuration options for G++ 3.3 the compile
   34223 line for a different C++ compiler needs to include
   34224 
   34225          -IGCC_INSTALL_DIRECTORY/include/c++/3.3
   34226 
   34227  Similarly, compiling code with G++ that must use a C++ library other
   34228 than the GNU C++ library requires specifying the location of the header
   34229 files for that other library.
   34230 
   34231  The most straightforward way to link a program to use a particular C++
   34232 library is to use a C++ driver that specifies that C++ library by
   34233 default.  The `g++' driver, for example, tells the linker where to find
   34234 GCC's C++ library (`libstdc++') plus the other libraries and startup
   34235 files it needs, in the proper order.
   34236 
   34237  If a program must use a different C++ library and it's not possible to
   34238 do the final link using a C++ driver that uses that library by default,
   34239 it is necessary to tell `g++' the location and name of that library.
   34240 It might also be necessary to specify different startup files and other
   34241 runtime support libraries, and to suppress the use of GCC's support
   34242 libraries with one or more of the options `-nostdlib', `-nostartfiles',
   34243 and `-nodefaultlibs'.
   34244 
   34245 
   34246 File: gcc.info,  Node: Gcov,  Next: Trouble,  Prev: Compatibility,  Up: Top
   34247 
   34248 9 `gcov'--a Test Coverage Program
   34249 *********************************
   34250 
   34251 `gcov' is a tool you can use in conjunction with GCC to test code
   34252 coverage in your programs.
   34253 
   34254 * Menu:
   34255 
   34256 * Gcov Intro::         	        Introduction to gcov.
   34257 * Invoking Gcov::       	How to use gcov.
   34258 * Gcov and Optimization::       Using gcov with GCC optimization.
   34259 * Gcov Data Files::             The files used by gcov.
   34260 * Cross-profiling::             Data file relocation.
   34261 
   34262 
   34263 File: gcc.info,  Node: Gcov Intro,  Next: Invoking Gcov,  Up: Gcov
   34264 
   34265 9.1 Introduction to `gcov'
   34266 ==========================
   34267 
   34268 `gcov' is a test coverage program.  Use it in concert with GCC to
   34269 analyze your programs to help create more efficient, faster running
   34270 code and to discover untested parts of your program.  You can use
   34271 `gcov' as a profiling tool to help discover where your optimization
   34272 efforts will best affect your code.  You can also use `gcov' along with
   34273 the other profiling tool, `gprof', to assess which parts of your code
   34274 use the greatest amount of computing time.
   34275 
   34276  Profiling tools help you analyze your code's performance.  Using a
   34277 profiler such as `gcov' or `gprof', you can find out some basic
   34278 performance statistics, such as:
   34279 
   34280    * how often each line of code executes
   34281 
   34282    * what lines of code are actually executed
   34283 
   34284    * how much computing time each section of code uses
   34285 
   34286  Once you know these things about how your code works when compiled, you
   34287 can look at each module to see which modules should be optimized.
   34288 `gcov' helps you determine where to work on optimization.
   34289 
   34290  Software developers also use coverage testing in concert with
   34291 testsuites, to make sure software is actually good enough for a release.
   34292 Testsuites can verify that a program works as expected; a coverage
   34293 program tests to see how much of the program is exercised by the
   34294 testsuite.  Developers can then determine what kinds of test cases need
   34295 to be added to the testsuites to create both better testing and a better
   34296 final product.
   34297 
   34298  You should compile your code without optimization if you plan to use
   34299 `gcov' because the optimization, by combining some lines of code into
   34300 one function, may not give you as much information as you need to look
   34301 for `hot spots' where the code is using a great deal of computer time.
   34302 Likewise, because `gcov' accumulates statistics by line (at the lowest
   34303 resolution), it works best with a programming style that places only
   34304 one statement on each line.  If you use complicated macros that expand
   34305 to loops or to other control structures, the statistics are less
   34306 helpful--they only report on the line where the macro call appears.  If
   34307 your complex macros behave like functions, you can replace them with
   34308 inline functions to solve this problem.
   34309 
   34310  `gcov' creates a logfile called `SOURCEFILE.gcov' which indicates how
   34311 many times each line of a source file `SOURCEFILE.c' has executed.  You
   34312 can use these logfiles along with `gprof' to aid in fine-tuning the
   34313 performance of your programs.  `gprof' gives timing information you can
   34314 use along with the information you get from `gcov'.
   34315 
   34316  `gcov' works only on code compiled with GCC.  It is not compatible
   34317 with any other profiling or test coverage mechanism.
   34318 
   34319 
   34320 File: gcc.info,  Node: Invoking Gcov,  Next: Gcov and Optimization,  Prev: Gcov Intro,  Up: Gcov
   34321 
   34322 9.2 Invoking `gcov'
   34323 ===================
   34324 
   34325      gcov [OPTIONS] SOURCEFILES
   34326 
   34327  `gcov' accepts the following options:
   34328 
   34329 `-h'
   34330 `--help'
   34331      Display help about using `gcov' (on the standard output), and exit
   34332      without doing any further processing.
   34333 
   34334 `-v'
   34335 `--version'
   34336      Display the `gcov' version number (on the standard output), and
   34337      exit without doing any further processing.
   34338 
   34339 `-a'
   34340 `--all-blocks'
   34341      Write individual execution counts for every basic block.  Normally
   34342      gcov outputs execution counts only for the main blocks of a line.
   34343      With this option you can determine if blocks within a single line
   34344      are not being executed.
   34345 
   34346 `-b'
   34347 `--branch-probabilities'
   34348      Write branch frequencies to the output file, and write branch
   34349      summary info to the standard output.  This option allows you to
   34350      see how often each branch in your program was taken.
   34351      Unconditional branches will not be shown, unless the `-u' option
   34352      is given.
   34353 
   34354 `-c'
   34355 `--branch-counts'
   34356      Write branch frequencies as the number of branches taken, rather
   34357      than the percentage of branches taken.
   34358 
   34359 `-n'
   34360 `--no-output'
   34361      Do not create the `gcov' output file.
   34362 
   34363 `-l'
   34364 `--long-file-names'
   34365      Create long file names for included source files.  For example, if
   34366      the header file `x.h' contains code, and was included in the file
   34367      `a.c', then running `gcov' on the file `a.c' will produce an
   34368      output file called `a.c##x.h.gcov' instead of `x.h.gcov'.  This
   34369      can be useful if `x.h' is included in multiple source files.  If
   34370      you use the `-p' option, both the including and included file
   34371      names will be complete path names.
   34372 
   34373 `-p'
   34374 `--preserve-paths'
   34375      Preserve complete path information in the names of generated
   34376      `.gcov' files.  Without this option, just the filename component is
   34377      used.  With this option, all directories are used, with `/'
   34378      characters translated to `#' characters, `.' directory components
   34379      removed and `..' components renamed to `^'.  This is useful if
   34380      sourcefiles are in several different directories.  It also affects
   34381      the `-l' option.
   34382 
   34383 `-f'
   34384 `--function-summaries'
   34385      Output summaries for each function in addition to the file level
   34386      summary.
   34387 
   34388 `-o DIRECTORY|FILE'
   34389 `--object-directory DIRECTORY'
   34390 `--object-file FILE'
   34391      Specify either the directory containing the gcov data files, or the
   34392      object path name.  The `.gcno', and `.gcda' data files are
   34393      searched for using this option.  If a directory is specified, the
   34394      data files are in that directory and named after the source file
   34395      name, without its extension.  If a file is specified here, the
   34396      data files are named after that file, without its extension.  If
   34397      this option is not supplied, it defaults to the current directory.
   34398 
   34399 `-u'
   34400 `--unconditional-branches'
   34401      When branch probabilities are given, include those of
   34402      unconditional branches.  Unconditional branches are normally not
   34403      interesting.
   34404 
   34405 
   34406  `gcov' should be run with the current directory the same as that when
   34407 you invoked the compiler.  Otherwise it will not be able to locate the
   34408 source files.  `gcov' produces files called `MANGLEDNAME.gcov' in the
   34409 current directory.  These contain the coverage information of the
   34410 source file they correspond to.  One `.gcov' file is produced for each
   34411 source file containing code, which was compiled to produce the data
   34412 files.  The MANGLEDNAME part of the output file name is usually simply
   34413 the source file name, but can be something more complicated if the `-l'
   34414 or `-p' options are given.  Refer to those options for details.
   34415 
   34416  The `.gcov' files contain the `:' separated fields along with program
   34417 source code.  The format is
   34418 
   34419      EXECUTION_COUNT:LINE_NUMBER:SOURCE LINE TEXT
   34420 
   34421  Additional block information may succeed each line, when requested by
   34422 command line option.  The EXECUTION_COUNT is `-' for lines containing
   34423 no code and `#####' for lines which were never executed.  Some lines of
   34424 information at the start have LINE_NUMBER of zero.
   34425 
   34426  The preamble lines are of the form
   34427 
   34428      -:0:TAG:VALUE
   34429 
   34430  The ordering and number of these preamble lines will be augmented as
   34431 `gcov' development progresses -- do not rely on them remaining
   34432 unchanged.  Use TAG to locate a particular preamble line.
   34433 
   34434  The additional block information is of the form
   34435 
   34436      TAG INFORMATION
   34437 
   34438  The INFORMATION is human readable, but designed to be simple enough
   34439 for machine parsing too.
   34440 
   34441  When printing percentages, 0% and 100% are only printed when the values
   34442 are _exactly_ 0% and 100% respectively.  Other values which would
   34443 conventionally be rounded to 0% or 100% are instead printed as the
   34444 nearest non-boundary value.
   34445 
   34446  When using `gcov', you must first compile your program with two
   34447 special GCC options: `-fprofile-arcs -ftest-coverage'.  This tells the
   34448 compiler to generate additional information needed by gcov (basically a
   34449 flow graph of the program) and also includes additional code in the
   34450 object files for generating the extra profiling information needed by
   34451 gcov.  These additional files are placed in the directory where the
   34452 object file is located.
   34453 
   34454  Running the program will cause profile output to be generated.  For
   34455 each source file compiled with `-fprofile-arcs', an accompanying
   34456 `.gcda' file will be placed in the object file directory.
   34457 
   34458  Running `gcov' with your program's source file names as arguments will
   34459 now produce a listing of the code along with frequency of execution for
   34460 each line.  For example, if your program is called `tmp.c', this is
   34461 what you see when you use the basic `gcov' facility:
   34462 
   34463      $ gcc -fprofile-arcs -ftest-coverage tmp.c
   34464      $ a.out
   34465      $ gcov tmp.c
   34466      90.00% of 10 source lines executed in file tmp.c
   34467      Creating tmp.c.gcov.
   34468 
   34469  The file `tmp.c.gcov' contains output from `gcov'.  Here is a sample:
   34470 
   34471              -:    0:Source:tmp.c
   34472              -:    0:Graph:tmp.gcno
   34473              -:    0:Data:tmp.gcda
   34474              -:    0:Runs:1
   34475              -:    0:Programs:1
   34476              -:    1:#include <stdio.h>
   34477              -:    2:
   34478              -:    3:int main (void)
   34479              1:    4:{
   34480              1:    5:  int i, total;
   34481              -:    6:
   34482              1:    7:  total = 0;
   34483              -:    8:
   34484             11:    9:  for (i = 0; i < 10; i++)
   34485             10:   10:    total += i;
   34486              -:   11:
   34487              1:   12:  if (total != 45)
   34488          #####:   13:    printf ("Failure\n");
   34489              -:   14:  else
   34490              1:   15:    printf ("Success\n");
   34491              1:   16:  return 0;
   34492              -:   17:}
   34493 
   34494  When you use the `-a' option, you will get individual block counts,
   34495 and the output looks like this:
   34496 
   34497              -:    0:Source:tmp.c
   34498              -:    0:Graph:tmp.gcno
   34499              -:    0:Data:tmp.gcda
   34500              -:    0:Runs:1
   34501              -:    0:Programs:1
   34502              -:    1:#include <stdio.h>
   34503              -:    2:
   34504              -:    3:int main (void)
   34505              1:    4:{
   34506              1:    4-block  0
   34507              1:    5:  int i, total;
   34508              -:    6:
   34509              1:    7:  total = 0;
   34510              -:    8:
   34511             11:    9:  for (i = 0; i < 10; i++)
   34512             11:    9-block  0
   34513             10:   10:    total += i;
   34514             10:   10-block  0
   34515              -:   11:
   34516              1:   12:  if (total != 45)
   34517              1:   12-block  0
   34518          #####:   13:    printf ("Failure\n");
   34519          $$$$$:   13-block  0
   34520              -:   14:  else
   34521              1:   15:    printf ("Success\n");
   34522              1:   15-block  0
   34523              1:   16:  return 0;
   34524              1:   16-block  0
   34525              -:   17:}
   34526 
   34527  In this mode, each basic block is only shown on one line - the last
   34528 line of the block.  A multi-line block will only contribute to the
   34529 execution count of that last line, and other lines will not be shown to
   34530 contain code, unless previous blocks end on those lines.  The total
   34531 execution count of a line is shown and subsequent lines show the
   34532 execution counts for individual blocks that end on that line.  After
   34533 each block, the branch and call counts of the block will be shown, if
   34534 the `-b' option is given.
   34535 
   34536  Because of the way GCC instruments calls, a call count can be shown
   34537 after a line with no individual blocks.  As you can see, line 13
   34538 contains a basic block that was not executed.
   34539 
   34540  When you use the `-b' option, your output looks like this:
   34541 
   34542      $ gcov -b tmp.c
   34543      90.00% of 10 source lines executed in file tmp.c
   34544      80.00% of 5 branches executed in file tmp.c
   34545      80.00% of 5 branches taken at least once in file tmp.c
   34546      50.00% of 2 calls executed in file tmp.c
   34547      Creating tmp.c.gcov.
   34548 
   34549  Here is a sample of a resulting `tmp.c.gcov' file:
   34550 
   34551              -:    0:Source:tmp.c
   34552              -:    0:Graph:tmp.gcno
   34553              -:    0:Data:tmp.gcda
   34554              -:    0:Runs:1
   34555              -:    0:Programs:1
   34556              -:    1:#include <stdio.h>
   34557              -:    2:
   34558              -:    3:int main (void)
   34559      function main called 1 returned 1 blocks executed 75%
   34560              1:    4:{
   34561              1:    5:  int i, total;
   34562              -:    6:
   34563              1:    7:  total = 0;
   34564              -:    8:
   34565             11:    9:  for (i = 0; i < 10; i++)
   34566      branch  0 taken 91% (fallthrough)
   34567      branch  1 taken 9%
   34568             10:   10:    total += i;
   34569              -:   11:
   34570              1:   12:  if (total != 45)
   34571      branch  0 taken 0% (fallthrough)
   34572      branch  1 taken 100%
   34573          #####:   13:    printf ("Failure\n");
   34574      call    0 never executed
   34575              -:   14:  else
   34576              1:   15:    printf ("Success\n");
   34577      call    0 called 1 returned 100%
   34578              1:   16:  return 0;
   34579              -:   17:}
   34580 
   34581  For each function, a line is printed showing how many times the
   34582 function is called, how many times it returns and what percentage of the
   34583 function's blocks were executed.
   34584 
   34585  For each basic block, a line is printed after the last line of the
   34586 basic block describing the branch or call that ends the basic block.
   34587 There can be multiple branches and calls listed for a single source
   34588 line if there are multiple basic blocks that end on that line.  In this
   34589 case, the branches and calls are each given a number.  There is no
   34590 simple way to map these branches and calls back to source constructs.
   34591 In general, though, the lowest numbered branch or call will correspond
   34592 to the leftmost construct on the source line.
   34593 
   34594  For a branch, if it was executed at least once, then a percentage
   34595 indicating the number of times the branch was taken divided by the
   34596 number of times the branch was executed will be printed.  Otherwise, the
   34597 message "never executed" is printed.
   34598 
   34599  For a call, if it was executed at least once, then a percentage
   34600 indicating the number of times the call returned divided by the number
   34601 of times the call was executed will be printed.  This will usually be
   34602 100%, but may be less for functions that call `exit' or `longjmp', and
   34603 thus may not return every time they are called.
   34604 
   34605  The execution counts are cumulative.  If the example program were
   34606 executed again without removing the `.gcda' file, the count for the
   34607 number of times each line in the source was executed would be added to
   34608 the results of the previous run(s).  This is potentially useful in
   34609 several ways.  For example, it could be used to accumulate data over a
   34610 number of program runs as part of a test verification suite, or to
   34611 provide more accurate long-term information over a large number of
   34612 program runs.
   34613 
   34614  The data in the `.gcda' files is saved immediately before the program
   34615 exits.  For each source file compiled with `-fprofile-arcs', the
   34616 profiling code first attempts to read in an existing `.gcda' file; if
   34617 the file doesn't match the executable (differing number of basic block
   34618 counts) it will ignore the contents of the file.  It then adds in the
   34619 new execution counts and finally writes the data to the file.
   34620 
   34621 
   34622 File: gcc.info,  Node: Gcov and Optimization,  Next: Gcov Data Files,  Prev: Invoking Gcov,  Up: Gcov
   34623 
   34624 9.3 Using `gcov' with GCC Optimization
   34625 ======================================
   34626 
   34627 If you plan to use `gcov' to help optimize your code, you must first
   34628 compile your program with two special GCC options: `-fprofile-arcs
   34629 -ftest-coverage'.  Aside from that, you can use any other GCC options;
   34630 but if you want to prove that every single line in your program was
   34631 executed, you should not compile with optimization at the same time.
   34632 On some machines the optimizer can eliminate some simple code lines by
   34633 combining them with other lines.  For example, code like this:
   34634 
   34635      if (a != b)
   34636        c = 1;
   34637      else
   34638        c = 0;
   34639 
   34640 can be compiled into one instruction on some machines.  In this case,
   34641 there is no way for `gcov' to calculate separate execution counts for
   34642 each line because there isn't separate code for each line.  Hence the
   34643 `gcov' output looks like this if you compiled the program with
   34644 optimization:
   34645 
   34646            100:   12:if (a != b)
   34647            100:   13:  c = 1;
   34648            100:   14:else
   34649            100:   15:  c = 0;
   34650 
   34651  The output shows that this block of code, combined by optimization,
   34652 executed 100 times.  In one sense this result is correct, because there
   34653 was only one instruction representing all four of these lines.  However,
   34654 the output does not indicate how many times the result was 0 and how
   34655 many times the result was 1.
   34656 
   34657  Inlineable functions can create unexpected line counts.  Line counts
   34658 are shown for the source code of the inlineable function, but what is
   34659 shown depends on where the function is inlined, or if it is not inlined
   34660 at all.
   34661 
   34662  If the function is not inlined, the compiler must emit an out of line
   34663 copy of the function, in any object file that needs it.  If `fileA.o'
   34664 and `fileB.o' both contain out of line bodies of a particular
   34665 inlineable function, they will also both contain coverage counts for
   34666 that function.  When `fileA.o' and `fileB.o' are linked together, the
   34667 linker will, on many systems, select one of those out of line bodies
   34668 for all calls to that function, and remove or ignore the other.
   34669 Unfortunately, it will not remove the coverage counters for the unused
   34670 function body.  Hence when instrumented, all but one use of that
   34671 function will show zero counts.
   34672 
   34673  If the function is inlined in several places, the block structure in
   34674 each location might not be the same.  For instance, a condition might
   34675 now be calculable at compile time in some instances.  Because the
   34676 coverage of all the uses of the inline function will be shown for the
   34677 same source lines, the line counts themselves might seem inconsistent.
   34678 
   34679 
   34680 File: gcc.info,  Node: Gcov Data Files,  Next: Cross-profiling,  Prev: Gcov and Optimization,  Up: Gcov
   34681 
   34682 9.4 Brief description of `gcov' data files
   34683 ==========================================
   34684 
   34685 `gcov' uses two files for profiling.  The names of these files are
   34686 derived from the original _object_ file by substituting the file suffix
   34687 with either `.gcno', or `.gcda'.  All of these files are placed in the
   34688 same directory as the object file, and contain data stored in a
   34689 platform-independent format.
   34690 
   34691  The `.gcno' file is generated when the source file is compiled with
   34692 the GCC `-ftest-coverage' option.  It contains information to
   34693 reconstruct the basic block graphs and assign source line numbers to
   34694 blocks.
   34695 
   34696  The `.gcda' file is generated when a program containing object files
   34697 built with the GCC `-fprofile-arcs' option is executed.  A separate
   34698 `.gcda' file is created for each object file compiled with this option.
   34699 It contains arc transition counts, and some summary information.
   34700 
   34701  The full details of the file format is specified in `gcov-io.h', and
   34702 functions provided in that header file should be used to access the
   34703 coverage files.
   34704 
   34705 
   34706 File: gcc.info,  Node: Cross-profiling,  Prev: Gcov Data Files,  Up: Gcov
   34707 
   34708 9.5 Data file relocation to support cross-profiling
   34709 ===================================================
   34710 
   34711 Running the program will cause profile output to be generated.  For each
   34712 source file compiled with `-fprofile-arcs', an accompanying `.gcda'
   34713 file will be placed in the object file directory. That implicitly
   34714 requires running the program on the same system as it was built or
   34715 having the same absolute directory structure on the target system. The
   34716 program will try to create the needed directory structure, if it is not
   34717 already present.
   34718 
   34719  To support cross-profiling, a program compiled with `-fprofile-arcs'
   34720 can relocate the data files based on two environment variables:
   34721 
   34722    * GCOV_PREFIX contains the prefix to add to the absolute paths in
   34723      the object file. Prefix must be absolute as well, otherwise its
   34724      value is ignored. The default is no prefix.
   34725 
   34726    * GCOV_PREFIX_STRIP indicates the how many initial directory names
   34727      to strip off the hardwired absolute paths. Default value is 0.
   34728 
   34729      _Note:_ GCOV_PREFIX_STRIP has no effect if GCOV_PREFIX is
   34730      undefined, empty or non-absolute.
   34731 
   34732  For example, if the object file `/user/build/foo.o' was built with
   34733 `-fprofile-arcs', the final executable will try to create the data file
   34734 `/user/build/foo.gcda' when running on the target system.  This will
   34735 fail if the corresponding directory does not exist and it is unable to
   34736 create it.  This can be overcome by, for example, setting the
   34737 environment as `GCOV_PREFIX=/target/run' and `GCOV_PREFIX_STRIP=1'.
   34738 Such a setting will name the data file `/target/run/build/foo.gcda'.
   34739 
   34740  You must move the data files to the expected directory tree in order to
   34741 use them for profile directed optimizations (`--use-profile'), or to
   34742 use the `gcov' tool.
   34743 
   34744 
   34745 File: gcc.info,  Node: Trouble,  Next: Bugs,  Prev: Gcov,  Up: Top
   34746 
   34747 10 Known Causes of Trouble with GCC
   34748 ***********************************
   34749 
   34750 This section describes known problems that affect users of GCC.  Most
   34751 of these are not GCC bugs per se--if they were, we would fix them.  But
   34752 the result for a user may be like the result of a bug.
   34753 
   34754  Some of these problems are due to bugs in other software, some are
   34755 missing features that are too much work to add, and some are places
   34756 where people's opinions differ as to what is best.
   34757 
   34758 * Menu:
   34759 
   34760 * Actual Bugs::		      Bugs we will fix later.
   34761 * Cross-Compiler Problems::   Common problems of cross compiling with GCC.
   34762 * Interoperation::      Problems using GCC with other compilers,
   34763 			   and with certain linkers, assemblers and debuggers.
   34764 * Incompatibilities::   GCC is incompatible with traditional C.
   34765 * Fixed Headers::       GCC uses corrected versions of system header files.
   34766                            This is necessary, but doesn't always work smoothly.
   34767 * Standard Libraries::  GCC uses the system C library, which might not be
   34768                            compliant with the ISO C standard.
   34769 * Disappointments::     Regrettable things we can't change, but not quite bugs.
   34770 * C++ Misunderstandings::     Common misunderstandings with GNU C++.
   34771 * Protoize Caveats::    Things to watch out for when using `protoize'.
   34772 * Non-bugs::		Things we think are right, but some others disagree.
   34773 * Warnings and Errors:: Which problems in your code get warnings,
   34774                          and which get errors.
   34775 
   34776 
   34777 File: gcc.info,  Node: Actual Bugs,  Next: Cross-Compiler Problems,  Up: Trouble
   34778 
   34779 10.1 Actual Bugs We Haven't Fixed Yet
   34780 =====================================
   34781 
   34782    * The `fixincludes' script interacts badly with automounters; if the
   34783      directory of system header files is automounted, it tends to be
   34784      unmounted while `fixincludes' is running.  This would seem to be a
   34785      bug in the automounter.  We don't know any good way to work around
   34786      it.
   34787 
   34788    * The `fixproto' script will sometimes add prototypes for the
   34789      `sigsetjmp' and `siglongjmp' functions that reference the
   34790      `jmp_buf' type before that type is defined.  To work around this,
   34791      edit the offending file and place the typedef in front of the
   34792      prototypes.
   34793 
   34794 
   34795 File: gcc.info,  Node: Cross-Compiler Problems,  Next: Interoperation,  Prev: Actual Bugs,  Up: Trouble
   34796 
   34797 10.2 Cross-Compiler Problems
   34798 ============================
   34799 
   34800 You may run into problems with cross compilation on certain machines,
   34801 for several reasons.
   34802 
   34803    * At present, the program `mips-tfile' which adds debug support to
   34804      object files on MIPS systems does not work in a cross compile
   34805      environment.
   34806 
   34807 
   34808 File: gcc.info,  Node: Interoperation,  Next: Incompatibilities,  Prev: Cross-Compiler Problems,  Up: Trouble
   34809 
   34810 10.3 Interoperation
   34811 ===================
   34812 
   34813 This section lists various difficulties encountered in using GCC
   34814 together with other compilers or with the assemblers, linkers,
   34815 libraries and debuggers on certain systems.
   34816 
   34817    * On many platforms, GCC supports a different ABI for C++ than do
   34818      other compilers, so the object files compiled by GCC cannot be
   34819      used with object files generated by another C++ compiler.
   34820 
   34821      An area where the difference is most apparent is name mangling.
   34822      The use of different name mangling is intentional, to protect you
   34823      from more subtle problems.  Compilers differ as to many internal
   34824      details of C++ implementation, including: how class instances are
   34825      laid out, how multiple inheritance is implemented, and how virtual
   34826      function calls are handled.  If the name encoding were made the
   34827      same, your programs would link against libraries provided from
   34828      other compilers--but the programs would then crash when run.
   34829      Incompatible libraries are then detected at link time, rather than
   34830      at run time.
   34831 
   34832    * On some BSD systems, including some versions of Ultrix, use of
   34833      profiling causes static variable destructors (currently used only
   34834      in C++) not to be run.
   34835 
   34836    * On some SGI systems, when you use `-lgl_s' as an option, it gets
   34837      translated magically to `-lgl_s -lX11_s -lc_s'.  Naturally, this
   34838      does not happen when you use GCC.  You must specify all three
   34839      options explicitly.
   34840 
   34841    * On a SPARC, GCC aligns all values of type `double' on an 8-byte
   34842      boundary, and it expects every `double' to be so aligned.  The Sun
   34843      compiler usually gives `double' values 8-byte alignment, with one
   34844      exception: function arguments of type `double' may not be aligned.
   34845 
   34846      As a result, if a function compiled with Sun CC takes the address
   34847      of an argument of type `double' and passes this pointer of type
   34848      `double *' to a function compiled with GCC, dereferencing the
   34849      pointer may cause a fatal signal.
   34850 
   34851      One way to solve this problem is to compile your entire program
   34852      with GCC.  Another solution is to modify the function that is
   34853      compiled with Sun CC to copy the argument into a local variable;
   34854      local variables are always properly aligned.  A third solution is
   34855      to modify the function that uses the pointer to dereference it via
   34856      the following function `access_double' instead of directly with
   34857      `*':
   34858 
   34859           inline double
   34860           access_double (double *unaligned_ptr)
   34861           {
   34862             union d2i { double d; int i[2]; };
   34863 
   34864             union d2i *p = (union d2i *) unaligned_ptr;
   34865             union d2i u;
   34866 
   34867             u.i[0] = p->i[0];
   34868             u.i[1] = p->i[1];
   34869 
   34870             return u.d;
   34871           }
   34872 
   34873      Storing into the pointer can be done likewise with the same union.
   34874 
   34875    * On Solaris, the `malloc' function in the `libmalloc.a' library may
   34876      allocate memory that is only 4 byte aligned.  Since GCC on the
   34877      SPARC assumes that doubles are 8 byte aligned, this may result in a
   34878      fatal signal if doubles are stored in memory allocated by the
   34879      `libmalloc.a' library.
   34880 
   34881      The solution is to not use the `libmalloc.a' library.  Use instead
   34882      `malloc' and related functions from `libc.a'; they do not have
   34883      this problem.
   34884 
   34885    * On the HP PA machine, ADB sometimes fails to work on functions
   34886      compiled with GCC.  Specifically, it fails to work on functions
   34887      that use `alloca' or variable-size arrays.  This is because GCC
   34888      doesn't generate HP-UX unwind descriptors for such functions.  It
   34889      may even be impossible to generate them.
   34890 
   34891    * Debugging (`-g') is not supported on the HP PA machine, unless you
   34892      use the preliminary GNU tools.
   34893 
   34894    * Taking the address of a label may generate errors from the HP-UX
   34895      PA assembler.  GAS for the PA does not have this problem.
   34896 
   34897    * Using floating point parameters for indirect calls to static
   34898      functions will not work when using the HP assembler.  There simply
   34899      is no way for GCC to specify what registers hold arguments for
   34900      static functions when using the HP assembler.  GAS for the PA does
   34901      not have this problem.
   34902 
   34903    * In extremely rare cases involving some very large functions you may
   34904      receive errors from the HP linker complaining about an out of
   34905      bounds unconditional branch offset.  This used to occur more often
   34906      in previous versions of GCC, but is now exceptionally rare.  If
   34907      you should run into it, you can work around by making your
   34908      function smaller.
   34909 
   34910    * GCC compiled code sometimes emits warnings from the HP-UX
   34911      assembler of the form:
   34912 
   34913           (warning) Use of GR3 when
   34914             frame >= 8192 may cause conflict.
   34915 
   34916      These warnings are harmless and can be safely ignored.
   34917 
   34918    * In extremely rare cases involving some very large functions you may
   34919      receive errors from the AIX Assembler complaining about a
   34920      displacement that is too large.  If you should run into it, you
   34921      can work around by making your function smaller.
   34922 
   34923    * The `libstdc++.a' library in GCC relies on the SVR4 dynamic linker
   34924      semantics which merges global symbols between libraries and
   34925      applications, especially necessary for C++ streams functionality.
   34926      This is not the default behavior of AIX shared libraries and
   34927      dynamic linking.  `libstdc++.a' is built on AIX with
   34928      "runtime-linking" enabled so that symbol merging can occur.  To
   34929      utilize this feature, the application linked with `libstdc++.a'
   34930      must include the `-Wl,-brtl' flag on the link line.  G++ cannot
   34931      impose this because this option may interfere with the semantics
   34932      of the user program and users may not always use `g++' to link his
   34933      or her application.  Applications are not required to use the
   34934      `-Wl,-brtl' flag on the link line--the rest of the `libstdc++.a'
   34935      library which is not dependent on the symbol merging semantics
   34936      will continue to function correctly.
   34937 
   34938    * An application can interpose its own definition of functions for
   34939      functions invoked by `libstdc++.a' with "runtime-linking" enabled
   34940      on AIX.  To accomplish this the application must be linked with
   34941      "runtime-linking" option and the functions explicitly must be
   34942      exported by the application (`-Wl,-brtl,-bE:exportfile').
   34943 
   34944    * AIX on the RS/6000 provides support (NLS) for environments outside
   34945      of the United States.  Compilers and assemblers use NLS to support
   34946      locale-specific representations of various objects including
   34947      floating-point numbers (`.' vs `,' for separating decimal
   34948      fractions).  There have been problems reported where the library
   34949      linked with GCC does not produce the same floating-point formats
   34950      that the assembler accepts.  If you have this problem, set the
   34951      `LANG' environment variable to `C' or `En_US'.
   34952 
   34953    * Even if you specify `-fdollars-in-identifiers', you cannot
   34954      successfully use `$' in identifiers on the RS/6000 due to a
   34955      restriction in the IBM assembler.  GAS supports these identifiers.
   34956 
   34957 
   34958 
   34959 File: gcc.info,  Node: Incompatibilities,  Next: Fixed Headers,  Prev: Interoperation,  Up: Trouble
   34960 
   34961 10.4 Incompatibilities of GCC
   34962 =============================
   34963 
   34964 There are several noteworthy incompatibilities between GNU C and K&R
   34965 (non-ISO) versions of C.
   34966 
   34967    * GCC normally makes string constants read-only.  If several
   34968      identical-looking string constants are used, GCC stores only one
   34969      copy of the string.
   34970 
   34971      One consequence is that you cannot call `mktemp' with a string
   34972      constant argument.  The function `mktemp' always alters the string
   34973      its argument points to.
   34974 
   34975      Another consequence is that `sscanf' does not work on some very
   34976      old systems when passed a string constant as its format control
   34977      string or input.  This is because `sscanf' incorrectly tries to
   34978      write into the string constant.  Likewise `fscanf' and `scanf'.
   34979 
   34980      The solution to these problems is to change the program to use
   34981      `char'-array variables with initialization strings for these
   34982      purposes instead of string constants.
   34983 
   34984    * `-2147483648' is positive.
   34985 
   34986      This is because 2147483648 cannot fit in the type `int', so
   34987      (following the ISO C rules) its data type is `unsigned long int'.
   34988      Negating this value yields 2147483648 again.
   34989 
   34990    * GCC does not substitute macro arguments when they appear inside of
   34991      string constants.  For example, the following macro in GCC
   34992 
   34993           #define foo(a) "a"
   34994 
   34995      will produce output `"a"' regardless of what the argument A is.
   34996 
   34997    * When you use `setjmp' and `longjmp', the only automatic variables
   34998      guaranteed to remain valid are those declared `volatile'.  This is
   34999      a consequence of automatic register allocation.  Consider this
   35000      function:
   35001 
   35002           jmp_buf j;
   35003 
   35004           foo ()
   35005           {
   35006             int a, b;
   35007 
   35008             a = fun1 ();
   35009             if (setjmp (j))
   35010               return a;
   35011 
   35012             a = fun2 ();
   35013             /* `longjmp (j)' may occur in `fun3'. */
   35014             return a + fun3 ();
   35015           }
   35016 
   35017      Here `a' may or may not be restored to its first value when the
   35018      `longjmp' occurs.  If `a' is allocated in a register, then its
   35019      first value is restored; otherwise, it keeps the last value stored
   35020      in it.
   35021 
   35022      If you use the `-W' option with the `-O' option, you will get a
   35023      warning when GCC thinks such a problem might be possible.
   35024 
   35025    * Programs that use preprocessing directives in the middle of macro
   35026      arguments do not work with GCC.  For example, a program like this
   35027      will not work:
   35028 
   35029           foobar (
   35030           #define luser
   35031                   hack)
   35032 
   35033      ISO C does not permit such a construct.
   35034 
   35035    * K&R compilers allow comments to cross over an inclusion boundary
   35036      (i.e. started in an include file and ended in the including file).
   35037 
   35038    * Declarations of external variables and functions within a block
   35039      apply only to the block containing the declaration.  In other
   35040      words, they have the same scope as any other declaration in the
   35041      same place.
   35042 
   35043      In some other C compilers, a `extern' declaration affects all the
   35044      rest of the file even if it happens within a block.
   35045 
   35046    * In traditional C, you can combine `long', etc., with a typedef
   35047      name, as shown here:
   35048 
   35049           typedef int foo;
   35050           typedef long foo bar;
   35051 
   35052      In ISO C, this is not allowed: `long' and other type modifiers
   35053      require an explicit `int'.
   35054 
   35055    * PCC allows typedef names to be used as function parameters.
   35056 
   35057    * Traditional C allows the following erroneous pair of declarations
   35058      to appear together in a given scope:
   35059 
   35060           typedef int foo;
   35061           typedef foo foo;
   35062 
   35063    * GCC treats all characters of identifiers as significant.
   35064      According to K&R-1 (2.2), "No more than the first eight characters
   35065      are significant, although more may be used.".  Also according to
   35066      K&R-1 (2.2), "An identifier is a sequence of letters and digits;
   35067      the first character must be a letter.  The underscore _ counts as
   35068      a letter.", but GCC also allows dollar signs in identifiers.
   35069 
   35070    * PCC allows whitespace in the middle of compound assignment
   35071      operators such as `+='.  GCC, following the ISO standard, does not
   35072      allow this.
   35073 
   35074    * GCC complains about unterminated character constants inside of
   35075      preprocessing conditionals that fail.  Some programs have English
   35076      comments enclosed in conditionals that are guaranteed to fail; if
   35077      these comments contain apostrophes, GCC will probably report an
   35078      error.  For example, this code would produce an error:
   35079 
   35080           #if 0
   35081           You can't expect this to work.
   35082           #endif
   35083 
   35084      The best solution to such a problem is to put the text into an
   35085      actual C comment delimited by `/*...*/'.
   35086 
   35087    * Many user programs contain the declaration `long time ();'.  In the
   35088      past, the system header files on many systems did not actually
   35089      declare `time', so it did not matter what type your program
   35090      declared it to return.  But in systems with ISO C headers, `time'
   35091      is declared to return `time_t', and if that is not the same as
   35092      `long', then `long time ();' is erroneous.
   35093 
   35094      The solution is to change your program to use appropriate system
   35095      headers (`<time.h>' on systems with ISO C headers) and not to
   35096      declare `time' if the system header files declare it, or failing
   35097      that to use `time_t' as the return type of `time'.
   35098 
   35099    * When compiling functions that return `float', PCC converts it to a
   35100      double.  GCC actually returns a `float'.  If you are concerned
   35101      with PCC compatibility, you should declare your functions to return
   35102      `double'; you might as well say what you mean.
   35103 
   35104    * When compiling functions that return structures or unions, GCC
   35105      output code normally uses a method different from that used on most
   35106      versions of Unix.  As a result, code compiled with GCC cannot call
   35107      a structure-returning function compiled with PCC, and vice versa.
   35108 
   35109      The method used by GCC is as follows: a structure or union which is
   35110      1, 2, 4 or 8 bytes long is returned like a scalar.  A structure or
   35111      union with any other size is stored into an address supplied by
   35112      the caller (usually in a special, fixed register, but on some
   35113      machines it is passed on the stack).  The target hook
   35114      `TARGET_STRUCT_VALUE_RTX' tells GCC where to pass this address.
   35115 
   35116      By contrast, PCC on most target machines returns structures and
   35117      unions of any size by copying the data into an area of static
   35118      storage, and then returning the address of that storage as if it
   35119      were a pointer value.  The caller must copy the data from that
   35120      memory area to the place where the value is wanted.  GCC does not
   35121      use this method because it is slower and nonreentrant.
   35122 
   35123      On some newer machines, PCC uses a reentrant convention for all
   35124      structure and union returning.  GCC on most of these machines uses
   35125      a compatible convention when returning structures and unions in
   35126      memory, but still returns small structures and unions in registers.
   35127 
   35128      You can tell GCC to use a compatible convention for all structure
   35129      and union returning with the option `-fpcc-struct-return'.
   35130 
   35131    * GCC complains about program fragments such as `0x74ae-0x4000'
   35132      which appear to be two hexadecimal constants separated by the minus
   35133      operator.  Actually, this string is a single "preprocessing token".
   35134      Each such token must correspond to one token in C.  Since this
   35135      does not, GCC prints an error message.  Although it may appear
   35136      obvious that what is meant is an operator and two values, the ISO
   35137      C standard specifically requires that this be treated as erroneous.
   35138 
   35139      A "preprocessing token" is a "preprocessing number" if it begins
   35140      with a digit and is followed by letters, underscores, digits,
   35141      periods and `e+', `e-', `E+', `E-', `p+', `p-', `P+', or `P-'
   35142      character sequences.  (In strict C89 mode, the sequences `p+',
   35143      `p-', `P+' and `P-' cannot appear in preprocessing numbers.)
   35144 
   35145      To make the above program fragment valid, place whitespace in
   35146      front of the minus sign.  This whitespace will end the
   35147      preprocessing number.
   35148 
   35149 
   35150 File: gcc.info,  Node: Fixed Headers,  Next: Standard Libraries,  Prev: Incompatibilities,  Up: Trouble
   35151 
   35152 10.5 Fixed Header Files
   35153 =======================
   35154 
   35155 GCC needs to install corrected versions of some system header files.
   35156 This is because most target systems have some header files that won't
   35157 work with GCC unless they are changed.  Some have bugs, some are
   35158 incompatible with ISO C, and some depend on special features of other
   35159 compilers.
   35160 
   35161  Installing GCC automatically creates and installs the fixed header
   35162 files, by running a program called `fixincludes'.  Normally, you don't
   35163 need to pay attention to this.  But there are cases where it doesn't do
   35164 the right thing automatically.
   35165 
   35166    * If you update the system's header files, such as by installing a
   35167      new system version, the fixed header files of GCC are not
   35168      automatically updated.  They can be updated using the `mkheaders'
   35169      script installed in `LIBEXECDIR/gcc/TARGET/VERSION/install-tools/'.
   35170 
   35171    * On some systems, header file directories contain machine-specific
   35172      symbolic links in certain places.  This makes it possible to share
   35173      most of the header files among hosts running the same version of
   35174      the system on different machine models.
   35175 
   35176      The programs that fix the header files do not understand this
   35177      special way of using symbolic links; therefore, the directory of
   35178      fixed header files is good only for the machine model used to
   35179      build it.
   35180 
   35181      It is possible to make separate sets of fixed header files for the
   35182      different machine models, and arrange a structure of symbolic
   35183      links so as to use the proper set, but you'll have to do this by
   35184      hand.
   35185 
   35186 
   35187 File: gcc.info,  Node: Standard Libraries,  Next: Disappointments,  Prev: Fixed Headers,  Up: Trouble
   35188 
   35189 10.6 Standard Libraries
   35190 =======================
   35191 
   35192 GCC by itself attempts to be a conforming freestanding implementation.
   35193 *Note Language Standards Supported by GCC: Standards, for details of
   35194 what this means.  Beyond the library facilities required of such an
   35195 implementation, the rest of the C library is supplied by the vendor of
   35196 the operating system.  If that C library doesn't conform to the C
   35197 standards, then your programs might get warnings (especially when using
   35198 `-Wall') that you don't expect.
   35199 
   35200  For example, the `sprintf' function on SunOS 4.1.3 returns `char *'
   35201 while the C standard says that `sprintf' returns an `int'.  The
   35202 `fixincludes' program could make the prototype for this function match
   35203 the Standard, but that would be wrong, since the function will still
   35204 return `char *'.
   35205 
   35206  If you need a Standard compliant library, then you need to find one, as
   35207 GCC does not provide one.  The GNU C library (called `glibc') provides
   35208 ISO C, POSIX, BSD, SystemV and X/Open compatibility for GNU/Linux and
   35209 HURD-based GNU systems; no recent version of it supports other systems,
   35210 though some very old versions did.  Version 2.2 of the GNU C library
   35211 includes nearly complete C99 support.  You could also ask your
   35212 operating system vendor if newer libraries are available.
   35213 
   35214 
   35215 File: gcc.info,  Node: Disappointments,  Next: C++ Misunderstandings,  Prev: Standard Libraries,  Up: Trouble
   35216 
   35217 10.7 Disappointments and Misunderstandings
   35218 ==========================================
   35219 
   35220 These problems are perhaps regrettable, but we don't know any practical
   35221 way around them.
   35222 
   35223    * Certain local variables aren't recognized by debuggers when you
   35224      compile with optimization.
   35225 
   35226      This occurs because sometimes GCC optimizes the variable out of
   35227      existence.  There is no way to tell the debugger how to compute the
   35228      value such a variable "would have had", and it is not clear that
   35229      would be desirable anyway.  So GCC simply does not mention the
   35230      eliminated variable when it writes debugging information.
   35231 
   35232      You have to expect a certain amount of disagreement between the
   35233      executable and your source code, when you use optimization.
   35234 
   35235    * Users often think it is a bug when GCC reports an error for code
   35236      like this:
   35237 
   35238           int foo (struct mumble *);
   35239 
   35240           struct mumble { ... };
   35241 
   35242           int foo (struct mumble *x)
   35243           { ... }
   35244 
   35245      This code really is erroneous, because the scope of `struct
   35246      mumble' in the prototype is limited to the argument list
   35247      containing it.  It does not refer to the `struct mumble' defined
   35248      with file scope immediately below--they are two unrelated types
   35249      with similar names in different scopes.
   35250 
   35251      But in the definition of `foo', the file-scope type is used
   35252      because that is available to be inherited.  Thus, the definition
   35253      and the prototype do not match, and you get an error.
   35254 
   35255      This behavior may seem silly, but it's what the ISO standard
   35256      specifies.  It is easy enough for you to make your code work by
   35257      moving the definition of `struct mumble' above the prototype.
   35258      It's not worth being incompatible with ISO C just to avoid an
   35259      error for the example shown above.
   35260 
   35261    * Accesses to bit-fields even in volatile objects works by accessing
   35262      larger objects, such as a byte or a word.  You cannot rely on what
   35263      size of object is accessed in order to read or write the
   35264      bit-field; it may even vary for a given bit-field according to the
   35265      precise usage.
   35266 
   35267      If you care about controlling the amount of memory that is
   35268      accessed, use volatile but do not use bit-fields.
   35269 
   35270    * GCC comes with shell scripts to fix certain known problems in
   35271      system header files.  They install corrected copies of various
   35272      header files in a special directory where only GCC will normally
   35273      look for them.  The scripts adapt to various systems by searching
   35274      all the system header files for the problem cases that we know
   35275      about.
   35276 
   35277      If new system header files are installed, nothing automatically
   35278      arranges to update the corrected header files.  They can be
   35279      updated using the `mkheaders' script installed in
   35280      `LIBEXECDIR/gcc/TARGET/VERSION/install-tools/'.
   35281 
   35282    * On 68000 and x86 systems, for instance, you can get paradoxical
   35283      results if you test the precise values of floating point numbers.
   35284      For example, you can find that a floating point value which is not
   35285      a NaN is not equal to itself.  This results from the fact that the
   35286      floating point registers hold a few more bits of precision than
   35287      fit in a `double' in memory.  Compiled code moves values between
   35288      memory and floating point registers at its convenience, and moving
   35289      them into memory truncates them.
   35290 
   35291      You can partially avoid this problem by using the `-ffloat-store'
   35292      option (*note Optimize Options::).
   35293 
   35294    * On AIX and other platforms without weak symbol support, templates
   35295      need to be instantiated explicitly and symbols for static members
   35296      of templates will not be generated.
   35297 
   35298    * On AIX, GCC scans object files and library archives for static
   35299      constructors and destructors when linking an application before the
   35300      linker prunes unreferenced symbols.  This is necessary to prevent
   35301      the AIX linker from mistakenly assuming that static constructor or
   35302      destructor are unused and removing them before the scanning can
   35303      occur.  All static constructors and destructors found will be
   35304      referenced even though the modules in which they occur may not be
   35305      used by the program.  This may lead to both increased executable
   35306      size and unexpected symbol references.
   35307 
   35308 
   35309 File: gcc.info,  Node: C++ Misunderstandings,  Next: Protoize Caveats,  Prev: Disappointments,  Up: Trouble
   35310 
   35311 10.8 Common Misunderstandings with GNU C++
   35312 ==========================================
   35313 
   35314 C++ is a complex language and an evolving one, and its standard
   35315 definition (the ISO C++ standard) was only recently completed.  As a
   35316 result, your C++ compiler may occasionally surprise you, even when its
   35317 behavior is correct.  This section discusses some areas that frequently
   35318 give rise to questions of this sort.
   35319 
   35320 * Menu:
   35321 
   35322 * Static Definitions::  Static member declarations are not definitions
   35323 * Name lookup::         Name lookup, templates, and accessing members of base classes
   35324 * Temporaries::         Temporaries may vanish before you expect
   35325 * Copy Assignment::     Copy Assignment operators copy virtual bases twice
   35326 
   35327 
   35328 File: gcc.info,  Node: Static Definitions,  Next: Name lookup,  Up: C++ Misunderstandings
   35329 
   35330 10.8.1 Declare _and_ Define Static Members
   35331 ------------------------------------------
   35332 
   35333 When a class has static data members, it is not enough to _declare_ the
   35334 static member; you must also _define_ it.  For example:
   35335 
   35336      class Foo
   35337      {
   35338        ...
   35339        void method();
   35340        static int bar;
   35341      };
   35342 
   35343  This declaration only establishes that the class `Foo' has an `int'
   35344 named `Foo::bar', and a member function named `Foo::method'.  But you
   35345 still need to define _both_ `method' and `bar' elsewhere.  According to
   35346 the ISO standard, you must supply an initializer in one (and only one)
   35347 source file, such as:
   35348 
   35349      int Foo::bar = 0;
   35350 
   35351  Other C++ compilers may not correctly implement the standard behavior.
   35352 As a result, when you switch to `g++' from one of these compilers, you
   35353 may discover that a program that appeared to work correctly in fact
   35354 does not conform to the standard: `g++' reports as undefined symbols
   35355 any static data members that lack definitions.
   35356 
   35357 
   35358 File: gcc.info,  Node: Name lookup,  Next: Temporaries,  Prev: Static Definitions,  Up: C++ Misunderstandings
   35359 
   35360 10.8.2 Name lookup, templates, and accessing members of base classes
   35361 --------------------------------------------------------------------
   35362 
   35363 The C++ standard prescribes that all names that are not dependent on
   35364 template parameters are bound to their present definitions when parsing
   35365 a template function or class.(1)  Only names that are dependent are
   35366 looked up at the point of instantiation.  For example, consider
   35367 
   35368        void foo(double);
   35369 
   35370        struct A {
   35371          template <typename T>
   35372          void f () {
   35373            foo (1);        // 1
   35374            int i = N;      // 2
   35375            T t;
   35376            t.bar();        // 3
   35377            foo (t);        // 4
   35378          }
   35379 
   35380          static const int N;
   35381        };
   35382 
   35383  Here, the names `foo' and `N' appear in a context that does not depend
   35384 on the type of `T'.  The compiler will thus require that they are
   35385 defined in the context of use in the template, not only before the
   35386 point of instantiation, and will here use `::foo(double)' and `A::N',
   35387 respectively.  In particular, it will convert the integer value to a
   35388 `double' when passing it to `::foo(double)'.
   35389 
   35390  Conversely, `bar' and the call to `foo' in the fourth marked line are
   35391 used in contexts that do depend on the type of `T', so they are only
   35392 looked up at the point of instantiation, and you can provide
   35393 declarations for them after declaring the template, but before
   35394 instantiating it.  In particular, if you instantiate `A::f<int>', the
   35395 last line will call an overloaded `::foo(int)' if one was provided,
   35396 even if after the declaration of `struct A'.
   35397 
   35398  This distinction between lookup of dependent and non-dependent names is
   35399 called two-stage (or dependent) name lookup.  G++ implements it since
   35400 version 3.4.
   35401 
   35402  Two-stage name lookup sometimes leads to situations with behavior
   35403 different from non-template codes.  The most common is probably this:
   35404 
   35405        template <typename T> struct Base {
   35406          int i;
   35407        };
   35408 
   35409        template <typename T> struct Derived : public Base<T> {
   35410          int get_i() { return i; }
   35411        };
   35412 
   35413  In `get_i()', `i' is not used in a dependent context, so the compiler
   35414 will look for a name declared at the enclosing namespace scope (which
   35415 is the global scope here).  It will not look into the base class, since
   35416 that is dependent and you may declare specializations of `Base' even
   35417 after declaring `Derived', so the compiler can't really know what `i'
   35418 would refer to.  If there is no global variable `i', then you will get
   35419 an error message.
   35420 
   35421  In order to make it clear that you want the member of the base class,
   35422 you need to defer lookup until instantiation time, at which the base
   35423 class is known.  For this, you need to access `i' in a dependent
   35424 context, by either using `this->i' (remember that `this' is of type
   35425 `Derived<T>*', so is obviously dependent), or using `Base<T>::i'.
   35426 Alternatively, `Base<T>::i' might be brought into scope by a
   35427 `using'-declaration.
   35428 
   35429  Another, similar example involves calling member functions of a base
   35430 class:
   35431 
   35432        template <typename T> struct Base {
   35433            int f();
   35434        };
   35435 
   35436        template <typename T> struct Derived : Base<T> {
   35437            int g() { return f(); };
   35438        };
   35439 
   35440  Again, the call to `f()' is not dependent on template arguments (there
   35441 are no arguments that depend on the type `T', and it is also not
   35442 otherwise specified that the call should be in a dependent context).
   35443 Thus a global declaration of such a function must be available, since
   35444 the one in the base class is not visible until instantiation time.  The
   35445 compiler will consequently produce the following error message:
   35446 
   35447        x.cc: In member function `int Derived<T>::g()':
   35448        x.cc:6: error: there are no arguments to `f' that depend on a template
   35449           parameter, so a declaration of `f' must be available
   35450        x.cc:6: error: (if you use `-fpermissive', G++ will accept your code, but
   35451           allowing the use of an undeclared name is deprecated)
   35452 
   35453  To make the code valid either use `this->f()', or `Base<T>::f()'.
   35454 Using the `-fpermissive' flag will also let the compiler accept the
   35455 code, by marking all function calls for which no declaration is visible
   35456 at the time of definition of the template for later lookup at
   35457 instantiation time, as if it were a dependent call.  We do not
   35458 recommend using `-fpermissive' to work around invalid code, and it will
   35459 also only catch cases where functions in base classes are called, not
   35460 where variables in base classes are used (as in the example above).
   35461 
   35462  Note that some compilers (including G++ versions prior to 3.4) get
   35463 these examples wrong and accept above code without an error.  Those
   35464 compilers do not implement two-stage name lookup correctly.
   35465 
   35466  ---------- Footnotes ----------
   35467 
   35468  (1) The C++ standard just uses the term "dependent" for names that
   35469 depend on the type or value of template parameters.  This shorter term
   35470 will also be used in the rest of this section.
   35471 
   35472 
   35473 File: gcc.info,  Node: Temporaries,  Next: Copy Assignment,  Prev: Name lookup,  Up: C++ Misunderstandings
   35474 
   35475 10.8.3 Temporaries May Vanish Before You Expect
   35476 -----------------------------------------------
   35477 
   35478 It is dangerous to use pointers or references to _portions_ of a
   35479 temporary object.  The compiler may very well delete the object before
   35480 you expect it to, leaving a pointer to garbage.  The most common place
   35481 where this problem crops up is in classes like string classes,
   35482 especially ones that define a conversion function to type `char *' or
   35483 `const char *'--which is one reason why the standard `string' class
   35484 requires you to call the `c_str' member function.  However, any class
   35485 that returns a pointer to some internal structure is potentially
   35486 subject to this problem.
   35487 
   35488  For example, a program may use a function `strfunc' that returns
   35489 `string' objects, and another function `charfunc' that operates on
   35490 pointers to `char':
   35491 
   35492      string strfunc ();
   35493      void charfunc (const char *);
   35494 
   35495      void
   35496      f ()
   35497      {
   35498        const char *p = strfunc().c_str();
   35499        ...
   35500        charfunc (p);
   35501        ...
   35502        charfunc (p);
   35503      }
   35504 
   35505 In this situation, it may seem reasonable to save a pointer to the C
   35506 string returned by the `c_str' member function and use that rather than
   35507 call `c_str' repeatedly.  However, the temporary string created by the
   35508 call to `strfunc' is destroyed after `p' is initialized, at which point
   35509 `p' is left pointing to freed memory.
   35510 
   35511  Code like this may run successfully under some other compilers,
   35512 particularly obsolete cfront-based compilers that delete temporaries
   35513 along with normal local variables.  However, the GNU C++ behavior is
   35514 standard-conforming, so if your program depends on late destruction of
   35515 temporaries it is not portable.
   35516 
   35517  The safe way to write such code is to give the temporary a name, which
   35518 forces it to remain until the end of the scope of the name.  For
   35519 example:
   35520 
   35521      const string& tmp = strfunc ();
   35522      charfunc (tmp.c_str ());
   35523 
   35524 
   35525 File: gcc.info,  Node: Copy Assignment,  Prev: Temporaries,  Up: C++ Misunderstandings
   35526 
   35527 10.8.4 Implicit Copy-Assignment for Virtual Bases
   35528 -------------------------------------------------
   35529 
   35530 When a base class is virtual, only one subobject of the base class
   35531 belongs to each full object.  Also, the constructors and destructors are
   35532 invoked only once, and called from the most-derived class.  However,
   35533 such objects behave unspecified when being assigned.  For example:
   35534 
   35535      struct Base{
   35536        char *name;
   35537        Base(char *n) : name(strdup(n)){}
   35538        Base& operator= (const Base& other){
   35539         free (name);
   35540         name = strdup (other.name);
   35541        }
   35542      };
   35543 
   35544      struct A:virtual Base{
   35545        int val;
   35546        A():Base("A"){}
   35547      };
   35548 
   35549      struct B:virtual Base{
   35550        int bval;
   35551        B():Base("B"){}
   35552      };
   35553 
   35554      struct Derived:public A, public B{
   35555        Derived():Base("Derived"){}
   35556      };
   35557 
   35558      void func(Derived &d1, Derived &d2)
   35559      {
   35560        d1 = d2;
   35561      }
   35562 
   35563  The C++ standard specifies that `Base::Base' is only called once when
   35564 constructing or copy-constructing a Derived object.  It is unspecified
   35565 whether `Base::operator=' is called more than once when the implicit
   35566 copy-assignment for Derived objects is invoked (as it is inside `func'
   35567 in the example).
   35568 
   35569  G++ implements the "intuitive" algorithm for copy-assignment: assign
   35570 all direct bases, then assign all members.  In that algorithm, the
   35571 virtual base subobject can be encountered more than once.  In the
   35572 example, copying proceeds in the following order: `val', `name' (via
   35573 `strdup'), `bval', and `name' again.
   35574 
   35575  If application code relies on copy-assignment, a user-defined
   35576 copy-assignment operator removes any uncertainties.  With such an
   35577 operator, the application can define whether and how the virtual base
   35578 subobject is assigned.
   35579 
   35580 
   35581 File: gcc.info,  Node: Protoize Caveats,  Next: Non-bugs,  Prev: C++ Misunderstandings,  Up: Trouble
   35582 
   35583 10.9 Caveats of using `protoize'
   35584 ================================
   35585 
   35586 The conversion programs `protoize' and `unprotoize' can sometimes
   35587 change a source file in a way that won't work unless you rearrange it.
   35588 
   35589    * `protoize' can insert references to a type name or type tag before
   35590      the definition, or in a file where they are not defined.
   35591 
   35592      If this happens, compiler error messages should show you where the
   35593      new references are, so fixing the file by hand is straightforward.
   35594 
   35595    * There are some C constructs which `protoize' cannot figure out.
   35596      For example, it can't determine argument types for declaring a
   35597      pointer-to-function variable; this you must do by hand.  `protoize'
   35598      inserts a comment containing `???' each time it finds such a
   35599      variable; so you can find all such variables by searching for this
   35600      string.  ISO C does not require declaring the argument types of
   35601      pointer-to-function types.
   35602 
   35603    * Using `unprotoize' can easily introduce bugs.  If the program
   35604      relied on prototypes to bring about conversion of arguments, these
   35605      conversions will not take place in the program without prototypes.
   35606      One case in which you can be sure `unprotoize' is safe is when you
   35607      are removing prototypes that were made with `protoize'; if the
   35608      program worked before without any prototypes, it will work again
   35609      without them.
   35610 
   35611      You can find all the places where this problem might occur by
   35612      compiling the program with the `-Wtraditional-conversion' option.
   35613      It prints a warning whenever an argument is converted.
   35614 
   35615    * Both conversion programs can be confused if there are macro calls
   35616      in and around the text to be converted.  In other words, the
   35617      standard syntax for a declaration or definition must not result
   35618      from expanding a macro.  This problem is inherent in the design of
   35619      C and cannot be fixed.  If only a few functions have confusing
   35620      macro calls, you can easily convert them manually.
   35621 
   35622    * `protoize' cannot get the argument types for a function whose
   35623      definition was not actually compiled due to preprocessing
   35624      conditionals.  When this happens, `protoize' changes nothing in
   35625      regard to such a function.  `protoize' tries to detect such
   35626      instances and warn about them.
   35627 
   35628      You can generally work around this problem by using `protoize' step
   35629      by step, each time specifying a different set of `-D' options for
   35630      compilation, until all of the functions have been converted.
   35631      There is no automatic way to verify that you have got them all,
   35632      however.
   35633 
   35634    * Confusion may result if there is an occasion to convert a function
   35635      declaration or definition in a region of source code where there
   35636      is more than one formal parameter list present.  Thus, attempts to
   35637      convert code containing multiple (conditionally compiled) versions
   35638      of a single function header (in the same vicinity) may not produce
   35639      the desired (or expected) results.
   35640 
   35641      If you plan on converting source files which contain such code, it
   35642      is recommended that you first make sure that each conditionally
   35643      compiled region of source code which contains an alternative
   35644      function header also contains at least one additional follower
   35645      token (past the final right parenthesis of the function header).
   35646      This should circumvent the problem.
   35647 
   35648    * `unprotoize' can become confused when trying to convert a function
   35649      definition or declaration which contains a declaration for a
   35650      pointer-to-function formal argument which has the same name as the
   35651      function being defined or declared.  We recommend you avoid such
   35652      choices of formal parameter names.
   35653 
   35654    * You might also want to correct some of the indentation by hand and
   35655      break long lines.  (The conversion programs don't write lines
   35656      longer than eighty characters in any case.)
   35657 
   35658 
   35659 File: gcc.info,  Node: Non-bugs,  Next: Warnings and Errors,  Prev: Protoize Caveats,  Up: Trouble
   35660 
   35661 10.10 Certain Changes We Don't Want to Make
   35662 ===========================================
   35663 
   35664 This section lists changes that people frequently request, but which we
   35665 do not make because we think GCC is better without them.
   35666 
   35667    * Checking the number and type of arguments to a function which has
   35668      an old-fashioned definition and no prototype.
   35669 
   35670      Such a feature would work only occasionally--only for calls that
   35671      appear in the same file as the called function, following the
   35672      definition.  The only way to check all calls reliably is to add a
   35673      prototype for the function.  But adding a prototype eliminates the
   35674      motivation for this feature.  So the feature is not worthwhile.
   35675 
   35676    * Warning about using an expression whose type is signed as a shift
   35677      count.
   35678 
   35679      Shift count operands are probably signed more often than unsigned.
   35680      Warning about this would cause far more annoyance than good.
   35681 
   35682    * Warning about assigning a signed value to an unsigned variable.
   35683 
   35684      Such assignments must be very common; warning about them would
   35685      cause more annoyance than good.
   35686 
   35687    * Warning when a non-void function value is ignored.
   35688 
   35689      C contains many standard functions that return a value that most
   35690      programs choose to ignore.  One obvious example is `printf'.
   35691      Warning about this practice only leads the defensive programmer to
   35692      clutter programs with dozens of casts to `void'.  Such casts are
   35693      required so frequently that they become visual noise.  Writing
   35694      those casts becomes so automatic that they no longer convey useful
   35695      information about the intentions of the programmer.  For functions
   35696      where the return value should never be ignored, use the
   35697      `warn_unused_result' function attribute (*note Function
   35698      Attributes::).
   35699 
   35700    * Making `-fshort-enums' the default.
   35701 
   35702      This would cause storage layout to be incompatible with most other
   35703      C compilers.  And it doesn't seem very important, given that you
   35704      can get the same result in other ways.  The case where it matters
   35705      most is when the enumeration-valued object is inside a structure,
   35706      and in that case you can specify a field width explicitly.
   35707 
   35708    * Making bit-fields unsigned by default on particular machines where
   35709      "the ABI standard" says to do so.
   35710 
   35711      The ISO C standard leaves it up to the implementation whether a
   35712      bit-field declared plain `int' is signed or not.  This in effect
   35713      creates two alternative dialects of C.
   35714 
   35715      The GNU C compiler supports both dialects; you can specify the
   35716      signed dialect with `-fsigned-bitfields' and the unsigned dialect
   35717      with `-funsigned-bitfields'.  However, this leaves open the
   35718      question of which dialect to use by default.
   35719 
   35720      Currently, the preferred dialect makes plain bit-fields signed,
   35721      because this is simplest.  Since `int' is the same as `signed int'
   35722      in every other context, it is cleanest for them to be the same in
   35723      bit-fields as well.
   35724 
   35725      Some computer manufacturers have published Application Binary
   35726      Interface standards which specify that plain bit-fields should be
   35727      unsigned.  It is a mistake, however, to say anything about this
   35728      issue in an ABI.  This is because the handling of plain bit-fields
   35729      distinguishes two dialects of C.  Both dialects are meaningful on
   35730      every type of machine.  Whether a particular object file was
   35731      compiled using signed bit-fields or unsigned is of no concern to
   35732      other object files, even if they access the same bit-fields in the
   35733      same data structures.
   35734 
   35735      A given program is written in one or the other of these two
   35736      dialects.  The program stands a chance to work on most any machine
   35737      if it is compiled with the proper dialect.  It is unlikely to work
   35738      at all if compiled with the wrong dialect.
   35739 
   35740      Many users appreciate the GNU C compiler because it provides an
   35741      environment that is uniform across machines.  These users would be
   35742      inconvenienced if the compiler treated plain bit-fields
   35743      differently on certain machines.
   35744 
   35745      Occasionally users write programs intended only for a particular
   35746      machine type.  On these occasions, the users would benefit if the
   35747      GNU C compiler were to support by default the same dialect as the
   35748      other compilers on that machine.  But such applications are rare.
   35749      And users writing a program to run on more than one type of
   35750      machine cannot possibly benefit from this kind of compatibility.
   35751 
   35752      This is why GCC does and will treat plain bit-fields in the same
   35753      fashion on all types of machines (by default).
   35754 
   35755      There are some arguments for making bit-fields unsigned by default
   35756      on all machines.  If, for example, this becomes a universal de
   35757      facto standard, it would make sense for GCC to go along with it.
   35758      This is something to be considered in the future.
   35759 
   35760      (Of course, users strongly concerned about portability should
   35761      indicate explicitly in each bit-field whether it is signed or not.
   35762      In this way, they write programs which have the same meaning in
   35763      both C dialects.)
   35764 
   35765    * Undefining `__STDC__' when `-ansi' is not used.
   35766 
   35767      Currently, GCC defines `__STDC__' unconditionally.  This provides
   35768      good results in practice.
   35769 
   35770      Programmers normally use conditionals on `__STDC__' to ask whether
   35771      it is safe to use certain features of ISO C, such as function
   35772      prototypes or ISO token concatenation.  Since plain `gcc' supports
   35773      all the features of ISO C, the correct answer to these questions is
   35774      "yes".
   35775 
   35776      Some users try to use `__STDC__' to check for the availability of
   35777      certain library facilities.  This is actually incorrect usage in
   35778      an ISO C program, because the ISO C standard says that a conforming
   35779      freestanding implementation should define `__STDC__' even though it
   35780      does not have the library facilities.  `gcc -ansi -pedantic' is a
   35781      conforming freestanding implementation, and it is therefore
   35782      required to define `__STDC__', even though it does not come with
   35783      an ISO C library.
   35784 
   35785      Sometimes people say that defining `__STDC__' in a compiler that
   35786      does not completely conform to the ISO C standard somehow violates
   35787      the standard.  This is illogical.  The standard is a standard for
   35788      compilers that claim to support ISO C, such as `gcc -ansi'--not
   35789      for other compilers such as plain `gcc'.  Whatever the ISO C
   35790      standard says is relevant to the design of plain `gcc' without
   35791      `-ansi' only for pragmatic reasons, not as a requirement.
   35792 
   35793      GCC normally defines `__STDC__' to be 1, and in addition defines
   35794      `__STRICT_ANSI__' if you specify the `-ansi' option, or a `-std'
   35795      option for strict conformance to some version of ISO C.  On some
   35796      hosts, system include files use a different convention, where
   35797      `__STDC__' is normally 0, but is 1 if the user specifies strict
   35798      conformance to the C Standard.  GCC follows the host convention
   35799      when processing system include files, but when processing user
   35800      files it follows the usual GNU C convention.
   35801 
   35802    * Undefining `__STDC__' in C++.
   35803 
   35804      Programs written to compile with C++-to-C translators get the
   35805      value of `__STDC__' that goes with the C compiler that is
   35806      subsequently used.  These programs must test `__STDC__' to
   35807      determine what kind of C preprocessor that compiler uses: whether
   35808      they should concatenate tokens in the ISO C fashion or in the
   35809      traditional fashion.
   35810 
   35811      These programs work properly with GNU C++ if `__STDC__' is defined.
   35812      They would not work otherwise.
   35813 
   35814      In addition, many header files are written to provide prototypes
   35815      in ISO C but not in traditional C.  Many of these header files can
   35816      work without change in C++ provided `__STDC__' is defined.  If
   35817      `__STDC__' is not defined, they will all fail, and will all need
   35818      to be changed to test explicitly for C++ as well.
   35819 
   35820    * Deleting "empty" loops.
   35821 
   35822      Historically, GCC has not deleted "empty" loops under the
   35823      assumption that the most likely reason you would put one in a
   35824      program is to have a delay, so deleting them will not make real
   35825      programs run any faster.
   35826 
   35827      However, the rationale here is that optimization of a nonempty loop
   35828      cannot produce an empty one. This held for carefully written C
   35829      compiled with less powerful optimizers but is not always the case
   35830      for carefully written C++ or with more powerful optimizers.  Thus
   35831      GCC will remove operations from loops whenever it can determine
   35832      those operations are not externally visible (apart from the time
   35833      taken to execute them, of course).  In case the loop can be proved
   35834      to be finite, GCC will also remove the loop itself.
   35835 
   35836      Be aware of this when performing timing tests, for instance the
   35837      following loop can be completely removed, provided
   35838      `some_expression' can provably not change any global state.
   35839 
   35840           {
   35841              int sum = 0;
   35842              int ix;
   35843 
   35844              for (ix = 0; ix != 10000; ix++)
   35845                 sum += some_expression;
   35846           }
   35847 
   35848      Even though `sum' is accumulated in the loop, no use is made of
   35849      that summation, so the accumulation can be removed.
   35850 
   35851    * Making side effects happen in the same order as in some other
   35852      compiler.
   35853 
   35854      It is never safe to depend on the order of evaluation of side
   35855      effects.  For example, a function call like this may very well
   35856      behave differently from one compiler to another:
   35857 
   35858           void func (int, int);
   35859 
   35860           int i = 2;
   35861           func (i++, i++);
   35862 
   35863      There is no guarantee (in either the C or the C++ standard language
   35864      definitions) that the increments will be evaluated in any
   35865      particular order.  Either increment might happen first.  `func'
   35866      might get the arguments `2, 3', or it might get `3, 2', or even
   35867      `2, 2'.
   35868 
   35869    * Making certain warnings into errors by default.
   35870 
   35871      Some ISO C testsuites report failure when the compiler does not
   35872      produce an error message for a certain program.
   35873 
   35874      ISO C requires a "diagnostic" message for certain kinds of invalid
   35875      programs, but a warning is defined by GCC to count as a
   35876      diagnostic.  If GCC produces a warning but not an error, that is
   35877      correct ISO C support.  If testsuites call this "failure", they
   35878      should be run with the GCC option `-pedantic-errors', which will
   35879      turn these warnings into errors.
   35880 
   35881 
   35882 
   35883 File: gcc.info,  Node: Warnings and Errors,  Prev: Non-bugs,  Up: Trouble
   35884 
   35885 10.11 Warning Messages and Error Messages
   35886 =========================================
   35887 
   35888 The GNU compiler can produce two kinds of diagnostics: errors and
   35889 warnings.  Each kind has a different purpose:
   35890 
   35891      "Errors" report problems that make it impossible to compile your
   35892      program.  GCC reports errors with the source file name and line
   35893      number where the problem is apparent.
   35894 
   35895      "Warnings" report other unusual conditions in your code that _may_
   35896      indicate a problem, although compilation can (and does) proceed.
   35897      Warning messages also report the source file name and line number,
   35898      but include the text `warning:' to distinguish them from error
   35899      messages.
   35900 
   35901  Warnings may indicate danger points where you should check to make sure
   35902 that your program really does what you intend; or the use of obsolete
   35903 features; or the use of nonstandard features of GNU C or C++.  Many
   35904 warnings are issued only if you ask for them, with one of the `-W'
   35905 options (for instance, `-Wall' requests a variety of useful warnings).
   35906 
   35907  GCC always tries to compile your program if possible; it never
   35908 gratuitously rejects a program whose meaning is clear merely because
   35909 (for instance) it fails to conform to a standard.  In some cases,
   35910 however, the C and C++ standards specify that certain extensions are
   35911 forbidden, and a diagnostic _must_ be issued by a conforming compiler.
   35912 The `-pedantic' option tells GCC to issue warnings in such cases;
   35913 `-pedantic-errors' says to make them errors instead.  This does not
   35914 mean that _all_ non-ISO constructs get warnings or errors.
   35915 
   35916  *Note Options to Request or Suppress Warnings: Warning Options, for
   35917 more detail on these and related command-line options.
   35918 
   35919 
   35920 File: gcc.info,  Node: Bugs,  Next: Service,  Prev: Trouble,  Up: Top
   35921 
   35922 11 Reporting Bugs
   35923 *****************
   35924 
   35925 Your bug reports play an essential role in making GCC reliable.
   35926 
   35927  When you encounter a problem, the first thing to do is to see if it is
   35928 already known.  *Note Trouble::.  If it isn't known, then you should
   35929 report the problem.
   35930 
   35931 * Menu:
   35932 
   35933 * Criteria:  Bug Criteria.   Have you really found a bug?
   35934 * Reporting: Bug Reporting.  How to report a bug effectively.
   35935 * Known: Trouble.            Known problems.
   35936 * Help: Service.             Where to ask for help.
   35937 
   35938 
   35939 File: gcc.info,  Node: Bug Criteria,  Next: Bug Reporting,  Up: Bugs
   35940 
   35941 11.1 Have You Found a Bug?
   35942 ==========================
   35943 
   35944 If you are not sure whether you have found a bug, here are some
   35945 guidelines:
   35946 
   35947    * If the compiler gets a fatal signal, for any input whatever, that
   35948      is a compiler bug.  Reliable compilers never crash.
   35949 
   35950    * If the compiler produces invalid assembly code, for any input
   35951      whatever (except an `asm' statement), that is a compiler bug,
   35952      unless the compiler reports errors (not just warnings) which would
   35953      ordinarily prevent the assembler from being run.
   35954 
   35955    * If the compiler produces valid assembly code that does not
   35956      correctly execute the input source code, that is a compiler bug.
   35957 
   35958      However, you must double-check to make sure, because you may have a
   35959      program whose behavior is undefined, which happened by chance to
   35960      give the desired results with another C or C++ compiler.
   35961 
   35962      For example, in many nonoptimizing compilers, you can write `x;'
   35963      at the end of a function instead of `return x;', with the same
   35964      results.  But the value of the function is undefined if `return'
   35965      is omitted; it is not a bug when GCC produces different results.
   35966 
   35967      Problems often result from expressions with two increment
   35968      operators, as in `f (*p++, *p++)'.  Your previous compiler might
   35969      have interpreted that expression the way you intended; GCC might
   35970      interpret it another way.  Neither compiler is wrong.  The bug is
   35971      in your code.
   35972 
   35973      After you have localized the error to a single source line, it
   35974      should be easy to check for these things.  If your program is
   35975      correct and well defined, you have found a compiler bug.
   35976 
   35977    * If the compiler produces an error message for valid input, that is
   35978      a compiler bug.
   35979 
   35980    * If the compiler does not produce an error message for invalid
   35981      input, that is a compiler bug.  However, you should note that your
   35982      idea of "invalid input" might be someone else's idea of "an
   35983      extension" or "support for traditional practice".
   35984 
   35985    * If you are an experienced user of one of the languages GCC
   35986      supports, your suggestions for improvement of GCC are welcome in
   35987      any case.
   35988 
   35989 
   35990 File: gcc.info,  Node: Bug Reporting,  Prev: Bug Criteria,  Up: Bugs
   35991 
   35992 11.2 How and where to Report Bugs
   35993 =================================
   35994 
   35995 Bugs should be reported to the bug database at
   35996 `http://gcc.gnu.org/bugs.html'.
   35997 
   35998 
   35999 File: gcc.info,  Node: Service,  Next: Contributing,  Prev: Bugs,  Up: Top
   36000 
   36001 12 How To Get Help with GCC
   36002 ***************************
   36003 
   36004 If you need help installing, using or changing GCC, there are two ways
   36005 to find it:
   36006 
   36007    * Send a message to a suitable network mailing list.  First try
   36008      <gcc-help (a] gcc.gnu.org> (for help installing or using GCC), and if
   36009      that brings no response, try <gcc (a] gcc.gnu.org>.  For help changing
   36010      GCC, ask <gcc (a] gcc.gnu.org>.  If you think you have found a bug in
   36011      GCC, please report it following the instructions at *note Bug
   36012      Reporting::.
   36013 
   36014    * Look in the service directory for someone who might help you for a
   36015      fee.  The service directory is found at
   36016      `http://www.gnu.org/prep/service.html'.
   36017 
   36018  For further information, see `http://gcc.gnu.org/faq.html#support'.
   36019 
   36020 
   36021 File: gcc.info,  Node: Contributing,  Next: Funding,  Prev: Service,  Up: Top
   36022 
   36023 13 Contributing to GCC Development
   36024 **********************************
   36025 
   36026 If you would like to help pretest GCC releases to assure they work well,
   36027 current development sources are available by SVN (see
   36028 `http://gcc.gnu.org/svn.html').  Source and binary snapshots are also
   36029 available for FTP; see `http://gcc.gnu.org/snapshots.html'.
   36030 
   36031  If you would like to work on improvements to GCC, please read the
   36032 advice at these URLs:
   36033 
   36034      `http://gcc.gnu.org/contribute.html'
   36035      `http://gcc.gnu.org/contributewhy.html'
   36036 
   36037 for information on how to make useful contributions and avoid
   36038 duplication of effort.  Suggested projects are listed at
   36039 `http://gcc.gnu.org/projects/'.
   36040 
   36041 
   36042 File: gcc.info,  Node: Funding,  Next: GNU Project,  Prev: Contributing,  Up: Top
   36043 
   36044 Funding Free Software
   36045 *********************
   36046 
   36047 If you want to have more free software a few years from now, it makes
   36048 sense for you to help encourage people to contribute funds for its
   36049 development.  The most effective approach known is to encourage
   36050 commercial redistributors to donate.
   36051 
   36052  Users of free software systems can boost the pace of development by
   36053 encouraging for-a-fee distributors to donate part of their selling price
   36054 to free software developers--the Free Software Foundation, and others.
   36055 
   36056  The way to convince distributors to do this is to demand it and expect
   36057 it from them.  So when you compare distributors, judge them partly by
   36058 how much they give to free software development.  Show distributors
   36059 they must compete to be the one who gives the most.
   36060 
   36061  To make this approach work, you must insist on numbers that you can
   36062 compare, such as, "We will donate ten dollars to the Frobnitz project
   36063 for each disk sold."  Don't be satisfied with a vague promise, such as
   36064 "A portion of the profits are donated," since it doesn't give a basis
   36065 for comparison.
   36066 
   36067  Even a precise fraction "of the profits from this disk" is not very
   36068 meaningful, since creative accounting and unrelated business decisions
   36069 can greatly alter what fraction of the sales price counts as profit.
   36070 If the price you pay is $50, ten percent of the profit is probably less
   36071 than a dollar; it might be a few cents, or nothing at all.
   36072 
   36073  Some redistributors do development work themselves.  This is useful
   36074 too; but to keep everyone honest, you need to inquire how much they do,
   36075 and what kind.  Some kinds of development make much more long-term
   36076 difference than others.  For example, maintaining a separate version of
   36077 a program contributes very little; maintaining the standard version of a
   36078 program for the whole community contributes much.  Easy new ports
   36079 contribute little, since someone else would surely do them; difficult
   36080 ports such as adding a new CPU to the GNU Compiler Collection
   36081 contribute more; major new features or packages contribute the most.
   36082 
   36083  By establishing the idea that supporting further development is "the
   36084 proper thing to do" when distributing free software for a fee, we can
   36085 assure a steady flow of resources into making more free software.
   36086 
   36087      Copyright (C) 1994 Free Software Foundation, Inc.
   36088      Verbatim copying and redistribution of this section is permitted
   36089      without royalty; alteration is not permitted.
   36090 
   36091 
   36092 File: gcc.info,  Node: GNU Project,  Next: Copying,  Prev: Funding,  Up: Top
   36093 
   36094 The GNU Project and GNU/Linux
   36095 *****************************
   36096 
   36097 The GNU Project was launched in 1984 to develop a complete Unix-like
   36098 operating system which is free software: the GNU system.  (GNU is a
   36099 recursive acronym for "GNU's Not Unix"; it is pronounced "guh-NEW".)
   36100 Variants of the GNU operating system, which use the kernel Linux, are
   36101 now widely used; though these systems are often referred to as "Linux",
   36102 they are more accurately called GNU/Linux systems.
   36103 
   36104  For more information, see:
   36105      `http://www.gnu.org/'
   36106      `http://www.gnu.org/gnu/linux-and-gnu.html'
   36107 
   36108 
   36109 File: gcc.info,  Node: Copying,  Next: GNU Free Documentation License,  Prev: GNU Project,  Up: Top
   36110 
   36111 GNU General Public License
   36112 **************************
   36113 
   36114                         Version 3, 29 June 2007
   36115 
   36116      Copyright (C) 2007 Free Software Foundation, Inc. `http://fsf.org/'
   36117 
   36118      Everyone is permitted to copy and distribute verbatim copies of this
   36119      license document, but changing it is not allowed.
   36120 
   36121 Preamble
   36122 ========
   36123 
   36124 The GNU General Public License is a free, copyleft license for software
   36125 and other kinds of works.
   36126 
   36127  The licenses for most software and other practical works are designed
   36128 to take away your freedom to share and change the works.  By contrast,
   36129 the GNU General Public License is intended to guarantee your freedom to
   36130 share and change all versions of a program-to make sure it remains free
   36131 software for all its users.  We, the Free Software Foundation, use the
   36132 GNU General Public License for most of our software; it applies also to
   36133 any other work released this way by its authors.  You can apply it to
   36134 your programs, too.
   36135 
   36136  When we speak of free software, we are referring to freedom, not
   36137 price.  Our General Public Licenses are designed to make sure that you
   36138 have the freedom to distribute copies of free software (and charge for
   36139 them if you wish), that you receive source code or can get it if you
   36140 want it, that you can change the software or use pieces of it in new
   36141 free programs, and that you know you can do these things.
   36142 
   36143  To protect your rights, we need to prevent others from denying you
   36144 these rights or asking you to surrender the rights.  Therefore, you
   36145 have certain responsibilities if you distribute copies of the software,
   36146 or if you modify it: responsibilities to respect the freedom of others.
   36147 
   36148  For example, if you distribute copies of such a program, whether
   36149 gratis or for a fee, you must pass on to the recipients the same
   36150 freedoms that you received.  You must make sure that they, too, receive
   36151 or can get the source code.  And you must show them these terms so they
   36152 know their rights.
   36153 
   36154  Developers that use the GNU GPL protect your rights with two steps:
   36155 (1) assert copyright on the software, and (2) offer you this License
   36156 giving you legal permission to copy, distribute and/or modify it.
   36157 
   36158  For the developers' and authors' protection, the GPL clearly explains
   36159 that there is no warranty for this free software.  For both users' and
   36160 authors' sake, the GPL requires that modified versions be marked as
   36161 changed, so that their problems will not be attributed erroneously to
   36162 authors of previous versions.
   36163 
   36164  Some devices are designed to deny users access to install or run
   36165 modified versions of the software inside them, although the
   36166 manufacturer can do so.  This is fundamentally incompatible with the
   36167 aim of protecting users' freedom to change the software.  The
   36168 systematic pattern of such abuse occurs in the area of products for
   36169 individuals to use, which is precisely where it is most unacceptable.
   36170 Therefore, we have designed this version of the GPL to prohibit the
   36171 practice for those products.  If such problems arise substantially in
   36172 other domains, we stand ready to extend this provision to those domains
   36173 in future versions of the GPL, as needed to protect the freedom of
   36174 users.
   36175 
   36176  Finally, every program is threatened constantly by software patents.
   36177 States should not allow patents to restrict development and use of
   36178 software on general-purpose computers, but in those that do, we wish to
   36179 avoid the special danger that patents applied to a free program could
   36180 make it effectively proprietary.  To prevent this, the GPL assures that
   36181 patents cannot be used to render the program non-free.
   36182 
   36183  The precise terms and conditions for copying, distribution and
   36184 modification follow.
   36185 
   36186 TERMS AND CONDITIONS
   36187 ====================
   36188 
   36189   0. Definitions.
   36190 
   36191      "This License" refers to version 3 of the GNU General Public
   36192      License.
   36193 
   36194      "Copyright" also means copyright-like laws that apply to other
   36195      kinds of works, such as semiconductor masks.
   36196 
   36197      "The Program" refers to any copyrightable work licensed under this
   36198      License.  Each licensee is addressed as "you".  "Licensees" and
   36199      "recipients" may be individuals or organizations.
   36200 
   36201      To "modify" a work means to copy from or adapt all or part of the
   36202      work in a fashion requiring copyright permission, other than the
   36203      making of an exact copy.  The resulting work is called a "modified
   36204      version" of the earlier work or a work "based on" the earlier work.
   36205 
   36206      A "covered work" means either the unmodified Program or a work
   36207      based on the Program.
   36208 
   36209      To "propagate" a work means to do anything with it that, without
   36210      permission, would make you directly or secondarily liable for
   36211      infringement under applicable copyright law, except executing it
   36212      on a computer or modifying a private copy.  Propagation includes
   36213      copying, distribution (with or without modification), making
   36214      available to the public, and in some countries other activities as
   36215      well.
   36216 
   36217      To "convey" a work means any kind of propagation that enables other
   36218      parties to make or receive copies.  Mere interaction with a user
   36219      through a computer network, with no transfer of a copy, is not
   36220      conveying.
   36221 
   36222      An interactive user interface displays "Appropriate Legal Notices"
   36223      to the extent that it includes a convenient and prominently visible
   36224      feature that (1) displays an appropriate copyright notice, and (2)
   36225      tells the user that there is no warranty for the work (except to
   36226      the extent that warranties are provided), that licensees may
   36227      convey the work under this License, and how to view a copy of this
   36228      License.  If the interface presents a list of user commands or
   36229      options, such as a menu, a prominent item in the list meets this
   36230      criterion.
   36231 
   36232   1. Source Code.
   36233 
   36234      The "source code" for a work means the preferred form of the work
   36235      for making modifications to it.  "Object code" means any
   36236      non-source form of a work.
   36237 
   36238      A "Standard Interface" means an interface that either is an
   36239      official standard defined by a recognized standards body, or, in
   36240      the case of interfaces specified for a particular programming
   36241      language, one that is widely used among developers working in that
   36242      language.
   36243 
   36244      The "System Libraries" of an executable work include anything,
   36245      other than the work as a whole, that (a) is included in the normal
   36246      form of packaging a Major Component, but which is not part of that
   36247      Major Component, and (b) serves only to enable use of the work
   36248      with that Major Component, or to implement a Standard Interface
   36249      for which an implementation is available to the public in source
   36250      code form.  A "Major Component", in this context, means a major
   36251      essential component (kernel, window system, and so on) of the
   36252      specific operating system (if any) on which the executable work
   36253      runs, or a compiler used to produce the work, or an object code
   36254      interpreter used to run it.
   36255 
   36256      The "Corresponding Source" for a work in object code form means all
   36257      the source code needed to generate, install, and (for an executable
   36258      work) run the object code and to modify the work, including
   36259      scripts to control those activities.  However, it does not include
   36260      the work's System Libraries, or general-purpose tools or generally
   36261      available free programs which are used unmodified in performing
   36262      those activities but which are not part of the work.  For example,
   36263      Corresponding Source includes interface definition files
   36264      associated with source files for the work, and the source code for
   36265      shared libraries and dynamically linked subprograms that the work
   36266      is specifically designed to require, such as by intimate data
   36267      communication or control flow between those subprograms and other
   36268      parts of the work.
   36269 
   36270      The Corresponding Source need not include anything that users can
   36271      regenerate automatically from other parts of the Corresponding
   36272      Source.
   36273 
   36274      The Corresponding Source for a work in source code form is that
   36275      same work.
   36276 
   36277   2. Basic Permissions.
   36278 
   36279      All rights granted under this License are granted for the term of
   36280      copyright on the Program, and are irrevocable provided the stated
   36281      conditions are met.  This License explicitly affirms your unlimited
   36282      permission to run the unmodified Program.  The output from running
   36283      a covered work is covered by this License only if the output,
   36284      given its content, constitutes a covered work.  This License
   36285      acknowledges your rights of fair use or other equivalent, as
   36286      provided by copyright law.
   36287 
   36288      You may make, run and propagate covered works that you do not
   36289      convey, without conditions so long as your license otherwise
   36290      remains in force.  You may convey covered works to others for the
   36291      sole purpose of having them make modifications exclusively for
   36292      you, or provide you with facilities for running those works,
   36293      provided that you comply with the terms of this License in
   36294      conveying all material for which you do not control copyright.
   36295      Those thus making or running the covered works for you must do so
   36296      exclusively on your behalf, under your direction and control, on
   36297      terms that prohibit them from making any copies of your
   36298      copyrighted material outside their relationship with you.
   36299 
   36300      Conveying under any other circumstances is permitted solely under
   36301      the conditions stated below.  Sublicensing is not allowed; section
   36302      10 makes it unnecessary.
   36303 
   36304   3. Protecting Users' Legal Rights From Anti-Circumvention Law.
   36305 
   36306      No covered work shall be deemed part of an effective technological
   36307      measure under any applicable law fulfilling obligations under
   36308      article 11 of the WIPO copyright treaty adopted on 20 December
   36309      1996, or similar laws prohibiting or restricting circumvention of
   36310      such measures.
   36311 
   36312      When you convey a covered work, you waive any legal power to forbid
   36313      circumvention of technological measures to the extent such
   36314      circumvention is effected by exercising rights under this License
   36315      with respect to the covered work, and you disclaim any intention
   36316      to limit operation or modification of the work as a means of
   36317      enforcing, against the work's users, your or third parties' legal
   36318      rights to forbid circumvention of technological measures.
   36319 
   36320   4. Conveying Verbatim Copies.
   36321 
   36322      You may convey verbatim copies of the Program's source code as you
   36323      receive it, in any medium, provided that you conspicuously and
   36324      appropriately publish on each copy an appropriate copyright notice;
   36325      keep intact all notices stating that this License and any
   36326      non-permissive terms added in accord with section 7 apply to the
   36327      code; keep intact all notices of the absence of any warranty; and
   36328      give all recipients a copy of this License along with the Program.
   36329 
   36330      You may charge any price or no price for each copy that you convey,
   36331      and you may offer support or warranty protection for a fee.
   36332 
   36333   5. Conveying Modified Source Versions.
   36334 
   36335      You may convey a work based on the Program, or the modifications to
   36336      produce it from the Program, in the form of source code under the
   36337      terms of section 4, provided that you also meet all of these
   36338      conditions:
   36339 
   36340        a. The work must carry prominent notices stating that you
   36341           modified it, and giving a relevant date.
   36342 
   36343        b. The work must carry prominent notices stating that it is
   36344           released under this License and any conditions added under
   36345           section 7.  This requirement modifies the requirement in
   36346           section 4 to "keep intact all notices".
   36347 
   36348        c. You must license the entire work, as a whole, under this
   36349           License to anyone who comes into possession of a copy.  This
   36350           License will therefore apply, along with any applicable
   36351           section 7 additional terms, to the whole of the work, and all
   36352           its parts, regardless of how they are packaged.  This License
   36353           gives no permission to license the work in any other way, but
   36354           it does not invalidate such permission if you have separately
   36355           received it.
   36356 
   36357        d. If the work has interactive user interfaces, each must display
   36358           Appropriate Legal Notices; however, if the Program has
   36359           interactive interfaces that do not display Appropriate Legal
   36360           Notices, your work need not make them do so.
   36361 
   36362      A compilation of a covered work with other separate and independent
   36363      works, which are not by their nature extensions of the covered
   36364      work, and which are not combined with it such as to form a larger
   36365      program, in or on a volume of a storage or distribution medium, is
   36366      called an "aggregate" if the compilation and its resulting
   36367      copyright are not used to limit the access or legal rights of the
   36368      compilation's users beyond what the individual works permit.
   36369      Inclusion of a covered work in an aggregate does not cause this
   36370      License to apply to the other parts of the aggregate.
   36371 
   36372   6. Conveying Non-Source Forms.
   36373 
   36374      You may convey a covered work in object code form under the terms
   36375      of sections 4 and 5, provided that you also convey the
   36376      machine-readable Corresponding Source under the terms of this
   36377      License, in one of these ways:
   36378 
   36379        a. Convey the object code in, or embodied in, a physical product
   36380           (including a physical distribution medium), accompanied by the
   36381           Corresponding Source fixed on a durable physical medium
   36382           customarily used for software interchange.
   36383 
   36384        b. Convey the object code in, or embodied in, a physical product
   36385           (including a physical distribution medium), accompanied by a
   36386           written offer, valid for at least three years and valid for
   36387           as long as you offer spare parts or customer support for that
   36388           product model, to give anyone who possesses the object code
   36389           either (1) a copy of the Corresponding Source for all the
   36390           software in the product that is covered by this License, on a
   36391           durable physical medium customarily used for software
   36392           interchange, for a price no more than your reasonable cost of
   36393           physically performing this conveying of source, or (2) access
   36394           to copy the Corresponding Source from a network server at no
   36395           charge.
   36396 
   36397        c. Convey individual copies of the object code with a copy of
   36398           the written offer to provide the Corresponding Source.  This
   36399           alternative is allowed only occasionally and noncommercially,
   36400           and only if you received the object code with such an offer,
   36401           in accord with subsection 6b.
   36402 
   36403        d. Convey the object code by offering access from a designated
   36404           place (gratis or for a charge), and offer equivalent access
   36405           to the Corresponding Source in the same way through the same
   36406           place at no further charge.  You need not require recipients
   36407           to copy the Corresponding Source along with the object code.
   36408           If the place to copy the object code is a network server, the
   36409           Corresponding Source may be on a different server (operated
   36410           by you or a third party) that supports equivalent copying
   36411           facilities, provided you maintain clear directions next to
   36412           the object code saying where to find the Corresponding Source.
   36413           Regardless of what server hosts the Corresponding Source, you
   36414           remain obligated to ensure that it is available for as long
   36415           as needed to satisfy these requirements.
   36416 
   36417        e. Convey the object code using peer-to-peer transmission,
   36418           provided you inform other peers where the object code and
   36419           Corresponding Source of the work are being offered to the
   36420           general public at no charge under subsection 6d.
   36421 
   36422 
   36423      A separable portion of the object code, whose source code is
   36424      excluded from the Corresponding Source as a System Library, need
   36425      not be included in conveying the object code work.
   36426 
   36427      A "User Product" is either (1) a "consumer product", which means
   36428      any tangible personal property which is normally used for personal,
   36429      family, or household purposes, or (2) anything designed or sold for
   36430      incorporation into a dwelling.  In determining whether a product
   36431      is a consumer product, doubtful cases shall be resolved in favor of
   36432      coverage.  For a particular product received by a particular user,
   36433      "normally used" refers to a typical or common use of that class of
   36434      product, regardless of the status of the particular user or of the
   36435      way in which the particular user actually uses, or expects or is
   36436      expected to use, the product.  A product is a consumer product
   36437      regardless of whether the product has substantial commercial,
   36438      industrial or non-consumer uses, unless such uses represent the
   36439      only significant mode of use of the product.
   36440 
   36441      "Installation Information" for a User Product means any methods,
   36442      procedures, authorization keys, or other information required to
   36443      install and execute modified versions of a covered work in that
   36444      User Product from a modified version of its Corresponding Source.
   36445      The information must suffice to ensure that the continued
   36446      functioning of the modified object code is in no case prevented or
   36447      interfered with solely because modification has been made.
   36448 
   36449      If you convey an object code work under this section in, or with,
   36450      or specifically for use in, a User Product, and the conveying
   36451      occurs as part of a transaction in which the right of possession
   36452      and use of the User Product is transferred to the recipient in
   36453      perpetuity or for a fixed term (regardless of how the transaction
   36454      is characterized), the Corresponding Source conveyed under this
   36455      section must be accompanied by the Installation Information.  But
   36456      this requirement does not apply if neither you nor any third party
   36457      retains the ability to install modified object code on the User
   36458      Product (for example, the work has been installed in ROM).
   36459 
   36460      The requirement to provide Installation Information does not
   36461      include a requirement to continue to provide support service,
   36462      warranty, or updates for a work that has been modified or
   36463      installed by the recipient, or for the User Product in which it
   36464      has been modified or installed.  Access to a network may be denied
   36465      when the modification itself materially and adversely affects the
   36466      operation of the network or violates the rules and protocols for
   36467      communication across the network.
   36468 
   36469      Corresponding Source conveyed, and Installation Information
   36470      provided, in accord with this section must be in a format that is
   36471      publicly documented (and with an implementation available to the
   36472      public in source code form), and must require no special password
   36473      or key for unpacking, reading or copying.
   36474 
   36475   7. Additional Terms.
   36476 
   36477      "Additional permissions" are terms that supplement the terms of
   36478      this License by making exceptions from one or more of its
   36479      conditions.  Additional permissions that are applicable to the
   36480      entire Program shall be treated as though they were included in
   36481      this License, to the extent that they are valid under applicable
   36482      law.  If additional permissions apply only to part of the Program,
   36483      that part may be used separately under those permissions, but the
   36484      entire Program remains governed by this License without regard to
   36485      the additional permissions.
   36486 
   36487      When you convey a copy of a covered work, you may at your option
   36488      remove any additional permissions from that copy, or from any part
   36489      of it.  (Additional permissions may be written to require their own
   36490      removal in certain cases when you modify the work.)  You may place
   36491      additional permissions on material, added by you to a covered work,
   36492      for which you have or can give appropriate copyright permission.
   36493 
   36494      Notwithstanding any other provision of this License, for material
   36495      you add to a covered work, you may (if authorized by the copyright
   36496      holders of that material) supplement the terms of this License
   36497      with terms:
   36498 
   36499        a. Disclaiming warranty or limiting liability differently from
   36500           the terms of sections 15 and 16 of this License; or
   36501 
   36502        b. Requiring preservation of specified reasonable legal notices
   36503           or author attributions in that material or in the Appropriate
   36504           Legal Notices displayed by works containing it; or
   36505 
   36506        c. Prohibiting misrepresentation of the origin of that material,
   36507           or requiring that modified versions of such material be
   36508           marked in reasonable ways as different from the original
   36509           version; or
   36510 
   36511        d. Limiting the use for publicity purposes of names of licensors
   36512           or authors of the material; or
   36513 
   36514        e. Declining to grant rights under trademark law for use of some
   36515           trade names, trademarks, or service marks; or
   36516 
   36517        f. Requiring indemnification of licensors and authors of that
   36518           material by anyone who conveys the material (or modified
   36519           versions of it) with contractual assumptions of liability to
   36520           the recipient, for any liability that these contractual
   36521           assumptions directly impose on those licensors and authors.
   36522 
   36523      All other non-permissive additional terms are considered "further
   36524      restrictions" within the meaning of section 10.  If the Program as
   36525      you received it, or any part of it, contains a notice stating that
   36526      it is governed by this License along with a term that is a further
   36527      restriction, you may remove that term.  If a license document
   36528      contains a further restriction but permits relicensing or
   36529      conveying under this License, you may add to a covered work
   36530      material governed by the terms of that license document, provided
   36531      that the further restriction does not survive such relicensing or
   36532      conveying.
   36533 
   36534      If you add terms to a covered work in accord with this section, you
   36535      must place, in the relevant source files, a statement of the
   36536      additional terms that apply to those files, or a notice indicating
   36537      where to find the applicable terms.
   36538 
   36539      Additional terms, permissive or non-permissive, may be stated in
   36540      the form of a separately written license, or stated as exceptions;
   36541      the above requirements apply either way.
   36542 
   36543   8. Termination.
   36544 
   36545      You may not propagate or modify a covered work except as expressly
   36546      provided under this License.  Any attempt otherwise to propagate or
   36547      modify it is void, and will automatically terminate your rights
   36548      under this License (including any patent licenses granted under
   36549      the third paragraph of section 11).
   36550 
   36551      However, if you cease all violation of this License, then your
   36552      license from a particular copyright holder is reinstated (a)
   36553      provisionally, unless and until the copyright holder explicitly
   36554      and finally terminates your license, and (b) permanently, if the
   36555      copyright holder fails to notify you of the violation by some
   36556      reasonable means prior to 60 days after the cessation.
   36557 
   36558      Moreover, your license from a particular copyright holder is
   36559      reinstated permanently if the copyright holder notifies you of the
   36560      violation by some reasonable means, this is the first time you have
   36561      received notice of violation of this License (for any work) from
   36562      that copyright holder, and you cure the violation prior to 30 days
   36563      after your receipt of the notice.
   36564 
   36565      Termination of your rights under this section does not terminate
   36566      the licenses of parties who have received copies or rights from
   36567      you under this License.  If your rights have been terminated and
   36568      not permanently reinstated, you do not qualify to receive new
   36569      licenses for the same material under section 10.
   36570 
   36571   9. Acceptance Not Required for Having Copies.
   36572 
   36573      You are not required to accept this License in order to receive or
   36574      run a copy of the Program.  Ancillary propagation of a covered work
   36575      occurring solely as a consequence of using peer-to-peer
   36576      transmission to receive a copy likewise does not require
   36577      acceptance.  However, nothing other than this License grants you
   36578      permission to propagate or modify any covered work.  These actions
   36579      infringe copyright if you do not accept this License.  Therefore,
   36580      by modifying or propagating a covered work, you indicate your
   36581      acceptance of this License to do so.
   36582 
   36583  10. Automatic Licensing of Downstream Recipients.
   36584 
   36585      Each time you convey a covered work, the recipient automatically
   36586      receives a license from the original licensors, to run, modify and
   36587      propagate that work, subject to this License.  You are not
   36588      responsible for enforcing compliance by third parties with this
   36589      License.
   36590 
   36591      An "entity transaction" is a transaction transferring control of an
   36592      organization, or substantially all assets of one, or subdividing an
   36593      organization, or merging organizations.  If propagation of a
   36594      covered work results from an entity transaction, each party to that
   36595      transaction who receives a copy of the work also receives whatever
   36596      licenses to the work the party's predecessor in interest had or
   36597      could give under the previous paragraph, plus a right to
   36598      possession of the Corresponding Source of the work from the
   36599      predecessor in interest, if the predecessor has it or can get it
   36600      with reasonable efforts.
   36601 
   36602      You may not impose any further restrictions on the exercise of the
   36603      rights granted or affirmed under this License.  For example, you
   36604      may not impose a license fee, royalty, or other charge for
   36605      exercise of rights granted under this License, and you may not
   36606      initiate litigation (including a cross-claim or counterclaim in a
   36607      lawsuit) alleging that any patent claim is infringed by making,
   36608      using, selling, offering for sale, or importing the Program or any
   36609      portion of it.
   36610 
   36611  11. Patents.
   36612 
   36613      A "contributor" is a copyright holder who authorizes use under this
   36614      License of the Program or a work on which the Program is based.
   36615      The work thus licensed is called the contributor's "contributor
   36616      version".
   36617 
   36618      A contributor's "essential patent claims" are all patent claims
   36619      owned or controlled by the contributor, whether already acquired or
   36620      hereafter acquired, that would be infringed by some manner,
   36621      permitted by this License, of making, using, or selling its
   36622      contributor version, but do not include claims that would be
   36623      infringed only as a consequence of further modification of the
   36624      contributor version.  For purposes of this definition, "control"
   36625      includes the right to grant patent sublicenses in a manner
   36626      consistent with the requirements of this License.
   36627 
   36628      Each contributor grants you a non-exclusive, worldwide,
   36629      royalty-free patent license under the contributor's essential
   36630      patent claims, to make, use, sell, offer for sale, import and
   36631      otherwise run, modify and propagate the contents of its
   36632      contributor version.
   36633 
   36634      In the following three paragraphs, a "patent license" is any
   36635      express agreement or commitment, however denominated, not to
   36636      enforce a patent (such as an express permission to practice a
   36637      patent or covenant not to sue for patent infringement).  To
   36638      "grant" such a patent license to a party means to make such an
   36639      agreement or commitment not to enforce a patent against the party.
   36640 
   36641      If you convey a covered work, knowingly relying on a patent
   36642      license, and the Corresponding Source of the work is not available
   36643      for anyone to copy, free of charge and under the terms of this
   36644      License, through a publicly available network server or other
   36645      readily accessible means, then you must either (1) cause the
   36646      Corresponding Source to be so available, or (2) arrange to deprive
   36647      yourself of the benefit of the patent license for this particular
   36648      work, or (3) arrange, in a manner consistent with the requirements
   36649      of this License, to extend the patent license to downstream
   36650      recipients.  "Knowingly relying" means you have actual knowledge
   36651      that, but for the patent license, your conveying the covered work
   36652      in a country, or your recipient's use of the covered work in a
   36653      country, would infringe one or more identifiable patents in that
   36654      country that you have reason to believe are valid.
   36655 
   36656      If, pursuant to or in connection with a single transaction or
   36657      arrangement, you convey, or propagate by procuring conveyance of, a
   36658      covered work, and grant a patent license to some of the parties
   36659      receiving the covered work authorizing them to use, propagate,
   36660      modify or convey a specific copy of the covered work, then the
   36661      patent license you grant is automatically extended to all
   36662      recipients of the covered work and works based on it.
   36663 
   36664      A patent license is "discriminatory" if it does not include within
   36665      the scope of its coverage, prohibits the exercise of, or is
   36666      conditioned on the non-exercise of one or more of the rights that
   36667      are specifically granted under this License.  You may not convey a
   36668      covered work if you are a party to an arrangement with a third
   36669      party that is in the business of distributing software, under
   36670      which you make payment to the third party based on the extent of
   36671      your activity of conveying the work, and under which the third
   36672      party grants, to any of the parties who would receive the covered
   36673      work from you, a discriminatory patent license (a) in connection
   36674      with copies of the covered work conveyed by you (or copies made
   36675      from those copies), or (b) primarily for and in connection with
   36676      specific products or compilations that contain the covered work,
   36677      unless you entered into that arrangement, or that patent license
   36678      was granted, prior to 28 March 2007.
   36679 
   36680      Nothing in this License shall be construed as excluding or limiting
   36681      any implied license or other defenses to infringement that may
   36682      otherwise be available to you under applicable patent law.
   36683 
   36684  12. No Surrender of Others' Freedom.
   36685 
   36686      If conditions are imposed on you (whether by court order,
   36687      agreement or otherwise) that contradict the conditions of this
   36688      License, they do not excuse you from the conditions of this
   36689      License.  If you cannot convey a covered work so as to satisfy
   36690      simultaneously your obligations under this License and any other
   36691      pertinent obligations, then as a consequence you may not convey it
   36692      at all.  For example, if you agree to terms that obligate you to
   36693      collect a royalty for further conveying from those to whom you
   36694      convey the Program, the only way you could satisfy both those
   36695      terms and this License would be to refrain entirely from conveying
   36696      the Program.
   36697 
   36698  13. Use with the GNU Affero General Public License.
   36699 
   36700      Notwithstanding any other provision of this License, you have
   36701      permission to link or combine any covered work with a work licensed
   36702      under version 3 of the GNU Affero General Public License into a
   36703      single combined work, and to convey the resulting work.  The terms
   36704      of this License will continue to apply to the part which is the
   36705      covered work, but the special requirements of the GNU Affero
   36706      General Public License, section 13, concerning interaction through
   36707      a network will apply to the combination as such.
   36708 
   36709  14. Revised Versions of this License.
   36710 
   36711      The Free Software Foundation may publish revised and/or new
   36712      versions of the GNU General Public License from time to time.
   36713      Such new versions will be similar in spirit to the present
   36714      version, but may differ in detail to address new problems or
   36715      concerns.
   36716 
   36717      Each version is given a distinguishing version number.  If the
   36718      Program specifies that a certain numbered version of the GNU
   36719      General Public License "or any later version" applies to it, you
   36720      have the option of following the terms and conditions either of
   36721      that numbered version or of any later version published by the
   36722      Free Software Foundation.  If the Program does not specify a
   36723      version number of the GNU General Public License, you may choose
   36724      any version ever published by the Free Software Foundation.
   36725 
   36726      If the Program specifies that a proxy can decide which future
   36727      versions of the GNU General Public License can be used, that
   36728      proxy's public statement of acceptance of a version permanently
   36729      authorizes you to choose that version for the Program.
   36730 
   36731      Later license versions may give you additional or different
   36732      permissions.  However, no additional obligations are imposed on any
   36733      author or copyright holder as a result of your choosing to follow a
   36734      later version.
   36735 
   36736  15. Disclaimer of Warranty.
   36737 
   36738      THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
   36739      APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE
   36740      COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS"
   36741      WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED,
   36742      INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
   36743      MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE
   36744      RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.
   36745      SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL
   36746      NECESSARY SERVICING, REPAIR OR CORRECTION.
   36747 
   36748  16. Limitation of Liability.
   36749 
   36750      IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
   36751      WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES
   36752      AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU
   36753      FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
   36754      CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE
   36755      THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA
   36756      BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
   36757      PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
   36758      PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF
   36759      THE POSSIBILITY OF SUCH DAMAGES.
   36760 
   36761  17. Interpretation of Sections 15 and 16.
   36762 
   36763      If the disclaimer of warranty and limitation of liability provided
   36764      above cannot be given local legal effect according to their terms,
   36765      reviewing courts shall apply local law that most closely
   36766      approximates an absolute waiver of all civil liability in
   36767      connection with the Program, unless a warranty or assumption of
   36768      liability accompanies a copy of the Program in return for a fee.
   36769 
   36770 
   36771 END OF TERMS AND CONDITIONS
   36772 ===========================
   36773 
   36774 How to Apply These Terms to Your New Programs
   36775 =============================================
   36776 
   36777 If you develop a new program, and you want it to be of the greatest
   36778 possible use to the public, the best way to achieve this is to make it
   36779 free software which everyone can redistribute and change under these
   36780 terms.
   36781 
   36782  To do so, attach the following notices to the program.  It is safest
   36783 to attach them to the start of each source file to most effectively
   36784 state the exclusion of warranty; and each file should have at least the
   36785 "copyright" line and a pointer to where the full notice is found.
   36786 
   36787      ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES.
   36788      Copyright (C) YEAR NAME OF AUTHOR
   36789 
   36790      This program is free software: you can redistribute it and/or modify
   36791      it under the terms of the GNU General Public License as published by
   36792      the Free Software Foundation, either version 3 of the License, or (at
   36793      your option) any later version.
   36794 
   36795      This program is distributed in the hope that it will be useful, but
   36796      WITHOUT ANY WARRANTY; without even the implied warranty of
   36797      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   36798      General Public License for more details.
   36799 
   36800      You should have received a copy of the GNU General Public License
   36801      along with this program.  If not, see `http://www.gnu.org/licenses/'.
   36802 
   36803  Also add information on how to contact you by electronic and paper
   36804 mail.
   36805 
   36806  If the program does terminal interaction, make it output a short
   36807 notice like this when it starts in an interactive mode:
   36808 
   36809      PROGRAM Copyright (C) YEAR NAME OF AUTHOR
   36810      This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
   36811      This is free software, and you are welcome to redistribute it
   36812      under certain conditions; type `show c' for details.
   36813 
   36814  The hypothetical commands `show w' and `show c' should show the
   36815 appropriate parts of the General Public License.  Of course, your
   36816 program's commands might be different; for a GUI interface, you would
   36817 use an "about box".
   36818 
   36819  You should also get your employer (if you work as a programmer) or
   36820 school, if any, to sign a "copyright disclaimer" for the program, if
   36821 necessary.  For more information on this, and how to apply and follow
   36822 the GNU GPL, see `http://www.gnu.org/licenses/'.
   36823 
   36824  The GNU General Public License does not permit incorporating your
   36825 program into proprietary programs.  If your program is a subroutine
   36826 library, you may consider it more useful to permit linking proprietary
   36827 applications with the library.  If this is what you want to do, use the
   36828 GNU Lesser General Public License instead of this License.  But first,
   36829 please read `http://www.gnu.org/philosophy/why-not-lgpl.html'.
   36830 
   36831 
   36832 File: gcc.info,  Node: GNU Free Documentation License,  Next: Contributors,  Prev: Copying,  Up: Top
   36833 
   36834 GNU Free Documentation License
   36835 ******************************
   36836 
   36837                       Version 1.2, November 2002
   36838 
   36839      Copyright (C) 2000,2001,2002 Free Software Foundation, Inc.
   36840      51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
   36841 
   36842      Everyone is permitted to copy and distribute verbatim copies
   36843      of this license document, but changing it is not allowed.
   36844 
   36845   0. PREAMBLE
   36846 
   36847      The purpose of this License is to make a manual, textbook, or other
   36848      functional and useful document "free" in the sense of freedom: to
   36849      assure everyone the effective freedom to copy and redistribute it,
   36850      with or without modifying it, either commercially or
   36851      noncommercially.  Secondarily, this License preserves for the
   36852      author and publisher a way to get credit for their work, while not
   36853      being considered responsible for modifications made by others.
   36854 
   36855      This License is a kind of "copyleft", which means that derivative
   36856      works of the document must themselves be free in the same sense.
   36857      It complements the GNU General Public License, which is a copyleft
   36858      license designed for free software.
   36859 
   36860      We have designed this License in order to use it for manuals for
   36861      free software, because free software needs free documentation: a
   36862      free program should come with manuals providing the same freedoms
   36863      that the software does.  But this License is not limited to
   36864      software manuals; it can be used for any textual work, regardless
   36865      of subject matter or whether it is published as a printed book.
   36866      We recommend this License principally for works whose purpose is
   36867      instruction or reference.
   36868 
   36869   1. APPLICABILITY AND DEFINITIONS
   36870 
   36871      This License applies to any manual or other work, in any medium,
   36872      that contains a notice placed by the copyright holder saying it
   36873      can be distributed under the terms of this License.  Such a notice
   36874      grants a world-wide, royalty-free license, unlimited in duration,
   36875      to use that work under the conditions stated herein.  The
   36876      "Document", below, refers to any such manual or work.  Any member
   36877      of the public is a licensee, and is addressed as "you".  You
   36878      accept the license if you copy, modify or distribute the work in a
   36879      way requiring permission under copyright law.
   36880 
   36881      A "Modified Version" of the Document means any work containing the
   36882      Document or a portion of it, either copied verbatim, or with
   36883      modifications and/or translated into another language.
   36884 
   36885      A "Secondary Section" is a named appendix or a front-matter section
   36886      of the Document that deals exclusively with the relationship of the
   36887      publishers or authors of the Document to the Document's overall
   36888      subject (or to related matters) and contains nothing that could
   36889      fall directly within that overall subject.  (Thus, if the Document
   36890      is in part a textbook of mathematics, a Secondary Section may not
   36891      explain any mathematics.)  The relationship could be a matter of
   36892      historical connection with the subject or with related matters, or
   36893      of legal, commercial, philosophical, ethical or political position
   36894      regarding them.
   36895 
   36896      The "Invariant Sections" are certain Secondary Sections whose
   36897      titles are designated, as being those of Invariant Sections, in
   36898      the notice that says that the Document is released under this
   36899      License.  If a section does not fit the above definition of
   36900      Secondary then it is not allowed to be designated as Invariant.
   36901      The Document may contain zero Invariant Sections.  If the Document
   36902      does not identify any Invariant Sections then there are none.
   36903 
   36904      The "Cover Texts" are certain short passages of text that are
   36905      listed, as Front-Cover Texts or Back-Cover Texts, in the notice
   36906      that says that the Document is released under this License.  A
   36907      Front-Cover Text may be at most 5 words, and a Back-Cover Text may
   36908      be at most 25 words.
   36909 
   36910      A "Transparent" copy of the Document means a machine-readable copy,
   36911      represented in a format whose specification is available to the
   36912      general public, that is suitable for revising the document
   36913      straightforwardly with generic text editors or (for images
   36914      composed of pixels) generic paint programs or (for drawings) some
   36915      widely available drawing editor, and that is suitable for input to
   36916      text formatters or for automatic translation to a variety of
   36917      formats suitable for input to text formatters.  A copy made in an
   36918      otherwise Transparent file format whose markup, or absence of
   36919      markup, has been arranged to thwart or discourage subsequent
   36920      modification by readers is not Transparent.  An image format is
   36921      not Transparent if used for any substantial amount of text.  A
   36922      copy that is not "Transparent" is called "Opaque".
   36923 
   36924      Examples of suitable formats for Transparent copies include plain
   36925      ASCII without markup, Texinfo input format, LaTeX input format,
   36926      SGML or XML using a publicly available DTD, and
   36927      standard-conforming simple HTML, PostScript or PDF designed for
   36928      human modification.  Examples of transparent image formats include
   36929      PNG, XCF and JPG.  Opaque formats include proprietary formats that
   36930      can be read and edited only by proprietary word processors, SGML or
   36931      XML for which the DTD and/or processing tools are not generally
   36932      available, and the machine-generated HTML, PostScript or PDF
   36933      produced by some word processors for output purposes only.
   36934 
   36935      The "Title Page" means, for a printed book, the title page itself,
   36936      plus such following pages as are needed to hold, legibly, the
   36937      material this License requires to appear in the title page.  For
   36938      works in formats which do not have any title page as such, "Title
   36939      Page" means the text near the most prominent appearance of the
   36940      work's title, preceding the beginning of the body of the text.
   36941 
   36942      A section "Entitled XYZ" means a named subunit of the Document
   36943      whose title either is precisely XYZ or contains XYZ in parentheses
   36944      following text that translates XYZ in another language.  (Here XYZ
   36945      stands for a specific section name mentioned below, such as
   36946      "Acknowledgements", "Dedications", "Endorsements", or "History".)
   36947      To "Preserve the Title" of such a section when you modify the
   36948      Document means that it remains a section "Entitled XYZ" according
   36949      to this definition.
   36950 
   36951      The Document may include Warranty Disclaimers next to the notice
   36952      which states that this License applies to the Document.  These
   36953      Warranty Disclaimers are considered to be included by reference in
   36954      this License, but only as regards disclaiming warranties: any other
   36955      implication that these Warranty Disclaimers may have is void and
   36956      has no effect on the meaning of this License.
   36957 
   36958   2. VERBATIM COPYING
   36959 
   36960      You may copy and distribute the Document in any medium, either
   36961      commercially or noncommercially, provided that this License, the
   36962      copyright notices, and the license notice saying this License
   36963      applies to the Document are reproduced in all copies, and that you
   36964      add no other conditions whatsoever to those of this License.  You
   36965      may not use technical measures to obstruct or control the reading
   36966      or further copying of the copies you make or distribute.  However,
   36967      you may accept compensation in exchange for copies.  If you
   36968      distribute a large enough number of copies you must also follow
   36969      the conditions in section 3.
   36970 
   36971      You may also lend copies, under the same conditions stated above,
   36972      and you may publicly display copies.
   36973 
   36974   3. COPYING IN QUANTITY
   36975 
   36976      If you publish printed copies (or copies in media that commonly
   36977      have printed covers) of the Document, numbering more than 100, and
   36978      the Document's license notice requires Cover Texts, you must
   36979      enclose the copies in covers that carry, clearly and legibly, all
   36980      these Cover Texts: Front-Cover Texts on the front cover, and
   36981      Back-Cover Texts on the back cover.  Both covers must also clearly
   36982      and legibly identify you as the publisher of these copies.  The
   36983      front cover must present the full title with all words of the
   36984      title equally prominent and visible.  You may add other material
   36985      on the covers in addition.  Copying with changes limited to the
   36986      covers, as long as they preserve the title of the Document and
   36987      satisfy these conditions, can be treated as verbatim copying in
   36988      other respects.
   36989 
   36990      If the required texts for either cover are too voluminous to fit
   36991      legibly, you should put the first ones listed (as many as fit
   36992      reasonably) on the actual cover, and continue the rest onto
   36993      adjacent pages.
   36994 
   36995      If you publish or distribute Opaque copies of the Document
   36996      numbering more than 100, you must either include a
   36997      machine-readable Transparent copy along with each Opaque copy, or
   36998      state in or with each Opaque copy a computer-network location from
   36999      which the general network-using public has access to download
   37000      using public-standard network protocols a complete Transparent
   37001      copy of the Document, free of added material.  If you use the
   37002      latter option, you must take reasonably prudent steps, when you
   37003      begin distribution of Opaque copies in quantity, to ensure that
   37004      this Transparent copy will remain thus accessible at the stated
   37005      location until at least one year after the last time you
   37006      distribute an Opaque copy (directly or through your agents or
   37007      retailers) of that edition to the public.
   37008 
   37009      It is requested, but not required, that you contact the authors of
   37010      the Document well before redistributing any large number of
   37011      copies, to give them a chance to provide you with an updated
   37012      version of the Document.
   37013 
   37014   4. MODIFICATIONS
   37015 
   37016      You may copy and distribute a Modified Version of the Document
   37017      under the conditions of sections 2 and 3 above, provided that you
   37018      release the Modified Version under precisely this License, with
   37019      the Modified Version filling the role of the Document, thus
   37020      licensing distribution and modification of the Modified Version to
   37021      whoever possesses a copy of it.  In addition, you must do these
   37022      things in the Modified Version:
   37023 
   37024        A. Use in the Title Page (and on the covers, if any) a title
   37025           distinct from that of the Document, and from those of
   37026           previous versions (which should, if there were any, be listed
   37027           in the History section of the Document).  You may use the
   37028           same title as a previous version if the original publisher of
   37029           that version gives permission.
   37030 
   37031        B. List on the Title Page, as authors, one or more persons or
   37032           entities responsible for authorship of the modifications in
   37033           the Modified Version, together with at least five of the
   37034           principal authors of the Document (all of its principal
   37035           authors, if it has fewer than five), unless they release you
   37036           from this requirement.
   37037 
   37038        C. State on the Title page the name of the publisher of the
   37039           Modified Version, as the publisher.
   37040 
   37041        D. Preserve all the copyright notices of the Document.
   37042 
   37043        E. Add an appropriate copyright notice for your modifications
   37044           adjacent to the other copyright notices.
   37045 
   37046        F. Include, immediately after the copyright notices, a license
   37047           notice giving the public permission to use the Modified
   37048           Version under the terms of this License, in the form shown in
   37049           the Addendum below.
   37050 
   37051        G. Preserve in that license notice the full lists of Invariant
   37052           Sections and required Cover Texts given in the Document's
   37053           license notice.
   37054 
   37055        H. Include an unaltered copy of this License.
   37056 
   37057        I. Preserve the section Entitled "History", Preserve its Title,
   37058           and add to it an item stating at least the title, year, new
   37059           authors, and publisher of the Modified Version as given on
   37060           the Title Page.  If there is no section Entitled "History" in
   37061           the Document, create one stating the title, year, authors,
   37062           and publisher of the Document as given on its Title Page,
   37063           then add an item describing the Modified Version as stated in
   37064           the previous sentence.
   37065 
   37066        J. Preserve the network location, if any, given in the Document
   37067           for public access to a Transparent copy of the Document, and
   37068           likewise the network locations given in the Document for
   37069           previous versions it was based on.  These may be placed in
   37070           the "History" section.  You may omit a network location for a
   37071           work that was published at least four years before the
   37072           Document itself, or if the original publisher of the version
   37073           it refers to gives permission.
   37074 
   37075        K. For any section Entitled "Acknowledgements" or "Dedications",
   37076           Preserve the Title of the section, and preserve in the
   37077           section all the substance and tone of each of the contributor
   37078           acknowledgements and/or dedications given therein.
   37079 
   37080        L. Preserve all the Invariant Sections of the Document,
   37081           unaltered in their text and in their titles.  Section numbers
   37082           or the equivalent are not considered part of the section
   37083           titles.
   37084 
   37085        M. Delete any section Entitled "Endorsements".  Such a section
   37086           may not be included in the Modified Version.
   37087 
   37088        N. Do not retitle any existing section to be Entitled
   37089           "Endorsements" or to conflict in title with any Invariant
   37090           Section.
   37091 
   37092        O. Preserve any Warranty Disclaimers.
   37093 
   37094      If the Modified Version includes new front-matter sections or
   37095      appendices that qualify as Secondary Sections and contain no
   37096      material copied from the Document, you may at your option
   37097      designate some or all of these sections as invariant.  To do this,
   37098      add their titles to the list of Invariant Sections in the Modified
   37099      Version's license notice.  These titles must be distinct from any
   37100      other section titles.
   37101 
   37102      You may add a section Entitled "Endorsements", provided it contains
   37103      nothing but endorsements of your Modified Version by various
   37104      parties--for example, statements of peer review or that the text
   37105      has been approved by an organization as the authoritative
   37106      definition of a standard.
   37107 
   37108      You may add a passage of up to five words as a Front-Cover Text,
   37109      and a passage of up to 25 words as a Back-Cover Text, to the end
   37110      of the list of Cover Texts in the Modified Version.  Only one
   37111      passage of Front-Cover Text and one of Back-Cover Text may be
   37112      added by (or through arrangements made by) any one entity.  If the
   37113      Document already includes a cover text for the same cover,
   37114      previously added by you or by arrangement made by the same entity
   37115      you are acting on behalf of, you may not add another; but you may
   37116      replace the old one, on explicit permission from the previous
   37117      publisher that added the old one.
   37118 
   37119      The author(s) and publisher(s) of the Document do not by this
   37120      License give permission to use their names for publicity for or to
   37121      assert or imply endorsement of any Modified Version.
   37122 
   37123   5. COMBINING DOCUMENTS
   37124 
   37125      You may combine the Document with other documents released under
   37126      this License, under the terms defined in section 4 above for
   37127      modified versions, provided that you include in the combination
   37128      all of the Invariant Sections of all of the original documents,
   37129      unmodified, and list them all as Invariant Sections of your
   37130      combined work in its license notice, and that you preserve all
   37131      their Warranty Disclaimers.
   37132 
   37133      The combined work need only contain one copy of this License, and
   37134      multiple identical Invariant Sections may be replaced with a single
   37135      copy.  If there are multiple Invariant Sections with the same name
   37136      but different contents, make the title of each such section unique
   37137      by adding at the end of it, in parentheses, the name of the
   37138      original author or publisher of that section if known, or else a
   37139      unique number.  Make the same adjustment to the section titles in
   37140      the list of Invariant Sections in the license notice of the
   37141      combined work.
   37142 
   37143      In the combination, you must combine any sections Entitled
   37144      "History" in the various original documents, forming one section
   37145      Entitled "History"; likewise combine any sections Entitled
   37146      "Acknowledgements", and any sections Entitled "Dedications".  You
   37147      must delete all sections Entitled "Endorsements."
   37148 
   37149   6. COLLECTIONS OF DOCUMENTS
   37150 
   37151      You may make a collection consisting of the Document and other
   37152      documents released under this License, and replace the individual
   37153      copies of this License in the various documents with a single copy
   37154      that is included in the collection, provided that you follow the
   37155      rules of this License for verbatim copying of each of the
   37156      documents in all other respects.
   37157 
   37158      You may extract a single document from such a collection, and
   37159      distribute it individually under this License, provided you insert
   37160      a copy of this License into the extracted document, and follow
   37161      this License in all other respects regarding verbatim copying of
   37162      that document.
   37163 
   37164   7. AGGREGATION WITH INDEPENDENT WORKS
   37165 
   37166      A compilation of the Document or its derivatives with other
   37167      separate and independent documents or works, in or on a volume of
   37168      a storage or distribution medium, is called an "aggregate" if the
   37169      copyright resulting from the compilation is not used to limit the
   37170      legal rights of the compilation's users beyond what the individual
   37171      works permit.  When the Document is included in an aggregate, this
   37172      License does not apply to the other works in the aggregate which
   37173      are not themselves derivative works of the Document.
   37174 
   37175      If the Cover Text requirement of section 3 is applicable to these
   37176      copies of the Document, then if the Document is less than one half
   37177      of the entire aggregate, the Document's Cover Texts may be placed
   37178      on covers that bracket the Document within the aggregate, or the
   37179      electronic equivalent of covers if the Document is in electronic
   37180      form.  Otherwise they must appear on printed covers that bracket
   37181      the whole aggregate.
   37182 
   37183   8. TRANSLATION
   37184 
   37185      Translation is considered a kind of modification, so you may
   37186      distribute translations of the Document under the terms of section
   37187      4.  Replacing Invariant Sections with translations requires special
   37188      permission from their copyright holders, but you may include
   37189      translations of some or all Invariant Sections in addition to the
   37190      original versions of these Invariant Sections.  You may include a
   37191      translation of this License, and all the license notices in the
   37192      Document, and any Warranty Disclaimers, provided that you also
   37193      include the original English version of this License and the
   37194      original versions of those notices and disclaimers.  In case of a
   37195      disagreement between the translation and the original version of
   37196      this License or a notice or disclaimer, the original version will
   37197      prevail.
   37198 
   37199      If a section in the Document is Entitled "Acknowledgements",
   37200      "Dedications", or "History", the requirement (section 4) to
   37201      Preserve its Title (section 1) will typically require changing the
   37202      actual title.
   37203 
   37204   9. TERMINATION
   37205 
   37206      You may not copy, modify, sublicense, or distribute the Document
   37207      except as expressly provided for under this License.  Any other
   37208      attempt to copy, modify, sublicense or distribute the Document is
   37209      void, and will automatically terminate your rights under this
   37210      License.  However, parties who have received copies, or rights,
   37211      from you under this License will not have their licenses
   37212      terminated so long as such parties remain in full compliance.
   37213 
   37214  10. FUTURE REVISIONS OF THIS LICENSE
   37215 
   37216      The Free Software Foundation may publish new, revised versions of
   37217      the GNU Free Documentation License from time to time.  Such new
   37218      versions will be similar in spirit to the present version, but may
   37219      differ in detail to address new problems or concerns.  See
   37220      `http://www.gnu.org/copyleft/'.
   37221 
   37222      Each version of the License is given a distinguishing version
   37223      number.  If the Document specifies that a particular numbered
   37224      version of this License "or any later version" applies to it, you
   37225      have the option of following the terms and conditions either of
   37226      that specified version or of any later version that has been
   37227      published (not as a draft) by the Free Software Foundation.  If
   37228      the Document does not specify a version number of this License,
   37229      you may choose any version ever published (not as a draft) by the
   37230      Free Software Foundation.
   37231 
   37232 ADDENDUM: How to use this License for your documents
   37233 ====================================================
   37234 
   37235 To use this License in a document you have written, include a copy of
   37236 the License in the document and put the following copyright and license
   37237 notices just after the title page:
   37238 
   37239        Copyright (C)  YEAR  YOUR NAME.
   37240        Permission is granted to copy, distribute and/or modify this document
   37241        under the terms of the GNU Free Documentation License, Version 1.2
   37242        or any later version published by the Free Software Foundation;
   37243        with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
   37244        Texts.  A copy of the license is included in the section entitled ``GNU
   37245        Free Documentation License''.
   37246 
   37247  If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
   37248 replace the "with...Texts." line with this:
   37249 
   37250          with the Invariant Sections being LIST THEIR TITLES, with
   37251          the Front-Cover Texts being LIST, and with the Back-Cover Texts
   37252          being LIST.
   37253 
   37254  If you have Invariant Sections without Cover Texts, or some other
   37255 combination of the three, merge those two alternatives to suit the
   37256 situation.
   37257 
   37258  If your document contains nontrivial examples of program code, we
   37259 recommend releasing these examples in parallel under your choice of
   37260 free software license, such as the GNU General Public License, to
   37261 permit their use in free software.
   37262 
   37263 
   37264 File: gcc.info,  Node: Contributors,  Next: Option Index,  Prev: GNU Free Documentation License,  Up: Top
   37265 
   37266 Contributors to GCC
   37267 *******************
   37268 
   37269 The GCC project would like to thank its many contributors.  Without
   37270 them the project would not have been nearly as successful as it has
   37271 been.  Any omissions in this list are accidental.  Feel free to contact
   37272 <law (a] redhat.com> or <gerald (a] pfeifer.com> if you have been left out or
   37273 some of your contributions are not listed.  Please keep this list in
   37274 alphabetical order.
   37275 
   37276    * Analog Devices helped implement the support for complex data types
   37277      and iterators.
   37278 
   37279    * John David Anglin for threading-related fixes and improvements to
   37280      libstdc++-v3, and the HP-UX port.
   37281 
   37282    * James van Artsdalen wrote the code that makes efficient use of the
   37283      Intel 80387 register stack.
   37284 
   37285    * Abramo and Roberto Bagnara for the SysV68 Motorola 3300 Delta
   37286      Series port.
   37287 
   37288    * Alasdair Baird for various bug fixes.
   37289 
   37290    * Giovanni Bajo for analyzing lots of complicated C++ problem
   37291      reports.
   37292 
   37293    * Peter Barada for his work to improve code generation for new
   37294      ColdFire cores.
   37295 
   37296    * Gerald Baumgartner added the signature extension to the C++ front
   37297      end.
   37298 
   37299    * Godmar Back for his Java improvements and encouragement.
   37300 
   37301    * Scott Bambrough for help porting the Java compiler.
   37302 
   37303    * Wolfgang Bangerth for processing tons of bug reports.
   37304 
   37305    * Jon Beniston for his Microsoft Windows port of Java.
   37306 
   37307    * Daniel Berlin for better DWARF2 support, faster/better
   37308      optimizations, improved alias analysis, plus migrating GCC to
   37309      Bugzilla.
   37310 
   37311    * Geoff Berry for his Java object serialization work and various
   37312      patches.
   37313 
   37314    * Uros Bizjak for the implementation of x87 math built-in functions
   37315      and for various middle end and i386 back end improvements and bug
   37316      fixes.
   37317 
   37318    * Eric Blake for helping to make GCJ and libgcj conform to the
   37319      specifications.
   37320 
   37321    * Janne Blomqvist for contributions to GNU Fortran.
   37322 
   37323    * Segher Boessenkool for various fixes.
   37324 
   37325    * Hans-J. Boehm for his garbage collector, IA-64 libffi port, and
   37326      other Java work.
   37327 
   37328    * Neil Booth for work on cpplib, lang hooks, debug hooks and other
   37329      miscellaneous clean-ups.
   37330 
   37331    * Steven Bosscher for integrating the GNU Fortran front end into GCC
   37332      and for contributing to the tree-ssa branch.
   37333 
   37334    * Eric Botcazou for fixing middle- and backend bugs left and right.
   37335 
   37336    * Per Bothner for his direction via the steering committee and
   37337      various improvements to the infrastructure for supporting new
   37338      languages.  Chill front end implementation.  Initial
   37339      implementations of cpplib, fix-header, config.guess, libio, and
   37340      past C++ library (libg++) maintainer.  Dreaming up, designing and
   37341      implementing much of GCJ.
   37342 
   37343    * Devon Bowen helped port GCC to the Tahoe.
   37344 
   37345    * Don Bowman for mips-vxworks contributions.
   37346 
   37347    * Dave Brolley for work on cpplib and Chill.
   37348 
   37349    * Paul Brook for work on the ARM architecture and maintaining GNU
   37350      Fortran.
   37351 
   37352    * Robert Brown implemented the support for Encore 32000 systems.
   37353 
   37354    * Christian Bruel for improvements to local store elimination.
   37355 
   37356    * Herman A.J. ten Brugge for various fixes.
   37357 
   37358    * Joerg Brunsmann for Java compiler hacking and help with the GCJ
   37359      FAQ.
   37360 
   37361    * Joe Buck for his direction via the steering committee.
   37362 
   37363    * Craig Burley for leadership of the G77 Fortran effort.
   37364 
   37365    * Stephan Buys for contributing Doxygen notes for libstdc++.
   37366 
   37367    * Paolo Carlini for libstdc++ work: lots of efficiency improvements
   37368      to the C++ strings, streambufs and formatted I/O, hard detective
   37369      work on the frustrating localization issues, and keeping up with
   37370      the problem reports.
   37371 
   37372    * John Carr for his alias work, SPARC hacking, infrastructure
   37373      improvements, previous contributions to the steering committee,
   37374      loop optimizations, etc.
   37375 
   37376    * Stephane Carrez for 68HC11 and 68HC12 ports.
   37377 
   37378    * Steve Chamberlain for support for the Renesas SH and H8 processors
   37379      and the PicoJava processor, and for GCJ config fixes.
   37380 
   37381    * Glenn Chambers for help with the GCJ FAQ.
   37382 
   37383    * John-Marc Chandonia for various libgcj patches.
   37384 
   37385    * Scott Christley for his Objective-C contributions.
   37386 
   37387    * Eric Christopher for his Java porting help and clean-ups.
   37388 
   37389    * Branko Cibej for more warning contributions.
   37390 
   37391    * The GNU Classpath project for all of their merged runtime code.
   37392 
   37393    * Nick Clifton for arm, mcore, fr30, v850, m32r work, `--help', and
   37394      other random hacking.
   37395 
   37396    * Michael Cook for libstdc++ cleanup patches to reduce warnings.
   37397 
   37398    * R. Kelley Cook for making GCC buildable from a read-only directory
   37399      as well as other miscellaneous build process and documentation
   37400      clean-ups.
   37401 
   37402    * Ralf Corsepius for SH testing and minor bug fixing.
   37403 
   37404    * Stan Cox for care and feeding of the x86 port and lots of behind
   37405      the scenes hacking.
   37406 
   37407    * Alex Crain provided changes for the 3b1.
   37408 
   37409    * Ian Dall for major improvements to the NS32k port.
   37410 
   37411    * Paul Dale for his work to add uClinux platform support to the m68k
   37412      backend.
   37413 
   37414    * Dario Dariol contributed the four varieties of sample programs
   37415      that print a copy of their source.
   37416 
   37417    * Russell Davidson for fstream and stringstream fixes in libstdc++.
   37418 
   37419    * Bud Davis for work on the G77 and GNU Fortran compilers.
   37420 
   37421    * Mo DeJong for GCJ and libgcj bug fixes.
   37422 
   37423    * DJ Delorie for the DJGPP port, build and libiberty maintenance,
   37424      various bug fixes, and the M32C port.
   37425 
   37426    * Arnaud Desitter for helping to debug GNU Fortran.
   37427 
   37428    * Gabriel Dos Reis for contributions to G++, contributions and
   37429      maintenance of GCC diagnostics infrastructure, libstdc++-v3,
   37430      including `valarray<>', `complex<>', maintaining the numerics
   37431      library (including that pesky `<limits>' :-) and keeping
   37432      up-to-date anything to do with numbers.
   37433 
   37434    * Ulrich Drepper for his work on glibc, testing of GCC using glibc,
   37435      ISO C99 support, CFG dumping support, etc., plus support of the
   37436      C++ runtime libraries including for all kinds of C interface
   37437      issues, contributing and maintaining `complex<>', sanity checking
   37438      and disbursement, configuration architecture, libio maintenance,
   37439      and early math work.
   37440 
   37441    * Zdenek Dvorak for a new loop unroller and various fixes.
   37442 
   37443    * Richard Earnshaw for his ongoing work with the ARM.
   37444 
   37445    * David Edelsohn for his direction via the steering committee,
   37446      ongoing work with the RS6000/PowerPC port, help cleaning up Haifa
   37447      loop changes, doing the entire AIX port of libstdc++ with his bare
   37448      hands, and for ensuring GCC properly keeps working on AIX.
   37449 
   37450    * Kevin Ediger for the floating point formatting of num_put::do_put
   37451      in libstdc++.
   37452 
   37453    * Phil Edwards for libstdc++ work including configuration hackery,
   37454      documentation maintainer, chief breaker of the web pages, the
   37455      occasional iostream bug fix, and work on shared library symbol
   37456      versioning.
   37457 
   37458    * Paul Eggert for random hacking all over GCC.
   37459 
   37460    * Mark Elbrecht for various DJGPP improvements, and for libstdc++
   37461      configuration support for locales and fstream-related fixes.
   37462 
   37463    * Vadim Egorov for libstdc++ fixes in strings, streambufs, and
   37464      iostreams.
   37465 
   37466    * Christian Ehrhardt for dealing with bug reports.
   37467 
   37468    * Ben Elliston for his work to move the Objective-C runtime into its
   37469      own subdirectory and for his work on autoconf.
   37470 
   37471    * Revital Eres for work on the PowerPC 750CL port.
   37472 
   37473    * Marc Espie for OpenBSD support.
   37474 
   37475    * Doug Evans for much of the global optimization framework, arc,
   37476      m32r, and SPARC work.
   37477 
   37478    * Christopher Faylor for his work on the Cygwin port and for caring
   37479      and feeding the gcc.gnu.org box and saving its users tons of spam.
   37480 
   37481    * Fred Fish for BeOS support and Ada fixes.
   37482 
   37483    * Ivan Fontes Garcia for the Portuguese translation of the GCJ FAQ.
   37484 
   37485    * Peter Gerwinski for various bug fixes and the Pascal front end.
   37486 
   37487    * Kaveh R. Ghazi for his direction via the steering committee,
   37488      amazing work to make `-W -Wall -W* -Werror' useful, and
   37489      continuously testing GCC on a plethora of platforms.  Kaveh
   37490      extends his gratitude to the CAIP Center at Rutgers University for
   37491      providing him with computing resources to work on Free Software
   37492      since the late 1980s.
   37493 
   37494    * John Gilmore for a donation to the FSF earmarked improving GNU
   37495      Java.
   37496 
   37497    * Judy Goldberg for c++ contributions.
   37498 
   37499    * Torbjorn Granlund for various fixes and the c-torture testsuite,
   37500      multiply- and divide-by-constant optimization, improved long long
   37501      support, improved leaf function register allocation, and his
   37502      direction via the steering committee.
   37503 
   37504    * Anthony Green for his `-Os' contributions and Java front end work.
   37505 
   37506    * Stu Grossman for gdb hacking, allowing GCJ developers to debug
   37507      Java code.
   37508 
   37509    * Michael K. Gschwind contributed the port to the PDP-11.
   37510 
   37511    * Ron Guilmette implemented the `protoize' and `unprotoize' tools,
   37512      the support for Dwarf symbolic debugging information, and much of
   37513      the support for System V Release 4.  He has also worked heavily on
   37514      the Intel 386 and 860 support.
   37515 
   37516    * Mostafa Hagog for Swing Modulo Scheduling (SMS) and post reload
   37517      GCSE.
   37518 
   37519    * Bruno Haible for improvements in the runtime overhead for EH, new
   37520      warnings and assorted bug fixes.
   37521 
   37522    * Andrew Haley for his amazing Java compiler and library efforts.
   37523 
   37524    * Chris Hanson assisted in making GCC work on HP-UX for the 9000
   37525      series 300.
   37526 
   37527    * Michael Hayes for various thankless work he's done trying to get
   37528      the c30/c40 ports functional.  Lots of loop and unroll
   37529      improvements and fixes.
   37530 
   37531    * Dara Hazeghi for wading through myriads of target-specific bug
   37532      reports.
   37533 
   37534    * Kate Hedstrom for staking the G77 folks with an initial testsuite.
   37535 
   37536    * Richard Henderson for his ongoing SPARC, alpha, ia32, and ia64
   37537      work, loop opts, and generally fixing lots of old problems we've
   37538      ignored for years, flow rewrite and lots of further stuff,
   37539      including reviewing tons of patches.
   37540 
   37541    * Aldy Hernandez for working on the PowerPC port, SIMD support, and
   37542      various fixes.
   37543 
   37544    * Nobuyuki Hikichi of Software Research Associates, Tokyo,
   37545      contributed the support for the Sony NEWS machine.
   37546 
   37547    * Kazu Hirata for caring and feeding the Renesas H8/300 port and
   37548      various fixes.
   37549 
   37550    * Katherine Holcomb for work on GNU Fortran.
   37551 
   37552    * Manfred Hollstein for his ongoing work to keep the m88k alive, lots
   37553      of testing and bug fixing, particularly of GCC configury code.
   37554 
   37555    * Steve Holmgren for MachTen patches.
   37556 
   37557    * Jan Hubicka for his x86 port improvements.
   37558 
   37559    * Falk Hueffner for working on C and optimization bug reports.
   37560 
   37561    * Bernardo Innocenti for his m68k work, including merging of
   37562      ColdFire improvements and uClinux support.
   37563 
   37564    * Christian Iseli for various bug fixes.
   37565 
   37566    * Kamil Iskra for general m68k hacking.
   37567 
   37568    * Lee Iverson for random fixes and MIPS testing.
   37569 
   37570    * Andreas Jaeger for testing and benchmarking of GCC and various bug
   37571      fixes.
   37572 
   37573    * Jakub Jelinek for his SPARC work and sibling call optimizations as
   37574      well as lots of bug fixes and test cases, and for improving the
   37575      Java build system.
   37576 
   37577    * Janis Johnson for ia64 testing and fixes, her quality improvement
   37578      sidetracks, and web page maintenance.
   37579 
   37580    * Kean Johnston for SCO OpenServer support and various fixes.
   37581 
   37582    * Tim Josling for the sample language treelang based originally on
   37583      Richard Kenner's "toy" language.
   37584 
   37585    * Nicolai Josuttis for additional libstdc++ documentation.
   37586 
   37587    * Klaus Kaempf for his ongoing work to make alpha-vms a viable
   37588      target.
   37589 
   37590    * Steven G. Kargl for work on GNU Fortran.
   37591 
   37592    * David Kashtan of SRI adapted GCC to VMS.
   37593 
   37594    * Ryszard Kabatek for many, many libstdc++ bug fixes and
   37595      optimizations of strings, especially member functions, and for
   37596      auto_ptr fixes.
   37597 
   37598    * Geoffrey Keating for his ongoing work to make the PPC work for
   37599      GNU/Linux and his automatic regression tester.
   37600 
   37601    * Brendan Kehoe for his ongoing work with G++ and for a lot of early
   37602      work in just about every part of libstdc++.
   37603 
   37604    * Oliver M. Kellogg of Deutsche Aerospace contributed the port to the
   37605      MIL-STD-1750A.
   37606 
   37607    * Richard Kenner of the New York University Ultracomputer Research
   37608      Laboratory wrote the machine descriptions for the AMD 29000, the
   37609      DEC Alpha, the IBM RT PC, and the IBM RS/6000 as well as the
   37610      support for instruction attributes.  He also made changes to
   37611      better support RISC processors including changes to common
   37612      subexpression elimination, strength reduction, function calling
   37613      sequence handling, and condition code support, in addition to
   37614      generalizing the code for frame pointer elimination and delay slot
   37615      scheduling.  Richard Kenner was also the head maintainer of GCC
   37616      for several years.
   37617 
   37618    * Mumit Khan for various contributions to the Cygwin and Mingw32
   37619      ports and maintaining binary releases for Microsoft Windows hosts,
   37620      and for massive libstdc++ porting work to Cygwin/Mingw32.
   37621 
   37622    * Robin Kirkham for cpu32 support.
   37623 
   37624    * Mark Klein for PA improvements.
   37625 
   37626    * Thomas Koenig for various bug fixes.
   37627 
   37628    * Bruce Korb for the new and improved fixincludes code.
   37629 
   37630    * Benjamin Kosnik for his G++ work and for leading the libstdc++-v3
   37631      effort.
   37632 
   37633    * Charles LaBrec contributed the support for the Integrated Solutions
   37634      68020 system.
   37635 
   37636    * Asher Langton and Mike Kumbera for contributing Cray pointer
   37637      support to GNU Fortran, and for other GNU Fortran improvements.
   37638 
   37639    * Jeff Law for his direction via the steering committee,
   37640      coordinating the entire egcs project and GCC 2.95, rolling out
   37641      snapshots and releases, handling merges from GCC2, reviewing tons
   37642      of patches that might have fallen through the cracks else, and
   37643      random but extensive hacking.
   37644 
   37645    * Marc Lehmann for his direction via the steering committee and
   37646      helping with analysis and improvements of x86 performance.
   37647 
   37648    * Victor Leikehman for work on GNU Fortran.
   37649 
   37650    * Ted Lemon wrote parts of the RTL reader and printer.
   37651 
   37652    * Kriang Lerdsuwanakij for C++ improvements including template as
   37653      template parameter support, and many C++ fixes.
   37654 
   37655    * Warren Levy for tremendous work on libgcj (Java Runtime Library)
   37656      and random work on the Java front end.
   37657 
   37658    * Alain Lichnewsky ported GCC to the MIPS CPU.
   37659 
   37660    * Oskar Liljeblad for hacking on AWT and his many Java bug reports
   37661      and patches.
   37662 
   37663    * Robert Lipe for OpenServer support, new testsuites, testing, etc.
   37664 
   37665    * Chen Liqin for various S+core related fixes/improvement, and for
   37666      maintaining the S+core port.
   37667 
   37668    * Weiwen Liu for testing and various bug fixes.
   37669 
   37670    * Manuel Lo'pez-Iba'n~ez for improving `-Wconversion' and many other
   37671      diagnostics fixes and improvements.
   37672 
   37673    * Dave Love for his ongoing work with the Fortran front end and
   37674      runtime libraries.
   37675 
   37676    * Martin von Lo"wis for internal consistency checking infrastructure,
   37677      various C++ improvements including namespace support, and tons of
   37678      assistance with libstdc++/compiler merges.
   37679 
   37680    * H.J. Lu for his previous contributions to the steering committee,
   37681      many x86 bug reports, prototype patches, and keeping the GNU/Linux
   37682      ports working.
   37683 
   37684    * Greg McGary for random fixes and (someday) bounded pointers.
   37685 
   37686    * Andrew MacLeod for his ongoing work in building a real EH system,
   37687      various code generation improvements, work on the global
   37688      optimizer, etc.
   37689 
   37690    * Vladimir Makarov for hacking some ugly i960 problems, PowerPC
   37691      hacking improvements to compile-time performance, overall
   37692      knowledge and direction in the area of instruction scheduling, and
   37693      design and implementation of the automaton based instruction
   37694      scheduler.
   37695 
   37696    * Bob Manson for his behind the scenes work on dejagnu.
   37697 
   37698    * Philip Martin for lots of libstdc++ string and vector iterator
   37699      fixes and improvements, and string clean up and testsuites.
   37700 
   37701    * All of the Mauve project contributors, for Java test code.
   37702 
   37703    * Bryce McKinlay for numerous GCJ and libgcj fixes and improvements.
   37704 
   37705    * Adam Megacz for his work on the Microsoft Windows port of GCJ.
   37706 
   37707    * Michael Meissner for LRS framework, ia32, m32r, v850, m88k, MIPS,
   37708      powerpc, haifa, ECOFF debug support, and other assorted hacking.
   37709 
   37710    * Jason Merrill for his direction via the steering committee and
   37711      leading the G++ effort.
   37712 
   37713    * Martin Michlmayr for testing GCC on several architectures using the
   37714      entire Debian archive.
   37715 
   37716    * David Miller for his direction via the steering committee, lots of
   37717      SPARC work, improvements in jump.c and interfacing with the Linux
   37718      kernel developers.
   37719 
   37720    * Gary Miller ported GCC to Charles River Data Systems machines.
   37721 
   37722    * Alfred Minarik for libstdc++ string and ios bug fixes, and turning
   37723      the entire libstdc++ testsuite namespace-compatible.
   37724 
   37725    * Mark Mitchell for his direction via the steering committee,
   37726      mountains of C++ work, load/store hoisting out of loops, alias
   37727      analysis improvements, ISO C `restrict' support, and serving as
   37728      release manager for GCC 3.x.
   37729 
   37730    * Alan Modra for various GNU/Linux bits and testing.
   37731 
   37732    * Toon Moene for his direction via the steering committee, Fortran
   37733      maintenance, and his ongoing work to make us make Fortran run fast.
   37734 
   37735    * Jason Molenda for major help in the care and feeding of all the
   37736      services on the gcc.gnu.org (formerly egcs.cygnus.com)
   37737      machine--mail, web services, ftp services, etc etc.  Doing all
   37738      this work on scrap paper and the backs of envelopes would have
   37739      been... difficult.
   37740 
   37741    * Catherine Moore for fixing various ugly problems we have sent her
   37742      way, including the haifa bug which was killing the Alpha & PowerPC
   37743      Linux kernels.
   37744 
   37745    * Mike Moreton for his various Java patches.
   37746 
   37747    * David Mosberger-Tang for various Alpha improvements, and for the
   37748      initial IA-64 port.
   37749 
   37750    * Stephen Moshier contributed the floating point emulator that
   37751      assists in cross-compilation and permits support for floating
   37752      point numbers wider than 64 bits and for ISO C99 support.
   37753 
   37754    * Bill Moyer for his behind the scenes work on various issues.
   37755 
   37756    * Philippe De Muyter for his work on the m68k port.
   37757 
   37758    * Joseph S. Myers for his work on the PDP-11 port, format checking
   37759      and ISO C99 support, and continuous emphasis on (and contributions
   37760      to) documentation.
   37761 
   37762    * Nathan Myers for his work on libstdc++-v3: architecture and
   37763      authorship through the first three snapshots, including
   37764      implementation of locale infrastructure, string, shadow C headers,
   37765      and the initial project documentation (DESIGN, CHECKLIST, and so
   37766      forth).  Later, more work on MT-safe string and shadow headers.
   37767 
   37768    * Felix Natter for documentation on porting libstdc++.
   37769 
   37770    * Nathanael Nerode for cleaning up the configuration/build process.
   37771 
   37772    * NeXT, Inc. donated the front end that supports the Objective-C
   37773      language.
   37774 
   37775    * Hans-Peter Nilsson for the CRIS and MMIX ports, improvements to
   37776      the search engine setup, various documentation fixes and other
   37777      small fixes.
   37778 
   37779    * Geoff Noer for his work on getting cygwin native builds working.
   37780 
   37781    * Diego Novillo for his work on Tree SSA, OpenMP, SPEC performance
   37782      tracking web pages and assorted fixes.
   37783 
   37784    * David O'Brien for the FreeBSD/alpha, FreeBSD/AMD x86-64,
   37785      FreeBSD/ARM, FreeBSD/PowerPC, and FreeBSD/SPARC64 ports and
   37786      related infrastructure improvements.
   37787 
   37788    * Alexandre Oliva for various build infrastructure improvements,
   37789      scripts and amazing testing work, including keeping libtool issues
   37790      sane and happy.
   37791 
   37792    * Stefan Olsson for work on mt_alloc.
   37793 
   37794    * Melissa O'Neill for various NeXT fixes.
   37795 
   37796    * Rainer Orth for random MIPS work, including improvements to GCC's
   37797      o32 ABI support, improvements to dejagnu's MIPS support, Java
   37798      configuration clean-ups and porting work, etc.
   37799 
   37800    * Hartmut Penner for work on the s390 port.
   37801 
   37802    * Paul Petersen wrote the machine description for the Alliant FX/8.
   37803 
   37804    * Alexandre Petit-Bianco for implementing much of the Java compiler
   37805      and continued Java maintainership.
   37806 
   37807    * Matthias Pfaller for major improvements to the NS32k port.
   37808 
   37809    * Gerald Pfeifer for his direction via the steering committee,
   37810      pointing out lots of problems we need to solve, maintenance of the
   37811      web pages, and taking care of documentation maintenance in general.
   37812 
   37813    * Andrew Pinski for processing bug reports by the dozen.
   37814 
   37815    * Ovidiu Predescu for his work on the Objective-C front end and
   37816      runtime libraries.
   37817 
   37818    * Jerry Quinn for major performance improvements in C++ formatted
   37819      I/O.
   37820 
   37821    * Ken Raeburn for various improvements to checker, MIPS ports and
   37822      various cleanups in the compiler.
   37823 
   37824    * Rolf W. Rasmussen for hacking on AWT.
   37825 
   37826    * David Reese of Sun Microsystems contributed to the Solaris on
   37827      PowerPC port.
   37828 
   37829    * Volker Reichelt for keeping up with the problem reports.
   37830 
   37831    * Joern Rennecke for maintaining the sh port, loop, regmove & reload
   37832      hacking.
   37833 
   37834    * Loren J. Rittle for improvements to libstdc++-v3 including the
   37835      FreeBSD port, threading fixes, thread-related configury changes,
   37836      critical threading documentation, and solutions to really tricky
   37837      I/O problems, as well as keeping GCC properly working on FreeBSD
   37838      and continuous testing.
   37839 
   37840    * Craig Rodrigues for processing tons of bug reports.
   37841 
   37842    * Ola Ro"nnerup for work on mt_alloc.
   37843 
   37844    * Gavin Romig-Koch for lots of behind the scenes MIPS work.
   37845 
   37846    * David Ronis inspired and encouraged Craig to rewrite the G77
   37847      documentation in texinfo format by contributing a first pass at a
   37848      translation of the old `g77-0.5.16/f/DOC' file.
   37849 
   37850    * Ken Rose for fixes to GCC's delay slot filling code.
   37851 
   37852    * Paul Rubin wrote most of the preprocessor.
   37853 
   37854    * Pe'tur Runo'lfsson for major performance improvements in C++
   37855      formatted I/O and large file support in C++ filebuf.
   37856 
   37857    * Chip Salzenberg for libstdc++ patches and improvements to locales,
   37858      traits, Makefiles, libio, libtool hackery, and "long long" support.
   37859 
   37860    * Juha Sarlin for improvements to the H8 code generator.
   37861 
   37862    * Greg Satz assisted in making GCC work on HP-UX for the 9000 series
   37863      300.
   37864 
   37865    * Roger Sayle for improvements to constant folding and GCC's RTL
   37866      optimizers as well as for fixing numerous bugs.
   37867 
   37868    * Bradley Schatz for his work on the GCJ FAQ.
   37869 
   37870    * Peter Schauer wrote the code to allow debugging to work on the
   37871      Alpha.
   37872 
   37873    * William Schelter did most of the work on the Intel 80386 support.
   37874 
   37875    * Tobias Schlu"ter for work on GNU Fortran.
   37876 
   37877    * Bernd Schmidt for various code generation improvements and major
   37878      work in the reload pass as well a serving as release manager for
   37879      GCC 2.95.3.
   37880 
   37881    * Peter Schmid for constant testing of libstdc++--especially
   37882      application testing, going above and beyond what was requested for
   37883      the release criteria--and libstdc++ header file tweaks.
   37884 
   37885    * Jason Schroeder for jcf-dump patches.
   37886 
   37887    * Andreas Schwab for his work on the m68k port.
   37888 
   37889    * Lars Segerlund for work on GNU Fortran.
   37890 
   37891    * Joel Sherrill for his direction via the steering committee, RTEMS
   37892      contributions and RTEMS testing.
   37893 
   37894    * Nathan Sidwell for many C++ fixes/improvements.
   37895 
   37896    * Jeffrey Siegal for helping RMS with the original design of GCC,
   37897      some code which handles the parse tree and RTL data structures,
   37898      constant folding and help with the original VAX & m68k ports.
   37899 
   37900    * Kenny Simpson for prompting libstdc++ fixes due to defect reports
   37901      from the LWG (thereby keeping GCC in line with updates from the
   37902      ISO).
   37903 
   37904    * Franz Sirl for his ongoing work with making the PPC port stable
   37905      for GNU/Linux.
   37906 
   37907    * Andrey Slepuhin for assorted AIX hacking.
   37908 
   37909    * Trevor Smigiel for contributing the SPU port.
   37910 
   37911    * Christopher Smith did the port for Convex machines.
   37912 
   37913    * Danny Smith for his major efforts on the Mingw (and Cygwin) ports.
   37914 
   37915    * Randy Smith finished the Sun FPA support.
   37916 
   37917    * Scott Snyder for queue, iterator, istream, and string fixes and
   37918      libstdc++ testsuite entries.  Also for providing the patch to G77
   37919      to add rudimentary support for `INTEGER*1', `INTEGER*2', and
   37920      `LOGICAL*1'.
   37921 
   37922    * Brad Spencer for contributions to the GLIBCPP_FORCE_NEW technique.
   37923 
   37924    * Richard Stallman, for writing the original GCC and launching the
   37925      GNU project.
   37926 
   37927    * Jan Stein of the Chalmers Computer Society provided support for
   37928      Genix, as well as part of the 32000 machine description.
   37929 
   37930    * Nigel Stephens for various mips16 related fixes/improvements.
   37931 
   37932    * Jonathan Stone wrote the machine description for the Pyramid
   37933      computer.
   37934 
   37935    * Graham Stott for various infrastructure improvements.
   37936 
   37937    * John Stracke for his Java HTTP protocol fixes.
   37938 
   37939    * Mike Stump for his Elxsi port, G++ contributions over the years
   37940      and more recently his vxworks contributions
   37941 
   37942    * Jeff Sturm for Java porting help, bug fixes, and encouragement.
   37943 
   37944    * Shigeya Suzuki for this fixes for the bsdi platforms.
   37945 
   37946    * Ian Lance Taylor for his mips16 work, general configury hacking,
   37947      fixincludes, etc.
   37948 
   37949    * Holger Teutsch provided the support for the Clipper CPU.
   37950 
   37951    * Gary Thomas for his ongoing work to make the PPC work for
   37952      GNU/Linux.
   37953 
   37954    * Philipp Thomas for random bug fixes throughout the compiler
   37955 
   37956    * Jason Thorpe for thread support in libstdc++ on NetBSD.
   37957 
   37958    * Kresten Krab Thorup wrote the run time support for the Objective-C
   37959      language and the fantastic Java bytecode interpreter.
   37960 
   37961    * Michael Tiemann for random bug fixes, the first instruction
   37962      scheduler, initial C++ support, function integration, NS32k, SPARC
   37963      and M88k machine description work, delay slot scheduling.
   37964 
   37965    * Andreas Tobler for his work porting libgcj to Darwin.
   37966 
   37967    * Teemu Torma for thread safe exception handling support.
   37968 
   37969    * Leonard Tower wrote parts of the parser, RTL generator, and RTL
   37970      definitions, and of the VAX machine description.
   37971 
   37972    * Tom Tromey for internationalization support and for his many Java
   37973      contributions and libgcj maintainership.
   37974 
   37975    * Lassi Tuura for improvements to config.guess to determine HP
   37976      processor types.
   37977 
   37978    * Petter Urkedal for libstdc++ CXXFLAGS, math, and algorithms fixes.
   37979 
   37980    * Andy Vaught for the design and initial implementation of the GNU
   37981      Fortran front end.
   37982 
   37983    * Brent Verner for work with the libstdc++ cshadow files and their
   37984      associated configure steps.
   37985 
   37986    * Todd Vierling for contributions for NetBSD ports.
   37987 
   37988    * Jonathan Wakely for contributing libstdc++ Doxygen notes and XHTML
   37989      guidance.
   37990 
   37991    * Dean Wakerley for converting the install documentation from HTML
   37992      to texinfo in time for GCC 3.0.
   37993 
   37994    * Krister Walfridsson for random bug fixes.
   37995 
   37996    * Feng Wang for contributions to GNU Fortran.
   37997 
   37998    * Stephen M. Webb for time and effort on making libstdc++ shadow
   37999      files work with the tricky Solaris 8+ headers, and for pushing the
   38000      build-time header tree.
   38001 
   38002    * John Wehle for various improvements for the x86 code generator,
   38003      related infrastructure improvements to help x86 code generation,
   38004      value range propagation and other work, WE32k port.
   38005 
   38006    * Ulrich Weigand for work on the s390 port.
   38007 
   38008    * Zack Weinberg for major work on cpplib and various other bug fixes.
   38009 
   38010    * Matt Welsh for help with Linux Threads support in GCJ.
   38011 
   38012    * Urban Widmark for help fixing java.io.
   38013 
   38014    * Mark Wielaard for new Java library code and his work integrating
   38015      with Classpath.
   38016 
   38017    * Dale Wiles helped port GCC to the Tahoe.
   38018 
   38019    * Bob Wilson from Tensilica, Inc. for the Xtensa port.
   38020 
   38021    * Jim Wilson for his direction via the steering committee, tackling
   38022      hard problems in various places that nobody else wanted to work
   38023      on, strength reduction and other loop optimizations.
   38024 
   38025    * Paul Woegerer and Tal Agmon for the CRX port.
   38026 
   38027    * Carlo Wood for various fixes.
   38028 
   38029    * Tom Wood for work on the m88k port.
   38030 
   38031    * Canqun Yang for work on GNU Fortran.
   38032 
   38033    * Masanobu Yuhara of Fujitsu Laboratories implemented the machine
   38034      description for the Tron architecture (specifically, the Gmicro).
   38035 
   38036    * Kevin Zachmann helped port GCC to the Tahoe.
   38037 
   38038    * Ayal Zaks for Swing Modulo Scheduling (SMS).
   38039 
   38040    * Xiaoqiang Zhang for work on GNU Fortran.
   38041 
   38042    * Gilles Zunino for help porting Java to Irix.
   38043 
   38044 
   38045  The following people are recognized for their contributions to GNAT,
   38046 the Ada front end of GCC:
   38047    * Bernard Banner
   38048 
   38049    * Romain Berrendonner
   38050 
   38051    * Geert Bosch
   38052 
   38053    * Emmanuel Briot
   38054 
   38055    * Joel Brobecker
   38056 
   38057    * Ben Brosgol
   38058 
   38059    * Vincent Celier
   38060 
   38061    * Arnaud Charlet
   38062 
   38063    * Chien Chieng
   38064 
   38065    * Cyrille Comar
   38066 
   38067    * Cyrille Crozes
   38068 
   38069    * Robert Dewar
   38070 
   38071    * Gary Dismukes
   38072 
   38073    * Robert Duff
   38074 
   38075    * Ed Falis
   38076 
   38077    * Ramon Fernandez
   38078 
   38079    * Sam Figueroa
   38080 
   38081    * Vasiliy Fofanov
   38082 
   38083    * Michael Friess
   38084 
   38085    * Franco Gasperoni
   38086 
   38087    * Ted Giering
   38088 
   38089    * Matthew Gingell
   38090 
   38091    * Laurent Guerby
   38092 
   38093    * Jerome Guitton
   38094 
   38095    * Olivier Hainque
   38096 
   38097    * Jerome Hugues
   38098 
   38099    * Hristian Kirtchev
   38100 
   38101    * Jerome Lambourg
   38102 
   38103    * Bruno Leclerc
   38104 
   38105    * Albert Lee
   38106 
   38107    * Sean McNeil
   38108 
   38109    * Javier Miranda
   38110 
   38111    * Laurent Nana
   38112 
   38113    * Pascal Obry
   38114 
   38115    * Dong-Ik Oh
   38116 
   38117    * Laurent Pautet
   38118 
   38119    * Brett Porter
   38120 
   38121    * Thomas Quinot
   38122 
   38123    * Nicolas Roche
   38124 
   38125    * Pat Rogers
   38126 
   38127    * Jose Ruiz
   38128 
   38129    * Douglas Rupp
   38130 
   38131    * Sergey Rybin
   38132 
   38133    * Gail Schenker
   38134 
   38135    * Ed Schonberg
   38136 
   38137    * Nicolas Setton
   38138 
   38139    * Samuel Tardieu
   38140 
   38141 
   38142  The following people are recognized for their contributions of new
   38143 features, bug reports, testing and integration of classpath/libgcj for
   38144 GCC version 4.1:
   38145    * Lillian Angel for `JTree' implementation and lots Free Swing
   38146      additions and bug fixes.
   38147 
   38148    * Wolfgang Baer for `GapContent' bug fixes.
   38149 
   38150    * Anthony Balkissoon for `JList', Free Swing 1.5 updates and mouse
   38151      event fixes, lots of Free Swing work including `JTable' editing.
   38152 
   38153    * Stuart Ballard for RMI constant fixes.
   38154 
   38155    * Goffredo Baroncelli for `HTTPURLConnection' fixes.
   38156 
   38157    * Gary Benson for `MessageFormat' fixes.
   38158 
   38159    * Daniel Bonniot for `Serialization' fixes.
   38160 
   38161    * Chris Burdess for lots of gnu.xml and http protocol fixes, `StAX'
   38162      and `DOM xml:id' support.
   38163 
   38164    * Ka-Hing Cheung for `TreePath' and `TreeSelection' fixes.
   38165 
   38166    * Archie Cobbs for build fixes, VM interface updates,
   38167      `URLClassLoader' updates.
   38168 
   38169    * Kelley Cook for build fixes.
   38170 
   38171    * Martin Cordova for Suggestions for better `SocketTimeoutException'.
   38172 
   38173    * David Daney for `BitSet' bug fixes, `HttpURLConnection' rewrite
   38174      and improvements.
   38175 
   38176    * Thomas Fitzsimmons for lots of upgrades to the gtk+ AWT and Cairo
   38177      2D support. Lots of imageio framework additions, lots of AWT and
   38178      Free Swing bug fixes.
   38179 
   38180    * Jeroen Frijters for `ClassLoader' and nio cleanups, serialization
   38181      fixes, better `Proxy' support, bug fixes and IKVM integration.
   38182 
   38183    * Santiago Gala for `AccessControlContext' fixes.
   38184 
   38185    * Nicolas Geoffray for `VMClassLoader' and `AccessController'
   38186      improvements.
   38187 
   38188    * David Gilbert for `basic' and `metal' icon and plaf support and
   38189      lots of documenting, Lots of Free Swing and metal theme additions.
   38190      `MetalIconFactory' implementation.
   38191 
   38192    * Anthony Green for `MIDI' framework, `ALSA' and `DSSI' providers.
   38193 
   38194    * Andrew Haley for `Serialization' and `URLClassLoader' fixes, gcj
   38195      build speedups.
   38196 
   38197    * Kim Ho for `JFileChooser' implementation.
   38198 
   38199    * Andrew John Hughes for `Locale' and net fixes, URI RFC2986
   38200      updates, `Serialization' fixes, `Properties' XML support and
   38201      generic branch work, VMIntegration guide update.
   38202 
   38203    * Bastiaan Huisman for `TimeZone' bug fixing.
   38204 
   38205    * Andreas Jaeger for mprec updates.
   38206 
   38207    * Paul Jenner for better `-Werror' support.
   38208 
   38209    * Ito Kazumitsu for `NetworkInterface' implementation and updates.
   38210 
   38211    * Roman Kennke for `BoxLayout', `GrayFilter' and `SplitPane', plus
   38212      bug fixes all over. Lots of Free Swing work including styled text.
   38213 
   38214    * Simon Kitching for `String' cleanups and optimization suggestions.
   38215 
   38216    * Michael Koch for configuration fixes, `Locale' updates, bug and
   38217      build fixes.
   38218 
   38219    * Guilhem Lavaux for configuration, thread and channel fixes and
   38220      Kaffe integration. JCL native `Pointer' updates. Logger bug fixes.
   38221 
   38222    * David Lichteblau for JCL support library global/local reference
   38223      cleanups.
   38224 
   38225    * Aaron Luchko for JDWP updates and documentation fixes.
   38226 
   38227    * Ziga Mahkovec for `Graphics2D' upgraded to Cairo 0.5 and new regex
   38228      features.
   38229 
   38230    * Sven de Marothy for BMP imageio support, CSS and `TextLayout'
   38231      fixes. `GtkImage' rewrite, 2D, awt, free swing and date/time fixes
   38232      and implementing the Qt4 peers.
   38233 
   38234    * Casey Marshall for crypto algorithm fixes, `FileChannel' lock,
   38235      `SystemLogger' and `FileHandler' rotate implementations, NIO
   38236      `FileChannel.map' support, security and policy updates.
   38237 
   38238    * Bryce McKinlay for RMI work.
   38239 
   38240    * Audrius Meskauskas for lots of Free Corba, RMI and HTML work plus
   38241      testing and documenting.
   38242 
   38243    * Kalle Olavi Niemitalo for build fixes.
   38244 
   38245    * Rainer Orth for build fixes.
   38246 
   38247    * Andrew Overholt for `File' locking fixes.
   38248 
   38249    * Ingo Proetel for `Image', `Logger' and `URLClassLoader' updates.
   38250 
   38251    * Olga Rodimina for `MenuSelectionManager' implementation.
   38252 
   38253    * Jan Roehrich for `BasicTreeUI' and `JTree' fixes.
   38254 
   38255    * Julian Scheid for documentation updates and gjdoc support.
   38256 
   38257    * Christian Schlichtherle for zip fixes and cleanups.
   38258 
   38259    * Robert Schuster for documentation updates and beans fixes,
   38260      `TreeNode' enumerations and `ActionCommand' and various fixes, XML
   38261      and URL, AWT and Free Swing bug fixes.
   38262 
   38263    * Keith Seitz for lots of JDWP work.
   38264 
   38265    * Christian Thalinger for 64-bit cleanups, Configuration and VM
   38266      interface fixes and `CACAO' integration, `fdlibm' updates.
   38267 
   38268    * Gael Thomas for `VMClassLoader' boot packages support suggestions.
   38269 
   38270    * Andreas Tobler for Darwin and Solaris testing and fixing, `Qt4'
   38271      support for Darwin/OS X, `Graphics2D' support, `gtk+' updates.
   38272 
   38273    * Dalibor Topic for better `DEBUG' support, build cleanups and Kaffe
   38274      integration. `Qt4' build infrastructure, `SHA1PRNG' and
   38275      `GdkPixbugDecoder' updates.
   38276 
   38277    * Tom Tromey for Eclipse integration, generics work, lots of bug
   38278      fixes and gcj integration including coordinating The Big Merge.
   38279 
   38280    * Mark Wielaard for bug fixes, packaging and release management,
   38281      `Clipboard' implementation, system call interrupts and network
   38282      timeouts and `GdkPixpufDecoder' fixes.
   38283 
   38284 
   38285  In addition to the above, all of which also contributed time and
   38286 energy in testing GCC, we would like to thank the following for their
   38287 contributions to testing:
   38288 
   38289    * Michael Abd-El-Malek
   38290 
   38291    * Thomas Arend
   38292 
   38293    * Bonzo Armstrong
   38294 
   38295    * Steven Ashe
   38296 
   38297    * Chris Baldwin
   38298 
   38299    * David Billinghurst
   38300 
   38301    * Jim Blandy
   38302 
   38303    * Stephane Bortzmeyer
   38304 
   38305    * Horst von Brand
   38306 
   38307    * Frank Braun
   38308 
   38309    * Rodney Brown
   38310 
   38311    * Sidney Cadot
   38312 
   38313    * Bradford Castalia
   38314 
   38315    * Jonathan Corbet
   38316 
   38317    * Ralph Doncaster
   38318 
   38319    * Richard Emberson
   38320 
   38321    * Levente Farkas
   38322 
   38323    * Graham Fawcett
   38324 
   38325    * Mark Fernyhough
   38326 
   38327    * Robert A. French
   38328 
   38329    * Jo"rgen Freyh
   38330 
   38331    * Mark K. Gardner
   38332 
   38333    * Charles-Antoine Gauthier
   38334 
   38335    * Yung Shing Gene
   38336 
   38337    * David Gilbert
   38338 
   38339    * Simon Gornall
   38340 
   38341    * Fred Gray
   38342 
   38343    * John Griffin
   38344 
   38345    * Patrik Hagglund
   38346 
   38347    * Phil Hargett
   38348 
   38349    * Amancio Hasty
   38350 
   38351    * Takafumi Hayashi
   38352 
   38353    * Bryan W. Headley
   38354 
   38355    * Kevin B. Hendricks
   38356 
   38357    * Joep Jansen
   38358 
   38359    * Christian Joensson
   38360 
   38361    * Michel Kern
   38362 
   38363    * David Kidd
   38364 
   38365    * Tobias Kuipers
   38366 
   38367    * Anand Krishnaswamy
   38368 
   38369    * A. O. V. Le Blanc
   38370 
   38371    * llewelly
   38372 
   38373    * Damon Love
   38374 
   38375    * Brad Lucier
   38376 
   38377    * Matthias Klose
   38378 
   38379    * Martin Knoblauch
   38380 
   38381    * Rick Lutowski
   38382 
   38383    * Jesse Macnish
   38384 
   38385    * Stefan Morrell
   38386 
   38387    * Anon A. Mous
   38388 
   38389    * Matthias Mueller
   38390 
   38391    * Pekka Nikander
   38392 
   38393    * Rick Niles
   38394 
   38395    * Jon Olson
   38396 
   38397    * Magnus Persson
   38398 
   38399    * Chris Pollard
   38400 
   38401    * Richard Polton
   38402 
   38403    * Derk Reefman
   38404 
   38405    * David Rees
   38406 
   38407    * Paul Reilly
   38408 
   38409    * Tom Reilly
   38410 
   38411    * Torsten Rueger
   38412 
   38413    * Danny Sadinoff
   38414 
   38415    * Marc Schifer
   38416 
   38417    * Erik Schnetter
   38418 
   38419    * Wayne K. Schroll
   38420 
   38421    * David Schuler
   38422 
   38423    * Vin Shelton
   38424 
   38425    * Tim Souder
   38426 
   38427    * Adam Sulmicki
   38428 
   38429    * Bill Thorson
   38430 
   38431    * George Talbot
   38432 
   38433    * Pedro A. M. Vazquez
   38434 
   38435    * Gregory Warnes
   38436 
   38437    * Ian Watson
   38438 
   38439    * David E. Young
   38440 
   38441    * And many others
   38442 
   38443  And finally we'd like to thank everyone who uses the compiler, submits
   38444 bug reports and generally reminds us why we're doing this work in the
   38445 first place.
   38446 
   38447 
   38448 File: gcc.info,  Node: Option Index,  Next: Keyword Index,  Prev: Contributors,  Up: Top
   38449 
   38450 Option Index
   38451 ************
   38452 
   38453 GCC's command line options are indexed here without any initial `-' or
   38454 `--'.  Where an option has both positive and negative forms (such as
   38455 `-fOPTION' and `-fno-OPTION'), relevant entries in the manual are
   38456 indexed under the most appropriate form; it may sometimes be useful to
   38457 look up both forms.
   38458 
   38459 [index]
   38460 * Menu:
   38461 
   38462 * ###:                                   Overall Options.    (line  199)
   38463 * A:                                     Preprocessor Options.
   38464                                                              (line  541)
   38465 * all_load:                              Darwin Options.     (line  112)
   38466 * allowable_client:                      Darwin Options.     (line  199)
   38467 * ansi <1>:                              Non-bugs.           (line  107)
   38468 * ansi <2>:                              C Dialect Options.  (line   11)
   38469 * ansi <3>:                              Preprocessor Options.
   38470                                                              (line  328)
   38471 * ansi <4>:                              Other Builtins.     (line   22)
   38472 * ansi:                                  Standards.          (line   16)
   38473 * arch_errors_fatal:                     Darwin Options.     (line  116)
   38474 * aux-info:                              C Dialect Options.  (line  140)
   38475 * b:                                     Target Options.     (line   13)
   38476 * B:                                     Directory Options.  (line   41)
   38477 * bcopy-builtin:                         PDP-11 Options.     (line   32)
   38478 * Bdynamic:                              VxWorks Options.    (line   22)
   38479 * bind_at_load:                          Darwin Options.     (line  120)
   38480 * Bstatic:                               VxWorks Options.    (line   22)
   38481 * bundle:                                Darwin Options.     (line  125)
   38482 * bundle_loader:                         Darwin Options.     (line  129)
   38483 * C:                                     Preprocessor Options.
   38484                                                              (line  592)
   38485 * c <1>:                                 Link Options.       (line   20)
   38486 * c:                                     Overall Options.    (line  154)
   38487 * client_name:                           Darwin Options.     (line  199)
   38488 * combine:                               Overall Options.    (line  210)
   38489 * compatibility_version:                 Darwin Options.     (line  199)
   38490 * coverage:                              Debugging Options.  (line  259)
   38491 * current_version:                       Darwin Options.     (line  199)
   38492 * D:                                     Preprocessor Options.
   38493                                                              (line   33)
   38494 * d:                                     Debugging Options.  (line  324)
   38495 * da:                                    Debugging Options.  (line  492)
   38496 * dA:                                    Debugging Options.  (line  338)
   38497 * dB:                                    Debugging Options.  (line  343)
   38498 * dc:                                    Debugging Options.  (line  347)
   38499 * dC:                                    Debugging Options.  (line  353)
   38500 * dd:                                    Debugging Options.  (line  361)
   38501 * dD <1>:                                Debugging Options.  (line  367)
   38502 * dD:                                    Preprocessor Options.
   38503                                                              (line  573)
   38504 * dE:                                    Debugging Options.  (line  372)
   38505 * dead_strip:                            Darwin Options.     (line  199)
   38506 * dependency-file:                       Darwin Options.     (line  199)
   38507 * df:                                    Debugging Options.  (line  377)
   38508 * dG:                                    Debugging Options.  (line  389)
   38509 * dg:                                    Debugging Options.  (line  384)
   38510 * dH:                                    Debugging Options.  (line  495)
   38511 * dh:                                    Debugging Options.  (line  396)
   38512 * dI:                                    Preprocessor Options.
   38513                                                              (line  582)
   38514 * di:                                    Debugging Options.  (line  400)
   38515 * dj:                                    Debugging Options.  (line  404)
   38516 * dk:                                    Debugging Options.  (line  408)
   38517 * dL:                                    Debugging Options.  (line  418)
   38518 * dl:                                    Debugging Options.  (line  414)
   38519 * dm:                                    Debugging Options.  (line  498)
   38520 * dM:                                    Debugging Options.  (line  429)
   38521 * dm:                                    Debugging Options.  (line  425)
   38522 * dM:                                    Preprocessor Options.
   38523                                                              (line  557)
   38524 * dN:                                    Preprocessor Options.
   38525                                                              (line  579)
   38526 * dn:                                    Debugging Options.  (line  434)
   38527 * dN:                                    Debugging Options.  (line  438)
   38528 * do:                                    Debugging Options.  (line  442)
   38529 * dP:                                    Debugging Options.  (line  507)
   38530 * dp:                                    Debugging Options.  (line  502)
   38531 * dr:                                    Debugging Options.  (line  446)
   38532 * dR:                                    Debugging Options.  (line  450)
   38533 * dS:                                    Debugging Options.  (line  459)
   38534 * ds:                                    Debugging Options.  (line  454)
   38535 * dt:                                    Debugging Options.  (line  463)
   38536 * dT:                                    Debugging Options.  (line  468)
   38537 * dumpmachine:                           Debugging Options.  (line  879)
   38538 * dumpspecs:                             Debugging Options.  (line  887)
   38539 * dumpversion:                           Debugging Options.  (line  883)
   38540 * dv:                                    Debugging Options.  (line  511)
   38541 * dV:                                    Debugging Options.  (line  473)
   38542 * dw:                                    Debugging Options.  (line  480)
   38543 * dx:                                    Debugging Options.  (line  516)
   38544 * dy:                                    Debugging Options.  (line  520)
   38545 * dylib_file:                            Darwin Options.     (line  199)
   38546 * dylinker_install_name:                 Darwin Options.     (line  199)
   38547 * dynamic:                               Darwin Options.     (line  199)
   38548 * dynamiclib:                            Darwin Options.     (line  133)
   38549 * dZ:                                    Debugging Options.  (line  488)
   38550 * dz:                                    Debugging Options.  (line  484)
   38551 * E <1>:                                 Link Options.       (line   20)
   38552 * E:                                     Overall Options.    (line  175)
   38553 * EB <1>:                                ARC Options.        (line   12)
   38554 * EB:                                    MIPS Options.       (line    7)
   38555 * EL <1>:                                ARC Options.        (line    9)
   38556 * EL:                                    MIPS Options.       (line   10)
   38557 * exported_symbols_list:                 Darwin Options.     (line  199)
   38558 * F:                                     Darwin Options.     (line   32)
   38559 * fabi-version:                          C++ Dialect Options.
   38560                                                              (line   20)
   38561 * falign-functions:                      Optimize Options.   (line  999)
   38562 * falign-jumps:                          Optimize Options.   (line 1049)
   38563 * falign-labels:                         Optimize Options.   (line 1017)
   38564 * falign-loops:                          Optimize Options.   (line 1035)
   38565 * fargument-alias:                       Code Gen Options.   (line  378)
   38566 * fargument-noalias:                     Code Gen Options.   (line  378)
   38567 * fargument-noalias-anything:            Code Gen Options.   (line  378)
   38568 * fargument-noalias-global:              Code Gen Options.   (line  378)
   38569 * fassociative-math:                     Optimize Options.   (line 1222)
   38570 * fasynchronous-unwind-tables:           Code Gen Options.   (line   64)
   38571 * fauto-inc-dec:                         Optimize Options.   (line  447)
   38572 * fbounds-check:                         Code Gen Options.   (line   15)
   38573 * fbranch-probabilities:                 Optimize Options.   (line 1343)
   38574 * fbranch-target-load-optimize:          Optimize Options.   (line 1451)
   38575 * fbranch-target-load-optimize2:         Optimize Options.   (line 1457)
   38576 * fbtr-bb-exclusive:                     Optimize Options.   (line 1461)
   38577 * fcall-saved:                           Code Gen Options.   (line  251)
   38578 * fcall-used:                            Code Gen Options.   (line  237)
   38579 * fcaller-saves:                         Optimize Options.   (line  608)
   38580 * fcheck-data-deps:                      Optimize Options.   (line  739)
   38581 * fcheck-new:                            C++ Dialect Options.
   38582                                                              (line   34)
   38583 * fcommon:                               Variable Attributes.
   38584                                                              (line   99)
   38585 * fcond-mismatch:                        C Dialect Options.  (line  258)
   38586 * fconserve-space:                       C++ Dialect Options.
   38587                                                              (line   44)
   38588 * fconstant-string-class:                Objective-C and Objective-C++ Dialect Options.
   38589                                                              (line   30)
   38590 * fcprop-registers:                      Optimize Options.   (line 1127)
   38591 * fcrossjumping:                         Optimize Options.   (line  440)
   38592 * fcse-follow-jumps:                     Optimize Options.   (line  368)
   38593 * fcse-skip-blocks:                      Optimize Options.   (line  377)
   38594 * fcx-limited-range:                     Optimize Options.   (line 1329)
   38595 * fdata-sections:                        Optimize Options.   (line 1432)
   38596 * fdbg-cnt:                              Debugging Options.  (line  312)
   38597 * fdbg-cnt-list:                         Debugging Options.  (line  309)
   38598 * fdce:                                  Optimize Options.   (line  453)
   38599 * fdebug-prefix-map:                     Debugging Options.  (line  210)
   38600 * fdelayed-branch:                       Optimize Options.   (line  507)
   38601 * fdelete-null-pointer-checks:           Optimize Options.   (line  476)
   38602 * fdiagnostics-show-location:            Language Independent Options.
   38603                                                              (line   21)
   38604 * fdiagnostics-show-option:              Language Independent Options.
   38605                                                              (line   36)
   38606 * fdirectives-only:                      Preprocessor Options.
   38607                                                              (line  449)
   38608 * fdollars-in-identifiers <1>:           Preprocessor Options.
   38609                                                              (line  471)
   38610 * fdollars-in-identifiers:               Interoperation.     (line  146)
   38611 * fdse:                                  Optimize Options.   (line  457)
   38612 * fdump-class-hierarchy:                 Debugging Options.  (line  545)
   38613 * fdump-ipa:                             Debugging Options.  (line  552)
   38614 * fdump-noaddr:                          Debugging Options.  (line  523)
   38615 * fdump-rtl-all:                         Debugging Options.  (line  492)
   38616 * fdump-rtl-bbro:                        Debugging Options.  (line  343)
   38617 * fdump-rtl-btl:                         Debugging Options.  (line  361)
   38618 * fdump-rtl-bypass:                      Debugging Options.  (line  389)
   38619 * fdump-rtl-ce1:                         Debugging Options.  (line  353)
   38620 * fdump-rtl-ce2:                         Debugging Options.  (line  353)
   38621 * fdump-rtl-ce3:                         Debugging Options.  (line  372)
   38622 * fdump-rtl-cfg:                         Debugging Options.  (line  377)
   38623 * fdump-rtl-combine:                     Debugging Options.  (line  347)
   38624 * fdump-rtl-cse:                         Debugging Options.  (line  454)
   38625 * fdump-rtl-cse2:                        Debugging Options.  (line  463)
   38626 * fdump-rtl-dbr:                         Debugging Options.  (line  361)
   38627 * fdump-rtl-eh:                          Debugging Options.  (line  396)
   38628 * fdump-rtl-expand:                      Debugging Options.  (line  446)
   38629 * fdump-rtl-flow2:                       Debugging Options.  (line  480)
   38630 * fdump-rtl-gcse:                        Debugging Options.  (line  389)
   38631 * fdump-rtl-greg:                        Debugging Options.  (line  384)
   38632 * fdump-rtl-jump:                        Debugging Options.  (line  404)
   38633 * fdump-rtl-life:                        Debugging Options.  (line  377)
   38634 * fdump-rtl-loop2:                       Debugging Options.  (line  418)
   38635 * fdump-rtl-lreg:                        Debugging Options.  (line  414)
   38636 * fdump-rtl-mach:                        Debugging Options.  (line  429)
   38637 * fdump-rtl-peephole2:                   Debugging Options.  (line  484)
   38638 * fdump-rtl-postreload:                  Debugging Options.  (line  442)
   38639 * fdump-rtl-regmove:                     Debugging Options.  (line  438)
   38640 * fdump-rtl-rnreg:                       Debugging Options.  (line  434)
   38641 * fdump-rtl-sched1:                      Debugging Options.  (line  459)
   38642 * fdump-rtl-sched2:                      Debugging Options.  (line  450)
   38643 * fdump-rtl-sibling:                     Debugging Options.  (line  400)
   38644 * fdump-rtl-sms:                         Debugging Options.  (line  425)
   38645 * fdump-rtl-stack:                       Debugging Options.  (line  408)
   38646 * fdump-rtl-tracer:                      Debugging Options.  (line  468)
   38647 * fdump-rtl-vartrack:                    Debugging Options.  (line  473)
   38648 * fdump-rtl-vpt:                         Debugging Options.  (line  473)
   38649 * fdump-rtl-web:                         Debugging Options.  (line  488)
   38650 * fdump-translation-unit:                Debugging Options.  (line  537)
   38651 * fdump-tree:                            Debugging Options.  (line  570)
   38652 * fdump-tree-alias:                      Debugging Options.  (line  655)
   38653 * fdump-tree-all:                        Debugging Options.  (line  740)
   38654 * fdump-tree-ccp:                        Debugging Options.  (line  659)
   38655 * fdump-tree-cfg:                        Debugging Options.  (line  630)
   38656 * fdump-tree-ch:                         Debugging Options.  (line  642)
   38657 * fdump-tree-copyprop:                   Debugging Options.  (line  675)
   38658 * fdump-tree-copyrename:                 Debugging Options.  (line  721)
   38659 * fdump-tree-dce:                        Debugging Options.  (line  683)
   38660 * fdump-tree-dom:                        Debugging Options.  (line  701)
   38661 * fdump-tree-dse:                        Debugging Options.  (line  706)
   38662 * fdump-tree-forwprop:                   Debugging Options.  (line  716)
   38663 * fdump-tree-fre:                        Debugging Options.  (line  671)
   38664 * fdump-tree-gimple:                     Debugging Options.  (line  625)
   38665 * fdump-tree-mudflap:                    Debugging Options.  (line  687)
   38666 * fdump-tree-nrv:                        Debugging Options.  (line  726)
   38667 * fdump-tree-phiopt:                     Debugging Options.  (line  711)
   38668 * fdump-tree-pre:                        Debugging Options.  (line  667)
   38669 * fdump-tree-salias:                     Debugging Options.  (line  650)
   38670 * fdump-tree-sink:                       Debugging Options.  (line  697)
   38671 * fdump-tree-sra:                        Debugging Options.  (line  692)
   38672 * fdump-tree-ssa:                        Debugging Options.  (line  646)
   38673 * fdump-tree-store_copyprop:             Debugging Options.  (line  679)
   38674 * fdump-tree-storeccp:                   Debugging Options.  (line  663)
   38675 * fdump-tree-vcg:                        Debugging Options.  (line  634)
   38676 * fdump-tree-vect:                       Debugging Options.  (line  731)
   38677 * fdump-tree-vrp:                        Debugging Options.  (line  736)
   38678 * fdump-unnumbered:                      Debugging Options.  (line  530)
   38679 * fearly-inlining:                       Optimize Options.   (line  213)
   38680 * feliminate-dwarf2-dups:                Debugging Options.  (line  128)
   38681 * feliminate-unused-debug-symbols:       Debugging Options.  (line   52)
   38682 * feliminate-unused-debug-types:         Debugging Options.  (line  891)
   38683 * fexceptions:                           Code Gen Options.   (line   34)
   38684 * fexec-charset:                         Preprocessor Options.
   38685                                                              (line  498)
   38686 * fexpensive-optimizations:              Optimize Options.   (line  489)
   38687 * fextended-identifiers:                 Preprocessor Options.
   38688                                                              (line  474)
   38689 * ffast-math:                            Optimize Options.   (line 1173)
   38690 * ffinite-math-only:                     Optimize Options.   (line 1246)
   38691 * ffix-and-continue:                     Darwin Options.     (line  106)
   38692 * ffixed:                                Code Gen Options.   (line  225)
   38693 * ffloat-store <1>:                      Optimize Options.   (line 1159)
   38694 * ffloat-store:                          Disappointments.    (line   77)
   38695 * ffor-scope:                            C++ Dialect Options.
   38696                                                              (line   86)
   38697 * fforward-propagate:                    Optimize Options.   (line  150)
   38698 * ffreestanding <1>:                     Function Attributes.
   38699                                                              (line  402)
   38700 * ffreestanding <2>:                     Standards.          (line   84)
   38701 * ffreestanding <3>:                     Warning Options.    (line  199)
   38702 * ffreestanding:                         C Dialect Options.  (line  211)
   38703 * ffriend-injection:                     C++ Dialect Options.
   38704                                                              (line   56)
   38705 * ffunction-sections:                    Optimize Options.   (line 1432)
   38706 * fgcse:                                 Optimize Options.   (line  391)
   38707 * fgcse-after-reload:                    Optimize Options.   (line  427)
   38708 * fgcse-las:                             Optimize Options.   (line  420)
   38709 * fgcse-lm:                              Optimize Options.   (line  402)
   38710 * fgcse-sm:                              Optimize Options.   (line  411)
   38711 * fgnu-runtime:                          Objective-C and Objective-C++ Dialect Options.
   38712                                                              (line   39)
   38713 * fgnu89-inline:                         C Dialect Options.  (line  120)
   38714 * fhosted:                               C Dialect Options.  (line  204)
   38715 * fif-conversion:                        Optimize Options.   (line  461)
   38716 * fif-conversion2:                       Optimize Options.   (line  470)
   38717 * filelist:                              Darwin Options.     (line  199)
   38718 * findirect-data:                        Darwin Options.     (line  106)
   38719 * finhibit-size-directive:               Code Gen Options.   (line  147)
   38720 * finline-functions:                     Optimize Options.   (line  194)
   38721 * finline-functions-called-once:         Optimize Options.   (line  205)
   38722 * finline-limit:                         Optimize Options.   (line  223)
   38723 * finline-small-functions:               Optimize Options.   (line  186)
   38724 * finput-charset:                        Preprocessor Options.
   38725                                                              (line  511)
   38726 * finstrument-functions <1>:             Function Attributes.
   38727                                                              (line  662)
   38728 * finstrument-functions:                 Code Gen Options.   (line  281)
   38729 * finstrument-functions-exclude-file-list: Code Gen Options. (line  318)
   38730 * finstrument-functions-exclude-function-list: Code Gen Options.
   38731                                                              (line  336)
   38732 * fipa-cp:                               Optimize Options.   (line  671)
   38733 * fipa-matrix-reorg:                     Optimize Options.   (line  680)
   38734 * fipa-pta:                              Optimize Options.   (line  668)
   38735 * fipa-pure-const:                       Optimize Options.   (line  645)
   38736 * fipa-reference:                        Optimize Options.   (line  649)
   38737 * fipa-struct-reorg:                     Optimize Options.   (line  653)
   38738 * fivopts:                               Optimize Options.   (line  758)
   38739 * fkeep-inline-functions <1>:            Inline.             (line   51)
   38740 * fkeep-inline-functions:                Optimize Options.   (line  249)
   38741 * fkeep-static-consts:                   Optimize Options.   (line  256)
   38742 * flat_namespace:                        Darwin Options.     (line  199)
   38743 * flax-vector-conversions:               C Dialect Options.  (line  263)
   38744 * fleading-underscore:                   Code Gen Options.   (line  395)
   38745 * fmem-report:                           Debugging Options.  (line  234)
   38746 * fmerge-all-constants:                  Optimize Options.   (line  275)
   38747 * fmerge-constants:                      Optimize Options.   (line  265)
   38748 * fmerge-debug-strings:                  Debugging Options.  (line  203)
   38749 * fmessage-length:                       Language Independent Options.
   38750                                                              (line   15)
   38751 * fmodulo-sched:                         Optimize Options.   (line  285)
   38752 * fmodulo-sched-allow-regmoves:          Optimize Options.   (line  290)
   38753 * fmove-loop-invariants:                 Optimize Options.   (line 1422)
   38754 * fms-extensions <1>:                    C Dialect Options.  (line  229)
   38755 * fms-extensions <2>:                    Unnamed Fields.     (line   37)
   38756 * fms-extensions:                        C++ Dialect Options.
   38757                                                              (line  121)
   38758 * fmudflap:                              Optimize Options.   (line  330)
   38759 * fmudflapir:                            Optimize Options.   (line  330)
   38760 * fmudflapth:                            Optimize Options.   (line  330)
   38761 * fnext-runtime:                         Objective-C and Objective-C++ Dialect Options.
   38762                                                              (line   43)
   38763 * fno-access-control:                    C++ Dialect Options.
   38764                                                              (line   30)
   38765 * fno-asm:                               C Dialect Options.  (line  156)
   38766 * fno-branch-count-reg:                  Optimize Options.   (line  297)
   38767 * fno-builtin <1>:                       Function Attributes.
   38768                                                              (line  402)
   38769 * fno-builtin <2>:                       Warning Options.    (line  199)
   38770 * fno-builtin <3>:                       Other Builtins.     (line   14)
   38771 * fno-builtin:                           C Dialect Options.  (line  170)
   38772 * fno-common <1>:                        Variable Attributes.
   38773                                                              (line   99)
   38774 * fno-common:                            Code Gen Options.   (line  135)
   38775 * fno-default-inline <1>:                C++ Dialect Options.
   38776                                                              (line  262)
   38777 * fno-default-inline <2>:                Optimize Options.   (line  135)
   38778 * fno-default-inline:                    Inline.             (line   71)
   38779 * fno-defer-pop:                         Optimize Options.   (line  142)
   38780 * fno-elide-constructors:                C++ Dialect Options.
   38781                                                              (line   69)
   38782 * fno-enforce-eh-specs:                  C++ Dialect Options.
   38783                                                              (line   75)
   38784 * fno-for-scope:                         C++ Dialect Options.
   38785                                                              (line   86)
   38786 * fno-function-cse:                      Optimize Options.   (line  307)
   38787 * fno-gnu-keywords:                      C++ Dialect Options.
   38788                                                              (line   98)
   38789 * fno-guess-branch-probability:          Optimize Options.   (line  881)
   38790 * fno-ident:                             Code Gen Options.   (line  144)
   38791 * fno-implement-inlines <1>:             C++ Dialect Options.
   38792                                                              (line  115)
   38793 * fno-implement-inlines:                 C++ Interface.      (line   75)
   38794 * fno-implicit-inline-templates:         C++ Dialect Options.
   38795                                                              (line  109)
   38796 * fno-implicit-templates <1>:            C++ Dialect Options.
   38797                                                              (line  103)
   38798 * fno-implicit-templates:                Template Instantiation.
   38799                                                              (line   87)
   38800 * fno-inline:                            Optimize Options.   (line  180)
   38801 * fno-jump-tables:                       Code Gen Options.   (line  217)
   38802 * fno-math-errno:                        Optimize Options.   (line 1187)
   38803 * fno-merge-debug-strings:               Debugging Options.  (line  203)
   38804 * fno-nil-receivers:                     Objective-C and Objective-C++ Dialect Options.
   38805                                                              (line   49)
   38806 * fno-nonansi-builtins:                  C++ Dialect Options.
   38807                                                              (line  126)
   38808 * fno-operator-names:                    C++ Dialect Options.
   38809                                                              (line  131)
   38810 * fno-optional-diags:                    C++ Dialect Options.
   38811                                                              (line  135)
   38812 * fno-peephole:                          Optimize Options.   (line  872)
   38813 * fno-peephole2:                         Optimize Options.   (line  872)
   38814 * fno-rtti:                              C++ Dialect Options.
   38815                                                              (line  150)
   38816 * fno-sched-interblock:                  Optimize Options.   (line  533)
   38817 * fno-sched-spec:                        Optimize Options.   (line  538)
   38818 * fno-show-column:                       Preprocessor Options.
   38819                                                              (line  536)
   38820 * fno-signed-bitfields:                  C Dialect Options.  (line  296)
   38821 * fno-signed-zeros:                      Optimize Options.   (line 1258)
   38822 * fno-stack-limit:                       Code Gen Options.   (line  361)
   38823 * fno-threadsafe-statics:                C++ Dialect Options.
   38824                                                              (line  172)
   38825 * fno-toplevel-reorder:                  Optimize Options.   (line 1093)
   38826 * fno-trapping-math:                     Optimize Options.   (line 1268)
   38827 * fno-unsigned-bitfields:                C Dialect Options.  (line  296)
   38828 * fno-use-cxa-get-exception-ptr:         C++ Dialect Options.
   38829                                                              (line  185)
   38830 * fno-weak:                              C++ Dialect Options.
   38831                                                              (line  247)
   38832 * fno-working-directory:                 Preprocessor Options.
   38833                                                              (line  521)
   38834 * fno-zero-initialized-in-bss:           Optimize Options.   (line  318)
   38835 * fnon-call-exceptions:                  Code Gen Options.   (line   48)
   38836 * fobjc-call-cxx-cdtors:                 Objective-C and Objective-C++ Dialect Options.
   38837                                                              (line   56)
   38838 * fobjc-direct-dispatch:                 Objective-C and Objective-C++ Dialect Options.
   38839                                                              (line   81)
   38840 * fobjc-exceptions:                      Objective-C and Objective-C++ Dialect Options.
   38841                                                              (line   85)
   38842 * fobjc-gc:                              Objective-C and Objective-C++ Dialect Options.
   38843                                                              (line  170)
   38844 * fomit-frame-pointer:                   Optimize Options.   (line  159)
   38845 * fopenmp:                               C Dialect Options.  (line  221)
   38846 * foptimize-register-move:               Optimize Options.   (line  496)
   38847 * foptimize-sibling-calls:               Optimize Options.   (line  175)
   38848 * force_cpusubtype_ALL:                  Darwin Options.     (line  138)
   38849 * force_flat_namespace:                  Darwin Options.     (line  199)
   38850 * fpack-struct:                          Code Gen Options.   (line  268)
   38851 * fpcc-struct-return <1>:                Code Gen Options.   (line   70)
   38852 * fpcc-struct-return:                    Incompatibilities.  (line  170)
   38853 * fpch-deps:                             Preprocessor Options.
   38854                                                              (line  284)
   38855 * fpch-preprocess:                       Preprocessor Options.
   38856                                                              (line  292)
   38857 * fpeel-loops:                           Optimize Options.   (line 1414)
   38858 * fpermissive:                           C++ Dialect Options.
   38859                                                              (line  140)
   38860 * fpic:                                  Code Gen Options.   (line  173)
   38861 * fPIC:                                  Code Gen Options.   (line  194)
   38862 * fpie:                                  Code Gen Options.   (line  207)
   38863 * fPIE:                                  Code Gen Options.   (line  207)
   38864 * fpost-ipa-mem-report:                  Debugging Options.  (line  240)
   38865 * fpre-ipa-mem-report:                   Debugging Options.  (line  238)
   38866 * fpredictive-commoning:                 Optimize Options.   (line  854)
   38867 * fprefetch-loop-arrays:                 Optimize Options.   (line  861)
   38868 * fpreprocessed:                         Preprocessor Options.
   38869                                                              (line  479)
   38870 * fprofile-arcs <1>:                     Other Builtins.     (line  240)
   38871 * fprofile-arcs:                         Debugging Options.  (line  244)
   38872 * fprofile-generate:                     Optimize Options.   (line 1134)
   38873 * fprofile-use:                          Optimize Options.   (line 1143)
   38874 * fprofile-values:                       Optimize Options.   (line 1362)
   38875 * frandom-string:                        Debugging Options.  (line  769)
   38876 * freciprocal-math:                      Optimize Options.   (line 1237)
   38877 * frecord-gcc-switches:                  Code Gen Options.   (line  163)
   38878 * freg-struct-return:                    Code Gen Options.   (line   88)
   38879 * fregmove:                              Optimize Options.   (line  496)
   38880 * frename-registers:                     Optimize Options.   (line 1381)
   38881 * freorder-blocks:                       Optimize Options.   (line  898)
   38882 * freorder-blocks-and-partition:         Optimize Options.   (line  904)
   38883 * freorder-functions:                    Optimize Options.   (line  915)
   38884 * freplace-objc-classes:                 Objective-C and Objective-C++ Dialect Options.
   38885                                                              (line  174)
   38886 * frepo <1>:                             C++ Dialect Options.
   38887                                                              (line  145)
   38888 * frepo:                                 Template Instantiation.
   38889                                                              (line   62)
   38890 * frerun-cse-after-loop:                 Optimize Options.   (line  385)
   38891 * freschedule-modulo-scheduled-loops:    Optimize Options.   (line  602)
   38892 * frounding-math:                        Optimize Options.   (line 1283)
   38893 * frtl-abstract-sequences:               Optimize Options.   (line 1303)
   38894 * fsched-spec-load:                      Optimize Options.   (line  543)
   38895 * fsched-spec-load-dangerous:            Optimize Options.   (line  548)
   38896 * fsched-stalled-insns:                  Optimize Options.   (line  554)
   38897 * fsched-stalled-insns-dep:              Optimize Options.   (line  564)
   38898 * fsched-verbose:                        Debugging Options.  (line  779)
   38899 * fsched2-use-superblocks:               Optimize Options.   (line  574)
   38900 * fsched2-use-traces:                    Optimize Options.   (line  585)
   38901 * fschedule-insns:                       Optimize Options.   (line  514)
   38902 * fschedule-insns2:                      Optimize Options.   (line  524)
   38903 * fsection-anchors:                      Optimize Options.   (line 1477)
   38904 * fsee:                                  Optimize Options.   (line  597)
   38905 * fshort-double:                         Code Gen Options.   (line  117)
   38906 * fshort-enums <1>:                      Non-bugs.           (line   42)
   38907 * fshort-enums <2>:                      Type Attributes.    (line  113)
   38908 * fshort-enums <3>:                      Code Gen Options.   (line  106)
   38909 * fshort-enums:                          Structures unions enumerations and bit-fields implementation.
   38910                                                              (line   43)
   38911 * fshort-wchar:                          Code Gen Options.   (line  125)
   38912 * fsignaling-nans:                       Optimize Options.   (line 1310)
   38913 * fsigned-bitfields <1>:                 C Dialect Options.  (line  296)
   38914 * fsigned-bitfields:                     Non-bugs.           (line   57)
   38915 * fsigned-char <1>:                      Characters implementation.
   38916                                                              (line   31)
   38917 * fsigned-char:                          C Dialect Options.  (line  286)
   38918 * fsingle-precision-constant:            Optimize Options.   (line 1325)
   38919 * fsplit-ivs-in-unroller:                Optimize Options.   (line  835)
   38920 * fsplit-wide-types:                     Optimize Options.   (line  360)
   38921 * fstack-check:                          Code Gen Options.   (line  346)
   38922 * fstack-limit-register:                 Code Gen Options.   (line  361)
   38923 * fstack-limit-symbol:                   Code Gen Options.   (line  361)
   38924 * fstack-protector:                      Optimize Options.   (line 1465)
   38925 * fstack-protector-all:                  Optimize Options.   (line 1474)
   38926 * fstats:                                C++ Dialect Options.
   38927                                                              (line  160)
   38928 * fstrict-aliasing:                      Optimize Options.   (line  928)
   38929 * fstrict-overflow:                      Optimize Options.   (line  964)
   38930 * fsyntax-only:                          Warning Options.    (line   14)
   38931 * ftabstop:                              Preprocessor Options.
   38932                                                              (line  492)
   38933 * ftemplate-depth:                       C++ Dialect Options.
   38934                                                              (line  165)
   38935 * ftest-coverage:                        Debugging Options.  (line  300)
   38936 * fthread-jumps:                         Optimize Options.   (line  351)
   38937 * ftime-report:                          Debugging Options.  (line  230)
   38938 * ftls-model:                            Code Gen Options.   (line  406)
   38939 * ftracer:                               Optimize Options.   (line 1391)
   38940 * ftrapv:                                Code Gen Options.   (line   22)
   38941 * ftree-ccp:                             Optimize Options.   (line  694)
   38942 * ftree-ch:                              Optimize Options.   (line  723)
   38943 * ftree-copy-prop:                       Optimize Options.   (line  636)
   38944 * ftree-copyrename:                      Optimize Options.   (line  778)
   38945 * ftree-dce:                             Optimize Options.   (line  705)
   38946 * ftree-dominator-opts:                  Optimize Options.   (line  709)
   38947 * ftree-dse:                             Optimize Options.   (line  716)
   38948 * ftree-fre:                             Optimize Options.   (line  629)
   38949 * ftree-loop-im:                         Optimize Options.   (line  743)
   38950 * ftree-loop-ivcanon:                    Optimize Options.   (line  752)
   38951 * ftree-loop-linear:                     Optimize Options.   (line  734)
   38952 * ftree-loop-optimize:                   Optimize Options.   (line  730)
   38953 * ftree-parallelize-loops:               Optimize Options.   (line  763)
   38954 * ftree-pre:                             Optimize Options.   (line  625)
   38955 * ftree-reassoc:                         Optimize Options.   (line  621)
   38956 * ftree-salias:                          Optimize Options.   (line  641)
   38957 * ftree-sink:                            Optimize Options.   (line  690)
   38958 * ftree-sra:                             Optimize Options.   (line  772)
   38959 * ftree-store-ccp:                       Optimize Options.   (line  699)
   38960 * ftree-ter:                             Optimize Options.   (line  785)
   38961 * ftree-vect-loop-version:               Optimize Options.   (line  797)
   38962 * ftree-vectorize:                       Optimize Options.   (line  793)
   38963 * ftree-vectorizer-verbose:              Debugging Options.  (line  744)
   38964 * ftree-vrp:                             Optimize Options.   (line  809)
   38965 * funit-at-a-time:                       Optimize Options.   (line 1062)
   38966 * funroll-all-loops:                     Optimize Options.   (line  829)
   38967 * funroll-loops:                         Optimize Options.   (line  823)
   38968 * funsafe-loop-optimizations:            Optimize Options.   (line  432)
   38969 * funsafe-math-optimizations:            Optimize Options.   (line 1205)
   38970 * funsigned-bitfields <1>:               Non-bugs.           (line   57)
   38971 * funsigned-bitfields <2>:               Structures unions enumerations and bit-fields implementation.
   38972                                                              (line   17)
   38973 * funsigned-bitfields:                   C Dialect Options.  (line  296)
   38974 * funsigned-char <1>:                    Characters implementation.
   38975                                                              (line   31)
   38976 * funsigned-char:                        C Dialect Options.  (line  268)
   38977 * funswitch-loops:                       Optimize Options.   (line 1426)
   38978 * funwind-tables:                        Code Gen Options.   (line   57)
   38979 * fuse-cxa-atexit:                       C++ Dialect Options.
   38980                                                              (line  178)
   38981 * fvar-tracking:                         Debugging Options.  (line  822)
   38982 * fvariable-expansion-in-unroller:       Optimize Options.   (line  849)
   38983 * fvect-cost-model:                      Optimize Options.   (line  806)
   38984 * fverbose-asm:                          Code Gen Options.   (line  154)
   38985 * fvisibility:                           Code Gen Options.   (line  414)
   38986 * fvisibility-inlines-hidden:            C++ Dialect Options.
   38987                                                              (line  190)
   38988 * fvisibility-ms-compat:                 C++ Dialect Options.
   38989                                                              (line  218)
   38990 * fvpt:                                  Optimize Options.   (line 1372)
   38991 * fweb:                                  Optimize Options.   (line 1101)
   38992 * fwhole-program:                        Optimize Options.   (line 1112)
   38993 * fwide-exec-charset:                    Preprocessor Options.
   38994                                                              (line  503)
   38995 * fworking-directory:                    Preprocessor Options.
   38996                                                              (line  521)
   38997 * fwrapv:                                Code Gen Options.   (line   26)
   38998 * fzero-link:                            Objective-C and Objective-C++ Dialect Options.
   38999                                                              (line  184)
   39000 * G <1>:                                 M32R/D Options.     (line   57)
   39001 * G <2>:                                 RS/6000 and PowerPC Options.
   39002                                                              (line  629)
   39003 * G <3>:                                 System V Options.   (line   10)
   39004 * G:                                     MIPS Options.       (line  295)
   39005 * g:                                     Debugging Options.  (line   10)
   39006 * gcoff:                                 Debugging Options.  (line   70)
   39007 * gdwarf-2:                              Debugging Options.  (line   88)
   39008 * gen-decls:                             Objective-C and Objective-C++ Dialect Options.
   39009                                                              (line  194)
   39010 * gfull:                                 Darwin Options.     (line   71)
   39011 * ggdb:                                  Debugging Options.  (line   38)
   39012 * gnu-ld:                                HPPA Options.       (line  113)
   39013 * gstabs:                                Debugging Options.  (line   44)
   39014 * gstabs+:                               Debugging Options.  (line   64)
   39015 * gused:                                 Darwin Options.     (line   66)
   39016 * gvms:                                  Debugging Options.  (line   95)
   39017 * gxcoff:                                Debugging Options.  (line   75)
   39018 * gxcoff+:                               Debugging Options.  (line   80)
   39019 * H:                                     Preprocessor Options.
   39020                                                              (line  647)
   39021 * headerpad_max_install_names:           Darwin Options.     (line  199)
   39022 * help <1>:                              Overall Options.    (line  226)
   39023 * help:                                  Preprocessor Options.
   39024                                                              (line  639)
   39025 * hp-ld:                                 HPPA Options.       (line  125)
   39026 * I <1>:                                 Directory Options.  (line   10)
   39027 * I:                                     Preprocessor Options.
   39028                                                              (line   64)
   39029 * I- <1>:                                Preprocessor Options.
   39030                                                              (line  365)
   39031 * I-:                                    Directory Options.  (line  107)
   39032 * idirafter:                             Preprocessor Options.
   39033                                                              (line  407)
   39034 * iframework:                            Darwin Options.     (line   59)
   39035 * imacros:                               Preprocessor Options.
   39036                                                              (line  398)
   39037 * image_base:                            Darwin Options.     (line  199)
   39038 * imultilib:                             Preprocessor Options.
   39039                                                              (line  430)
   39040 * include:                               Preprocessor Options.
   39041                                                              (line  387)
   39042 * init:                                  Darwin Options.     (line  199)
   39043 * install_name:                          Darwin Options.     (line  199)
   39044 * iprefix:                               Preprocessor Options.
   39045                                                              (line  414)
   39046 * iquote <1>:                            Preprocessor Options.
   39047                                                              (line  442)
   39048 * iquote:                                Directory Options.  (line   31)
   39049 * isysroot:                              Preprocessor Options.
   39050                                                              (line  426)
   39051 * isystem:                               Preprocessor Options.
   39052                                                              (line  434)
   39053 * iwithprefix:                           Preprocessor Options.
   39054                                                              (line  420)
   39055 * iwithprefixbefore:                     Preprocessor Options.
   39056                                                              (line  420)
   39057 * keep_private_externs:                  Darwin Options.     (line  199)
   39058 * l:                                     Link Options.       (line   26)
   39059 * L:                                     Directory Options.  (line   37)
   39060 * lobjc:                                 Link Options.       (line   53)
   39061 * M:                                     Preprocessor Options.
   39062                                                              (line  175)
   39063 * m1:                                    SH Options.         (line    9)
   39064 * m10:                                   PDP-11 Options.     (line   29)
   39065 * m128bit-long-double:                   i386 and x86-64 Options.
   39066                                                              (line  263)
   39067 * m16-bit:                               CRIS Options.       (line   69)
   39068 * m2:                                    SH Options.         (line   12)
   39069 * m210:                                  MCore Options.      (line   43)
   39070 * m3:                                    SH Options.         (line   18)
   39071 * m31:                                   S/390 and zSeries Options.
   39072                                                              (line   79)
   39073 * m32 <1>:                               RS/6000 and PowerPC Options.
   39074                                                              (line  244)
   39075 * m32 <2>:                               SPARC Options.      (line  191)
   39076 * m32:                                   i386 and x86-64 Options.
   39077                                                              (line  592)
   39078 * m32-bit:                               CRIS Options.       (line   69)
   39079 * m32r:                                  M32R/D Options.     (line   15)
   39080 * m32r2:                                 M32R/D Options.     (line    9)
   39081 * m32rx:                                 M32R/D Options.     (line   12)
   39082 * m340:                                  MCore Options.      (line   43)
   39083 * m3dnow:                                i386 and x86-64 Options.
   39084                                                              (line  440)
   39085 * m3e:                                   SH Options.         (line   21)
   39086 * m4:                                    SH Options.         (line   35)
   39087 * m4-nofpu:                              SH Options.         (line   24)
   39088 * m4-single:                             SH Options.         (line   31)
   39089 * m4-single-only:                        SH Options.         (line   27)
   39090 * m40:                                   PDP-11 Options.     (line   23)
   39091 * m45:                                   PDP-11 Options.     (line   26)
   39092 * m4a:                                   SH Options.         (line   50)
   39093 * m4a-nofpu:                             SH Options.         (line   38)
   39094 * m4a-single:                            SH Options.         (line   46)
   39095 * m4a-single-only:                       SH Options.         (line   42)
   39096 * m4al:                                  SH Options.         (line   53)
   39097 * m4byte-functions:                      MCore Options.      (line   27)
   39098 * m5200:                                 M680x0 Options.     (line  143)
   39099 * m5206e:                                M680x0 Options.     (line  152)
   39100 * m528x:                                 M680x0 Options.     (line  156)
   39101 * m5307:                                 M680x0 Options.     (line  160)
   39102 * m5407:                                 M680x0 Options.     (line  164)
   39103 * m64 <1>:                               i386 and x86-64 Options.
   39104                                                              (line  592)
   39105 * m64 <2>:                               RS/6000 and PowerPC Options.
   39106                                                              (line  244)
   39107 * m64 <3>:                               S/390 and zSeries Options.
   39108                                                              (line   79)
   39109 * m64:                                   SPARC Options.      (line  191)
   39110 * m68000:                                M680x0 Options.     (line   91)
   39111 * m68010:                                M680x0 Options.     (line   99)
   39112 * m68020:                                M680x0 Options.     (line  105)
   39113 * m68020-40:                             M680x0 Options.     (line  174)
   39114 * m68020-60:                             M680x0 Options.     (line  183)
   39115 * m68030:                                M680x0 Options.     (line  110)
   39116 * m68040:                                M680x0 Options.     (line  115)
   39117 * m68060:                                M680x0 Options.     (line  124)
   39118 * m6811:                                 M68hc1x Options.    (line   13)
   39119 * m6812:                                 M68hc1x Options.    (line   18)
   39120 * m68881:                                M680x0 Options.     (line  193)
   39121 * m68hc11:                               M68hc1x Options.    (line   13)
   39122 * m68hc12:                               M68hc1x Options.    (line   18)
   39123 * m68hcs12:                              M68hc1x Options.    (line   23)
   39124 * m68S12:                                M68hc1x Options.    (line   23)
   39125 * m8-bit:                                CRIS Options.       (line   69)
   39126 * m96bit-long-double:                    i386 and x86-64 Options.
   39127                                                              (line  263)
   39128 * mabi <1>:                              ARM Options.        (line   10)
   39129 * mabi:                                  RS/6000 and PowerPC Options.
   39130                                                              (line  511)
   39131 * mabi-mmixware:                         MMIX Options.       (line   20)
   39132 * mabi=32:                               MIPS Options.       (line  120)
   39133 * mabi=64:                               MIPS Options.       (line  120)
   39134 * mabi=eabi:                             MIPS Options.       (line  120)
   39135 * mabi=gnu:                              MMIX Options.       (line   20)
   39136 * mabi=ibmlongdouble:                    RS/6000 and PowerPC Options.
   39137                                                              (line  524)
   39138 * mabi=ieeelongdouble:                   RS/6000 and PowerPC Options.
   39139                                                              (line  528)
   39140 * mabi=n32:                              MIPS Options.       (line  120)
   39141 * mabi=no-spe:                           RS/6000 and PowerPC Options.
   39142                                                              (line  521)
   39143 * mabi=o64:                              MIPS Options.       (line  120)
   39144 * mabi=spe:                              RS/6000 and PowerPC Options.
   39145                                                              (line  516)
   39146 * mabicalls:                             MIPS Options.       (line  144)
   39147 * mabort-on-noreturn:                    ARM Options.        (line  147)
   39148 * mabshi:                                PDP-11 Options.     (line   55)
   39149 * mac0:                                  PDP-11 Options.     (line   16)
   39150 * macc-4:                                FRV Options.        (line  113)
   39151 * macc-8:                                FRV Options.        (line  116)
   39152 * maccumulate-outgoing-args:             i386 and x86-64 Options.
   39153                                                              (line  522)
   39154 * madjust-unroll:                        SH Options.         (line  186)
   39155 * mads:                                  RS/6000 and PowerPC Options.
   39156                                                              (line  554)
   39157 * maix-struct-return:                    RS/6000 and PowerPC Options.
   39158                                                              (line  504)
   39159 * maix32:                                RS/6000 and PowerPC Options.
   39160                                                              (line  282)
   39161 * maix64:                                RS/6000 and PowerPC Options.
   39162                                                              (line  282)
   39163 * malign-300:                            H8/300 Options.     (line   31)
   39164 * malign-double:                         i386 and x86-64 Options.
   39165                                                              (line  247)
   39166 * malign-int:                            M680x0 Options.     (line  263)
   39167 * malign-labels:                         FRV Options.        (line  104)
   39168 * malign-loops:                          M32R/D Options.     (line   73)
   39169 * malign-natural:                        RS/6000 and PowerPC Options.
   39170                                                              (line  321)
   39171 * malign-power:                          RS/6000 and PowerPC Options.
   39172                                                              (line  321)
   39173 * malloc-cc:                             FRV Options.        (line   25)
   39174 * malpha-as:                             DEC Alpha Options.  (line  159)
   39175 * maltivec:                              RS/6000 and PowerPC Options.
   39176                                                              (line  181)
   39177 * mam33:                                 MN10300 Options.    (line   17)
   39178 * mandroid:                              ARM Options.        (line  259)
   39179 * maout:                                 CRIS Options.       (line   92)
   39180 * mapcs:                                 ARM Options.        (line   22)
   39181 * mapcs-frame:                           ARM Options.        (line   14)
   39182 * mapp-regs <1>:                         SPARC Options.      (line   10)
   39183 * mapp-regs:                             V850 Options.       (line   57)
   39184 * march <1>:                             CRIS Options.       (line   10)
   39185 * march <2>:                             i386 and x86-64 Options.
   39186                                                              (line  156)
   39187 * march <3>:                             M680x0 Options.     (line   12)
   39188 * march <4>:                             MT Options.         (line    9)
   39189 * march <5>:                             S/390 and zSeries Options.
   39190                                                              (line  108)
   39191 * march <6>:                             HPPA Options.       (line    9)
   39192 * march <7>:                             MIPS Options.       (line   14)
   39193 * march <8>:                             ARM Options.        (line  110)
   39194 * march:                                 i386 and x86-64 Options.
   39195                                                              (line  148)
   39196 * masm=DIALECT:                          i386 and x86-64 Options.
   39197                                                              (line  203)
   39198 * mauto-incdec:                          M68hc1x Options.    (line   26)
   39199 * mauto-pic:                             IA-64 Options.      (line   50)
   39200 * mb:                                    SH Options.         (line   58)
   39201 * mbacc:                                 MT Options.         (line   16)
   39202 * mbackchain:                            S/390 and zSeries Options.
   39203                                                              (line   26)
   39204 * mbase-addresses:                       MMIX Options.       (line   54)
   39205 * mbcopy:                                PDP-11 Options.     (line   36)
   39206 * mbig:                                  RS/6000 and PowerPC Options.
   39207                                                              (line  436)
   39208 * mbig-endian <1>:                       MCore Options.      (line   39)
   39209 * mbig-endian <2>:                       ARM Options.        (line   72)
   39210 * mbig-endian <3>:                       RS/6000 and PowerPC Options.
   39211                                                              (line  436)
   39212 * mbig-endian:                           IA-64 Options.      (line    9)
   39213 * mbig-switch <1>:                       HPPA Options.       (line   23)
   39214 * mbig-switch:                           V850 Options.       (line   52)
   39215 * mbigtable:                             SH Options.         (line   74)
   39216 * mbit-align:                            RS/6000 and PowerPC Options.
   39217                                                              (line  390)
   39218 * mbitfield:                             M680x0 Options.     (line  231)
   39219 * mbranch-cheap:                         PDP-11 Options.     (line   65)
   39220 * mbranch-cost:                          MIPS Options.       (line  519)
   39221 * mbranch-cost=NUMBER:                   M32R/D Options.     (line   82)
   39222 * mbranch-expensive:                     PDP-11 Options.     (line   61)
   39223 * mbranch-hints:                         SPU Options.        (line   27)
   39224 * mbranch-likely:                        MIPS Options.       (line  526)
   39225 * mbranch-predict:                       MMIX Options.       (line   49)
   39226 * mbss-plt:                              RS/6000 and PowerPC Options.
   39227                                                              (line  198)
   39228 * mbuild-constants:                      DEC Alpha Options.  (line  142)
   39229 * mbwx:                                  DEC Alpha Options.  (line  171)
   39230 * mc68000:                               M680x0 Options.     (line   91)
   39231 * mc68020:                               M680x0 Options.     (line  105)
   39232 * mcall-gnu:                             RS/6000 and PowerPC Options.
   39233                                                              (line  496)
   39234 * mcall-linux:                           RS/6000 and PowerPC Options.
   39235                                                              (line  492)
   39236 * mcall-netbsd:                          RS/6000 and PowerPC Options.
   39237                                                              (line  500)
   39238 * mcall-prologues:                       AVR Options.        (line   43)
   39239 * mcall-solaris:                         RS/6000 and PowerPC Options.
   39240                                                              (line  488)
   39241 * mcall-sysv:                            RS/6000 and PowerPC Options.
   39242                                                              (line  475)
   39243 * mcall-sysv-eabi:                       RS/6000 and PowerPC Options.
   39244                                                              (line  482)
   39245 * mcall-sysv-noeabi:                     RS/6000 and PowerPC Options.
   39246                                                              (line  485)
   39247 * mcallee-super-interworking:            ARM Options.        (line  239)
   39248 * mcaller-super-interworking:            ARM Options.        (line  245)
   39249 * mcallgraph-data:                       MCore Options.      (line   31)
   39250 * mcc-init:                              CRIS Options.       (line   46)
   39251 * mcfv4e:                                M680x0 Options.     (line  168)
   39252 * mcheck-zero-division:                  MIPS Options.       (line  406)
   39253 * mcirrus-fix-invalid-insns:             ARM Options.        (line  190)
   39254 * mcix:                                  DEC Alpha Options.  (line  171)
   39255 * mcld:                                  i386 and x86-64 Options.
   39256                                                              (line  458)
   39257 * mcmodel=embmedany:                     SPARC Options.      (line  213)
   39258 * mcmodel=kernel:                        i386 and x86-64 Options.
   39259                                                              (line  614)
   39260 * mcmodel=large:                         i386 and x86-64 Options.
   39261                                                              (line  626)
   39262 * mcmodel=medany:                        SPARC Options.      (line  207)
   39263 * mcmodel=medium:                        i386 and x86-64 Options.
   39264                                                              (line  619)
   39265 * mcmodel=medlow:                        SPARC Options.      (line  196)
   39266 * mcmodel=medmid:                        SPARC Options.      (line  201)
   39267 * mcmodel=small:                         i386 and x86-64 Options.
   39268                                                              (line  608)
   39269 * mcmpb:                                 RS/6000 and PowerPC Options.
   39270                                                              (line   31)
   39271 * mcode-readable:                        MIPS Options.       (line  366)
   39272 * mcond-exec:                            FRV Options.        (line  152)
   39273 * mcond-move:                            FRV Options.        (line  128)
   39274 * mconst-align:                          CRIS Options.       (line   60)
   39275 * mconst16:                              Xtensa Options.     (line   10)
   39276 * mconstant-gp:                          IA-64 Options.      (line   46)
   39277 * mcpu <1>:                              RS/6000 and PowerPC Options.
   39278                                                              (line  114)
   39279 * mcpu <2>:                              SPARC Options.      (line   96)
   39280 * mcpu <3>:                              ARM Options.        (line   84)
   39281 * mcpu <4>:                              M680x0 Options.     (line   28)
   39282 * mcpu <5>:                              FRV Options.        (line  212)
   39283 * mcpu <6>:                              ARC Options.        (line   23)
   39284 * mcpu <7>:                              CRIS Options.       (line   10)
   39285 * mcpu <8>:                              i386 and x86-64 Options.
   39286                                                              (line  153)
   39287 * mcpu:                                  DEC Alpha Options.  (line  223)
   39288 * mcpu32:                                M680x0 Options.     (line  134)
   39289 * mcpu= <1>:                             M32C Options.       (line    7)
   39290 * mcpu=:                                 Blackfin Options.   (line    7)
   39291 * mcsync-anomaly:                        Blackfin Options.   (line   55)
   39292 * mcx16:                                 i386 and x86-64 Options.
   39293                                                              (line  472)
   39294 * MD:                                    Preprocessor Options.
   39295                                                              (line  264)
   39296 * mdalign:                               SH Options.         (line   64)
   39297 * mdata:                                 ARC Options.        (line   30)
   39298 * mdata-align:                           CRIS Options.       (line   60)
   39299 * mdebug <1>:                            M32R/D Options.     (line   69)
   39300 * mdebug:                                S/390 and zSeries Options.
   39301                                                              (line  104)
   39302 * mdec-asm:                              PDP-11 Options.     (line   78)
   39303 * mdisable-callt:                        V850 Options.       (line   80)
   39304 * mdisable-fpregs:                       HPPA Options.       (line   33)
   39305 * mdisable-indexing:                     HPPA Options.       (line   40)
   39306 * mdiv <1>:                              MCore Options.      (line   15)
   39307 * mdiv:                                  M680x0 Options.     (line  205)
   39308 * mdiv=STRATEGY:                         SH Options.         (line  138)
   39309 * mdivide-breaks:                        MIPS Options.       (line  412)
   39310 * mdivide-traps:                         MIPS Options.       (line  412)
   39311 * mdivsi3_libfunc=NAME:                  SH Options.         (line  179)
   39312 * mdlmzb:                                RS/6000 and PowerPC Options.
   39313                                                              (line  384)
   39314 * mdmx:                                  MIPS Options.       (line  259)
   39315 * mdouble:                               FRV Options.        (line   38)
   39316 * mdouble-float:                         MIPS Options.       (line  217)
   39317 * mdsp:                                  MIPS Options.       (line  236)
   39318 * mdspr2:                                MIPS Options.       (line  242)
   39319 * mdwarf2-asm:                           IA-64 Options.      (line   79)
   39320 * mdword:                                FRV Options.        (line   32)
   39321 * mdynamic-no-pic:                       RS/6000 and PowerPC Options.
   39322                                                              (line  441)
   39323 * meabi:                                 RS/6000 and PowerPC Options.
   39324                                                              (line  577)
   39325 * mearly-stop-bits:                      IA-64 Options.      (line   85)
   39326 * meb:                                   Score Options.      (line    9)
   39327 * mel:                                   Score Options.      (line   12)
   39328 * melf <1>:                              MMIX Options.       (line   44)
   39329 * melf:                                  CRIS Options.       (line   95)
   39330 * melinux:                               CRIS Options.       (line   99)
   39331 * melinux-stacksize:                     CRIS Options.       (line   25)
   39332 * memb:                                  RS/6000 and PowerPC Options.
   39333                                                              (line  572)
   39334 * membedded-data:                        MIPS Options.       (line  353)
   39335 * memregs=:                              M32C Options.       (line   21)
   39336 * mep:                                   V850 Options.       (line   16)
   39337 * mepsilon:                              MMIX Options.       (line   15)
   39338 * merror-reloc:                          SPU Options.        (line   10)
   39339 * mesa:                                  S/390 and zSeries Options.
   39340                                                              (line   87)
   39341 * metrax100:                             CRIS Options.       (line   31)
   39342 * metrax4:                               CRIS Options.       (line   31)
   39343 * mexplicit-relocs <1>:                  DEC Alpha Options.  (line  184)
   39344 * mexplicit-relocs:                      MIPS Options.       (line  397)
   39345 * mextern-sdata:                         MIPS Options.       (line  315)
   39346 * MF:                                    Preprocessor Options.
   39347                                                              (line  210)
   39348 * mfast-fp:                              Blackfin Options.   (line  128)
   39349 * mfast-indirect-calls:                  HPPA Options.       (line   52)
   39350 * mfaster-structs:                       SPARC Options.      (line   71)
   39351 * mfdpic:                                FRV Options.        (line   56)
   39352 * mfix:                                  DEC Alpha Options.  (line  171)
   39353 * mfix-and-continue:                     Darwin Options.     (line  106)
   39354 * mfix-r4000:                            MIPS Options.       (line  462)
   39355 * mfix-r4400:                            MIPS Options.       (line  476)
   39356 * mfix-sb1:                              MIPS Options.       (line  504)
   39357 * mfix-vr4120:                           MIPS Options.       (line  483)
   39358 * mfix-vr4130:                           MIPS Options.       (line  497)
   39359 * mfixed-cc:                             FRV Options.        (line   28)
   39360 * mfixed-range <1>:                      IA-64 Options.      (line   90)
   39361 * mfixed-range <2>:                      HPPA Options.       (line   59)
   39362 * mfixed-range:                          SPU Options.        (line   47)
   39363 * mflip-mips16:                          MIPS Options.       (line  100)
   39364 * mfloat-abi:                            ARM Options.        (line   59)
   39365 * mfloat-gprs:                           RS/6000 and PowerPC Options.
   39366                                                              (line  227)
   39367 * mfloat-ieee:                           DEC Alpha Options.  (line  179)
   39368 * mfloat-vax:                            DEC Alpha Options.  (line  179)
   39369 * mfloat32:                              PDP-11 Options.     (line   52)
   39370 * mfloat64:                              PDP-11 Options.     (line   48)
   39371 * mflush-func:                           MIPS Options.       (line  510)
   39372 * mflush-func=NAME:                      M32R/D Options.     (line   94)
   39373 * mflush-trap=NUMBER:                    M32R/D Options.     (line   87)
   39374 * mfmovd:                                SH Options.         (line   78)
   39375 * mfp:                                   ARM Options.        (line  122)
   39376 * mfp-exceptions:                        MIPS Options.       (line  537)
   39377 * mfp-reg:                               DEC Alpha Options.  (line   25)
   39378 * mfp-rounding-mode:                     DEC Alpha Options.  (line   85)
   39379 * mfp-trap-mode:                         DEC Alpha Options.  (line   63)
   39380 * mfp32:                                 MIPS Options.       (line  200)
   39381 * mfp64:                                 MIPS Options.       (line  203)
   39382 * mfpe:                                  ARM Options.        (line  122)
   39383 * mfpr-32:                               FRV Options.        (line   13)
   39384 * mfpr-64:                               FRV Options.        (line   16)
   39385 * mfprnd:                                RS/6000 and PowerPC Options.
   39386                                                              (line   31)
   39387 * mfpu <1>:                              PDP-11 Options.     (line    9)
   39388 * mfpu <2>:                              ARM Options.        (line  122)
   39389 * mfpu:                                  SPARC Options.      (line   20)
   39390 * mfull-toc:                             RS/6000 and PowerPC Options.
   39391                                                              (line  255)
   39392 * mfused-madd <1>:                       MIPS Options.       (line  447)
   39393 * mfused-madd <2>:                       S/390 and zSeries Options.
   39394                                                              (line  128)
   39395 * mfused-madd <3>:                       RS/6000 and PowerPC Options.
   39396                                                              (line  371)
   39397 * mfused-madd <4>:                       i386 and x86-64 Options.
   39398                                                              (line  581)
   39399 * mfused-madd:                           Xtensa Options.     (line   19)
   39400 * MG:                                    Preprocessor Options.
   39401                                                              (line  219)
   39402 * mg:                                    VAX Options.        (line   17)
   39403 * mgas <1>:                              DEC Alpha Options.  (line  159)
   39404 * mgas:                                  HPPA Options.       (line   75)
   39405 * mgettrcost=NUMBER:                     SH Options.         (line  201)
   39406 * mglibc:                                GNU/Linux Options.  (line    9)
   39407 * mgnu:                                  VAX Options.        (line   13)
   39408 * mgnu-as:                               IA-64 Options.      (line   18)
   39409 * mgnu-ld:                               IA-64 Options.      (line   23)
   39410 * mgotplt:                               CRIS Options.       (line   86)
   39411 * mgp32:                                 MIPS Options.       (line  194)
   39412 * mgp64:                                 MIPS Options.       (line  197)
   39413 * mgpopt:                                MIPS Options.       (line  338)
   39414 * mgpr-32:                               FRV Options.        (line    7)
   39415 * mgpr-64:                               FRV Options.        (line   10)
   39416 * mgprel-ro:                             FRV Options.        (line   79)
   39417 * mh:                                    H8/300 Options.     (line   14)
   39418 * mhard-dfp:                             RS/6000 and PowerPC Options.
   39419                                                              (line   31)
   39420 * mhard-float <1>:                       FRV Options.        (line   19)
   39421 * mhard-float <2>:                       RS/6000 and PowerPC Options.
   39422                                                              (line  333)
   39423 * mhard-float <3>:                       M680x0 Options.     (line  193)
   39424 * mhard-float <4>:                       SPARC Options.      (line   20)
   39425 * mhard-float <5>:                       MIPS Options.       (line  206)
   39426 * mhard-float <6>:                       S/390 and zSeries Options.
   39427                                                              (line   11)
   39428 * mhard-float:                           ARM Options.        (line   41)
   39429 * mhard-quad-float:                      SPARC Options.      (line   41)
   39430 * mhardlit:                              MCore Options.      (line   10)
   39431 * mhitachi:                              SH Options.         (line   81)
   39432 * mid-shared-library:                    Blackfin Options.   (line   76)
   39433 * mieee <1>:                             SH Options.         (line   96)
   39434 * mieee:                                 DEC Alpha Options.  (line   39)
   39435 * mieee-conformant:                      DEC Alpha Options.  (line  134)
   39436 * mieee-fp:                              i386 and x86-64 Options.
   39437                                                              (line  209)
   39438 * mieee-with-inexact:                    DEC Alpha Options.  (line   52)
   39439 * milp32:                                IA-64 Options.      (line  114)
   39440 * mimpure-text:                          SPARC Options.      (line   81)
   39441 * mindexed-addressing:                   SH Options.         (line  191)
   39442 * minit-stack:                           AVR Options.        (line   35)
   39443 * minline-all-stringops:                 i386 and x86-64 Options.
   39444                                                              (line  543)
   39445 * minline-float-divide-max-throughput:   IA-64 Options.      (line   58)
   39446 * minline-float-divide-min-latency:      IA-64 Options.      (line   54)
   39447 * minline-ic_invalidate:                 SH Options.         (line  103)
   39448 * minline-int-divide-max-throughput:     IA-64 Options.      (line   66)
   39449 * minline-int-divide-min-latency:        IA-64 Options.      (line   62)
   39450 * minline-plt <1>:                       Blackfin Options.   (line  133)
   39451 * minline-plt:                           FRV Options.        (line   64)
   39452 * minline-sqrt-max-throughput:           IA-64 Options.      (line   74)
   39453 * minline-sqrt-min-latency:              IA-64 Options.      (line   70)
   39454 * minline-stringops-dynamically:         i386 and x86-64 Options.
   39455                                                              (line  550)
   39456 * minmax:                                M68hc1x Options.    (line   31)
   39457 * minsert-sched-nops:                    RS/6000 and PowerPC Options.
   39458                                                              (line  463)
   39459 * mint16:                                PDP-11 Options.     (line   40)
   39460 * mint32 <1>:                            H8/300 Options.     (line   28)
   39461 * mint32:                                PDP-11 Options.     (line   44)
   39462 * mint8:                                 AVR Options.        (line   53)
   39463 * minterlink-mips16:                     MIPS Options.       (line  107)
   39464 * minvalid-symbols:                      SH Options.         (line  224)
   39465 * mips1:                                 MIPS Options.       (line   70)
   39466 * mips16:                                MIPS Options.       (line   92)
   39467 * mips2:                                 MIPS Options.       (line   73)
   39468 * mips3:                                 MIPS Options.       (line   76)
   39469 * mips32:                                MIPS Options.       (line   82)
   39470 * mips32r2:                              MIPS Options.       (line   85)
   39471 * mips3d:                                MIPS Options.       (line  265)
   39472 * mips4:                                 MIPS Options.       (line   79)
   39473 * mips64:                                MIPS Options.       (line   88)
   39474 * misel:                                 RS/6000 and PowerPC Options.
   39475                                                              (line  204)
   39476 * misize:                                SH Options.         (line  115)
   39477 * missue-rate=NUMBER:                    M32R/D Options.     (line   79)
   39478 * mjump-in-delay:                        HPPA Options.       (line   28)
   39479 * mkernel:                               Darwin Options.     (line   84)
   39480 * mknuthdiv:                             MMIX Options.       (line   33)
   39481 * ml:                                    SH Options.         (line   61)
   39482 * mlarge-data:                           DEC Alpha Options.  (line  195)
   39483 * mlarge-data-threshold=NUMBER:          i386 and x86-64 Options.
   39484                                                              (line  289)
   39485 * mlarge-mem:                            SPU Options.        (line   35)
   39486 * mlarge-text:                           DEC Alpha Options.  (line  213)
   39487 * mleaf-id-shared-library:               Blackfin Options.   (line   87)
   39488 * mlibfuncs:                             MMIX Options.       (line   10)
   39489 * mlibrary-pic:                          FRV Options.        (line  110)
   39490 * mlinked-fp:                            FRV Options.        (line   94)
   39491 * mlinker-opt:                           HPPA Options.       (line   85)
   39492 * mlinux:                                CRIS Options.       (line  104)
   39493 * mlittle:                               RS/6000 and PowerPC Options.
   39494                                                              (line  430)
   39495 * mlittle-endian <1>:                    IA-64 Options.      (line   13)
   39496 * mlittle-endian <2>:                    RS/6000 and PowerPC Options.
   39497                                                              (line  430)
   39498 * mlittle-endian <3>:                    MCore Options.      (line   39)
   39499 * mlittle-endian <4>:                    ARM Options.        (line   68)
   39500 * mlittle-endian:                        SPARC Options.      (line  185)
   39501 * mllsc:                                 MIPS Options.       (line  222)
   39502 * mlocal-sdata:                          MIPS Options.       (line  303)
   39503 * mlong-calls <1>:                       MIPS Options.       (line  433)
   39504 * mlong-calls <2>:                       FRV Options.        (line   99)
   39505 * mlong-calls <3>:                       ARM Options.        (line  152)
   39506 * mlong-calls <4>:                       V850 Options.       (line   10)
   39507 * mlong-calls <5>:                       M68hc1x Options.    (line   35)
   39508 * mlong-calls:                           Blackfin Options.   (line  116)
   39509 * mlong-double-128:                      S/390 and zSeries Options.
   39510                                                              (line   20)
   39511 * mlong-double-64:                       S/390 and zSeries Options.
   39512                                                              (line   20)
   39513 * mlong-load-store:                      HPPA Options.       (line   66)
   39514 * mlong32:                               MIPS Options.       (line  278)
   39515 * mlong64:                               MIPS Options.       (line  273)
   39516 * mlongcall:                             RS/6000 and PowerPC Options.
   39517                                                              (line  643)
   39518 * mlongcalls:                            Xtensa Options.     (line   60)
   39519 * mlow-64k:                              Blackfin Options.   (line   65)
   39520 * mlp64:                                 IA-64 Options.      (line  114)
   39521 * MM:                                    Preprocessor Options.
   39522                                                              (line  200)
   39523 * mmac <1>:                              Score Options.      (line   21)
   39524 * mmac:                                  CRX Options.        (line    9)
   39525 * mmad:                                  MIPS Options.       (line  442)
   39526 * mmangle-cpu:                           ARC Options.        (line   15)
   39527 * mmax:                                  DEC Alpha Options.  (line  171)
   39528 * mmax-stack-frame:                      CRIS Options.       (line   22)
   39529 * mmcu:                                  AVR Options.        (line    9)
   39530 * MMD:                                   Preprocessor Options.
   39531                                                              (line  280)
   39532 * mmedia:                                FRV Options.        (line   44)
   39533 * mmemcpy:                               MIPS Options.       (line  427)
   39534 * mmemory-latency:                       DEC Alpha Options.  (line  266)
   39535 * mmfcrf:                                RS/6000 and PowerPC Options.
   39536                                                              (line   31)
   39537 * mmfpgpr:                               RS/6000 and PowerPC Options.
   39538                                                              (line   31)
   39539 * mminimal-toc:                          RS/6000 and PowerPC Options.
   39540                                                              (line  255)
   39541 * mmmx:                                  i386 and x86-64 Options.
   39542                                                              (line  440)
   39543 * mmodel=large:                          M32R/D Options.     (line   33)
   39544 * mmodel=medium:                         M32R/D Options.     (line   27)
   39545 * mmodel=small:                          M32R/D Options.     (line   18)
   39546 * mmt:                                   MIPS Options.       (line  270)
   39547 * mmul-bug-workaround:                   CRIS Options.       (line   36)
   39548 * mmuladd:                               FRV Options.        (line   50)
   39549 * mmulhw:                                RS/6000 and PowerPC Options.
   39550                                                              (line  377)
   39551 * mmult-bug:                             MN10300 Options.    (line    9)
   39552 * mmulti-cond-exec:                      FRV Options.        (line  176)
   39553 * mmultiple:                             RS/6000 and PowerPC Options.
   39554                                                              (line  339)
   39555 * mmvcle:                                S/390 and zSeries Options.
   39556                                                              (line   97)
   39557 * mmvme:                                 RS/6000 and PowerPC Options.
   39558                                                              (line  549)
   39559 * mn:                                    H8/300 Options.     (line   20)
   39560 * mnested-cond-exec:                     FRV Options.        (line  189)
   39561 * mnew-mnemonics:                        RS/6000 and PowerPC Options.
   39562                                                              (line   99)
   39563 * mnhwloop:                              Score Options.      (line   15)
   39564 * mno-3dnow:                             i386 and x86-64 Options.
   39565                                                              (line  440)
   39566 * mno-4byte-functions:                   MCore Options.      (line   27)
   39567 * mno-abicalls:                          MIPS Options.       (line  144)
   39568 * mno-abshi:                             PDP-11 Options.     (line   58)
   39569 * mno-ac0:                               PDP-11 Options.     (line   20)
   39570 * mno-align-double:                      i386 and x86-64 Options.
   39571                                                              (line  247)
   39572 * mno-align-int:                         M680x0 Options.     (line  263)
   39573 * mno-align-loops:                       M32R/D Options.     (line   76)
   39574 * mno-align-stringops:                   i386 and x86-64 Options.
   39575                                                              (line  538)
   39576 * mno-altivec:                           RS/6000 and PowerPC Options.
   39577                                                              (line  181)
   39578 * mno-am33:                              MN10300 Options.    (line   20)
   39579 * mno-app-regs <1>:                      V850 Options.       (line   61)
   39580 * mno-app-regs:                          SPARC Options.      (line   10)
   39581 * mno-bacc:                              MT Options.         (line   19)
   39582 * mno-backchain:                         S/390 and zSeries Options.
   39583                                                              (line   26)
   39584 * mno-base-addresses:                    MMIX Options.       (line   54)
   39585 * mno-bit-align:                         RS/6000 and PowerPC Options.
   39586                                                              (line  390)
   39587 * mno-bitfield:                          M680x0 Options.     (line  227)
   39588 * mno-branch-likely:                     MIPS Options.       (line  526)
   39589 * mno-branch-predict:                    MMIX Options.       (line   49)
   39590 * mno-bwx:                               DEC Alpha Options.  (line  171)
   39591 * mno-callgraph-data:                    MCore Options.      (line   31)
   39592 * mno-check-zero-division:               MIPS Options.       (line  406)
   39593 * mno-cirrus-fix-invalid-insns:          ARM Options.        (line  190)
   39594 * mno-cix:                               DEC Alpha Options.  (line  171)
   39595 * mno-cmpb:                              RS/6000 and PowerPC Options.
   39596                                                              (line   31)
   39597 * mno-cond-exec:                         FRV Options.        (line  158)
   39598 * mno-cond-move:                         FRV Options.        (line  134)
   39599 * mno-const-align:                       CRIS Options.       (line   60)
   39600 * mno-const16:                           Xtensa Options.     (line   10)
   39601 * mno-crt0 <1>:                          MN10300 Options.    (line   31)
   39602 * mno-crt0:                              MT Options.         (line   25)
   39603 * mno-csync-anomaly:                     Blackfin Options.   (line   61)
   39604 * mno-data-align:                        CRIS Options.       (line   60)
   39605 * mno-debug:                             S/390 and zSeries Options.
   39606                                                              (line  104)
   39607 * mno-div <1>:                           MCore Options.      (line   15)
   39608 * mno-div:                               M680x0 Options.     (line  205)
   39609 * mno-dlmzb:                             RS/6000 and PowerPC Options.
   39610                                                              (line  384)
   39611 * mno-double:                            FRV Options.        (line   41)
   39612 * mno-dsp:                               MIPS Options.       (line  236)
   39613 * mno-dspr2:                             MIPS Options.       (line  242)
   39614 * mno-dwarf2-asm:                        IA-64 Options.      (line   79)
   39615 * mno-dword:                             FRV Options.        (line   35)
   39616 * mno-eabi:                              RS/6000 and PowerPC Options.
   39617                                                              (line  577)
   39618 * mno-early-stop-bits:                   IA-64 Options.      (line   85)
   39619 * mno-eflags:                            FRV Options.        (line  125)
   39620 * mno-embedded-data:                     MIPS Options.       (line  353)
   39621 * mno-ep:                                V850 Options.       (line   16)
   39622 * mno-epsilon:                           MMIX Options.       (line   15)
   39623 * mno-explicit-relocs <1>:               MIPS Options.       (line  397)
   39624 * mno-explicit-relocs:                   DEC Alpha Options.  (line  184)
   39625 * mno-extern-sdata:                      MIPS Options.       (line  315)
   39626 * mno-fancy-math-387:                    i386 and x86-64 Options.
   39627                                                              (line  236)
   39628 * mno-faster-structs:                    SPARC Options.      (line   71)
   39629 * mno-fix:                               DEC Alpha Options.  (line  171)
   39630 * mno-fix-r4000:                         MIPS Options.       (line  462)
   39631 * mno-fix-r4400:                         MIPS Options.       (line  476)
   39632 * mno-float32:                           PDP-11 Options.     (line   48)
   39633 * mno-float64:                           PDP-11 Options.     (line   52)
   39634 * mno-flush-func:                        M32R/D Options.     (line   99)
   39635 * mno-flush-trap:                        M32R/D Options.     (line   91)
   39636 * mno-fp-in-toc:                         RS/6000 and PowerPC Options.
   39637                                                              (line  255)
   39638 * mno-fp-regs:                           DEC Alpha Options.  (line   25)
   39639 * mno-fp-ret-in-387:                     i386 and x86-64 Options.
   39640                                                              (line  226)
   39641 * mno-fprnd:                             RS/6000 and PowerPC Options.
   39642                                                              (line   31)
   39643 * mno-fpu:                               SPARC Options.      (line   25)
   39644 * mno-fused-madd <1>:                    MIPS Options.       (line  447)
   39645 * mno-fused-madd <2>:                    RS/6000 and PowerPC Options.
   39646                                                              (line  371)
   39647 * mno-fused-madd <3>:                    Xtensa Options.     (line   19)
   39648 * mno-fused-madd:                        S/390 and zSeries Options.
   39649                                                              (line  128)
   39650 * mno-gnu-as:                            IA-64 Options.      (line   18)
   39651 * mno-gnu-ld:                            IA-64 Options.      (line   23)
   39652 * mno-gotplt:                            CRIS Options.       (line   86)
   39653 * mno-gpopt:                             MIPS Options.       (line  338)
   39654 * mno-hard-dfp:                          RS/6000 and PowerPC Options.
   39655                                                              (line   31)
   39656 * mno-hardlit:                           MCore Options.      (line   10)
   39657 * mno-id-shared-library:                 Blackfin Options.   (line   83)
   39658 * mno-ieee-fp:                           i386 and x86-64 Options.
   39659                                                              (line  209)
   39660 * mno-int16:                             PDP-11 Options.     (line   44)
   39661 * mno-int32:                             PDP-11 Options.     (line   40)
   39662 * mno-interlink-mips16:                  MIPS Options.       (line  107)
   39663 * mno-interrupts:                        AVR Options.        (line   39)
   39664 * mno-isel:                              RS/6000 and PowerPC Options.
   39665                                                              (line  204)
   39666 * mno-knuthdiv:                          MMIX Options.       (line   33)
   39667 * mno-leaf-id-shared-library:            Blackfin Options.   (line   93)
   39668 * mno-libfuncs:                          MMIX Options.       (line   10)
   39669 * mno-llsc:                              MIPS Options.       (line  222)
   39670 * mno-local-sdata:                       MIPS Options.       (line  303)
   39671 * mno-long-calls <1>:                    HPPA Options.       (line  138)
   39672 * mno-long-calls <2>:                    MIPS Options.       (line  433)
   39673 * mno-long-calls <3>:                    V850 Options.       (line   10)
   39674 * mno-long-calls <4>:                    M68hc1x Options.    (line   35)
   39675 * mno-long-calls <5>:                    ARM Options.        (line  152)
   39676 * mno-long-calls:                        Blackfin Options.   (line  116)
   39677 * mno-longcall:                          RS/6000 and PowerPC Options.
   39678                                                              (line  643)
   39679 * mno-longcalls:                         Xtensa Options.     (line   60)
   39680 * mno-low-64k:                           Blackfin Options.   (line   69)
   39681 * mno-mad:                               MIPS Options.       (line  442)
   39682 * mno-max:                               DEC Alpha Options.  (line  171)
   39683 * mno-mdmx:                              MIPS Options.       (line  259)
   39684 * mno-media:                             FRV Options.        (line   47)
   39685 * mno-memcpy:                            MIPS Options.       (line  427)
   39686 * mno-mfcrf:                             RS/6000 and PowerPC Options.
   39687                                                              (line   31)
   39688 * mno-mfpgpr:                            RS/6000 and PowerPC Options.
   39689                                                              (line   31)
   39690 * mno-mips16:                            MIPS Options.       (line   92)
   39691 * mno-mips3d:                            MIPS Options.       (line  265)
   39692 * mno-mmx:                               i386 and x86-64 Options.
   39693                                                              (line  440)
   39694 * mno-mt:                                MIPS Options.       (line  270)
   39695 * mno-mul-bug-workaround:                CRIS Options.       (line   36)
   39696 * mno-muladd:                            FRV Options.        (line   53)
   39697 * mno-mulhw:                             RS/6000 and PowerPC Options.
   39698                                                              (line  377)
   39699 * mno-mult-bug:                          MN10300 Options.    (line   13)
   39700 * mno-multi-cond-exec:                   FRV Options.        (line  183)
   39701 * mno-multiple:                          RS/6000 and PowerPC Options.
   39702                                                              (line  339)
   39703 * mno-mvcle:                             S/390 and zSeries Options.
   39704                                                              (line   97)
   39705 * mno-nested-cond-exec:                  FRV Options.        (line  195)
   39706 * mno-optimize-membar:                   FRV Options.        (line  205)
   39707 * mno-pack:                              FRV Options.        (line  122)
   39708 * mno-packed-stack:                      S/390 and zSeries Options.
   39709                                                              (line   46)
   39710 * mno-paired:                            RS/6000 and PowerPC Options.
   39711                                                              (line  218)
   39712 * mno-paired-single:                     MIPS Options.       (line  253)
   39713 * mno-pic:                               IA-64 Options.      (line   26)
   39714 * mno-popcntb:                           RS/6000 and PowerPC Options.
   39715                                                              (line   31)
   39716 * mno-power:                             RS/6000 and PowerPC Options.
   39717                                                              (line   31)
   39718 * mno-power2:                            RS/6000 and PowerPC Options.
   39719                                                              (line   31)
   39720 * mno-powerpc:                           RS/6000 and PowerPC Options.
   39721                                                              (line   31)
   39722 * mno-powerpc-gfxopt:                    RS/6000 and PowerPC Options.
   39723                                                              (line   31)
   39724 * mno-powerpc-gpopt:                     RS/6000 and PowerPC Options.
   39725                                                              (line   31)
   39726 * mno-powerpc64:                         RS/6000 and PowerPC Options.
   39727                                                              (line   31)
   39728 * mno-prolog-function:                   V850 Options.       (line   23)
   39729 * mno-prologue-epilogue:                 CRIS Options.       (line   76)
   39730 * mno-prototype:                         RS/6000 and PowerPC Options.
   39731                                                              (line  533)
   39732 * mno-push-args:                         i386 and x86-64 Options.
   39733                                                              (line  515)
   39734 * mno-register-names:                    IA-64 Options.      (line   37)
   39735 * mno-regnames:                          RS/6000 and PowerPC Options.
   39736                                                              (line  637)
   39737 * mno-relax-immediate:                   MCore Options.      (line   19)
   39738 * mno-relocatable:                       RS/6000 and PowerPC Options.
   39739                                                              (line  407)
   39740 * mno-relocatable-lib:                   RS/6000 and PowerPC Options.
   39741                                                              (line  415)
   39742 * mno-rtd:                               M680x0 Options.     (line  258)
   39743 * mno-scc:                               FRV Options.        (line  146)
   39744 * mno-sched-ar-data-spec:                IA-64 Options.      (line  128)
   39745 * mno-sched-ar-in-data-spec:             IA-64 Options.      (line  149)
   39746 * mno-sched-br-data-spec:                IA-64 Options.      (line  121)
   39747 * mno-sched-br-in-data-spec:             IA-64 Options.      (line  142)
   39748 * mno-sched-control-ldc:                 IA-64 Options.      (line  168)
   39749 * mno-sched-control-spec:                IA-64 Options.      (line  135)
   39750 * mno-sched-count-spec-in-critical-path: IA-64 Options.      (line  194)
   39751 * mno-sched-in-control-spec:             IA-64 Options.      (line  156)
   39752 * mno-sched-ldc:                         IA-64 Options.      (line  162)
   39753 * mno-sched-prefer-non-control-spec-insns: IA-64 Options.    (line  187)
   39754 * mno-sched-prefer-non-data-spec-insns:  IA-64 Options.      (line  180)
   39755 * mno-sched-prolog:                      ARM Options.        (line   32)
   39756 * mno-sched-spec-verbose:                IA-64 Options.      (line  176)
   39757 * mno-sdata <1>:                         IA-64 Options.      (line   42)
   39758 * mno-sdata:                             RS/6000 and PowerPC Options.
   39759                                                              (line  624)
   39760 * mno-sep-data:                          Blackfin Options.   (line  111)
   39761 * mno-short:                             M680x0 Options.     (line  222)
   39762 * mno-side-effects:                      CRIS Options.       (line   51)
   39763 * mno-single-exit:                       MMIX Options.       (line   66)
   39764 * mno-slow-bytes:                        MCore Options.      (line   35)
   39765 * mno-small-exec:                        S/390 and zSeries Options.
   39766                                                              (line   72)
   39767 * mno-smartmips:                         MIPS Options.       (line  249)
   39768 * mno-soft-float:                        DEC Alpha Options.  (line   10)
   39769 * mno-space-regs:                        HPPA Options.       (line   45)
   39770 * mno-spe:                               RS/6000 and PowerPC Options.
   39771                                                              (line  213)
   39772 * mno-specld-anomaly:                    Blackfin Options.   (line   51)
   39773 * mno-split:                             PDP-11 Options.     (line   71)
   39774 * mno-split-addresses:                   MIPS Options.       (line  391)
   39775 * mno-sse:                               i386 and x86-64 Options.
   39776                                                              (line  440)
   39777 * mno-stack-align:                       CRIS Options.       (line   60)
   39778 * mno-stack-bias:                        SPARC Options.      (line  222)
   39779 * mno-strict-align <1>:                  RS/6000 and PowerPC Options.
   39780                                                              (line  402)
   39781 * mno-strict-align:                      M680x0 Options.     (line  283)
   39782 * mno-string:                            RS/6000 and PowerPC Options.
   39783                                                              (line  350)
   39784 * mno-sum-in-toc:                        RS/6000 and PowerPC Options.
   39785                                                              (line  255)
   39786 * mno-swdiv:                             RS/6000 and PowerPC Options.
   39787                                                              (line  171)
   39788 * mno-sym32:                             MIPS Options.       (line  288)
   39789 * mno-tablejump:                         AVR Options.        (line   47)
   39790 * mno-target-align:                      Xtensa Options.     (line   47)
   39791 * mno-text-section-literals:             Xtensa Options.     (line   35)
   39792 * mno-toc:                               RS/6000 and PowerPC Options.
   39793                                                              (line  424)
   39794 * mno-toplevel-symbols:                  MMIX Options.       (line   40)
   39795 * mno-tpf-trace:                         S/390 and zSeries Options.
   39796                                                              (line  122)
   39797 * mno-unaligned-doubles:                 SPARC Options.      (line   59)
   39798 * mno-uninit-const-in-rodata:            MIPS Options.       (line  361)
   39799 * mno-update:                            RS/6000 and PowerPC Options.
   39800                                                              (line  361)
   39801 * mno-v8plus:                            SPARC Options.      (line  170)
   39802 * mno-vis:                               SPARC Options.      (line  177)
   39803 * mno-vliw-branch:                       FRV Options.        (line  170)
   39804 * mno-volatile-asm-stop:                 IA-64 Options.      (line   32)
   39805 * mno-vrsave:                            RS/6000 and PowerPC Options.
   39806                                                              (line  190)
   39807 * mno-wide-bitfields:                    MCore Options.      (line   23)
   39808 * mno-xgot:                              MIPS Options.       (line  171)
   39809 * mno-xl-compat:                         RS/6000 and PowerPC Options.
   39810                                                              (line  290)
   39811 * mno-zero-extend:                       MMIX Options.       (line   27)
   39812 * mnobitfield:                           M680x0 Options.     (line  227)
   39813 * mnomacsave:                            SH Options.         (line   92)
   39814 * mnominmax:                             M68hc1x Options.    (line   31)
   39815 * mnop-fun-dllimport:                    ARM Options.        (line  177)
   39816 * mold-mnemonics:                        RS/6000 and PowerPC Options.
   39817                                                              (line   99)
   39818 * momit-leaf-frame-pointer <1>:          Blackfin Options.   (line   39)
   39819 * momit-leaf-frame-pointer:              i386 and x86-64 Options.
   39820                                                              (line  563)
   39821 * mone-byte-bool:                        Darwin Options.     (line   92)
   39822 * moptimize-membar:                      FRV Options.        (line  201)
   39823 * MP:                                    Preprocessor Options.
   39824                                                              (line  229)
   39825 * mpa-risc-1-0:                          HPPA Options.       (line   19)
   39826 * mpa-risc-1-1:                          HPPA Options.       (line   19)
   39827 * mpa-risc-2-0:                          HPPA Options.       (line   19)
   39828 * mpack:                                 FRV Options.        (line  119)
   39829 * mpacked-stack:                         S/390 and zSeries Options.
   39830                                                              (line   46)
   39831 * mpadstruct:                            SH Options.         (line  118)
   39832 * mpaired:                               RS/6000 and PowerPC Options.
   39833                                                              (line  218)
   39834 * mpaired-single:                        MIPS Options.       (line  253)
   39835 * mpc32:                                 i386 and x86-64 Options.
   39836                                                              (line  342)
   39837 * mpc64:                                 i386 and x86-64 Options.
   39838                                                              (line  342)
   39839 * mpc80:                                 i386 and x86-64 Options.
   39840                                                              (line  342)
   39841 * mpcrel:                                M680x0 Options.     (line  275)
   39842 * mpdebug:                               CRIS Options.       (line   40)
   39843 * mpe:                                   RS/6000 and PowerPC Options.
   39844                                                              (line  310)
   39845 * mpic-register:                         ARM Options.        (line  186)
   39846 * mpoke-function-name:                   ARM Options.        (line  200)
   39847 * mpopcntb:                              RS/6000 and PowerPC Options.
   39848                                                              (line   31)
   39849 * mportable-runtime:                     HPPA Options.       (line   71)
   39850 * mpower:                                RS/6000 and PowerPC Options.
   39851                                                              (line   31)
   39852 * mpower2:                               RS/6000 and PowerPC Options.
   39853                                                              (line   31)
   39854 * mpowerpc:                              RS/6000 and PowerPC Options.
   39855                                                              (line   31)
   39856 * mpowerpc-gfxopt:                       RS/6000 and PowerPC Options.
   39857                                                              (line   31)
   39858 * mpowerpc-gpopt:                        RS/6000 and PowerPC Options.
   39859                                                              (line   31)
   39860 * mpowerpc64:                            RS/6000 and PowerPC Options.
   39861                                                              (line   31)
   39862 * mprefergot:                            SH Options.         (line  125)
   39863 * mpreferred-stack-boundary:             i386 and x86-64 Options.
   39864                                                              (line  377)
   39865 * mprioritize-restricted-insns:          RS/6000 and PowerPC Options.
   39866                                                              (line  447)
   39867 * mprolog-function:                      V850 Options.       (line   23)
   39868 * mprologue-epilogue:                    CRIS Options.       (line   76)
   39869 * mprototype:                            RS/6000 and PowerPC Options.
   39870                                                              (line  533)
   39871 * mpt-fixed:                             SH Options.         (line  205)
   39872 * mpush-args <1>:                        CRX Options.        (line   13)
   39873 * mpush-args:                            i386 and x86-64 Options.
   39874                                                              (line  515)
   39875 * MQ:                                    Preprocessor Options.
   39876                                                              (line  255)
   39877 * mrecip:                                i386 and x86-64 Options.
   39878                                                              (line  490)
   39879 * mregister-names:                       IA-64 Options.      (line   37)
   39880 * mregnames:                             RS/6000 and PowerPC Options.
   39881                                                              (line  637)
   39882 * mregparm:                              i386 and x86-64 Options.
   39883                                                              (line  319)
   39884 * mrelax <1>:                            SH Options.         (line   70)
   39885 * mrelax <2>:                            MN10300 Options.    (line   34)
   39886 * mrelax:                                H8/300 Options.     (line    9)
   39887 * mrelax-immediate:                      MCore Options.      (line   19)
   39888 * mrelocatable:                          RS/6000 and PowerPC Options.
   39889                                                              (line  407)
   39890 * mrelocatable-lib:                      RS/6000 and PowerPC Options.
   39891                                                              (line  415)
   39892 * mreturn-pointer-on-d0:                 MN10300 Options.    (line   24)
   39893 * mrodata:                               ARC Options.        (line   30)
   39894 * mrtd <1>:                              i386 and x86-64 Options.
   39895                                                              (line  295)
   39896 * mrtd <2>:                              M680x0 Options.     (line  236)
   39897 * mrtd:                                  Function Attributes.
   39898                                                              (line  171)
   39899 * mrtp:                                  VxWorks Options.    (line   11)
   39900 * ms:                                    H8/300 Options.     (line   17)
   39901 * ms2600:                                H8/300 Options.     (line   24)
   39902 * msafe-dma:                             SPU Options.        (line   17)
   39903 * msahf:                                 i386 and x86-64 Options.
   39904                                                              (line  480)
   39905 * mscc:                                  FRV Options.        (line  140)
   39906 * msched-ar-data-spec:                   IA-64 Options.      (line  128)
   39907 * msched-ar-in-data-spec:                IA-64 Options.      (line  149)
   39908 * msched-br-data-spec:                   IA-64 Options.      (line  121)
   39909 * msched-br-in-data-spec:                IA-64 Options.      (line  142)
   39910 * msched-control-ldc:                    IA-64 Options.      (line  168)
   39911 * msched-control-spec:                   IA-64 Options.      (line  135)
   39912 * msched-costly-dep:                     RS/6000 and PowerPC Options.
   39913                                                              (line  454)
   39914 * msched-count-spec-in-critical-path:    IA-64 Options.      (line  194)
   39915 * msched-in-control-spec:                IA-64 Options.      (line  156)
   39916 * msched-ldc:                            IA-64 Options.      (line  162)
   39917 * msched-prefer-non-control-spec-insns:  IA-64 Options.      (line  187)
   39918 * msched-prefer-non-data-spec-insns:     IA-64 Options.      (line  180)
   39919 * msched-spec-verbose:                   IA-64 Options.      (line  176)
   39920 * mschedule:                             HPPA Options.       (line   78)
   39921 * mscore5:                               Score Options.      (line   25)
   39922 * mscore5u:                              Score Options.      (line   28)
   39923 * mscore7:                               Score Options.      (line   31)
   39924 * mscore7d:                              Score Options.      (line   34)
   39925 * msda:                                  V850 Options.       (line   40)
   39926 * msdata <1>:                            RS/6000 and PowerPC Options.
   39927                                                              (line  611)
   39928 * msdata:                                IA-64 Options.      (line   42)
   39929 * msdata-data:                           RS/6000 and PowerPC Options.
   39930                                                              (line  616)
   39931 * msdata=default:                        RS/6000 and PowerPC Options.
   39932                                                              (line  611)
   39933 * msdata=eabi:                           RS/6000 and PowerPC Options.
   39934                                                              (line  591)
   39935 * msdata=none <1>:                       RS/6000 and PowerPC Options.
   39936                                                              (line  624)
   39937 * msdata=none:                           M32R/D Options.     (line   40)
   39938 * msdata=sdata:                          M32R/D Options.     (line   49)
   39939 * msdata=sysv:                           RS/6000 and PowerPC Options.
   39940                                                              (line  602)
   39941 * msdata=use:                            M32R/D Options.     (line   53)
   39942 * msecure-plt:                           RS/6000 and PowerPC Options.
   39943                                                              (line  193)
   39944 * msep-data:                             Blackfin Options.   (line  105)
   39945 * mshared-library-id:                    Blackfin Options.   (line   98)
   39946 * mshort <1>:                            M680x0 Options.     (line  216)
   39947 * mshort:                                M68hc1x Options.    (line   40)
   39948 * msim <1>:                              M32C Options.       (line   13)
   39949 * msim <2>:                              Xstormy16 Options.  (line    9)
   39950 * msim <3>:                              RS/6000 and PowerPC Options.
   39951                                                              (line  543)
   39952 * msim <4>:                              MT Options.         (line   22)
   39953 * msim:                                  Blackfin Options.   (line   32)
   39954 * msingle-exit:                          MMIX Options.       (line   66)
   39955 * msingle-float:                         MIPS Options.       (line  213)
   39956 * msingle-pic-base:                      ARM Options.        (line  180)
   39957 * msio:                                  HPPA Options.       (line  107)
   39958 * msize:                                 AVR Options.        (line   32)
   39959 * mslow-bytes:                           MCore Options.      (line   35)
   39960 * msmall-data:                           DEC Alpha Options.  (line  195)
   39961 * msmall-exec:                           S/390 and zSeries Options.
   39962                                                              (line   72)
   39963 * msmall-mem:                            SPU Options.        (line   35)
   39964 * msmall-text:                           DEC Alpha Options.  (line  213)
   39965 * msmartmips:                            MIPS Options.       (line  249)
   39966 * msoft-float <1>:                       i386 and x86-64 Options.
   39967                                                              (line  214)
   39968 * msoft-float <2>:                       S/390 and zSeries Options.
   39969                                                              (line   11)
   39970 * msoft-float <3>:                       HPPA Options.       (line   91)
   39971 * msoft-float <4>:                       RS/6000 and PowerPC Options.
   39972                                                              (line  333)
   39973 * msoft-float <5>:                       SPARC Options.      (line   25)
   39974 * msoft-float <6>:                       FRV Options.        (line   22)
   39975 * msoft-float <7>:                       M680x0 Options.     (line  199)
   39976 * msoft-float <8>:                       DEC Alpha Options.  (line   10)
   39977 * msoft-float <9>:                       MIPS Options.       (line  209)
   39978 * msoft-float <10>:                      PDP-11 Options.     (line   13)
   39979 * msoft-float:                           ARM Options.        (line   45)
   39980 * msoft-quad-float:                      SPARC Options.      (line   45)
   39981 * msoft-reg-count:                       M68hc1x Options.    (line   43)
   39982 * mspace <1>:                            SH Options.         (line  122)
   39983 * mspace:                                V850 Options.       (line   30)
   39984 * mspe:                                  RS/6000 and PowerPC Options.
   39985                                                              (line  213)
   39986 * mspecld-anomaly:                       Blackfin Options.   (line   46)
   39987 * msplit:                                PDP-11 Options.     (line   68)
   39988 * msplit-addresses:                      MIPS Options.       (line  391)
   39989 * msse:                                  i386 and x86-64 Options.
   39990                                                              (line  440)
   39991 * msseregparm:                           i386 and x86-64 Options.
   39992                                                              (line  330)
   39993 * mstack-align:                          CRIS Options.       (line   60)
   39994 * mstack-bias:                           SPARC Options.      (line  222)
   39995 * mstack-check-l1:                       Blackfin Options.   (line   72)
   39996 * mstack-guard:                          S/390 and zSeries Options.
   39997                                                              (line  148)
   39998 * mstack-size:                           S/390 and zSeries Options.
   39999                                                              (line  148)
   40000 * mstackrealign:                         i386 and x86-64 Options.
   40001                                                              (line  363)
   40002 * mstdmain:                              SPU Options.        (line   40)
   40003 * mstrict-align <1>:                     M680x0 Options.     (line  283)
   40004 * mstrict-align:                         RS/6000 and PowerPC Options.
   40005                                                              (line  402)
   40006 * mstring:                               RS/6000 and PowerPC Options.
   40007                                                              (line  350)
   40008 * mstringop-strategy=ALG:                i386 and x86-64 Options.
   40009                                                              (line  555)
   40010 * mstructure-size-boundary:              ARM Options.        (line  132)
   40011 * msvr4-struct-return:                   RS/6000 and PowerPC Options.
   40012                                                              (line  507)
   40013 * mswdiv:                                RS/6000 and PowerPC Options.
   40014                                                              (line  171)
   40015 * msym32:                                MIPS Options.       (line  288)
   40016 * MT:                                    Preprocessor Options.
   40017                                                              (line  241)
   40018 * mt:                                    IA-64 Options.      (line  106)
   40019 * mtarget-align:                         Xtensa Options.     (line   47)
   40020 * mtda:                                  V850 Options.       (line   34)
   40021 * mtext:                                 ARC Options.        (line   30)
   40022 * mtext-section-literals:                Xtensa Options.     (line   35)
   40023 * mthreads:                              i386 and x86-64 Options.
   40024                                                              (line  530)
   40025 * mthumb:                                ARM Options.        (line  221)
   40026 * mthumb-interwork:                      ARM Options.        (line   25)
   40027 * mtiny-stack:                           AVR Options.        (line   50)
   40028 * mtls-direct-seg-refs:                  i386 and x86-64 Options.
   40029                                                              (line  571)
   40030 * mtls-size:                             IA-64 Options.      (line   97)
   40031 * mtoc:                                  RS/6000 and PowerPC Options.
   40032                                                              (line  424)
   40033 * mtomcat-stats:                         FRV Options.        (line  209)
   40034 * mtoplevel-symbols:                     MMIX Options.       (line   40)
   40035 * mtp:                                   ARM Options.        (line  251)
   40036 * mtpcs-frame:                           ARM Options.        (line  227)
   40037 * mtpcs-leaf-frame:                      ARM Options.        (line  233)
   40038 * mtpf-trace:                            S/390 and zSeries Options.
   40039                                                              (line  122)
   40040 * mtrap-precision:                       DEC Alpha Options.  (line  109)
   40041 * mtune <1>:                             RS/6000 and PowerPC Options.
   40042                                                              (line  161)
   40043 * mtune <2>:                             S/390 and zSeries Options.
   40044                                                              (line  115)
   40045 * mtune <3>:                             SPARC Options.      (line  158)
   40046 * mtune <4>:                             i386 and x86-64 Options.
   40047                                                              (line   10)
   40048 * mtune <5>:                             IA-64 Options.      (line  101)
   40049 * mtune <6>:                             M680x0 Options.     (line   66)
   40050 * mtune <7>:                             DEC Alpha Options.  (line  262)
   40051 * mtune <8>:                             MIPS Options.       (line   55)
   40052 * mtune <9>:                             ARM Options.        (line  100)
   40053 * mtune:                                 CRIS Options.       (line   16)
   40054 * muclibc:                               GNU/Linux Options.  (line   13)
   40055 * muls:                                  Score Options.      (line   18)
   40056 * multcost=NUMBER:                       SH Options.         (line  135)
   40057 * multi_module:                          Darwin Options.     (line  199)
   40058 * multilib-library-pic:                  FRV Options.        (line   89)
   40059 * multiply_defined:                      Darwin Options.     (line  199)
   40060 * multiply_defined_unused:               Darwin Options.     (line  199)
   40061 * munaligned-doubles:                    SPARC Options.      (line   59)
   40062 * muninit-const-in-rodata:               MIPS Options.       (line  361)
   40063 * munix:                                 VAX Options.        (line    9)
   40064 * munix-asm:                             PDP-11 Options.     (line   74)
   40065 * munsafe-dma:                           SPU Options.        (line   17)
   40066 * mupdate:                               RS/6000 and PowerPC Options.
   40067                                                              (line  361)
   40068 * musermode:                             SH Options.         (line  130)
   40069 * mv850:                                 V850 Options.       (line   49)
   40070 * mv850e:                                V850 Options.       (line   69)
   40071 * mv850e1:                               V850 Options.       (line   64)
   40072 * mv8plus:                               SPARC Options.      (line  170)
   40073 * mveclibabi:                            i386 and x86-64 Options.
   40074                                                              (line  503)
   40075 * mvis:                                  SPARC Options.      (line  177)
   40076 * mvliw-branch:                          FRV Options.        (line  164)
   40077 * mvms-return-codes:                     DEC Alpha/VMS Options.
   40078                                                              (line    9)
   40079 * mvolatile-asm-stop:                    IA-64 Options.      (line   32)
   40080 * mvr4130-align:                         MIPS Options.       (line  547)
   40081 * mvrsave:                               RS/6000 and PowerPC Options.
   40082                                                              (line  190)
   40083 * mvxworks:                              RS/6000 and PowerPC Options.
   40084                                                              (line  564)
   40085 * mwarn-dynamicstack:                    S/390 and zSeries Options.
   40086                                                              (line  141)
   40087 * mwarn-framesize:                       S/390 and zSeries Options.
   40088                                                              (line  133)
   40089 * mwarn-reloc:                           SPU Options.        (line   10)
   40090 * mwide-bitfields:                       MCore Options.      (line   23)
   40091 * mwindiss:                              RS/6000 and PowerPC Options.
   40092                                                              (line  568)
   40093 * mwords-little-endian:                  ARM Options.        (line   76)
   40094 * mxgot:                                 MIPS Options.       (line  171)
   40095 * mxl-compat:                            RS/6000 and PowerPC Options.
   40096                                                              (line  290)
   40097 * myellowknife:                          RS/6000 and PowerPC Options.
   40098                                                              (line  559)
   40099 * mzarch:                                S/390 and zSeries Options.
   40100                                                              (line   87)
   40101 * mzda:                                  V850 Options.       (line   45)
   40102 * mzero-extend:                          MMIX Options.       (line   27)
   40103 * no-integrated-cpp:                     C Dialect Options.  (line  240)
   40104 * no-red-zone:                           i386 and x86-64 Options.
   40105                                                              (line  600)
   40106 * no_dead_strip_inits_and_terms:         Darwin Options.     (line  199)
   40107 * noall_load:                            Darwin Options.     (line  199)
   40108 * nocpp:                                 MIPS Options.       (line  457)
   40109 * nodefaultlibs:                         Link Options.       (line   62)
   40110 * nofixprebinding:                       Darwin Options.     (line  199)
   40111 * nolibdld:                              HPPA Options.       (line  190)
   40112 * nomultidefs:                           Darwin Options.     (line  199)
   40113 * non-static:                            VxWorks Options.    (line   16)
   40114 * noprebind:                             Darwin Options.     (line  199)
   40115 * noseglinkedit:                         Darwin Options.     (line  199)
   40116 * nostartfiles:                          Link Options.       (line   57)
   40117 * nostdinc:                              Preprocessor Options.
   40118                                                              (line  377)
   40119 * nostdinc++ <1>:                        Preprocessor Options.
   40120                                                              (line  382)
   40121 * nostdinc++:                            C++ Dialect Options.
   40122                                                              (line  254)
   40123 * nostdlib:                              Link Options.       (line   71)
   40124 * o <1>:                                 Preprocessor Options.
   40125                                                              (line   74)
   40126 * o:                                     Overall Options.    (line  182)
   40127 * O:                                     Optimize Options.   (line   32)
   40128 * O0:                                    Optimize Options.   (line  107)
   40129 * O1:                                    Optimize Options.   (line   32)
   40130 * O2:                                    Optimize Options.   (line   69)
   40131 * O3:                                    Optimize Options.   (line  101)
   40132 * Os:                                    Optimize Options.   (line  111)
   40133 * p:                                     Debugging Options.  (line  214)
   40134 * P:                                     Preprocessor Options.
   40135                                                              (line  586)
   40136 * pagezero_size:                         Darwin Options.     (line  199)
   40137 * param:                                 Optimize Options.   (line 1501)
   40138 * pass-exit-codes:                       Overall Options.    (line  140)
   40139 * pedantic <1>:                          Warnings and Errors.
   40140                                                              (line   25)
   40141 * pedantic <2>:                          Warning Options.    (line   53)
   40142 * pedantic <3>:                          Preprocessor Options.
   40143                                                              (line  165)
   40144 * pedantic <4>:                          C Extensions.       (line    6)
   40145 * pedantic <5>:                          Alternate Keywords. (line   29)
   40146 * pedantic:                              Standards.          (line   16)
   40147 * pedantic-errors <1>:                   Warnings and Errors.
   40148                                                              (line   25)
   40149 * pedantic-errors <2>:                   Preprocessor Options.
   40150                                                              (line  170)
   40151 * pedantic-errors <3>:                   Non-bugs.           (line  216)
   40152 * pedantic-errors <4>:                   Standards.          (line   16)
   40153 * pedantic-errors:                       Warning Options.    (line   95)
   40154 * pg:                                    Debugging Options.  (line  220)
   40155 * pie:                                   Link Options.       (line   92)
   40156 * pipe:                                  Overall Options.    (line  204)
   40157 * prebind:                               Darwin Options.     (line  199)
   40158 * prebind_all_twolevel_modules:          Darwin Options.     (line  199)
   40159 * preprocessor:                          Preprocessor Options.
   40160                                                              (line   24)
   40161 * print-file-name:                       Debugging Options.  (line  832)
   40162 * print-libgcc-file-name:                Debugging Options.  (line  853)
   40163 * print-multi-directory:                 Debugging Options.  (line  838)
   40164 * print-multi-lib:                       Debugging Options.  (line  843)
   40165 * print-objc-runtime-info:               Objective-C and Objective-C++ Dialect Options.
   40166                                                              (line  244)
   40167 * print-prog-name:                       Debugging Options.  (line  850)
   40168 * print-search-dirs:                     Debugging Options.  (line  861)
   40169 * print-sysroot-headers-suffix:          Debugging Options.  (line  874)
   40170 * private_bundle:                        Darwin Options.     (line  199)
   40171 * pthread <1>:                           RS/6000 and PowerPC Options.
   40172                                                              (line  675)
   40173 * pthread <2>:                           SPARC Options.      (line  242)
   40174 * pthread:                               IA-64 Options.      (line  106)
   40175 * pthreads:                              SPARC Options.      (line  236)
   40176 * Q:                                     Debugging Options.  (line  226)
   40177 * Qn:                                    System V Options.   (line   18)
   40178 * Qy:                                    System V Options.   (line   14)
   40179 * rdynamic:                              Link Options.       (line   98)
   40180 * read_only_relocs:                      Darwin Options.     (line  199)
   40181 * remap:                                 Preprocessor Options.
   40182                                                              (line  634)
   40183 * s:                                     Link Options.       (line  105)
   40184 * S <1>:                                 Link Options.       (line   20)
   40185 * S:                                     Overall Options.    (line  165)
   40186 * save-temps:                            Debugging Options.  (line  794)
   40187 * sectalign:                             Darwin Options.     (line  199)
   40188 * sectcreate:                            Darwin Options.     (line  199)
   40189 * sectobjectsymbols:                     Darwin Options.     (line  199)
   40190 * sectorder:                             Darwin Options.     (line  199)
   40191 * seg1addr:                              Darwin Options.     (line  199)
   40192 * seg_addr_table:                        Darwin Options.     (line  199)
   40193 * seg_addr_table_filename:               Darwin Options.     (line  199)
   40194 * segaddr:                               Darwin Options.     (line  199)
   40195 * seglinkedit:                           Darwin Options.     (line  199)
   40196 * segprot:                               Darwin Options.     (line  199)
   40197 * segs_read_only_addr:                   Darwin Options.     (line  199)
   40198 * segs_read_write_addr:                  Darwin Options.     (line  199)
   40199 * shared:                                Link Options.       (line  114)
   40200 * shared-libgcc:                         Link Options.       (line  122)
   40201 * sim:                                   CRIS Options.       (line  108)
   40202 * sim2:                                  CRIS Options.       (line  114)
   40203 * single_module:                         Darwin Options.     (line  199)
   40204 * specs:                                 Directory Options.  (line   84)
   40205 * static <1>:                            Link Options.       (line  109)
   40206 * static <2>:                            Darwin Options.     (line  199)
   40207 * static:                                HPPA Options.       (line  194)
   40208 * static-libgcc:                         Link Options.       (line  122)
   40209 * std <1>:                               Standards.          (line   16)
   40210 * std <2>:                               Other Builtins.     (line   22)
   40211 * std <3>:                               C Dialect Options.  (line   47)
   40212 * std:                                   Non-bugs.           (line  107)
   40213 * std=:                                  Preprocessor Options.
   40214                                                              (line  328)
   40215 * sub_library:                           Darwin Options.     (line  199)
   40216 * sub_umbrella:                          Darwin Options.     (line  199)
   40217 * symbolic:                              Link Options.       (line  157)
   40218 * sysroot:                               Directory Options.  (line   92)
   40219 * target-help <1>:                       Preprocessor Options.
   40220                                                              (line  639)
   40221 * target-help:                           Overall Options.    (line  235)
   40222 * threads <1>:                           HPPA Options.       (line  207)
   40223 * threads:                               SPARC Options.      (line  230)
   40224 * time:                                  Debugging Options.  (line  808)
   40225 * tls:                                   FRV Options.        (line   75)
   40226 * TLS:                                   FRV Options.        (line   72)
   40227 * traditional <1>:                       C Dialect Options.  (line  252)
   40228 * traditional:                           Incompatibilities.  (line    6)
   40229 * traditional-cpp <1>:                   C Dialect Options.  (line  252)
   40230 * traditional-cpp:                       Preprocessor Options.
   40231                                                              (line  617)
   40232 * trigraphs <1>:                         Preprocessor Options.
   40233                                                              (line  621)
   40234 * trigraphs:                             C Dialect Options.  (line  236)
   40235 * twolevel_namespace:                    Darwin Options.     (line  199)
   40236 * U:                                     Preprocessor Options.
   40237                                                              (line   56)
   40238 * u:                                     Link Options.       (line  179)
   40239 * umbrella:                              Darwin Options.     (line  199)
   40240 * undef:                                 Preprocessor Options.
   40241                                                              (line   60)
   40242 * undefined:                             Darwin Options.     (line  199)
   40243 * unexported_symbols_list:               Darwin Options.     (line  199)
   40244 * v <1>:                                 Preprocessor Options.
   40245                                                              (line  643)
   40246 * v:                                     Overall Options.    (line  193)
   40247 * V:                                     Target Options.     (line   24)
   40248 * version <1>:                           Overall Options.    (line  343)
   40249 * version:                               Preprocessor Options.
   40250                                                              (line  656)
   40251 * W <1>:                                 Warning Options.    (line 1105)
   40252 * W:                                     Incompatibilities.  (line   64)
   40253 * w:                                     Preprocessor Options.
   40254                                                              (line  161)
   40255 * W:                                     Warning Options.    (line 1002)
   40256 * w:                                     Warning Options.    (line   18)
   40257 * W:                                     Warning Options.    (line  145)
   40258 * Wa:                                    Assembler Options.  (line    9)
   40259 * Wabi:                                  C++ Dialect Options.
   40260                                                              (line  268)
   40261 * Waddress:                              Warning Options.    (line  935)
   40262 * Waggregate-return:                     Warning Options.    (line  953)
   40263 * Wall <1>:                              Warning Options.    (line   99)
   40264 * Wall <2>:                              Preprocessor Options.
   40265                                                              (line   80)
   40266 * Wall:                                  Standard Libraries. (line    6)
   40267 * Warray-bounds:                         Warning Options.    (line  692)
   40268 * Wassign-intercept:                     Objective-C and Objective-C++ Dialect Options.
   40269                                                              (line  198)
   40270 * Wattributes:                           Warning Options.    (line  958)
   40271 * Wbad-function-cast:                    Warning Options.    (line  855)
   40272 * Wcast-align:                           Warning Options.    (line  875)
   40273 * Wcast-qual:                            Warning Options.    (line  870)
   40274 * Wchar-subscripts:                      Warning Options.    (line  189)
   40275 * Wclobbered:                            Warning Options.    (line  893)
   40276 * Wcomment <1>:                          Warning Options.    (line  194)
   40277 * Wcomment:                              Preprocessor Options.
   40278                                                              (line   88)
   40279 * Wcomments:                             Preprocessor Options.
   40280                                                              (line   88)
   40281 * Wconversion:                           Warning Options.    (line  897)
   40282 * Wcoverage-mismatch:                    Language Independent Options.
   40283                                                              (line   42)
   40284 * Wctor-dtor-privacy:                    C++ Dialect Options.
   40285                                                              (line  346)
   40286 * Wdeclaration-after-statement:          Warning Options.    (line  813)
   40287 * Wdeprecated:                           C++ Dialect Options.
   40288                                                              (line  403)
   40289 * Wdeprecated-declarations:              Warning Options.    (line 1096)
   40290 * Wdisabled-optimization:                Warning Options.    (line 1227)
   40291 * Wdiv-by-zero:                          Warning Options.    (line  697)
   40292 * weak_reference_mismatches:             Darwin Options.     (line  199)
   40293 * Weffc++:                               C++ Dialect Options.
   40294                                                              (line  373)
   40295 * Wempty-body:                           Warning Options.    (line  916)
   40296 * Wendif-labels <1>:                     Preprocessor Options.
   40297                                                              (line  138)
   40298 * Wendif-labels:                         Warning Options.    (line  823)
   40299 * Werror <1>:                            Warning Options.    (line   21)
   40300 * Werror:                                Preprocessor Options.
   40301                                                              (line  151)
   40302 * Werror=:                               Warning Options.    (line   24)
   40303 * Wextra:                                Warning Options.    (line 1002)
   40304 * Wfatal-errors:                         Warning Options.    (line   38)
   40305 * Wfloat-equal:                          Warning Options.    (line  713)
   40306 * Wformat <1>:                           Function Attributes.
   40307                                                              (line  369)
   40308 * Wformat:                               Warning Options.    (line  199)
   40309 * Wformat-extra-args:                    Warning Options.    (line  238)
   40310 * Wformat-nonliteral <1>:                Warning Options.    (line  256)
   40311 * Wformat-nonliteral:                    Function Attributes.
   40312                                                              (line  422)
   40313 * Wformat-security:                      Warning Options.    (line  261)
   40314 * Wformat-y2k:                           Warning Options.    (line  234)
   40315 * Wformat-zero-length:                   Warning Options.    (line  252)
   40316 * Wformat=2:                             Warning Options.    (line  272)
   40317 * whatsloaded:                           Darwin Options.     (line  199)
   40318 * whyload:                               Darwin Options.     (line  199)
   40319 * Wignored-qualifiers:                   Warning Options.    (line  312)
   40320 * Wimplicit:                             Warning Options.    (line  308)
   40321 * Wimplicit-function-declaration:        Warning Options.    (line  302)
   40322 * Wimplicit-int:                         Warning Options.    (line  298)
   40323 * Wimport <1>:                           Warning Options.    (line  186)
   40324 * Wimport:                               Preprocessor Options.
   40325                                                              (line  111)
   40326 * Winit-self:                            Warning Options.    (line  284)
   40327 * Winline <1>:                           Inline.             (line   63)
   40328 * Winline:                               Warning Options.    (line 1167)
   40329 * Wint-to-pointer-cast:                  Warning Options.    (line 1194)
   40330 * Winvalid-offsetof:                     Warning Options.    (line 1180)
   40331 * Winvalid-pch:                          Warning Options.    (line 1202)
   40332 * Wl:                                    Link Options.       (line  175)
   40333 * Wlarger-than-LEN:                      Warning Options.    (line  832)
   40334 * Wlogical-op:                           Warning Options.    (line  948)
   40335 * Wlong-long:                            Warning Options.    (line 1206)
   40336 * Wmain:                                 Warning Options.    (line  323)
   40337 * Wmissing-braces:                       Warning Options.    (line  329)
   40338 * Wmissing-declarations:                 Warning Options.    (line  994)
   40339 * Wmissing-field-initializers:           Warning Options.    (line 1002)
   40340 * Wmissing-format-attribute:             Warning Options.    (line 1028)
   40341 * Wmissing-include-dirs:                 Warning Options.    (line  339)
   40342 * Wmissing-noreturn:                     Warning Options.    (line 1020)
   40343 * Wmissing-parameter-type:               Warning Options.    (line  980)
   40344 * Wmissing-prototypes:                   Warning Options.    (line  988)
   40345 * Wmultichar:                            Warning Options.    (line 1047)
   40346 * Wnested-externs:                       Warning Options.    (line 1142)
   40347 * Wno-abi:                               C++ Dialect Options.
   40348                                                              (line  268)
   40349 * Wno-address:                           Warning Options.    (line  935)
   40350 * Wno-aggregate-return:                  Warning Options.    (line  953)
   40351 * Wno-all:                               Warning Options.    (line   99)
   40352 * Wno-array-bounds:                      Warning Options.    (line  692)
   40353 * Wno-assign-intercept:                  Objective-C and Objective-C++ Dialect Options.
   40354                                                              (line  198)
   40355 * Wno-attributes:                        Warning Options.    (line  958)
   40356 * Wno-bad-function-cast:                 Warning Options.    (line  855)
   40357 * Wno-cast-align:                        Warning Options.    (line  875)
   40358 * Wno-cast-qual:                         Warning Options.    (line  870)
   40359 * Wno-char-subscripts:                   Warning Options.    (line  189)
   40360 * Wno-clobbered:                         Warning Options.    (line  893)
   40361 * Wno-comment:                           Warning Options.    (line  194)
   40362 * Wno-conversion:                        Warning Options.    (line  897)
   40363 * Wno-ctor-dtor-privacy:                 C++ Dialect Options.
   40364                                                              (line  346)
   40365 * Wno-declaration-after-statement:       Warning Options.    (line  813)
   40366 * Wno-deprecated:                        C++ Dialect Options.
   40367                                                              (line  403)
   40368 * Wno-deprecated-declarations:           Warning Options.    (line 1096)
   40369 * Wno-disabled-optimization:             Warning Options.    (line 1227)
   40370 * Wno-div-by-zero:                       Warning Options.    (line  697)
   40371 * Wno-effc++:                            C++ Dialect Options.
   40372                                                              (line  373)
   40373 * Wno-empty-body:                        Warning Options.    (line  916)
   40374 * Wno-endif-labels:                      Warning Options.    (line  823)
   40375 * Wno-error:                             Warning Options.    (line   21)
   40376 * Wno-error=:                            Warning Options.    (line   24)
   40377 * Wno-extra:                             Warning Options.    (line 1002)
   40378 * Wno-fatal-errors:                      Warning Options.    (line   38)
   40379 * Wno-float-equal:                       Warning Options.    (line  713)
   40380 * Wno-format:                            Warning Options.    (line  199)
   40381 * Wno-format-extra-args:                 Warning Options.    (line  238)
   40382 * Wno-format-nonliteral:                 Warning Options.    (line  256)
   40383 * Wno-format-security:                   Warning Options.    (line  261)
   40384 * Wno-format-y2k:                        Warning Options.    (line  234)
   40385 * Wno-format-zero-length:                Warning Options.    (line  252)
   40386 * Wno-format=2:                          Warning Options.    (line  272)
   40387 * Wno-ignored-qualifiers:                Warning Options.    (line  312)
   40388 * Wno-implicit:                          Warning Options.    (line  308)
   40389 * Wno-implicit-function-declaration:     Warning Options.    (line  302)
   40390 * Wno-implicit-int:                      Warning Options.    (line  298)
   40391 * Wno-import:                            Warning Options.    (line  186)
   40392 * Wno-init-self:                         Warning Options.    (line  284)
   40393 * Wno-inline:                            Warning Options.    (line 1167)
   40394 * Wno-int-to-pointer-cast:               Warning Options.    (line 1194)
   40395 * Wno-invalid-offsetof:                  Warning Options.    (line 1180)
   40396 * Wno-invalid-pch:                       Warning Options.    (line 1202)
   40397 * Wno-logical-op:                        Warning Options.    (line  948)
   40398 * Wno-long-long:                         Warning Options.    (line 1206)
   40399 * Wno-main:                              Warning Options.    (line  323)
   40400 * Wno-missing-braces:                    Warning Options.    (line  329)
   40401 * Wno-missing-declarations:              Warning Options.    (line  994)
   40402 * Wno-missing-field-initializers:        Warning Options.    (line 1002)
   40403 * Wno-missing-format-attribute:          Warning Options.    (line 1028)
   40404 * Wno-missing-include-dirs:              Warning Options.    (line  339)
   40405 * Wno-missing-noreturn:                  Warning Options.    (line 1020)
   40406 * Wno-missing-parameter-type:            Warning Options.    (line  980)
   40407 * Wno-missing-prototypes:                Warning Options.    (line  988)
   40408 * Wno-multichar:                         Warning Options.    (line 1047)
   40409 * Wno-nested-externs:                    Warning Options.    (line 1142)
   40410 * Wno-non-template-friend:               C++ Dialect Options.
   40411                                                              (line  414)
   40412 * Wno-non-virtual-dtor:                  C++ Dialect Options.
   40413                                                              (line  351)
   40414 * Wno-nonnull:                           Warning Options.    (line  277)
   40415 * Wno-old-style-cast:                    C++ Dialect Options.
   40416                                                              (line  430)
   40417 * Wno-old-style-declaration:             Warning Options.    (line  970)
   40418 * Wno-old-style-definition:              Warning Options.    (line  976)
   40419 * Wno-overflow:                          Warning Options.    (line 1102)
   40420 * Wno-overlength-strings:                Warning Options.    (line 1247)
   40421 * Wno-overloaded-virtual:                C++ Dialect Options.
   40422                                                              (line  436)
   40423 * Wno-override-init:                     Warning Options.    (line 1105)
   40424 * Wno-packed:                            Warning Options.    (line 1113)
   40425 * Wno-padded:                            Warning Options.    (line 1130)
   40426 * Wno-parentheses:                       Warning Options.    (line  342)
   40427 * Wno-pmf-conversions <1>:               C++ Dialect Options.
   40428                                                              (line  455)
   40429 * Wno-pmf-conversions:                   Bound member functions.
   40430                                                              (line   35)
   40431 * Wno-pointer-arith:                     Warning Options.    (line  841)
   40432 * Wno-pointer-sign:                      Warning Options.    (line 1236)
   40433 * Wno-pointer-to-int-cast:               Warning Options.    (line 1198)
   40434 * Wno-pragmas:                           Warning Options.    (line  595)
   40435 * Wno-protocol:                          Objective-C and Objective-C++ Dialect Options.
   40436                                                              (line  202)
   40437 * Wno-redundant-decls:                   Warning Options.    (line 1137)
   40438 * Wno-reorder:                           C++ Dialect Options.
   40439                                                              (line  357)
   40440 * Wno-return-type:                       Warning Options.    (line  432)
   40441 * Wno-selector:                          Objective-C and Objective-C++ Dialect Options.
   40442                                                              (line  212)
   40443 * Wno-sequence-point:                    Warning Options.    (line  386)
   40444 * Wno-shadow:                            Warning Options.    (line  827)
   40445 * Wno-sign-compare:                      Warning Options.    (line  922)
   40446 * Wno-sign-conversion:                   Warning Options.    (line  929)
   40447 * Wno-sign-promo:                        C++ Dialect Options.
   40448                                                              (line  459)
   40449 * Wno-stack-protector:                   Warning Options.    (line 1242)
   40450 * Wno-strict-aliasing:                   Warning Options.    (line  600)
   40451 * Wno-strict-aliasing=n:                 Warning Options.    (line  608)
   40452 * Wno-strict-null-sentinel:              C++ Dialect Options.
   40453                                                              (line  407)
   40454 * Wno-strict-overflow:                   Warning Options.    (line  641)
   40455 * Wno-strict-prototypes:                 Warning Options.    (line  964)
   40456 * Wno-strict-selector-match:             Objective-C and Objective-C++ Dialect Options.
   40457                                                              (line  224)
   40458 * Wno-switch:                            Warning Options.    (line  447)
   40459 * Wno-switch-default:                    Warning Options.    (line  455)
   40460 * Wno-switch-enum:                       Warning Options.    (line  458)
   40461 * Wno-system-headers:                    Warning Options.    (line  702)
   40462 * Wno-traditional:                       Warning Options.    (line  728)
   40463 * Wno-traditional-conversion:            Warning Options.    (line  805)
   40464 * Wno-trigraphs:                         Warning Options.    (line  464)
   40465 * Wno-type-limits:                       Warning Options.    (line  848)
   40466 * Wno-undeclared-selector:               Objective-C and Objective-C++ Dialect Options.
   40467                                                              (line  232)
   40468 * Wno-undef:                             Warning Options.    (line  820)
   40469 * Wno-uninitialized:                     Warning Options.    (line  513)
   40470 * Wno-unknown-pragmas:                   Warning Options.    (line  588)
   40471 * Wno-unreachable-code:                  Warning Options.    (line 1145)
   40472 * Wno-unsafe-loop-optimizations:         Warning Options.    (line  835)
   40473 * Wno-unused:                            Warning Options.    (line  506)
   40474 * Wno-unused-function:                   Warning Options.    (line  469)
   40475 * Wno-unused-label:                      Warning Options.    (line  474)
   40476 * Wno-unused-parameter:                  Warning Options.    (line  481)
   40477 * Wno-unused-value:                      Warning Options.    (line  496)
   40478 * Wno-unused-variable:                   Warning Options.    (line  488)
   40479 * Wno-variadic-macros:                   Warning Options.    (line 1212)
   40480 * Wno-vla:                               Warning Options.    (line 1218)
   40481 * Wno-volatile-register-var:             Warning Options.    (line 1222)
   40482 * Wno-write-strings:                     Warning Options.    (line  881)
   40483 * Wnon-template-friend:                  C++ Dialect Options.
   40484                                                              (line  414)
   40485 * Wnon-virtual-dtor:                     C++ Dialect Options.
   40486                                                              (line  351)
   40487 * Wnonnull:                              Warning Options.    (line  277)
   40488 * Wnormalized=:                          Warning Options.    (line 1053)
   40489 * Wold-style-cast:                       C++ Dialect Options.
   40490                                                              (line  430)
   40491 * Wold-style-declaration:                Warning Options.    (line  970)
   40492 * Wold-style-definition:                 Warning Options.    (line  976)
   40493 * Woverflow:                             Warning Options.    (line 1102)
   40494 * Woverlength-strings:                   Warning Options.    (line 1247)
   40495 * Woverloaded-virtual:                   C++ Dialect Options.
   40496                                                              (line  436)
   40497 * Woverride-init:                        Warning Options.    (line 1105)
   40498 * Wp:                                    Preprocessor Options.
   40499                                                              (line   13)
   40500 * Wpacked:                               Warning Options.    (line 1113)
   40501 * Wpadded:                               Warning Options.    (line 1130)
   40502 * Wparentheses:                          Warning Options.    (line  342)
   40503 * Wpmf-conversions:                      C++ Dialect Options.
   40504                                                              (line  455)
   40505 * Wpointer-arith <1>:                    Warning Options.    (line  841)
   40506 * Wpointer-arith:                        Pointer Arith.      (line   13)
   40507 * Wpointer-sign:                         Warning Options.    (line 1236)
   40508 * Wpointer-to-int-cast:                  Warning Options.    (line 1198)
   40509 * Wpragmas:                              Warning Options.    (line  595)
   40510 * Wprotocol:                             Objective-C and Objective-C++ Dialect Options.
   40511                                                              (line  202)
   40512 * Wredundant-decls:                      Warning Options.    (line 1137)
   40513 * Wreorder:                              C++ Dialect Options.
   40514                                                              (line  357)
   40515 * Wreturn-type:                          Warning Options.    (line  432)
   40516 * Wselector:                             Objective-C and Objective-C++ Dialect Options.
   40517                                                              (line  212)
   40518 * Wsequence-point:                       Warning Options.    (line  386)
   40519 * Wshadow:                               Warning Options.    (line  827)
   40520 * Wsign-compare:                         Warning Options.    (line  922)
   40521 * Wsign-conversion:                      Warning Options.    (line  929)
   40522 * Wsign-promo:                           C++ Dialect Options.
   40523                                                              (line  459)
   40524 * Wstack-protector:                      Warning Options.    (line 1242)
   40525 * Wstrict-aliasing:                      Warning Options.    (line  600)
   40526 * Wstrict-aliasing=n:                    Warning Options.    (line  608)
   40527 * Wstrict-null-sentinel:                 C++ Dialect Options.
   40528                                                              (line  407)
   40529 * Wstrict-overflow:                      Warning Options.    (line  641)
   40530 * Wstrict-prototypes:                    Warning Options.    (line  964)
   40531 * Wstrict-selector-match:                Objective-C and Objective-C++ Dialect Options.
   40532                                                              (line  224)
   40533 * Wswitch:                               Warning Options.    (line  447)
   40534 * Wswitch-default:                       Warning Options.    (line  455)
   40535 * Wswitch-enum:                          Warning Options.    (line  458)
   40536 * Wsystem-headers <1>:                   Preprocessor Options.
   40537                                                              (line  155)
   40538 * Wsystem-headers:                       Warning Options.    (line  702)
   40539 * Wtraditional <1>:                      Warning Options.    (line  728)
   40540 * Wtraditional:                          Preprocessor Options.
   40541                                                              (line  105)
   40542 * Wtraditional-conversion <1>:           Warning Options.    (line  805)
   40543 * Wtraditional-conversion:               Protoize Caveats.   (line   31)
   40544 * Wtrigraphs <1>:                        Preprocessor Options.
   40545                                                              (line   93)
   40546 * Wtrigraphs:                            Warning Options.    (line  464)
   40547 * Wtype-limits:                          Warning Options.    (line  848)
   40548 * Wundeclared-selector:                  Objective-C and Objective-C++ Dialect Options.
   40549                                                              (line  232)
   40550 * Wundef <1>:                            Warning Options.    (line  820)
   40551 * Wundef:                                Preprocessor Options.
   40552                                                              (line  114)
   40553 * Wuninitialized:                        Warning Options.    (line  513)
   40554 * Wunknown-pragmas:                      Warning Options.    (line  588)
   40555 * Wunreachable-code:                     Warning Options.    (line 1145)
   40556 * Wunsafe-loop-optimizations:            Warning Options.    (line  835)
   40557 * Wunused:                               Warning Options.    (line  506)
   40558 * Wunused-function:                      Warning Options.    (line  469)
   40559 * Wunused-label:                         Warning Options.    (line  474)
   40560 * Wunused-macros:                        Preprocessor Options.
   40561                                                              (line  119)
   40562 * Wunused-parameter:                     Warning Options.    (line  481)
   40563 * Wunused-value:                         Warning Options.    (line  496)
   40564 * Wunused-variable:                      Warning Options.    (line  488)
   40565 * Wvariadic-macros:                      Warning Options.    (line 1212)
   40566 * Wvla:                                  Warning Options.    (line 1218)
   40567 * Wvolatile-register-var:                Warning Options.    (line 1222)
   40568 * Wwrite-strings:                        Warning Options.    (line  881)
   40569 * x <1>:                                 Preprocessor Options.
   40570                                                              (line  312)
   40571 * x:                                     Overall Options.    (line  116)
   40572 * Xassembler:                            Assembler Options.  (line   13)
   40573 * Xbind-lazy:                            VxWorks Options.    (line   26)
   40574 * Xbind-now:                             VxWorks Options.    (line   30)
   40575 * Xlinker:                               Link Options.       (line  163)
   40576 * Ym:                                    System V Options.   (line   26)
   40577 * YP:                                    System V Options.   (line   22)
   40578 
   40579 
   40580 File: gcc.info,  Node: Keyword Index,  Prev: Option Index,  Up: Top
   40581 
   40582 Keyword Index
   40583 *************
   40584 
   40585 [index]
   40586 * Menu:
   40587 
   40588 * ! in constraint:                       Multi-Alternative.  (line   33)
   40589 * # in constraint:                       Modifiers.          (line   57)
   40590 * #pragma:                               Pragmas.            (line    6)
   40591 * #pragma implementation:                C++ Interface.      (line   39)
   40592 * #pragma implementation, implied:       C++ Interface.      (line   46)
   40593 * #pragma interface:                     C++ Interface.      (line   20)
   40594 * #pragma, reason for not using:         Function Attributes.
   40595                                                              (line 1117)
   40596 * $:                                     Dollar Signs.       (line    6)
   40597 * % in constraint:                       Modifiers.          (line   45)
   40598 * %include:                              Spec Files.         (line   27)
   40599 * %include_noerr:                        Spec Files.         (line   31)
   40600 * %rename:                               Spec Files.         (line   35)
   40601 * & in constraint:                       Modifiers.          (line   25)
   40602 * ':                                     Incompatibilities.  (line  116)
   40603 * (:                                     Constructing Calls. (line   53)
   40604 * * in constraint:                       Modifiers.          (line   62)
   40605 * + in constraint:                       Modifiers.          (line   12)
   40606 * -lgcc, use with -nodefaultlibs:        Link Options.       (line   79)
   40607 * -lgcc, use with -nostdlib:             Link Options.       (line   79)
   40608 * -nodefaultlibs and unresolved references: Link Options.    (line   79)
   40609 * -nostdlib and unresolved references:   Link Options.       (line   79)
   40610 * .sdata/.sdata2 references (PowerPC):   RS/6000 and PowerPC Options.
   40611                                                              (line  629)
   40612 * //:                                    C++ Comments.       (line    6)
   40613 * 0 in constraint:                       Simple Constraints. (line  115)
   40614 * < in constraint:                       Simple Constraints. (line   46)
   40615 * = in constraint:                       Modifiers.          (line    8)
   40616 * > in constraint:                       Simple Constraints. (line   50)
   40617 * ? in constraint:                       Multi-Alternative.  (line   27)
   40618 * ?: extensions:                         Conditionals.       (line    6)
   40619 * ?: side effect:                        Conditionals.       (line   20)
   40620 * _ in variables in macros:              Typeof.             (line   42)
   40621 * __builtin___clear_cache:               Other Builtins.     (line  272)
   40622 * __builtin___fprintf_chk:               Object Size Checking.
   40623                                                              (line    6)
   40624 * __builtin___memcpy_chk:                Object Size Checking.
   40625                                                              (line    6)
   40626 * __builtin___memmove_chk:               Object Size Checking.
   40627                                                              (line    6)
   40628 * __builtin___mempcpy_chk:               Object Size Checking.
   40629                                                              (line    6)
   40630 * __builtin___memset_chk:                Object Size Checking.
   40631                                                              (line    6)
   40632 * __builtin___printf_chk:                Object Size Checking.
   40633                                                              (line    6)
   40634 * __builtin___snprintf_chk:              Object Size Checking.
   40635                                                              (line    6)
   40636 * __builtin___sprintf_chk:               Object Size Checking.
   40637                                                              (line    6)
   40638 * __builtin___stpcpy_chk:                Object Size Checking.
   40639                                                              (line    6)
   40640 * __builtin___strcat_chk:                Object Size Checking.
   40641                                                              (line    6)
   40642 * __builtin___strcpy_chk:                Object Size Checking.
   40643                                                              (line    6)
   40644 * __builtin___strncat_chk:               Object Size Checking.
   40645                                                              (line    6)
   40646 * __builtin___strncpy_chk:               Object Size Checking.
   40647                                                              (line    6)
   40648 * __builtin___vfprintf_chk:              Object Size Checking.
   40649                                                              (line    6)
   40650 * __builtin___vprintf_chk:               Object Size Checking.
   40651                                                              (line    6)
   40652 * __builtin___vsnprintf_chk:             Object Size Checking.
   40653                                                              (line    6)
   40654 * __builtin___vsprintf_chk:              Object Size Checking.
   40655                                                              (line    6)
   40656 * __builtin_apply:                       Constructing Calls. (line   31)
   40657 * __builtin_apply_args:                  Constructing Calls. (line   20)
   40658 * __builtin_bswap32:                     Other Builtins.     (line  473)
   40659 * __builtin_bswap64:                     Other Builtins.     (line  478)
   40660 * __builtin_choose_expr:                 Other Builtins.     (line  154)
   40661 * __builtin_clz:                         Other Builtins.     (line  406)
   40662 * __builtin_clzl:                        Other Builtins.     (line  424)
   40663 * __builtin_clzll:                       Other Builtins.     (line  444)
   40664 * __builtin_constant_p:                  Other Builtins.     (line  194)
   40665 * __builtin_ctz:                         Other Builtins.     (line  410)
   40666 * __builtin_ctzl:                        Other Builtins.     (line  428)
   40667 * __builtin_ctzll:                       Other Builtins.     (line  448)
   40668 * __builtin_expect:                      Other Builtins.     (line  240)
   40669 * __builtin_ffs:                         Other Builtins.     (line  402)
   40670 * __builtin_ffsl:                        Other Builtins.     (line  420)
   40671 * __builtin_ffsll:                       Other Builtins.     (line  440)
   40672 * __builtin_frame_address:               Return Address.     (line   34)
   40673 * __builtin_huge_val:                    Other Builtins.     (line  323)
   40674 * __builtin_huge_valf:                   Other Builtins.     (line  328)
   40675 * __builtin_huge_vall:                   Other Builtins.     (line  331)
   40676 * __builtin_inf:                         Other Builtins.     (line  335)
   40677 * __builtin_infd128:                     Other Builtins.     (line  345)
   40678 * __builtin_infd32:                      Other Builtins.     (line  339)
   40679 * __builtin_infd64:                      Other Builtins.     (line  342)
   40680 * __builtin_inff:                        Other Builtins.     (line  349)
   40681 * __builtin_infl:                        Other Builtins.     (line  354)
   40682 * __builtin_isfinite:                    Other Builtins.     (line    6)
   40683 * __builtin_isgreater:                   Other Builtins.     (line    6)
   40684 * __builtin_isgreaterequal:              Other Builtins.     (line    6)
   40685 * __builtin_isless:                      Other Builtins.     (line    6)
   40686 * __builtin_islessequal:                 Other Builtins.     (line    6)
   40687 * __builtin_islessgreater:               Other Builtins.     (line    6)
   40688 * __builtin_isnormal:                    Other Builtins.     (line    6)
   40689 * __builtin_isunordered:                 Other Builtins.     (line    6)
   40690 * __builtin_nan:                         Other Builtins.     (line  358)
   40691 * __builtin_nand128:                     Other Builtins.     (line  380)
   40692 * __builtin_nand32:                      Other Builtins.     (line  374)
   40693 * __builtin_nand64:                      Other Builtins.     (line  377)
   40694 * __builtin_nanf:                        Other Builtins.     (line  384)
   40695 * __builtin_nanl:                        Other Builtins.     (line  387)
   40696 * __builtin_nans:                        Other Builtins.     (line  391)
   40697 * __builtin_nansf:                       Other Builtins.     (line  395)
   40698 * __builtin_nansl:                       Other Builtins.     (line  398)
   40699 * __builtin_object_size:                 Object Size Checking.
   40700                                                              (line   11)
   40701 * __builtin_offsetof:                    Offsetof.           (line    6)
   40702 * __builtin_parity:                      Other Builtins.     (line  417)
   40703 * __builtin_parityl:                     Other Builtins.     (line  436)
   40704 * __builtin_parityll:                    Other Builtins.     (line  456)
   40705 * __builtin_popcount:                    Other Builtins.     (line  414)
   40706 * __builtin_popcountl:                   Other Builtins.     (line  432)
   40707 * __builtin_popcountll:                  Other Builtins.     (line  452)
   40708 * __builtin_powi:                        Other Builtins.     (line    6)
   40709 * __builtin_powif:                       Other Builtins.     (line  465)
   40710 * __builtin_powil:                       Other Builtins.     (line  469)
   40711 * __builtin_prefetch:                    Other Builtins.     (line  284)
   40712 * __builtin_return:                      Constructing Calls. (line   48)
   40713 * __builtin_return_address:              Return Address.     (line   11)
   40714 * __builtin_trap:                        Other Builtins.     (line  264)
   40715 * __builtin_types_compatible_p:          Other Builtins.     (line  108)
   40716 * __complex__ keyword:                   Complex.            (line    6)
   40717 * __declspec(dllexport):                 Function Attributes.
   40718                                                              (line  245)
   40719 * __declspec(dllimport):                 Function Attributes.
   40720                                                              (line  275)
   40721 * __extension__:                         Alternate Keywords. (line   29)
   40722 * __float128 data type:                  Floating Types.     (line    6)
   40723 * __float80 data type:                   Floating Types.     (line    6)
   40724 * __func__ identifier:                   Function Names.     (line    6)
   40725 * __FUNCTION__ identifier:               Function Names.     (line    6)
   40726 * __imag__ keyword:                      Complex.            (line   27)
   40727 * __PRETTY_FUNCTION__ identifier:        Function Names.     (line    6)
   40728 * __real__ keyword:                      Complex.            (line   27)
   40729 * __STDC_HOSTED__:                       Standards.          (line   13)
   40730 * __sync_add_and_fetch:                  Atomic Builtins.    (line   57)
   40731 * __sync_and_and_fetch:                  Atomic Builtins.    (line   57)
   40732 * __sync_bool_compare_and_swap:          Atomic Builtins.    (line   65)
   40733 * __sync_fetch_and_add:                  Atomic Builtins.    (line   45)
   40734 * __sync_fetch_and_and:                  Atomic Builtins.    (line   45)
   40735 * __sync_fetch_and_nand:                 Atomic Builtins.    (line   45)
   40736 * __sync_fetch_and_or:                   Atomic Builtins.    (line   45)
   40737 * __sync_fetch_and_sub:                  Atomic Builtins.    (line   45)
   40738 * __sync_fetch_and_xor:                  Atomic Builtins.    (line   45)
   40739 * __sync_lock_release:                   Atomic Builtins.    (line   95)
   40740 * __sync_lock_test_and_set:              Atomic Builtins.    (line   77)
   40741 * __sync_nand_and_fetch:                 Atomic Builtins.    (line   57)
   40742 * __sync_or_and_fetch:                   Atomic Builtins.    (line   57)
   40743 * __sync_sub_and_fetch:                  Atomic Builtins.    (line   57)
   40744 * __sync_synchronize:                    Atomic Builtins.    (line   74)
   40745 * __sync_val_compare_and_swap:           Atomic Builtins.    (line   65)
   40746 * __sync_xor_and_fetch:                  Atomic Builtins.    (line   57)
   40747 * __thread:                              Thread-Local.       (line    6)
   40748 * _Accum data type:                      Fixed-Point.        (line    6)
   40749 * _Complex keyword:                      Complex.            (line    6)
   40750 * _Decimal128 data type:                 Decimal Float.      (line    6)
   40751 * _Decimal32 data type:                  Decimal Float.      (line    6)
   40752 * _Decimal64 data type:                  Decimal Float.      (line    6)
   40753 * _exit:                                 Other Builtins.     (line    6)
   40754 * _Exit:                                 Other Builtins.     (line    6)
   40755 * _Fract data type:                      Fixed-Point.        (line    6)
   40756 * _Sat data type:                        Fixed-Point.        (line    6)
   40757 * ABI:                                   Compatibility.      (line    6)
   40758 * abort:                                 Other Builtins.     (line    6)
   40759 * abs:                                   Other Builtins.     (line    6)
   40760 * accessing volatiles:                   Volatiles.          (line    6)
   40761 * acos:                                  Other Builtins.     (line    6)
   40762 * acosf:                                 Other Builtins.     (line    6)
   40763 * acosh:                                 Other Builtins.     (line    6)
   40764 * acoshf:                                Other Builtins.     (line    6)
   40765 * acoshl:                                Other Builtins.     (line    6)
   40766 * acosl:                                 Other Builtins.     (line    6)
   40767 * Ada:                                   G++ and GCC.        (line   30)
   40768 * additional floating types:             Floating Types.     (line    6)
   40769 * address constraints:                   Simple Constraints. (line  142)
   40770 * address of a label:                    Labels as Values.   (line    6)
   40771 * address_operand:                       Simple Constraints. (line  146)
   40772 * alias attribute:                       Function Attributes.
   40773                                                              (line   34)
   40774 * aliasing of parameters:                Code Gen Options.   (line  374)
   40775 * aligned attribute <1>:                 Variable Attributes.
   40776                                                              (line   23)
   40777 * aligned attribute <2>:                 Function Attributes.
   40778                                                              (line   47)
   40779 * aligned attribute:                     Type Attributes.    (line   31)
   40780 * alignment:                             Alignment.          (line    6)
   40781 * alloc_size attribute:                  Function Attributes.
   40782                                                              (line   67)
   40783 * alloca:                                Other Builtins.     (line    6)
   40784 * alloca vs variable-length arrays:      Variable Length.    (line   27)
   40785 * Allow nesting in an interrupt handler on the Blackfin processor.: Function Attributes.
   40786                                                              (line  651)
   40787 * alternate keywords:                    Alternate Keywords. (line    6)
   40788 * always_inline function attribute:      Function Attributes.
   40789                                                              (line   88)
   40790 * AMD x86-64 Options:                    i386 and x86-64 Options.
   40791                                                              (line    6)
   40792 * AMD1:                                  Standards.          (line   13)
   40793 * ANSI C:                                Standards.          (line   13)
   40794 * ANSI C standard:                       Standards.          (line   13)
   40795 * ANSI C89:                              Standards.          (line   13)
   40796 * ANSI support:                          C Dialect Options.  (line   10)
   40797 * ANSI X3.159-1989:                      Standards.          (line   13)
   40798 * apostrophes:                           Incompatibilities.  (line  116)
   40799 * application binary interface:          Compatibility.      (line    6)
   40800 * ARC Options:                           ARC Options.        (line    6)
   40801 * ARM [Annotated C++ Reference Manual]:  Backwards Compatibility.
   40802                                                              (line    6)
   40803 * ARM options:                           ARM Options.        (line    6)
   40804 * arrays of length zero:                 Zero Length.        (line    6)
   40805 * arrays of variable length:             Variable Length.    (line    6)
   40806 * arrays, non-lvalue:                    Subscripting.       (line    6)
   40807 * artificial function attribute:         Function Attributes.
   40808                                                              (line  130)
   40809 * asin:                                  Other Builtins.     (line    6)
   40810 * asinf:                                 Other Builtins.     (line    6)
   40811 * asinh:                                 Other Builtins.     (line    6)
   40812 * asinhf:                                Other Builtins.     (line    6)
   40813 * asinhl:                                Other Builtins.     (line    6)
   40814 * asinl:                                 Other Builtins.     (line    6)
   40815 * asm constraints:                       Constraints.        (line    6)
   40816 * asm expressions:                       Extended Asm.       (line    6)
   40817 * assembler instructions:                Extended Asm.       (line    6)
   40818 * assembler names for identifiers:       Asm Labels.         (line    6)
   40819 * assembly code, invalid:                Bug Criteria.       (line   12)
   40820 * atan:                                  Other Builtins.     (line    6)
   40821 * atan2:                                 Other Builtins.     (line    6)
   40822 * atan2f:                                Other Builtins.     (line    6)
   40823 * atan2l:                                Other Builtins.     (line    6)
   40824 * atanf:                                 Other Builtins.     (line    6)
   40825 * atanh:                                 Other Builtins.     (line    6)
   40826 * atanhf:                                Other Builtins.     (line    6)
   40827 * atanhl:                                Other Builtins.     (line    6)
   40828 * atanl:                                 Other Builtins.     (line    6)
   40829 * attribute of types:                    Type Attributes.    (line    6)
   40830 * attribute of variables:                Variable Attributes.
   40831                                                              (line    6)
   40832 * attribute syntax:                      Attribute Syntax.   (line    6)
   40833 * autoincrement/decrement addressing:    Simple Constraints. (line   28)
   40834 * automatic inline for C++ member fns:   Inline.             (line   71)
   40835 * AVR Options:                           AVR Options.        (line    6)
   40836 * Backwards Compatibility:               Backwards Compatibility.
   40837                                                              (line    6)
   40838 * base class members:                    Name lookup.        (line    6)
   40839 * bcmp:                                  Other Builtins.     (line    6)
   40840 * below100 attribute:                    Variable Attributes.
   40841                                                              (line  480)
   40842 * binary compatibility:                  Compatibility.      (line    6)
   40843 * Binary constants using the 0b prefix:  Binary constants.   (line    6)
   40844 * Blackfin Options:                      Blackfin Options.   (line    6)
   40845 * bound pointer to member function:      Bound member functions.
   40846                                                              (line    6)
   40847 * bounds checking:                       Optimize Options.   (line  330)
   40848 * bug criteria:                          Bug Criteria.       (line    6)
   40849 * bugs:                                  Bugs.               (line    6)
   40850 * bugs, known:                           Trouble.            (line    6)
   40851 * built-in functions <1>:                C Dialect Options.  (line  170)
   40852 * built-in functions:                    Other Builtins.     (line    6)
   40853 * bzero:                                 Other Builtins.     (line    6)
   40854 * C compilation options:                 Invoking GCC.       (line   17)
   40855 * C intermediate output, nonexistent:    G++ and GCC.        (line   35)
   40856 * C language extensions:                 C Extensions.       (line    6)
   40857 * C language, traditional:               C Dialect Options.  (line  250)
   40858 * C standard:                            Standards.          (line   13)
   40859 * C standards:                           Standards.          (line   13)
   40860 * c++:                                   Invoking G++.       (line   14)
   40861 * C++:                                   G++ and GCC.        (line   30)
   40862 * C++ comments:                          C++ Comments.       (line    6)
   40863 * C++ compilation options:               Invoking GCC.       (line   23)
   40864 * C++ interface and implementation headers: C++ Interface.   (line    6)
   40865 * C++ language extensions:               C++ Extensions.     (line    6)
   40866 * C++ member fns, automatically inline:  Inline.             (line   71)
   40867 * C++ misunderstandings:                 C++ Misunderstandings.
   40868                                                              (line    6)
   40869 * C++ options, command line:             C++ Dialect Options.
   40870                                                              (line    6)
   40871 * C++ pragmas, effect on inlining:       C++ Interface.      (line   66)
   40872 * C++ source file suffixes:              Invoking G++.       (line    6)
   40873 * C++ static data, declaring and defining: Static Definitions.
   40874                                                              (line    6)
   40875 * C89:                                   Standards.          (line   13)
   40876 * C90:                                   Standards.          (line   13)
   40877 * C94:                                   Standards.          (line   13)
   40878 * C95:                                   Standards.          (line   13)
   40879 * C99:                                   Standards.          (line   13)
   40880 * C9X:                                   Standards.          (line   13)
   40881 * C_INCLUDE_PATH:                        Environment Variables.
   40882                                                              (line  127)
   40883 * cabs:                                  Other Builtins.     (line    6)
   40884 * cabsf:                                 Other Builtins.     (line    6)
   40885 * cabsl:                                 Other Builtins.     (line    6)
   40886 * cacos:                                 Other Builtins.     (line    6)
   40887 * cacosf:                                Other Builtins.     (line    6)
   40888 * cacosh:                                Other Builtins.     (line    6)
   40889 * cacoshf:                               Other Builtins.     (line    6)
   40890 * cacoshl:                               Other Builtins.     (line    6)
   40891 * cacosl:                                Other Builtins.     (line    6)
   40892 * calling functions through the function vector on H8/300, M16C, and M32C processors: Function Attributes.
   40893                                                              (line  461)
   40894 * calloc:                                Other Builtins.     (line    6)
   40895 * carg:                                  Other Builtins.     (line    6)
   40896 * cargf:                                 Other Builtins.     (line    6)
   40897 * cargl:                                 Other Builtins.     (line    6)
   40898 * case labels in initializers:           Designated Inits.   (line    6)
   40899 * case ranges:                           Case Ranges.        (line    6)
   40900 * casin:                                 Other Builtins.     (line    6)
   40901 * casinf:                                Other Builtins.     (line    6)
   40902 * casinh:                                Other Builtins.     (line    6)
   40903 * casinhf:                               Other Builtins.     (line    6)
   40904 * casinhl:                               Other Builtins.     (line    6)
   40905 * casinl:                                Other Builtins.     (line    6)
   40906 * cast to a union:                       Cast to Union.      (line    6)
   40907 * catan:                                 Other Builtins.     (line    6)
   40908 * catanf:                                Other Builtins.     (line    6)
   40909 * catanh:                                Other Builtins.     (line    6)
   40910 * catanhf:                               Other Builtins.     (line    6)
   40911 * catanhl:                               Other Builtins.     (line    6)
   40912 * catanl:                                Other Builtins.     (line    6)
   40913 * cbrt:                                  Other Builtins.     (line    6)
   40914 * cbrtf:                                 Other Builtins.     (line    6)
   40915 * cbrtl:                                 Other Builtins.     (line    6)
   40916 * ccos:                                  Other Builtins.     (line    6)
   40917 * ccosf:                                 Other Builtins.     (line    6)
   40918 * ccosh:                                 Other Builtins.     (line    6)
   40919 * ccoshf:                                Other Builtins.     (line    6)
   40920 * ccoshl:                                Other Builtins.     (line    6)
   40921 * ccosl:                                 Other Builtins.     (line    6)
   40922 * ceil:                                  Other Builtins.     (line    6)
   40923 * ceilf:                                 Other Builtins.     (line    6)
   40924 * ceill:                                 Other Builtins.     (line    6)
   40925 * cexp:                                  Other Builtins.     (line    6)
   40926 * cexpf:                                 Other Builtins.     (line    6)
   40927 * cexpl:                                 Other Builtins.     (line    6)
   40928 * character set, execution:              Preprocessor Options.
   40929                                                              (line  498)
   40930 * character set, input:                  Preprocessor Options.
   40931                                                              (line  511)
   40932 * character set, input normalization:    Warning Options.    (line 1053)
   40933 * character set, wide execution:         Preprocessor Options.
   40934                                                              (line  503)
   40935 * cimag:                                 Other Builtins.     (line    6)
   40936 * cimagf:                                Other Builtins.     (line    6)
   40937 * cimagl:                                Other Builtins.     (line    6)
   40938 * cleanup attribute:                     Variable Attributes.
   40939                                                              (line   83)
   40940 * clog:                                  Other Builtins.     (line    6)
   40941 * clogf:                                 Other Builtins.     (line    6)
   40942 * clogl:                                 Other Builtins.     (line    6)
   40943 * COBOL:                                 G++ and GCC.        (line   23)
   40944 * code generation conventions:           Code Gen Options.   (line    6)
   40945 * code, mixed with declarations:         Mixed Declarations. (line    6)
   40946 * cold function attribute:               Function Attributes.
   40947                                                              (line  785)
   40948 * command options:                       Invoking GCC.       (line    6)
   40949 * comments, C++ style:                   C++ Comments.       (line    6)
   40950 * common attribute:                      Variable Attributes.
   40951                                                              (line   99)
   40952 * comparison of signed and unsigned values, warning: Warning Options.
   40953                                                              (line  922)
   40954 * compiler bugs, reporting:              Bug Reporting.      (line    6)
   40955 * compiler compared to C++ preprocessor: G++ and GCC.        (line   35)
   40956 * compiler options, C++:                 C++ Dialect Options.
   40957                                                              (line    6)
   40958 * compiler options, Objective-C and Objective-C++: Objective-C and Objective-C++ Dialect Options.
   40959                                                              (line    6)
   40960 * compiler version, specifying:          Target Options.     (line    6)
   40961 * COMPILER_PATH:                         Environment Variables.
   40962                                                              (line   88)
   40963 * complex conjugation:                   Complex.            (line   34)
   40964 * complex numbers:                       Complex.            (line    6)
   40965 * compound literals:                     Compound Literals.  (line    6)
   40966 * computed gotos:                        Labels as Values.   (line    6)
   40967 * conditional expressions, extensions:   Conditionals.       (line    6)
   40968 * conflicting types:                     Disappointments.    (line   21)
   40969 * conj:                                  Other Builtins.     (line    6)
   40970 * conjf:                                 Other Builtins.     (line    6)
   40971 * conjl:                                 Other Builtins.     (line    6)
   40972 * const applied to function:             Function Attributes.
   40973                                                              (line    6)
   40974 * const function attribute:              Function Attributes.
   40975                                                              (line  177)
   40976 * constants in constraints:              Simple Constraints. (line   58)
   40977 * constraint modifier characters:        Modifiers.          (line    6)
   40978 * constraint, matching:                  Simple Constraints. (line  127)
   40979 * constraints, asm:                      Constraints.        (line    6)
   40980 * constraints, machine specific:         Machine Constraints.
   40981                                                              (line    6)
   40982 * constructing calls:                    Constructing Calls. (line    6)
   40983 * constructor expressions:               Compound Literals.  (line    6)
   40984 * constructor function attribute:        Function Attributes.
   40985                                                              (line  205)
   40986 * contributors:                          Contributors.       (line    6)
   40987 * copysign:                              Other Builtins.     (line    6)
   40988 * copysignf:                             Other Builtins.     (line    6)
   40989 * copysignl:                             Other Builtins.     (line    6)
   40990 * core dump:                             Bug Criteria.       (line    9)
   40991 * cos:                                   Other Builtins.     (line    6)
   40992 * cosf:                                  Other Builtins.     (line    6)
   40993 * cosh:                                  Other Builtins.     (line    6)
   40994 * coshf:                                 Other Builtins.     (line    6)
   40995 * coshl:                                 Other Builtins.     (line    6)
   40996 * cosl:                                  Other Builtins.     (line    6)
   40997 * CPATH:                                 Environment Variables.
   40998                                                              (line  126)
   40999 * CPLUS_INCLUDE_PATH:                    Environment Variables.
   41000                                                              (line  128)
   41001 * cpow:                                  Other Builtins.     (line    6)
   41002 * cpowf:                                 Other Builtins.     (line    6)
   41003 * cpowl:                                 Other Builtins.     (line    6)
   41004 * cproj:                                 Other Builtins.     (line    6)
   41005 * cprojf:                                Other Builtins.     (line    6)
   41006 * cprojl:                                Other Builtins.     (line    6)
   41007 * creal:                                 Other Builtins.     (line    6)
   41008 * crealf:                                Other Builtins.     (line    6)
   41009 * creall:                                Other Builtins.     (line    6)
   41010 * CRIS Options:                          CRIS Options.       (line    6)
   41011 * cross compiling:                       Target Options.     (line    6)
   41012 * CRX Options:                           CRX Options.        (line    6)
   41013 * csin:                                  Other Builtins.     (line    6)
   41014 * csinf:                                 Other Builtins.     (line    6)
   41015 * csinh:                                 Other Builtins.     (line    6)
   41016 * csinhf:                                Other Builtins.     (line    6)
   41017 * csinhl:                                Other Builtins.     (line    6)
   41018 * csinl:                                 Other Builtins.     (line    6)
   41019 * csqrt:                                 Other Builtins.     (line    6)
   41020 * csqrtf:                                Other Builtins.     (line    6)
   41021 * csqrtl:                                Other Builtins.     (line    6)
   41022 * ctan:                                  Other Builtins.     (line    6)
   41023 * ctanf:                                 Other Builtins.     (line    6)
   41024 * ctanh:                                 Other Builtins.     (line    6)
   41025 * ctanhf:                                Other Builtins.     (line    6)
   41026 * ctanhl:                                Other Builtins.     (line    6)
   41027 * ctanl:                                 Other Builtins.     (line    6)
   41028 * Darwin options:                        Darwin Options.     (line    6)
   41029 * dcgettext:                             Other Builtins.     (line    6)
   41030 * DD integer suffix:                     Decimal Float.      (line    6)
   41031 * dd integer suffix:                     Decimal Float.      (line    6)
   41032 * deallocating variable length arrays:   Variable Length.    (line   23)
   41033 * debugging information options:         Debugging Options.  (line    6)
   41034 * decimal floating types:                Decimal Float.      (line    6)
   41035 * declaration scope:                     Incompatibilities.  (line   80)
   41036 * declarations inside expressions:       Statement Exprs.    (line    6)
   41037 * declarations, mixed with code:         Mixed Declarations. (line    6)
   41038 * declaring attributes of functions:     Function Attributes.
   41039                                                              (line    6)
   41040 * declaring static data in C++:          Static Definitions. (line    6)
   41041 * defining static data in C++:           Static Definitions. (line    6)
   41042 * dependencies for make as output:       Environment Variables.
   41043                                                              (line  154)
   41044 * dependencies, make:                    Preprocessor Options.
   41045                                                              (line  175)
   41046 * DEPENDENCIES_OUTPUT:                   Environment Variables.
   41047                                                              (line  153)
   41048 * dependent name lookup:                 Name lookup.        (line    6)
   41049 * deprecated attribute:                  Variable Attributes.
   41050                                                              (line  107)
   41051 * deprecated attribute.:                 Function Attributes.
   41052                                                              (line  227)
   41053 * designated initializers:               Designated Inits.   (line    6)
   41054 * designator lists:                      Designated Inits.   (line   94)
   41055 * designators:                           Designated Inits.   (line   61)
   41056 * destructor function attribute:         Function Attributes.
   41057                                                              (line  205)
   41058 * df integer suffix:                     Decimal Float.      (line    6)
   41059 * DF integer suffix:                     Decimal Float.      (line    6)
   41060 * dgettext:                              Other Builtins.     (line    6)
   41061 * diagnostic messages:                   Language Independent Options.
   41062                                                              (line    6)
   41063 * dialect options:                       C Dialect Options.  (line    6)
   41064 * digits in constraint:                  Simple Constraints. (line  115)
   41065 * directory options:                     Directory Options.  (line    6)
   41066 * dl integer suffix:                     Decimal Float.      (line    6)
   41067 * DL integer suffix:                     Decimal Float.      (line    6)
   41068 * dollar signs in identifier names:      Dollar Signs.       (line    6)
   41069 * double-word arithmetic:                Long Long.          (line    6)
   41070 * downward funargs:                      Nested Functions.   (line    6)
   41071 * drem:                                  Other Builtins.     (line    6)
   41072 * dremf:                                 Other Builtins.     (line    6)
   41073 * dreml:                                 Other Builtins.     (line    6)
   41074 * E in constraint:                       Simple Constraints. (line   77)
   41075 * earlyclobber operand:                  Modifiers.          (line   25)
   41076 * eight bit data on the H8/300, H8/300H, and H8S: Function Attributes.
   41077                                                              (line  328)
   41078 * empty structures:                      Empty Structures.   (line    6)
   41079 * environment variables:                 Environment Variables.
   41080                                                              (line    6)
   41081 * erf:                                   Other Builtins.     (line    6)
   41082 * erfc:                                  Other Builtins.     (line    6)
   41083 * erfcf:                                 Other Builtins.     (line    6)
   41084 * erfcl:                                 Other Builtins.     (line    6)
   41085 * erff:                                  Other Builtins.     (line    6)
   41086 * erfl:                                  Other Builtins.     (line    6)
   41087 * error function attribute:              Function Attributes.
   41088                                                              (line  146)
   41089 * error messages:                        Warnings and Errors.
   41090                                                              (line    6)
   41091 * escaped newlines:                      Escaped Newlines.   (line    6)
   41092 * exception handler functions on the Blackfin processor: Function Attributes.
   41093                                                              (line  338)
   41094 * exclamation point:                     Multi-Alternative.  (line   33)
   41095 * exit:                                  Other Builtins.     (line    6)
   41096 * exp:                                   Other Builtins.     (line    6)
   41097 * exp10:                                 Other Builtins.     (line    6)
   41098 * exp10f:                                Other Builtins.     (line    6)
   41099 * exp10l:                                Other Builtins.     (line    6)
   41100 * exp2:                                  Other Builtins.     (line    6)
   41101 * exp2f:                                 Other Builtins.     (line    6)
   41102 * exp2l:                                 Other Builtins.     (line    6)
   41103 * expf:                                  Other Builtins.     (line    6)
   41104 * expl:                                  Other Builtins.     (line    6)
   41105 * explicit register variables:           Explicit Reg Vars.  (line    6)
   41106 * expm1:                                 Other Builtins.     (line    6)
   41107 * expm1f:                                Other Builtins.     (line    6)
   41108 * expm1l:                                Other Builtins.     (line    6)
   41109 * expressions containing statements:     Statement Exprs.    (line    6)
   41110 * expressions, constructor:              Compound Literals.  (line    6)
   41111 * extended asm:                          Extended Asm.       (line    6)
   41112 * extensible constraints:                Simple Constraints. (line  151)
   41113 * extensions, ?::                        Conditionals.       (line    6)
   41114 * extensions, C language:                C Extensions.       (line    6)
   41115 * extensions, C++ language:              C++ Extensions.     (line    6)
   41116 * external declaration scope:            Incompatibilities.  (line   80)
   41117 * externally_visible attribute.:         Function Attributes.
   41118                                                              (line 1108)
   41119 * F in constraint:                       Simple Constraints. (line   82)
   41120 * fabs:                                  Other Builtins.     (line    6)
   41121 * fabsf:                                 Other Builtins.     (line    6)
   41122 * fabsl:                                 Other Builtins.     (line    6)
   41123 * fatal signal:                          Bug Criteria.       (line    9)
   41124 * fdim:                                  Other Builtins.     (line    6)
   41125 * fdimf:                                 Other Builtins.     (line    6)
   41126 * fdiml:                                 Other Builtins.     (line    6)
   41127 * FDL, GNU Free Documentation License:   GNU Free Documentation License.
   41128                                                              (line    6)
   41129 * ffs:                                   Other Builtins.     (line    6)
   41130 * file name suffix:                      Overall Options.    (line   14)
   41131 * file names:                            Link Options.       (line   10)
   41132 * fixed-point types:                     Fixed-Point.        (line    6)
   41133 * flatten function attribute:            Function Attributes.
   41134                                                              (line  137)
   41135 * flexible array members:                Zero Length.        (line    6)
   41136 * float as function value type:          Incompatibilities.  (line  141)
   41137 * floating point precision <1>:          Disappointments.    (line   68)
   41138 * floating point precision:              Optimize Options.   (line 1163)
   41139 * floor:                                 Other Builtins.     (line    6)
   41140 * floorf:                                Other Builtins.     (line    6)
   41141 * floorl:                                Other Builtins.     (line    6)
   41142 * fma:                                   Other Builtins.     (line    6)
   41143 * fmaf:                                  Other Builtins.     (line    6)
   41144 * fmal:                                  Other Builtins.     (line    6)
   41145 * fmax:                                  Other Builtins.     (line    6)
   41146 * fmaxf:                                 Other Builtins.     (line    6)
   41147 * fmaxl:                                 Other Builtins.     (line    6)
   41148 * fmin:                                  Other Builtins.     (line    6)
   41149 * fminf:                                 Other Builtins.     (line    6)
   41150 * fminl:                                 Other Builtins.     (line    6)
   41151 * fmod:                                  Other Builtins.     (line    6)
   41152 * fmodf:                                 Other Builtins.     (line    6)
   41153 * fmodl:                                 Other Builtins.     (line    6)
   41154 * force_align_arg_pointer attribute:     Function Attributes.
   41155                                                              (line  827)
   41156 * format function attribute:             Function Attributes.
   41157                                                              (line  369)
   41158 * format_arg function attribute:         Function Attributes.
   41159                                                              (line  422)
   41160 * Fortran:                               G++ and GCC.        (line    6)
   41161 * forwarding calls:                      Constructing Calls. (line    6)
   41162 * fprintf:                               Other Builtins.     (line    6)
   41163 * fprintf_unlocked:                      Other Builtins.     (line    6)
   41164 * fputs:                                 Other Builtins.     (line    6)
   41165 * fputs_unlocked:                        Other Builtins.     (line    6)
   41166 * freestanding environment:              Standards.          (line   13)
   41167 * freestanding implementation:           Standards.          (line   13)
   41168 * frexp:                                 Other Builtins.     (line    6)
   41169 * frexpf:                                Other Builtins.     (line    6)
   41170 * frexpl:                                Other Builtins.     (line    6)
   41171 * FRV Options:                           FRV Options.        (line    6)
   41172 * fscanf:                                Other Builtins.     (line    6)
   41173 * fscanf, and constant strings:          Incompatibilities.  (line   17)
   41174 * function addressability on the M32R/D: Function Attributes.
   41175                                                              (line  611)
   41176 * function attributes:                   Function Attributes.
   41177                                                              (line    6)
   41178 * function pointers, arithmetic:         Pointer Arith.      (line    6)
   41179 * function prototype declarations:       Function Prototypes.
   41180                                                              (line    6)
   41181 * function without a prologue/epilogue code: Function Attributes.
   41182                                                              (line  639)
   41183 * function, size of pointer to:          Pointer Arith.      (line    6)
   41184 * functions called via pointer on the RS/6000 and PowerPC: Function Attributes.
   41185                                                              (line  565)
   41186 * functions in arbitrary sections:       Function Attributes.
   41187                                                              (line    6)
   41188 * functions that are passed arguments in registers on the 386: Function Attributes.
   41189                                                              (line  803)
   41190 * functions that behave like malloc:     Function Attributes.
   41191                                                              (line    6)
   41192 * functions that do not pop the argument stack on the 386: Function Attributes.
   41193                                                              (line    6)
   41194 * functions that do pop the argument stack on the 386: Function Attributes.
   41195                                                              (line  171)
   41196 * functions that have no side effects:   Function Attributes.
   41197                                                              (line    6)
   41198 * functions that never return:           Function Attributes.
   41199                                                              (line    6)
   41200 * functions that pop the argument stack on the 386: Function Attributes.
   41201                                                              (line    6)
   41202 * functions that return more than once:  Function Attributes.
   41203                                                              (line    6)
   41204 * functions which do not handle memory bank switching on 68HC11/68HC12: Function Attributes.
   41205                                                              (line  645)
   41206 * functions which handle memory bank switching: Function Attributes.
   41207                                                              (line  344)
   41208 * functions with non-null pointer arguments: Function Attributes.
   41209                                                              (line    6)
   41210 * functions with printf, scanf, strftime or strfmon style arguments: Function Attributes.
   41211                                                              (line    6)
   41212 * g in constraint:                       Simple Constraints. (line  108)
   41213 * G in constraint:                       Simple Constraints. (line   86)
   41214 * G++:                                   G++ and GCC.        (line   30)
   41215 * g++:                                   Invoking G++.       (line   14)
   41216 * gamma:                                 Other Builtins.     (line    6)
   41217 * gamma_r:                               Other Builtins.     (line    6)
   41218 * gammaf:                                Other Builtins.     (line    6)
   41219 * gammaf_r:                              Other Builtins.     (line    6)
   41220 * gammal:                                Other Builtins.     (line    6)
   41221 * gammal_r:                              Other Builtins.     (line    6)
   41222 * GCC:                                   G++ and GCC.        (line    6)
   41223 * GCC command options:                   Invoking GCC.       (line    6)
   41224 * GCC_EXEC_PREFIX:                       Environment Variables.
   41225                                                              (line   52)
   41226 * gcc_struct:                            Type Attributes.    (line  303)
   41227 * gcc_struct attribute:                  Variable Attributes.
   41228                                                              (line  337)
   41229 * gcov:                                  Debugging Options.  (line  258)
   41230 * gettext:                               Other Builtins.     (line    6)
   41231 * global offset table:                   Code Gen Options.   (line  173)
   41232 * global register after longjmp:         Global Reg Vars.    (line   66)
   41233 * global register variables:             Global Reg Vars.    (line    6)
   41234 * GNAT:                                  G++ and GCC.        (line   30)
   41235 * GNU C Compiler:                        G++ and GCC.        (line    6)
   41236 * GNU Compiler Collection:               G++ and GCC.        (line    6)
   41237 * gnu_inline function attribute:         Function Attributes.
   41238                                                              (line   93)
   41239 * goto with computed label:              Labels as Values.   (line    6)
   41240 * gprof:                                 Debugging Options.  (line  219)
   41241 * grouping options:                      Invoking GCC.       (line   26)
   41242 * H in constraint:                       Simple Constraints. (line   86)
   41243 * hardware models and configurations, specifying: Submodel Options.
   41244                                                              (line    6)
   41245 * hex floats:                            Hex Floats.         (line    6)
   41246 * hk fixed-suffix:                       Fixed-Point.        (line    6)
   41247 * HK fixed-suffix:                       Fixed-Point.        (line    6)
   41248 * hosted environment <1>:                C Dialect Options.  (line  204)
   41249 * hosted environment:                    Standards.          (line   13)
   41250 * hosted implementation:                 Standards.          (line   13)
   41251 * hot function attribute:                Function Attributes.
   41252                                                              (line  772)
   41253 * HPPA Options:                          HPPA Options.       (line    6)
   41254 * hr fixed-suffix:                       Fixed-Point.        (line    6)
   41255 * HR fixed-suffix:                       Fixed-Point.        (line    6)
   41256 * hypot:                                 Other Builtins.     (line    6)
   41257 * hypotf:                                Other Builtins.     (line    6)
   41258 * hypotl:                                Other Builtins.     (line    6)
   41259 * I in constraint:                       Simple Constraints. (line   69)
   41260 * i in constraint:                       Simple Constraints. (line   58)
   41261 * i386 Options:                          i386 and x86-64 Options.
   41262                                                              (line    6)
   41263 * IA-64 Options:                         IA-64 Options.      (line    6)
   41264 * IBM RS/6000 and PowerPC Options:       RS/6000 and PowerPC Options.
   41265                                                              (line    6)
   41266 * identifier names, dollar signs in:     Dollar Signs.       (line    6)
   41267 * identifiers, names in assembler code:  Asm Labels.         (line    6)
   41268 * ilogb:                                 Other Builtins.     (line    6)
   41269 * ilogbf:                                Other Builtins.     (line    6)
   41270 * ilogbl:                                Other Builtins.     (line    6)
   41271 * imaxabs:                               Other Builtins.     (line    6)
   41272 * implementation-defined behavior, C language: C Implementation.
   41273                                                              (line    6)
   41274 * implied #pragma implementation:        C++ Interface.      (line   46)
   41275 * incompatibilities of GCC:              Incompatibilities.  (line    6)
   41276 * increment operators:                   Bug Criteria.       (line   17)
   41277 * index:                                 Other Builtins.     (line    6)
   41278 * indirect calls on ARM:                 Function Attributes.
   41279                                                              (line  555)
   41280 * indirect calls on MIPS:                Function Attributes.
   41281                                                              (line  577)
   41282 * init_priority attribute:               C++ Attributes.     (line    9)
   41283 * initializations in expressions:        Compound Literals.  (line    6)
   41284 * initializers with labeled elements:    Designated Inits.   (line    6)
   41285 * initializers, non-constant:            Initializers.       (line    6)
   41286 * inline automatic for C++ member fns:   Inline.             (line   71)
   41287 * inline functions:                      Inline.             (line    6)
   41288 * inline functions, omission of:         Inline.             (line   51)
   41289 * inlining and C++ pragmas:              C++ Interface.      (line   66)
   41290 * installation trouble:                  Trouble.            (line    6)
   41291 * integrating function code:             Inline.             (line    6)
   41292 * Intel 386 Options:                     i386 and x86-64 Options.
   41293                                                              (line    6)
   41294 * interface and implementation headers, C++: C++ Interface.  (line    6)
   41295 * intermediate C version, nonexistent:   G++ and GCC.        (line   35)
   41296 * interrupt handler functions:           Function Attributes.
   41297                                                              (line  504)
   41298 * interrupt handler functions on the Blackfin, m68k, H8/300 and SH processors: Function Attributes.
   41299                                                              (line  529)
   41300 * interrupt thread functions on fido:    Function Attributes.
   41301                                                              (line  536)
   41302 * introduction:                          Top.                (line    6)
   41303 * invalid assembly code:                 Bug Criteria.       (line   12)
   41304 * invalid input:                         Bug Criteria.       (line   42)
   41305 * invoking g++:                          Invoking G++.       (line   22)
   41306 * isalnum:                               Other Builtins.     (line    6)
   41307 * isalpha:                               Other Builtins.     (line    6)
   41308 * isascii:                               Other Builtins.     (line    6)
   41309 * isblank:                               Other Builtins.     (line    6)
   41310 * iscntrl:                               Other Builtins.     (line    6)
   41311 * isdigit:                               Other Builtins.     (line    6)
   41312 * isgraph:                               Other Builtins.     (line    6)
   41313 * islower:                               Other Builtins.     (line    6)
   41314 * ISO 9899:                              Standards.          (line   13)
   41315 * ISO C:                                 Standards.          (line   13)
   41316 * ISO C standard:                        Standards.          (line   13)
   41317 * ISO C90:                               Standards.          (line   13)
   41318 * ISO C94:                               Standards.          (line   13)
   41319 * ISO C95:                               Standards.          (line   13)
   41320 * ISO C99:                               Standards.          (line   13)
   41321 * ISO C9X:                               Standards.          (line   13)
   41322 * ISO support:                           C Dialect Options.  (line   10)
   41323 * ISO/IEC 9899:                          Standards.          (line   13)
   41324 * isprint:                               Other Builtins.     (line    6)
   41325 * ispunct:                               Other Builtins.     (line    6)
   41326 * isspace:                               Other Builtins.     (line    6)
   41327 * isupper:                               Other Builtins.     (line    6)
   41328 * iswalnum:                              Other Builtins.     (line    6)
   41329 * iswalpha:                              Other Builtins.     (line    6)
   41330 * iswblank:                              Other Builtins.     (line    6)
   41331 * iswcntrl:                              Other Builtins.     (line    6)
   41332 * iswdigit:                              Other Builtins.     (line    6)
   41333 * iswgraph:                              Other Builtins.     (line    6)
   41334 * iswlower:                              Other Builtins.     (line    6)
   41335 * iswprint:                              Other Builtins.     (line    6)
   41336 * iswpunct:                              Other Builtins.     (line    6)
   41337 * iswspace:                              Other Builtins.     (line    6)
   41338 * iswupper:                              Other Builtins.     (line    6)
   41339 * iswxdigit:                             Other Builtins.     (line    6)
   41340 * isxdigit:                              Other Builtins.     (line    6)
   41341 * j0:                                    Other Builtins.     (line    6)
   41342 * j0f:                                   Other Builtins.     (line    6)
   41343 * j0l:                                   Other Builtins.     (line    6)
   41344 * j1:                                    Other Builtins.     (line    6)
   41345 * j1f:                                   Other Builtins.     (line    6)
   41346 * j1l:                                   Other Builtins.     (line    6)
   41347 * Java:                                  G++ and GCC.        (line    6)
   41348 * java_interface attribute:              C++ Attributes.     (line   29)
   41349 * jn:                                    Other Builtins.     (line    6)
   41350 * jnf:                                   Other Builtins.     (line    6)
   41351 * jnl:                                   Other Builtins.     (line    6)
   41352 * k fixed-suffix:                        Fixed-Point.        (line    6)
   41353 * K fixed-suffix:                        Fixed-Point.        (line    6)
   41354 * keywords, alternate:                   Alternate Keywords. (line    6)
   41355 * known causes of trouble:               Trouble.            (line    6)
   41356 * l1_data variable attribute:            Variable Attributes.
   41357                                                              (line  305)
   41358 * l1_data_A variable attribute:          Variable Attributes.
   41359                                                              (line  305)
   41360 * l1_data_B variable attribute:          Variable Attributes.
   41361                                                              (line  305)
   41362 * l1_text function attribute:            Function Attributes.
   41363                                                              (line  549)
   41364 * labeled elements in initializers:      Designated Inits.   (line    6)
   41365 * labels as values:                      Labels as Values.   (line    6)
   41366 * labs:                                  Other Builtins.     (line    6)
   41367 * LANG:                                  Environment Variables.
   41368                                                              (line   21)
   41369 * language dialect options:              C Dialect Options.  (line    6)
   41370 * LC_ALL:                                Environment Variables.
   41371                                                              (line   21)
   41372 * LC_CTYPE:                              Environment Variables.
   41373                                                              (line   21)
   41374 * LC_MESSAGES:                           Environment Variables.
   41375                                                              (line   21)
   41376 * ldexp:                                 Other Builtins.     (line    6)
   41377 * ldexpf:                                Other Builtins.     (line    6)
   41378 * ldexpl:                                Other Builtins.     (line    6)
   41379 * length-zero arrays:                    Zero Length.        (line    6)
   41380 * lgamma:                                Other Builtins.     (line    6)
   41381 * lgamma_r:                              Other Builtins.     (line    6)
   41382 * lgammaf:                               Other Builtins.     (line    6)
   41383 * lgammaf_r:                             Other Builtins.     (line    6)
   41384 * lgammal:                               Other Builtins.     (line    6)
   41385 * lgammal_r:                             Other Builtins.     (line    6)
   41386 * Libraries:                             Link Options.       (line   24)
   41387 * LIBRARY_PATH:                          Environment Variables.
   41388                                                              (line   94)
   41389 * link options:                          Link Options.       (line    6)
   41390 * lk fixed-suffix:                       Fixed-Point.        (line    6)
   41391 * LK fixed-suffix:                       Fixed-Point.        (line    6)
   41392 * LL integer suffix:                     Long Long.          (line    6)
   41393 * llabs:                                 Other Builtins.     (line    6)
   41394 * llk fixed-suffix:                      Fixed-Point.        (line    6)
   41395 * LLK fixed-suffix:                      Fixed-Point.        (line    6)
   41396 * llr fixed-suffix:                      Fixed-Point.        (line    6)
   41397 * LLR fixed-suffix:                      Fixed-Point.        (line    6)
   41398 * llrint:                                Other Builtins.     (line    6)
   41399 * llrintf:                               Other Builtins.     (line    6)
   41400 * llrintl:                               Other Builtins.     (line    6)
   41401 * llround:                               Other Builtins.     (line    6)
   41402 * llroundf:                              Other Builtins.     (line    6)
   41403 * llroundl:                              Other Builtins.     (line    6)
   41404 * load address instruction:              Simple Constraints. (line  142)
   41405 * local labels:                          Local Labels.       (line    6)
   41406 * local variables in macros:             Typeof.             (line   42)
   41407 * local variables, specifying registers: Local Reg Vars.     (line    6)
   41408 * locale:                                Environment Variables.
   41409                                                              (line   21)
   41410 * locale definition:                     Environment Variables.
   41411                                                              (line  103)
   41412 * log:                                   Other Builtins.     (line    6)
   41413 * log10:                                 Other Builtins.     (line    6)
   41414 * log10f:                                Other Builtins.     (line    6)
   41415 * log10l:                                Other Builtins.     (line    6)
   41416 * log1p:                                 Other Builtins.     (line    6)
   41417 * log1pf:                                Other Builtins.     (line    6)
   41418 * log1pl:                                Other Builtins.     (line    6)
   41419 * log2:                                  Other Builtins.     (line    6)
   41420 * log2f:                                 Other Builtins.     (line    6)
   41421 * log2l:                                 Other Builtins.     (line    6)
   41422 * logb:                                  Other Builtins.     (line    6)
   41423 * logbf:                                 Other Builtins.     (line    6)
   41424 * logbl:                                 Other Builtins.     (line    6)
   41425 * logf:                                  Other Builtins.     (line    6)
   41426 * logl:                                  Other Builtins.     (line    6)
   41427 * long long data types:                  Long Long.          (line    6)
   41428 * longjmp:                               Global Reg Vars.    (line   66)
   41429 * longjmp incompatibilities:             Incompatibilities.  (line   39)
   41430 * longjmp warnings:                      Warning Options.    (line  570)
   41431 * lr fixed-suffix:                       Fixed-Point.        (line    6)
   41432 * LR fixed-suffix:                       Fixed-Point.        (line    6)
   41433 * lrint:                                 Other Builtins.     (line    6)
   41434 * lrintf:                                Other Builtins.     (line    6)
   41435 * lrintl:                                Other Builtins.     (line    6)
   41436 * lround:                                Other Builtins.     (line    6)
   41437 * lroundf:                               Other Builtins.     (line    6)
   41438 * lroundl:                               Other Builtins.     (line    6)
   41439 * m in constraint:                       Simple Constraints. (line   17)
   41440 * M32C options:                          M32C Options.       (line    6)
   41441 * M32R/D options:                        M32R/D Options.     (line    6)
   41442 * M680x0 options:                        M680x0 Options.     (line    6)
   41443 * M68hc1x options:                       M68hc1x Options.    (line    6)
   41444 * machine dependent options:             Submodel Options.   (line    6)
   41445 * machine specific constraints:          Machine Constraints.
   41446                                                              (line    6)
   41447 * macro with variable arguments:         Variadic Macros.    (line    6)
   41448 * macros containing asm:                 Extended Asm.       (line  239)
   41449 * macros, inline alternative:            Inline.             (line    6)
   41450 * macros, local labels:                  Local Labels.       (line    6)
   41451 * macros, local variables in:            Typeof.             (line   42)
   41452 * macros, statements in expressions:     Statement Exprs.    (line    6)
   41453 * macros, types of arguments:            Typeof.             (line    6)
   41454 * make:                                  Preprocessor Options.
   41455                                                              (line  175)
   41456 * malloc:                                Other Builtins.     (line    6)
   41457 * malloc attribute:                      Function Attributes.
   41458                                                              (line  587)
   41459 * matching constraint:                   Simple Constraints. (line  127)
   41460 * MCore options:                         MCore Options.      (line    6)
   41461 * member fns, automatically inline:      Inline.             (line   71)
   41462 * memchr:                                Other Builtins.     (line    6)
   41463 * memcmp:                                Other Builtins.     (line    6)
   41464 * memcpy:                                Other Builtins.     (line    6)
   41465 * memory references in constraints:      Simple Constraints. (line   17)
   41466 * mempcpy:                               Other Builtins.     (line    6)
   41467 * memset:                                Other Builtins.     (line    6)
   41468 * Mercury:                               G++ and GCC.        (line   23)
   41469 * message formatting:                    Language Independent Options.
   41470                                                              (line    6)
   41471 * messages, warning:                     Warning Options.    (line    6)
   41472 * messages, warning and error:           Warnings and Errors.
   41473                                                              (line    6)
   41474 * middle-operands, omitted:              Conditionals.       (line    6)
   41475 * MIPS options:                          MIPS Options.       (line    6)
   41476 * mips16 attribute:                      Function Attributes.
   41477                                                              (line  597)
   41478 * misunderstandings in C++:              C++ Misunderstandings.
   41479                                                              (line    6)
   41480 * mixed declarations and code:           Mixed Declarations. (line    6)
   41481 * mktemp, and constant strings:          Incompatibilities.  (line   13)
   41482 * MMIX Options:                          MMIX Options.       (line    6)
   41483 * MN10300 options:                       MN10300 Options.    (line    6)
   41484 * mode attribute:                        Variable Attributes.
   41485                                                              (line  125)
   41486 * modf:                                  Other Builtins.     (line    6)
   41487 * modff:                                 Other Builtins.     (line    6)
   41488 * modfl:                                 Other Builtins.     (line    6)
   41489 * modifiers in constraints:              Modifiers.          (line    6)
   41490 * ms_struct:                             Type Attributes.    (line  303)
   41491 * ms_struct attribute:                   Variable Attributes.
   41492                                                              (line  337)
   41493 * MT options:                            MT Options.         (line    6)
   41494 * mudflap:                               Optimize Options.   (line  330)
   41495 * multiple alternative constraints:      Multi-Alternative.  (line    6)
   41496 * multiprecision arithmetic:             Long Long.          (line    6)
   41497 * n in constraint:                       Simple Constraints. (line   63)
   41498 * names used in assembler code:          Asm Labels.         (line    6)
   41499 * naming convention, implementation headers: C++ Interface.  (line   46)
   41500 * nearbyint:                             Other Builtins.     (line    6)
   41501 * nearbyintf:                            Other Builtins.     (line    6)
   41502 * nearbyintl:                            Other Builtins.     (line    6)
   41503 * nested functions:                      Nested Functions.   (line    6)
   41504 * newlines (escaped):                    Escaped Newlines.   (line    6)
   41505 * nextafter:                             Other Builtins.     (line    6)
   41506 * nextafterf:                            Other Builtins.     (line    6)
   41507 * nextafterl:                            Other Builtins.     (line    6)
   41508 * nexttoward:                            Other Builtins.     (line    6)
   41509 * nexttowardf:                           Other Builtins.     (line    6)
   41510 * nexttowardl:                           Other Builtins.     (line    6)
   41511 * NFC:                                   Warning Options.    (line 1053)
   41512 * NFKC:                                  Warning Options.    (line 1053)
   41513 * NMI handler functions on the Blackfin processor: Function Attributes.
   41514                                                              (line  656)
   41515 * no_instrument_function function attribute: Function Attributes.
   41516                                                              (line  662)
   41517 * nocommon attribute:                    Variable Attributes.
   41518                                                              (line   99)
   41519 * noinline function attribute:           Function Attributes.
   41520                                                              (line  667)
   41521 * nomips16 attribute:                    Function Attributes.
   41522                                                              (line  597)
   41523 * non-constant initializers:             Initializers.       (line    6)
   41524 * non-static inline function:            Inline.             (line   85)
   41525 * nonnull function attribute:            Function Attributes.
   41526                                                              (line  677)
   41527 * noreturn function attribute:           Function Attributes.
   41528                                                              (line  700)
   41529 * nothrow function attribute:            Function Attributes.
   41530                                                              (line  742)
   41531 * o in constraint:                       Simple Constraints. (line   21)
   41532 * OBJC_INCLUDE_PATH:                     Environment Variables.
   41533                                                              (line  129)
   41534 * Objective-C <1>:                       Standards.          (line  153)
   41535 * Objective-C:                           G++ and GCC.        (line    6)
   41536 * Objective-C and Objective-C++ options, command line: Objective-C and Objective-C++ Dialect Options.
   41537                                                              (line    6)
   41538 * Objective-C++ <1>:                     G++ and GCC.        (line    6)
   41539 * Objective-C++:                         Standards.          (line  153)
   41540 * offsettable address:                   Simple Constraints. (line   21)
   41541 * old-style function definitions:        Function Prototypes.
   41542                                                              (line    6)
   41543 * omitted middle-operands:               Conditionals.       (line    6)
   41544 * open coding:                           Inline.             (line    6)
   41545 * openmp parallel:                       C Dialect Options.  (line  221)
   41546 * operand constraints, asm:              Constraints.        (line    6)
   41547 * optimize options:                      Optimize Options.   (line    6)
   41548 * options to control diagnostics formatting: Language Independent Options.
   41549                                                              (line    6)
   41550 * options to control warnings:           Warning Options.    (line    6)
   41551 * options, C++:                          C++ Dialect Options.
   41552                                                              (line    6)
   41553 * options, code generation:              Code Gen Options.   (line    6)
   41554 * options, debugging:                    Debugging Options.  (line    6)
   41555 * options, dialect:                      C Dialect Options.  (line    6)
   41556 * options, directory search:             Directory Options.  (line    6)
   41557 * options, GCC command:                  Invoking GCC.       (line    6)
   41558 * options, grouping:                     Invoking GCC.       (line   26)
   41559 * options, linking:                      Link Options.       (line    6)
   41560 * options, Objective-C and Objective-C++: Objective-C and Objective-C++ Dialect Options.
   41561                                                              (line    6)
   41562 * options, optimization:                 Optimize Options.   (line    6)
   41563 * options, order:                        Invoking GCC.       (line   30)
   41564 * options, preprocessor:                 Preprocessor Options.
   41565                                                              (line    6)
   41566 * order of evaluation, side effects:     Non-bugs.           (line  196)
   41567 * order of options:                      Invoking GCC.       (line   30)
   41568 * other register constraints:            Simple Constraints. (line  151)
   41569 * output file option:                    Overall Options.    (line  181)
   41570 * overloaded virtual fn, warning:        C++ Dialect Options.
   41571                                                              (line  436)
   41572 * p in constraint:                       Simple Constraints. (line  142)
   41573 * packed attribute:                      Variable Attributes.
   41574                                                              (line  136)
   41575 * parameter forward declaration:         Variable Length.    (line   60)
   41576 * parameters, aliased:                   Code Gen Options.   (line  374)
   41577 * Pascal:                                G++ and GCC.        (line   23)
   41578 * PDP-11 Options:                        PDP-11 Options.     (line    6)
   41579 * PIC:                                   Code Gen Options.   (line  173)
   41580 * pmf:                                   Bound member functions.
   41581                                                              (line    6)
   41582 * pointer arguments:                     Function Attributes.
   41583                                                              (line  182)
   41584 * pointer to member function:            Bound member functions.
   41585                                                              (line    6)
   41586 * portions of temporary objects, pointers to: Temporaries.   (line    6)
   41587 * pow:                                   Other Builtins.     (line    6)
   41588 * pow10:                                 Other Builtins.     (line    6)
   41589 * pow10f:                                Other Builtins.     (line    6)
   41590 * pow10l:                                Other Builtins.     (line    6)
   41591 * PowerPC options:                       PowerPC Options.    (line    6)
   41592 * powf:                                  Other Builtins.     (line    6)
   41593 * powl:                                  Other Builtins.     (line    6)
   41594 * pragma, align:                         Solaris Pragmas.    (line   11)
   41595 * pragma, diagnostic:                    Diagnostic Pragmas. (line   14)
   41596 * pragma, extern_prefix:                 Symbol-Renaming Pragmas.
   41597                                                              (line   19)
   41598 * pragma, fini:                          Solaris Pragmas.    (line   19)
   41599 * pragma, init:                          Solaris Pragmas.    (line   24)
   41600 * pragma, long_calls:                    ARM Pragmas.        (line   11)
   41601 * pragma, long_calls_off:                ARM Pragmas.        (line   17)
   41602 * pragma, longcall:                      RS/6000 and PowerPC Pragmas.
   41603                                                              (line   14)
   41604 * pragma, mark:                          Darwin Pragmas.     (line   11)
   41605 * pragma, memregs:                       M32C Pragmas.       (line    7)
   41606 * pragma, no_long_calls:                 ARM Pragmas.        (line   14)
   41607 * pragma, options align:                 Darwin Pragmas.     (line   14)
   41608 * pragma, reason for not using:          Function Attributes.
   41609                                                              (line 1117)
   41610 * pragma, redefine_extname:              Symbol-Renaming Pragmas.
   41611                                                              (line   14)
   41612 * pragma, segment:                       Darwin Pragmas.     (line   21)
   41613 * pragma, unused:                        Darwin Pragmas.     (line   24)
   41614 * pragma, visibility:                    Visibility Pragmas. (line    8)
   41615 * pragma, weak:                          Weak Pragmas.       (line   10)
   41616 * pragmas:                               Pragmas.            (line    6)
   41617 * pragmas in C++, effect on inlining:    C++ Interface.      (line   66)
   41618 * pragmas, interface and implementation: C++ Interface.      (line    6)
   41619 * pragmas, warning of unknown:           Warning Options.    (line  588)
   41620 * precompiled headers:                   Precompiled Headers.
   41621                                                              (line    6)
   41622 * preprocessing numbers:                 Incompatibilities.  (line  173)
   41623 * preprocessing tokens:                  Incompatibilities.  (line  173)
   41624 * preprocessor options:                  Preprocessor Options.
   41625                                                              (line    6)
   41626 * printf:                                Other Builtins.     (line    6)
   41627 * printf_unlocked:                       Other Builtins.     (line    6)
   41628 * prof:                                  Debugging Options.  (line  213)
   41629 * progmem variable attribute:            Variable Attributes.
   41630                                                              (line  491)
   41631 * promotion of formal parameters:        Function Prototypes.
   41632                                                              (line    6)
   41633 * pure function attribute:               Function Attributes.
   41634                                                              (line  750)
   41635 * push address instruction:              Simple Constraints. (line  142)
   41636 * putchar:                               Other Builtins.     (line    6)
   41637 * puts:                                  Other Builtins.     (line    6)
   41638 * q floating point suffix:               Floating Types.     (line    6)
   41639 * Q floating point suffix:               Floating Types.     (line    6)
   41640 * qsort, and global register variables:  Global Reg Vars.    (line   42)
   41641 * question mark:                         Multi-Alternative.  (line   27)
   41642 * R fixed-suffix:                        Fixed-Point.        (line    6)
   41643 * r fixed-suffix:                        Fixed-Point.        (line    6)
   41644 * r in constraint:                       Simple Constraints. (line   54)
   41645 * ranges in case statements:             Case Ranges.        (line    6)
   41646 * read-only strings:                     Incompatibilities.  (line    9)
   41647 * register variable after longjmp:       Global Reg Vars.    (line   66)
   41648 * registers:                             Extended Asm.       (line    6)
   41649 * registers for local variables:         Local Reg Vars.     (line    6)
   41650 * registers in constraints:              Simple Constraints. (line   54)
   41651 * registers, global allocation:          Explicit Reg Vars.  (line    6)
   41652 * registers, global variables in:        Global Reg Vars.    (line    6)
   41653 * regparm attribute:                     Function Attributes.
   41654                                                              (line  803)
   41655 * relocation truncated to fit (MIPS):    MIPS Options.       (line  179)
   41656 * remainder:                             Other Builtins.     (line    6)
   41657 * remainderf:                            Other Builtins.     (line    6)
   41658 * remainderl:                            Other Builtins.     (line    6)
   41659 * remquo:                                Other Builtins.     (line    6)
   41660 * remquof:                               Other Builtins.     (line    6)
   41661 * remquol:                               Other Builtins.     (line    6)
   41662 * reordering, warning:                   C++ Dialect Options.
   41663                                                              (line  357)
   41664 * reporting bugs:                        Bugs.               (line    6)
   41665 * rest argument (in macro):              Variadic Macros.    (line    6)
   41666 * restricted pointers:                   Restricted Pointers.
   41667                                                              (line    6)
   41668 * restricted references:                 Restricted Pointers.
   41669                                                              (line    6)
   41670 * restricted this pointer:               Restricted Pointers.
   41671                                                              (line    6)
   41672 * returns_twice attribute:               Function Attributes.
   41673                                                              (line  840)
   41674 * rindex:                                Other Builtins.     (line    6)
   41675 * rint:                                  Other Builtins.     (line    6)
   41676 * rintf:                                 Other Builtins.     (line    6)
   41677 * rintl:                                 Other Builtins.     (line    6)
   41678 * round:                                 Other Builtins.     (line    6)
   41679 * roundf:                                Other Builtins.     (line    6)
   41680 * roundl:                                Other Builtins.     (line    6)
   41681 * RS/6000 and PowerPC Options:           RS/6000 and PowerPC Options.
   41682                                                              (line    6)
   41683 * RTTI:                                  Vague Linkage.      (line   43)
   41684 * run-time options:                      Code Gen Options.   (line    6)
   41685 * s in constraint:                       Simple Constraints. (line   90)
   41686 * S/390 and zSeries Options:             S/390 and zSeries Options.
   41687                                                              (line    6)
   41688 * save all registers on the Blackfin, H8/300, H8/300H, and H8S: Function Attributes.
   41689                                                              (line  849)
   41690 * scalb:                                 Other Builtins.     (line    6)
   41691 * scalbf:                                Other Builtins.     (line    6)
   41692 * scalbl:                                Other Builtins.     (line    6)
   41693 * scalbln:                               Other Builtins.     (line    6)
   41694 * scalblnf:                              Other Builtins.     (line    6)
   41695 * scalbn:                                Other Builtins.     (line    6)
   41696 * scalbnf:                               Other Builtins.     (line    6)
   41697 * scanf, and constant strings:           Incompatibilities.  (line   17)
   41698 * scanfnl:                               Other Builtins.     (line    6)
   41699 * scope of a variable length array:      Variable Length.    (line   23)
   41700 * scope of declaration:                  Disappointments.    (line   21)
   41701 * scope of external declarations:        Incompatibilities.  (line   80)
   41702 * Score Options:                         Score Options.      (line    6)
   41703 * search path:                           Directory Options.  (line    6)
   41704 * section function attribute:            Function Attributes.
   41705                                                              (line  854)
   41706 * section variable attribute:            Variable Attributes.
   41707                                                              (line  151)
   41708 * sentinel function attribute:           Function Attributes.
   41709                                                              (line  870)
   41710 * setjmp:                                Global Reg Vars.    (line   66)
   41711 * setjmp incompatibilities:              Incompatibilities.  (line   39)
   41712 * shared strings:                        Incompatibilities.  (line    9)
   41713 * shared variable attribute:             Variable Attributes.
   41714                                                              (line  196)
   41715 * side effect in ?::                     Conditionals.       (line   20)
   41716 * side effects, macro argument:          Statement Exprs.    (line   35)
   41717 * side effects, order of evaluation:     Non-bugs.           (line  196)
   41718 * signal handler functions on the AVR processors: Function Attributes.
   41719                                                              (line  901)
   41720 * signbit:                               Other Builtins.     (line    6)
   41721 * signbitd128:                           Other Builtins.     (line    6)
   41722 * signbitd32:                            Other Builtins.     (line    6)
   41723 * signbitd64:                            Other Builtins.     (line    6)
   41724 * signbitf:                              Other Builtins.     (line    6)
   41725 * signbitl:                              Other Builtins.     (line    6)
   41726 * signed and unsigned values, comparison warning: Warning Options.
   41727                                                              (line  922)
   41728 * significand:                           Other Builtins.     (line    6)
   41729 * significandf:                          Other Builtins.     (line    6)
   41730 * significandl:                          Other Builtins.     (line    6)
   41731 * simple constraints:                    Simple Constraints. (line    6)
   41732 * sin:                                   Other Builtins.     (line    6)
   41733 * sincos:                                Other Builtins.     (line    6)
   41734 * sincosf:                               Other Builtins.     (line    6)
   41735 * sincosl:                               Other Builtins.     (line    6)
   41736 * sinf:                                  Other Builtins.     (line    6)
   41737 * sinh:                                  Other Builtins.     (line    6)
   41738 * sinhf:                                 Other Builtins.     (line    6)
   41739 * sinhl:                                 Other Builtins.     (line    6)
   41740 * sinl:                                  Other Builtins.     (line    6)
   41741 * sizeof:                                Typeof.             (line    6)
   41742 * smaller data references:               M32R/D Options.     (line   57)
   41743 * smaller data references (PowerPC):     RS/6000 and PowerPC Options.
   41744                                                              (line  629)
   41745 * snprintf:                              Other Builtins.     (line    6)
   41746 * SPARC options:                         SPARC Options.      (line    6)
   41747 * Spec Files:                            Spec Files.         (line    6)
   41748 * specified registers:                   Explicit Reg Vars.  (line    6)
   41749 * specifying compiler version and target machine: Target Options.
   41750                                                              (line    6)
   41751 * specifying hardware config:            Submodel Options.   (line    6)
   41752 * specifying machine version:            Target Options.     (line    6)
   41753 * specifying registers for local variables: Local Reg Vars.  (line    6)
   41754 * speed of compilation:                  Precompiled Headers.
   41755                                                              (line    6)
   41756 * sprintf:                               Other Builtins.     (line    6)
   41757 * SPU options:                           SPU Options.        (line    6)
   41758 * sqrt:                                  Other Builtins.     (line    6)
   41759 * sqrtf:                                 Other Builtins.     (line    6)
   41760 * sqrtl:                                 Other Builtins.     (line    6)
   41761 * sscanf:                                Other Builtins.     (line    6)
   41762 * sscanf, and constant strings:          Incompatibilities.  (line   17)
   41763 * sseregparm attribute:                  Function Attributes.
   41764                                                              (line  820)
   41765 * statements inside expressions:         Statement Exprs.    (line    6)
   41766 * static data in C++, declaring and defining: Static Definitions.
   41767                                                              (line    6)
   41768 * stpcpy:                                Other Builtins.     (line    6)
   41769 * stpncpy:                               Other Builtins.     (line    6)
   41770 * strcasecmp:                            Other Builtins.     (line    6)
   41771 * strcat:                                Other Builtins.     (line    6)
   41772 * strchr:                                Other Builtins.     (line    6)
   41773 * strcmp:                                Other Builtins.     (line    6)
   41774 * strcpy:                                Other Builtins.     (line    6)
   41775 * strcspn:                               Other Builtins.     (line    6)
   41776 * strdup:                                Other Builtins.     (line    6)
   41777 * strfmon:                               Other Builtins.     (line    6)
   41778 * strftime:                              Other Builtins.     (line    6)
   41779 * string constants:                      Incompatibilities.  (line    9)
   41780 * strlen:                                Other Builtins.     (line    6)
   41781 * strncasecmp:                           Other Builtins.     (line    6)
   41782 * strncat:                               Other Builtins.     (line    6)
   41783 * strncmp:                               Other Builtins.     (line    6)
   41784 * strncpy:                               Other Builtins.     (line    6)
   41785 * strndup:                               Other Builtins.     (line    6)
   41786 * strpbrk:                               Other Builtins.     (line    6)
   41787 * strrchr:                               Other Builtins.     (line    6)
   41788 * strspn:                                Other Builtins.     (line    6)
   41789 * strstr:                                Other Builtins.     (line    6)
   41790 * struct:                                Unnamed Fields.     (line    6)
   41791 * structures:                            Incompatibilities.  (line  146)
   41792 * structures, constructor expression:    Compound Literals.  (line    6)
   41793 * submodel options:                      Submodel Options.   (line    6)
   41794 * subscripting:                          Subscripting.       (line    6)
   41795 * subscripting and function values:      Subscripting.       (line    6)
   41796 * suffixes for C++ source:               Invoking G++.       (line    6)
   41797 * SUNPRO_DEPENDENCIES:                   Environment Variables.
   41798                                                              (line  169)
   41799 * suppressing warnings:                  Warning Options.    (line    6)
   41800 * surprises in C++:                      C++ Misunderstandings.
   41801                                                              (line    6)
   41802 * syntax checking:                       Warning Options.    (line   13)
   41803 * system headers, warnings from:         Warning Options.    (line  702)
   41804 * tan:                                   Other Builtins.     (line    6)
   41805 * tanf:                                  Other Builtins.     (line    6)
   41806 * tanh:                                  Other Builtins.     (line    6)
   41807 * tanhf:                                 Other Builtins.     (line    6)
   41808 * tanhl:                                 Other Builtins.     (line    6)
   41809 * tanl:                                  Other Builtins.     (line    6)
   41810 * target machine, specifying:            Target Options.     (line    6)
   41811 * target options:                        Target Options.     (line    6)
   41812 * TC1:                                   Standards.          (line   13)
   41813 * TC2:                                   Standards.          (line   13)
   41814 * TC3:                                   Standards.          (line   13)
   41815 * Technical Corrigenda:                  Standards.          (line   13)
   41816 * Technical Corrigendum 1:               Standards.          (line   13)
   41817 * Technical Corrigendum 2:               Standards.          (line   13)
   41818 * Technical Corrigendum 3:               Standards.          (line   13)
   41819 * template instantiation:                Template Instantiation.
   41820                                                              (line    6)
   41821 * temporaries, lifetime of:              Temporaries.        (line    6)
   41822 * tgamma:                                Other Builtins.     (line    6)
   41823 * tgammaf:                               Other Builtins.     (line    6)
   41824 * tgammal:                               Other Builtins.     (line    6)
   41825 * Thread-Local Storage:                  Thread-Local.       (line    6)
   41826 * thunks:                                Nested Functions.   (line    6)
   41827 * tiny data section on the H8/300H and H8S: Function Attributes.
   41828                                                              (line  923)
   41829 * TLS:                                   Thread-Local.       (line    6)
   41830 * tls_model attribute:                   Variable Attributes.
   41831                                                              (line  220)
   41832 * TMPDIR:                                Environment Variables.
   41833                                                              (line   45)
   41834 * toascii:                               Other Builtins.     (line    6)
   41835 * tolower:                               Other Builtins.     (line    6)
   41836 * toupper:                               Other Builtins.     (line    6)
   41837 * towlower:                              Other Builtins.     (line    6)
   41838 * towupper:                              Other Builtins.     (line    6)
   41839 * traditional C language:                C Dialect Options.  (line  250)
   41840 * treelang <1>:                          G++ and GCC.        (line    6)
   41841 * treelang:                              Standards.          (line  169)
   41842 * trunc:                                 Other Builtins.     (line    6)
   41843 * truncf:                                Other Builtins.     (line    6)
   41844 * truncl:                                Other Builtins.     (line    6)
   41845 * two-stage name lookup:                 Name lookup.        (line    6)
   41846 * type alignment:                        Alignment.          (line    6)
   41847 * type attributes:                       Type Attributes.    (line    6)
   41848 * type_info:                             Vague Linkage.      (line   43)
   41849 * typedef names as function parameters:  Incompatibilities.  (line   97)
   41850 * typeof:                                Typeof.             (line    6)
   41851 * uhk fixed-suffix:                      Fixed-Point.        (line    6)
   41852 * UHK fixed-suffix:                      Fixed-Point.        (line    6)
   41853 * uhr fixed-suffix:                      Fixed-Point.        (line    6)
   41854 * UHR fixed-suffix:                      Fixed-Point.        (line    6)
   41855 * uk fixed-suffix:                       Fixed-Point.        (line    6)
   41856 * UK fixed-suffix:                       Fixed-Point.        (line    6)
   41857 * ULK fixed-suffix:                      Fixed-Point.        (line    6)
   41858 * ulk fixed-suffix:                      Fixed-Point.        (line    6)
   41859 * ULL integer suffix:                    Long Long.          (line    6)
   41860 * ullk fixed-suffix:                     Fixed-Point.        (line    6)
   41861 * ULLK fixed-suffix:                     Fixed-Point.        (line    6)
   41862 * ULLR fixed-suffix:                     Fixed-Point.        (line    6)
   41863 * ullr fixed-suffix:                     Fixed-Point.        (line    6)
   41864 * ulr fixed-suffix:                      Fixed-Point.        (line    6)
   41865 * ULR fixed-suffix:                      Fixed-Point.        (line    6)
   41866 * undefined behavior:                    Bug Criteria.       (line   17)
   41867 * undefined function value:              Bug Criteria.       (line   17)
   41868 * underscores in variables in macros:    Typeof.             (line   42)
   41869 * union:                                 Unnamed Fields.     (line    6)
   41870 * union, casting to a:                   Cast to Union.      (line    6)
   41871 * unions:                                Incompatibilities.  (line  146)
   41872 * unknown pragmas, warning:              Warning Options.    (line  588)
   41873 * unresolved references and -nodefaultlibs: Link Options.    (line   79)
   41874 * unresolved references and -nostdlib:   Link Options.       (line   79)
   41875 * unused attribute.:                     Function Attributes.
   41876                                                              (line  935)
   41877 * ur fixed-suffix:                       Fixed-Point.        (line    6)
   41878 * UR fixed-suffix:                       Fixed-Point.        (line    6)
   41879 * used attribute.:                       Function Attributes.
   41880                                                              (line  940)
   41881 * User stack pointer in interrupts on the Blackfin: Function Attributes.
   41882                                                              (line  544)
   41883 * V in constraint:                       Simple Constraints. (line   41)
   41884 * V850 Options:                          V850 Options.       (line    6)
   41885 * vague linkage:                         Vague Linkage.      (line    6)
   41886 * value after longjmp:                   Global Reg Vars.    (line   66)
   41887 * variable addressability on the IA-64:  Function Attributes.
   41888                                                              (line  611)
   41889 * variable addressability on the M32R/D: Variable Attributes.
   41890                                                              (line  318)
   41891 * variable alignment:                    Alignment.          (line    6)
   41892 * variable attributes:                   Variable Attributes.
   41893                                                              (line    6)
   41894 * variable number of arguments:          Variadic Macros.    (line    6)
   41895 * variable-length array scope:           Variable Length.    (line   23)
   41896 * variable-length arrays:                Variable Length.    (line    6)
   41897 * variables in specified registers:      Explicit Reg Vars.  (line    6)
   41898 * variables, local, in macros:           Typeof.             (line   42)
   41899 * variadic macros:                       Variadic Macros.    (line    6)
   41900 * VAX options:                           VAX Options.        (line    6)
   41901 * version_id attribute on IA64 HP-UX:    Function Attributes.
   41902                                                              (line  946)
   41903 * vfprintf:                              Other Builtins.     (line    6)
   41904 * vfscanf:                               Other Builtins.     (line    6)
   41905 * visibility attribute:                  Function Attributes.
   41906                                                              (line  956)
   41907 * VLAs:                                  Variable Length.    (line    6)
   41908 * void pointers, arithmetic:             Pointer Arith.      (line    6)
   41909 * void, size of pointer to:              Pointer Arith.      (line    6)
   41910 * volatile access:                       Volatiles.          (line    6)
   41911 * volatile applied to function:          Function Attributes.
   41912                                                              (line    6)
   41913 * volatile read:                         Volatiles.          (line    6)
   41914 * volatile write:                        Volatiles.          (line    6)
   41915 * vprintf:                               Other Builtins.     (line    6)
   41916 * vscanf:                                Other Builtins.     (line    6)
   41917 * vsnprintf:                             Other Builtins.     (line    6)
   41918 * vsprintf:                              Other Builtins.     (line    6)
   41919 * vsscanf:                               Other Builtins.     (line    6)
   41920 * vtable:                                Vague Linkage.      (line   28)
   41921 * VxWorks Options:                       VxWorks Options.    (line    6)
   41922 * w floating point suffix:               Floating Types.     (line    6)
   41923 * W floating point suffix:               Floating Types.     (line    6)
   41924 * warn_unused_result attribute:          Function Attributes.
   41925                                                              (line 1050)
   41926 * warning for comparison of signed and unsigned values: Warning Options.
   41927                                                              (line  922)
   41928 * warning for overloaded virtual fn:     C++ Dialect Options.
   41929                                                              (line  436)
   41930 * warning for reordering of member initializers: C++ Dialect Options.
   41931                                                              (line  357)
   41932 * warning for unknown pragmas:           Warning Options.    (line  588)
   41933 * warning function attribute:            Function Attributes.
   41934                                                              (line  159)
   41935 * warning messages:                      Warning Options.    (line    6)
   41936 * warnings from system headers:          Warning Options.    (line  702)
   41937 * warnings vs errors:                    Warnings and Errors.
   41938                                                              (line    6)
   41939 * weak attribute:                        Function Attributes.
   41940                                                              (line 1067)
   41941 * weakref attribute:                     Function Attributes.
   41942                                                              (line 1076)
   41943 * whitespace:                            Incompatibilities.  (line  112)
   41944 * X in constraint:                       Simple Constraints. (line  112)
   41945 * X3.159-1989:                           Standards.          (line   13)
   41946 * x86-64 Options:                        i386 and x86-64 Options.
   41947                                                              (line    6)
   41948 * x86-64 options:                        x86-64 Options.     (line    6)
   41949 * Xstormy16 Options:                     Xstormy16 Options.  (line    6)
   41950 * Xtensa Options:                        Xtensa Options.     (line    6)
   41951 * y0:                                    Other Builtins.     (line    6)
   41952 * y0f:                                   Other Builtins.     (line    6)
   41953 * y0l:                                   Other Builtins.     (line    6)
   41954 * y1:                                    Other Builtins.     (line    6)
   41955 * y1f:                                   Other Builtins.     (line    6)
   41956 * y1l:                                   Other Builtins.     (line    6)
   41957 * yn:                                    Other Builtins.     (line    6)
   41958 * ynf:                                   Other Builtins.     (line    6)
   41959 * ynl:                                   Other Builtins.     (line    6)
   41960 * zero-length arrays:                    Zero Length.        (line    6)
   41961 * zero-size structures:                  Empty Structures.   (line    6)
   41962 * zSeries options:                       zSeries Options.    (line    6)
   41963 
   41964 
   41965 
   41966 Tag Table:
   41967 Node: Top2150
   41968 Node: G++ and GCC3849
   41969 Node: Standards5914
   41970 Node: Invoking GCC15207
   41971 Node: Option Summary19024
   41972 Node: Overall Options49828
   41973 Node: Invoking G++63348
   41974 Node: C Dialect Options64871
   41975 Node: C++ Dialect Options78760
   41976 Node: Objective-C and Objective-C++ Dialect Options99470
   41977 Node: Language Independent Options111251
   41978 Node: Warning Options114021
   41979 Node: Debugging Options170580
   41980 Node: Optimize Options207403
   41981 Node: Preprocessor Options299912
   41982 Ref: Wtrigraphs303997
   41983 Ref: dashMF308801
   41984 Ref: fdollars-in-identifiers319320
   41985 Node: Assembler Options327556
   41986 Node: Link Options328261
   41987 Ref: Link Options-Footnote-1336829
   41988 Node: Directory Options337163
   41989 Node: Spec Files343225
   41990 Node: Target Options363564
   41991 Node: Submodel Options364988
   41992 Node: ARC Options366628
   41993 Node: ARM Options367818
   41994 Node: AVR Options381070
   41995 Node: Blackfin Options383203
   41996 Node: CRIS Options389245
   41997 Node: CRX Options393464
   41998 Node: Darwin Options393889
   41999 Node: DEC Alpha Options401382
   42000 Node: DEC Alpha/VMS Options412859
   42001 Node: FRV Options413244
   42002 Node: GNU/Linux Options419970
   42003 Node: H8/300 Options420428
   42004 Node: HPPA Options421495
   42005 Node: i386 and x86-64 Options431088
   42006 Node: IA-64 Options458003
   42007 Node: M32C Options465320
   42008 Node: M32R/D Options466611
   42009 Node: M680x0 Options470198
   42010 Node: M68hc1x Options482771
   42011 Node: MCore Options484339
   42012 Node: MIPS Options485360
   42013 Node: MMIX Options507594
   42014 Node: MN10300 Options510076
   42015 Node: MT Options511494
   42016 Node: PDP-11 Options512408
   42017 Node: PowerPC Options514242
   42018 Node: RS/6000 and PowerPC Options514476
   42019 Node: S/390 and zSeries Options543897
   42020 Node: Score Options551380
   42021 Node: SH Options552208
   42022 Node: SPARC Options562045
   42023 Node: SPU Options573018
   42024 Node: System V Options575337
   42025 Node: V850 Options576160
   42026 Node: VAX Options579300
   42027 Node: VxWorks Options579848
   42028 Node: x86-64 Options581003
   42029 Node: Xstormy16 Options581221
   42030 Node: Xtensa Options581510
   42031 Node: zSeries Options585350
   42032 Node: Code Gen Options585546
   42033 Node: Environment Variables608315
   42034 Node: Precompiled Headers616211
   42035 Node: Running Protoize622454
   42036 Node: C Implementation628791
   42037 Node: Translation implementation630454
   42038 Node: Environment implementation631028
   42039 Node: Identifiers implementation631578
   42040 Node: Characters implementation632632
   42041 Node: Integers implementation635438
   42042 Node: Floating point implementation637263
   42043 Node: Arrays and pointers implementation640192
   42044 Ref: Arrays and pointers implementation-Footnote-1641627
   42045 Node: Hints implementation641751
   42046 Node: Structures unions enumerations and bit-fields implementation643217
   42047 Node: Qualifiers implementation645180
   42048 Node: Declarators implementation646952
   42049 Node: Statements implementation647294
   42050 Node: Preprocessing directives implementation647621
   42051 Node: Library functions implementation649726
   42052 Node: Architecture implementation650366
   42053 Node: Locale-specific behavior implementation651069
   42054 Node: C Extensions651374
   42055 Node: Statement Exprs655930
   42056 Node: Local Labels660443
   42057 Node: Labels as Values663422
   42058 Ref: Labels as Values-Footnote-1665795
   42059 Node: Nested Functions665978
   42060 Node: Constructing Calls669872
   42061 Node: Typeof674595
   42062 Node: Conditionals677761
   42063 Node: Long Long678652
   42064 Node: Complex680153
   42065 Node: Floating Types682723
   42066 Node: Decimal Float683842
   42067 Node: Hex Floats685414
   42068 Node: Fixed-Point686455
   42069 Node: Zero Length689585
   42070 Node: Empty Structures692863
   42071 Node: Variable Length693279
   42072 Node: Variadic Macros696046
   42073 Node: Escaped Newlines698428
   42074 Node: Subscripting699267
   42075 Node: Pointer Arith699990
   42076 Node: Initializers700558
   42077 Node: Compound Literals701054
   42078 Node: Designated Inits703229
   42079 Node: Case Ranges706884
   42080 Node: Cast to Union707567
   42081 Node: Mixed Declarations708663
   42082 Node: Function Attributes709169
   42083 Node: Attribute Syntax762694
   42084 Node: Function Prototypes772964
   42085 Node: C++ Comments774745
   42086 Node: Dollar Signs775264
   42087 Node: Character Escapes775729
   42088 Node: Alignment776023
   42089 Node: Variable Attributes777397
   42090 Ref: i386 Variable Attributes791297
   42091 Node: Type Attributes797320
   42092 Ref: i386 Type Attributes810632
   42093 Ref: PowerPC Type Attributes811476
   42094 Ref: SPU Type Attributes812329
   42095 Node: Inline812620
   42096 Node: Extended Asm817567
   42097 Ref: Example of asm with clobbered asm reg823653
   42098 Node: Constraints837749
   42099 Node: Simple Constraints838599
   42100 Node: Multi-Alternative845126
   42101 Node: Modifiers846843
   42102 Node: Machine Constraints849737
   42103 Node: Asm Labels881167
   42104 Node: Explicit Reg Vars882843
   42105 Node: Global Reg Vars884451
   42106 Node: Local Reg Vars889001
   42107 Node: Alternate Keywords891442
   42108 Node: Incomplete Enums892870
   42109 Node: Function Names893627
   42110 Node: Return Address895817
   42111 Node: Vector Extensions898614
   42112 Node: Offsetof902116
   42113 Node: Atomic Builtins902902
   42114 Node: Object Size Checking907987
   42115 Node: Other Builtins913345
   42116 Node: Target Builtins937016
   42117 Node: Alpha Built-in Functions937807
   42118 Node: ARM iWMMXt Built-in Functions940806
   42119 Node: ARM NEON Intrinsics947525
   42120 Node: Blackfin Built-in Functions1155363
   42121 Node: FR-V Built-in Functions1155977
   42122 Node: Argument Types1156836
   42123 Node: Directly-mapped Integer Functions1158592
   42124 Node: Directly-mapped Media Functions1159674
   42125 Node: Raw read/write Functions1166706
   42126 Node: Other Built-in Functions1167618
   42127 Node: X86 Built-in Functions1168807
   42128 Node: MIPS DSP Built-in Functions1205405
   42129 Node: MIPS Paired-Single Support1217559
   42130 Node: Paired-Single Arithmetic1219169
   42131 Node: Paired-Single Built-in Functions1220109
   42132 Node: MIPS-3D Built-in Functions1222773
   42133 Node: PowerPC AltiVec Built-in Functions1228142
   42134 Node: SPARC VIS Built-in Functions1329446
   42135 Node: SPU Built-in Functions1331138
   42136 Node: Target Format Checks1332920
   42137 Node: Solaris Format Checks1333327
   42138 Node: Pragmas1333724
   42139 Node: ARM Pragmas1334354
   42140 Node: M32C Pragmas1334957
   42141 Node: RS/6000 and PowerPC Pragmas1335533
   42142 Node: Darwin Pragmas1336275
   42143 Node: Solaris Pragmas1337342
   42144 Node: Symbol-Renaming Pragmas1338503
   42145 Node: Structure-Packing Pragmas1341125
   42146 Node: Weak Pragmas1342756
   42147 Node: Diagnostic Pragmas1343558
   42148 Node: Visibility Pragmas1345551
   42149 Node: Unnamed Fields1346272
   42150 Node: Thread-Local1347782
   42151 Node: C99 Thread-Local Edits1349891
   42152 Node: C++98 Thread-Local Edits1351903
   42153 Node: Binary constants1355348
   42154 Node: C++ Extensions1356019
   42155 Node: Volatiles1357652
   42156 Node: Restricted Pointers1360328
   42157 Node: Vague Linkage1361922
   42158 Node: C++ Interface1365578
   42159 Ref: C++ Interface-Footnote-11369875
   42160 Node: Template Instantiation1370012
   42161 Node: Bound member functions1377024
   42162 Node: C++ Attributes1378567
   42163 Node: Namespace Association1380225
   42164 Node: Type Traits1381639
   42165 Node: Java Exceptions1387198
   42166 Node: Deprecated Features1388595
   42167 Node: Backwards Compatibility1391559
   42168 Node: Objective-C1392914
   42169 Node: Executing code before main1393495
   42170 Node: What you can and what you cannot do in +load1396101
   42171 Node: Type encoding1398268
   42172 Node: Garbage Collection1401655
   42173 Node: Constant string objects1404279
   42174 Node: compatibility_alias1406787
   42175 Node: Compatibility1407665
   42176 Node: Gcov1414232
   42177 Node: Gcov Intro1414756
   42178 Node: Invoking Gcov1417472
   42179 Node: Gcov and Optimization1429333
   42180 Node: Gcov Data Files1431986
   42181 Node: Cross-profiling1433124
   42182 Node: Trouble1434950
   42183 Node: Actual Bugs1436490
   42184 Node: Cross-Compiler Problems1437230
   42185 Node: Interoperation1437644
   42186 Node: Incompatibilities1444781
   42187 Node: Fixed Headers1452931
   42188 Node: Standard Libraries1454594
   42189 Node: Disappointments1455966
   42190 Node: C++ Misunderstandings1460324
   42191 Node: Static Definitions1461143
   42192 Node: Name lookup1462196
   42193 Ref: Name lookup-Footnote-11466974
   42194 Node: Temporaries1467161
   42195 Node: Copy Assignment1469137
   42196 Node: Protoize Caveats1470944
   42197 Node: Non-bugs1474917
   42198 Node: Warnings and Errors1485421
   42199 Node: Bugs1487185
   42200 Node: Bug Criteria1487749
   42201 Node: Bug Reporting1489959
   42202 Node: Service1490180
   42203 Node: Contributing1490999
   42204 Node: Funding1491739
   42205 Node: GNU Project1494228
   42206 Node: Copying1494874
   42207 Node: GNU Free Documentation License1532402
   42208 Node: Contributors1554808
   42209 Node: Option Index1591003
   42210 Node: Keyword Index1743915
   42211 
   42212 End Tag Table
   42213