Mark msysGit as obsolete
[msysgit.git] / mingw / info / gcc.info
blob5337800818eb2137dd7479f9fc75d6deaeb054e4
1 This is doc/gcc.info, produced by makeinfo version 4.8 from
2 ../../gcc-4.4.0/gcc/doc/gcc.texi.
4  Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
5 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free
6 Software Foundation, Inc.
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 "Funding Free Software", the Front-Cover Texts
12 being (a) (see below), and with the Back-Cover Texts being (b) (see
13 below).  A copy of the license is included in the section entitled "GNU
14 Free Documentation License".
16  (a) The FSF's Front-Cover Text is:
18  A GNU Manual
20  (b) The FSF's Back-Cover Text is:
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.
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.
33  Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
34 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free
35 Software Foundation, Inc.
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 "Funding Free Software", the Front-Cover Texts
41 being (a) (see below), and with the Back-Cover Texts being (b) (see
42 below).  A copy of the license is included in the section entitled "GNU
43 Free Documentation License".
45  (a) The FSF's Front-Cover Text is:
47  A GNU Manual
49  (b) The FSF's Back-Cover Text is:
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.
56 \x1f
57 File: gcc.info,  Node: Top,  Next: G++ and GCC,  Up: (DIR)
59 Introduction
60 ************
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 (TDM-1 mingw32) version 4.4.0.  The internals of the
65 GNU 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.
69 * Menu:
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.
85 * Funding::         How to help assure funding for free software.
86 * GNU Project::     The GNU Project and GNU/Linux.
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.
93 * Option Index::    Index to command line options.
94 * Keyword Index::   Index of concepts and symbol names.
96 \x1f
97 File: gcc.info,  Node: G++ and GCC,  Next: Standards,  Prev: Top,  Up: Top
99 1 Programming Languages Supported by GCC
100 ****************************************
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.
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.
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.
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.
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.
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.
139 \x1f
140 File: gcc.info,  Node: Standards,  Next: Invoking GCC,  Prev: G++ and GCC,  Up: Top
142 2 Language Standards Supported by GCC
143 *************************************
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.
149 2.1 C language
150 ==============
152 GCC supports three versions of the C standard, although support for the
153 most recent version is not yet complete.
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.
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.
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).
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.4/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".)
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.
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.
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.
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.
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.
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'.
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'
252 2.2 C++ language
253 ================
255 GCC supports the ISO C++ standard (1998) and contains experimental
256 support for the upcoming ISO C++ standard (200x).
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).
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).
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'.
289 2.3 Objective-C and Objective-C++ languages
290 ===========================================
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:
296    *
297      `http://developer.apple.com/documentation/Cocoa/Conceptual/ObjectiveC/'
298      is a recent (and periodically updated) version;
300    * `http://www.toodarkpark.org/computers/objc/' is an older example;
302    * `http://www.gnustep.org' and `http://gcc.gnu.org/readings.html'
303      have additional useful information.
305  *Note GNAT Reference Manual: (gnat_rm)Top, for information on standard
306 conformance and compatibility of the Ada compiler.
308  *Note Standards: (gfortran)Standards, for details of standards
309 supported by GNU Fortran.
311  *Note Compatibility with the Java Platform: (gcj)Compatibility, for
312 details of compatibility between `gcj' and the Java Platform.
314 \x1f
315 File: gcc.info,  Node: Invoking GCC,  Next: C Implementation,  Prev: Standards,  Up: Top
317 3 GCC Command Options
318 *********************
320 When you invoke GCC, it normally does preprocessing, compilation,
321 assembly and linking.  The "overall options" allow you to stop this
322 process at an intermediate stage.  For example, the `-c' option says
323 not to run the linker.  Then the output consists of object files output
324 by the assembler.
326  Other options are passed on to one stage of processing.  Some options
327 control the preprocessor and others the compiler itself.  Yet other
328 options control the assembler and linker; most of these are not
329 documented here, since you rarely need to use any of them.
331  Most of the command line options that you can use with GCC are useful
332 for C programs; when an option is only useful with another language
333 (usually C++), the explanation says so explicitly.  If the description
334 for a particular option does not mention a source language, you can use
335 that option with all supported languages.
337  *Note Compiling C++ Programs: Invoking G++, for a summary of special
338 options for compiling C++ programs.
340  The `gcc' program accepts options and file names as operands.  Many
341 options have multi-letter names; therefore multiple single-letter
342 options may _not_ be grouped: `-dv' is very different from `-d -v'.
344  You can mix options and other arguments.  For the most part, the order
345 you use doesn't matter.  Order does matter when you use several options
346 of the same kind; for example, if you specify `-L' more than once, the
347 directories are searched in the order specified.  Also, the placement
348 of the `-l' option is significant.
350  Many options have long names starting with `-f' or with `-W'--for
351 example, `-fmove-loop-invariants', `-Wformat' and so on.  Most of these
352 have both positive and negative forms; the negative form of `-ffoo'
353 would be `-fno-foo'.  This manual documents only one of these two
354 forms, whichever one is not the default.
356  *Note Option Index::, for an index to GCC's options.
358 * Menu:
360 * Option Summary::      Brief list of all options, without explanations.
361 * Overall Options::     Controlling the kind of output:
362                         an executable, object files, assembler files,
363                         or preprocessed source.
364 * Invoking G++::        Compiling C++ programs.
365 * C Dialect Options::   Controlling the variant of C language compiled.
366 * C++ Dialect Options:: Variations on C++.
367 * Objective-C and Objective-C++ Dialect Options:: Variations on Objective-C
368                         and Objective-C++.
369 * Language Independent Options:: Controlling how diagnostics should be
370                         formatted.
371 * Warning Options::     How picky should the compiler be?
372 * Debugging Options::   Symbol tables, measurements, and debugging dumps.
373 * Optimize Options::    How much optimization?
374 * Preprocessor Options:: Controlling header files and macro definitions.
375                          Also, getting dependency information for Make.
376 * Assembler Options::   Passing options to the assembler.
377 * Link Options::        Specifying libraries and so on.
378 * Directory Options::   Where to find header files and libraries.
379                         Where to find the compiler executable files.
380 * Spec Files::          How to pass switches to sub-processes.
381 * Target Options::      Running a cross-compiler, or an old version of GCC.
382 * Submodel Options::    Specifying minor hardware or convention variations,
383                         such as 68010 vs 68020.
384 * Code Gen Options::    Specifying conventions for function calls, data layout
385                         and register usage.
386 * Environment Variables:: Env vars that affect GCC.
387 * Precompiled Headers:: Compiling a header once, and using it many times.
388 * Running Protoize::    Automatically adding or removing function prototypes.
390 \x1f
391 File: gcc.info,  Node: Option Summary,  Next: Overall Options,  Up: Invoking GCC
393 3.1 Option Summary
394 ==================
396 Here is a summary of all the options, grouped by type.  Explanations are
397 in the following sections.
399 _Overall Options_
400      *Note Options Controlling the Kind of Output: Overall Options.
401           -c  -S  -E  -o FILE  -combine  -pipe  -pass-exit-codes
402           -x LANGUAGE  -v  -###  --help[=CLASS[,...]]  --target-help
403           --version -wrapper@FILE
405 _C Language Options_
406      *Note Options Controlling C Dialect: C Dialect Options.
407           -ansi  -std=STANDARD  -fgnu89-inline
408           -aux-info FILENAME
409           -fno-asm  -fno-builtin  -fno-builtin-FUNCTION
410           -fhosted  -ffreestanding -fopenmp -fms-extensions
411           -trigraphs  -no-integrated-cpp  -traditional  -traditional-cpp
412           -fallow-single-precision  -fcond-mismatch -flax-vector-conversions
413           -fsigned-bitfields  -fsigned-char
414           -funsigned-bitfields  -funsigned-char
416 _C++ Language Options_
417      *Note Options Controlling C++ Dialect: C++ Dialect Options.
418           -fabi-version=N  -fno-access-control  -fcheck-new
419           -fconserve-space  -ffriend-injection
420           -fno-elide-constructors
421           -fno-enforce-eh-specs
422           -ffor-scope  -fno-for-scope  -fno-gnu-keywords
423           -fno-implicit-templates
424           -fno-implicit-inline-templates
425           -fno-implement-inlines  -fms-extensions
426           -fno-nonansi-builtins  -fno-operator-names
427           -fno-optional-diags  -fpermissive
428           -frepo  -fno-rtti  -fstats  -ftemplate-depth-N
429           -fno-threadsafe-statics -fuse-cxa-atexit  -fno-weak  -nostdinc++
430           -fno-default-inline  -fvisibility-inlines-hidden
431           -fvisibility-ms-compat
432           -Wabi  -Wctor-dtor-privacy
433           -Wnon-virtual-dtor  -Wreorder
434           -Weffc++  -Wstrict-null-sentinel
435           -Wno-non-template-friend  -Wold-style-cast
436           -Woverloaded-virtual  -Wno-pmf-conversions
437           -Wsign-promo
439 _Objective-C and Objective-C++ Language Options_
440      *Note Options Controlling Objective-C and Objective-C++ Dialects:
441      Objective-C and Objective-C++ Dialect Options.
442           -fconstant-string-class=CLASS-NAME
443           -fgnu-runtime  -fnext-runtime
444           -fno-nil-receivers
445           -fobjc-call-cxx-cdtors
446           -fobjc-direct-dispatch
447           -fobjc-exceptions
448           -fobjc-gc
449           -freplace-objc-classes
450           -fzero-link
451           -gen-decls
452           -Wassign-intercept
453           -Wno-protocol  -Wselector
454           -Wstrict-selector-match
455           -Wundeclared-selector
457 _Language Independent Options_
458      *Note Options to Control Diagnostic Messages Formatting: Language
459      Independent Options.
460           -fmessage-length=N
461           -fdiagnostics-show-location=[once|every-line]
462           -fdiagnostics-show-option
464 _Warning Options_
465      *Note Options to Request or Suppress Warnings: Warning Options.
466           -fsyntax-only  -pedantic  -pedantic-errors
467           -w  -Wextra  -Wall  -Waddress  -Waggregate-return  -Warray-bounds
468           -Wno-attributes -Wno-builtin-macro-redefined
469           -Wc++-compat -Wc++0x-compat -Wcast-align  -Wcast-qual
470           -Wchar-subscripts -Wclobbered  -Wcomment
471           -Wconversion  -Wcoverage-mismatch  -Wno-deprecated
472           -Wno-deprecated-declarations -Wdisabled-optimization
473           -Wno-div-by-zero -Wempty-body  -Wenum-compare -Wno-endif-labels
474           -Werror  -Werror=*
475           -Wfatal-errors  -Wfloat-equal  -Wformat  -Wformat=2
476           -Wno-format-contains-nul -Wno-format-extra-args -Wformat-nonliteral
477           -Wformat-security  -Wformat-y2k
478           -Wframe-larger-than=LEN -Wignored-qualifiers
479           -Wimplicit  -Wimplicit-function-declaration  -Wimplicit-int
480           -Winit-self  -Winline
481           -Wno-int-to-pointer-cast -Wno-invalid-offsetof
482           -Winvalid-pch -Wlarger-than=LEN  -Wunsafe-loop-optimizations
483           -Wlogical-op -Wlong-long
484           -Wmain  -Wmissing-braces  -Wmissing-field-initializers
485           -Wmissing-format-attribute  -Wmissing-include-dirs
486           -Wmissing-noreturn  -Wno-mudflap
487           -Wno-multichar  -Wnonnull  -Wno-overflow
488           -Woverlength-strings  -Wpacked  -Wpacked-bitfield-compat  -Wpadded
489           -Wparentheses  -Wpedantic-ms-format -Wno-pedantic-ms-format
490           -Wpointer-arith  -Wno-pointer-to-int-cast
491           -Wredundant-decls
492           -Wreturn-type  -Wsequence-point  -Wshadow
493           -Wsign-compare  -Wsign-conversion  -Wstack-protector
494           -Wstrict-aliasing -Wstrict-aliasing=n
495           -Wstrict-overflow -Wstrict-overflow=N
496           -Wswitch  -Wswitch-default  -Wswitch-enum -Wsync-nand
497           -Wsystem-headers  -Wtrigraphs  -Wtype-limits  -Wundef  -Wuninitialized
498           -Wunknown-pragmas  -Wno-pragmas -Wunreachable-code
499           -Wunused  -Wunused-function  -Wunused-label  -Wunused-parameter
500           -Wunused-value  -Wunused-variable
501           -Wvariadic-macros -Wvla
502           -Wvolatile-register-var  -Wwrite-strings
504 _C and Objective-C-only Warning Options_
505           -Wbad-function-cast  -Wmissing-declarations
506           -Wmissing-parameter-type  -Wmissing-prototypes  -Wnested-externs
507           -Wold-style-declaration  -Wold-style-definition
508           -Wstrict-prototypes  -Wtraditional  -Wtraditional-conversion
509           -Wdeclaration-after-statement -Wpointer-sign
511 _Debugging Options_
512      *Note Options for Debugging Your Program or GCC: Debugging Options.
513           -dLETTERS  -dumpspecs  -dumpmachine  -dumpversion
514           -fdbg-cnt-list -fdbg-cnt=COUNTER-VALUE-LIST
515           -fdump-noaddr -fdump-unnumbered
516           -fdump-translation-unit[-N]
517           -fdump-class-hierarchy[-N]
518           -fdump-ipa-all -fdump-ipa-cgraph -fdump-ipa-inline
519           -fdump-statistics
520           -fdump-tree-all
521           -fdump-tree-original[-N]
522           -fdump-tree-optimized[-N]
523           -fdump-tree-cfg -fdump-tree-vcg -fdump-tree-alias
524           -fdump-tree-ch
525           -fdump-tree-ssa[-N] -fdump-tree-pre[-N]
526           -fdump-tree-ccp[-N] -fdump-tree-dce[-N]
527           -fdump-tree-gimple[-raw] -fdump-tree-mudflap[-N]
528           -fdump-tree-dom[-N]
529           -fdump-tree-dse[-N]
530           -fdump-tree-phiopt[-N]
531           -fdump-tree-forwprop[-N]
532           -fdump-tree-copyrename[-N]
533           -fdump-tree-nrv -fdump-tree-vect
534           -fdump-tree-sink
535           -fdump-tree-sra[-N]
536           -fdump-tree-fre[-N]
537           -fdump-tree-vrp[-N]
538           -ftree-vectorizer-verbose=N
539           -fdump-tree-storeccp[-N]
540           -feliminate-dwarf2-dups -feliminate-unused-debug-types
541           -feliminate-unused-debug-symbols -femit-class-debug-always
542           -fmem-report -fpre-ipa-mem-report -fpost-ipa-mem-report -fprofile-arcs
543           -frandom-seed=STRING -fsched-verbose=N
544           -fsel-sched-verbose -fsel-sched-dump-cfg -fsel-sched-pipelining-verbose
545           -ftest-coverage  -ftime-report -fvar-tracking
546           -g  -gLEVEL  -gcoff -gdwarf-2
547           -ggdb  -gstabs  -gstabs+  -gvms  -gxcoff  -gxcoff+
548           -fno-merge-debug-strings -fno-dwarf2-cfi-asm
549           -fdebug-prefix-map=OLD=NEW
550           -femit-struct-debug-baseonly -femit-struct-debug-reduced
551           -femit-struct-debug-detailed[=SPEC-LIST]
552           -p  -pg  -print-file-name=LIBRARY  -print-libgcc-file-name
553           -print-multi-directory  -print-multi-lib
554           -print-prog-name=PROGRAM  -print-search-dirs  -Q
555           -print-sysroot -print-sysroot-headers-suffix
556           -save-temps  -time
558 _Optimization Options_
559      *Note Options that Control Optimization: Optimize Options.
560           -falign-functions[=N] -falign-jumps[=N]
561           -falign-labels[=N] -falign-loops[=N] -fassociative-math
562           -fauto-inc-dec -fbranch-probabilities -fbranch-target-load-optimize
563           -fbranch-target-load-optimize2 -fbtr-bb-exclusive -fcaller-saves
564           -fcheck-data-deps -fconserve-stack -fcprop-registers -fcrossjumping
565           -fcse-follow-jumps -fcse-skip-blocks -fcx-fortran-rules -fcx-limited-range
566           -fdata-sections -fdce -fdce
567           -fdelayed-branch -fdelete-null-pointer-checks -fdse -fdse
568           -fearly-inlining -fexpensive-optimizations -ffast-math
569           -ffinite-math-only -ffloat-store -fforward-propagate
570           -ffunction-sections -fgcse -fgcse-after-reload -fgcse-las -fgcse-lm
571           -fgcse-sm -fif-conversion -fif-conversion2 -findirect-inlining
572           -finline-functions -finline-functions-called-once -finline-limit=N
573           -finline-small-functions -fipa-cp -fipa-cp-clone -fipa-matrix-reorg -fipa-pta
574           -fipa-pure-const -fipa-reference -fipa-struct-reorg
575           -fipa-type-escape -fira-algorithm=ALGORITHM
576           -fira-region=REGION -fira-coalesce -fno-ira-share-save-slots
577           -fno-ira-share-spill-slots -fira-verbose=N
578           -fivopts -fkeep-inline-functions -fkeep-static-consts
579           -floop-block -floop-interchange -floop-strip-mine
580           -fmerge-all-constants -fmerge-constants -fmodulo-sched
581           -fmodulo-sched-allow-regmoves -fmove-loop-invariants -fmudflap
582           -fmudflapir -fmudflapth -fno-branch-count-reg -fno-default-inline
583           -fno-defer-pop -fno-function-cse -fno-guess-branch-probability
584           -fno-inline -fno-math-errno -fno-peephole -fno-peephole2
585           -fno-sched-interblock -fno-sched-spec -fno-signed-zeros
586           -fno-toplevel-reorder -fno-trapping-math -fno-zero-initialized-in-bss
587           -fomit-frame-pointer -foptimize-register-move -foptimize-sibling-calls
588           -fpeel-loops -fpredictive-commoning -fprefetch-loop-arrays
589           -fprofile-correction -fprofile-dir=PATH -fprofile-generate
590           -fprofile-generate=PATH
591           -fprofile-use -fprofile-use=PATH -fprofile-values
592           -freciprocal-math -fregmove -frename-registers -freorder-blocks
593           -freorder-blocks-and-partition -freorder-functions
594           -frerun-cse-after-loop -freschedule-modulo-scheduled-loops
595           -frounding-math -frtl-abstract-sequences -fsched2-use-superblocks
596           -fsched2-use-traces -fsched-spec-load -fsched-spec-load-dangerous
597           -fsched-stalled-insns-dep[=N] -fsched-stalled-insns[=N]
598           -fschedule-insns -fschedule-insns2 -fsection-anchors -fsee
599           -fselective-scheduling -fselective-scheduling2
600           -fsel-sched-pipelining -fsel-sched-pipelining-outer-loops
601           -fsignaling-nans -fsingle-precision-constant -fsplit-ivs-in-unroller
602           -fsplit-wide-types -fstack-protector -fstack-protector-all
603           -fstrict-aliasing -fstrict-overflow -fthread-jumps -ftracer
604           -ftree-builtin-call-dce -ftree-ccp -ftree-ch -ftree-copy-prop
605           -ftree-copyrename -ftree-dce
606           -ftree-dominator-opts -ftree-dse -ftree-fre -ftree-loop-im
607           -ftree-loop-distribution
608           -ftree-loop-ivcanon -ftree-loop-linear -ftree-loop-optimize
609           -ftree-parallelize-loops=N -ftree-pre -ftree-reassoc
610           -ftree-sink -ftree-sra -ftree-switch-conversion
611           -ftree-ter -ftree-vect-loop-version -ftree-vectorize -ftree-vrp
612           -funit-at-a-time -funroll-all-loops -funroll-loops
613           -funsafe-loop-optimizations -funsafe-math-optimizations -funswitch-loops
614           -fvariable-expansion-in-unroller -fvect-cost-model -fvpt -fweb
615           -fwhole-program
616           --param NAME=VALUE
617           -O  -O0  -O1  -O2  -O3  -Os
619 _Preprocessor Options_
620      *Note Options Controlling the Preprocessor: Preprocessor Options.
621           -AQUESTION=ANSWER
622           -A-QUESTION[=ANSWER]
623           -C  -dD  -dI  -dM  -dN
624           -DMACRO[=DEFN]  -E  -H
625           -idirafter DIR
626           -include FILE  -imacros FILE
627           -iprefix FILE  -iwithprefix DIR
628           -iwithprefixbefore DIR  -isystem DIR
629           -imultilib DIR -isysroot DIR
630           -M  -MM  -MF  -MG  -MP  -MQ  -MT  -nostdinc
631           -P  -fworking-directory  -remap
632           -trigraphs  -undef  -UMACRO  -Wp,OPTION
633           -Xpreprocessor OPTION
635 _Assembler Option_
636      *Note Passing Options to the Assembler: Assembler Options.
637           -Wa,OPTION  -Xassembler OPTION
639 _Linker Options_
640      *Note Options for Linking: Link Options.
641           OBJECT-FILE-NAME  -lLIBRARY
642           -nostartfiles  -nodefaultlibs  -nostdlib -pie -rdynamic
643           -s  -static  -static-libgcc  -shared  -shared-libgcc  -symbolic
644           -T SCRIPT  -Wl,OPTION  -Xlinker OPTION
645           -u SYMBOL
647 _Directory Options_
648      *Note Options for Directory Search: Directory Options.
649           -BPREFIX  -IDIR  -iquoteDIR  -LDIR
650           -specs=FILE  -I- --sysroot=DIR
652 _Target Options_
653      *Note Target Options::.
654           -V VERSION  -b MACHINE
656 _Machine Dependent Options_
657      *Note Hardware Models and Configurations: Submodel Options.
659      _ARC Options_
660           -EB  -EL
661           -mmangle-cpu  -mcpu=CPU  -mtext=TEXT-SECTION
662           -mdata=DATA-SECTION  -mrodata=READONLY-DATA-SECTION
664      _ARM Options_
665           -mapcs-frame  -mno-apcs-frame
666           -mabi=NAME
667           -mapcs-stack-check  -mno-apcs-stack-check
668           -mapcs-float  -mno-apcs-float
669           -mapcs-reentrant  -mno-apcs-reentrant
670           -msched-prolog  -mno-sched-prolog
671           -mlittle-endian  -mbig-endian  -mwords-little-endian
672           -mfloat-abi=NAME  -msoft-float  -mhard-float  -mfpe
673           -mthumb-interwork  -mno-thumb-interwork
674           -mcpu=NAME  -march=NAME  -mfpu=NAME
675           -mstructure-size-boundary=N
676           -mabort-on-noreturn
677           -mlong-calls  -mno-long-calls
678           -msingle-pic-base  -mno-single-pic-base
679           -mpic-register=REG
680           -mnop-fun-dllimport
681           -mcirrus-fix-invalid-insns -mno-cirrus-fix-invalid-insns
682           -mpoke-function-name
683           -mthumb  -marm
684           -mtpcs-frame  -mtpcs-leaf-frame
685           -mcaller-super-interworking  -mcallee-super-interworking
686           -mtp=NAME
687           -mword-relocations
688           -mfix-cortex-m3-ldrd
690      _AVR Options_
691           -mmcu=MCU  -msize  -minit-stack=N  -mno-interrupts
692           -mcall-prologues  -mno-tablejump  -mtiny-stack  -mint8
694      _Blackfin Options_
695           -mcpu=CPU[-SIREVISION]
696           -msim -momit-leaf-frame-pointer  -mno-omit-leaf-frame-pointer
697           -mspecld-anomaly  -mno-specld-anomaly  -mcsync-anomaly  -mno-csync-anomaly
698           -mlow-64k -mno-low64k  -mstack-check-l1  -mid-shared-library
699           -mno-id-shared-library  -mshared-library-id=N
700           -mleaf-id-shared-library  -mno-leaf-id-shared-library
701           -msep-data  -mno-sep-data  -mlong-calls  -mno-long-calls
702           -mfast-fp -minline-plt -mmulticore  -mcorea  -mcoreb  -msdram
703           -micplb
705      _CRIS Options_
706           -mcpu=CPU  -march=CPU  -mtune=CPU
707           -mmax-stack-frame=N  -melinux-stacksize=N
708           -metrax4  -metrax100  -mpdebug  -mcc-init  -mno-side-effects
709           -mstack-align  -mdata-align  -mconst-align
710           -m32-bit  -m16-bit  -m8-bit  -mno-prologue-epilogue  -mno-gotplt
711           -melf  -maout  -melinux  -mlinux  -sim  -sim2
712           -mmul-bug-workaround  -mno-mul-bug-workaround
714      _CRX Options_
715           -mmac -mpush-args
717      _Darwin Options_
718           -all_load  -allowable_client  -arch  -arch_errors_fatal
719           -arch_only  -bind_at_load  -bundle  -bundle_loader
720           -client_name  -compatibility_version  -current_version
721           -dead_strip
722           -dependency-file  -dylib_file  -dylinker_install_name
723           -dynamic  -dynamiclib  -exported_symbols_list
724           -filelist  -flat_namespace  -force_cpusubtype_ALL
725           -force_flat_namespace  -headerpad_max_install_names
726           -iframework
727           -image_base  -init  -install_name  -keep_private_externs
728           -multi_module  -multiply_defined  -multiply_defined_unused
729           -noall_load   -no_dead_strip_inits_and_terms
730           -nofixprebinding -nomultidefs  -noprebind  -noseglinkedit
731           -pagezero_size  -prebind  -prebind_all_twolevel_modules
732           -private_bundle  -read_only_relocs  -sectalign
733           -sectobjectsymbols  -whyload  -seg1addr
734           -sectcreate  -sectobjectsymbols  -sectorder
735           -segaddr -segs_read_only_addr -segs_read_write_addr
736           -seg_addr_table  -seg_addr_table_filename  -seglinkedit
737           -segprot  -segs_read_only_addr  -segs_read_write_addr
738           -single_module  -static  -sub_library  -sub_umbrella
739           -twolevel_namespace  -umbrella  -undefined
740           -unexported_symbols_list  -weak_reference_mismatches
741           -whatsloaded -F -gused -gfull -mmacosx-version-min=VERSION
742           -mkernel -mone-byte-bool
744      _DEC Alpha Options_
745           -mno-fp-regs  -msoft-float  -malpha-as  -mgas
746           -mieee  -mieee-with-inexact  -mieee-conformant
747           -mfp-trap-mode=MODE  -mfp-rounding-mode=MODE
748           -mtrap-precision=MODE  -mbuild-constants
749           -mcpu=CPU-TYPE  -mtune=CPU-TYPE
750           -mbwx  -mmax  -mfix  -mcix
751           -mfloat-vax  -mfloat-ieee
752           -mexplicit-relocs  -msmall-data  -mlarge-data
753           -msmall-text  -mlarge-text
754           -mmemory-latency=TIME
756      _DEC Alpha/VMS Options_
757           -mvms-return-codes
759      _FR30 Options_
760           -msmall-model -mno-lsim
762      _FRV Options_
763           -mgpr-32  -mgpr-64  -mfpr-32  -mfpr-64
764           -mhard-float  -msoft-float
765           -malloc-cc  -mfixed-cc  -mdword  -mno-dword
766           -mdouble  -mno-double
767           -mmedia  -mno-media  -mmuladd  -mno-muladd
768           -mfdpic  -minline-plt -mgprel-ro  -multilib-library-pic
769           -mlinked-fp  -mlong-calls  -malign-labels
770           -mlibrary-pic  -macc-4  -macc-8
771           -mpack  -mno-pack  -mno-eflags  -mcond-move  -mno-cond-move
772           -moptimize-membar -mno-optimize-membar
773           -mscc  -mno-scc  -mcond-exec  -mno-cond-exec
774           -mvliw-branch  -mno-vliw-branch
775           -mmulti-cond-exec  -mno-multi-cond-exec  -mnested-cond-exec
776           -mno-nested-cond-exec  -mtomcat-stats
777           -mTLS -mtls
778           -mcpu=CPU
780      _GNU/Linux Options_
781           -muclibc
783      _H8/300 Options_
784           -mrelax  -mh  -ms  -mn  -mint32  -malign-300
786      _HPPA Options_
787           -march=ARCHITECTURE-TYPE
788           -mbig-switch  -mdisable-fpregs  -mdisable-indexing
789           -mfast-indirect-calls  -mgas  -mgnu-ld   -mhp-ld
790           -mfixed-range=REGISTER-RANGE
791           -mjump-in-delay -mlinker-opt -mlong-calls
792           -mlong-load-store  -mno-big-switch  -mno-disable-fpregs
793           -mno-disable-indexing  -mno-fast-indirect-calls  -mno-gas
794           -mno-jump-in-delay  -mno-long-load-store
795           -mno-portable-runtime  -mno-soft-float
796           -mno-space-regs  -msoft-float  -mpa-risc-1-0
797           -mpa-risc-1-1  -mpa-risc-2-0  -mportable-runtime
798           -mschedule=CPU-TYPE  -mspace-regs  -msio  -mwsio
799           -munix=UNIX-STD  -nolibdld  -static  -threads
801      _i386 and x86-64 Options_
802           -mtune=CPU-TYPE  -march=CPU-TYPE
803           -mfpmath=UNIT
804           -masm=DIALECT  -mno-fancy-math-387
805           -mno-fp-ret-in-387  -msoft-float
806           -mno-wide-multiply  -mrtd  -malign-double
807           -mpreferred-stack-boundary=NUM
808           -mincoming-stack-boundary=NUM
809           -mcld -mcx16 -msahf -mrecip
810           -mmmx  -msse  -msse2 -msse3 -mssse3 -msse4.1 -msse4.2 -msse4 -mavx
811           -maes -mpclmul
812           -msse4a -m3dnow -mpopcnt -mabm -msse5
813           -mthreads  -mno-align-stringops  -minline-all-stringops
814           -minline-stringops-dynamically -mstringop-strategy=ALG
815           -mpush-args  -maccumulate-outgoing-args  -m128bit-long-double
816           -m96bit-long-double  -mregparm=NUM  -msseregparm
817           -mveclibabi=TYPE -mpc32 -mpc64 -mpc80 -mstackrealign
818           -momit-leaf-frame-pointer  -mno-red-zone -mno-tls-direct-seg-refs
819           -mcmodel=CODE-MODEL
820           -m32  -m64 -mlarge-data-threshold=NUM
821           -mfused-madd -mno-fused-madd -msse2avx
823      _IA-64 Options_
824           -mbig-endian  -mlittle-endian  -mgnu-as  -mgnu-ld  -mno-pic
825           -mvolatile-asm-stop  -mregister-names  -mno-sdata
826           -mconstant-gp  -mauto-pic  -minline-float-divide-min-latency
827           -minline-float-divide-max-throughput
828           -minline-int-divide-min-latency
829           -minline-int-divide-max-throughput
830           -minline-sqrt-min-latency -minline-sqrt-max-throughput
831           -mno-dwarf2-asm -mearly-stop-bits
832           -mfixed-range=REGISTER-RANGE -mtls-size=TLS-SIZE
833           -mtune=CPU-TYPE -mt -pthread -milp32 -mlp64
834           -mno-sched-br-data-spec -msched-ar-data-spec -mno-sched-control-spec
835           -msched-br-in-data-spec -msched-ar-in-data-spec -msched-in-control-spec
836           -msched-ldc -mno-sched-control-ldc -mno-sched-spec-verbose
837           -mno-sched-prefer-non-data-spec-insns
838           -mno-sched-prefer-non-control-spec-insns
839           -mno-sched-count-spec-in-critical-path
841      _M32R/D Options_
842           -m32r2 -m32rx -m32r
843           -mdebug
844           -malign-loops -mno-align-loops
845           -missue-rate=NUMBER
846           -mbranch-cost=NUMBER
847           -mmodel=CODE-SIZE-MODEL-TYPE
848           -msdata=SDATA-TYPE
849           -mno-flush-func -mflush-func=NAME
850           -mno-flush-trap -mflush-trap=NUMBER
851           -G NUM
853      _M32C Options_
854           -mcpu=CPU -msim -memregs=NUMBER
856      _M680x0 Options_
857           -march=ARCH  -mcpu=CPU  -mtune=TUNE
858           -m68000  -m68020  -m68020-40  -m68020-60  -m68030  -m68040
859           -m68060  -mcpu32  -m5200  -m5206e  -m528x  -m5307  -m5407
860           -mcfv4e  -mbitfield  -mno-bitfield  -mc68000  -mc68020
861           -mnobitfield  -mrtd  -mno-rtd  -mdiv  -mno-div  -mshort
862           -mno-short  -mhard-float  -m68881  -msoft-float  -mpcrel
863           -malign-int  -mstrict-align  -msep-data  -mno-sep-data
864           -mshared-library-id=n  -mid-shared-library  -mno-id-shared-library
865           -mxgot -mno-xgot
867      _M68hc1x Options_
868           -m6811  -m6812  -m68hc11  -m68hc12   -m68hcs12
869           -mauto-incdec  -minmax  -mlong-calls  -mshort
870           -msoft-reg-count=COUNT
872      _MCore Options_
873           -mhardlit  -mno-hardlit  -mdiv  -mno-div  -mrelax-immediates
874           -mno-relax-immediates  -mwide-bitfields  -mno-wide-bitfields
875           -m4byte-functions  -mno-4byte-functions  -mcallgraph-data
876           -mno-callgraph-data  -mslow-bytes  -mno-slow-bytes  -mno-lsim
877           -mlittle-endian  -mbig-endian  -m210  -m340  -mstack-increment
879      _MIPS Options_
880           -EL  -EB  -march=ARCH  -mtune=ARCH
881           -mips1  -mips2  -mips3  -mips4  -mips32  -mips32r2
882           -mips64  -mips64r2
883           -mips16  -mno-mips16  -mflip-mips16
884           -minterlink-mips16  -mno-interlink-mips16
885           -mabi=ABI  -mabicalls  -mno-abicalls
886           -mshared  -mno-shared  -mplt  -mno-plt  -mxgot  -mno-xgot
887           -mgp32  -mgp64  -mfp32  -mfp64  -mhard-float  -msoft-float
888           -msingle-float  -mdouble-float  -mdsp  -mno-dsp  -mdspr2  -mno-dspr2
889           -mfpu=FPU-TYPE
890           -msmartmips  -mno-smartmips
891           -mpaired-single  -mno-paired-single  -mdmx  -mno-mdmx
892           -mips3d  -mno-mips3d  -mmt  -mno-mt  -mllsc  -mno-llsc
893           -mlong64  -mlong32  -msym32  -mno-sym32
894           -GNUM  -mlocal-sdata  -mno-local-sdata
895           -mextern-sdata  -mno-extern-sdata  -mgpopt  -mno-gopt
896           -membedded-data  -mno-embedded-data
897           -muninit-const-in-rodata  -mno-uninit-const-in-rodata
898           -mcode-readable=SETTING
899           -msplit-addresses  -mno-split-addresses
900           -mexplicit-relocs  -mno-explicit-relocs
901           -mcheck-zero-division  -mno-check-zero-division
902           -mdivide-traps  -mdivide-breaks
903           -mmemcpy  -mno-memcpy  -mlong-calls  -mno-long-calls
904           -mmad  -mno-mad  -mfused-madd  -mno-fused-madd  -nocpp
905           -mfix-r4000  -mno-fix-r4000  -mfix-r4400  -mno-fix-r4400
906           -mfix-r10000 -mno-fix-r10000  -mfix-vr4120  -mno-fix-vr4120
907           -mfix-vr4130  -mno-fix-vr4130  -mfix-sb1  -mno-fix-sb1
908           -mflush-func=FUNC  -mno-flush-func
909           -mbranch-cost=NUM  -mbranch-likely  -mno-branch-likely
910           -mfp-exceptions -mno-fp-exceptions
911           -mvr4130-align -mno-vr4130-align
913      _MMIX Options_
914           -mlibfuncs  -mno-libfuncs  -mepsilon  -mno-epsilon  -mabi=gnu
915           -mabi=mmixware  -mzero-extend  -mknuthdiv  -mtoplevel-symbols
916           -melf  -mbranch-predict  -mno-branch-predict  -mbase-addresses
917           -mno-base-addresses  -msingle-exit  -mno-single-exit
919      _MN10300 Options_
920           -mmult-bug  -mno-mult-bug
921           -mam33  -mno-am33
922           -mam33-2  -mno-am33-2
923           -mreturn-pointer-on-d0
924           -mno-crt0  -mrelax
926      _PDP-11 Options_
927           -mfpu  -msoft-float  -mac0  -mno-ac0  -m40  -m45  -m10
928           -mbcopy  -mbcopy-builtin  -mint32  -mno-int16
929           -mint16  -mno-int32  -mfloat32  -mno-float64
930           -mfloat64  -mno-float32  -mabshi  -mno-abshi
931           -mbranch-expensive  -mbranch-cheap
932           -msplit  -mno-split  -munix-asm  -mdec-asm
934      _picoChip Options_
935           -mae=AE_TYPE -mvliw-lookahead=N
936           -msymbol-as-address -mno-inefficient-warnings
938      _PowerPC Options_ See RS/6000 and PowerPC Options.
940      _RS/6000 and PowerPC Options_
941           -mcpu=CPU-TYPE
942           -mtune=CPU-TYPE
943           -mpower  -mno-power  -mpower2  -mno-power2
944           -mpowerpc  -mpowerpc64  -mno-powerpc
945           -maltivec  -mno-altivec
946           -mpowerpc-gpopt  -mno-powerpc-gpopt
947           -mpowerpc-gfxopt  -mno-powerpc-gfxopt
948           -mmfcrf  -mno-mfcrf  -mpopcntb  -mno-popcntb  -mfprnd  -mno-fprnd
949           -mcmpb -mno-cmpb -mmfpgpr -mno-mfpgpr -mhard-dfp -mno-hard-dfp
950           -mnew-mnemonics  -mold-mnemonics
951           -mfull-toc   -mminimal-toc  -mno-fp-in-toc  -mno-sum-in-toc
952           -m64  -m32  -mxl-compat  -mno-xl-compat  -mpe
953           -malign-power  -malign-natural
954           -msoft-float  -mhard-float  -mmultiple  -mno-multiple
955           -msingle-float -mdouble-float -msimple-fpu
956           -mstring  -mno-string  -mupdate  -mno-update
957           -mavoid-indexed-addresses  -mno-avoid-indexed-addresses
958           -mfused-madd  -mno-fused-madd  -mbit-align  -mno-bit-align
959           -mstrict-align  -mno-strict-align  -mrelocatable
960           -mno-relocatable  -mrelocatable-lib  -mno-relocatable-lib
961           -mtoc  -mno-toc  -mlittle  -mlittle-endian  -mbig  -mbig-endian
962           -mdynamic-no-pic  -maltivec  -mswdiv
963           -mprioritize-restricted-insns=PRIORITY
964           -msched-costly-dep=DEPENDENCE_TYPE
965           -minsert-sched-nops=SCHEME
966           -mcall-sysv  -mcall-netbsd
967           -maix-struct-return  -msvr4-struct-return
968           -mabi=ABI-TYPE -msecure-plt -mbss-plt
969           -misel -mno-isel
970           -misel=yes  -misel=no
971           -mspe -mno-spe
972           -mspe=yes  -mspe=no
973           -mpaired
974           -mgen-cell-microcode -mwarn-cell-microcode
975           -mvrsave -mno-vrsave
976           -mmulhw -mno-mulhw
977           -mdlmzb -mno-dlmzb
978           -mfloat-gprs=yes  -mfloat-gprs=no -mfloat-gprs=single -mfloat-gprs=double
979           -mprototype  -mno-prototype
980           -msim  -mmvme  -mads  -myellowknife  -memb  -msdata
981           -msdata=OPT  -mvxworks  -G NUM  -pthread
983      _S/390 and zSeries Options_
984           -mtune=CPU-TYPE  -march=CPU-TYPE
985           -mhard-float  -msoft-float  -mhard-dfp -mno-hard-dfp
986           -mlong-double-64 -mlong-double-128
987           -mbackchain  -mno-backchain -mpacked-stack  -mno-packed-stack
988           -msmall-exec  -mno-small-exec  -mmvcle -mno-mvcle
989           -m64  -m31  -mdebug  -mno-debug  -mesa  -mzarch
990           -mtpf-trace -mno-tpf-trace  -mfused-madd  -mno-fused-madd
991           -mwarn-framesize  -mwarn-dynamicstack  -mstack-size -mstack-guard
993      _Score Options_
994           -meb -mel
995           -mnhwloop
996           -muls
997           -mmac
998           -mscore5 -mscore5u -mscore7 -mscore7d
1000      _SH Options_
1001           -m1  -m2  -m2e  -m3  -m3e
1002           -m4-nofpu  -m4-single-only  -m4-single  -m4
1003           -m4a-nofpu -m4a-single-only -m4a-single -m4a -m4al
1004           -m5-64media  -m5-64media-nofpu
1005           -m5-32media  -m5-32media-nofpu
1006           -m5-compact  -m5-compact-nofpu
1007           -mb  -ml  -mdalign  -mrelax
1008           -mbigtable  -mfmovd  -mhitachi -mrenesas -mno-renesas -mnomacsave
1009           -mieee  -mbitops  -misize  -minline-ic_invalidate -mpadstruct  -mspace
1010           -mprefergot  -musermode -multcost=NUMBER -mdiv=STRATEGY
1011           -mdivsi3_libfunc=NAME -mfixed-range=REGISTER-RANGE
1012           -madjust-unroll -mindexed-addressing -mgettrcost=NUMBER -mpt-fixed
1013           -minvalid-symbols
1015      _SPARC Options_
1016           -mcpu=CPU-TYPE
1017           -mtune=CPU-TYPE
1018           -mcmodel=CODE-MODEL
1019           -m32  -m64  -mapp-regs  -mno-app-regs
1020           -mfaster-structs  -mno-faster-structs
1021           -mfpu  -mno-fpu  -mhard-float  -msoft-float
1022           -mhard-quad-float  -msoft-quad-float
1023           -mimpure-text  -mno-impure-text  -mlittle-endian
1024           -mstack-bias  -mno-stack-bias
1025           -munaligned-doubles  -mno-unaligned-doubles
1026           -mv8plus  -mno-v8plus  -mvis  -mno-vis
1027           -threads -pthreads -pthread
1029      _SPU Options_
1030           -mwarn-reloc -merror-reloc
1031           -msafe-dma -munsafe-dma
1032           -mbranch-hints
1033           -msmall-mem -mlarge-mem -mstdmain
1034           -mfixed-range=REGISTER-RANGE
1036      _System V Options_
1037           -Qy  -Qn  -YP,PATHS  -Ym,DIR
1039      _V850 Options_
1040           -mlong-calls  -mno-long-calls  -mep  -mno-ep
1041           -mprolog-function  -mno-prolog-function  -mspace
1042           -mtda=N  -msda=N  -mzda=N
1043           -mapp-regs  -mno-app-regs
1044           -mdisable-callt  -mno-disable-callt
1045           -mv850e1
1046           -mv850e
1047           -mv850  -mbig-switch
1049      _VAX Options_
1050           -mg  -mgnu  -munix
1052      _VxWorks Options_
1053           -mrtp  -non-static  -Bstatic  -Bdynamic
1054           -Xbind-lazy  -Xbind-now
1056      _x86-64 Options_ See i386 and x86-64 Options.
1058      _i386 and x86-64 Windows Options_
1059           -mconsole -mcygwin -mno-cygwin -mdll
1060           -mnop-fun-dllimport -mthread -mwin32 -mwindows
1062      _Xstormy16 Options_
1063           -msim
1065      _Xtensa Options_
1066           -mconst16 -mno-const16
1067           -mfused-madd  -mno-fused-madd
1068           -mserialize-volatile  -mno-serialize-volatile
1069           -mtext-section-literals  -mno-text-section-literals
1070           -mtarget-align  -mno-target-align
1071           -mlongcalls  -mno-longcalls
1073      _zSeries Options_ See S/390 and zSeries Options.
1075 _Code Generation Options_
1076      *Note Options for Code Generation Conventions: Code Gen Options.
1077           -fcall-saved-REG  -fcall-used-REG
1078           -ffixed-REG  -fexceptions
1079           -fnon-call-exceptions  -funwind-tables
1080           -fasynchronous-unwind-tables
1081           -finhibit-size-directive  -finstrument-functions
1082           -finstrument-functions-exclude-function-list=SYM,SYM,...
1083           -finstrument-functions-exclude-file-list=FILE,FILE,...
1084           -fno-common  -fno-ident
1085           -fpcc-struct-return  -fpic  -fPIC -fpie -fPIE
1086           -fno-jump-tables
1087           -frecord-gcc-switches
1088           -freg-struct-return  -fshort-enums
1089           -fshort-double  -fshort-wchar
1090           -fverbose-asm  -fpack-struct[=N]  -fstack-check
1091           -fstack-limit-register=REG  -fstack-limit-symbol=SYM
1092           -fno-stack-limit  -fargument-alias  -fargument-noalias
1093           -fargument-noalias-global  -fargument-noalias-anything
1094           -fleading-underscore  -ftls-model=MODEL
1095           -ftrapv  -fwrapv  -fbounds-check
1096           -fvisibility
1099 * Menu:
1101 * Overall Options::     Controlling the kind of output:
1102                         an executable, object files, assembler files,
1103                         or preprocessed source.
1104 * C Dialect Options::   Controlling the variant of C language compiled.
1105 * C++ Dialect Options:: Variations on C++.
1106 * Objective-C and Objective-C++ Dialect Options:: Variations on Objective-C
1107                         and Objective-C++.
1108 * Language Independent Options:: Controlling how diagnostics should be
1109                         formatted.
1110 * Warning Options::     How picky should the compiler be?
1111 * Debugging Options::   Symbol tables, measurements, and debugging dumps.
1112 * Optimize Options::    How much optimization?
1113 * Preprocessor Options:: Controlling header files and macro definitions.
1114                          Also, getting dependency information for Make.
1115 * Assembler Options::   Passing options to the assembler.
1116 * Link Options::        Specifying libraries and so on.
1117 * Directory Options::   Where to find header files and libraries.
1118                         Where to find the compiler executable files.
1119 * Spec Files::          How to pass switches to sub-processes.
1120 * Target Options::      Running a cross-compiler, or an old version of GCC.
1122 \x1f
1123 File: gcc.info,  Node: Overall Options,  Next: Invoking G++,  Prev: Option Summary,  Up: Invoking GCC
1125 3.2 Options Controlling the Kind of Output
1126 ==========================================
1128 Compilation can involve up to four stages: preprocessing, compilation
1129 proper, assembly and linking, always in that order.  GCC is capable of
1130 preprocessing and compiling several files either into several assembler
1131 input files, or into one assembler input file; then each assembler
1132 input file produces an object file, and linking combines all the object
1133 files (those newly compiled, and those specified as input) into an
1134 executable file.
1136  For any given input file, the file name suffix determines what kind of
1137 compilation is done:
1139 `FILE.c'
1140      C source code which must be preprocessed.
1142 `FILE.i'
1143      C source code which should not be preprocessed.
1145 `FILE.ii'
1146      C++ source code which should not be preprocessed.
1148 `FILE.m'
1149      Objective-C source code.  Note that you must link with the
1150      `libobjc' library to make an Objective-C program work.
1152 `FILE.mi'
1153      Objective-C source code which should not be preprocessed.
1155 `FILE.mm'
1156 `FILE.M'
1157      Objective-C++ source code.  Note that you must link with the
1158      `libobjc' library to make an Objective-C++ program work.  Note
1159      that `.M' refers to a literal capital M.
1161 `FILE.mii'
1162      Objective-C++ source code which should not be preprocessed.
1164 `FILE.h'
1165      C, C++, Objective-C or Objective-C++ header file to be turned into
1166      a precompiled header.
1168 `FILE.cc'
1169 `FILE.cp'
1170 `FILE.cxx'
1171 `FILE.cpp'
1172 `FILE.CPP'
1173 `FILE.c++'
1174 `FILE.C'
1175      C++ source code which must be preprocessed.  Note that in `.cxx',
1176      the last two letters must both be literally `x'.  Likewise, `.C'
1177      refers to a literal capital C.
1179 `FILE.mm'
1180 `FILE.M'
1181      Objective-C++ source code which must be preprocessed.
1183 `FILE.mii'
1184      Objective-C++ source code which should not be preprocessed.
1186 `FILE.hh'
1187 `FILE.H'
1188 `FILE.hp'
1189 `FILE.hxx'
1190 `FILE.hpp'
1191 `FILE.HPP'
1192 `FILE.h++'
1193 `FILE.tcc'
1194      C++ header file to be turned into a precompiled header.
1196 `FILE.f'
1197 `FILE.for'
1198 `FILE.ftn'
1199      Fixed form Fortran source code which should not be preprocessed.
1201 `FILE.F'
1202 `FILE.FOR'
1203 `FILE.fpp'
1204 `FILE.FPP'
1205 `FILE.FTN'
1206      Fixed form Fortran source code which must be preprocessed (with
1207      the traditional preprocessor).
1209 `FILE.f90'
1210 `FILE.f95'
1211 `FILE.f03'
1212 `FILE.f08'
1213      Free form Fortran source code which should not be preprocessed.
1215 `FILE.F90'
1216 `FILE.F95'
1217 `FILE.F03'
1218 `FILE.F08'
1219      Free form Fortran source code which must be preprocessed (with the
1220      traditional preprocessor).
1222 `FILE.ads'
1223      Ada source code file which contains a library unit declaration (a
1224      declaration of a package, subprogram, or generic, or a generic
1225      instantiation), or a library unit renaming declaration (a package,
1226      generic, or subprogram renaming declaration).  Such files are also
1227      called "specs".
1229 `FILE.adb'
1230      Ada source code file containing a library unit body (a subprogram
1231      or package body).  Such files are also called "bodies".
1233 `FILE.s'
1234      Assembler code.
1236 `FILE.S'
1237 `FILE.sx'
1238      Assembler code which must be preprocessed.
1240 `OTHER'
1241      An object file to be fed straight into linking.  Any file name
1242      with no recognized suffix is treated this way.
1244  You can specify the input language explicitly with the `-x' option:
1246 `-x LANGUAGE'
1247      Specify explicitly the LANGUAGE for the following input files
1248      (rather than letting the compiler choose a default based on the
1249      file name suffix).  This option applies to all following input
1250      files until the next `-x' option.  Possible values for LANGUAGE
1251      are:
1252           c  c-header  c-cpp-output
1253           c++  c++-header  c++-cpp-output
1254           objective-c  objective-c-header  objective-c-cpp-output
1255           objective-c++ objective-c++-header objective-c++-cpp-output
1256           assembler  assembler-with-cpp
1257           ada
1258           f77  f77-cpp-input f95  f95-cpp-input
1259           java
1261 `-x none'
1262      Turn off any specification of a language, so that subsequent files
1263      are handled according to their file name suffixes (as they are if
1264      `-x' has not been used at all).
1266 `-pass-exit-codes'
1267      Normally the `gcc' program will exit with the code of 1 if any
1268      phase of the compiler returns a non-success return code.  If you
1269      specify `-pass-exit-codes', the `gcc' program will instead return
1270      with numerically highest error produced by any phase that returned
1271      an error indication.  The C, C++, and Fortran frontends return 4,
1272      if an internal compiler error is encountered.
1274  If you only want some of the stages of compilation, you can use `-x'
1275 (or filename suffixes) to tell `gcc' where to start, and one of the
1276 options `-c', `-S', or `-E' to say where `gcc' is to stop.  Note that
1277 some combinations (for example, `-x cpp-output -E') instruct `gcc' to
1278 do nothing at all.
1280 `-c'
1281      Compile or assemble the source files, but do not link.  The linking
1282      stage simply is not done.  The ultimate output is in the form of an
1283      object file for each source file.
1285      By default, the object file name for a source file is made by
1286      replacing the suffix `.c', `.i', `.s', etc., with `.o'.
1288      Unrecognized input files, not requiring compilation or assembly,
1289      are ignored.
1291 `-S'
1292      Stop after the stage of compilation proper; do not assemble.  The
1293      output is in the form of an assembler code file for each
1294      non-assembler input file specified.
1296      By default, the assembler file name for a source file is made by
1297      replacing the suffix `.c', `.i', etc., with `.s'.
1299      Input files that don't require compilation are ignored.
1301 `-E'
1302      Stop after the preprocessing stage; do not run the compiler
1303      proper.  The output is in the form of preprocessed source code,
1304      which is sent to the standard output.
1306      Input files which don't require preprocessing are ignored.
1308 `-o FILE'
1309      Place output in file FILE.  This applies regardless to whatever
1310      sort of output is being produced, whether it be an executable file,
1311      an object file, an assembler file or preprocessed C code.
1313      If `-o' is not specified, the default is to put an executable file
1314      in `a.out', the object file for `SOURCE.SUFFIX' in `SOURCE.o', its
1315      assembler file in `SOURCE.s', a precompiled header file in
1316      `SOURCE.SUFFIX.gch', and all preprocessed C source on standard
1317      output.
1319 `-v'
1320      Print (on standard error output) the commands executed to run the
1321      stages of compilation.  Also print the version number of the
1322      compiler driver program and of the preprocessor and the compiler
1323      proper.
1325 `-###'
1326      Like `-v' except the commands are not executed and all command
1327      arguments are quoted.  This is useful for shell scripts to capture
1328      the driver-generated command lines.
1330 `-pipe'
1331      Use pipes rather than temporary files for communication between the
1332      various stages of compilation.  This fails to work on some systems
1333      where the assembler is unable to read from a pipe; but the GNU
1334      assembler has no trouble.
1336 `-combine'
1337      If you are compiling multiple source files, this option tells the
1338      driver to pass all the source files to the compiler at once (for
1339      those languages for which the compiler can handle this).  This
1340      will allow intermodule analysis (IMA) to be performed by the
1341      compiler.  Currently the only language for which this is supported
1342      is C.  If you pass source files for multiple languages to the
1343      driver, using this option, the driver will invoke the compiler(s)
1344      that support IMA once each, passing each compiler all the source
1345      files appropriate for it.  For those languages that do not support
1346      IMA this option will be ignored, and the compiler will be invoked
1347      once for each source file in that language.  If you use this
1348      option in conjunction with `-save-temps', the compiler will
1349      generate multiple pre-processed files (one for each source file),
1350      but only one (combined) `.o' or `.s' file.
1352 `--help'
1353      Print (on the standard output) a description of the command line
1354      options understood by `gcc'.  If the `-v' option is also specified
1355      then `--help' will also be passed on to the various processes
1356      invoked by `gcc', so that they can display the command line options
1357      they accept.  If the `-Wextra' option has also been specified
1358      (prior to the `--help' option), then command line options which
1359      have no documentation associated with them will also be displayed.
1361 `--target-help'
1362      Print (on the standard output) a description of target-specific
1363      command line options for each tool.  For some targets extra
1364      target-specific information may also be printed.
1366 `--help={CLASS|[^]QUALIFIER}[,...]'
1367      Print (on the standard output) a description of the command line
1368      options understood by the compiler that fit into all specified
1369      classes and qualifiers.  These are the supported classes:
1371     `optimizers'
1372           This will display all of the optimization options supported
1373           by the compiler.
1375     `warnings'
1376           This will display all of the options controlling warning
1377           messages produced by the compiler.
1379     `target'
1380           This will display target-specific options.  Unlike the
1381           `--target-help' option however, target-specific options of the
1382           linker and assembler will not be displayed.  This is because
1383           those tools do not currently support the extended `--help='
1384           syntax.
1386     `params'
1387           This will display the values recognized by the `--param'
1388           option.
1390     LANGUAGE
1391           This will display the options supported for LANGUAGE, where
1392           LANGUAGE is the name of one of the languages supported in this
1393           version of GCC.
1395     `common'
1396           This will display the options that are common to all
1397           languages.
1399      These are the supported qualifiers:
1401     `undocumented'
1402           Display only those options which are undocumented.
1404     `joined'
1405           Display options which take an argument that appears after an
1406           equal sign in the same continuous piece of text, such as:
1407           `--help=target'.
1409     `separate'
1410           Display options which take an argument that appears as a
1411           separate word following the original option, such as: `-o
1412           output-file'.
1414      Thus for example to display all the undocumented target-specific
1415      switches supported by the compiler the following can be used:
1417           --help=target,undocumented
1419      The sense of a qualifier can be inverted by prefixing it with the
1420      `^' character, so for example to display all binary warning
1421      options (i.e., ones that are either on or off and that do not take
1422      an argument), which have a description the following can be used:
1424           --help=warnings,^joined,^undocumented
1426      The argument to `--help=' should not consist solely of inverted
1427      qualifiers.
1429      Combining several classes is possible, although this usually
1430      restricts the output by so much that there is nothing to display.
1431      One case where it does work however is when one of the classes is
1432      TARGET.  So for example to display all the target-specific
1433      optimization options the following can be used:
1435           --help=target,optimizers
1437      The `--help=' option can be repeated on the command line.  Each
1438      successive use will display its requested class of options,
1439      skipping those that have already been displayed.
1441      If the `-Q' option appears on the command line before the
1442      `--help=' option, then the descriptive text displayed by `--help='
1443      is changed.  Instead of describing the displayed options, an
1444      indication is given as to whether the option is enabled, disabled
1445      or set to a specific value (assuming that the compiler knows this
1446      at the point where the `--help=' option is used).
1448      Here is a truncated example from the ARM port of `gcc':
1450             % gcc -Q -mabi=2 --help=target -c
1451             The following options are target specific:
1452             -mabi=                                2
1453             -mabort-on-noreturn                   [disabled]
1454             -mapcs                                [disabled]
1456      The output is sensitive to the effects of previous command line
1457      options, so for example it is possible to find out which
1458      optimizations are enabled at `-O2' by using:
1460           -Q -O2 --help=optimizers
1462      Alternatively you can discover which binary optimizations are
1463      enabled by `-O3' by using:
1465           gcc -c -Q -O3 --help=optimizers > /tmp/O3-opts
1466           gcc -c -Q -O2 --help=optimizers > /tmp/O2-opts
1467           diff /tmp/O2-opts /tmp/O3-opts | grep enabled
1469 `--version'
1470      Display the version number and copyrights of the invoked GCC.
1472 `-wrapper'
1473      Invoke all subcommands under a wrapper program. It takes a single
1474      comma separated list as an argument, which will be used to invoke
1475      the wrapper:
1477           gcc -c t.c -wrapper gdb,--args
1479      This will invoke all subprograms of gcc under "gdb -args", thus
1480      cc1 invocation will be "gdb -args cc1 ...".
1482 `@FILE'
1483      Read command-line options from FILE.  The options read are
1484      inserted in place of the original @FILE option.  If FILE does not
1485      exist, or cannot be read, then the option will be treated
1486      literally, and not removed.
1488      Options in FILE are separated by whitespace.  A whitespace
1489      character may be included in an option by surrounding the entire
1490      option in either single or double quotes.  Any character
1491      (including a backslash) may be included by prefixing the character
1492      to be included with a backslash.  The FILE may itself contain
1493      additional @FILE options; any such options will be processed
1494      recursively.
1496 \x1f
1497 File: gcc.info,  Node: Invoking G++,  Next: C Dialect Options,  Prev: Overall Options,  Up: Invoking GCC
1499 3.3 Compiling C++ Programs
1500 ==========================
1502 C++ source files conventionally use one of the suffixes `.C', `.cc',
1503 `.cpp', `.CPP', `.c++', `.cp', or `.cxx'; C++ header files often use
1504 `.hh', `.hpp', `.H', or (for shared template code) `.tcc'; and
1505 preprocessed C++ files use the suffix `.ii'.  GCC recognizes files with
1506 these names and compiles them as C++ programs even if you call the
1507 compiler the same way as for compiling C programs (usually with the
1508 name `gcc').
1510  However, the use of `gcc' does not add the C++ library.  `g++' is a
1511 program that calls GCC and treats `.c', `.h' and `.i' files as C++
1512 source files instead of C source files unless `-x' is used, and
1513 automatically specifies linking against the C++ library.  This program
1514 is also useful when precompiling a C header file with a `.h' extension
1515 for use in C++ compilations.  On many systems, `g++' is also installed
1516 with the name `c++'.
1518  When you compile C++ programs, you may specify many of the same
1519 command-line options that you use for compiling programs in any
1520 language; or command-line options meaningful for C and related
1521 languages; or options that are meaningful only for C++ programs.  *Note
1522 Options Controlling C Dialect: C Dialect Options, for explanations of
1523 options for languages related to C.  *Note Options Controlling C++
1524 Dialect: C++ Dialect Options, for explanations of options that are
1525 meaningful only for C++ programs.
1527 \x1f
1528 File: gcc.info,  Node: C Dialect Options,  Next: C++ Dialect Options,  Prev: Invoking G++,  Up: Invoking GCC
1530 3.4 Options Controlling C Dialect
1531 =================================
1533 The following options control the dialect of C (or languages derived
1534 from C, such as C++, Objective-C and Objective-C++) that the compiler
1535 accepts:
1537 `-ansi'
1538      In C mode, this is equivalent to `-std=c89'. In C++ mode, it is
1539      equivalent to `-std=c++98'.
1541      This turns off certain features of GCC that are incompatible with
1542      ISO C90 (when compiling C code), or of standard C++ (when
1543      compiling C++ code), such as the `asm' and `typeof' keywords, and
1544      predefined macros such as `unix' and `vax' that identify the type
1545      of system you are using.  It also enables the undesirable and
1546      rarely used ISO trigraph feature.  For the C compiler, it disables
1547      recognition of C++ style `//' comments as well as the `inline'
1548      keyword.
1550      The alternate keywords `__asm__', `__extension__', `__inline__'
1551      and `__typeof__' continue to work despite `-ansi'.  You would not
1552      want to use them in an ISO C program, of course, but it is useful
1553      to put them in header files that might be included in compilations
1554      done with `-ansi'.  Alternate predefined macros such as `__unix__'
1555      and `__vax__' are also available, with or without `-ansi'.
1557      The `-ansi' option does not cause non-ISO programs to be rejected
1558      gratuitously.  For that, `-pedantic' is required in addition to
1559      `-ansi'.  *Note Warning Options::.
1561      The macro `__STRICT_ANSI__' is predefined when the `-ansi' option
1562      is used.  Some header files may notice this macro and refrain from
1563      declaring certain functions or defining certain macros that the
1564      ISO standard doesn't call for; this is to avoid interfering with
1565      any programs that might use these names for other things.
1567      Functions that would normally be built in but do not have semantics
1568      defined by ISO C (such as `alloca' and `ffs') are not built-in
1569      functions when `-ansi' is used.  *Note Other built-in functions
1570      provided by GCC: Other Builtins, for details of the functions
1571      affected.
1573 `-std='
1574      Determine the language standard. *Note Language Standards
1575      Supported by GCC: Standards, for details of these standard
1576      versions.  This option is currently only supported when compiling
1577      C or C++.
1579      The compiler can accept several base standards, such as `c89' or
1580      `c++98', and GNU dialects of those standards, such as `gnu89' or
1581      `gnu++98'.  By specifying a base standard, the compiler will
1582      accept all programs following that standard and those using GNU
1583      extensions that do not contradict it.  For example, `-std=c89'
1584      turns off certain features of GCC that are incompatible with ISO
1585      C90, such as the `asm' and `typeof' keywords, but not other GNU
1586      extensions that do not have a meaning in ISO C90, such as omitting
1587      the middle term of a `?:' expression. On the other hand, by
1588      specifying a GNU dialect of a standard, all features the compiler
1589      support are enabled, even when those features change the meaning
1590      of the base standard and some strict-conforming programs may be
1591      rejected.  The particular standard is used by `-pedantic' to
1592      identify which features are GNU extensions given that version of
1593      the standard. For example `-std=gnu89 -pedantic' would warn about
1594      C++ style `//' comments, while `-std=gnu99 -pedantic' would not.
1596      A value for this option must be provided; possible values are
1598     `c89'
1599     `iso9899:1990'
1600           Support all ISO C90 programs (certain GNU extensions that
1601           conflict with ISO C90 are disabled). Same as `-ansi' for C
1602           code.
1604     `iso9899:199409'
1605           ISO C90 as modified in amendment 1.
1607     `c99'
1608     `c9x'
1609     `iso9899:1999'
1610     `iso9899:199x'
1611           ISO C99.  Note that this standard is not yet fully supported;
1612           see `http://gcc.gnu.org/gcc-4.4/c99status.html' for more
1613           information.  The names `c9x' and `iso9899:199x' are
1614           deprecated.
1616     `gnu89'
1617           GNU dialect of ISO C90 (including some C99 features). This is
1618           the default for C code.
1620     `gnu99'
1621     `gnu9x'
1622           GNU dialect of ISO C99.  When ISO C99 is fully implemented in
1623           GCC, this will become the default.  The name `gnu9x' is
1624           deprecated.
1626     `c++98'
1627           The 1998 ISO C++ standard plus amendments. Same as `-ansi' for
1628           C++ code.
1630     `gnu++98'
1631           GNU dialect of `-std=c++98'.  This is the default for C++
1632           code.
1634     `c++0x'
1635           The working draft of the upcoming ISO C++0x standard. This
1636           option enables experimental features that are likely to be
1637           included in C++0x. The working draft is constantly changing,
1638           and any feature that is enabled by this flag may be removed
1639           from future versions of GCC if it is not part of the C++0x
1640           standard.
1642     `gnu++0x'
1643           GNU dialect of `-std=c++0x'. This option enables experimental
1644           features that may be removed in future versions of GCC.
1646 `-fgnu89-inline'
1647      The option `-fgnu89-inline' tells GCC to use the traditional GNU
1648      semantics for `inline' functions when in C99 mode.  *Note An
1649      Inline Function is As Fast As a Macro: Inline.  This option is
1650      accepted and ignored by GCC versions 4.1.3 up to but not including
1651      4.3.  In GCC versions 4.3 and later it changes the behavior of GCC
1652      in C99 mode.  Using this option is roughly equivalent to adding the
1653      `gnu_inline' function attribute to all inline functions (*note
1654      Function Attributes::).
1656      The option `-fno-gnu89-inline' explicitly tells GCC to use the C99
1657      semantics for `inline' when in C99 or gnu99 mode (i.e., it
1658      specifies the default behavior).  This option was first supported
1659      in GCC 4.3.  This option is not supported in C89 or gnu89 mode.
1661      The preprocessor macros `__GNUC_GNU_INLINE__' and
1662      `__GNUC_STDC_INLINE__' may be used to check which semantics are in
1663      effect for `inline' functions.  *Note Common Predefined Macros:
1664      (cpp)Common Predefined Macros.
1666 `-aux-info FILENAME'
1667      Output to the given filename prototyped declarations for all
1668      functions declared and/or defined in a translation unit, including
1669      those in header files.  This option is silently ignored in any
1670      language other than C.
1672      Besides declarations, the file indicates, in comments, the origin
1673      of each declaration (source file and line), whether the
1674      declaration was implicit, prototyped or unprototyped (`I', `N' for
1675      new or `O' for old, respectively, in the first character after the
1676      line number and the colon), and whether it came from a declaration
1677      or a definition (`C' or `F', respectively, in the following
1678      character).  In the case of function definitions, a K&R-style list
1679      of arguments followed by their declarations is also provided,
1680      inside comments, after the declaration.
1682 `-fno-asm'
1683      Do not recognize `asm', `inline' or `typeof' as a keyword, so that
1684      code can use these words as identifiers.  You can use the keywords
1685      `__asm__', `__inline__' and `__typeof__' instead.  `-ansi' implies
1686      `-fno-asm'.
1688      In C++, this switch only affects the `typeof' keyword, since `asm'
1689      and `inline' are standard keywords.  You may want to use the
1690      `-fno-gnu-keywords' flag instead, which has the same effect.  In
1691      C99 mode (`-std=c99' or `-std=gnu99'), this switch only affects
1692      the `asm' and `typeof' keywords, since `inline' is a standard
1693      keyword in ISO C99.
1695 `-fno-builtin'
1696 `-fno-builtin-FUNCTION'
1697      Don't recognize built-in functions that do not begin with
1698      `__builtin_' as prefix.  *Note Other built-in functions provided
1699      by GCC: Other Builtins, for details of the functions affected,
1700      including those which are not built-in functions when `-ansi' or
1701      `-std' options for strict ISO C conformance are used because they
1702      do not have an ISO standard meaning.
1704      GCC normally generates special code to handle certain built-in
1705      functions more efficiently; for instance, calls to `alloca' may
1706      become single instructions that adjust the stack directly, and
1707      calls to `memcpy' may become inline copy loops.  The resulting
1708      code is often both smaller and faster, but since the function
1709      calls no longer appear as such, you cannot set a breakpoint on
1710      those calls, nor can you change the behavior of the functions by
1711      linking with a different library.  In addition, when a function is
1712      recognized as a built-in function, GCC may use information about
1713      that function to warn about problems with calls to that function,
1714      or to generate more efficient code, even if the resulting code
1715      still contains calls to that function.  For example, warnings are
1716      given with `-Wformat' for bad calls to `printf', when `printf' is
1717      built in, and `strlen' is known not to modify global memory.
1719      With the `-fno-builtin-FUNCTION' option only the built-in function
1720      FUNCTION is disabled.  FUNCTION must not begin with `__builtin_'.
1721      If a function is named that is not built-in in this version of
1722      GCC, this option is ignored.  There is no corresponding
1723      `-fbuiltin-FUNCTION' option; if you wish to enable built-in
1724      functions selectively when using `-fno-builtin' or
1725      `-ffreestanding', you may define macros such as:
1727           #define abs(n)          __builtin_abs ((n))
1728           #define strcpy(d, s)    __builtin_strcpy ((d), (s))
1730 `-fhosted'
1731      Assert that compilation takes place in a hosted environment.  This
1732      implies `-fbuiltin'.  A hosted environment is one in which the
1733      entire standard library is available, and in which `main' has a
1734      return type of `int'.  Examples are nearly everything except a
1735      kernel.  This is equivalent to `-fno-freestanding'.
1737 `-ffreestanding'
1738      Assert that compilation takes place in a freestanding environment.
1739      This implies `-fno-builtin'.  A freestanding environment is one
1740      in which the standard library may not exist, and program startup
1741      may not necessarily be at `main'.  The most obvious example is an
1742      OS kernel.  This is equivalent to `-fno-hosted'.
1744      *Note Language Standards Supported by GCC: Standards, for details
1745      of freestanding and hosted environments.
1747 `-fopenmp'
1748      Enable handling of OpenMP directives `#pragma omp' in C/C++ and
1749      `!$omp' in Fortran.  When `-fopenmp' is specified, the compiler
1750      generates parallel code according to the OpenMP Application
1751      Program Interface v2.5 `http://www.openmp.org/'.  This option
1752      implies `-pthread', and thus is only supported on targets that
1753      have support for `-pthread'.
1755 `-fms-extensions'
1756      Accept some non-standard constructs used in Microsoft header files.
1758      Some cases of unnamed fields in structures and unions are only
1759      accepted with this option.  *Note Unnamed struct/union fields
1760      within structs/unions: Unnamed Fields, for details.
1762 `-trigraphs'
1763      Support ISO C trigraphs.  The `-ansi' option (and `-std' options
1764      for strict ISO C conformance) implies `-trigraphs'.
1766 `-no-integrated-cpp'
1767      Performs a compilation in two passes: preprocessing and compiling.
1768      This option allows a user supplied "cc1", "cc1plus", or "cc1obj"
1769      via the `-B' option.  The user supplied compilation step can then
1770      add in an additional preprocessing step after normal preprocessing
1771      but before compiling.  The default is to use the integrated cpp
1772      (internal cpp)
1774      The semantics of this option will change if "cc1", "cc1plus", and
1775      "cc1obj" are merged.
1777 `-traditional'
1778 `-traditional-cpp'
1779      Formerly, these options caused GCC to attempt to emulate a
1780      pre-standard C compiler.  They are now only supported with the
1781      `-E' switch.  The preprocessor continues to support a pre-standard
1782      mode.  See the GNU CPP manual for details.
1784 `-fcond-mismatch'
1785      Allow conditional expressions with mismatched types in the second
1786      and third arguments.  The value of such an expression is void.
1787      This option is not supported for C++.
1789 `-flax-vector-conversions'
1790      Allow implicit conversions between vectors with differing numbers
1791      of elements and/or incompatible element types.  This option should
1792      not be used for new code.
1794 `-funsigned-char'
1795      Let the type `char' be unsigned, like `unsigned char'.
1797      Each kind of machine has a default for what `char' should be.  It
1798      is either like `unsigned char' by default or like `signed char' by
1799      default.
1801      Ideally, a portable program should always use `signed char' or
1802      `unsigned char' when it depends on the signedness of an object.
1803      But many programs have been written to use plain `char' and expect
1804      it to be signed, or expect it to be unsigned, depending on the
1805      machines they were written for.  This option, and its inverse, let
1806      you make such a program work with the opposite default.
1808      The type `char' is always a distinct type from each of `signed
1809      char' or `unsigned char', even though its behavior is always just
1810      like one of those two.
1812 `-fsigned-char'
1813      Let the type `char' be signed, like `signed char'.
1815      Note that this is equivalent to `-fno-unsigned-char', which is the
1816      negative form of `-funsigned-char'.  Likewise, the option
1817      `-fno-signed-char' is equivalent to `-funsigned-char'.
1819 `-fsigned-bitfields'
1820 `-funsigned-bitfields'
1821 `-fno-signed-bitfields'
1822 `-fno-unsigned-bitfields'
1823      These options control whether a bit-field is signed or unsigned,
1824      when the declaration does not use either `signed' or `unsigned'.
1825      By default, such a bit-field is signed, because this is
1826      consistent: the basic integer types such as `int' are signed types.
1828 \x1f
1829 File: gcc.info,  Node: C++ Dialect Options,  Next: Objective-C and Objective-C++ Dialect Options,  Prev: C Dialect Options,  Up: Invoking GCC
1831 3.5 Options Controlling C++ Dialect
1832 ===================================
1834 This section describes the command-line options that are only meaningful
1835 for C++ programs; but you can also use most of the GNU compiler options
1836 regardless of what language your program is in.  For example, you might
1837 compile a file `firstClass.C' like this:
1839      g++ -g -frepo -O -c firstClass.C
1841 In this example, only `-frepo' is an option meant only for C++
1842 programs; you can use the other options with any language supported by
1843 GCC.
1845  Here is a list of options that are _only_ for compiling C++ programs:
1847 `-fabi-version=N'
1848      Use version N of the C++ ABI.  Version 2 is the version of the C++
1849      ABI that first appeared in G++ 3.4.  Version 1 is the version of
1850      the C++ ABI that first appeared in G++ 3.2.  Version 0 will always
1851      be the version that conforms most closely to the C++ ABI
1852      specification.  Therefore, the ABI obtained using version 0 will
1853      change as ABI bugs are fixed.
1855      The default is version 2.
1857 `-fno-access-control'
1858      Turn off all access checking.  This switch is mainly useful for
1859      working around bugs in the access control code.
1861 `-fcheck-new'
1862      Check that the pointer returned by `operator new' is non-null
1863      before attempting to modify the storage allocated.  This check is
1864      normally unnecessary because the C++ standard specifies that
1865      `operator new' will only return `0' if it is declared `throw()',
1866      in which case the compiler will always check the return value even
1867      without this option.  In all other cases, when `operator new' has
1868      a non-empty exception specification, memory exhaustion is
1869      signalled by throwing `std::bad_alloc'.  See also `new (nothrow)'.
1871 `-fconserve-space'
1872      Put uninitialized or runtime-initialized global variables into the
1873      common segment, as C does.  This saves space in the executable at
1874      the cost of not diagnosing duplicate definitions.  If you compile
1875      with this flag and your program mysteriously crashes after
1876      `main()' has completed, you may have an object that is being
1877      destroyed twice because two definitions were merged.
1879      This option is no longer useful on most targets, now that support
1880      has been added for putting variables into BSS without making them
1881      common.
1883 `-ffriend-injection'
1884      Inject friend functions into the enclosing namespace, so that they
1885      are visible outside the scope of the class in which they are
1886      declared.  Friend functions were documented to work this way in
1887      the old Annotated C++ Reference Manual, and versions of G++ before
1888      4.1 always worked that way.  However, in ISO C++ a friend function
1889      which is not declared in an enclosing scope can only be found
1890      using argument dependent lookup.  This option causes friends to be
1891      injected as they were in earlier releases.
1893      This option is for compatibility, and may be removed in a future
1894      release of G++.
1896 `-fno-elide-constructors'
1897      The C++ standard allows an implementation to omit creating a
1898      temporary which is only used to initialize another object of the
1899      same type.  Specifying this option disables that optimization, and
1900      forces G++ to call the copy constructor in all cases.
1902 `-fno-enforce-eh-specs'
1903      Don't generate code to check for violation of exception
1904      specifications at runtime.  This option violates the C++ standard,
1905      but may be useful for reducing code size in production builds,
1906      much like defining `NDEBUG'.  This does not give user code
1907      permission to throw exceptions in violation of the exception
1908      specifications; the compiler will still optimize based on the
1909      specifications, so throwing an unexpected exception will result in
1910      undefined behavior.
1912 `-ffor-scope'
1913 `-fno-for-scope'
1914      If `-ffor-scope' is specified, the scope of variables declared in
1915      a for-init-statement is limited to the `for' loop itself, as
1916      specified by the C++ standard.  If `-fno-for-scope' is specified,
1917      the scope of variables declared in a for-init-statement extends to
1918      the end of the enclosing scope, as was the case in old versions of
1919      G++, and other (traditional) implementations of C++.
1921      The default if neither flag is given to follow the standard, but
1922      to allow and give a warning for old-style code that would
1923      otherwise be invalid, or have different behavior.
1925 `-fno-gnu-keywords'
1926      Do not recognize `typeof' as a keyword, so that code can use this
1927      word as an identifier.  You can use the keyword `__typeof__'
1928      instead.  `-ansi' implies `-fno-gnu-keywords'.
1930 `-fno-implicit-templates'
1931      Never emit code for non-inline templates which are instantiated
1932      implicitly (i.e. by use); only emit code for explicit
1933      instantiations.  *Note Template Instantiation::, for more
1934      information.
1936 `-fno-implicit-inline-templates'
1937      Don't emit code for implicit instantiations of inline templates,
1938      either.  The default is to handle inlines differently so that
1939      compiles with and without optimization will need the same set of
1940      explicit instantiations.
1942 `-fno-implement-inlines'
1943      To save space, do not emit out-of-line copies of inline functions
1944      controlled by `#pragma implementation'.  This will cause linker
1945      errors if these functions are not inlined everywhere they are
1946      called.
1948 `-fms-extensions'
1949      Disable pedantic warnings about constructs used in MFC, such as
1950      implicit int and getting a pointer to member function via
1951      non-standard syntax.
1953 `-fno-nonansi-builtins'
1954      Disable built-in declarations of functions that are not mandated by
1955      ANSI/ISO C.  These include `ffs', `alloca', `_exit', `index',
1956      `bzero', `conjf', and other related functions.
1958 `-fno-operator-names'
1959      Do not treat the operator name keywords `and', `bitand', `bitor',
1960      `compl', `not', `or' and `xor' as synonyms as keywords.
1962 `-fno-optional-diags'
1963      Disable diagnostics that the standard says a compiler does not
1964      need to issue.  Currently, the only such diagnostic issued by G++
1965      is the one for a name having multiple meanings within a class.
1967 `-fpermissive'
1968      Downgrade some diagnostics about nonconformant code from errors to
1969      warnings.  Thus, using `-fpermissive' will allow some
1970      nonconforming code to compile.
1972 `-frepo'
1973      Enable automatic template instantiation at link time.  This option
1974      also implies `-fno-implicit-templates'.  *Note Template
1975      Instantiation::, for more information.
1977 `-fno-rtti'
1978      Disable generation of information about every class with virtual
1979      functions for use by the C++ runtime type identification features
1980      (`dynamic_cast' and `typeid').  If you don't use those parts of
1981      the language, you can save some space by using this flag.  Note
1982      that exception handling uses the same information, but it will
1983      generate it as needed. The `dynamic_cast' operator can still be
1984      used for casts that do not require runtime type information, i.e.
1985      casts to `void *' or to unambiguous base classes.
1987 `-fstats'
1988      Emit statistics about front-end processing at the end of the
1989      compilation.  This information is generally only useful to the G++
1990      development team.
1992 `-ftemplate-depth-N'
1993      Set the maximum instantiation depth for template classes to N.  A
1994      limit on the template instantiation depth is needed to detect
1995      endless recursions during template class instantiation.  ANSI/ISO
1996      C++ conforming programs must not rely on a maximum depth greater
1997      than 17.
1999 `-fno-threadsafe-statics'
2000      Do not emit the extra code to use the routines specified in the C++
2001      ABI for thread-safe initialization of local statics.  You can use
2002      this option to reduce code size slightly in code that doesn't need
2003      to be thread-safe.
2005 `-fuse-cxa-atexit'
2006      Register destructors for objects with static storage duration with
2007      the `__cxa_atexit' function rather than the `atexit' function.
2008      This option is required for fully standards-compliant handling of
2009      static destructors, but will only work if your C library supports
2010      `__cxa_atexit'.
2012 `-fno-use-cxa-get-exception-ptr'
2013      Don't use the `__cxa_get_exception_ptr' runtime routine.  This
2014      will cause `std::uncaught_exception' to be incorrect, but is
2015      necessary if the runtime routine is not available.
2017 `-fvisibility-inlines-hidden'
2018      This switch declares that the user does not attempt to compare
2019      pointers to inline methods where the addresses of the two functions
2020      were taken in different shared objects.
2022      The effect of this is that GCC may, effectively, mark inline
2023      methods with `__attribute__ ((visibility ("hidden")))' so that
2024      they do not appear in the export table of a DSO and do not require
2025      a PLT indirection when used within the DSO.  Enabling this option
2026      can have a dramatic effect on load and link times of a DSO as it
2027      massively reduces the size of the dynamic export table when the
2028      library makes heavy use of templates.
2030      The behavior of this switch is not quite the same as marking the
2031      methods as hidden directly, because it does not affect static
2032      variables local to the function or cause the compiler to deduce
2033      that the function is defined in only one shared object.
2035      You may mark a method as having a visibility explicitly to negate
2036      the effect of the switch for that method.  For example, if you do
2037      want to compare pointers to a particular inline method, you might
2038      mark it as having default visibility.  Marking the enclosing class
2039      with explicit visibility will have no effect.
2041      Explicitly instantiated inline methods are unaffected by this
2042      option as their linkage might otherwise cross a shared library
2043      boundary.  *Note Template Instantiation::.
2045 `-fvisibility-ms-compat'
2046      This flag attempts to use visibility settings to make GCC's C++
2047      linkage model compatible with that of Microsoft Visual Studio.
2049      The flag makes these changes to GCC's linkage model:
2051        1. It sets the default visibility to `hidden', like
2052           `-fvisibility=hidden'.
2054        2. Types, but not their members, are not hidden by default.
2056        3. The One Definition Rule is relaxed for types without explicit
2057           visibility specifications which are defined in more than one
2058           different shared object: those declarations are permitted if
2059           they would have been permitted when this option was not used.
2061      In new code it is better to use `-fvisibility=hidden' and export
2062      those classes which are intended to be externally visible.
2063      Unfortunately it is possible for code to rely, perhaps
2064      accidentally, on the Visual Studio behavior.
2066      Among the consequences of these changes are that static data
2067      members of the same type with the same name but defined in
2068      different shared objects will be different, so changing one will
2069      not change the other; and that pointers to function members
2070      defined in different shared objects may not compare equal.  When
2071      this flag is given, it is a violation of the ODR to define types
2072      with the same name differently.
2074 `-fno-weak'
2075      Do not use weak symbol support, even if it is provided by the
2076      linker.  By default, G++ will use weak symbols if they are
2077      available.  This option exists only for testing, and should not be
2078      used by end-users; it will result in inferior code and has no
2079      benefits.  This option may be removed in a future release of G++.
2081 `-nostdinc++'
2082      Do not search for header files in the standard directories
2083      specific to C++, but do still search the other standard
2084      directories.  (This option is used when building the C++ library.)
2086  In addition, these optimization, warning, and code generation options
2087 have meanings only for C++ programs:
2089 `-fno-default-inline'
2090      Do not assume `inline' for functions defined inside a class scope.
2091      *Note Options That Control Optimization: Optimize Options.  Note
2092      that these functions will have linkage like inline functions; they
2093      just won't be inlined by default.
2095 `-Wabi (C, Objective-C, C++ and Objective-C++ only)'
2096      Warn when G++ generates code that is probably not compatible with
2097      the vendor-neutral C++ ABI.  Although an effort has been made to
2098      warn about all such cases, there are probably some cases that are
2099      not warned about, even though G++ is generating incompatible code.
2100      There may also be cases where warnings are emitted even though
2101      the code that is generated will be compatible.
2103      You should rewrite your code to avoid these warnings if you are
2104      concerned about the fact that code generated by G++ may not be
2105      binary compatible with code generated by other compilers.
2107      The known incompatibilities at this point include:
2109         * Incorrect handling of tail-padding for bit-fields.  G++ may
2110           attempt to pack data into the same byte as a base class.  For
2111           example:
2113                struct A { virtual void f(); int f1 : 1; };
2114                struct B : public A { int f2 : 1; };
2116           In this case, G++ will place `B::f2' into the same byte
2117           as`A::f1'; other compilers will not.  You can avoid this
2118           problem by explicitly padding `A' so that its size is a
2119           multiple of the byte size on your platform; that will cause
2120           G++ and other compilers to layout `B' identically.
2122         * Incorrect handling of tail-padding for virtual bases.  G++
2123           does not use tail padding when laying out virtual bases.  For
2124           example:
2126                struct A { virtual void f(); char c1; };
2127                struct B { B(); char c2; };
2128                struct C : public A, public virtual B {};
2130           In this case, G++ will not place `B' into the tail-padding for
2131           `A'; other compilers will.  You can avoid this problem by
2132           explicitly padding `A' so that its size is a multiple of its
2133           alignment (ignoring virtual base classes); that will cause
2134           G++ and other compilers to layout `C' identically.
2136         * Incorrect handling of bit-fields with declared widths greater
2137           than that of their underlying types, when the bit-fields
2138           appear in a union.  For example:
2140                union U { int i : 4096; };
2142           Assuming that an `int' does not have 4096 bits, G++ will make
2143           the union too small by the number of bits in an `int'.
2145         * Empty classes can be placed at incorrect offsets.  For
2146           example:
2148                struct A {};
2150                struct B {
2151                  A a;
2152                  virtual void f ();
2153                };
2155                struct C : public B, public A {};
2157           G++ will place the `A' base class of `C' at a nonzero offset;
2158           it should be placed at offset zero.  G++ mistakenly believes
2159           that the `A' data member of `B' is already at offset zero.
2161         * Names of template functions whose types involve `typename' or
2162           template template parameters can be mangled incorrectly.
2164                template <typename Q>
2165                void f(typename Q::X) {}
2167                template <template <typename> class Q>
2168                void f(typename Q<int>::X) {}
2170           Instantiations of these templates may be mangled incorrectly.
2173      It also warns psABI related changes.  The known psABI changes at
2174      this point include:
2176         * For SYSV/x86-64, when passing union with long double, it is
2177           changed to pass in memory as specified in psABI.  For example:
2179                union U {
2180                  long double ld;
2181                  int i;
2182                };
2184           `union U' will always be passed in memory.
2187 `-Wctor-dtor-privacy (C++ and Objective-C++ only)'
2188      Warn when a class seems unusable because all the constructors or
2189      destructors in that class are private, and it has neither friends
2190      nor public static member functions.
2192 `-Wnon-virtual-dtor (C++ and Objective-C++ only)'
2193      Warn when a class has virtual functions and accessible non-virtual
2194      destructor, in which case it would be possible but unsafe to delete
2195      an instance of a derived class through a pointer to the base class.
2196      This warning is also enabled if -Weffc++ is specified.
2198 `-Wreorder (C++ and Objective-C++ only)'
2199      Warn when the order of member initializers given in the code does
2200      not match the order in which they must be executed.  For instance:
2202           struct A {
2203             int i;
2204             int j;
2205             A(): j (0), i (1) { }
2206           };
2208      The compiler will rearrange the member initializers for `i' and
2209      `j' to match the declaration order of the members, emitting a
2210      warning to that effect.  This warning is enabled by `-Wall'.
2212  The following `-W...' options are not affected by `-Wall'.
2214 `-Weffc++ (C++ and Objective-C++ only)'
2215      Warn about violations of the following style guidelines from Scott
2216      Meyers' `Effective C++' book:
2218         * Item 11:  Define a copy constructor and an assignment
2219           operator for classes with dynamically allocated memory.
2221         * Item 12:  Prefer initialization to assignment in constructors.
2223         * Item 14:  Make destructors virtual in base classes.
2225         * Item 15:  Have `operator=' return a reference to `*this'.
2227         * Item 23:  Don't try to return a reference when you must
2228           return an object.
2231      Also warn about violations of the following style guidelines from
2232      Scott Meyers' `More Effective C++' book:
2234         * Item 6:  Distinguish between prefix and postfix forms of
2235           increment and decrement operators.
2237         * Item 7:  Never overload `&&', `||', or `,'.
2240      When selecting this option, be aware that the standard library
2241      headers do not obey all of these guidelines; use `grep -v' to
2242      filter out those warnings.
2244 `-Wstrict-null-sentinel (C++ and Objective-C++ only)'
2245      Warn also about the use of an uncasted `NULL' as sentinel.  When
2246      compiling only with GCC this is a valid sentinel, as `NULL' is
2247      defined to `__null'.  Although it is a null pointer constant not a
2248      null pointer, it is guaranteed to be of the same size as a
2249      pointer.  But this use is not portable across different compilers.
2251 `-Wno-non-template-friend (C++ and Objective-C++ only)'
2252      Disable warnings when non-templatized friend functions are declared
2253      within a template.  Since the advent of explicit template
2254      specification support in G++, if the name of the friend is an
2255      unqualified-id (i.e., `friend foo(int)'), the C++ language
2256      specification demands that the friend declare or define an
2257      ordinary, nontemplate function.  (Section 14.5.3).  Before G++
2258      implemented explicit specification, unqualified-ids could be
2259      interpreted as a particular specialization of a templatized
2260      function.  Because this non-conforming behavior is no longer the
2261      default behavior for G++, `-Wnon-template-friend' allows the
2262      compiler to check existing code for potential trouble spots and is
2263      on by default.  This new compiler behavior can be turned off with
2264      `-Wno-non-template-friend' which keeps the conformant compiler code
2265      but disables the helpful warning.
2267 `-Wold-style-cast (C++ and Objective-C++ only)'
2268      Warn if an old-style (C-style) cast to a non-void type is used
2269      within a C++ program.  The new-style casts (`dynamic_cast',
2270      `static_cast', `reinterpret_cast', and `const_cast') are less
2271      vulnerable to unintended effects and much easier to search for.
2273 `-Woverloaded-virtual (C++ and Objective-C++ only)'
2274      Warn when a function declaration hides virtual functions from a
2275      base class.  For example, in:
2277           struct A {
2278             virtual void f();
2279           };
2281           struct B: public A {
2282             void f(int);
2283           };
2285      the `A' class version of `f' is hidden in `B', and code like:
2287           B* b;
2288           b->f();
2290      will fail to compile.
2292 `-Wno-pmf-conversions (C++ and Objective-C++ only)'
2293      Disable the diagnostic for converting a bound pointer to member
2294      function to a plain pointer.
2296 `-Wsign-promo (C++ and Objective-C++ only)'
2297      Warn when overload resolution chooses a promotion from unsigned or
2298      enumerated type to a signed type, over a conversion to an unsigned
2299      type of the same size.  Previous versions of G++ would try to
2300      preserve unsignedness, but the standard mandates the current
2301      behavior.
2303           struct A {
2304             operator int ();
2305             A& operator = (int);
2306           };
2308           main ()
2309           {
2310             A a,b;
2311             a = b;
2312           }
2314      In this example, G++ will synthesize a default `A& operator =
2315      (const A&);', while cfront will use the user-defined `operator ='.
2317 \x1f
2318 File: gcc.info,  Node: Objective-C and Objective-C++ Dialect Options,  Next: Language Independent Options,  Prev: C++ Dialect Options,  Up: Invoking GCC
2320 3.6 Options Controlling Objective-C and Objective-C++ Dialects
2321 ==============================================================
2323 (NOTE: This manual does not describe the Objective-C and Objective-C++
2324 languages themselves.  See *Note Language Standards Supported by GCC:
2325 Standards, for references.)
2327  This section describes the command-line options that are only
2328 meaningful for Objective-C and Objective-C++ programs, but you can also
2329 use most of the language-independent GNU compiler options.  For
2330 example, you might compile a file `some_class.m' like this:
2332      gcc -g -fgnu-runtime -O -c some_class.m
2334 In this example, `-fgnu-runtime' is an option meant only for
2335 Objective-C and Objective-C++ programs; you can use the other options
2336 with any language supported by GCC.
2338  Note that since Objective-C is an extension of the C language,
2339 Objective-C compilations may also use options specific to the C
2340 front-end (e.g., `-Wtraditional').  Similarly, Objective-C++
2341 compilations may use C++-specific options (e.g., `-Wabi').
2343  Here is a list of options that are _only_ for compiling Objective-C
2344 and Objective-C++ programs:
2346 `-fconstant-string-class=CLASS-NAME'
2347      Use CLASS-NAME as the name of the class to instantiate for each
2348      literal string specified with the syntax `@"..."'.  The default
2349      class name is `NXConstantString' if the GNU runtime is being used,
2350      and `NSConstantString' if the NeXT runtime is being used (see
2351      below).  The `-fconstant-cfstrings' option, if also present, will
2352      override the `-fconstant-string-class' setting and cause `@"..."'
2353      literals to be laid out as constant CoreFoundation strings.
2355 `-fgnu-runtime'
2356      Generate object code compatible with the standard GNU Objective-C
2357      runtime.  This is the default for most types of systems.
2359 `-fnext-runtime'
2360      Generate output compatible with the NeXT runtime.  This is the
2361      default for NeXT-based systems, including Darwin and Mac OS X.
2362      The macro `__NEXT_RUNTIME__' is predefined if (and only if) this
2363      option is used.
2365 `-fno-nil-receivers'
2366      Assume that all Objective-C message dispatches (e.g., `[receiver
2367      message:arg]') in this translation unit ensure that the receiver
2368      is not `nil'.  This allows for more efficient entry points in the
2369      runtime to be used.  Currently, this option is only available in
2370      conjunction with the NeXT runtime on Mac OS X 10.3 and later.
2372 `-fobjc-call-cxx-cdtors'
2373      For each Objective-C class, check if any of its instance variables
2374      is a C++ object with a non-trivial default constructor.  If so,
2375      synthesize a special `- (id) .cxx_construct' instance method that
2376      will run non-trivial default constructors on any such instance
2377      variables, in order, and then return `self'.  Similarly, check if
2378      any instance variable is a C++ object with a non-trivial
2379      destructor, and if so, synthesize a special `- (void)
2380      .cxx_destruct' method that will run all such default destructors,
2381      in reverse order.
2383      The `- (id) .cxx_construct' and/or `- (void) .cxx_destruct' methods
2384      thusly generated will only operate on instance variables declared
2385      in the current Objective-C class, and not those inherited from
2386      superclasses.  It is the responsibility of the Objective-C runtime
2387      to invoke all such methods in an object's inheritance hierarchy.
2388      The `- (id) .cxx_construct' methods will be invoked by the runtime
2389      immediately after a new object instance is allocated; the `-
2390      (void) .cxx_destruct' methods will be invoked immediately before
2391      the runtime deallocates an object instance.
2393      As of this writing, only the NeXT runtime on Mac OS X 10.4 and
2394      later has support for invoking the `- (id) .cxx_construct' and `-
2395      (void) .cxx_destruct' methods.
2397 `-fobjc-direct-dispatch'
2398      Allow fast jumps to the message dispatcher.  On Darwin this is
2399      accomplished via the comm page.
2401 `-fobjc-exceptions'
2402      Enable syntactic support for structured exception handling in
2403      Objective-C, similar to what is offered by C++ and Java.  This
2404      option is unavailable in conjunction with the NeXT runtime on Mac
2405      OS X 10.2 and earlier.
2407             @try {
2408               ...
2409                  @throw expr;
2410               ...
2411             }
2412             @catch (AnObjCClass *exc) {
2413               ...
2414                 @throw expr;
2415               ...
2416                 @throw;
2417               ...
2418             }
2419             @catch (AnotherClass *exc) {
2420               ...
2421             }
2422             @catch (id allOthers) {
2423               ...
2424             }
2425             @finally {
2426               ...
2427                 @throw expr;
2428               ...
2429             }
2431      The `@throw' statement may appear anywhere in an Objective-C or
2432      Objective-C++ program; when used inside of a `@catch' block, the
2433      `@throw' may appear without an argument (as shown above), in which
2434      case the object caught by the `@catch' will be rethrown.
2436      Note that only (pointers to) Objective-C objects may be thrown and
2437      caught using this scheme.  When an object is thrown, it will be
2438      caught by the nearest `@catch' clause capable of handling objects
2439      of that type, analogously to how `catch' blocks work in C++ and
2440      Java.  A `@catch(id ...)' clause (as shown above) may also be
2441      provided to catch any and all Objective-C exceptions not caught by
2442      previous `@catch' clauses (if any).
2444      The `@finally' clause, if present, will be executed upon exit from
2445      the immediately preceding `@try ... @catch' section.  This will
2446      happen regardless of whether any exceptions are thrown, caught or
2447      rethrown inside the `@try ... @catch' section, analogously to the
2448      behavior of the `finally' clause in Java.
2450      There are several caveats to using the new exception mechanism:
2452         * Although currently designed to be binary compatible with
2453           `NS_HANDLER'-style idioms provided by the `NSException'
2454           class, the new exceptions can only be used on Mac OS X 10.3
2455           (Panther) and later systems, due to additional functionality
2456           needed in the (NeXT) Objective-C runtime.
2458         * As mentioned above, the new exceptions do not support handling
2459           types other than Objective-C objects.   Furthermore, when
2460           used from Objective-C++, the Objective-C exception model does
2461           not interoperate with C++ exceptions at this time.  This
2462           means you cannot `@throw' an exception from Objective-C and
2463           `catch' it in C++, or vice versa (i.e., `throw ... @catch').
2465      The `-fobjc-exceptions' switch also enables the use of
2466      synchronization blocks for thread-safe execution:
2468             @synchronized (ObjCClass *guard) {
2469               ...
2470             }
2472      Upon entering the `@synchronized' block, a thread of execution
2473      shall first check whether a lock has been placed on the
2474      corresponding `guard' object by another thread.  If it has, the
2475      current thread shall wait until the other thread relinquishes its
2476      lock.  Once `guard' becomes available, the current thread will
2477      place its own lock on it, execute the code contained in the
2478      `@synchronized' block, and finally relinquish the lock (thereby
2479      making `guard' available to other threads).
2481      Unlike Java, Objective-C does not allow for entire methods to be
2482      marked `@synchronized'.  Note that throwing exceptions out of
2483      `@synchronized' blocks is allowed, and will cause the guarding
2484      object to be unlocked properly.
2486 `-fobjc-gc'
2487      Enable garbage collection (GC) in Objective-C and Objective-C++
2488      programs.
2490 `-freplace-objc-classes'
2491      Emit a special marker instructing `ld(1)' not to statically link in
2492      the resulting object file, and allow `dyld(1)' to load it in at
2493      run time instead.  This is used in conjunction with the
2494      Fix-and-Continue debugging mode, where the object file in question
2495      may be recompiled and dynamically reloaded in the course of
2496      program execution, without the need to restart the program itself.
2497      Currently, Fix-and-Continue functionality is only available in
2498      conjunction with the NeXT runtime on Mac OS X 10.3 and later.
2500 `-fzero-link'
2501      When compiling for the NeXT runtime, the compiler ordinarily
2502      replaces calls to `objc_getClass("...")' (when the name of the
2503      class is known at compile time) with static class references that
2504      get initialized at load time, which improves run-time performance.
2505      Specifying the `-fzero-link' flag suppresses this behavior and
2506      causes calls to `objc_getClass("...")' to be retained.  This is
2507      useful in Zero-Link debugging mode, since it allows for individual
2508      class implementations to be modified during program execution.
2510 `-gen-decls'
2511      Dump interface declarations for all classes seen in the source
2512      file to a file named `SOURCENAME.decl'.
2514 `-Wassign-intercept (Objective-C and Objective-C++ only)'
2515      Warn whenever an Objective-C assignment is being intercepted by the
2516      garbage collector.
2518 `-Wno-protocol (Objective-C and Objective-C++ only)'
2519      If a class is declared to implement a protocol, a warning is
2520      issued for every method in the protocol that is not implemented by
2521      the class.  The default behavior is to issue a warning for every
2522      method not explicitly implemented in the class, even if a method
2523      implementation is inherited from the superclass.  If you use the
2524      `-Wno-protocol' option, then methods inherited from the superclass
2525      are considered to be implemented, and no warning is issued for
2526      them.
2528 `-Wselector (Objective-C and Objective-C++ only)'
2529      Warn if multiple methods of different types for the same selector
2530      are found during compilation.  The check is performed on the list
2531      of methods in the final stage of compilation.  Additionally, a
2532      check is performed for each selector appearing in a
2533      `@selector(...)'  expression, and a corresponding method for that
2534      selector has been found during compilation.  Because these checks
2535      scan the method table only at the end of compilation, these
2536      warnings are not produced if the final stage of compilation is not
2537      reached, for example because an error is found during compilation,
2538      or because the `-fsyntax-only' option is being used.
2540 `-Wstrict-selector-match (Objective-C and Objective-C++ only)'
2541      Warn if multiple methods with differing argument and/or return
2542      types are found for a given selector when attempting to send a
2543      message using this selector to a receiver of type `id' or `Class'.
2544      When this flag is off (which is the default behavior), the
2545      compiler will omit such warnings if any differences found are
2546      confined to types which share the same size and alignment.
2548 `-Wundeclared-selector (Objective-C and Objective-C++ only)'
2549      Warn if a `@selector(...)' expression referring to an undeclared
2550      selector is found.  A selector is considered undeclared if no
2551      method with that name has been declared before the
2552      `@selector(...)' expression, either explicitly in an `@interface'
2553      or `@protocol' declaration, or implicitly in an `@implementation'
2554      section.  This option always performs its checks as soon as a
2555      `@selector(...)' expression is found, while `-Wselector' only
2556      performs its checks in the final stage of compilation.  This also
2557      enforces the coding style convention that methods and selectors
2558      must be declared before being used.
2560 `-print-objc-runtime-info'
2561      Generate C header describing the largest structure that is passed
2562      by value, if any.
2565 \x1f
2566 File: gcc.info,  Node: Language Independent Options,  Next: Warning Options,  Prev: Objective-C and Objective-C++ Dialect Options,  Up: Invoking GCC
2568 3.7 Options to Control Diagnostic Messages Formatting
2569 =====================================================
2571 Traditionally, diagnostic messages have been formatted irrespective of
2572 the output device's aspect (e.g. its width, ...).  The options described
2573 below can be used to control the diagnostic messages formatting
2574 algorithm, e.g. how many characters per line, how often source location
2575 information should be reported.  Right now, only the C++ front end can
2576 honor these options.  However it is expected, in the near future, that
2577 the remaining front ends would be able to digest them correctly.
2579 `-fmessage-length=N'
2580      Try to format error messages so that they fit on lines of about N
2581      characters.  The default is 72 characters for `g++' and 0 for the
2582      rest of the front ends supported by GCC.  If N is zero, then no
2583      line-wrapping will be done; each error message will appear on a
2584      single line.
2586 `-fdiagnostics-show-location=once'
2587      Only meaningful in line-wrapping mode.  Instructs the diagnostic
2588      messages reporter to emit _once_ source location information; that
2589      is, in case the message is too long to fit on a single physical
2590      line and has to be wrapped, the source location won't be emitted
2591      (as prefix) again, over and over, in subsequent continuation
2592      lines.  This is the default behavior.
2594 `-fdiagnostics-show-location=every-line'
2595      Only meaningful in line-wrapping mode.  Instructs the diagnostic
2596      messages reporter to emit the same source location information (as
2597      prefix) for physical lines that result from the process of breaking
2598      a message which is too long to fit on a single line.
2600 `-fdiagnostics-show-option'
2601      This option instructs the diagnostic machinery to add text to each
2602      diagnostic emitted, which indicates which command line option
2603      directly controls that diagnostic, when such an option is known to
2604      the diagnostic machinery.
2606 `-Wcoverage-mismatch'
2607      Warn if feedback profiles do not match when using the
2608      `-fprofile-use' option.  If a source file was changed between
2609      `-fprofile-gen' and `-fprofile-use', the files with the profile
2610      feedback can fail to match the source file and GCC can not use the
2611      profile feedback information.  By default, GCC emits an error
2612      message in this case.  The option `-Wcoverage-mismatch' emits a
2613      warning instead of an error.  GCC does not use appropriate
2614      feedback profiles, so using this option can result in poorly
2615      optimized code.  This option is useful only in the case of very
2616      minor changes such as bug fixes to an existing code-base.
2619 \x1f
2620 File: gcc.info,  Node: Warning Options,  Next: Debugging Options,  Prev: Language Independent Options,  Up: Invoking GCC
2622 3.8 Options to Request or Suppress Warnings
2623 ===========================================
2625 Warnings are diagnostic messages that report constructions which are
2626 not inherently erroneous but which are risky or suggest there may have
2627 been an error.
2629  The following language-independent options do not enable specific
2630 warnings but control the kinds of diagnostics produced by GCC.
2632 `-fsyntax-only'
2633      Check the code for syntax errors, but don't do anything beyond
2634      that.
2636 `-w'
2637      Inhibit all warning messages.
2639 `-Werror'
2640      Make all warnings into errors.
2642 `-Werror='
2643      Make the specified warning into an error.  The specifier for a
2644      warning is appended, for example `-Werror=switch' turns the
2645      warnings controlled by `-Wswitch' into errors.  This switch takes a
2646      negative form, to be used to negate `-Werror' for specific
2647      warnings, for example `-Wno-error=switch' makes `-Wswitch'
2648      warnings not be errors, even when `-Werror' is in effect.  You can
2649      use the `-fdiagnostics-show-option' option to have each
2650      controllable warning amended with the option which controls it, to
2651      determine what to use with this option.
2653      Note that specifying `-Werror='FOO automatically implies `-W'FOO.
2654      However, `-Wno-error='FOO does not imply anything.
2656 `-Wfatal-errors'
2657      This option causes the compiler to abort compilation on the first
2658      error occurred rather than trying to keep going and printing
2659      further error messages.
2662  You can request many specific warnings with options beginning `-W',
2663 for example `-Wimplicit' to request warnings on implicit declarations.
2664 Each of these specific warning options also has a negative form
2665 beginning `-Wno-' to turn off warnings; for example, `-Wno-implicit'.
2666 This manual lists only one of the two forms, whichever is not the
2667 default.  For further, language-specific options also refer to *Note
2668 C++ Dialect Options:: and *Note Objective-C and Objective-C++ Dialect
2669 Options::.
2671 `-pedantic'
2672      Issue all the warnings demanded by strict ISO C and ISO C++;
2673      reject all programs that use forbidden extensions, and some other
2674      programs that do not follow ISO C and ISO C++.  For ISO C, follows
2675      the version of the ISO C standard specified by any `-std' option
2676      used.
2678      Valid ISO C and ISO C++ programs should compile properly with or
2679      without this option (though a rare few will require `-ansi' or a
2680      `-std' option specifying the required version of ISO C).  However,
2681      without this option, certain GNU extensions and traditional C and
2682      C++ features are supported as well.  With this option, they are
2683      rejected.
2685      `-pedantic' does not cause warning messages for use of the
2686      alternate keywords whose names begin and end with `__'.  Pedantic
2687      warnings are also disabled in the expression that follows
2688      `__extension__'.  However, only system header files should use
2689      these escape routes; application programs should avoid them.
2690      *Note Alternate Keywords::.
2692      Some users try to use `-pedantic' to check programs for strict ISO
2693      C conformance.  They soon find that it does not do quite what they
2694      want: it finds some non-ISO practices, but not all--only those for
2695      which ISO C _requires_ a diagnostic, and some others for which
2696      diagnostics have been added.
2698      A feature to report any failure to conform to ISO C might be
2699      useful in some instances, but would require considerable
2700      additional work and would be quite different from `-pedantic'.  We
2701      don't have plans to support such a feature in the near future.
2703      Where the standard specified with `-std' represents a GNU extended
2704      dialect of C, such as `gnu89' or `gnu99', there is a corresponding
2705      "base standard", the version of ISO C on which the GNU extended
2706      dialect is based.  Warnings from `-pedantic' are given where they
2707      are required by the base standard.  (It would not make sense for
2708      such warnings to be given only for features not in the specified
2709      GNU C dialect, since by definition the GNU dialects of C include
2710      all features the compiler supports with the given option, and
2711      there would be nothing to warn about.)
2713 `-pedantic-errors'
2714      Like `-pedantic', except that errors are produced rather than
2715      warnings.
2717 `-Wall'
2718      This enables all the warnings about constructions that some users
2719      consider questionable, and that are easy to avoid (or modify to
2720      prevent the warning), even in conjunction with macros.  This also
2721      enables some language-specific warnings described in *Note C++
2722      Dialect Options:: and *Note Objective-C and Objective-C++ Dialect
2723      Options::.
2725      `-Wall' turns on the following warning flags:
2727           -Waddress
2728           -Warray-bounds (only with `-O2')
2729           -Wc++0x-compat
2730           -Wchar-subscripts
2731           -Wimplicit-int
2732           -Wimplicit-function-declaration
2733           -Wcomment
2734           -Wformat
2735           -Wmain (only for C/ObjC and unless `-ffreestanding')
2736           -Wmissing-braces
2737           -Wnonnull
2738           -Wparentheses
2739           -Wpointer-sign
2740           -Wreorder
2741           -Wreturn-type
2742           -Wsequence-point
2743           -Wsign-compare (only in C++)
2744           -Wstrict-aliasing
2745           -Wstrict-overflow=1
2746           -Wswitch
2747           -Wtrigraphs
2748           -Wuninitialized
2749           -Wunknown-pragmas
2750           -Wunused-function
2751           -Wunused-label
2752           -Wunused-value
2753           -Wunused-variable
2754           -Wvolatile-register-var
2756      Note that some warning flags are not implied by `-Wall'.  Some of
2757      them warn about constructions that users generally do not consider
2758      questionable, but which occasionally you might wish to check for;
2759      others warn about constructions that are necessary or hard to
2760      avoid in some cases, and there is no simple way to modify the code
2761      to suppress the warning. Some of them are enabled by `-Wextra' but
2762      many of them must be enabled individually.
2764 `-Wextra'
2765      This enables some extra warning flags that are not enabled by
2766      `-Wall'. (This option used to be called `-W'.  The older name is
2767      still supported, but the newer name is more descriptive.)
2769           -Wclobbered
2770           -Wempty-body
2771           -Wignored-qualifiers
2772           -Wmissing-field-initializers
2773           -Wmissing-parameter-type (C only)
2774           -Wold-style-declaration (C only)
2775           -Woverride-init
2776           -Wsign-compare
2777           -Wtype-limits
2778           -Wuninitialized
2779           -Wunused-parameter (only with `-Wunused' or `-Wall')
2781      The option `-Wextra' also prints warning messages for the
2782      following cases:
2784         * A pointer is compared against integer zero with `<', `<=',
2785           `>', or `>='.
2787         * (C++ only) An enumerator and a non-enumerator both appear in a
2788           conditional expression.
2790         * (C++ only) Ambiguous virtual bases.
2792         * (C++ only) Subscripting an array which has been declared
2793           `register'.
2795         * (C++ only) Taking the address of a variable which has been
2796           declared `register'.
2798         * (C++ only) A base class is not initialized in a derived
2799           class' copy constructor.
2802 `-Wchar-subscripts'
2803      Warn if an array subscript has type `char'.  This is a common cause
2804      of error, as programmers often forget that this type is signed on
2805      some machines.  This warning is enabled by `-Wall'.
2807 `-Wcomment'
2808      Warn whenever a comment-start sequence `/*' appears in a `/*'
2809      comment, or whenever a Backslash-Newline appears in a `//' comment.
2810      This warning is enabled by `-Wall'.
2812 `-Wformat'
2813      Check calls to `printf' and `scanf', etc., to make sure that the
2814      arguments supplied have types appropriate to the format string
2815      specified, and that the conversions specified in the format string
2816      make sense.  This includes standard functions, and others
2817      specified by format attributes (*note Function Attributes::), in
2818      the `printf', `scanf', `strftime' and `strfmon' (an X/Open
2819      extension, not in the C standard) families (or other
2820      target-specific families).  Which functions are checked without
2821      format attributes having been specified depends on the standard
2822      version selected, and such checks of functions without the
2823      attribute specified are disabled by `-ffreestanding' or
2824      `-fno-builtin'.
2826      The formats are checked against the format features supported by
2827      GNU libc version 2.2.  These include all ISO C90 and C99 features,
2828      as well as features from the Single Unix Specification and some
2829      BSD and GNU extensions.  Other library implementations may not
2830      support all these features; GCC does not support warning about
2831      features that go beyond a particular library's limitations.
2832      However, if `-pedantic' is used with `-Wformat', warnings will be
2833      given about format features not in the selected standard version
2834      (but not for `strfmon' formats, since those are not in any version
2835      of the C standard).  *Note Options Controlling C Dialect: C
2836      Dialect Options.
2838      Since `-Wformat' also checks for null format arguments for several
2839      functions, `-Wformat' also implies `-Wnonnull'.
2841      `-Wformat' is included in `-Wall'.  For more control over some
2842      aspects of format checking, the options `-Wformat-y2k',
2843      `-Wno-format-extra-args', `-Wno-format-zero-length',
2844      `-Wformat-nonliteral', `-Wformat-security', and `-Wformat=2' are
2845      available, but are not included in `-Wall'.
2847 `-Wformat-y2k'
2848      If `-Wformat' is specified, also warn about `strftime' formats
2849      which may yield only a two-digit year.
2851 `-Wno-format-contains-nul'
2852      If `-Wformat' is specified, do not warn about format strings that
2853      contain NUL bytes.
2855 `-Wno-format-extra-args'
2856      If `-Wformat' is specified, do not warn about excess arguments to a
2857      `printf' or `scanf' format function.  The C standard specifies
2858      that such arguments are ignored.
2860      Where the unused arguments lie between used arguments that are
2861      specified with `$' operand number specifications, normally
2862      warnings are still given, since the implementation could not know
2863      what type to pass to `va_arg' to skip the unused arguments.
2864      However, in the case of `scanf' formats, this option will suppress
2865      the warning if the unused arguments are all pointers, since the
2866      Single Unix Specification says that such unused arguments are
2867      allowed.
2869 `-Wno-format-zero-length (C and Objective-C only)'
2870      If `-Wformat' is specified, do not warn about zero-length formats.
2871      The C standard specifies that zero-length formats are allowed.
2873 `-Wformat-nonliteral'
2874      If `-Wformat' is specified, also warn if the format string is not a
2875      string literal and so cannot be checked, unless the format function
2876      takes its format arguments as a `va_list'.
2878 `-Wformat-security'
2879      If `-Wformat' is specified, also warn about uses of format
2880      functions that represent possible security problems.  At present,
2881      this warns about calls to `printf' and `scanf' functions where the
2882      format string is not a string literal and there are no format
2883      arguments, as in `printf (foo);'.  This may be a security hole if
2884      the format string came from untrusted input and contains `%n'.
2885      (This is currently a subset of what `-Wformat-nonliteral' warns
2886      about, but in future warnings may be added to `-Wformat-security'
2887      that are not included in `-Wformat-nonliteral'.)
2889 `-Wformat=2'
2890      Enable `-Wformat' plus format checks not included in `-Wformat'.
2891      Currently equivalent to `-Wformat -Wformat-nonliteral
2892      -Wformat-security -Wformat-y2k'.
2894 `-Wnonnull (C and Objective-C only)'
2895      Warn about passing a null pointer for arguments marked as
2896      requiring a non-null value by the `nonnull' function attribute.
2898      `-Wnonnull' is included in `-Wall' and `-Wformat'.  It can be
2899      disabled with the `-Wno-nonnull' option.
2901 `-Winit-self (C, C++, Objective-C and Objective-C++ only)'
2902      Warn about uninitialized variables which are initialized with
2903      themselves.  Note this option can only be used with the
2904      `-Wuninitialized' option.
2906      For example, GCC will warn about `i' being uninitialized in the
2907      following snippet only when `-Winit-self' has been specified:
2908           int f()
2909           {
2910             int i = i;
2911             return i;
2912           }
2914 `-Wimplicit-int (C and Objective-C only)'
2915      Warn when a declaration does not specify a type.  This warning is
2916      enabled by `-Wall'.
2918 `-Wimplicit-function-declaration (C and Objective-C only)'
2919      Give a warning whenever a function is used before being declared.
2920      In C99 mode (`-std=c99' or `-std=gnu99'), this warning is enabled
2921      by default and it is made into an error by `-pedantic-errors'.
2922      This warning is also enabled by `-Wall'.
2924 `-Wimplicit'
2925      Same as `-Wimplicit-int' and `-Wimplicit-function-declaration'.
2926      This warning is enabled by `-Wall'.
2928 `-Wignored-qualifiers (C and C++ only)'
2929      Warn if the return type of a function has a type qualifier such as
2930      `const'.  For ISO C such a type qualifier has no effect, since the
2931      value returned by a function is not an lvalue.  For C++, the
2932      warning is only emitted for scalar types or `void'.  ISO C
2933      prohibits qualified `void' return types on function definitions,
2934      so such return types always receive a warning even without this
2935      option.
2937      This warning is also enabled by `-Wextra'.
2939 `-Wmain'
2940      Warn if the type of `main' is suspicious.  `main' should be a
2941      function with external linkage, returning int, taking either zero
2942      arguments, two, or three arguments of appropriate types.  This
2943      warning is enabled by default in C++ and is enabled by either
2944      `-Wall' or `-pedantic'.
2946 `-Wmissing-braces'
2947      Warn if an aggregate or union initializer is not fully bracketed.
2948      In the following example, the initializer for `a' is not fully
2949      bracketed, but that for `b' is fully bracketed.
2951           int a[2][2] = { 0, 1, 2, 3 };
2952           int b[2][2] = { { 0, 1 }, { 2, 3 } };
2954      This warning is enabled by `-Wall'.
2956 `-Wmissing-include-dirs (C, C++, Objective-C and Objective-C++ only)'
2957      Warn if a user-supplied include directory does not exist.
2959 `-Wparentheses'
2960      Warn if parentheses are omitted in certain contexts, such as when
2961      there is an assignment in a context where a truth value is
2962      expected, or when operators are nested whose precedence people
2963      often get confused about.
2965      Also warn if a comparison like `x<=y<=z' appears; this is
2966      equivalent to `(x<=y ? 1 : 0) <= z', which is a different
2967      interpretation from that of ordinary mathematical notation.
2969      Also warn about constructions where there may be confusion to which
2970      `if' statement an `else' branch belongs.  Here is an example of
2971      such a case:
2973           {
2974             if (a)
2975               if (b)
2976                 foo ();
2977             else
2978               bar ();
2979           }
2981      In C/C++, every `else' branch belongs to the innermost possible
2982      `if' statement, which in this example is `if (b)'.  This is often
2983      not what the programmer expected, as illustrated in the above
2984      example by indentation the programmer chose.  When there is the
2985      potential for this confusion, GCC will issue a warning when this
2986      flag is specified.  To eliminate the warning, add explicit braces
2987      around the innermost `if' statement so there is no way the `else'
2988      could belong to the enclosing `if'.  The resulting code would look
2989      like this:
2991           {
2992             if (a)
2993               {
2994                 if (b)
2995                   foo ();
2996                 else
2997                   bar ();
2998               }
2999           }
3001      This warning is enabled by `-Wall'.
3003 `-Wsequence-point'
3004      Warn about code that may have undefined semantics because of
3005      violations of sequence point rules in the C and C++ standards.
3007      The C and C++ standards defines the order in which expressions in
3008      a C/C++ program are evaluated in terms of "sequence points", which
3009      represent a partial ordering between the execution of parts of the
3010      program: those executed before the sequence point, and those
3011      executed after it.  These occur after the evaluation of a full
3012      expression (one which is not part of a larger expression), after
3013      the evaluation of the first operand of a `&&', `||', `? :' or `,'
3014      (comma) operator, before a function is called (but after the
3015      evaluation of its arguments and the expression denoting the called
3016      function), and in certain other places.  Other than as expressed
3017      by the sequence point rules, the order of evaluation of
3018      subexpressions of an expression is not specified.  All these rules
3019      describe only a partial order rather than a total order, since,
3020      for example, if two functions are called within one expression
3021      with no sequence point between them, the order in which the
3022      functions are called is not specified.  However, the standards
3023      committee have ruled that function calls do not overlap.
3025      It is not specified when between sequence points modifications to
3026      the values of objects take effect.  Programs whose behavior
3027      depends on this have undefined behavior; the C and C++ standards
3028      specify that "Between the previous and next sequence point an
3029      object shall have its stored value modified at most once by the
3030      evaluation of an expression.  Furthermore, the prior value shall
3031      be read only to determine the value to be stored.".  If a program
3032      breaks these rules, the results on any particular implementation
3033      are entirely unpredictable.
3035      Examples of code with undefined behavior are `a = a++;', `a[n] =
3036      b[n++]' and `a[i++] = i;'.  Some more complicated cases are not
3037      diagnosed by this option, and it may give an occasional false
3038      positive result, but in general it has been found fairly effective
3039      at detecting this sort of problem in programs.
3041      The standard is worded confusingly, therefore there is some debate
3042      over the precise meaning of the sequence point rules in subtle
3043      cases.  Links to discussions of the problem, including proposed
3044      formal definitions, may be found on the GCC readings page, at
3045      `http://gcc.gnu.org/readings.html'.
3047      This warning is enabled by `-Wall' for C and C++.
3049 `-Wreturn-type'
3050      Warn whenever a function is defined with a return-type that
3051      defaults to `int'.  Also warn about any `return' statement with no
3052      return-value in a function whose return-type is not `void'
3053      (falling off the end of the function body is considered returning
3054      without a value), and about a `return' statement with a expression
3055      in a function whose return-type is `void'.
3057      For C++, a function without return type always produces a
3058      diagnostic message, even when `-Wno-return-type' is specified.
3059      The only exceptions are `main' and functions defined in system
3060      headers.
3062      This warning is enabled by `-Wall'.
3064 `-Wswitch'
3065      Warn whenever a `switch' statement has an index of enumerated type
3066      and lacks a `case' for one or more of the named codes of that
3067      enumeration.  (The presence of a `default' label prevents this
3068      warning.)  `case' labels outside the enumeration range also
3069      provoke warnings when this option is used.  This warning is
3070      enabled by `-Wall'.
3072 `-Wswitch-default'
3073      Warn whenever a `switch' statement does not have a `default' case.
3075 `-Wswitch-enum'
3076      Warn whenever a `switch' statement has an index of enumerated type
3077      and lacks a `case' for one or more of the named codes of that
3078      enumeration.  `case' labels outside the enumeration range also
3079      provoke warnings when this option is used.
3081 `-Wsync-nand (C and C++ only)'
3082      Warn when `__sync_fetch_and_nand' and `__sync_nand_and_fetch'
3083      built-in functions are used.  These functions changed semantics in
3084      GCC 4.4.
3086 `-Wtrigraphs'
3087      Warn if any trigraphs are encountered that might change the
3088      meaning of the program (trigraphs within comments are not warned
3089      about).  This warning is enabled by `-Wall'.
3091 `-Wunused-function'
3092      Warn whenever a static function is declared but not defined or a
3093      non-inline static function is unused.  This warning is enabled by
3094      `-Wall'.
3096 `-Wunused-label'
3097      Warn whenever a label is declared but not used.  This warning is
3098      enabled by `-Wall'.
3100      To suppress this warning use the `unused' attribute (*note
3101      Variable Attributes::).
3103 `-Wunused-parameter'
3104      Warn whenever a function parameter is unused aside from its
3105      declaration.
3107      To suppress this warning use the `unused' attribute (*note
3108      Variable Attributes::).
3110 `-Wunused-variable'
3111      Warn whenever a local variable or non-constant static variable is
3112      unused aside from its declaration.  This warning is enabled by
3113      `-Wall'.
3115      To suppress this warning use the `unused' attribute (*note
3116      Variable Attributes::).
3118 `-Wunused-value'
3119      Warn whenever a statement computes a result that is explicitly not
3120      used. To suppress this warning cast the unused expression to
3121      `void'. This includes an expression-statement or the left-hand
3122      side of a comma expression that contains no side effects. For
3123      example, an expression such as `x[i,j]' will cause a warning, while
3124      `x[(void)i,j]' will not.
3126      This warning is enabled by `-Wall'.
3128 `-Wunused'
3129      All the above `-Wunused' options combined.
3131      In order to get a warning about an unused function parameter, you
3132      must either specify `-Wextra -Wunused' (note that `-Wall' implies
3133      `-Wunused'), or separately specify `-Wunused-parameter'.
3135 `-Wuninitialized'
3136      Warn if an automatic variable is used without first being
3137      initialized or if a variable may be clobbered by a `setjmp' call.
3138      In C++, warn if a non-static reference or non-static `const' member
3139      appears in a class without constructors.
3141      If you want to warn about code which uses the uninitialized value
3142      of the variable in its own initializer, use the `-Winit-self'
3143      option.
3145      These warnings occur for individual uninitialized or clobbered
3146      elements of structure, union or array variables as well as for
3147      variables which are uninitialized or clobbered as a whole.  They do
3148      not occur for variables or elements declared `volatile'.  Because
3149      these warnings depend on optimization, the exact variables or
3150      elements for which there are warnings will depend on the precise
3151      optimization options and version of GCC used.
3153      Note that there may be no warning about a variable that is used
3154      only to compute a value that itself is never used, because such
3155      computations may be deleted by data flow analysis before the
3156      warnings are printed.
3158      These warnings are made optional because GCC is not smart enough
3159      to see all the reasons why the code might be correct despite
3160      appearing to have an error.  Here is one example of how this can
3161      happen:
3163           {
3164             int x;
3165             switch (y)
3166               {
3167               case 1: x = 1;
3168                 break;
3169               case 2: x = 4;
3170                 break;
3171               case 3: x = 5;
3172               }
3173             foo (x);
3174           }
3176      If the value of `y' is always 1, 2 or 3, then `x' is always
3177      initialized, but GCC doesn't know this.  Here is another common
3178      case:
3180           {
3181             int save_y;
3182             if (change_y) save_y = y, y = new_y;
3183             ...
3184             if (change_y) y = save_y;
3185           }
3187      This has no bug because `save_y' is used only if it is set.
3189      This option also warns when a non-volatile automatic variable
3190      might be changed by a call to `longjmp'.  These warnings as well
3191      are possible only in optimizing compilation.
3193      The compiler sees only the calls to `setjmp'.  It cannot know
3194      where `longjmp' will be called; in fact, a signal handler could
3195      call it at any point in the code.  As a result, you may get a
3196      warning even when there is in fact no problem because `longjmp'
3197      cannot in fact be called at the place which would cause a problem.
3199      Some spurious warnings can be avoided if you declare all the
3200      functions you use that never return as `noreturn'.  *Note Function
3201      Attributes::.
3203      This warning is enabled by `-Wall' or `-Wextra'.
3205 `-Wunknown-pragmas'
3206      Warn when a #pragma directive is encountered which is not
3207      understood by GCC.  If this command line option is used, warnings
3208      will even be issued for unknown pragmas in system header files.
3209      This is not the case if the warnings were only enabled by the
3210      `-Wall' command line option.
3212 `-Wno-pragmas'
3213      Do not warn about misuses of pragmas, such as incorrect parameters,
3214      invalid syntax, or conflicts between pragmas.  See also
3215      `-Wunknown-pragmas'.
3217 `-Wstrict-aliasing'
3218      This option is only active when `-fstrict-aliasing' is active.  It
3219      warns about code which might break the strict aliasing rules that
3220      the compiler is using for optimization.  The warning does not
3221      catch all cases, but does attempt to catch the more common
3222      pitfalls.  It is included in `-Wall'.  It is equivalent to
3223      `-Wstrict-aliasing=3'
3225 `-Wstrict-aliasing=n'
3226      This option is only active when `-fstrict-aliasing' is active.  It
3227      warns about code which might break the strict aliasing rules that
3228      the compiler is using for optimization.  Higher levels correspond
3229      to higher accuracy (fewer false positives).  Higher levels also
3230      correspond to more effort, similar to the way -O works.
3231      `-Wstrict-aliasing' is equivalent to `-Wstrict-aliasing=n', with
3232      n=3.
3234      Level 1: Most aggressive, quick, least accurate.  Possibly useful
3235      when higher levels do not warn but -fstrict-aliasing still breaks
3236      the code, as it has very few false negatives.  However, it has
3237      many false positives.  Warns for all pointer conversions between
3238      possibly incompatible types, even if never dereferenced.  Runs in
3239      the frontend only.
3241      Level 2: Aggressive, quick, not too precise.  May still have many
3242      false positives (not as many as level 1 though), and few false
3243      negatives (but possibly more than level 1).  Unlike level 1, it
3244      only warns when an address is taken.  Warns about incomplete
3245      types.  Runs in the frontend only.
3247      Level 3 (default for `-Wstrict-aliasing'): Should have very few
3248      false positives and few false negatives.  Slightly slower than
3249      levels 1 or 2 when optimization is enabled.  Takes care of the
3250      common punn+dereference pattern in the frontend:
3251      `*(int*)&some_float'.  If optimization is enabled, it also runs in
3252      the backend, where it deals with multiple statement cases using
3253      flow-sensitive points-to information.  Only warns when the
3254      converted pointer is dereferenced.  Does not warn about incomplete
3255      types.
3257 `-Wstrict-overflow'
3258 `-Wstrict-overflow=N'
3259      This option is only active when `-fstrict-overflow' is active.  It
3260      warns about cases where the compiler optimizes based on the
3261      assumption that signed overflow does not occur.  Note that it does
3262      not warn about all cases where the code might overflow: it only
3263      warns about cases where the compiler implements some optimization.
3264      Thus this warning depends on the optimization level.
3266      An optimization which assumes that signed overflow does not occur
3267      is perfectly safe if the values of the variables involved are such
3268      that overflow never does, in fact, occur.  Therefore this warning
3269      can easily give a false positive: a warning about code which is not
3270      actually a problem.  To help focus on important issues, several
3271      warning levels are defined.  No warnings are issued for the use of
3272      undefined signed overflow when estimating how many iterations a
3273      loop will require, in particular when determining whether a loop
3274      will be executed at all.
3276     `-Wstrict-overflow=1'
3277           Warn about cases which are both questionable and easy to
3278           avoid.  For example: `x + 1 > x'; with `-fstrict-overflow',
3279           the compiler will simplify this to `1'.  This level of
3280           `-Wstrict-overflow' is enabled by `-Wall'; higher levels are
3281           not, and must be explicitly requested.
3283     `-Wstrict-overflow=2'
3284           Also warn about other cases where a comparison is simplified
3285           to a constant.  For example: `abs (x) >= 0'.  This can only be
3286           simplified when `-fstrict-overflow' is in effect, because
3287           `abs (INT_MIN)' overflows to `INT_MIN', which is less than
3288           zero.  `-Wstrict-overflow' (with no level) is the same as
3289           `-Wstrict-overflow=2'.
3291     `-Wstrict-overflow=3'
3292           Also warn about other cases where a comparison is simplified.
3293           For example: `x + 1 > 1' will be simplified to `x > 0'.
3295     `-Wstrict-overflow=4'
3296           Also warn about other simplifications not covered by the
3297           above cases.  For example: `(x * 10) / 5' will be simplified
3298           to `x * 2'.
3300     `-Wstrict-overflow=5'
3301           Also warn about cases where the compiler reduces the
3302           magnitude of a constant involved in a comparison.  For
3303           example: `x + 2 > y' will be simplified to `x + 1 >= y'.
3304           This is reported only at the highest warning level because
3305           this simplification applies to many comparisons, so this
3306           warning level will give a very large number of false
3307           positives.
3309 `-Warray-bounds'
3310      This option is only active when `-ftree-vrp' is active (default
3311      for -O2 and above). It warns about subscripts to arrays that are
3312      always out of bounds. This warning is enabled by `-Wall'.
3314 `-Wno-div-by-zero'
3315      Do not warn about compile-time integer division by zero.  Floating
3316      point division by zero is not warned about, as it can be a
3317      legitimate way of obtaining infinities and NaNs.
3319 `-Wsystem-headers'
3320      Print warning messages for constructs found in system header files.
3321      Warnings from system headers are normally suppressed, on the
3322      assumption that they usually do not indicate real problems and
3323      would only make the compiler output harder to read.  Using this
3324      command line option tells GCC to emit warnings from system headers
3325      as if they occurred in user code.  However, note that using
3326      `-Wall' in conjunction with this option will _not_ warn about
3327      unknown pragmas in system headers--for that, `-Wunknown-pragmas'
3328      must also be used.
3330 `-Wfloat-equal'
3331      Warn if floating point values are used in equality comparisons.
3333      The idea behind this is that sometimes it is convenient (for the
3334      programmer) to consider floating-point values as approximations to
3335      infinitely precise real numbers.  If you are doing this, then you
3336      need to compute (by analyzing the code, or in some other way) the
3337      maximum or likely maximum error that the computation introduces,
3338      and allow for it when performing comparisons (and when producing
3339      output, but that's a different problem).  In particular, instead
3340      of testing for equality, you would check to see whether the two
3341      values have ranges that overlap; and this is done with the
3342      relational operators, so equality comparisons are probably
3343      mistaken.
3345 `-Wtraditional (C and Objective-C only)'
3346      Warn about certain constructs that behave differently in
3347      traditional and ISO C.  Also warn about ISO C constructs that have
3348      no traditional C equivalent, and/or problematic constructs which
3349      should be avoided.
3351         * Macro parameters that appear within string literals in the
3352           macro body.  In traditional C macro replacement takes place
3353           within string literals, but does not in ISO C.
3355         * In traditional C, some preprocessor directives did not exist.
3356           Traditional preprocessors would only consider a line to be a
3357           directive if the `#' appeared in column 1 on the line.
3358           Therefore `-Wtraditional' warns about directives that
3359           traditional C understands but would ignore because the `#'
3360           does not appear as the first character on the line.  It also
3361           suggests you hide directives like `#pragma' not understood by
3362           traditional C by indenting them.  Some traditional
3363           implementations would not recognize `#elif', so it suggests
3364           avoiding it altogether.
3366         * A function-like macro that appears without arguments.
3368         * The unary plus operator.
3370         * The `U' integer constant suffix, or the `F' or `L' floating
3371           point constant suffixes.  (Traditional C does support the `L'
3372           suffix on integer constants.)  Note, these suffixes appear in
3373           macros defined in the system headers of most modern systems,
3374           e.g. the `_MIN'/`_MAX' macros in `<limits.h>'.  Use of these
3375           macros in user code might normally lead to spurious warnings,
3376           however GCC's integrated preprocessor has enough context to
3377           avoid warning in these cases.
3379         * A function declared external in one block and then used after
3380           the end of the block.
3382         * A `switch' statement has an operand of type `long'.
3384         * A non-`static' function declaration follows a `static' one.
3385           This construct is not accepted by some traditional C
3386           compilers.
3388         * The ISO type of an integer constant has a different width or
3389           signedness from its traditional type.  This warning is only
3390           issued if the base of the constant is ten.  I.e. hexadecimal
3391           or octal values, which typically represent bit patterns, are
3392           not warned about.
3394         * Usage of ISO string concatenation is detected.
3396         * Initialization of automatic aggregates.
3398         * Identifier conflicts with labels.  Traditional C lacks a
3399           separate namespace for labels.
3401         * Initialization of unions.  If the initializer is zero, the
3402           warning is omitted.  This is done under the assumption that
3403           the zero initializer in user code appears conditioned on e.g.
3404           `__STDC__' to avoid missing initializer warnings and relies
3405           on default initialization to zero in the traditional C case.
3407         * Conversions by prototypes between fixed/floating point values
3408           and vice versa.  The absence of these prototypes when
3409           compiling with traditional C would cause serious problems.
3410           This is a subset of the possible conversion warnings, for the
3411           full set use `-Wtraditional-conversion'.
3413         * Use of ISO C style function definitions.  This warning
3414           intentionally is _not_ issued for prototype declarations or
3415           variadic functions because these ISO C features will appear
3416           in your code when using libiberty's traditional C
3417           compatibility macros, `PARAMS' and `VPARAMS'.  This warning
3418           is also bypassed for nested functions because that feature is
3419           already a GCC extension and thus not relevant to traditional
3420           C compatibility.
3422 `-Wtraditional-conversion (C and Objective-C only)'
3423      Warn if a prototype causes a type conversion that is different
3424      from what would happen to the same argument in the absence of a
3425      prototype.  This includes conversions of fixed point to floating
3426      and vice versa, and conversions changing the width or signedness
3427      of a fixed point argument except when the same as the default
3428      promotion.
3430 `-Wdeclaration-after-statement (C and Objective-C only)'
3431      Warn when a declaration is found after a statement in a block.
3432      This construct, known from C++, was introduced with ISO C99 and is
3433      by default allowed in GCC.  It is not supported by ISO C90 and was
3434      not supported by GCC versions before GCC 3.0.  *Note Mixed
3435      Declarations::.
3437 `-Wundef'
3438      Warn if an undefined identifier is evaluated in an `#if' directive.
3440 `-Wno-endif-labels'
3441      Do not warn whenever an `#else' or an `#endif' are followed by
3442      text.
3444 `-Wshadow'
3445      Warn whenever a local variable shadows another local variable,
3446      parameter or global variable or whenever a built-in function is
3447      shadowed.
3449 `-Wlarger-than=LEN'
3450      Warn whenever an object of larger than LEN bytes is defined.
3452 `-Wframe-larger-than=LEN'
3453      Warn if the size of a function frame is larger than LEN bytes.
3454      The computation done to determine the stack frame size is
3455      approximate and not conservative.  The actual requirements may be
3456      somewhat greater than LEN even if you do not get a warning.  In
3457      addition, any space allocated via `alloca', variable-length
3458      arrays, or related constructs is not included by the compiler when
3459      determining whether or not to issue a warning.
3461 `-Wunsafe-loop-optimizations'
3462      Warn if the loop cannot be optimized because the compiler could not
3463      assume anything on the bounds of the loop indices.  With
3464      `-funsafe-loop-optimizations' warn if the compiler made such
3465      assumptions.
3467 `-Wno-pedantic-ms-format (MinGW targets only)'
3468      Disables the warnings about non-ISO `printf' / `scanf' format
3469      width specifiers `I32', `I64', and `I' used on Windows targets
3470      depending on the MS runtime, when you are using the options
3471      `-Wformat' and `-pedantic' without gnu-extensions.
3473 `-Wpointer-arith'
3474      Warn about anything that depends on the "size of" a function type
3475      or of `void'.  GNU C assigns these types a size of 1, for
3476      convenience in calculations with `void *' pointers and pointers to
3477      functions.  In C++, warn also when an arithmetic operation involves
3478      `NULL'.  This warning is also enabled by `-pedantic'.
3480 `-Wtype-limits'
3481      Warn if a comparison is always true or always false due to the
3482      limited range of the data type, but do not warn for constant
3483      expressions.  For example, warn if an unsigned variable is
3484      compared against zero with `<' or `>='.  This warning is also
3485      enabled by `-Wextra'.
3487 `-Wbad-function-cast (C and Objective-C only)'
3488      Warn whenever a function call is cast to a non-matching type.  For
3489      example, warn if `int malloc()' is cast to `anything *'.
3491 `-Wc++-compat (C and Objective-C only)'
3492      Warn about ISO C constructs that are outside of the common subset
3493      of ISO C and ISO C++, e.g. request for implicit conversion from
3494      `void *' to a pointer to non-`void' type.
3496 `-Wc++0x-compat (C++ and Objective-C++ only)'
3497      Warn about C++ constructs whose meaning differs between ISO C++
3498      1998 and ISO C++ 200x, e.g., identifiers in ISO C++ 1998 that will
3499      become keywords in ISO C++ 200x.  This warning is enabled by
3500      `-Wall'.
3502 `-Wcast-qual'
3503      Warn whenever a pointer is cast so as to remove a type qualifier
3504      from the target type.  For example, warn if a `const char *' is
3505      cast to an ordinary `char *'.
3507 `-Wcast-align'
3508      Warn whenever a pointer is cast such that the required alignment
3509      of the target is increased.  For example, warn if a `char *' is
3510      cast to an `int *' on machines where integers can only be accessed
3511      at two- or four-byte boundaries.
3513 `-Wwrite-strings'
3514      When compiling C, give string constants the type `const
3515      char[LENGTH]' so that copying the address of one into a
3516      non-`const' `char *' pointer will get a warning.  These warnings
3517      will help you find at compile time code that can try to write into
3518      a string constant, but only if you have been very careful about
3519      using `const' in declarations and prototypes.  Otherwise, it will
3520      just be a nuisance. This is why we did not make `-Wall' request
3521      these warnings.
3523      When compiling C++, warn about the deprecated conversion from
3524      string literals to `char *'.  This warning is enabled by default
3525      for C++ programs.
3527 `-Wclobbered'
3528      Warn for variables that might be changed by `longjmp' or `vfork'.
3529      This warning is also enabled by `-Wextra'.
3531 `-Wconversion'
3532      Warn for implicit conversions that may alter a value. This includes
3533      conversions between real and integer, like `abs (x)' when `x' is
3534      `double'; conversions between signed and unsigned, like `unsigned
3535      ui = -1'; and conversions to smaller types, like `sqrtf (M_PI)'.
3536      Do not warn for explicit casts like `abs ((int) x)' and `ui =
3537      (unsigned) -1', or if the value is not changed by the conversion
3538      like in `abs (2.0)'.  Warnings about conversions between signed
3539      and unsigned integers can be disabled by using
3540      `-Wno-sign-conversion'.
3542      For C++, also warn for conversions between `NULL' and non-pointer
3543      types; confusing overload resolution for user-defined conversions;
3544      and conversions that will never use a type conversion operator:
3545      conversions to `void', the same type, a base class or a reference
3546      to them. Warnings about conversions between signed and unsigned
3547      integers are disabled by default in C++ unless `-Wsign-conversion'
3548      is explicitly enabled.
3550 `-Wempty-body'
3551      Warn if an empty body occurs in an `if', `else' or `do while'
3552      statement.  This warning is also enabled by `-Wextra'.
3554 `-Wenum-compare (C++ and Objective-C++ only)'
3555      Warn about a comparison between values of different enum types.
3556      This warning is enabled by default.
3558 `-Wsign-compare'
3559      Warn when a comparison between signed and unsigned values could
3560      produce an incorrect result when the signed value is converted to
3561      unsigned.  This warning is also enabled by `-Wextra'; to get the
3562      other warnings of `-Wextra' without this warning, use `-Wextra
3563      -Wno-sign-compare'.
3565 `-Wsign-conversion'
3566      Warn for implicit conversions that may change the sign of an
3567      integer value, like assigning a signed integer expression to an
3568      unsigned integer variable. An explicit cast silences the warning.
3569      In C, this option is enabled also by `-Wconversion'.
3571 `-Waddress'
3572      Warn about suspicious uses of memory addresses. These include using
3573      the address of a function in a conditional expression, such as
3574      `void func(void); if (func)', and comparisons against the memory
3575      address of a string literal, such as `if (x == "abc")'.  Such uses
3576      typically indicate a programmer error: the address of a function
3577      always evaluates to true, so their use in a conditional usually
3578      indicate that the programmer forgot the parentheses in a function
3579      call; and comparisons against string literals result in unspecified
3580      behavior and are not portable in C, so they usually indicate that
3581      the programmer intended to use `strcmp'.  This warning is enabled
3582      by `-Wall'.
3584 `-Wlogical-op'
3585      Warn about suspicious uses of logical operators in expressions.
3586      This includes using logical operators in contexts where a bit-wise
3587      operator is likely to be expected.
3589 `-Waggregate-return'
3590      Warn if any functions that return structures or unions are defined
3591      or called.  (In languages where you can return an array, this also
3592      elicits a warning.)
3594 `-Wno-attributes'
3595      Do not warn if an unexpected `__attribute__' is used, such as
3596      unrecognized attributes, function attributes applied to variables,
3597      etc.  This will not stop errors for incorrect use of supported
3598      attributes.
3600 `-Wno-builtin-macro-redefined'
3601      Do not warn if certain built-in macros are redefined.  This
3602      suppresses warnings for redefinition of `__TIMESTAMP__',
3603      `__TIME__', `__DATE__', `__FILE__', and `__BASE_FILE__'.
3605 `-Wstrict-prototypes (C and Objective-C only)'
3606      Warn if a function is declared or defined without specifying the
3607      argument types.  (An old-style function definition is permitted
3608      without a warning if preceded by a declaration which specifies the
3609      argument types.)
3611 `-Wold-style-declaration (C and Objective-C only)'
3612      Warn for obsolescent usages, according to the C Standard, in a
3613      declaration. For example, warn if storage-class specifiers like
3614      `static' are not the first things in a declaration.  This warning
3615      is also enabled by `-Wextra'.
3617 `-Wold-style-definition (C and Objective-C only)'
3618      Warn if an old-style function definition is used.  A warning is
3619      given even if there is a previous prototype.
3621 `-Wmissing-parameter-type (C and Objective-C only)'
3622      A function parameter is declared without a type specifier in
3623      K&R-style functions:
3625           void foo(bar) { }
3627      This warning is also enabled by `-Wextra'.
3629 `-Wmissing-prototypes (C and Objective-C only)'
3630      Warn if a global function is defined without a previous prototype
3631      declaration.  This warning is issued even if the definition itself
3632      provides a prototype.  The aim is to detect global functions that
3633      fail to be declared in header files.
3635 `-Wmissing-declarations'
3636      Warn if a global function is defined without a previous
3637      declaration.  Do so even if the definition itself provides a
3638      prototype.  Use this option to detect global functions that are
3639      not declared in header files.  In C++, no warnings are issued for
3640      function templates, or for inline functions, or for functions in
3641      anonymous namespaces.
3643 `-Wmissing-field-initializers'
3644      Warn if a structure's initializer has some fields missing.  For
3645      example, the following code would cause such a warning, because
3646      `x.h' is implicitly zero:
3648           struct s { int f, g, h; };
3649           struct s x = { 3, 4 };
3651      This option does not warn about designated initializers, so the
3652      following modification would not trigger a warning:
3654           struct s { int f, g, h; };
3655           struct s x = { .f = 3, .g = 4 };
3657      This warning is included in `-Wextra'.  To get other `-Wextra'
3658      warnings without this one, use `-Wextra
3659      -Wno-missing-field-initializers'.
3661 `-Wmissing-noreturn'
3662      Warn about functions which might be candidates for attribute
3663      `noreturn'.  Note these are only possible candidates, not absolute
3664      ones.  Care should be taken to manually verify functions actually
3665      do not ever return before adding the `noreturn' attribute,
3666      otherwise subtle code generation bugs could be introduced.  You
3667      will not get a warning for `main' in hosted C environments.
3669 `-Wmissing-format-attribute'
3670      Warn about function pointers which might be candidates for `format'
3671      attributes.  Note these are only possible candidates, not absolute
3672      ones.  GCC will guess that function pointers with `format'
3673      attributes that are used in assignment, initialization, parameter
3674      passing or return statements should have a corresponding `format'
3675      attribute in the resulting type.  I.e. the left-hand side of the
3676      assignment or initialization, the type of the parameter variable,
3677      or the return type of the containing function respectively should
3678      also have a `format' attribute to avoid the warning.
3680      GCC will also warn about function definitions which might be
3681      candidates for `format' attributes.  Again, these are only
3682      possible candidates.  GCC will guess that `format' attributes
3683      might be appropriate for any function that calls a function like
3684      `vprintf' or `vscanf', but this might not always be the case, and
3685      some functions for which `format' attributes are appropriate may
3686      not be detected.
3688 `-Wno-multichar'
3689      Do not warn if a multicharacter constant (`'FOOF'') is used.
3690      Usually they indicate a typo in the user's code, as they have
3691      implementation-defined values, and should not be used in portable
3692      code.
3694 `-Wnormalized=<none|id|nfc|nfkc>'
3695      In ISO C and ISO C++, two identifiers are different if they are
3696      different sequences of characters.  However, sometimes when
3697      characters outside the basic ASCII character set are used, you can
3698      have two different character sequences that look the same.  To
3699      avoid confusion, the ISO 10646 standard sets out some
3700      "normalization rules" which when applied ensure that two sequences
3701      that look the same are turned into the same sequence.  GCC can
3702      warn you if you are using identifiers which have not been
3703      normalized; this option controls that warning.
3705      There are four levels of warning that GCC supports.  The default is
3706      `-Wnormalized=nfc', which warns about any identifier which is not
3707      in the ISO 10646 "C" normalized form, "NFC".  NFC is the
3708      recommended form for most uses.
3710      Unfortunately, there are some characters which ISO C and ISO C++
3711      allow in identifiers that when turned into NFC aren't allowable as
3712      identifiers.  That is, there's no way to use these symbols in
3713      portable ISO C or C++ and have all your identifiers in NFC.
3714      `-Wnormalized=id' suppresses the warning for these characters.  It
3715      is hoped that future versions of the standards involved will
3716      correct this, which is why this option is not the default.
3718      You can switch the warning off for all characters by writing
3719      `-Wnormalized=none'.  You would only want to do this if you were
3720      using some other normalization scheme (like "D"), because
3721      otherwise you can easily create bugs that are literally impossible
3722      to see.
3724      Some characters in ISO 10646 have distinct meanings but look
3725      identical in some fonts or display methodologies, especially once
3726      formatting has been applied.  For instance `\u207F', "SUPERSCRIPT
3727      LATIN SMALL LETTER N", will display just like a regular `n' which
3728      has been placed in a superscript.  ISO 10646 defines the "NFKC"
3729      normalization scheme to convert all these into a standard form as
3730      well, and GCC will warn if your code is not in NFKC if you use
3731      `-Wnormalized=nfkc'.  This warning is comparable to warning about
3732      every identifier that contains the letter O because it might be
3733      confused with the digit 0, and so is not the default, but may be
3734      useful as a local coding convention if the programming environment
3735      is unable to be fixed to display these characters distinctly.
3737 `-Wno-deprecated'
3738      Do not warn about usage of deprecated features.  *Note Deprecated
3739      Features::.
3741 `-Wno-deprecated-declarations'
3742      Do not warn about uses of functions (*note Function Attributes::),
3743      variables (*note Variable Attributes::), and types (*note Type
3744      Attributes::) marked as deprecated by using the `deprecated'
3745      attribute.
3747 `-Wno-overflow'
3748      Do not warn about compile-time overflow in constant expressions.
3750 `-Woverride-init (C and Objective-C only)'
3751      Warn if an initialized field without side effects is overridden
3752      when using designated initializers (*note Designated Initializers:
3753      Designated Inits.).
3755      This warning is included in `-Wextra'.  To get other `-Wextra'
3756      warnings without this one, use `-Wextra -Wno-override-init'.
3758 `-Wpacked'
3759      Warn if a structure is given the packed attribute, but the packed
3760      attribute has no effect on the layout or size of the structure.
3761      Such structures may be mis-aligned for little benefit.  For
3762      instance, in this code, the variable `f.x' in `struct bar' will be
3763      misaligned even though `struct bar' does not itself have the
3764      packed attribute:
3766           struct foo {
3767             int x;
3768             char a, b, c, d;
3769           } __attribute__((packed));
3770           struct bar {
3771             char z;
3772             struct foo f;
3773           };
3775 `-Wpacked-bitfield-compat'
3776      The 4.1, 4.2 and 4.3 series of GCC ignore the `packed' attribute
3777      on bit-fields of type `char'.  This has been fixed in GCC 4.4 but
3778      the change can lead to differences in the structure layout.  GCC
3779      informs you when the offset of such a field has changed in GCC 4.4.
3780      For example there is no longer a 4-bit padding between field `a'
3781      and `b' in this structure:
3783           struct foo
3784           {
3785             char a:4;
3786             char b:8;
3787           } __attribute__ ((packed));
3789      This warning is enabled by default.  Use
3790      `-Wno-packed-bitfield-compat' to disable this warning.
3792 `-Wpadded'
3793      Warn if padding is included in a structure, either to align an
3794      element of the structure or to align the whole structure.
3795      Sometimes when this happens it is possible to rearrange the fields
3796      of the structure to reduce the padding and so make the structure
3797      smaller.
3799 `-Wredundant-decls'
3800      Warn if anything is declared more than once in the same scope,
3801      even in cases where multiple declaration is valid and changes
3802      nothing.
3804 `-Wnested-externs (C and Objective-C only)'
3805      Warn if an `extern' declaration is encountered within a function.
3807 `-Wunreachable-code'
3808      Warn if the compiler detects that code will never be executed.
3810      This option is intended to warn when the compiler detects that at
3811      least a whole line of source code will never be executed, because
3812      some condition is never satisfied or because it is after a
3813      procedure that never returns.
3815      It is possible for this option to produce a warning even though
3816      there are circumstances under which part of the affected line can
3817      be executed, so care should be taken when removing
3818      apparently-unreachable code.
3820      For instance, when a function is inlined, a warning may mean that
3821      the line is unreachable in only one inlined copy of the function.
3823      This option is not made part of `-Wall' because in a debugging
3824      version of a program there is often substantial code which checks
3825      correct functioning of the program and is, hopefully, unreachable
3826      because the program does work.  Another common use of unreachable
3827      code is to provide behavior which is selectable at compile-time.
3829 `-Winline'
3830      Warn if a function can not be inlined and it was declared as
3831      inline.  Even with this option, the compiler will not warn about
3832      failures to inline functions declared in system headers.
3834      The compiler uses a variety of heuristics to determine whether or
3835      not to inline a function.  For example, the compiler takes into
3836      account the size of the function being inlined and the amount of
3837      inlining that has already been done in the current function.
3838      Therefore, seemingly insignificant changes in the source program
3839      can cause the warnings produced by `-Winline' to appear or
3840      disappear.
3842 `-Wno-invalid-offsetof (C++ and Objective-C++ only)'
3843      Suppress warnings from applying the `offsetof' macro to a non-POD
3844      type.  According to the 1998 ISO C++ standard, applying `offsetof'
3845      to a non-POD type is undefined.  In existing C++ implementations,
3846      however, `offsetof' typically gives meaningful results even when
3847      applied to certain kinds of non-POD types. (Such as a simple
3848      `struct' that fails to be a POD type only by virtue of having a
3849      constructor.)  This flag is for users who are aware that they are
3850      writing nonportable code and who have deliberately chosen to
3851      ignore the warning about it.
3853      The restrictions on `offsetof' may be relaxed in a future version
3854      of the C++ standard.
3856 `-Wno-int-to-pointer-cast (C and Objective-C only)'
3857      Suppress warnings from casts to pointer type of an integer of a
3858      different size.
3860 `-Wno-pointer-to-int-cast (C and Objective-C only)'
3861      Suppress warnings from casts from a pointer to an integer type of a
3862      different size.
3864 `-Winvalid-pch'
3865      Warn if a precompiled header (*note Precompiled Headers::) is
3866      found in the search path but can't be used.
3868 `-Wlong-long'
3869      Warn if `long long' type is used.  This is default.  To inhibit
3870      the warning messages, use `-Wno-long-long'.  Flags `-Wlong-long'
3871      and `-Wno-long-long' are taken into account only when `-pedantic'
3872      flag is used.
3874 `-Wvariadic-macros'
3875      Warn if variadic macros are used in pedantic ISO C90 mode, or the
3876      GNU alternate syntax when in pedantic ISO C99 mode.  This is
3877      default.  To inhibit the warning messages, use
3878      `-Wno-variadic-macros'.
3880 `-Wvla'
3881      Warn if variable length array is used in the code.  `-Wno-vla'
3882      will prevent the `-pedantic' warning of the variable length array.
3884 `-Wvolatile-register-var'
3885      Warn if a register variable is declared volatile.  The volatile
3886      modifier does not inhibit all optimizations that may eliminate
3887      reads and/or writes to register variables.  This warning is
3888      enabled by `-Wall'.
3890 `-Wdisabled-optimization'
3891      Warn if a requested optimization pass is disabled.  This warning
3892      does not generally indicate that there is anything wrong with your
3893      code; it merely indicates that GCC's optimizers were unable to
3894      handle the code effectively.  Often, the problem is that your code
3895      is too big or too complex; GCC will refuse to optimize programs
3896      when the optimization itself is likely to take inordinate amounts
3897      of time.
3899 `-Wpointer-sign (C and Objective-C only)'
3900      Warn for pointer argument passing or assignment with different
3901      signedness.  This option is only supported for C and Objective-C.
3902      It is implied by `-Wall' and by `-pedantic', which can be disabled
3903      with `-Wno-pointer-sign'.
3905 `-Wstack-protector'
3906      This option is only active when `-fstack-protector' is active.  It
3907      warns about functions that will not be protected against stack
3908      smashing.
3910 `-Wno-mudflap'
3911      Suppress warnings about constructs that cannot be instrumented by
3912      `-fmudflap'.
3914 `-Woverlength-strings'
3915      Warn about string constants which are longer than the "minimum
3916      maximum" length specified in the C standard.  Modern compilers
3917      generally allow string constants which are much longer than the
3918      standard's minimum limit, but very portable programs should avoid
3919      using longer strings.
3921      The limit applies _after_ string constant concatenation, and does
3922      not count the trailing NUL.  In C89, the limit was 509 characters;
3923      in C99, it was raised to 4095.  C++98 does not specify a normative
3924      minimum maximum, so we do not diagnose overlength strings in C++.
3926      This option is implied by `-pedantic', and can be disabled with
3927      `-Wno-overlength-strings'.
3929 \x1f
3930 File: gcc.info,  Node: Debugging Options,  Next: Optimize Options,  Prev: Warning Options,  Up: Invoking GCC
3932 3.9 Options for Debugging Your Program or GCC
3933 =============================================
3935 GCC has various special options that are used for debugging either your
3936 program or GCC:
3938 `-g'
3939      Produce debugging information in the operating system's native
3940      format (stabs, COFF, XCOFF, or DWARF 2).  GDB can work with this
3941      debugging information.
3943      On most systems that use stabs format, `-g' enables use of extra
3944      debugging information that only GDB can use; this extra information
3945      makes debugging work better in GDB but will probably make other
3946      debuggers crash or refuse to read the program.  If you want to
3947      control for certain whether to generate the extra information, use
3948      `-gstabs+', `-gstabs', `-gxcoff+', `-gxcoff', or `-gvms' (see
3949      below).
3951      GCC allows you to use `-g' with `-O'.  The shortcuts taken by
3952      optimized code may occasionally produce surprising results: some
3953      variables you declared may not exist at all; flow of control may
3954      briefly move where you did not expect it; some statements may not
3955      be executed because they compute constant results or their values
3956      were already at hand; some statements may execute in different
3957      places because they were moved out of loops.
3959      Nevertheless it proves possible to debug optimized output.  This
3960      makes it reasonable to use the optimizer for programs that might
3961      have bugs.
3963      The following options are useful when GCC is generated with the
3964      capability for more than one debugging format.
3966 `-ggdb'
3967      Produce debugging information for use by GDB.  This means to use
3968      the most expressive format available (DWARF 2, stabs, or the
3969      native format if neither of those are supported), including GDB
3970      extensions if at all possible.
3972 `-gstabs'
3973      Produce debugging information in stabs format (if that is
3974      supported), without GDB extensions.  This is the format used by
3975      DBX on most BSD systems.  On MIPS, Alpha and System V Release 4
3976      systems this option produces stabs debugging output which is not
3977      understood by DBX or SDB.  On System V Release 4 systems this
3978      option requires the GNU assembler.
3980 `-feliminate-unused-debug-symbols'
3981      Produce debugging information in stabs format (if that is
3982      supported), for only symbols that are actually used.
3984 `-femit-class-debug-always'
3985      Instead of emitting debugging information for a C++ class in only
3986      one object file, emit it in all object files using the class.
3987      This option should be used only with debuggers that are unable to
3988      handle the way GCC normally emits debugging information for
3989      classes because using this option will increase the size of
3990      debugging information by as much as a factor of two.
3992 `-gstabs+'
3993      Produce debugging information in stabs format (if that is
3994      supported), using GNU extensions understood only by the GNU
3995      debugger (GDB).  The use of these extensions is likely to make
3996      other debuggers crash or refuse to read the program.
3998 `-gcoff'
3999      Produce debugging information in COFF format (if that is
4000      supported).  This is the format used by SDB on most System V
4001      systems prior to System V Release 4.
4003 `-gxcoff'
4004      Produce debugging information in XCOFF format (if that is
4005      supported).  This is the format used by the DBX debugger on IBM
4006      RS/6000 systems.
4008 `-gxcoff+'
4009      Produce debugging information in XCOFF format (if that is
4010      supported), using GNU extensions understood only by the GNU
4011      debugger (GDB).  The use of these extensions is likely to make
4012      other debuggers crash or refuse to read the program, and may cause
4013      assemblers other than the GNU assembler (GAS) to fail with an
4014      error.
4016 `-gdwarf-2'
4017      Produce debugging information in DWARF version 2 format (if that is
4018      supported).  This is the format used by DBX on IRIX 6.  With this
4019      option, GCC uses features of DWARF version 3 when they are useful;
4020      version 3 is upward compatible with version 2, but may still cause
4021      problems for older debuggers.
4023 `-gvms'
4024      Produce debugging information in VMS debug format (if that is
4025      supported).  This is the format used by DEBUG on VMS systems.
4027 `-gLEVEL'
4028 `-ggdbLEVEL'
4029 `-gstabsLEVEL'
4030 `-gcoffLEVEL'
4031 `-gxcoffLEVEL'
4032 `-gvmsLEVEL'
4033      Request debugging information and also use LEVEL to specify how
4034      much information.  The default level is 2.
4036      Level 0 produces no debug information at all.  Thus, `-g0' negates
4037      `-g'.
4039      Level 1 produces minimal information, enough for making backtraces
4040      in parts of the program that you don't plan to debug.  This
4041      includes descriptions of functions and external variables, but no
4042      information about local variables and no line numbers.
4044      Level 3 includes extra information, such as all the macro
4045      definitions present in the program.  Some debuggers support macro
4046      expansion when you use `-g3'.
4048      `-gdwarf-2' does not accept a concatenated debug level, because
4049      GCC used to support an option `-gdwarf' that meant to generate
4050      debug information in version 1 of the DWARF format (which is very
4051      different from version 2), and it would have been too confusing.
4052      That debug format is long obsolete, but the option cannot be
4053      changed now.  Instead use an additional `-gLEVEL' option to change
4054      the debug level for DWARF2.
4056 `-feliminate-dwarf2-dups'
4057      Compress DWARF2 debugging information by eliminating duplicated
4058      information about each symbol.  This option only makes sense when
4059      generating DWARF2 debugging information with `-gdwarf-2'.
4061 `-femit-struct-debug-baseonly'
4062      Emit debug information for struct-like types only when the base
4063      name of the compilation source file matches the base name of file
4064      in which the struct was defined.
4066      This option substantially reduces the size of debugging
4067      information, but at significant potential loss in type information
4068      to the debugger.  See `-femit-struct-debug-reduced' for a less
4069      aggressive option.  See `-femit-struct-debug-detailed' for more
4070      detailed control.
4072      This option works only with DWARF 2.
4074 `-femit-struct-debug-reduced'
4075      Emit debug information for struct-like types only when the base
4076      name of the compilation source file matches the base name of file
4077      in which the type was defined, unless the struct is a template or
4078      defined in a system header.
4080      This option significantly reduces the size of debugging
4081      information, with some potential loss in type information to the
4082      debugger.  See `-femit-struct-debug-baseonly' for a more
4083      aggressive option.  See `-femit-struct-debug-detailed' for more
4084      detailed control.
4086      This option works only with DWARF 2.
4088 `-femit-struct-debug-detailed[=SPEC-LIST]'
4089      Specify the struct-like types for which the compiler will generate
4090      debug information.  The intent is to reduce duplicate struct debug
4091      information between different object files within the same program.
4093      This option is a detailed version of `-femit-struct-debug-reduced'
4094      and `-femit-struct-debug-baseonly', which will serve for most
4095      needs.
4097      A specification has the syntax
4098      [`dir:'|`ind:'][`ord:'|`gen:'](`any'|`sys'|`base'|`none')
4100      The optional first word limits the specification to structs that
4101      are used directly (`dir:') or used indirectly (`ind:').  A struct
4102      type is used directly when it is the type of a variable, member.
4103      Indirect uses arise through pointers to structs.  That is, when
4104      use of an incomplete struct would be legal, the use is indirect.
4105      An example is `struct one direct; struct two * indirect;'.
4107      The optional second word limits the specification to ordinary
4108      structs (`ord:') or generic structs (`gen:').  Generic structs are
4109      a bit complicated to explain.  For C++, these are non-explicit
4110      specializations of template classes, or non-template classes
4111      within the above.  Other programming languages have generics, but
4112      `-femit-struct-debug-detailed' does not yet implement them.
4114      The third word specifies the source files for those structs for
4115      which the compiler will emit debug information.  The values `none'
4116      and `any' have the normal meaning.  The value `base' means that
4117      the base of name of the file in which the type declaration appears
4118      must match the base of the name of the main compilation file.  In
4119      practice, this means that types declared in `foo.c' and `foo.h'
4120      will have debug information, but types declared in other header
4121      will not.  The value `sys' means those types satisfying `base' or
4122      declared in system or compiler headers.
4124      You may need to experiment to determine the best settings for your
4125      application.
4127      The default is `-femit-struct-debug-detailed=all'.
4129      This option works only with DWARF 2.
4131 `-fno-merge-debug-strings'
4132      Direct the linker to not merge together strings in the debugging
4133      information which are identical in different object files.
4134      Merging is not supported by all assemblers or linkers.  Merging
4135      decreases the size of the debug information in the output file at
4136      the cost of increasing link processing time.  Merging is enabled
4137      by default.
4139 `-fdebug-prefix-map=OLD=NEW'
4140      When compiling files in directory `OLD', record debugging
4141      information describing them as in `NEW' instead.
4143 `-fno-dwarf2-cfi-asm'
4144      Emit DWARF 2 unwind info as compiler generated `.eh_frame' section
4145      instead of using GAS `.cfi_*' directives.
4147 `-p'
4148      Generate extra code to write profile information suitable for the
4149      analysis program `prof'.  You must use this option when compiling
4150      the source files you want data about, and you must also use it when
4151      linking.
4153 `-pg'
4154      Generate extra code to write profile information suitable for the
4155      analysis program `gprof'.  You must use this option when compiling
4156      the source files you want data about, and you must also use it when
4157      linking.
4159 `-Q'
4160      Makes the compiler print out each function name as it is compiled,
4161      and print some statistics about each pass when it finishes.
4163 `-ftime-report'
4164      Makes the compiler print some statistics about the time consumed
4165      by each pass when it finishes.
4167 `-fmem-report'
4168      Makes the compiler print some statistics about permanent memory
4169      allocation when it finishes.
4171 `-fpre-ipa-mem-report'
4173 `-fpost-ipa-mem-report'
4174      Makes the compiler print some statistics about permanent memory
4175      allocation before or after interprocedural optimization.
4177 `-fprofile-arcs'
4178      Add code so that program flow "arcs" are instrumented.  During
4179      execution the program records how many times each branch and call
4180      is executed and how many times it is taken or returns.  When the
4181      compiled program exits it saves this data to a file called
4182      `AUXNAME.gcda' for each source file.  The data may be used for
4183      profile-directed optimizations (`-fbranch-probabilities'), or for
4184      test coverage analysis (`-ftest-coverage').  Each object file's
4185      AUXNAME is generated from the name of the output file, if
4186      explicitly specified and it is not the final executable, otherwise
4187      it is the basename of the source file.  In both cases any suffix
4188      is removed (e.g. `foo.gcda' for input file `dir/foo.c', or
4189      `dir/foo.gcda' for output file specified as `-o dir/foo.o').
4190      *Note Cross-profiling::.
4192 `--coverage'
4193      This option is used to compile and link code instrumented for
4194      coverage analysis.  The option is a synonym for `-fprofile-arcs'
4195      `-ftest-coverage' (when compiling) and `-lgcov' (when linking).
4196      See the documentation for those options for more details.
4198         * Compile the source files with `-fprofile-arcs' plus
4199           optimization and code generation options.  For test coverage
4200           analysis, use the additional `-ftest-coverage' option.  You
4201           do not need to profile every source file in a program.
4203         * Link your object files with `-lgcov' or `-fprofile-arcs' (the
4204           latter implies the former).
4206         * Run the program on a representative workload to generate the
4207           arc profile information.  This may be repeated any number of
4208           times.  You can run concurrent instances of your program, and
4209           provided that the file system supports locking, the data
4210           files will be correctly updated.  Also `fork' calls are
4211           detected and correctly handled (double counting will not
4212           happen).
4214         * For profile-directed optimizations, compile the source files
4215           again with the same optimization and code generation options
4216           plus `-fbranch-probabilities' (*note Options that Control
4217           Optimization: Optimize Options.).
4219         * For test coverage analysis, use `gcov' to produce human
4220           readable information from the `.gcno' and `.gcda' files.
4221           Refer to the `gcov' documentation for further information.
4224      With `-fprofile-arcs', for each function of your program GCC
4225      creates a program flow graph, then finds a spanning tree for the
4226      graph.  Only arcs that are not on the spanning tree have to be
4227      instrumented: the compiler adds code to count the number of times
4228      that these arcs are executed.  When an arc is the only exit or
4229      only entrance to a block, the instrumentation code can be added to
4230      the block; otherwise, a new basic block must be created to hold
4231      the instrumentation code.
4233 `-ftest-coverage'
4234      Produce a notes file that the `gcov' code-coverage utility (*note
4235      `gcov'--a Test Coverage Program: Gcov.) can use to show program
4236      coverage.  Each source file's note file is called `AUXNAME.gcno'.
4237      Refer to the `-fprofile-arcs' option above for a description of
4238      AUXNAME and instructions on how to generate test coverage data.
4239      Coverage data will match the source files more closely, if you do
4240      not optimize.
4242 `-fdbg-cnt-list'
4243      Print the name and the counter upperbound for all debug counters.
4245 `-fdbg-cnt=COUNTER-VALUE-LIST'
4246      Set the internal debug counter upperbound. COUNTER-VALUE-LIST is a
4247      comma-separated list of NAME:VALUE pairs which sets the upperbound
4248      of each debug counter NAME to VALUE.  All debug counters have the
4249      initial upperbound of UINT_MAX, thus dbg_cnt() returns true always
4250      unless the upperbound is set by this option.  e.g. With
4251      -fdbg-cnt=dce:10,tail_call:0 dbg_cnt(dce) will return true only
4252      for first 10 invocations and dbg_cnt(tail_call) will return false
4253      always.
4255 `-dLETTERS'
4256 `-fdump-rtl-PASS'
4257      Says to make debugging dumps during compilation at times specified
4258      by LETTERS.    This is used for debugging the RTL-based passes of
4259      the compiler.  The file names for most of the dumps are made by
4260      appending a pass number and a word to the DUMPNAME.  DUMPNAME is
4261      generated from the name of the output file, if explicitly
4262      specified and it is not an executable, otherwise it is the
4263      basename of the source file. These switches may have different
4264      effects when `-E' is used for preprocessing.
4266      Debug dumps can be enabled with a `-fdump-rtl' switch or some `-d'
4267      option LETTERS.  Here are the possible letters for use in PASS and
4268      LETTERS, and their meanings:
4270     `-fdump-rtl-alignments'
4271           Dump after branch alignments have been computed.
4273     `-fdump-rtl-asmcons'
4274           Dump after fixing rtl statements that have unsatisfied in/out
4275           constraints.
4277     `-fdump-rtl-auto_inc_dec'
4278           Dump after auto-inc-dec discovery.  This pass is only run on
4279           architectures that have auto inc or auto dec instructions.
4281     `-fdump-rtl-barriers'
4282           Dump after cleaning up the barrier instructions.
4284     `-fdump-rtl-bbpart'
4285           Dump after partitioning hot and cold basic blocks.
4287     `-fdump-rtl-bbro'
4288           Dump after block reordering.
4290     `-fdump-rtl-btl1'
4291     `-fdump-rtl-btl2'
4292           `-fdump-rtl-btl1' and `-fdump-rtl-btl2' enable dumping after
4293           the two branch target load optimization passes.
4295     `-fdump-rtl-bypass'
4296           Dump after jump bypassing and control flow optimizations.
4298     `-fdump-rtl-combine'
4299           Dump after the RTL instruction combination pass.
4301     `-fdump-rtl-compgotos'
4302           Dump after duplicating the computed gotos.
4304     `-fdump-rtl-ce1'
4305     `-fdump-rtl-ce2'
4306     `-fdump-rtl-ce3'
4307           `-fdump-rtl-ce1', `-fdump-rtl-ce2', and `-fdump-rtl-ce3'
4308           enable dumping after the three if conversion passes.
4310     `-fdump-rtl-cprop_hardreg'
4311           Dump after hard register copy propagation.
4313     `-fdump-rtl-csa'
4314           Dump after combining stack adjustments.
4316     `-fdump-rtl-cse1'
4317     `-fdump-rtl-cse2'
4318           `-fdump-rtl-cse1' and `-fdump-rtl-cse2' enable dumping after
4319           the two common sub-expression elimination passes.
4321     `-fdump-rtl-dce'
4322           Dump after the standalone dead code elimination passes.
4324     `-fdump-rtl-dbr'
4325           Dump after delayed branch scheduling.
4327     `-fdump-rtl-dce1'
4328     `-fdump-rtl-dce2'
4329           `-fdump-rtl-dce1' and `-fdump-rtl-dce2' enable dumping after
4330           the two dead store elimination passes.
4332     `-fdump-rtl-eh'
4333           Dump after finalization of EH handling code.
4335     `-fdump-rtl-eh_ranges'
4336           Dump after conversion of EH handling range regions.
4338     `-fdump-rtl-expand'
4339           Dump after RTL generation.
4341     `-fdump-rtl-fwprop1'
4342     `-fdump-rtl-fwprop2'
4343           `-fdump-rtl-fwprop1' and `-fdump-rtl-fwprop2' enable dumping
4344           after the two forward propagation passes.
4346     `-fdump-rtl-gcse1'
4347     `-fdump-rtl-gcse2'
4348           `-fdump-rtl-gcse1' and `-fdump-rtl-gcse2' enable dumping
4349           after global common subexpression elimination.
4351     `-fdump-rtl-init-regs'
4352           Dump after the initialization of the registers.
4354     `-fdump-rtl-initvals'
4355           Dump after the computation of the initial value sets.
4357     `-fdump-rtl-into_cfglayout'
4358           Dump after converting to cfglayout mode.
4360     `-fdump-rtl-ira'
4361           Dump after iterated register allocation.
4363     `-fdump-rtl-jump'
4364           Dump after the second jump optimization.
4366     `-fdump-rtl-loop2'
4367           `-fdump-rtl-loop2' enables dumping after the rtl loop
4368           optimization passes.
4370     `-fdump-rtl-mach'
4371           Dump after performing the machine dependent reorganization
4372           pass, if that pass exists.
4374     `-fdump-rtl-mode_sw'
4375           Dump after removing redundant mode switches.
4377     `-fdump-rtl-rnreg'
4378           Dump after register renumbering.
4380     `-fdump-rtl-outof_cfglayout'
4381           Dump after converting from cfglayout mode.
4383     `-fdump-rtl-peephole2'
4384           Dump after the peephole pass.
4386     `-fdump-rtl-postreload'
4387           Dump after post-reload optimizations.
4389     `-fdump-rtl-pro_and_epilogue'
4390           Dump after generating the function pro and epilogues.
4392     `-fdump-rtl-regmove'
4393           Dump after the register move pass.
4395     `-fdump-rtl-sched1'
4396     `-fdump-rtl-sched2'
4397           `-fdump-rtl-sched1' and `-fdump-rtl-sched2' enable dumping
4398           after the basic block scheduling passes.
4400     `-fdump-rtl-see'
4401           Dump after sign extension elimination.
4403     `-fdump-rtl-seqabstr'
4404           Dump after common sequence discovery.
4406     `-fdump-rtl-shorten'
4407           Dump after shortening branches.
4409     `-fdump-rtl-sibling'
4410           Dump after sibling call optimizations.
4412     `-fdump-rtl-split1'
4413     `-fdump-rtl-split2'
4414     `-fdump-rtl-split3'
4415     `-fdump-rtl-split4'
4416     `-fdump-rtl-split5'
4417           `-fdump-rtl-split1', `-fdump-rtl-split2',
4418           `-fdump-rtl-split3', `-fdump-rtl-split4' and
4419           `-fdump-rtl-split5' enable dumping after five rounds of
4420           instruction splitting.
4422     `-fdump-rtl-sms'
4423           Dump after modulo scheduling.  This pass is only run on some
4424           architectures.
4426     `-fdump-rtl-stack'
4427           Dump after conversion from GCC's "flat register file"
4428           registers to the x87's stack-like registers.  This pass is
4429           only run on x86 variants.
4431     `-fdump-rtl-subreg1'
4432     `-fdump-rtl-subreg2'
4433           `-fdump-rtl-subreg1' and `-fdump-rtl-subreg2' enable dumping
4434           after the two subreg expansion passes.
4436     `-fdump-rtl-unshare'
4437           Dump after all rtl has been unshared.
4439     `-fdump-rtl-vartrack'
4440           Dump after variable tracking.
4442     `-fdump-rtl-vregs'
4443           Dump after converting virtual registers to hard registers.
4445     `-fdump-rtl-web'
4446           Dump after live range splitting.
4448     `-fdump-rtl-regclass'
4449     `-fdump-rtl-subregs_of_mode_init'
4450     `-fdump-rtl-subregs_of_mode_finish'
4451     `-fdump-rtl-dfinit'
4452     `-fdump-rtl-dfinish'
4453           These dumps are defined but always produce empty files.
4455     `-fdump-rtl-all'
4456           Produce all the dumps listed above.
4458     `-dA'
4459           Annotate the assembler output with miscellaneous debugging
4460           information.
4462     `-dD'
4463           Dump all macro definitions, at the end of preprocessing, in
4464           addition to normal output.
4466     `-dH'
4467           Produce a core dump whenever an error occurs.
4469     `-dm'
4470           Print statistics on memory usage, at the end of the run, to
4471           standard error.
4473     `-dp'
4474           Annotate the assembler output with a comment indicating which
4475           pattern and alternative was used.  The length of each
4476           instruction is also printed.
4478     `-dP'
4479           Dump the RTL in the assembler output as a comment before each
4480           instruction.  Also turns on `-dp' annotation.
4482     `-dv'
4483           For each of the other indicated dump files
4484           (`-fdump-rtl-PASS'), dump a representation of the control
4485           flow graph suitable for viewing with VCG to `FILE.PASS.vcg'.
4487     `-dx'
4488           Just generate RTL for a function instead of compiling it.
4489           Usually used with `-fdump-rtl-expand'.
4491     `-dy'
4492           Dump debugging information during parsing, to standard error.
4494 `-fdump-noaddr'
4495      When doing debugging dumps, suppress address output.  This makes
4496      it more feasible to use diff on debugging dumps for compiler
4497      invocations with different compiler binaries and/or different text
4498      / bss / data / heap / stack / dso start locations.
4500 `-fdump-unnumbered'
4501      When doing debugging dumps, suppress instruction numbers and
4502      address output.  This makes it more feasible to use diff on
4503      debugging dumps for compiler invocations with different options,
4504      in particular with and without `-g'.
4506 `-fdump-translation-unit (C++ only)'
4507 `-fdump-translation-unit-OPTIONS (C++ only)'
4508      Dump a representation of the tree structure for the entire
4509      translation unit to a file.  The file name is made by appending
4510      `.tu' to the source file name.  If the `-OPTIONS' form is used,
4511      OPTIONS controls the details of the dump as described for the
4512      `-fdump-tree' options.
4514 `-fdump-class-hierarchy (C++ only)'
4515 `-fdump-class-hierarchy-OPTIONS (C++ only)'
4516      Dump a representation of each class's hierarchy and virtual
4517      function table layout to a file.  The file name is made by
4518      appending `.class' to the source file name.  If the `-OPTIONS'
4519      form is used, OPTIONS controls the details of the dump as
4520      described for the `-fdump-tree' options.
4522 `-fdump-ipa-SWITCH'
4523      Control the dumping at various stages of inter-procedural analysis
4524      language tree to a file.  The file name is generated by appending
4525      a switch specific suffix to the source file name.  The following
4526      dumps are possible:
4528     `all'
4529           Enables all inter-procedural analysis dumps.
4531     `cgraph'
4532           Dumps information about call-graph optimization, unused
4533           function removal, and inlining decisions.
4535     `inline'
4536           Dump after function inlining.
4539 `-fdump-statistics-OPTION'
4540      Enable and control dumping of pass statistics in a separate file.
4541      The file name is generated by appending a suffix ending in
4542      `.statistics' to the source file name.  If the `-OPTION' form is
4543      used, `-stats' will cause counters to be summed over the whole
4544      compilation unit while `-details' will dump every event as the
4545      passes generate them.  The default with no option is to sum
4546      counters for each function compiled.
4548 `-fdump-tree-SWITCH'
4549 `-fdump-tree-SWITCH-OPTIONS'
4550      Control the dumping at various stages of processing the
4551      intermediate language tree to a file.  The file name is generated
4552      by appending a switch specific suffix to the source file name.  If
4553      the `-OPTIONS' form is used, OPTIONS is a list of `-' separated
4554      options that control the details of the dump.  Not all options are
4555      applicable to all dumps, those which are not meaningful will be
4556      ignored.  The following options are available
4558     `address'
4559           Print the address of each node.  Usually this is not
4560           meaningful as it changes according to the environment and
4561           source file.  Its primary use is for tying up a dump file
4562           with a debug environment.
4564     `slim'
4565           Inhibit dumping of members of a scope or body of a function
4566           merely because that scope has been reached.  Only dump such
4567           items when they are directly reachable by some other path.
4568           When dumping pretty-printed trees, this option inhibits
4569           dumping the bodies of control structures.
4571     `raw'
4572           Print a raw representation of the tree.  By default, trees are
4573           pretty-printed into a C-like representation.
4575     `details'
4576           Enable more detailed dumps (not honored by every dump option).
4578     `stats'
4579           Enable dumping various statistics about the pass (not honored
4580           by every dump option).
4582     `blocks'
4583           Enable showing basic block boundaries (disabled in raw dumps).
4585     `vops'
4586           Enable showing virtual operands for every statement.
4588     `lineno'
4589           Enable showing line numbers for statements.
4591     `uid'
4592           Enable showing the unique ID (`DECL_UID') for each variable.
4594     `verbose'
4595           Enable showing the tree dump for each statement.
4597     `all'
4598           Turn on all options, except `raw', `slim', `verbose' and
4599           `lineno'.
4601      The following tree dumps are possible:
4602     `original'
4603           Dump before any tree based optimization, to `FILE.original'.
4605     `optimized'
4606           Dump after all tree based optimization, to `FILE.optimized'.
4608     `gimple'
4609           Dump each function before and after the gimplification pass
4610           to a file.  The file name is made by appending `.gimple' to
4611           the source file name.
4613     `cfg'
4614           Dump the control flow graph of each function to a file.  The
4615           file name is made by appending `.cfg' to the source file name.
4617     `vcg'
4618           Dump the control flow graph of each function to a file in VCG
4619           format.  The file name is made by appending `.vcg' to the
4620           source file name.  Note that if the file contains more than
4621           one function, the generated file cannot be used directly by
4622           VCG.  You will need to cut and paste each function's graph
4623           into its own separate file first.
4625     `ch'
4626           Dump each function after copying loop headers.  The file name
4627           is made by appending `.ch' to the source file name.
4629     `ssa'
4630           Dump SSA related information to a file.  The file name is
4631           made by appending `.ssa' to the source file name.
4633     `alias'
4634           Dump aliasing information for each function.  The file name
4635           is made by appending `.alias' to the source file name.
4637     `ccp'
4638           Dump each function after CCP.  The file name is made by
4639           appending `.ccp' to the source file name.
4641     `storeccp'
4642           Dump each function after STORE-CCP.  The file name is made by
4643           appending `.storeccp' to the source file name.
4645     `pre'
4646           Dump trees after partial redundancy elimination.  The file
4647           name is made by appending `.pre' to the source file name.
4649     `fre'
4650           Dump trees after full redundancy elimination.  The file name
4651           is made by appending `.fre' to the source file name.
4653     `copyprop'
4654           Dump trees after copy propagation.  The file name is made by
4655           appending `.copyprop' to the source file name.
4657     `store_copyprop'
4658           Dump trees after store copy-propagation.  The file name is
4659           made by appending `.store_copyprop' to the source file name.
4661     `dce'
4662           Dump each function after dead code elimination.  The file
4663           name is made by appending `.dce' to the source file name.
4665     `mudflap'
4666           Dump each function after adding mudflap instrumentation.  The
4667           file name is made by appending `.mudflap' to the source file
4668           name.
4670     `sra'
4671           Dump each function after performing scalar replacement of
4672           aggregates.  The file name is made by appending `.sra' to the
4673           source file name.
4675     `sink'
4676           Dump each function after performing code sinking.  The file
4677           name is made by appending `.sink' to the source file name.
4679     `dom'
4680           Dump each function after applying dominator tree
4681           optimizations.  The file name is made by appending `.dom' to
4682           the source file name.
4684     `dse'
4685           Dump each function after applying dead store elimination.
4686           The file name is made by appending `.dse' to the source file
4687           name.
4689     `phiopt'
4690           Dump each function after optimizing PHI nodes into
4691           straightline code.  The file name is made by appending
4692           `.phiopt' to the source file name.
4694     `forwprop'
4695           Dump each function after forward propagating single use
4696           variables.  The file name is made by appending `.forwprop' to
4697           the source file name.
4699     `copyrename'
4700           Dump each function after applying the copy rename
4701           optimization.  The file name is made by appending
4702           `.copyrename' to the source file name.
4704     `nrv'
4705           Dump each function after applying the named return value
4706           optimization on generic trees.  The file name is made by
4707           appending `.nrv' to the source file name.
4709     `vect'
4710           Dump each function after applying vectorization of loops.
4711           The file name is made by appending `.vect' to the source file
4712           name.
4714     `vrp'
4715           Dump each function after Value Range Propagation (VRP).  The
4716           file name is made by appending `.vrp' to the source file name.
4718     `all'
4719           Enable all the available tree dumps with the flags provided
4720           in this option.
4722 `-ftree-vectorizer-verbose=N'
4723      This option controls the amount of debugging output the vectorizer
4724      prints.  This information is written to standard error, unless
4725      `-fdump-tree-all' or `-fdump-tree-vect' is specified, in which
4726      case it is output to the usual dump listing file, `.vect'.  For
4727      N=0 no diagnostic information is reported.  If N=1 the vectorizer
4728      reports each loop that got vectorized, and the total number of
4729      loops that got vectorized.  If N=2 the vectorizer also reports
4730      non-vectorized loops that passed the first analysis phase
4731      (vect_analyze_loop_form) - i.e. countable, inner-most, single-bb,
4732      single-entry/exit loops.  This is the same verbosity level that
4733      `-fdump-tree-vect-stats' uses.  Higher verbosity levels mean
4734      either more information dumped for each reported loop, or same
4735      amount of information reported for more loops: If N=3, alignment
4736      related information is added to the reports.  If N=4,
4737      data-references related information (e.g. memory dependences,
4738      memory access-patterns) is added to the reports.  If N=5, the
4739      vectorizer reports also non-vectorized inner-most loops that did
4740      not pass the first analysis phase (i.e., may not be countable, or
4741      may have complicated control-flow).  If N=6, the vectorizer
4742      reports also non-vectorized nested loops.  For N=7, all the
4743      information the vectorizer generates during its analysis and
4744      transformation is reported.  This is the same verbosity level that
4745      `-fdump-tree-vect-details' uses.
4747 `-frandom-seed=STRING'
4748      This option provides a seed that GCC uses when it would otherwise
4749      use random numbers.  It is used to generate certain symbol names
4750      that have to be different in every compiled file.  It is also used
4751      to place unique stamps in coverage data files and the object files
4752      that produce them.  You can use the `-frandom-seed' option to
4753      produce reproducibly identical object files.
4755      The STRING should be different for every file you compile.
4757 `-fsched-verbose=N'
4758      On targets that use instruction scheduling, this option controls
4759      the amount of debugging output the scheduler prints.  This
4760      information is written to standard error, unless
4761      `-fdump-rtl-sched1' or `-fdump-rtl-sched2' is specified, in which
4762      case it is output to the usual dump listing file, `.sched' or
4763      `.sched2' respectively.  However for N greater than nine, the
4764      output is always printed to standard error.
4766      For N greater than zero, `-fsched-verbose' outputs the same
4767      information as `-fdump-rtl-sched1' and `-fdump-rtl-sched2'.  For N
4768      greater than one, it also output basic block probabilities,
4769      detailed ready list information and unit/insn info.  For N greater
4770      than two, it includes RTL at abort point, control-flow and regions
4771      info.  And for N over four, `-fsched-verbose' also includes
4772      dependence info.
4774 `-save-temps'
4775      Store the usual "temporary" intermediate files permanently; place
4776      them in the current directory and name them based on the source
4777      file.  Thus, compiling `foo.c' with `-c -save-temps' would produce
4778      files `foo.i' and `foo.s', as well as `foo.o'.  This creates a
4779      preprocessed `foo.i' output file even though the compiler now
4780      normally uses an integrated preprocessor.
4782      When used in combination with the `-x' command line option,
4783      `-save-temps' is sensible enough to avoid over writing an input
4784      source file with the same extension as an intermediate file.  The
4785      corresponding intermediate file may be obtained by renaming the
4786      source file before using `-save-temps'.
4788 `-time'
4789      Report the CPU time taken by each subprocess in the compilation
4790      sequence.  For C source files, this is the compiler proper and
4791      assembler (plus the linker if linking is done).  The output looks
4792      like this:
4794           # cc1 0.12 0.01
4795           # as 0.00 0.01
4797      The first number on each line is the "user time", that is time
4798      spent executing the program itself.  The second number is "system
4799      time", time spent executing operating system routines on behalf of
4800      the program.  Both numbers are in seconds.
4802 `-fvar-tracking'
4803      Run variable tracking pass.  It computes where variables are
4804      stored at each position in code.  Better debugging information is
4805      then generated (if the debugging information format supports this
4806      information).
4808      It is enabled by default when compiling with optimization (`-Os',
4809      `-O', `-O2', ...), debugging information (`-g') and the debug info
4810      format supports it.
4812 `-print-file-name=LIBRARY'
4813      Print the full absolute name of the library file LIBRARY that
4814      would be used when linking--and don't do anything else.  With this
4815      option, GCC does not compile or link anything; it just prints the
4816      file name.
4818 `-print-multi-directory'
4819      Print the directory name corresponding to the multilib selected by
4820      any other switches present in the command line.  This directory is
4821      supposed to exist in `GCC_EXEC_PREFIX'.
4823 `-print-multi-lib'
4824      Print the mapping from multilib directory names to compiler
4825      switches that enable them.  The directory name is separated from
4826      the switches by `;', and each switch starts with an `@' instead of
4827      the `-', without spaces between multiple switches.  This is
4828      supposed to ease shell-processing.
4830 `-print-prog-name=PROGRAM'
4831      Like `-print-file-name', but searches for a program such as `cpp'.
4833 `-print-libgcc-file-name'
4834      Same as `-print-file-name=libgcc.a'.
4836      This is useful when you use `-nostdlib' or `-nodefaultlibs' but
4837      you do want to link with `libgcc.a'.  You can do
4839           gcc -nostdlib FILES... `gcc -print-libgcc-file-name`
4841 `-print-search-dirs'
4842      Print the name of the configured installation directory and a list
4843      of program and library directories `gcc' will search--and don't do
4844      anything else.
4846      This is useful when `gcc' prints the error message `installation
4847      problem, cannot exec cpp0: No such file or directory'.  To resolve
4848      this you either need to put `cpp0' and the other compiler
4849      components where `gcc' expects to find them, or you can set the
4850      environment variable `GCC_EXEC_PREFIX' to the directory where you
4851      installed them.  Don't forget the trailing `/'.  *Note Environment
4852      Variables::.
4854 `-print-sysroot'
4855      Print the target sysroot directory that will be used during
4856      compilation.  This is the target sysroot specified either at
4857      configure time or using the `--sysroot' option, possibly with an
4858      extra suffix that depends on compilation options.  If no target
4859      sysroot is specified, the option prints nothing.
4861 `-print-sysroot-headers-suffix'
4862      Print the suffix added to the target sysroot when searching for
4863      headers, or give an error if the compiler is not configured with
4864      such a suffix--and don't do anything else.
4866 `-dumpmachine'
4867      Print the compiler's target machine (for example,
4868      `i686-pc-linux-gnu')--and don't do anything else.
4870 `-dumpversion'
4871      Print the compiler version (for example, `3.0')--and don't do
4872      anything else.
4874 `-dumpspecs'
4875      Print the compiler's built-in specs--and don't do anything else.
4876      (This is used when GCC itself is being built.)  *Note Spec Files::.
4878 `-feliminate-unused-debug-types'
4879      Normally, when producing DWARF2 output, GCC will emit debugging
4880      information for all types declared in a compilation unit,
4881      regardless of whether or not they are actually used in that
4882      compilation unit.  Sometimes this is useful, such as if, in the
4883      debugger, you want to cast a value to a type that is not actually
4884      used in your program (but is declared).  More often, however, this
4885      results in a significant amount of wasted space.  With this
4886      option, GCC will avoid producing debug symbol output for types
4887      that are nowhere used in the source file being compiled.
4889 \x1f
4890 File: gcc.info,  Node: Optimize Options,  Next: Preprocessor Options,  Prev: Debugging Options,  Up: Invoking GCC
4892 3.10 Options That Control Optimization
4893 ======================================
4895 These options control various sorts of optimizations.
4897  Without any optimization option, the compiler's goal is to reduce the
4898 cost of compilation and to make debugging produce the expected results.
4899 Statements are independent: if you stop the program with a breakpoint
4900 between statements, you can then assign a new value to any variable or
4901 change the program counter to any other statement in the function and
4902 get exactly the results you would expect from the source code.
4904  Turning on optimization flags makes the compiler attempt to improve
4905 the performance and/or code size at the expense of compilation time and
4906 possibly the ability to debug the program.
4908  The compiler performs optimization based on the knowledge it has of the
4909 program.  Compiling multiple files at once to a single output file mode
4910 allows the compiler to use information gained from all of the files
4911 when compiling each of them.
4913  Not all optimizations are controlled directly by a flag.  Only
4914 optimizations that have a flag are listed.
4916 `-O'
4917 `-O1'
4918      Optimize.  Optimizing compilation takes somewhat more time, and a
4919      lot more memory for a large function.
4921      With `-O', the compiler tries to reduce code size and execution
4922      time, without performing any optimizations that take a great deal
4923      of compilation time.
4925      `-O' turns on the following optimization flags:
4926           -fauto-inc-dec
4927           -fcprop-registers
4928           -fdce
4929           -fdefer-pop
4930           -fdelayed-branch
4931           -fdse
4932           -fguess-branch-probability
4933           -fif-conversion2
4934           -fif-conversion
4935           -finline-small-functions
4936           -fipa-pure-const
4937           -fipa-reference
4938           -fmerge-constants
4939           -fsplit-wide-types
4940           -ftree-builtin-call-dce
4941           -ftree-ccp
4942           -ftree-ch
4943           -ftree-copyrename
4944           -ftree-dce
4945           -ftree-dominator-opts
4946           -ftree-dse
4947           -ftree-fre
4948           -ftree-sra
4949           -ftree-ter
4950           -funit-at-a-time
4952      `-O' also turns on `-fomit-frame-pointer' on machines where doing
4953      so does not interfere with debugging.
4955 `-O2'
4956      Optimize even more.  GCC performs nearly all supported
4957      optimizations that do not involve a space-speed tradeoff.  As
4958      compared to `-O', this option increases both compilation time and
4959      the performance of the generated code.
4961      `-O2' turns on all optimization flags specified by `-O'.  It also
4962      turns on the following optimization flags:
4963           -fthread-jumps
4964           -falign-functions  -falign-jumps
4965           -falign-loops  -falign-labels
4966           -fcaller-saves
4967           -fcrossjumping
4968           -fcse-follow-jumps  -fcse-skip-blocks
4969           -fdelete-null-pointer-checks
4970           -fexpensive-optimizations
4971           -fgcse  -fgcse-lm
4972           -findirect-inlining
4973           -foptimize-sibling-calls
4974           -fpeephole2
4975           -fregmove
4976           -freorder-blocks  -freorder-functions
4977           -frerun-cse-after-loop
4978           -fsched-interblock  -fsched-spec
4979           -fschedule-insns  -fschedule-insns2
4980           -fstrict-aliasing -fstrict-overflow
4981           -ftree-switch-conversion
4982           -ftree-pre
4983           -ftree-vrp
4985      Please note the warning under `-fgcse' about invoking `-O2' on
4986      programs that use computed gotos.
4988 `-O3'
4989      Optimize yet more.  `-O3' turns on all optimizations specified by
4990      `-O2' and also turns on the `-finline-functions',
4991      `-funswitch-loops', `-fpredictive-commoning',
4992      `-fgcse-after-reload' and `-ftree-vectorize' options.
4994 `-O0'
4995      Reduce compilation time and make debugging produce the expected
4996      results.  This is the default.
4998 `-Os'
4999      Optimize for size.  `-Os' enables all `-O2' optimizations that do
5000      not typically increase code size.  It also performs further
5001      optimizations designed to reduce code size.
5003      `-Os' disables the following optimization flags:
5004           -falign-functions  -falign-jumps  -falign-loops
5005           -falign-labels  -freorder-blocks  -freorder-blocks-and-partition
5006           -fprefetch-loop-arrays  -ftree-vect-loop-version
5008      If you use multiple `-O' options, with or without level numbers,
5009      the last such option is the one that is effective.
5011  Options of the form `-fFLAG' specify machine-independent flags.  Most
5012 flags have both positive and negative forms; the negative form of
5013 `-ffoo' would be `-fno-foo'.  In the table below, only one of the forms
5014 is listed--the one you typically will use.  You can figure out the
5015 other form by either removing `no-' or adding it.
5017  The following options control specific optimizations.  They are either
5018 activated by `-O' options or are related to ones that are.  You can use
5019 the following flags in the rare cases when "fine-tuning" of
5020 optimizations to be performed is desired.
5022 `-fno-default-inline'
5023      Do not make member functions inline by default merely because they
5024      are defined inside the class scope (C++ only).  Otherwise, when
5025      you specify `-O', member functions defined inside class scope are
5026      compiled inline by default; i.e., you don't need to add `inline'
5027      in front of the member function name.
5029 `-fno-defer-pop'
5030      Always pop the arguments to each function call as soon as that
5031      function returns.  For machines which must pop arguments after a
5032      function call, the compiler normally lets arguments accumulate on
5033      the stack for several function calls and pops them all at once.
5035      Disabled at levels `-O', `-O2', `-O3', `-Os'.
5037 `-fforward-propagate'
5038      Perform a forward propagation pass on RTL.  The pass tries to
5039      combine two instructions and checks if the result can be
5040      simplified.  If loop unrolling is active, two passes are performed
5041      and the second is scheduled after loop unrolling.
5043      This option is enabled by default at optimization levels `-O2',
5044      `-O3', `-Os'.
5046 `-fomit-frame-pointer'
5047      Don't keep the frame pointer in a register for functions that
5048      don't need one.  This avoids the instructions to save, set up and
5049      restore frame pointers; it also makes an extra register available
5050      in many functions.  *It also makes debugging impossible on some
5051      machines.*
5053      On some machines, such as the VAX, this flag has no effect, because
5054      the standard calling sequence automatically handles the frame
5055      pointer and nothing is saved by pretending it doesn't exist.  The
5056      machine-description macro `FRAME_POINTER_REQUIRED' controls
5057      whether a target machine supports this flag.  *Note Register
5058      Usage: (gccint)Registers.
5060      Enabled at levels `-O', `-O2', `-O3', `-Os'.
5062 `-foptimize-sibling-calls'
5063      Optimize sibling and tail recursive calls.
5065      Enabled at levels `-O2', `-O3', `-Os'.
5067 `-fno-inline'
5068      Don't pay attention to the `inline' keyword.  Normally this option
5069      is used to keep the compiler from expanding any functions inline.
5070      Note that if you are not optimizing, no functions can be expanded
5071      inline.
5073 `-finline-small-functions'
5074      Integrate functions into their callers when their body is smaller
5075      than expected function call code (so overall size of program gets
5076      smaller).  The compiler heuristically decides which functions are
5077      simple enough to be worth integrating in this way.
5079      Enabled at level `-O2'.
5081 `-findirect-inlining'
5082      Inline also indirect calls that are discovered to be known at
5083      compile time thanks to previous inlining.  This option has any
5084      effect only when inlining itself is turned on by the
5085      `-finline-functions' or `-finline-small-functions' options.
5087      Enabled at level `-O2'.
5089 `-finline-functions'
5090      Integrate all simple functions into their callers.  The compiler
5091      heuristically decides which functions are simple enough to be worth
5092      integrating in this way.
5094      If all calls to a given function are integrated, and the function
5095      is declared `static', then the function is normally not output as
5096      assembler code in its own right.
5098      Enabled at level `-O3'.
5100 `-finline-functions-called-once'
5101      Consider all `static' functions called once for inlining into their
5102      caller even if they are not marked `inline'.  If a call to a given
5103      function is integrated, then the function is not output as
5104      assembler code in its own right.
5106      Enabled at levels `-O1', `-O2', `-O3' and `-Os'.
5108 `-fearly-inlining'
5109      Inline functions marked by `always_inline' and functions whose
5110      body seems smaller than the function call overhead early before
5111      doing `-fprofile-generate' instrumentation and real inlining pass.
5112      Doing so makes profiling significantly cheaper and usually
5113      inlining faster on programs having large chains of nested wrapper
5114      functions.
5116      Enabled by default.
5118 `-finline-limit=N'
5119      By default, GCC limits the size of functions that can be inlined.
5120      This flag allows coarse control of this limit.  N is the size of
5121      functions that can be inlined in number of pseudo instructions.
5123      Inlining is actually controlled by a number of parameters, which
5124      may be specified individually by using `--param NAME=VALUE'.  The
5125      `-finline-limit=N' option sets some of these parameters as follows:
5127     `max-inline-insns-single'
5128           is set to N/2.
5130     `max-inline-insns-auto'
5131           is set to N/2.
5133      See below for a documentation of the individual parameters
5134      controlling inlining and for the defaults of these parameters.
5136      _Note:_ there may be no value to `-finline-limit' that results in
5137      default behavior.
5139      _Note:_ pseudo instruction represents, in this particular context,
5140      an abstract measurement of function's size.  In no way does it
5141      represent a count of assembly instructions and as such its exact
5142      meaning might change from one release to an another.
5144 `-fkeep-inline-functions'
5145      In C, emit `static' functions that are declared `inline' into the
5146      object file, even if the function has been inlined into all of its
5147      callers.  This switch does not affect functions using the `extern
5148      inline' extension in GNU C89.  In C++, emit any and all inline
5149      functions into the object file.
5151 `-fkeep-static-consts'
5152      Emit variables declared `static const' when optimization isn't
5153      turned on, even if the variables aren't referenced.
5155      GCC enables this option by default.  If you want to force the
5156      compiler to check if the variable was referenced, regardless of
5157      whether or not optimization is turned on, use the
5158      `-fno-keep-static-consts' option.
5160 `-fmerge-constants'
5161      Attempt to merge identical constants (string constants and
5162      floating point constants) across compilation units.
5164      This option is the default for optimized compilation if the
5165      assembler and linker support it.  Use `-fno-merge-constants' to
5166      inhibit this behavior.
5168      Enabled at levels `-O', `-O2', `-O3', `-Os'.
5170 `-fmerge-all-constants'
5171      Attempt to merge identical constants and identical variables.
5173      This option implies `-fmerge-constants'.  In addition to
5174      `-fmerge-constants' this considers e.g. even constant initialized
5175      arrays or initialized constant variables with integral or floating
5176      point types.  Languages like C or C++ require each variable,
5177      including multiple instances of the same variable in recursive
5178      calls, to have distinct locations, so using this option will
5179      result in non-conforming behavior.
5181 `-fmodulo-sched'
5182      Perform swing modulo scheduling immediately before the first
5183      scheduling pass.  This pass looks at innermost loops and reorders
5184      their instructions by overlapping different iterations.
5186 `-fmodulo-sched-allow-regmoves'
5187      Perform more aggressive SMS based modulo scheduling with register
5188      moves allowed.  By setting this flag certain anti-dependences
5189      edges will be deleted which will trigger the generation of
5190      reg-moves based on the life-range analysis.  This option is
5191      effective only with `-fmodulo-sched' enabled.
5193 `-fno-branch-count-reg'
5194      Do not use "decrement and branch" instructions on a count register,
5195      but instead generate a sequence of instructions that decrement a
5196      register, compare it against zero, then branch based upon the
5197      result.  This option is only meaningful on architectures that
5198      support such instructions, which include x86, PowerPC, IA-64 and
5199      S/390.
5201      The default is `-fbranch-count-reg'.
5203 `-fno-function-cse'
5204      Do not put function addresses in registers; make each instruction
5205      that calls a constant function contain the function's address
5206      explicitly.
5208      This option results in less efficient code, but some strange hacks
5209      that alter the assembler output may be confused by the
5210      optimizations performed when this option is not used.
5212      The default is `-ffunction-cse'
5214 `-fno-zero-initialized-in-bss'
5215      If the target supports a BSS section, GCC by default puts
5216      variables that are initialized to zero into BSS.  This can save
5217      space in the resulting code.
5219      This option turns off this behavior because some programs
5220      explicitly rely on variables going to the data section.  E.g., so
5221      that the resulting executable can find the beginning of that
5222      section and/or make assumptions based on that.
5224      The default is `-fzero-initialized-in-bss'.
5226 `-fmudflap -fmudflapth -fmudflapir'
5227      For front-ends that support it (C and C++), instrument all risky
5228      pointer/array dereferencing operations, some standard library
5229      string/heap functions, and some other associated constructs with
5230      range/validity tests.  Modules so instrumented should be immune to
5231      buffer overflows, invalid heap use, and some other classes of C/C++
5232      programming errors.  The instrumentation relies on a separate
5233      runtime library (`libmudflap'), which will be linked into a
5234      program if `-fmudflap' is given at link time.  Run-time behavior
5235      of the instrumented program is controlled by the `MUDFLAP_OPTIONS'
5236      environment variable.  See `env MUDFLAP_OPTIONS=-help a.out' for
5237      its options.
5239      Use `-fmudflapth' instead of `-fmudflap' to compile and to link if
5240      your program is multi-threaded.  Use `-fmudflapir', in addition to
5241      `-fmudflap' or `-fmudflapth', if instrumentation should ignore
5242      pointer reads.  This produces less instrumentation (and therefore
5243      faster execution) and still provides some protection against
5244      outright memory corrupting writes, but allows erroneously read
5245      data to propagate within a program.
5247 `-fthread-jumps'
5248      Perform optimizations where we check to see if a jump branches to a
5249      location where another comparison subsumed by the first is found.
5250      If so, the first branch is redirected to either the destination of
5251      the second branch or a point immediately following it, depending
5252      on whether the condition is known to be true or false.
5254      Enabled at levels `-O2', `-O3', `-Os'.
5256 `-fsplit-wide-types'
5257      When using a type that occupies multiple registers, such as `long
5258      long' on a 32-bit system, split the registers apart and allocate
5259      them independently.  This normally generates better code for those
5260      types, but may make debugging more difficult.
5262      Enabled at levels `-O', `-O2', `-O3', `-Os'.
5264 `-fcse-follow-jumps'
5265      In common subexpression elimination (CSE), scan through jump
5266      instructions when the target of the jump is not reached by any
5267      other path.  For example, when CSE encounters an `if' statement
5268      with an `else' clause, CSE will follow the jump when the condition
5269      tested is false.
5271      Enabled at levels `-O2', `-O3', `-Os'.
5273 `-fcse-skip-blocks'
5274      This is similar to `-fcse-follow-jumps', but causes CSE to follow
5275      jumps which conditionally skip over blocks.  When CSE encounters a
5276      simple `if' statement with no else clause, `-fcse-skip-blocks'
5277      causes CSE to follow the jump around the body of the `if'.
5279      Enabled at levels `-O2', `-O3', `-Os'.
5281 `-frerun-cse-after-loop'
5282      Re-run common subexpression elimination after loop optimizations
5283      has been performed.
5285      Enabled at levels `-O2', `-O3', `-Os'.
5287 `-fgcse'
5288      Perform a global common subexpression elimination pass.  This pass
5289      also performs global constant and copy propagation.
5291      _Note:_ When compiling a program using computed gotos, a GCC
5292      extension, you may get better runtime performance if you disable
5293      the global common subexpression elimination pass by adding
5294      `-fno-gcse' to the command line.
5296      Enabled at levels `-O2', `-O3', `-Os'.
5298 `-fgcse-lm'
5299      When `-fgcse-lm' is enabled, global common subexpression
5300      elimination will attempt to move loads which are only killed by
5301      stores into themselves.  This allows a loop containing a
5302      load/store sequence to be changed to a load outside the loop, and
5303      a copy/store within the loop.
5305      Enabled by default when gcse is enabled.
5307 `-fgcse-sm'
5308      When `-fgcse-sm' is enabled, a store motion pass is run after
5309      global common subexpression elimination.  This pass will attempt
5310      to move stores out of loops.  When used in conjunction with
5311      `-fgcse-lm', loops containing a load/store sequence can be changed
5312      to a load before the loop and a store after the loop.
5314      Not enabled at any optimization level.
5316 `-fgcse-las'
5317      When `-fgcse-las' is enabled, the global common subexpression
5318      elimination pass eliminates redundant loads that come after stores
5319      to the same memory location (both partial and full redundancies).
5321      Not enabled at any optimization level.
5323 `-fgcse-after-reload'
5324      When `-fgcse-after-reload' is enabled, a redundant load elimination
5325      pass is performed after reload.  The purpose of this pass is to
5326      cleanup redundant spilling.
5328 `-funsafe-loop-optimizations'
5329      If given, the loop optimizer will assume that loop indices do not
5330      overflow, and that the loops with nontrivial exit condition are not
5331      infinite.  This enables a wider range of loop optimizations even if
5332      the loop optimizer itself cannot prove that these assumptions are
5333      valid.  Using `-Wunsafe-loop-optimizations', the compiler will
5334      warn you if it finds this kind of loop.
5336 `-fcrossjumping'
5337      Perform cross-jumping transformation.  This transformation unifies
5338      equivalent code and save code size.  The resulting code may or may
5339      not perform better than without cross-jumping.
5341      Enabled at levels `-O2', `-O3', `-Os'.
5343 `-fauto-inc-dec'
5344      Combine increments or decrements of addresses with memory accesses.
5345      This pass is always skipped on architectures that do not have
5346      instructions to support this.  Enabled by default at `-O' and
5347      higher on architectures that support this.
5349 `-fdce'
5350      Perform dead code elimination (DCE) on RTL.  Enabled by default at
5351      `-O' and higher.
5353 `-fdse'
5354      Perform dead store elimination (DSE) on RTL.  Enabled by default
5355      at `-O' and higher.
5357 `-fif-conversion'
5358      Attempt to transform conditional jumps into branch-less
5359      equivalents.  This include use of conditional moves, min, max, set
5360      flags and abs instructions, and some tricks doable by standard
5361      arithmetics.  The use of conditional execution on chips where it
5362      is available is controlled by `if-conversion2'.
5364      Enabled at levels `-O', `-O2', `-O3', `-Os'.
5366 `-fif-conversion2'
5367      Use conditional execution (where available) to transform
5368      conditional jumps into branch-less equivalents.
5370      Enabled at levels `-O', `-O2', `-O3', `-Os'.
5372 `-fdelete-null-pointer-checks'
5373      Use global dataflow analysis to identify and eliminate useless
5374      checks for null pointers.  The compiler assumes that dereferencing
5375      a null pointer would have halted the program.  If a pointer is
5376      checked after it has already been dereferenced, it cannot be null.
5378      In some environments, this assumption is not true, and programs can
5379      safely dereference null pointers.  Use
5380      `-fno-delete-null-pointer-checks' to disable this optimization for
5381      programs which depend on that behavior.
5383      Enabled at levels `-O2', `-O3', `-Os'.
5385 `-fexpensive-optimizations'
5386      Perform a number of minor optimizations that are relatively
5387      expensive.
5389      Enabled at levels `-O2', `-O3', `-Os'.
5391 `-foptimize-register-move'
5392 `-fregmove'
5393      Attempt to reassign register numbers in move instructions and as
5394      operands of other simple instructions in order to maximize the
5395      amount of register tying.  This is especially helpful on machines
5396      with two-operand instructions.
5398      Note `-fregmove' and `-foptimize-register-move' are the same
5399      optimization.
5401      Enabled at levels `-O2', `-O3', `-Os'.
5403 `-fira-algorithm=ALGORITHM'
5404      Use specified coloring algorithm for the integrated register
5405      allocator.  The ALGORITHM argument should be `priority' or `CB'.
5406      The first algorithm specifies Chow's priority coloring, the second
5407      one specifies Chaitin-Briggs coloring.  The second algorithm can
5408      be unimplemented for some architectures.  If it is implemented, it
5409      is the default because Chaitin-Briggs coloring as a rule generates
5410      a better code.
5412 `-fira-region=REGION'
5413      Use specified regions for the integrated register allocator.  The
5414      REGION argument should be one of `all', `mixed', or `one'.  The
5415      first value means using all loops as register allocation regions,
5416      the second value which is the default means using all loops except
5417      for loops with small register pressure as the regions, and third
5418      one means using all function as a single region.  The first value
5419      can give best result for machines with small size and irregular
5420      register set, the third one results in faster and generates decent
5421      code and the smallest size code, and the default value usually
5422      give the best results in most cases and for most architectures.
5424 `-fira-coalesce'
5425      Do optimistic register coalescing.  This option might be
5426      profitable for architectures with big regular register files.
5428 `-fno-ira-share-save-slots'
5429      Switch off sharing stack slots used for saving call used hard
5430      registers living through a call.  Each hard register will get a
5431      separate stack slot and as a result function stack frame will be
5432      bigger.
5434 `-fno-ira-share-spill-slots'
5435      Switch off sharing stack slots allocated for pseudo-registers.
5436      Each pseudo-register which did not get a hard register will get a
5437      separate stack slot and as a result function stack frame will be
5438      bigger.
5440 `-fira-verbose=N'
5441      Set up how verbose dump file for the integrated register allocator
5442      will be.  Default value is 5.  If the value is greater or equal to
5443      10, the dump file will be stderr as if the value were N minus 10.
5445 `-fdelayed-branch'
5446      If supported for the target machine, attempt to reorder
5447      instructions to exploit instruction slots available after delayed
5448      branch instructions.
5450      Enabled at levels `-O', `-O2', `-O3', `-Os'.
5452 `-fschedule-insns'
5453      If supported for the target machine, attempt to reorder
5454      instructions to eliminate execution stalls due to required data
5455      being unavailable.  This helps machines that have slow floating
5456      point or memory load instructions by allowing other instructions
5457      to be issued until the result of the load or floating point
5458      instruction is required.
5460      Enabled at levels `-O2', `-O3', `-Os'.
5462 `-fschedule-insns2'
5463      Similar to `-fschedule-insns', but requests an additional pass of
5464      instruction scheduling after register allocation has been done.
5465      This is especially useful on machines with a relatively small
5466      number of registers and where memory load instructions take more
5467      than one cycle.
5469      Enabled at levels `-O2', `-O3', `-Os'.
5471 `-fno-sched-interblock'
5472      Don't schedule instructions across basic blocks.  This is normally
5473      enabled by default when scheduling before register allocation, i.e.
5474      with `-fschedule-insns' or at `-O2' or higher.
5476 `-fno-sched-spec'
5477      Don't allow speculative motion of non-load instructions.  This is
5478      normally enabled by default when scheduling before register
5479      allocation, i.e.  with `-fschedule-insns' or at `-O2' or higher.
5481 `-fsched-spec-load'
5482      Allow speculative motion of some load instructions.  This only
5483      makes sense when scheduling before register allocation, i.e. with
5484      `-fschedule-insns' or at `-O2' or higher.
5486 `-fsched-spec-load-dangerous'
5487      Allow speculative motion of more load instructions.  This only
5488      makes sense when scheduling before register allocation, i.e. with
5489      `-fschedule-insns' or at `-O2' or higher.
5491 `-fsched-stalled-insns'
5492 `-fsched-stalled-insns=N'
5493      Define how many insns (if any) can be moved prematurely from the
5494      queue of stalled insns into the ready list, during the second
5495      scheduling pass.  `-fno-sched-stalled-insns' means that no insns
5496      will be moved prematurely, `-fsched-stalled-insns=0' means there
5497      is no limit on how many queued insns can be moved prematurely.
5498      `-fsched-stalled-insns' without a value is equivalent to
5499      `-fsched-stalled-insns=1'.
5501 `-fsched-stalled-insns-dep'
5502 `-fsched-stalled-insns-dep=N'
5503      Define how many insn groups (cycles) will be examined for a
5504      dependency on a stalled insn that is candidate for premature
5505      removal from the queue of stalled insns.  This has an effect only
5506      during the second scheduling pass, and only if
5507      `-fsched-stalled-insns' is used.  `-fno-sched-stalled-insns-dep'
5508      is equivalent to `-fsched-stalled-insns-dep=0'.
5509      `-fsched-stalled-insns-dep' without a value is equivalent to
5510      `-fsched-stalled-insns-dep=1'.
5512 `-fsched2-use-superblocks'
5513      When scheduling after register allocation, do use superblock
5514      scheduling algorithm.  Superblock scheduling allows motion across
5515      basic block boundaries resulting on faster schedules.  This option
5516      is experimental, as not all machine descriptions used by GCC model
5517      the CPU closely enough to avoid unreliable results from the
5518      algorithm.
5520      This only makes sense when scheduling after register allocation,
5521      i.e. with `-fschedule-insns2' or at `-O2' or higher.
5523 `-fsched2-use-traces'
5524      Use `-fsched2-use-superblocks' algorithm when scheduling after
5525      register allocation and additionally perform code duplication in
5526      order to increase the size of superblocks using tracer pass.  See
5527      `-ftracer' for details on trace formation.
5529      This mode should produce faster but significantly longer programs.
5530      Also without `-fbranch-probabilities' the traces constructed may
5531      not match the reality and hurt the performance.  This only makes
5532      sense when scheduling after register allocation, i.e. with
5533      `-fschedule-insns2' or at `-O2' or higher.
5535 `-fsee'
5536      Eliminate redundant sign extension instructions and move the
5537      non-redundant ones to optimal placement using lazy code motion
5538      (LCM).
5540 `-freschedule-modulo-scheduled-loops'
5541      The modulo scheduling comes before the traditional scheduling, if
5542      a loop was modulo scheduled we may want to prevent the later
5543      scheduling passes from changing its schedule, we use this option
5544      to control that.
5546 `-fselective-scheduling'
5547      Schedule instructions using selective scheduling algorithm.
5548      Selective scheduling runs instead of the first scheduler pass.
5550 `-fselective-scheduling2'
5551      Schedule instructions using selective scheduling algorithm.
5552      Selective scheduling runs instead of the second scheduler pass.
5554 `-fsel-sched-pipelining'
5555      Enable software pipelining of innermost loops during selective
5556      scheduling.  This option has no effect until one of
5557      `-fselective-scheduling' or `-fselective-scheduling2' is turned on.
5559 `-fsel-sched-pipelining-outer-loops'
5560      When pipelining loops during selective scheduling, also pipeline
5561      outer loops.  This option has no effect until
5562      `-fsel-sched-pipelining' is turned on.
5564 `-fcaller-saves'
5565      Enable values to be allocated in registers that will be clobbered
5566      by function calls, by emitting extra instructions to save and
5567      restore the registers around such calls.  Such allocation is done
5568      only when it seems to result in better code than would otherwise
5569      be produced.
5571      This option is always enabled by default on certain machines,
5572      usually those which have no call-preserved registers to use
5573      instead.
5575      Enabled at levels `-O2', `-O3', `-Os'.
5577 `-fconserve-stack'
5578      Attempt to minimize stack usage.  The compiler will attempt to use
5579      less stack space, even if that makes the program slower.  This
5580      option implies setting the `large-stack-frame' parameter to 100
5581      and the `large-stack-frame-growth' parameter to 400.
5583 `-ftree-reassoc'
5584      Perform reassociation on trees.  This flag is enabled by default
5585      at `-O' and higher.
5587 `-ftree-pre'
5588      Perform partial redundancy elimination (PRE) on trees.  This flag
5589      is enabled by default at `-O2' and `-O3'.
5591 `-ftree-fre'
5592      Perform full redundancy elimination (FRE) on trees.  The difference
5593      between FRE and PRE is that FRE only considers expressions that
5594      are computed on all paths leading to the redundant computation.
5595      This analysis is faster than PRE, though it exposes fewer
5596      redundancies.  This flag is enabled by default at `-O' and higher.
5598 `-ftree-copy-prop'
5599      Perform copy propagation on trees.  This pass eliminates
5600      unnecessary copy operations.  This flag is enabled by default at
5601      `-O' and higher.
5603 `-fipa-pure-const'
5604      Discover which functions are pure or constant.  Enabled by default
5605      at `-O' and higher.
5607 `-fipa-reference'
5608      Discover which static variables do not escape cannot escape the
5609      compilation unit.  Enabled by default at `-O' and higher.
5611 `-fipa-struct-reorg'
5612      Perform structure reorganization optimization, that change C-like
5613      structures layout in order to better utilize spatial locality.
5614      This transformation is affective for programs containing arrays of
5615      structures.  Available in two compilation modes: profile-based
5616      (enabled with `-fprofile-generate') or static (which uses built-in
5617      heuristics).  Require `-fipa-type-escape' to provide the safety of
5618      this transformation.  It works only in whole program mode, so it
5619      requires `-fwhole-program' and `-combine' to be enabled.
5620      Structures considered `cold' by this transformation are not
5621      affected (see `--param struct-reorg-cold-struct-ratio=VALUE').
5623      With this flag, the program debug info reflects a new structure
5624      layout.
5626 `-fipa-pta'
5627      Perform interprocedural pointer analysis.  This option is
5628      experimental and does not affect generated code.
5630 `-fipa-cp'
5631      Perform interprocedural constant propagation.  This optimization
5632      analyzes the program to determine when values passed to functions
5633      are constants and then optimizes accordingly.  This optimization
5634      can substantially increase performance if the application has
5635      constants passed to functions.  This flag is enabled by default at
5636      `-O2', `-Os' and `-O3'.
5638 `-fipa-cp-clone'
5639      Perform function cloning to make interprocedural constant
5640      propagation stronger.  When enabled, interprocedural constant
5641      propagation will perform function cloning when externally visible
5642      function can be called with constant arguments.  Because this
5643      optimization can create multiple copies of functions, it may
5644      significantly increase code size (see `--param
5645      ipcp-unit-growth=VALUE').  This flag is enabled by default at
5646      `-O3'.
5648 `-fipa-matrix-reorg'
5649      Perform matrix flattening and transposing.  Matrix flattening
5650      tries to replace a m-dimensional matrix with its equivalent
5651      n-dimensional matrix, where n < m.  This reduces the level of
5652      indirection needed for accessing the elements of the matrix. The
5653      second optimization is matrix transposing that attempts to change
5654      the order of the matrix's dimensions in order to improve cache
5655      locality.  Both optimizations need the `-fwhole-program' flag.
5656      Transposing is enabled only if profiling information is available.
5658 `-ftree-sink'
5659      Perform forward store motion  on trees.  This flag is enabled by
5660      default at `-O' and higher.
5662 `-ftree-ccp'
5663      Perform sparse conditional constant propagation (CCP) on trees.
5664      This pass only operates on local scalar variables and is enabled
5665      by default at `-O' and higher.
5667 `-ftree-switch-conversion'
5668      Perform conversion of simple initializations in a switch to
5669      initializations from a scalar array.  This flag is enabled by
5670      default at `-O2' and higher.
5672 `-ftree-dce'
5673      Perform dead code elimination (DCE) on trees.  This flag is
5674      enabled by default at `-O' and higher.
5676 `-ftree-builtin-call-dce'
5677      Perform conditional dead code elimination (DCE) for calls to
5678      builtin functions that may set `errno' but are otherwise
5679      side-effect free.  This flag is enabled by default at `-O2' and
5680      higher if `-Os' is not also specified.
5682 `-ftree-dominator-opts'
5683      Perform a variety of simple scalar cleanups (constant/copy
5684      propagation, redundancy elimination, range propagation and
5685      expression simplification) based on a dominator tree traversal.
5686      This also performs jump threading (to reduce jumps to jumps). This
5687      flag is enabled by default at `-O' and higher.
5689 `-ftree-dse'
5690      Perform dead store elimination (DSE) on trees.  A dead store is a
5691      store into a memory location which will later be overwritten by
5692      another store without any intervening loads.  In this case the
5693      earlier store can be deleted.  This flag is enabled by default at
5694      `-O' and higher.
5696 `-ftree-ch'
5697      Perform loop header copying on trees.  This is beneficial since it
5698      increases effectiveness of code motion optimizations.  It also
5699      saves one jump.  This flag is enabled by default at `-O' and
5700      higher.  It is not enabled for `-Os', since it usually increases
5701      code size.
5703 `-ftree-loop-optimize'
5704      Perform loop optimizations on trees.  This flag is enabled by
5705      default at `-O' and higher.
5707 `-ftree-loop-linear'
5708      Perform linear loop transformations on tree.  This flag can
5709      improve cache performance and allow further loop optimizations to
5710      take place.
5712 `-floop-interchange'
5713      Perform loop interchange transformations on loops.  Interchanging
5714      two nested loops switches the inner and outer loops.  For example,
5715      given a loop like:
5716           DO J = 1, M
5717             DO I = 1, N
5718               A(J, I) = A(J, I) * C
5719             ENDDO
5720           ENDDO
5721      loop interchange will transform the loop as if the user had
5722      written:
5723           DO I = 1, N
5724             DO J = 1, M
5725               A(J, I) = A(J, I) * C
5726             ENDDO
5727           ENDDO
5728      which can be beneficial when `N' is larger than the caches,
5729      because in Fortran, the elements of an array are stored in memory
5730      contiguously by column, and the original loop iterates over rows,
5731      potentially creating at each access a cache miss.  This
5732      optimization applies to all the languages supported by GCC and is
5733      not limited to Fortran.  To use this code transformation, GCC has
5734      to be configured with `--with-ppl' and `--with-cloog' to enable the
5735      Graphite loop transformation infrastructure.
5737 `-floop-strip-mine'
5738      Perform loop strip mining transformations on loops.  Strip mining
5739      splits a loop into two nested loops.  The outer loop has strides
5740      equal to the strip size and the inner loop has strides of the
5741      original loop within a strip.  For example, given a loop like:
5742           DO I = 1, N
5743             A(I) = A(I) + C
5744           ENDDO
5745      loop strip mining will transform the loop as if the user had
5746      written:
5747           DO II = 1, N, 4
5748             DO I = II, min (II + 3, N)
5749               A(I) = A(I) + C
5750             ENDDO
5751           ENDDO
5752      This optimization applies to all the languages supported by GCC
5753      and is not limited to Fortran.  To use this code transformation,
5754      GCC has to be configured with `--with-ppl' and `--with-cloog' to
5755      enable the Graphite loop transformation infrastructure.
5757 `-floop-block'
5758      Perform loop blocking transformations on loops.  Blocking strip
5759      mines each loop in the loop nest such that the memory accesses of
5760      the element loops fit inside caches.  For example, given a loop
5761      like:
5762           DO I = 1, N
5763             DO J = 1, M
5764               A(J, I) = B(I) + C(J)
5765             ENDDO
5766           ENDDO
5767      loop blocking will transform the loop as if the user had written:
5768           DO II = 1, N, 64
5769             DO JJ = 1, M, 64
5770               DO I = II, min (II + 63, N)
5771                 DO J = JJ, min (JJ + 63, M)
5772                   A(J, I) = B(I) + C(J)
5773                 ENDDO
5774               ENDDO
5775             ENDDO
5776           ENDDO
5777      which can be beneficial when `M' is larger than the caches,
5778      because the innermost loop will iterate over a smaller amount of
5779      data that can be kept in the caches.  This optimization applies to
5780      all the languages supported by GCC and is not limited to Fortran.
5781      To use this code transformation, GCC has to be configured with
5782      `--with-ppl' and `--with-cloog' to enable the Graphite loop
5783      transformation infrastructure.
5785 `-fcheck-data-deps'
5786      Compare the results of several data dependence analyzers.  This
5787      option is used for debugging the data dependence analyzers.
5789 `-ftree-loop-distribution'
5790      Perform loop distribution.  This flag can improve cache
5791      performance on big loop bodies and allow further loop
5792      optimizations, like parallelization or vectorization, to take
5793      place.  For example, the loop
5794           DO I = 1, N
5795             A(I) = B(I) + C
5796             D(I) = E(I) * F
5797           ENDDO
5798      is transformed to
5799           DO I = 1, N
5800              A(I) = B(I) + C
5801           ENDDO
5802           DO I = 1, N
5803              D(I) = E(I) * F
5804           ENDDO
5806 `-ftree-loop-im'
5807      Perform loop invariant motion on trees.  This pass moves only
5808      invariants that would be hard to handle at RTL level (function
5809      calls, operations that expand to nontrivial sequences of insns).
5810      With `-funswitch-loops' it also moves operands of conditions that
5811      are invariant out of the loop, so that we can use just trivial
5812      invariantness analysis in loop unswitching.  The pass also includes
5813      store motion.
5815 `-ftree-loop-ivcanon'
5816      Create a canonical counter for number of iterations in the loop
5817      for that determining number of iterations requires complicated
5818      analysis.  Later optimizations then may determine the number
5819      easily.  Useful especially in connection with unrolling.
5821 `-fivopts'
5822      Perform induction variable optimizations (strength reduction,
5823      induction variable merging and induction variable elimination) on
5824      trees.
5826 `-ftree-parallelize-loops=n'
5827      Parallelize loops, i.e., split their iteration space to run in n
5828      threads.  This is only possible for loops whose iterations are
5829      independent and can be arbitrarily reordered.  The optimization is
5830      only profitable on multiprocessor machines, for loops that are
5831      CPU-intensive, rather than constrained e.g. by memory bandwidth.
5832      This option implies `-pthread', and thus is only supported on
5833      targets that have support for `-pthread'.
5835 `-ftree-sra'
5836      Perform scalar replacement of aggregates.  This pass replaces
5837      structure references with scalars to prevent committing structures
5838      to memory too early.  This flag is enabled by default at `-O' and
5839      higher.
5841 `-ftree-copyrename'
5842      Perform copy renaming on trees.  This pass attempts to rename
5843      compiler temporaries to other variables at copy locations, usually
5844      resulting in variable names which more closely resemble the
5845      original variables.  This flag is enabled by default at `-O' and
5846      higher.
5848 `-ftree-ter'
5849      Perform temporary expression replacement during the SSA->normal
5850      phase.  Single use/single def temporaries are replaced at their
5851      use location with their defining expression.  This results in
5852      non-GIMPLE code, but gives the expanders much more complex trees
5853      to work on resulting in better RTL generation.  This is enabled by
5854      default at `-O' and higher.
5856 `-ftree-vectorize'
5857      Perform loop vectorization on trees. This flag is enabled by
5858      default at `-O3'.
5860 `-ftree-vect-loop-version'
5861      Perform loop versioning when doing loop vectorization on trees.
5862      When a loop appears to be vectorizable except that data alignment
5863      or data dependence cannot be determined at compile time then
5864      vectorized and non-vectorized versions of the loop are generated
5865      along with runtime checks for alignment or dependence to control
5866      which version is executed.  This option is enabled by default
5867      except at level `-Os' where it is disabled.
5869 `-fvect-cost-model'
5870      Enable cost model for vectorization.
5872 `-ftree-vrp'
5873      Perform Value Range Propagation on trees.  This is similar to the
5874      constant propagation pass, but instead of values, ranges of values
5875      are propagated.  This allows the optimizers to remove unnecessary
5876      range checks like array bound checks and null pointer checks.
5877      This is enabled by default at `-O2' and higher.  Null pointer check
5878      elimination is only done if `-fdelete-null-pointer-checks' is
5879      enabled.
5881 `-ftracer'
5882      Perform tail duplication to enlarge superblock size.  This
5883      transformation simplifies the control flow of the function
5884      allowing other optimizations to do better job.
5886 `-funroll-loops'
5887      Unroll loops whose number of iterations can be determined at
5888      compile time or upon entry to the loop.  `-funroll-loops' implies
5889      `-frerun-cse-after-loop'.  This option makes code larger, and may
5890      or may not make it run faster.
5892 `-funroll-all-loops'
5893      Unroll all loops, even if their number of iterations is uncertain
5894      when the loop is entered.  This usually makes programs run more
5895      slowly.  `-funroll-all-loops' implies the same options as
5896      `-funroll-loops',
5898 `-fsplit-ivs-in-unroller'
5899      Enables expressing of values of induction variables in later
5900      iterations of the unrolled loop using the value in the first
5901      iteration.  This breaks long dependency chains, thus improving
5902      efficiency of the scheduling passes.
5904      Combination of `-fweb' and CSE is often sufficient to obtain the
5905      same effect.  However in cases the loop body is more complicated
5906      than a single basic block, this is not reliable.  It also does not
5907      work at all on some of the architectures due to restrictions in
5908      the CSE pass.
5910      This optimization is enabled by default.
5912 `-fvariable-expansion-in-unroller'
5913      With this option, the compiler will create multiple copies of some
5914      local variables when unrolling a loop which can result in superior
5915      code.
5917 `-fpredictive-commoning'
5918      Perform predictive commoning optimization, i.e., reusing
5919      computations (especially memory loads and stores) performed in
5920      previous iterations of loops.
5922      This option is enabled at level `-O3'.
5924 `-fprefetch-loop-arrays'
5925      If supported by the target machine, generate instructions to
5926      prefetch memory to improve the performance of loops that access
5927      large arrays.
5929      This option may generate better or worse code; results are highly
5930      dependent on the structure of loops within the source code.
5932      Disabled at level `-Os'.
5934 `-fno-peephole'
5935 `-fno-peephole2'
5936      Disable any machine-specific peephole optimizations.  The
5937      difference between `-fno-peephole' and `-fno-peephole2' is in how
5938      they are implemented in the compiler; some targets use one, some
5939      use the other, a few use both.
5941      `-fpeephole' is enabled by default.  `-fpeephole2' enabled at
5942      levels `-O2', `-O3', `-Os'.
5944 `-fno-guess-branch-probability'
5945      Do not guess branch probabilities using heuristics.
5947      GCC will use heuristics to guess branch probabilities if they are
5948      not provided by profiling feedback (`-fprofile-arcs').  These
5949      heuristics are based on the control flow graph.  If some branch
5950      probabilities are specified by `__builtin_expect', then the
5951      heuristics will be used to guess branch probabilities for the rest
5952      of the control flow graph, taking the `__builtin_expect' info into
5953      account.  The interactions between the heuristics and
5954      `__builtin_expect' can be complex, and in some cases, it may be
5955      useful to disable the heuristics so that the effects of
5956      `__builtin_expect' are easier to understand.
5958      The default is `-fguess-branch-probability' at levels `-O', `-O2',
5959      `-O3', `-Os'.
5961 `-freorder-blocks'
5962      Reorder basic blocks in the compiled function in order to reduce
5963      number of taken branches and improve code locality.
5965      Enabled at levels `-O2', `-O3'.
5967 `-freorder-blocks-and-partition'
5968      In addition to reordering basic blocks in the compiled function,
5969      in order to reduce number of taken branches, partitions hot and
5970      cold basic blocks into separate sections of the assembly and .o
5971      files, to improve paging and cache locality performance.
5973      This optimization is automatically turned off in the presence of
5974      exception handling, for linkonce sections, for functions with a
5975      user-defined section attribute and on any architecture that does
5976      not support named sections.
5978 `-freorder-functions'
5979      Reorder functions in the object file in order to improve code
5980      locality.  This is implemented by using special subsections
5981      `.text.hot' for most frequently executed functions and
5982      `.text.unlikely' for unlikely executed functions.  Reordering is
5983      done by the linker so object file format must support named
5984      sections and linker must place them in a reasonable way.
5986      Also profile feedback must be available in to make this option
5987      effective.  See `-fprofile-arcs' for details.
5989      Enabled at levels `-O2', `-O3', `-Os'.
5991 `-fstrict-aliasing'
5992      Allows the compiler to assume the strictest aliasing rules
5993      applicable to the language being compiled.  For C (and C++), this
5994      activates optimizations based on the type of expressions.  In
5995      particular, an object of one type is assumed never to reside at
5996      the same address as an object of a different type, unless the
5997      types are almost the same.  For example, an `unsigned int' can
5998      alias an `int', but not a `void*' or a `double'.  A character type
5999      may alias any other type.
6001      Pay special attention to code like this:
6002           union a_union {
6003             int i;
6004             double d;
6005           };
6007           int f() {
6008             a_union t;
6009             t.d = 3.0;
6010             return t.i;
6011           }
6012      The practice of reading from a different union member than the one
6013      most recently written to (called "type-punning") is common.  Even
6014      with `-fstrict-aliasing', type-punning is allowed, provided the
6015      memory is accessed through the union type.  So, the code above
6016      will work as expected.  *Note Structures unions enumerations and
6017      bit-fields implementation::.  However, this code might not:
6018           int f() {
6019             a_union t;
6020             int* ip;
6021             t.d = 3.0;
6022             ip = &t.i;
6023             return *ip;
6024           }
6026      Similarly, access by taking the address, casting the resulting
6027      pointer and dereferencing the result has undefined behavior, even
6028      if the cast uses a union type, e.g.:
6029           int f() {
6030             double d = 3.0;
6031             return ((union a_union *) &d)->i;
6032           }
6034      The `-fstrict-aliasing' option is enabled at levels `-O2', `-O3',
6035      `-Os'.
6037 `-fstrict-overflow'
6038      Allow the compiler to assume strict signed overflow rules,
6039      depending on the language being compiled.  For C (and C++) this
6040      means that overflow when doing arithmetic with signed numbers is
6041      undefined, which means that the compiler may assume that it will
6042      not happen.  This permits various optimizations.  For example, the
6043      compiler will assume that an expression like `i + 10 > i' will
6044      always be true for signed `i'.  This assumption is only valid if
6045      signed overflow is undefined, as the expression is false if `i +
6046      10' overflows when using twos complement arithmetic.  When this
6047      option is in effect any attempt to determine whether an operation
6048      on signed numbers will overflow must be written carefully to not
6049      actually involve overflow.
6051      This option also allows the compiler to assume strict pointer
6052      semantics: given a pointer to an object, if adding an offset to
6053      that pointer does not produce a pointer to the same object, the
6054      addition is undefined.  This permits the compiler to conclude that
6055      `p + u > p' is always true for a pointer `p' and unsigned integer
6056      `u'.  This assumption is only valid because pointer wraparound is
6057      undefined, as the expression is false if `p + u' overflows using
6058      twos complement arithmetic.
6060      See also the `-fwrapv' option.  Using `-fwrapv' means that integer
6061      signed overflow is fully defined: it wraps.  When `-fwrapv' is
6062      used, there is no difference between `-fstrict-overflow' and
6063      `-fno-strict-overflow' for integers.  With `-fwrapv' certain types
6064      of overflow are permitted.  For example, if the compiler gets an
6065      overflow when doing arithmetic on constants, the overflowed value
6066      can still be used with `-fwrapv', but not otherwise.
6068      The `-fstrict-overflow' option is enabled at levels `-O2', `-O3',
6069      `-Os'.
6071 `-falign-functions'
6072 `-falign-functions=N'
6073      Align the start of functions to the next power-of-two greater than
6074      N, skipping up to N bytes.  For instance, `-falign-functions=32'
6075      aligns functions to the next 32-byte boundary, but
6076      `-falign-functions=24' would align to the next 32-byte boundary
6077      only if this can be done by skipping 23 bytes or less.
6079      `-fno-align-functions' and `-falign-functions=1' are equivalent
6080      and mean that functions will not be aligned.
6082      Some assemblers only support this flag when N is a power of two;
6083      in that case, it is rounded up.
6085      If N is not specified or is zero, use a machine-dependent default.
6087      Enabled at levels `-O2', `-O3'.
6089 `-falign-labels'
6090 `-falign-labels=N'
6091      Align all branch targets to a power-of-two boundary, skipping up to
6092      N bytes like `-falign-functions'.  This option can easily make
6093      code slower, because it must insert dummy operations for when the
6094      branch target is reached in the usual flow of the code.
6096      `-fno-align-labels' and `-falign-labels=1' are equivalent and mean
6097      that labels will not be aligned.
6099      If `-falign-loops' or `-falign-jumps' are applicable and are
6100      greater than this value, then their values are used instead.
6102      If N is not specified or is zero, use a machine-dependent default
6103      which is very likely to be `1', meaning no alignment.
6105      Enabled at levels `-O2', `-O3'.
6107 `-falign-loops'
6108 `-falign-loops=N'
6109      Align loops to a power-of-two boundary, skipping up to N bytes
6110      like `-falign-functions'.  The hope is that the loop will be
6111      executed many times, which will make up for any execution of the
6112      dummy operations.
6114      `-fno-align-loops' and `-falign-loops=1' are equivalent and mean
6115      that loops will not be aligned.
6117      If N is not specified or is zero, use a machine-dependent default.
6119      Enabled at levels `-O2', `-O3'.
6121 `-falign-jumps'
6122 `-falign-jumps=N'
6123      Align branch targets to a power-of-two boundary, for branch targets
6124      where the targets can only be reached by jumping, skipping up to N
6125      bytes like `-falign-functions'.  In this case, no dummy operations
6126      need be executed.
6128      `-fno-align-jumps' and `-falign-jumps=1' are equivalent and mean
6129      that loops will not be aligned.
6131      If N is not specified or is zero, use a machine-dependent default.
6133      Enabled at levels `-O2', `-O3'.
6135 `-funit-at-a-time'
6136      This option is left for compatibility reasons. `-funit-at-a-time'
6137      has no effect, while `-fno-unit-at-a-time' implies
6138      `-fno-toplevel-reorder' and `-fno-section-anchors'.
6140      Enabled by default.
6142 `-fno-toplevel-reorder'
6143      Do not reorder top-level functions, variables, and `asm'
6144      statements.  Output them in the same order that they appear in the
6145      input file.  When this option is used, unreferenced static
6146      variables will not be removed.  This option is intended to support
6147      existing code which relies on a particular ordering.  For new
6148      code, it is better to use attributes.
6150      Enabled at level `-O0'.  When disabled explicitly, it also imply
6151      `-fno-section-anchors' that is otherwise enabled at `-O0' on some
6152      targets.
6154 `-fweb'
6155      Constructs webs as commonly used for register allocation purposes
6156      and assign each web individual pseudo register.  This allows the
6157      register allocation pass to operate on pseudos directly, but also
6158      strengthens several other optimization passes, such as CSE, loop
6159      optimizer and trivial dead code remover.  It can, however, make
6160      debugging impossible, since variables will no longer stay in a
6161      "home register".
6163      Enabled by default with `-funroll-loops'.
6165 `-fwhole-program'
6166      Assume that the current compilation unit represents whole program
6167      being compiled.  All public functions and variables with the
6168      exception of `main' and those merged by attribute
6169      `externally_visible' become static functions and in a affect gets
6170      more aggressively optimized by interprocedural optimizers.  While
6171      this option is equivalent to proper use of `static' keyword for
6172      programs consisting of single file, in combination with option
6173      `--combine' this flag can be used to compile most of smaller scale
6174      C programs since the functions and variables become local for the
6175      whole combined compilation unit, not for the single source file
6176      itself.
6178      This option is not supported for Fortran programs.
6180 `-fcprop-registers'
6181      After register allocation and post-register allocation instruction
6182      splitting, we perform a copy-propagation pass to try to reduce
6183      scheduling dependencies and occasionally eliminate the copy.
6185      Enabled at levels `-O', `-O2', `-O3', `-Os'.
6187 `-fprofile-correction'
6188      Profiles collected using an instrumented binary for multi-threaded
6189      programs may be inconsistent due to missed counter updates. When
6190      this option is specified, GCC will use heuristics to correct or
6191      smooth out such inconsistencies. By default, GCC will emit an
6192      error message when an inconsistent profile is detected.
6194 `-fprofile-dir=PATH'
6195      Set the directory to search the profile data files in to PATH.
6196      This option affects only the profile data generated by
6197      `-fprofile-generate', `-ftest-coverage', `-fprofile-arcs' and used
6198      by `-fprofile-use' and `-fbranch-probabilities' and its related
6199      options.  By default, GCC will use the current directory as PATH
6200      thus the profile data file will appear in the same directory as
6201      the object file.
6203 `-fprofile-generate'
6204 `-fprofile-generate=PATH'
6205      Enable options usually used for instrumenting application to
6206      produce profile useful for later recompilation with profile
6207      feedback based optimization.  You must use `-fprofile-generate'
6208      both when compiling and when linking your program.
6210      The following options are enabled: `-fprofile-arcs',
6211      `-fprofile-values', `-fvpt'.
6213      If PATH is specified, GCC will look at the PATH to find the
6214      profile feedback data files. See `-fprofile-dir'.
6216 `-fprofile-use'
6217 `-fprofile-use=PATH'
6218      Enable profile feedback directed optimizations, and optimizations
6219      generally profitable only with profile feedback available.
6221      The following options are enabled: `-fbranch-probabilities',
6222      `-fvpt', `-funroll-loops', `-fpeel-loops', `-ftracer'
6224      By default, GCC emits an error message if the feedback profiles do
6225      not match the source code.  This error can be turned into a
6226      warning by using `-Wcoverage-mismatch'.  Note this may result in
6227      poorly optimized code.
6229      If PATH is specified, GCC will look at the PATH to find the
6230      profile feedback data files. See `-fprofile-dir'.
6232  The following options control compiler behavior regarding floating
6233 point arithmetic.  These options trade off between speed and
6234 correctness.  All must be specifically enabled.
6236 `-ffloat-store'
6237      Do not store floating point variables in registers, and inhibit
6238      other options that might change whether a floating point value is
6239      taken from a register or memory.
6241      This option prevents undesirable excess precision on machines such
6242      as the 68000 where the floating registers (of the 68881) keep more
6243      precision than a `double' is supposed to have.  Similarly for the
6244      x86 architecture.  For most programs, the excess precision does
6245      only good, but a few programs rely on the precise definition of
6246      IEEE floating point.  Use `-ffloat-store' for such programs, after
6247      modifying them to store all pertinent intermediate computations
6248      into variables.
6250 `-ffast-math'
6251      Sets `-fno-math-errno', `-funsafe-math-optimizations',
6252      `-ffinite-math-only', `-fno-rounding-math', `-fno-signaling-nans'
6253      and `-fcx-limited-range'.
6255      This option causes the preprocessor macro `__FAST_MATH__' to be
6256      defined.
6258      This option is not turned on by any `-O' option since it can
6259      result in incorrect output for programs which depend on an exact
6260      implementation of IEEE or ISO rules/specifications for math
6261      functions. It may, however, yield faster code for programs that do
6262      not require the guarantees of these specifications.
6264 `-fno-math-errno'
6265      Do not set ERRNO after calling math functions that are executed
6266      with a single instruction, e.g., sqrt.  A program that relies on
6267      IEEE exceptions for math error handling may want to use this flag
6268      for speed while maintaining IEEE arithmetic compatibility.
6270      This option is not turned on by any `-O' option since it can
6271      result in incorrect output for programs which depend on an exact
6272      implementation of IEEE or ISO rules/specifications for math
6273      functions. It may, however, yield faster code for programs that do
6274      not require the guarantees of these specifications.
6276      The default is `-fmath-errno'.
6278      On Darwin systems, the math library never sets `errno'.  There is
6279      therefore no reason for the compiler to consider the possibility
6280      that it might, and `-fno-math-errno' is the default.
6282 `-funsafe-math-optimizations'
6283      Allow optimizations for floating-point arithmetic that (a) assume
6284      that arguments and results are valid and (b) may violate IEEE or
6285      ANSI standards.  When used at link-time, it may include libraries
6286      or startup files that change the default FPU control word or other
6287      similar optimizations.
6289      This option is not turned on by any `-O' option since it can
6290      result in incorrect output for programs which depend on an exact
6291      implementation of IEEE or ISO rules/specifications for math
6292      functions. It may, however, yield faster code for programs that do
6293      not require the guarantees of these specifications.  Enables
6294      `-fno-signed-zeros', `-fno-trapping-math', `-fassociative-math'
6295      and `-freciprocal-math'.
6297      The default is `-fno-unsafe-math-optimizations'.
6299 `-fassociative-math'
6300      Allow re-association of operands in series of floating-point
6301      operations.  This violates the ISO C and C++ language standard by
6302      possibly changing computation result.  NOTE: re-ordering may
6303      change the sign of zero as well as ignore NaNs and inhibit or
6304      create underflow or overflow (and thus cannot be used on a code
6305      which relies on rounding behavior like `(x + 2**52) - 2**52)'.
6306      May also reorder floating-point comparisons and thus may not be
6307      used when ordered comparisons are required.  This option requires
6308      that both `-fno-signed-zeros' and `-fno-trapping-math' be in
6309      effect.  Moreover, it doesn't make much sense with
6310      `-frounding-math'.
6312      The default is `-fno-associative-math'.
6314 `-freciprocal-math'
6315      Allow the reciprocal of a value to be used instead of dividing by
6316      the value if this enables optimizations.  For example `x / y' can
6317      be replaced with `x * (1/y)' which is useful if `(1/y)' is subject
6318      to common subexpression elimination.  Note that this loses
6319      precision and increases the number of flops operating on the value.
6321      The default is `-fno-reciprocal-math'.
6323 `-ffinite-math-only'
6324      Allow optimizations for floating-point arithmetic that assume that
6325      arguments and results are not NaNs or +-Infs.
6327      This option is not turned on by any `-O' option since it can
6328      result in incorrect output for programs which depend on an exact
6329      implementation of IEEE or ISO rules/specifications for math
6330      functions. It may, however, yield faster code for programs that do
6331      not require the guarantees of these specifications.
6333      The default is `-fno-finite-math-only'.
6335 `-fno-signed-zeros'
6336      Allow optimizations for floating point arithmetic that ignore the
6337      signedness of zero.  IEEE arithmetic specifies the behavior of
6338      distinct +0.0 and -0.0 values, which then prohibits simplification
6339      of expressions such as x+0.0 or 0.0*x (even with
6340      `-ffinite-math-only').  This option implies that the sign of a
6341      zero result isn't significant.
6343      The default is `-fsigned-zeros'.
6345 `-fno-trapping-math'
6346      Compile code assuming that floating-point operations cannot
6347      generate user-visible traps.  These traps include division by
6348      zero, overflow, underflow, inexact result and invalid operation.
6349      This option requires that `-fno-signaling-nans' be in effect.
6350      Setting this option may allow faster code if one relies on
6351      "non-stop" IEEE arithmetic, for example.
6353      This option should never be turned on by any `-O' option since it
6354      can result in incorrect output for programs which depend on an
6355      exact implementation of IEEE or ISO rules/specifications for math
6356      functions.
6358      The default is `-ftrapping-math'.
6360 `-frounding-math'
6361      Disable transformations and optimizations that assume default
6362      floating point rounding behavior.  This is round-to-zero for all
6363      floating point to integer conversions, and round-to-nearest for
6364      all other arithmetic truncations.  This option should be specified
6365      for programs that change the FP rounding mode dynamically, or that
6366      may be executed with a non-default rounding mode.  This option
6367      disables constant folding of floating point expressions at
6368      compile-time (which may be affected by rounding mode) and
6369      arithmetic transformations that are unsafe in the presence of
6370      sign-dependent rounding modes.
6372      The default is `-fno-rounding-math'.
6374      This option is experimental and does not currently guarantee to
6375      disable all GCC optimizations that are affected by rounding mode.
6376      Future versions of GCC may provide finer control of this setting
6377      using C99's `FENV_ACCESS' pragma.  This command line option will
6378      be used to specify the default state for `FENV_ACCESS'.
6380 `-frtl-abstract-sequences'
6381      It is a size optimization method. This option is to find identical
6382      sequences of code, which can be turned into pseudo-procedures  and
6383      then  replace  all  occurrences with  calls to  the  newly created
6384      subroutine. It is kind of an opposite of `-finline-functions'.
6385      This optimization runs at RTL level.
6387 `-fsignaling-nans'
6388      Compile code assuming that IEEE signaling NaNs may generate
6389      user-visible traps during floating-point operations.  Setting this
6390      option disables optimizations that may change the number of
6391      exceptions visible with signaling NaNs.  This option implies
6392      `-ftrapping-math'.
6394      This option causes the preprocessor macro `__SUPPORT_SNAN__' to be
6395      defined.
6397      The default is `-fno-signaling-nans'.
6399      This option is experimental and does not currently guarantee to
6400      disable all GCC optimizations that affect signaling NaN behavior.
6402 `-fsingle-precision-constant'
6403      Treat floating point constant as single precision constant instead
6404      of implicitly converting it to double precision constant.
6406 `-fcx-limited-range'
6407      When enabled, this option states that a range reduction step is not
6408      needed when performing complex division.  Also, there is no
6409      checking whether the result of a complex multiplication or
6410      division is `NaN + I*NaN', with an attempt to rescue the situation
6411      in that case.  The default is `-fno-cx-limited-range', but is
6412      enabled by `-ffast-math'.
6414      This option controls the default setting of the ISO C99
6415      `CX_LIMITED_RANGE' pragma.  Nevertheless, the option applies to
6416      all languages.
6418 `-fcx-fortran-rules'
6419      Complex multiplication and division follow Fortran rules.  Range
6420      reduction is done as part of complex division, but there is no
6421      checking whether the result of a complex multiplication or
6422      division is `NaN + I*NaN', with an attempt to rescue the situation
6423      in that case.
6425      The default is `-fno-cx-fortran-rules'.
6428  The following options control optimizations that may improve
6429 performance, but are not enabled by any `-O' options.  This section
6430 includes experimental options that may produce broken code.
6432 `-fbranch-probabilities'
6433      After running a program compiled with `-fprofile-arcs' (*note
6434      Options for Debugging Your Program or `gcc': Debugging Options.),
6435      you can compile it a second time using `-fbranch-probabilities',
6436      to improve optimizations based on the number of times each branch
6437      was taken.  When the program compiled with `-fprofile-arcs' exits
6438      it saves arc execution counts to a file called `SOURCENAME.gcda'
6439      for each source file.  The information in this data file is very
6440      dependent on the structure of the generated code, so you must use
6441      the same source code and the same optimization options for both
6442      compilations.
6444      With `-fbranch-probabilities', GCC puts a `REG_BR_PROB' note on
6445      each `JUMP_INSN' and `CALL_INSN'.  These can be used to improve
6446      optimization.  Currently, they are only used in one place: in
6447      `reorg.c', instead of guessing which path a branch is mostly to
6448      take, the `REG_BR_PROB' values are used to exactly determine which
6449      path is taken more often.
6451 `-fprofile-values'
6452      If combined with `-fprofile-arcs', it adds code so that some data
6453      about values of expressions in the program is gathered.
6455      With `-fbranch-probabilities', it reads back the data gathered
6456      from profiling values of expressions and adds `REG_VALUE_PROFILE'
6457      notes to instructions for their later usage in optimizations.
6459      Enabled with `-fprofile-generate' and `-fprofile-use'.
6461 `-fvpt'
6462      If combined with `-fprofile-arcs', it instructs the compiler to add
6463      a code to gather information about values of expressions.
6465      With `-fbranch-probabilities', it reads back the data gathered and
6466      actually performs the optimizations based on them.  Currently the
6467      optimizations include specialization of division operation using
6468      the knowledge about the value of the denominator.
6470 `-frename-registers'
6471      Attempt to avoid false dependencies in scheduled code by making use
6472      of registers left over after register allocation.  This
6473      optimization will most benefit processors with lots of registers.
6474      Depending on the debug information format adopted by the target,
6475      however, it can make debugging impossible, since variables will no
6476      longer stay in a "home register".
6478      Enabled by default with `-funroll-loops'.
6480 `-ftracer'
6481      Perform tail duplication to enlarge superblock size.  This
6482      transformation simplifies the control flow of the function
6483      allowing other optimizations to do better job.
6485      Enabled with `-fprofile-use'.
6487 `-funroll-loops'
6488      Unroll loops whose number of iterations can be determined at
6489      compile time or upon entry to the loop.  `-funroll-loops' implies
6490      `-frerun-cse-after-loop', `-fweb' and `-frename-registers'.  It
6491      also turns on complete loop peeling (i.e. complete removal of
6492      loops with small constant number of iterations).  This option
6493      makes code larger, and may or may not make it run faster.
6495      Enabled with `-fprofile-use'.
6497 `-funroll-all-loops'
6498      Unroll all loops, even if their number of iterations is uncertain
6499      when the loop is entered.  This usually makes programs run more
6500      slowly.  `-funroll-all-loops' implies the same options as
6501      `-funroll-loops'.
6503 `-fpeel-loops'
6504      Peels the loops for that there is enough information that they do
6505      not roll much (from profile feedback).  It also turns on complete
6506      loop peeling (i.e. complete removal of loops with small constant
6507      number of iterations).
6509      Enabled with `-fprofile-use'.
6511 `-fmove-loop-invariants'
6512      Enables the loop invariant motion pass in the RTL loop optimizer.
6513      Enabled at level `-O1'
6515 `-funswitch-loops'
6516      Move branches with loop invariant conditions out of the loop, with
6517      duplicates of the loop on both branches (modified according to
6518      result of the condition).
6520 `-ffunction-sections'
6521 `-fdata-sections'
6522      Place each function or data item into its own section in the output
6523      file if the target supports arbitrary sections.  The name of the
6524      function or the name of the data item determines the section's name
6525      in the output file.
6527      Use these options on systems where the linker can perform
6528      optimizations to improve locality of reference in the instruction
6529      space.  Most systems using the ELF object format and SPARC
6530      processors running Solaris 2 have linkers with such optimizations.
6531      AIX may have these optimizations in the future.
6533      Only use these options when there are significant benefits from
6534      doing so.  When you specify these options, the assembler and
6535      linker will create larger object and executable files and will
6536      also be slower.  You will not be able to use `gprof' on all
6537      systems if you specify this option and you may have problems with
6538      debugging if you specify both this option and `-g'.
6540 `-fbranch-target-load-optimize'
6541      Perform branch target register load optimization before prologue /
6542      epilogue threading.  The use of target registers can typically be
6543      exposed only during reload, thus hoisting loads out of loops and
6544      doing inter-block scheduling needs a separate optimization pass.
6546 `-fbranch-target-load-optimize2'
6547      Perform branch target register load optimization after prologue /
6548      epilogue threading.
6550 `-fbtr-bb-exclusive'
6551      When performing branch target register load optimization, don't
6552      reuse branch target registers in within any basic block.
6554 `-fstack-protector'
6555      Emit extra code to check for buffer overflows, such as stack
6556      smashing attacks.  This is done by adding a guard variable to
6557      functions with vulnerable objects.  This includes functions that
6558      call alloca, and functions with buffers larger than 8 bytes.  The
6559      guards are initialized when a function is entered and then checked
6560      when the function exits.  If a guard check fails, an error message
6561      is printed and the program exits.
6563 `-fstack-protector-all'
6564      Like `-fstack-protector' except that all functions are protected.
6566 `-fsection-anchors'
6567      Try to reduce the number of symbolic address calculations by using
6568      shared "anchor" symbols to address nearby objects.  This
6569      transformation can help to reduce the number of GOT entries and
6570      GOT accesses on some targets.
6572      For example, the implementation of the following function `foo':
6574           static int a, b, c;
6575           int foo (void) { return a + b + c; }
6577      would usually calculate the addresses of all three variables, but
6578      if you compile it with `-fsection-anchors', it will access the
6579      variables from a common anchor point instead.  The effect is
6580      similar to the following pseudocode (which isn't valid C):
6582           int foo (void)
6583           {
6584             register int *xr = &x;
6585             return xr[&a - &x] + xr[&b - &x] + xr[&c - &x];
6586           }
6588      Not all targets support this option.
6590 `--param NAME=VALUE'
6591      In some places, GCC uses various constants to control the amount of
6592      optimization that is done.  For example, GCC will not inline
6593      functions that contain more that a certain number of instructions.
6594      You can control some of these constants on the command-line using
6595      the `--param' option.
6597      The names of specific parameters, and the meaning of the values,
6598      are tied to the internals of the compiler, and are subject to
6599      change without notice in future releases.
6601      In each case, the VALUE is an integer.  The allowable choices for
6602      NAME are given in the following table:
6604     `sra-max-structure-size'
6605           The maximum structure size, in bytes, at which the scalar
6606           replacement of aggregates (SRA) optimization will perform
6607           block copies.  The default value, 0, implies that GCC will
6608           select the most appropriate size itself.
6610     `sra-field-structure-ratio'
6611           The threshold ratio (as a percentage) between instantiated
6612           fields and the complete structure size.  We say that if the
6613           ratio of the number of bytes in instantiated fields to the
6614           number of bytes in the complete structure exceeds this
6615           parameter, then block copies are not used.  The default is 75.
6617     `struct-reorg-cold-struct-ratio'
6618           The threshold ratio (as a percentage) between a structure
6619           frequency and the frequency of the hottest structure in the
6620           program.  This parameter is used by struct-reorg optimization
6621           enabled by `-fipa-struct-reorg'.  We say that if the ratio of
6622           a structure frequency, calculated by profiling, to the
6623           hottest structure frequency in the program is less than this
6624           parameter, then structure reorganization is not applied to
6625           this structure.  The default is 10.
6627     `predictable-branch-cost-outcome'
6628           When branch is predicted to be taken with probability lower
6629           than this threshold (in percent), then it is considered well
6630           predictable. The default is 10.
6632     `max-crossjump-edges'
6633           The maximum number of incoming edges to consider for
6634           crossjumping.  The algorithm used by `-fcrossjumping' is
6635           O(N^2) in the number of edges incoming to each block.
6636           Increasing values mean more aggressive optimization, making
6637           the compile time increase with probably small improvement in
6638           executable size.
6640     `min-crossjump-insns'
6641           The minimum number of instructions which must be matched at
6642           the end of two blocks before crossjumping will be performed
6643           on them.  This value is ignored in the case where all
6644           instructions in the block being crossjumped from are matched.
6645           The default value is 5.
6647     `max-grow-copy-bb-insns'
6648           The maximum code size expansion factor when copying basic
6649           blocks instead of jumping.  The expansion is relative to a
6650           jump instruction.  The default value is 8.
6652     `max-goto-duplication-insns'
6653           The maximum number of instructions to duplicate to a block
6654           that jumps to a computed goto.  To avoid O(N^2) behavior in a
6655           number of passes, GCC factors computed gotos early in the
6656           compilation process, and unfactors them as late as possible.
6657           Only computed jumps at the end of a basic blocks with no more
6658           than max-goto-duplication-insns are unfactored.  The default
6659           value is 8.
6661     `max-delay-slot-insn-search'
6662           The maximum number of instructions to consider when looking
6663           for an instruction to fill a delay slot.  If more than this
6664           arbitrary number of instructions is searched, the time
6665           savings from filling the delay slot will be minimal so stop
6666           searching.  Increasing values mean more aggressive
6667           optimization, making the compile time increase with probably
6668           small improvement in executable run time.
6670     `max-delay-slot-live-search'
6671           When trying to fill delay slots, the maximum number of
6672           instructions to consider when searching for a block with
6673           valid live register information.  Increasing this arbitrarily
6674           chosen value means more aggressive optimization, increasing
6675           the compile time.  This parameter should be removed when the
6676           delay slot code is rewritten to maintain the control-flow
6677           graph.
6679     `max-gcse-memory'
6680           The approximate maximum amount of memory that will be
6681           allocated in order to perform the global common subexpression
6682           elimination optimization.  If more memory than specified is
6683           required, the optimization will not be done.
6685     `max-gcse-passes'
6686           The maximum number of passes of GCSE to run.  The default is
6687           1.
6689     `max-pending-list-length'
6690           The maximum number of pending dependencies scheduling will
6691           allow before flushing the current state and starting over.
6692           Large functions with few branches or calls can create
6693           excessively large lists which needlessly consume memory and
6694           resources.
6696     `max-inline-insns-single'
6697           Several parameters control the tree inliner used in gcc.
6698           This number sets the maximum number of instructions (counted
6699           in GCC's internal representation) in a single function that
6700           the tree inliner will consider for inlining.  This only
6701           affects functions declared inline and methods implemented in
6702           a class declaration (C++).  The default value is 450.
6704     `max-inline-insns-auto'
6705           When you use `-finline-functions' (included in `-O3'), a lot
6706           of functions that would otherwise not be considered for
6707           inlining by the compiler will be investigated.  To those
6708           functions, a different (more restrictive) limit compared to
6709           functions declared inline can be applied.  The default value
6710           is 90.
6712     `large-function-insns'
6713           The limit specifying really large functions.  For functions
6714           larger than this limit after inlining, inlining is
6715           constrained by `--param large-function-growth'.  This
6716           parameter is useful primarily to avoid extreme compilation
6717           time caused by non-linear algorithms used by the backend.
6718           The default value is 2700.
6720     `large-function-growth'
6721           Specifies maximal growth of large function caused by inlining
6722           in percents.  The default value is 100 which limits large
6723           function growth to 2.0 times the original size.
6725     `large-unit-insns'
6726           The limit specifying large translation unit.  Growth caused
6727           by inlining of units larger than this limit is limited by
6728           `--param inline-unit-growth'.  For small units this might be
6729           too tight (consider unit consisting of function A that is
6730           inline and B that just calls A three time.  If B is small
6731           relative to A, the growth of unit is 300\% and yet such
6732           inlining is very sane.  For very large units consisting of
6733           small inlineable functions however the overall unit growth
6734           limit is needed to avoid exponential explosion of code size.
6735           Thus for smaller units, the size is increased to `--param
6736           large-unit-insns' before applying `--param
6737           inline-unit-growth'.  The default is 10000
6739     `inline-unit-growth'
6740           Specifies maximal overall growth of the compilation unit
6741           caused by inlining.  The default value is 30 which limits
6742           unit growth to 1.3 times the original size.
6744     `ipcp-unit-growth'
6745           Specifies maximal overall growth of the compilation unit
6746           caused by interprocedural constant propagation.  The default
6747           value is 10 which limits unit growth to 1.1 times the
6748           original size.
6750     `large-stack-frame'
6751           The limit specifying large stack frames.  While inlining the
6752           algorithm is trying to not grow past this limit too much.
6753           Default value is 256 bytes.
6755     `large-stack-frame-growth'
6756           Specifies maximal growth of large stack frames caused by
6757           inlining in percents.  The default value is 1000 which limits
6758           large stack frame growth to 11 times the original size.
6760     `max-inline-insns-recursive'
6761     `max-inline-insns-recursive-auto'
6762           Specifies maximum number of instructions out-of-line copy of
6763           self recursive inline function can grow into by performing
6764           recursive inlining.
6766           For functions declared inline `--param
6767           max-inline-insns-recursive' is taken into account.  For
6768           function not declared inline, recursive inlining happens only
6769           when `-finline-functions' (included in `-O3') is enabled and
6770           `--param max-inline-insns-recursive-auto' is used.  The
6771           default value is 450.
6773     `max-inline-recursive-depth'
6774     `max-inline-recursive-depth-auto'
6775           Specifies maximum recursion depth used by the recursive
6776           inlining.
6778           For functions declared inline `--param
6779           max-inline-recursive-depth' is taken into account.  For
6780           function not declared inline, recursive inlining happens only
6781           when `-finline-functions' (included in `-O3') is enabled and
6782           `--param max-inline-recursive-depth-auto' is used.  The
6783           default value is 8.
6785     `min-inline-recursive-probability'
6786           Recursive inlining is profitable only for function having
6787           deep recursion in average and can hurt for function having
6788           little recursion depth by increasing the prologue size or
6789           complexity of function body to other optimizers.
6791           When profile feedback is available (see `-fprofile-generate')
6792           the actual recursion depth can be guessed from probability
6793           that function will recurse via given call expression.  This
6794           parameter limits inlining only to call expression whose
6795           probability exceeds given threshold (in percents).  The
6796           default value is 10.
6798     `inline-call-cost'
6799           Specify cost of call instruction relative to simple
6800           arithmetics operations (having cost of 1).  Increasing this
6801           cost disqualifies inlining of non-leaf functions and at the
6802           same time increases size of leaf function that is believed to
6803           reduce function size by being inlined.  In effect it
6804           increases amount of inlining for code having large
6805           abstraction penalty (many functions that just pass the
6806           arguments to other functions) and decrease inlining for code
6807           with low abstraction penalty.  The default value is 12.
6809     `min-vect-loop-bound'
6810           The minimum number of iterations under which a loop will not
6811           get vectorized when `-ftree-vectorize' is used.  The number
6812           of iterations after vectorization needs to be greater than
6813           the value specified by this option to allow vectorization.
6814           The default value is 0.
6816     `max-unrolled-insns'
6817           The maximum number of instructions that a loop should have if
6818           that loop is unrolled, and if the loop is unrolled, it
6819           determines how many times the loop code is unrolled.
6821     `max-average-unrolled-insns'
6822           The maximum number of instructions biased by probabilities of
6823           their execution that a loop should have if that loop is
6824           unrolled, and if the loop is unrolled, it determines how many
6825           times the loop code is unrolled.
6827     `max-unroll-times'
6828           The maximum number of unrollings of a single loop.
6830     `max-peeled-insns'
6831           The maximum number of instructions that a loop should have if
6832           that loop is peeled, and if the loop is peeled, it determines
6833           how many times the loop code is peeled.
6835     `max-peel-times'
6836           The maximum number of peelings of a single loop.
6838     `max-completely-peeled-insns'
6839           The maximum number of insns of a completely peeled loop.
6841     `max-completely-peel-times'
6842           The maximum number of iterations of a loop to be suitable for
6843           complete peeling.
6845     `max-unswitch-insns'
6846           The maximum number of insns of an unswitched loop.
6848     `max-unswitch-level'
6849           The maximum number of branches unswitched in a single loop.
6851     `lim-expensive'
6852           The minimum cost of an expensive expression in the loop
6853           invariant motion.
6855     `iv-consider-all-candidates-bound'
6856           Bound on number of candidates for induction variables below
6857           that all candidates are considered for each use in induction
6858           variable optimizations.  Only the most relevant candidates
6859           are considered if there are more candidates, to avoid
6860           quadratic time complexity.
6862     `iv-max-considered-uses'
6863           The induction variable optimizations give up on loops that
6864           contain more induction variable uses.
6866     `iv-always-prune-cand-set-bound'
6867           If number of candidates in the set is smaller than this value,
6868           we always try to remove unnecessary ivs from the set during
6869           its optimization when a new iv is added to the set.
6871     `scev-max-expr-size'
6872           Bound on size of expressions used in the scalar evolutions
6873           analyzer.  Large expressions slow the analyzer.
6875     `omega-max-vars'
6876           The maximum number of variables in an Omega constraint system.
6877           The default value is 128.
6879     `omega-max-geqs'
6880           The maximum number of inequalities in an Omega constraint
6881           system.  The default value is 256.
6883     `omega-max-eqs'
6884           The maximum number of equalities in an Omega constraint
6885           system.  The default value is 128.
6887     `omega-max-wild-cards'
6888           The maximum number of wildcard variables that the Omega
6889           solver will be able to insert.  The default value is 18.
6891     `omega-hash-table-size'
6892           The size of the hash table in the Omega solver.  The default
6893           value is 550.
6895     `omega-max-keys'
6896           The maximal number of keys used by the Omega solver.  The
6897           default value is 500.
6899     `omega-eliminate-redundant-constraints'
6900           When set to 1, use expensive methods to eliminate all
6901           redundant constraints.  The default value is 0.
6903     `vect-max-version-for-alignment-checks'
6904           The maximum number of runtime checks that can be performed
6905           when doing loop versioning for alignment in the vectorizer.
6906           See option ftree-vect-loop-version for more information.
6908     `vect-max-version-for-alias-checks'
6909           The maximum number of runtime checks that can be performed
6910           when doing loop versioning for alias in the vectorizer.  See
6911           option ftree-vect-loop-version for more information.
6913     `max-iterations-to-track'
6914           The maximum number of iterations of a loop the brute force
6915           algorithm for analysis of # of iterations of the loop tries
6916           to evaluate.
6918     `hot-bb-count-fraction'
6919           Select fraction of the maximal count of repetitions of basic
6920           block in program given basic block needs to have to be
6921           considered hot.
6923     `hot-bb-frequency-fraction'
6924           Select fraction of the maximal frequency of executions of
6925           basic block in function given basic block needs to have to be
6926           considered hot
6928     `max-predicted-iterations'
6929           The maximum number of loop iterations we predict statically.
6930           This is useful in cases where function contain single loop
6931           with known bound and other loop with unknown.  We predict the
6932           known number of iterations correctly, while the unknown
6933           number of iterations average to roughly 10.  This means that
6934           the loop without bounds would appear artificially cold
6935           relative to the other one.
6937     `align-threshold'
6938           Select fraction of the maximal frequency of executions of
6939           basic block in function given basic block will get aligned.
6941     `align-loop-iterations'
6942           A loop expected to iterate at lest the selected number of
6943           iterations will get aligned.
6945     `tracer-dynamic-coverage'
6946     `tracer-dynamic-coverage-feedback'
6947           This value is used to limit superblock formation once the
6948           given percentage of executed instructions is covered.  This
6949           limits unnecessary code size expansion.
6951           The `tracer-dynamic-coverage-feedback' is used only when
6952           profile feedback is available.  The real profiles (as opposed
6953           to statically estimated ones) are much less balanced allowing
6954           the threshold to be larger value.
6956     `tracer-max-code-growth'
6957           Stop tail duplication once code growth has reached given
6958           percentage.  This is rather hokey argument, as most of the
6959           duplicates will be eliminated later in cross jumping, so it
6960           may be set to much higher values than is the desired code
6961           growth.
6963     `tracer-min-branch-ratio'
6964           Stop reverse growth when the reverse probability of best edge
6965           is less than this threshold (in percent).
6967     `tracer-min-branch-ratio'
6968     `tracer-min-branch-ratio-feedback'
6969           Stop forward growth if the best edge do have probability
6970           lower than this threshold.
6972           Similarly to `tracer-dynamic-coverage' two values are
6973           present, one for compilation for profile feedback and one for
6974           compilation without.  The value for compilation with profile
6975           feedback needs to be more conservative (higher) in order to
6976           make tracer effective.
6978     `max-cse-path-length'
6979           Maximum number of basic blocks on path that cse considers.
6980           The default is 10.
6982     `max-cse-insns'
6983           The maximum instructions CSE process before flushing. The
6984           default is 1000.
6986     `max-aliased-vops'
6987           Maximum number of virtual operands per function allowed to
6988           represent aliases before triggering the alias partitioning
6989           heuristic.  Alias partitioning reduces compile times and
6990           memory consumption needed for aliasing at the expense of
6991           precision loss in alias information.  The default value for
6992           this parameter is 100 for -O1, 500 for -O2 and 1000 for -O3.
6994           Notice that if a function contains more memory statements
6995           than the value of this parameter, it is not really possible
6996           to achieve this reduction.  In this case, the compiler will
6997           use the number of memory statements as the value for
6998           `max-aliased-vops'.
7000     `avg-aliased-vops'
7001           Average number of virtual operands per statement allowed to
7002           represent aliases before triggering the alias partitioning
7003           heuristic.  This works in conjunction with
7004           `max-aliased-vops'.  If a function contains more than
7005           `max-aliased-vops' virtual operators, then memory symbols
7006           will be grouped into memory partitions until either the total
7007           number of virtual operators is below `max-aliased-vops' or
7008           the average number of virtual operators per memory statement
7009           is below `avg-aliased-vops'.  The default value for this
7010           parameter is 1 for -O1 and -O2, and 3 for -O3.
7012     `ggc-min-expand'
7013           GCC uses a garbage collector to manage its own memory
7014           allocation.  This parameter specifies the minimum percentage
7015           by which the garbage collector's heap should be allowed to
7016           expand between collections.  Tuning this may improve
7017           compilation speed; it has no effect on code generation.
7019           The default is 30% + 70% * (RAM/1GB) with an upper bound of
7020           100% when RAM >= 1GB.  If `getrlimit' is available, the
7021           notion of "RAM" is the smallest of actual RAM and
7022           `RLIMIT_DATA' or `RLIMIT_AS'.  If GCC is not able to
7023           calculate RAM on a particular platform, the lower bound of
7024           30% is used.  Setting this parameter and `ggc-min-heapsize'
7025           to zero causes a full collection to occur at every
7026           opportunity.  This is extremely slow, but can be useful for
7027           debugging.
7029     `ggc-min-heapsize'
7030           Minimum size of the garbage collector's heap before it begins
7031           bothering to collect garbage.  The first collection occurs
7032           after the heap expands by `ggc-min-expand'% beyond
7033           `ggc-min-heapsize'.  Again, tuning this may improve
7034           compilation speed, and has no effect on code generation.
7036           The default is the smaller of RAM/8, RLIMIT_RSS, or a limit
7037           which tries to ensure that RLIMIT_DATA or RLIMIT_AS are not
7038           exceeded, but with a lower bound of 4096 (four megabytes) and
7039           an upper bound of 131072 (128 megabytes).  If GCC is not able
7040           to calculate RAM on a particular platform, the lower bound is
7041           used.  Setting this parameter very large effectively disables
7042           garbage collection.  Setting this parameter and
7043           `ggc-min-expand' to zero causes a full collection to occur at
7044           every opportunity.
7046     `max-reload-search-insns'
7047           The maximum number of instruction reload should look backward
7048           for equivalent register.  Increasing values mean more
7049           aggressive optimization, making the compile time increase
7050           with probably slightly better performance.  The default value
7051           is 100.
7053     `max-cselib-memory-locations'
7054           The maximum number of memory locations cselib should take
7055           into account.  Increasing values mean more aggressive
7056           optimization, making the compile time increase with probably
7057           slightly better performance.  The default value is 500.
7059     `reorder-blocks-duplicate'
7060     `reorder-blocks-duplicate-feedback'
7061           Used by basic block reordering pass to decide whether to use
7062           unconditional branch or duplicate the code on its
7063           destination.  Code is duplicated when its estimated size is
7064           smaller than this value multiplied by the estimated size of
7065           unconditional jump in the hot spots of the program.
7067           The `reorder-block-duplicate-feedback' is used only when
7068           profile feedback is available and may be set to higher values
7069           than `reorder-block-duplicate' since information about the
7070           hot spots is more accurate.
7072     `max-sched-ready-insns'
7073           The maximum number of instructions ready to be issued the
7074           scheduler should consider at any given time during the first
7075           scheduling pass.  Increasing values mean more thorough
7076           searches, making the compilation time increase with probably
7077           little benefit.  The default value is 100.
7079     `max-sched-region-blocks'
7080           The maximum number of blocks in a region to be considered for
7081           interblock scheduling.  The default value is 10.
7083     `max-pipeline-region-blocks'
7084           The maximum number of blocks in a region to be considered for
7085           pipelining in the selective scheduler.  The default value is
7086           15.
7088     `max-sched-region-insns'
7089           The maximum number of insns in a region to be considered for
7090           interblock scheduling.  The default value is 100.
7092     `max-pipeline-region-insns'
7093           The maximum number of insns in a region to be considered for
7094           pipelining in the selective scheduler.  The default value is
7095           200.
7097     `min-spec-prob'
7098           The minimum probability (in percents) of reaching a source
7099           block for interblock speculative scheduling.  The default
7100           value is 40.
7102     `max-sched-extend-regions-iters'
7103           The maximum number of iterations through CFG to extend
7104           regions.  0 - disable region extension, N - do at most N
7105           iterations.  The default value is 0.
7107     `max-sched-insn-conflict-delay'
7108           The maximum conflict delay for an insn to be considered for
7109           speculative motion.  The default value is 3.
7111     `sched-spec-prob-cutoff'
7112           The minimal probability of speculation success (in percents),
7113           so that speculative insn will be scheduled.  The default
7114           value is 40.
7116     `sched-mem-true-dep-cost'
7117           Minimal distance (in CPU cycles) between store and load
7118           targeting same memory locations.  The default value is 1.
7120     `selsched-max-lookahead'
7121           The maximum size of the lookahead window of selective
7122           scheduling.  It is a depth of search for available
7123           instructions.  The default value is 50.
7125     `selsched-max-sched-times'
7126           The maximum number of times that an instruction will be
7127           scheduled during selective scheduling.  This is the limit on
7128           the number of iterations through which the instruction may be
7129           pipelined.  The default value is 2.
7131     `selsched-max-insns-to-rename'
7132           The maximum number of best instructions in the ready list
7133           that are considered for renaming in the selective scheduler.
7134           The default value is 2.
7136     `max-last-value-rtl'
7137           The maximum size measured as number of RTLs that can be
7138           recorded in an expression in combiner for a pseudo register
7139           as last known value of that register.  The default is 10000.
7141     `integer-share-limit'
7142           Small integer constants can use a shared data structure,
7143           reducing the compiler's memory usage and increasing its
7144           speed.  This sets the maximum value of a shared integer
7145           constant.  The default value is 256.
7147     `min-virtual-mappings'
7148           Specifies the minimum number of virtual mappings in the
7149           incremental SSA updater that should be registered to trigger
7150           the virtual mappings heuristic defined by
7151           virtual-mappings-ratio.  The default value is 100.
7153     `virtual-mappings-ratio'
7154           If the number of virtual mappings is virtual-mappings-ratio
7155           bigger than the number of virtual symbols to be updated, then
7156           the incremental SSA updater switches to a full update for
7157           those symbols.  The default ratio is 3.
7159     `ssp-buffer-size'
7160           The minimum size of buffers (i.e. arrays) that will receive
7161           stack smashing protection when `-fstack-protection' is used.
7163     `max-jump-thread-duplication-stmts'
7164           Maximum number of statements allowed in a block that needs to
7165           be duplicated when threading jumps.
7167     `max-fields-for-field-sensitive'
7168           Maximum number of fields in a structure we will treat in a
7169           field sensitive manner during pointer analysis.  The default
7170           is zero for -O0, and -O1 and 100 for -Os, -O2, and -O3.
7172     `prefetch-latency'
7173           Estimate on average number of instructions that are executed
7174           before prefetch finishes.  The distance we prefetch ahead is
7175           proportional to this constant.  Increasing this number may
7176           also lead to less streams being prefetched (see
7177           `simultaneous-prefetches').
7179     `simultaneous-prefetches'
7180           Maximum number of prefetches that can run at the same time.
7182     `l1-cache-line-size'
7183           The size of cache line in L1 cache, in bytes.
7185     `l1-cache-size'
7186           The size of L1 cache, in kilobytes.
7188     `l2-cache-size'
7189           The size of L2 cache, in kilobytes.
7191     `use-canonical-types'
7192           Whether the compiler should use the "canonical" type system.
7193           By default, this should always be 1, which uses a more
7194           efficient internal mechanism for comparing types in C++ and
7195           Objective-C++.  However, if bugs in the canonical type system
7196           are causing compilation failures, set this value to 0 to
7197           disable canonical types.
7199     `switch-conversion-max-branch-ratio'
7200           Switch initialization conversion will refuse to create arrays
7201           that are bigger than `switch-conversion-max-branch-ratio'
7202           times the number of branches in the switch.
7204     `max-partial-antic-length'
7205           Maximum length of the partial antic set computed during the
7206           tree partial redundancy elimination optimization
7207           (`-ftree-pre') when optimizing at `-O3' and above.  For some
7208           sorts of source code the enhanced partial redundancy
7209           elimination optimization can run away, consuming all of the
7210           memory available on the host machine.  This parameter sets a
7211           limit on the length of the sets that are computed, which
7212           prevents the runaway behavior.  Setting a value of 0 for this
7213           parameter will allow an unlimited set length.
7215     `sccvn-max-scc-size'
7216           Maximum size of a strongly connected component (SCC) during
7217           SCCVN processing.  If this limit is hit, SCCVN processing for
7218           the whole function will not be done and optimizations
7219           depending on it will be disabled.  The default maximum SCC
7220           size is 10000.
7222     `ira-max-loops-num'
7223           IRA uses a regional register allocation by default.  If a
7224           function contains loops more than number given by the
7225           parameter, only at most given number of the most frequently
7226           executed loops will form regions for the regional register
7227           allocation.  The default value of the parameter is 100.
7229     `ira-max-conflict-table-size'
7230           Although IRA uses a sophisticated algorithm of compression
7231           conflict table, the table can be still big for huge
7232           functions.  If the conflict table for a function could be
7233           more than size in MB given by the parameter, the conflict
7234           table is not built and faster, simpler, and lower quality
7235           register allocation algorithm will be used.  The algorithm do
7236           not use pseudo-register conflicts.  The default value of the
7237           parameter is 2000.
7239     `loop-invariant-max-bbs-in-loop'
7240           Loop invariant motion can be very expensive, both in compile
7241           time and in amount of needed compile time memory, with very
7242           large loops.  Loops with more basic blocks than this
7243           parameter won't have loop invariant motion optimization
7244           performed on them.  The default value of the parameter is
7245           1000 for -O1 and 10000 for -O2 and above.
7248 \x1f
7249 File: gcc.info,  Node: Preprocessor Options,  Next: Assembler Options,  Prev: Optimize Options,  Up: Invoking GCC
7251 3.11 Options Controlling the Preprocessor
7252 =========================================
7254 These options control the C preprocessor, which is run on each C source
7255 file before actual compilation.
7257  If you use the `-E' option, nothing is done except preprocessing.
7258 Some of these options make sense only together with `-E' because they
7259 cause the preprocessor output to be unsuitable for actual compilation.
7261      You can use `-Wp,OPTION' to bypass the compiler driver and pass
7262      OPTION directly through to the preprocessor.  If OPTION contains
7263      commas, it is split into multiple options at the commas.  However,
7264      many options are modified, translated or interpreted by the
7265      compiler driver before being passed to the preprocessor, and `-Wp'
7266      forcibly bypasses this phase.  The preprocessor's direct interface
7267      is undocumented and subject to change, so whenever possible you
7268      should avoid using `-Wp' and let the driver handle the options
7269      instead.
7271 `-Xpreprocessor OPTION'
7272      Pass OPTION as an option to the preprocessor.  You can use this to
7273      supply system-specific preprocessor options which GCC does not
7274      know how to recognize.
7276      If you want to pass an option that takes an argument, you must use
7277      `-Xpreprocessor' twice, once for the option and once for the
7278      argument.
7280 `-D NAME'
7281      Predefine NAME as a macro, with definition `1'.
7283 `-D NAME=DEFINITION'
7284      The contents of DEFINITION are tokenized and processed as if they
7285      appeared during translation phase three in a `#define' directive.
7286      In particular, the definition will be truncated by embedded
7287      newline characters.
7289      If you are invoking the preprocessor from a shell or shell-like
7290      program you may need to use the shell's quoting syntax to protect
7291      characters such as spaces that have a meaning in the shell syntax.
7293      If you wish to define a function-like macro on the command line,
7294      write its argument list with surrounding parentheses before the
7295      equals sign (if any).  Parentheses are meaningful to most shells,
7296      so you will need to quote the option.  With `sh' and `csh',
7297      `-D'NAME(ARGS...)=DEFINITION'' works.
7299      `-D' and `-U' options are processed in the order they are given on
7300      the command line.  All `-imacros FILE' and `-include FILE' options
7301      are processed after all `-D' and `-U' options.
7303 `-U NAME'
7304      Cancel any previous definition of NAME, either built in or
7305      provided with a `-D' option.
7307 `-undef'
7308      Do not predefine any system-specific or GCC-specific macros.  The
7309      standard predefined macros remain defined.
7311 `-I DIR'
7312      Add the directory DIR to the list of directories to be searched
7313      for header files.  Directories named by `-I' are searched before
7314      the standard system include directories.  If the directory DIR is
7315      a standard system include directory, the option is ignored to
7316      ensure that the default search order for system directories and
7317      the special treatment of system headers are not defeated .  If DIR
7318      begins with `=', then the `=' will be replaced by the sysroot
7319      prefix; see `--sysroot' and `-isysroot'.
7321 `-o FILE'
7322      Write output to FILE.  This is the same as specifying FILE as the
7323      second non-option argument to `cpp'.  `gcc' has a different
7324      interpretation of a second non-option argument, so you must use
7325      `-o' to specify the output file.
7327 `-Wall'
7328      Turns on all optional warnings which are desirable for normal code.
7329      At present this is `-Wcomment', `-Wtrigraphs', `-Wmultichar' and a
7330      warning about integer promotion causing a change of sign in `#if'
7331      expressions.  Note that many of the preprocessor's warnings are on
7332      by default and have no options to control them.
7334 `-Wcomment'
7335 `-Wcomments'
7336      Warn whenever a comment-start sequence `/*' appears in a `/*'
7337      comment, or whenever a backslash-newline appears in a `//' comment.
7338      (Both forms have the same effect.)
7340 `-Wtrigraphs'
7341      Most trigraphs in comments cannot affect the meaning of the
7342      program.  However, a trigraph that would form an escaped newline
7343      (`??/' at the end of a line) can, by changing where the comment
7344      begins or ends.  Therefore, only trigraphs that would form escaped
7345      newlines produce warnings inside a comment.
7347      This option is implied by `-Wall'.  If `-Wall' is not given, this
7348      option is still enabled unless trigraphs are enabled.  To get
7349      trigraph conversion without warnings, but get the other `-Wall'
7350      warnings, use `-trigraphs -Wall -Wno-trigraphs'.
7352 `-Wtraditional'
7353      Warn about certain constructs that behave differently in
7354      traditional and ISO C.  Also warn about ISO C constructs that have
7355      no traditional C equivalent, and problematic constructs which
7356      should be avoided.
7358 `-Wundef'
7359      Warn whenever an identifier which is not a macro is encountered in
7360      an `#if' directive, outside of `defined'.  Such identifiers are
7361      replaced with zero.
7363 `-Wunused-macros'
7364      Warn about macros defined in the main file that are unused.  A
7365      macro is "used" if it is expanded or tested for existence at least
7366      once.  The preprocessor will also warn if the macro has not been
7367      used at the time it is redefined or undefined.
7369      Built-in macros, macros defined on the command line, and macros
7370      defined in include files are not warned about.
7372      _Note:_ If a macro is actually used, but only used in skipped
7373      conditional blocks, then CPP will report it as unused.  To avoid
7374      the warning in such a case, you might improve the scope of the
7375      macro's definition by, for example, moving it into the first
7376      skipped block.  Alternatively, you could provide a dummy use with
7377      something like:
7379           #if defined the_macro_causing_the_warning
7380           #endif
7382 `-Wendif-labels'
7383      Warn whenever an `#else' or an `#endif' are followed by text.
7384      This usually happens in code of the form
7386           #if FOO
7387           ...
7388           #else FOO
7389           ...
7390           #endif FOO
7392      The second and third `FOO' should be in comments, but often are not
7393      in older programs.  This warning is on by default.
7395 `-Werror'
7396      Make all warnings into hard errors.  Source code which triggers
7397      warnings will be rejected.
7399 `-Wsystem-headers'
7400      Issue warnings for code in system headers.  These are normally
7401      unhelpful in finding bugs in your own code, therefore suppressed.
7402      If you are responsible for the system library, you may want to see
7403      them.
7405 `-w'
7406      Suppress all warnings, including those which GNU CPP issues by
7407      default.
7409 `-pedantic'
7410      Issue all the mandatory diagnostics listed in the C standard.
7411      Some of them are left out by default, since they trigger
7412      frequently on harmless code.
7414 `-pedantic-errors'
7415      Issue all the mandatory diagnostics, and make all mandatory
7416      diagnostics into errors.  This includes mandatory diagnostics that
7417      GCC issues without `-pedantic' but treats as warnings.
7419 `-M'
7420      Instead of outputting the result of preprocessing, output a rule
7421      suitable for `make' describing the dependencies of the main source
7422      file.  The preprocessor outputs one `make' rule containing the
7423      object file name for that source file, a colon, and the names of
7424      all the included files, including those coming from `-include' or
7425      `-imacros' command line options.
7427      Unless specified explicitly (with `-MT' or `-MQ'), the object file
7428      name consists of the name of the source file with any suffix
7429      replaced with object file suffix and with any leading directory
7430      parts removed.  If there are many included files then the rule is
7431      split into several lines using `\'-newline.  The rule has no
7432      commands.
7434      This option does not suppress the preprocessor's debug output,
7435      such as `-dM'.  To avoid mixing such debug output with the
7436      dependency rules you should explicitly specify the dependency
7437      output file with `-MF', or use an environment variable like
7438      `DEPENDENCIES_OUTPUT' (*note Environment Variables::).  Debug
7439      output will still be sent to the regular output stream as normal.
7441      Passing `-M' to the driver implies `-E', and suppresses warnings
7442      with an implicit `-w'.
7444 `-MM'
7445      Like `-M' but do not mention header files that are found in system
7446      header directories, nor header files that are included, directly
7447      or indirectly, from such a header.
7449      This implies that the choice of angle brackets or double quotes in
7450      an `#include' directive does not in itself determine whether that
7451      header will appear in `-MM' dependency output.  This is a slight
7452      change in semantics from GCC versions 3.0 and earlier.
7454 `-MF FILE'
7455      When used with `-M' or `-MM', specifies a file to write the
7456      dependencies to.  If no `-MF' switch is given the preprocessor
7457      sends the rules to the same place it would have sent preprocessed
7458      output.
7460      When used with the driver options `-MD' or `-MMD', `-MF' overrides
7461      the default dependency output file.
7463 `-MG'
7464      In conjunction with an option such as `-M' requesting dependency
7465      generation, `-MG' assumes missing header files are generated files
7466      and adds them to the dependency list without raising an error.
7467      The dependency filename is taken directly from the `#include'
7468      directive without prepending any path.  `-MG' also suppresses
7469      preprocessed output, as a missing header file renders this useless.
7471      This feature is used in automatic updating of makefiles.
7473 `-MP'
7474      This option instructs CPP to add a phony target for each dependency
7475      other than the main file, causing each to depend on nothing.  These
7476      dummy rules work around errors `make' gives if you remove header
7477      files without updating the `Makefile' to match.
7479      This is typical output:
7481           test.o: test.c test.h
7483           test.h:
7485 `-MT TARGET'
7486      Change the target of the rule emitted by dependency generation.  By
7487      default CPP takes the name of the main input file, deletes any
7488      directory components and any file suffix such as `.c', and appends
7489      the platform's usual object suffix.  The result is the target.
7491      An `-MT' option will set the target to be exactly the string you
7492      specify.  If you want multiple targets, you can specify them as a
7493      single argument to `-MT', or use multiple `-MT' options.
7495      For example, `-MT '$(objpfx)foo.o'' might give
7497           $(objpfx)foo.o: foo.c
7499 `-MQ TARGET'
7500      Same as `-MT', but it quotes any characters which are special to
7501      Make.  `-MQ '$(objpfx)foo.o'' gives
7503           $$(objpfx)foo.o: foo.c
7505      The default target is automatically quoted, as if it were given
7506      with `-MQ'.
7508 `-MD'
7509      `-MD' is equivalent to `-M -MF FILE', except that `-E' is not
7510      implied.  The driver determines FILE based on whether an `-o'
7511      option is given.  If it is, the driver uses its argument but with
7512      a suffix of `.d', otherwise it takes the name of the input file,
7513      removes any directory components and suffix, and applies a `.d'
7514      suffix.
7516      If `-MD' is used in conjunction with `-E', any `-o' switch is
7517      understood to specify the dependency output file (*note -MF:
7518      dashMF.), but if used without `-E', each `-o' is understood to
7519      specify a target object file.
7521      Since `-E' is not implied, `-MD' can be used to generate a
7522      dependency output file as a side-effect of the compilation process.
7524 `-MMD'
7525      Like `-MD' except mention only user header files, not system
7526      header files.
7528 `-fpch-deps'
7529      When using precompiled headers (*note Precompiled Headers::), this
7530      flag will cause the dependency-output flags to also list the files
7531      from the precompiled header's dependencies.  If not specified only
7532      the precompiled header would be listed and not the files that were
7533      used to create it because those files are not consulted when a
7534      precompiled header is used.
7536 `-fpch-preprocess'
7537      This option allows use of a precompiled header (*note Precompiled
7538      Headers::) together with `-E'.  It inserts a special `#pragma',
7539      `#pragma GCC pch_preprocess "<filename>"' in the output to mark
7540      the place where the precompiled header was found, and its
7541      filename.  When `-fpreprocessed' is in use, GCC recognizes this
7542      `#pragma' and loads the PCH.
7544      This option is off by default, because the resulting preprocessed
7545      output is only really suitable as input to GCC.  It is switched on
7546      by `-save-temps'.
7548      You should not write this `#pragma' in your own code, but it is
7549      safe to edit the filename if the PCH file is available in a
7550      different location.  The filename may be absolute or it may be
7551      relative to GCC's current directory.
7553 `-x c'
7554 `-x c++'
7555 `-x objective-c'
7556 `-x assembler-with-cpp'
7557      Specify the source language: C, C++, Objective-C, or assembly.
7558      This has nothing to do with standards conformance or extensions;
7559      it merely selects which base syntax to expect.  If you give none
7560      of these options, cpp will deduce the language from the extension
7561      of the source file: `.c', `.cc', `.m', or `.S'.  Some other common
7562      extensions for C++ and assembly are also recognized.  If cpp does
7563      not recognize the extension, it will treat the file as C; this is
7564      the most generic mode.
7566      _Note:_ Previous versions of cpp accepted a `-lang' option which
7567      selected both the language and the standards conformance level.
7568      This option has been removed, because it conflicts with the `-l'
7569      option.
7571 `-std=STANDARD'
7572 `-ansi'
7573      Specify the standard to which the code should conform.  Currently
7574      CPP knows about C and C++ standards; others may be added in the
7575      future.
7577      STANDARD may be one of:
7578     `iso9899:1990'
7579     `c89'
7580           The ISO C standard from 1990.  `c89' is the customary
7581           shorthand for this version of the standard.
7583           The `-ansi' option is equivalent to `-std=c89'.
7585     `iso9899:199409'
7586           The 1990 C standard, as amended in 1994.
7588     `iso9899:1999'
7589     `c99'
7590     `iso9899:199x'
7591     `c9x'
7592           The revised ISO C standard, published in December 1999.
7593           Before publication, this was known as C9X.
7595     `gnu89'
7596           The 1990 C standard plus GNU extensions.  This is the default.
7598     `gnu99'
7599     `gnu9x'
7600           The 1999 C standard plus GNU extensions.
7602     `c++98'
7603           The 1998 ISO C++ standard plus amendments.
7605     `gnu++98'
7606           The same as `-std=c++98' plus GNU extensions.  This is the
7607           default for C++ code.
7609 `-I-'
7610      Split the include path.  Any directories specified with `-I'
7611      options before `-I-' are searched only for headers requested with
7612      `#include "FILE"'; they are not searched for `#include <FILE>'.
7613      If additional directories are specified with `-I' options after
7614      the `-I-', those directories are searched for all `#include'
7615      directives.
7617      In addition, `-I-' inhibits the use of the directory of the current
7618      file directory as the first search directory for `#include "FILE"'.
7619      This option has been deprecated.
7621 `-nostdinc'
7622      Do not search the standard system directories for header files.
7623      Only the directories you have specified with `-I' options (and the
7624      directory of the current file, if appropriate) are searched.
7626 `-nostdinc++'
7627      Do not search for header files in the C++-specific standard
7628      directories, but do still search the other standard directories.
7629      (This option is used when building the C++ library.)
7631 `-include FILE'
7632      Process FILE as if `#include "file"' appeared as the first line of
7633      the primary source file.  However, the first directory searched
7634      for FILE is the preprocessor's working directory _instead of_ the
7635      directory containing the main source file.  If not found there, it
7636      is searched for in the remainder of the `#include "..."' search
7637      chain as normal.
7639      If multiple `-include' options are given, the files are included
7640      in the order they appear on the command line.
7642 `-imacros FILE'
7643      Exactly like `-include', except that any output produced by
7644      scanning FILE is thrown away.  Macros it defines remain defined.
7645      This allows you to acquire all the macros from a header without
7646      also processing its declarations.
7648      All files specified by `-imacros' are processed before all files
7649      specified by `-include'.
7651 `-idirafter DIR'
7652      Search DIR for header files, but do it _after_ all directories
7653      specified with `-I' and the standard system directories have been
7654      exhausted.  DIR is treated as a system include directory.  If DIR
7655      begins with `=', then the `=' will be replaced by the sysroot
7656      prefix; see `--sysroot' and `-isysroot'.
7658 `-iprefix PREFIX'
7659      Specify PREFIX as the prefix for subsequent `-iwithprefix'
7660      options.  If the prefix represents a directory, you should include
7661      the final `/'.
7663 `-iwithprefix DIR'
7664 `-iwithprefixbefore DIR'
7665      Append DIR to the prefix specified previously with `-iprefix', and
7666      add the resulting directory to the include search path.
7667      `-iwithprefixbefore' puts it in the same place `-I' would;
7668      `-iwithprefix' puts it where `-idirafter' would.
7670 `-isysroot DIR'
7671      This option is like the `--sysroot' option, but applies only to
7672      header files.  See the `--sysroot' option for more information.
7674 `-imultilib DIR'
7675      Use DIR as a subdirectory of the directory containing
7676      target-specific C++ headers.
7678 `-isystem DIR'
7679      Search DIR for header files, after all directories specified by
7680      `-I' but before the standard system directories.  Mark it as a
7681      system directory, so that it gets the same special treatment as is
7682      applied to the standard system directories.  If DIR begins with
7683      `=', then the `=' will be replaced by the sysroot prefix; see
7684      `--sysroot' and `-isysroot'.
7686 `-iquote DIR'
7687      Search DIR only for header files requested with `#include "FILE"';
7688      they are not searched for `#include <FILE>', before all
7689      directories specified by `-I' and before the standard system
7690      directories.  If DIR begins with `=', then the `=' will be replaced
7691      by the sysroot prefix; see `--sysroot' and `-isysroot'.
7693 `-fdirectives-only'
7694      When preprocessing, handle directives, but do not expand macros.
7696      The option's behavior depends on the `-E' and `-fpreprocessed'
7697      options.
7699      With `-E', preprocessing is limited to the handling of directives
7700      such as `#define', `#ifdef', and `#error'.  Other preprocessor
7701      operations, such as macro expansion and trigraph conversion are
7702      not performed.  In addition, the `-dD' option is implicitly
7703      enabled.
7705      With `-fpreprocessed', predefinition of command line and most
7706      builtin macros is disabled.  Macros such as `__LINE__', which are
7707      contextually dependent, are handled normally.  This enables
7708      compilation of files previously preprocessed with `-E
7709      -fdirectives-only'.
7711      With both `-E' and `-fpreprocessed', the rules for
7712      `-fpreprocessed' take precedence.  This enables full preprocessing
7713      of files previously preprocessed with `-E -fdirectives-only'.
7715 `-fdollars-in-identifiers'
7716      Accept `$' in identifiers.
7718 `-fextended-identifiers'
7719      Accept universal character names in identifiers.  This option is
7720      experimental; in a future version of GCC, it will be enabled by
7721      default for C99 and C++.
7723 `-fpreprocessed'
7724      Indicate to the preprocessor that the input file has already been
7725      preprocessed.  This suppresses things like macro expansion,
7726      trigraph conversion, escaped newline splicing, and processing of
7727      most directives.  The preprocessor still recognizes and removes
7728      comments, so that you can pass a file preprocessed with `-C' to
7729      the compiler without problems.  In this mode the integrated
7730      preprocessor is little more than a tokenizer for the front ends.
7732      `-fpreprocessed' is implicit if the input file has one of the
7733      extensions `.i', `.ii' or `.mi'.  These are the extensions that
7734      GCC uses for preprocessed files created by `-save-temps'.
7736 `-ftabstop=WIDTH'
7737      Set the distance between tab stops.  This helps the preprocessor
7738      report correct column numbers in warnings or errors, even if tabs
7739      appear on the line.  If the value is less than 1 or greater than
7740      100, the option is ignored.  The default is 8.
7742 `-fexec-charset=CHARSET'
7743      Set the execution character set, used for string and character
7744      constants.  The default is UTF-8.  CHARSET can be any encoding
7745      supported by the system's `iconv' library routine.
7747 `-fwide-exec-charset=CHARSET'
7748      Set the wide execution character set, used for wide string and
7749      character constants.  The default is UTF-32 or UTF-16, whichever
7750      corresponds to the width of `wchar_t'.  As with `-fexec-charset',
7751      CHARSET can be any encoding supported by the system's `iconv'
7752      library routine; however, you will have problems with encodings
7753      that do not fit exactly in `wchar_t'.
7755 `-finput-charset=CHARSET'
7756      Set the input character set, used for translation from the
7757      character set of the input file to the source character set used
7758      by GCC.  If the locale does not specify, or GCC cannot get this
7759      information from the locale, the default is UTF-8.  This can be
7760      overridden by either the locale or this command line option.
7761      Currently the command line option takes precedence if there's a
7762      conflict.  CHARSET can be any encoding supported by the system's
7763      `iconv' library routine.
7765 `-fworking-directory'
7766      Enable generation of linemarkers in the preprocessor output that
7767      will let the compiler know the current working directory at the
7768      time of preprocessing.  When this option is enabled, the
7769      preprocessor will emit, after the initial linemarker, a second
7770      linemarker with the current working directory followed by two
7771      slashes.  GCC will use this directory, when it's present in the
7772      preprocessed input, as the directory emitted as the current
7773      working directory in some debugging information formats.  This
7774      option is implicitly enabled if debugging information is enabled,
7775      but this can be inhibited with the negated form
7776      `-fno-working-directory'.  If the `-P' flag is present in the
7777      command line, this option has no effect, since no `#line'
7778      directives are emitted whatsoever.
7780 `-fno-show-column'
7781      Do not print column numbers in diagnostics.  This may be necessary
7782      if diagnostics are being scanned by a program that does not
7783      understand the column numbers, such as `dejagnu'.
7785 `-A PREDICATE=ANSWER'
7786      Make an assertion with the predicate PREDICATE and answer ANSWER.
7787      This form is preferred to the older form `-A PREDICATE(ANSWER)',
7788      which is still supported, because it does not use shell special
7789      characters.
7791 `-A -PREDICATE=ANSWER'
7792      Cancel an assertion with the predicate PREDICATE and answer ANSWER.
7794 `-dCHARS'
7795      CHARS is a sequence of one or more of the following characters,
7796      and must not be preceded by a space.  Other characters are
7797      interpreted by the compiler proper, or reserved for future
7798      versions of GCC, and so are silently ignored.  If you specify
7799      characters whose behavior conflicts, the result is undefined.
7801     `M'
7802           Instead of the normal output, generate a list of `#define'
7803           directives for all the macros defined during the execution of
7804           the preprocessor, including predefined macros.  This gives
7805           you a way of finding out what is predefined in your version
7806           of the preprocessor.  Assuming you have no file `foo.h', the
7807           command
7809                touch foo.h; cpp -dM foo.h
7811           will show all the predefined macros.
7813           If you use `-dM' without the `-E' option, `-dM' is
7814           interpreted as a synonym for `-fdump-rtl-mach'.  *Note
7815           Debugging Options: (gcc)Debugging Options.
7817     `D'
7818           Like `M' except in two respects: it does _not_ include the
7819           predefined macros, and it outputs _both_ the `#define'
7820           directives and the result of preprocessing.  Both kinds of
7821           output go to the standard output file.
7823     `N'
7824           Like `D', but emit only the macro names, not their expansions.
7826     `I'
7827           Output `#include' directives in addition to the result of
7828           preprocessing.
7830     `U'
7831           Like `D' except that only macros that are expanded, or whose
7832           definedness is tested in preprocessor directives, are output;
7833           the output is delayed until the use or test of the macro; and
7834           `#undef' directives are also output for macros tested but
7835           undefined at the time.
7837 `-P'
7838      Inhibit generation of linemarkers in the output from the
7839      preprocessor.  This might be useful when running the preprocessor
7840      on something that is not C code, and will be sent to a program
7841      which might be confused by the linemarkers.
7843 `-C'
7844      Do not discard comments.  All comments are passed through to the
7845      output file, except for comments in processed directives, which
7846      are deleted along with the directive.
7848      You should be prepared for side effects when using `-C'; it causes
7849      the preprocessor to treat comments as tokens in their own right.
7850      For example, comments appearing at the start of what would be a
7851      directive line have the effect of turning that line into an
7852      ordinary source line, since the first token on the line is no
7853      longer a `#'.
7855 `-CC'
7856      Do not discard comments, including during macro expansion.  This is
7857      like `-C', except that comments contained within macros are also
7858      passed through to the output file where the macro is expanded.
7860      In addition to the side-effects of the `-C' option, the `-CC'
7861      option causes all C++-style comments inside a macro to be
7862      converted to C-style comments.  This is to prevent later use of
7863      that macro from inadvertently commenting out the remainder of the
7864      source line.
7866      The `-CC' option is generally used to support lint comments.
7868 `-traditional-cpp'
7869      Try to imitate the behavior of old-fashioned C preprocessors, as
7870      opposed to ISO C preprocessors.
7872 `-trigraphs'
7873      Process trigraph sequences.  These are three-character sequences,
7874      all starting with `??', that are defined by ISO C to stand for
7875      single characters.  For example, `??/' stands for `\', so `'??/n''
7876      is a character constant for a newline.  By default, GCC ignores
7877      trigraphs, but in standard-conforming modes it converts them.  See
7878      the `-std' and `-ansi' options.
7880      The nine trigraphs and their replacements are
7882           Trigraph:       ??(  ??)  ??<  ??>  ??=  ??/  ??'  ??!  ??-
7883           Replacement:      [    ]    {    }    #    \    ^    |    ~
7885 `-remap'
7886      Enable special code to work around file systems which only permit
7887      very short file names, such as MS-DOS.
7889 `--help'
7890 `--target-help'
7891      Print text describing all the command line options instead of
7892      preprocessing anything.
7894 `-v'
7895      Verbose mode.  Print out GNU CPP's version number at the beginning
7896      of execution, and report the final form of the include path.
7898 `-H'
7899      Print the name of each header file used, in addition to other
7900      normal activities.  Each name is indented to show how deep in the
7901      `#include' stack it is.  Precompiled header files are also
7902      printed, even if they are found to be invalid; an invalid
7903      precompiled header file is printed with `...x' and a valid one
7904      with `...!' .
7906 `-version'
7907 `--version'
7908      Print out GNU CPP's version number.  With one dash, proceed to
7909      preprocess as normal.  With two dashes, exit immediately.
7911 \x1f
7912 File: gcc.info,  Node: Assembler Options,  Next: Link Options,  Prev: Preprocessor Options,  Up: Invoking GCC
7914 3.12 Passing Options to the Assembler
7915 =====================================
7917 You can pass options to the assembler.
7919 `-Wa,OPTION'
7920      Pass OPTION as an option to the assembler.  If OPTION contains
7921      commas, it is split into multiple options at the commas.
7923 `-Xassembler OPTION'
7924      Pass OPTION as an option to the assembler.  You can use this to
7925      supply system-specific assembler options which GCC does not know
7926      how to recognize.
7928      If you want to pass an option that takes an argument, you must use
7929      `-Xassembler' twice, once for the option and once for the argument.
7932 \x1f
7933 File: gcc.info,  Node: Link Options,  Next: Directory Options,  Prev: Assembler Options,  Up: Invoking GCC
7935 3.13 Options for Linking
7936 ========================
7938 These options come into play when the compiler links object files into
7939 an executable output file.  They are meaningless if the compiler is not
7940 doing a link step.
7942 `OBJECT-FILE-NAME'
7943      A file name that does not end in a special recognized suffix is
7944      considered to name an object file or library.  (Object files are
7945      distinguished from libraries by the linker according to the file
7946      contents.)  If linking is done, these object files are used as
7947      input to the linker.
7949 `-c'
7950 `-S'
7951 `-E'
7952      If any of these options is used, then the linker is not run, and
7953      object file names should not be used as arguments.  *Note Overall
7954      Options::.
7956 `-lLIBRARY'
7957 `-l LIBRARY'
7958      Search the library named LIBRARY when linking.  (The second
7959      alternative with the library as a separate argument is only for
7960      POSIX compliance and is not recommended.)
7962      It makes a difference where in the command you write this option;
7963      the linker searches and processes libraries and object files in
7964      the order they are specified.  Thus, `foo.o -lz bar.o' searches
7965      library `z' after file `foo.o' but before `bar.o'.  If `bar.o'
7966      refers to functions in `z', those functions may not be loaded.
7968      The linker searches a standard list of directories for the library,
7969      which is actually a file named `libLIBRARY.a'.  The linker then
7970      uses this file as if it had been specified precisely by name.
7972      The directories searched include several standard system
7973      directories plus any that you specify with `-L'.
7975      Normally the files found this way are library files--archive files
7976      whose members are object files.  The linker handles an archive
7977      file by scanning through it for members which define symbols that
7978      have so far been referenced but not defined.  But if the file that
7979      is found is an ordinary object file, it is linked in the usual
7980      fashion.  The only difference between using an `-l' option and
7981      specifying a file name is that `-l' surrounds LIBRARY with `lib'
7982      and `.a' and searches several directories.
7984 `-lobjc'
7985      You need this special case of the `-l' option in order to link an
7986      Objective-C or Objective-C++ program.
7988 `-nostartfiles'
7989      Do not use the standard system startup files when linking.  The
7990      standard system libraries are used normally, unless `-nostdlib' or
7991      `-nodefaultlibs' is used.
7993 `-nodefaultlibs'
7994      Do not use the standard system libraries when linking.  Only the
7995      libraries you specify will be passed to the linker.  The standard
7996      startup files are used normally, unless `-nostartfiles' is used.
7997      The compiler may generate calls to `memcmp', `memset', `memcpy'
7998      and `memmove'.  These entries are usually resolved by entries in
7999      libc.  These entry points should be supplied through some other
8000      mechanism when this option is specified.
8002 `-nostdlib'
8003      Do not use the standard system startup files or libraries when
8004      linking.  No startup files and only the libraries you specify will
8005      be passed to the linker.  The compiler may generate calls to
8006      `memcmp', `memset', `memcpy' and `memmove'.  These entries are
8007      usually resolved by entries in libc.  These entry points should be
8008      supplied through some other mechanism when this option is
8009      specified.
8011      One of the standard libraries bypassed by `-nostdlib' and
8012      `-nodefaultlibs' is `libgcc.a', a library of internal subroutines
8013      that GCC uses to overcome shortcomings of particular machines, or
8014      special needs for some languages.  (*Note Interfacing to GCC
8015      Output: (gccint)Interface, for more discussion of `libgcc.a'.)  In
8016      most cases, you need `libgcc.a' even when you want to avoid other
8017      standard libraries.  In other words, when you specify `-nostdlib'
8018      or `-nodefaultlibs' you should usually specify `-lgcc' as well.
8019      This ensures that you have no unresolved references to internal GCC
8020      library subroutines.  (For example, `__main', used to ensure C++
8021      constructors will be called; *note `collect2': (gccint)Collect2.)
8023 `-pie'
8024      Produce a position independent executable on targets which support
8025      it.  For predictable results, you must also specify the same set
8026      of options that were used to generate code (`-fpie', `-fPIE', or
8027      model suboptions) when you specify this option.
8029 `-rdynamic'
8030      Pass the flag `-export-dynamic' to the ELF linker, on targets that
8031      support it. This instructs the linker to add all symbols, not only
8032      used ones, to the dynamic symbol table. This option is needed for
8033      some uses of `dlopen' or to allow obtaining backtraces from within
8034      a program.
8036 `-s'
8037      Remove all symbol table and relocation information from the
8038      executable.
8040 `-static'
8041      On systems that support dynamic linking, this prevents linking
8042      with the shared libraries.  On other systems, this option has no
8043      effect.
8045 `-shared'
8046      Produce a shared object which can then be linked with other
8047      objects to form an executable.  Not all systems support this
8048      option.  For predictable results, you must also specify the same
8049      set of options that were used to generate code (`-fpic', `-fPIC',
8050      or model suboptions) when you specify this option.(1)
8052 `-shared-libgcc'
8053 `-static-libgcc'
8054      On systems that provide `libgcc' as a shared library, these options
8055      force the use of either the shared or static version respectively.
8056      If no shared version of `libgcc' was built when the compiler was
8057      configured, these options have no effect.
8059      There are several situations in which an application should use the
8060      shared `libgcc' instead of the static version.  The most common of
8061      these is when the application wishes to throw and catch exceptions
8062      across different shared libraries.  In that case, each of the
8063      libraries as well as the application itself should use the shared
8064      `libgcc'.
8066      Therefore, the G++ and GCJ drivers automatically add
8067      `-shared-libgcc' whenever you build a shared library or a main
8068      executable, because C++ and Java programs typically use
8069      exceptions, so this is the right thing to do.
8071      If, instead, you use the GCC driver to create shared libraries,
8072      you may find that they will not always be linked with the shared
8073      `libgcc'.  If GCC finds, at its configuration time, that you have
8074      a non-GNU linker or a GNU linker that does not support option
8075      `--eh-frame-hdr', it will link the shared version of `libgcc' into
8076      shared libraries by default.  Otherwise, it will take advantage of
8077      the linker and optimize away the linking with the shared version
8078      of `libgcc', linking with the static version of libgcc by default.
8079      This allows exceptions to propagate through such shared
8080      libraries, without incurring relocation costs at library load time.
8082      However, if a library or main executable is supposed to throw or
8083      catch exceptions, you must link it using the G++ or GCJ driver, as
8084      appropriate for the languages used in the program, or using the
8085      option `-shared-libgcc', such that it is linked with the shared
8086      `libgcc'.
8088 `-symbolic'
8089      Bind references to global symbols when building a shared object.
8090      Warn about any unresolved references (unless overridden by the
8091      link editor option `-Xlinker -z -Xlinker defs').  Only a few
8092      systems support this option.
8094 `-T SCRIPT'
8095      Use SCRIPT as the linker script.  This option is supported by most
8096      systems using the GNU linker.  On some targets, such as bare-board
8097      targets without an operating system, the `-T' option may be
8098      required when linking to avoid references to undefined symbols.
8100 `-Xlinker OPTION'
8101      Pass OPTION as an option to the linker.  You can use this to
8102      supply system-specific linker options which GCC does not know how
8103      to recognize.
8105      If you want to pass an option that takes a separate argument, you
8106      must use `-Xlinker' twice, once for the option and once for the
8107      argument.  For example, to pass `-assert definitions', you must
8108      write `-Xlinker -assert -Xlinker definitions'.  It does not work
8109      to write `-Xlinker "-assert definitions"', because this passes the
8110      entire string as a single argument, which is not what the linker
8111      expects.
8113      When using the GNU linker, it is usually more convenient to pass
8114      arguments to linker options using the `OPTION=VALUE' syntax than
8115      as separate arguments.  For example, you can specify `-Xlinker
8116      -Map=output.map' rather than `-Xlinker -Map -Xlinker output.map'.
8117      Other linkers may not support this syntax for command-line options.
8119 `-Wl,OPTION'
8120      Pass OPTION as an option to the linker.  If OPTION contains
8121      commas, it is split into multiple options at the commas.  You can
8122      use this syntax to pass an argument to the option.  For example,
8123      `-Wl,-Map,output.map' passes `-Map output.map' to the linker.
8124      When using the GNU linker, you can also get the same effect with
8125      `-Wl,-Map=output.map'.
8127 `-u SYMBOL'
8128      Pretend the symbol SYMBOL is undefined, to force linking of
8129      library modules to define it.  You can use `-u' multiple times with
8130      different symbols to force loading of additional library modules.
8132  ---------- Footnotes ----------
8134  (1) On some systems, `gcc -shared' needs to build supplementary stub
8135 code for constructors to work.  On multi-libbed systems, `gcc -shared'
8136 must select the correct support libraries to link against.  Failing to
8137 supply the correct flags may lead to subtle defects.  Supplying them in
8138 cases where they are not necessary is innocuous.
8140 \x1f
8141 File: gcc.info,  Node: Directory Options,  Next: Spec Files,  Prev: Link Options,  Up: Invoking GCC
8143 3.14 Options for Directory Search
8144 =================================
8146 These options specify directories to search for header files, for
8147 libraries and for parts of the compiler:
8149 `-IDIR'
8150      Add the directory DIR to the head of the list of directories to be
8151      searched for header files.  This can be used to override a system
8152      header file, substituting your own version, since these
8153      directories are searched before the system header file
8154      directories.  However, you should not use this option to add
8155      directories that contain vendor-supplied system header files (use
8156      `-isystem' for that).  If you use more than one `-I' option, the
8157      directories are scanned in left-to-right order; the standard
8158      system directories come after.
8160      If a standard system include directory, or a directory specified
8161      with `-isystem', is also specified with `-I', the `-I' option will
8162      be ignored.  The directory will still be searched but as a system
8163      directory at its normal position in the system include chain.
8164      This is to ensure that GCC's procedure to fix buggy system headers
8165      and the ordering for the include_next directive are not
8166      inadvertently changed.  If you really need to change the search
8167      order for system directories, use the `-nostdinc' and/or
8168      `-isystem' options.
8170 `-iquoteDIR'
8171      Add the directory DIR to the head of the list of directories to be
8172      searched for header files only for the case of `#include "FILE"';
8173      they are not searched for `#include <FILE>', otherwise just like
8174      `-I'.
8176 `-LDIR'
8177      Add directory DIR to the list of directories to be searched for
8178      `-l'.
8180 `-BPREFIX'
8181      This option specifies where to find the executables, libraries,
8182      include files, and data files of the compiler itself.
8184      The compiler driver program runs one or more of the subprograms
8185      `cpp', `cc1', `as' and `ld'.  It tries PREFIX as a prefix for each
8186      program it tries to run, both with and without `MACHINE/VERSION/'
8187      (*note Target Options::).
8189      For each subprogram to be run, the compiler driver first tries the
8190      `-B' prefix, if any.  If that name is not found, or if `-B' was
8191      not specified, the driver tries two standard prefixes, which are
8192      `/usr/lib/gcc/' and `/usr/local/lib/gcc/'.  If neither of those
8193      results in a file name that is found, the unmodified program name
8194      is searched for using the directories specified in your `PATH'
8195      environment variable.
8197      The compiler will check to see if the path provided by the `-B'
8198      refers to a directory, and if necessary it will add a directory
8199      separator character at the end of the path.
8201      `-B' prefixes that effectively specify directory names also apply
8202      to libraries in the linker, because the compiler translates these
8203      options into `-L' options for the linker.  They also apply to
8204      includes files in the preprocessor, because the compiler
8205      translates these options into `-isystem' options for the
8206      preprocessor.  In this case, the compiler appends `include' to the
8207      prefix.
8209      The run-time support file `libgcc.a' can also be searched for using
8210      the `-B' prefix, if needed.  If it is not found there, the two
8211      standard prefixes above are tried, and that is all.  The file is
8212      left out of the link if it is not found by those means.
8214      Another way to specify a prefix much like the `-B' prefix is to use
8215      the environment variable `GCC_EXEC_PREFIX'.  *Note Environment
8216      Variables::.
8218      As a special kludge, if the path provided by `-B' is
8219      `[dir/]stageN/', where N is a number in the range 0 to 9, then it
8220      will be replaced by `[dir/]include'.  This is to help with
8221      boot-strapping the compiler.
8223 `-specs=FILE'
8224      Process FILE after the compiler reads in the standard `specs'
8225      file, in order to override the defaults that the `gcc' driver
8226      program uses when determining what switches to pass to `cc1',
8227      `cc1plus', `as', `ld', etc.  More than one `-specs=FILE' can be
8228      specified on the command line, and they are processed in order,
8229      from left to right.
8231 `--sysroot=DIR'
8232      Use DIR as the logical root directory for headers and libraries.
8233      For example, if the compiler would normally search for headers in
8234      `/usr/include' and libraries in `/usr/lib', it will instead search
8235      `DIR/usr/include' and `DIR/usr/lib'.
8237      If you use both this option and the `-isysroot' option, then the
8238      `--sysroot' option will apply to libraries, but the `-isysroot'
8239      option will apply to header files.
8241      The GNU linker (beginning with version 2.16) has the necessary
8242      support for this option.  If your linker does not support this
8243      option, the header file aspect of `--sysroot' will still work, but
8244      the library aspect will not.
8246 `-I-'
8247      This option has been deprecated.  Please use `-iquote' instead for
8248      `-I' directories before the `-I-' and remove the `-I-'.  Any
8249      directories you specify with `-I' options before the `-I-' option
8250      are searched only for the case of `#include "FILE"'; they are not
8251      searched for `#include <FILE>'.
8253      If additional directories are specified with `-I' options after
8254      the `-I-', these directories are searched for all `#include'
8255      directives.  (Ordinarily _all_ `-I' directories are used this way.)
8257      In addition, the `-I-' option inhibits the use of the current
8258      directory (where the current input file came from) as the first
8259      search directory for `#include "FILE"'.  There is no way to
8260      override this effect of `-I-'.  With `-I.' you can specify
8261      searching the directory which was current when the compiler was
8262      invoked.  That is not exactly the same as what the preprocessor
8263      does by default, but it is often satisfactory.
8265      `-I-' does not inhibit the use of the standard system directories
8266      for header files.  Thus, `-I-' and `-nostdinc' are independent.
8268 \x1f
8269 File: gcc.info,  Node: Spec Files,  Next: Target Options,  Prev: Directory Options,  Up: Invoking GCC
8271 3.15 Specifying subprocesses and the switches to pass to them
8272 =============================================================
8274 `gcc' is a driver program.  It performs its job by invoking a sequence
8275 of other programs to do the work of compiling, assembling and linking.
8276 GCC interprets its command-line parameters and uses these to deduce
8277 which programs it should invoke, and which command-line options it
8278 ought to place on their command lines.  This behavior is controlled by
8279 "spec strings".  In most cases there is one spec string for each
8280 program that GCC can invoke, but a few programs have multiple spec
8281 strings to control their behavior.  The spec strings built into GCC can
8282 be overridden by using the `-specs=' command-line switch to specify a
8283 spec file.
8285  "Spec files" are plaintext files that are used to construct spec
8286 strings.  They consist of a sequence of directives separated by blank
8287 lines.  The type of directive is determined by the first non-whitespace
8288 character on the line and it can be one of the following:
8290 `%COMMAND'
8291      Issues a COMMAND to the spec file processor.  The commands that can
8292      appear here are:
8294     `%include <FILE>'
8295           Search for FILE and insert its text at the current point in
8296           the specs file.
8298     `%include_noerr <FILE>'
8299           Just like `%include', but do not generate an error message if
8300           the include file cannot be found.
8302     `%rename OLD_NAME NEW_NAME'
8303           Rename the spec string OLD_NAME to NEW_NAME.
8306 `*[SPEC_NAME]:'
8307      This tells the compiler to create, override or delete the named
8308      spec string.  All lines after this directive up to the next
8309      directive or blank line are considered to be the text for the spec
8310      string.  If this results in an empty string then the spec will be
8311      deleted.  (Or, if the spec did not exist, then nothing will
8312      happened.)  Otherwise, if the spec does not currently exist a new
8313      spec will be created.  If the spec does exist then its contents
8314      will be overridden by the text of this directive, unless the first
8315      character of that text is the `+' character, in which case the
8316      text will be appended to the spec.
8318 `[SUFFIX]:'
8319      Creates a new `[SUFFIX] spec' pair.  All lines after this directive
8320      and up to the next directive or blank line are considered to make
8321      up the spec string for the indicated suffix.  When the compiler
8322      encounters an input file with the named suffix, it will processes
8323      the spec string in order to work out how to compile that file.
8324      For example:
8326           .ZZ:
8327           z-compile -input %i
8329      This says that any input file whose name ends in `.ZZ' should be
8330      passed to the program `z-compile', which should be invoked with the
8331      command-line switch `-input' and with the result of performing the
8332      `%i' substitution.  (See below.)
8334      As an alternative to providing a spec string, the text that
8335      follows a suffix directive can be one of the following:
8337     `@LANGUAGE'
8338           This says that the suffix is an alias for a known LANGUAGE.
8339           This is similar to using the `-x' command-line switch to GCC
8340           to specify a language explicitly.  For example:
8342                .ZZ:
8343                @c++
8345           Says that .ZZ files are, in fact, C++ source files.
8347     `#NAME'
8348           This causes an error messages saying:
8350                NAME compiler not installed on this system.
8352      GCC already has an extensive list of suffixes built into it.  This
8353      directive will add an entry to the end of the list of suffixes, but
8354      since the list is searched from the end backwards, it is
8355      effectively possible to override earlier entries using this
8356      technique.
8359  GCC has the following spec strings built into it.  Spec files can
8360 override these strings or create their own.  Note that individual
8361 targets can also add their own spec strings to this list.
8363      asm          Options to pass to the assembler
8364      asm_final    Options to pass to the assembler post-processor
8365      cpp          Options to pass to the C preprocessor
8366      cc1          Options to pass to the C compiler
8367      cc1plus      Options to pass to the C++ compiler
8368      endfile      Object files to include at the end of the link
8369      link         Options to pass to the linker
8370      lib          Libraries to include on the command line to the linker
8371      libgcc       Decides which GCC support library to pass to the linker
8372      linker       Sets the name of the linker
8373      predefines   Defines to be passed to the C preprocessor
8374      signed_char  Defines to pass to CPP to say whether `char' is signed
8375                   by default
8376      startfile    Object files to include at the start of the link
8378  Here is a small example of a spec file:
8380      %rename lib                 old_lib
8382      *lib:
8383      --start-group -lgcc -lc -leval1 --end-group %(old_lib)
8385  This example renames the spec called `lib' to `old_lib' and then
8386 overrides the previous definition of `lib' with a new one.  The new
8387 definition adds in some extra command-line options before including the
8388 text of the old definition.
8390  "Spec strings" are a list of command-line options to be passed to their
8391 corresponding program.  In addition, the spec strings can contain
8392 `%'-prefixed sequences to substitute variable text or to conditionally
8393 insert text into the command line.  Using these constructs it is
8394 possible to generate quite complex command lines.
8396  Here is a table of all defined `%'-sequences for spec strings.  Note
8397 that spaces are not generated automatically around the results of
8398 expanding these sequences.  Therefore you can concatenate them together
8399 or combine them with constant text in a single argument.
8401 `%%'
8402      Substitute one `%' into the program name or argument.
8404 `%i'
8405      Substitute the name of the input file being processed.
8407 `%b'
8408      Substitute the basename of the input file being processed.  This
8409      is the substring up to (and not including) the last period and not
8410      including the directory.
8412 `%B'
8413      This is the same as `%b', but include the file suffix (text after
8414      the last period).
8416 `%d'
8417      Marks the argument containing or following the `%d' as a temporary
8418      file name, so that that file will be deleted if GCC exits
8419      successfully.  Unlike `%g', this contributes no text to the
8420      argument.
8422 `%gSUFFIX'
8423      Substitute a file name that has suffix SUFFIX and is chosen once
8424      per compilation, and mark the argument in the same way as `%d'.
8425      To reduce exposure to denial-of-service attacks, the file name is
8426      now chosen in a way that is hard to predict even when previously
8427      chosen file names are known.  For example, `%g.s ... %g.o ... %g.s'
8428      might turn into `ccUVUUAU.s ccXYAXZ12.o ccUVUUAU.s'.  SUFFIX
8429      matches the regexp `[.A-Za-z]*' or the special string `%O', which
8430      is treated exactly as if `%O' had been preprocessed.  Previously,
8431      `%g' was simply substituted with a file name chosen once per
8432      compilation, without regard to any appended suffix (which was
8433      therefore treated just like ordinary text), making such attacks
8434      more likely to succeed.
8436 `%uSUFFIX'
8437      Like `%g', but generates a new temporary file name even if
8438      `%uSUFFIX' was already seen.
8440 `%USUFFIX'
8441      Substitutes the last file name generated with `%uSUFFIX',
8442      generating a new one if there is no such last file name.  In the
8443      absence of any `%uSUFFIX', this is just like `%gSUFFIX', except
8444      they don't share the same suffix _space_, so `%g.s ... %U.s ...
8445      %g.s ... %U.s' would involve the generation of two distinct file
8446      names, one for each `%g.s' and another for each `%U.s'.
8447      Previously, `%U' was simply substituted with a file name chosen
8448      for the previous `%u', without regard to any appended suffix.
8450 `%jSUFFIX'
8451      Substitutes the name of the `HOST_BIT_BUCKET', if any, and if it is
8452      writable, and if save-temps is off; otherwise, substitute the name
8453      of a temporary file, just like `%u'.  This temporary file is not
8454      meant for communication between processes, but rather as a junk
8455      disposal mechanism.
8457 `%|SUFFIX'
8458 `%mSUFFIX'
8459      Like `%g', except if `-pipe' is in effect.  In that case `%|'
8460      substitutes a single dash and `%m' substitutes nothing at all.
8461      These are the two most common ways to instruct a program that it
8462      should read from standard input or write to standard output.  If
8463      you need something more elaborate you can use an `%{pipe:`X'}'
8464      construct: see for example `f/lang-specs.h'.
8466 `%.SUFFIX'
8467      Substitutes .SUFFIX for the suffixes of a matched switch's args
8468      when it is subsequently output with `%*'.  SUFFIX is terminated by
8469      the next space or %.
8471 `%w'
8472      Marks the argument containing or following the `%w' as the
8473      designated output file of this compilation.  This puts the argument
8474      into the sequence of arguments that `%o' will substitute later.
8476 `%o'
8477      Substitutes the names of all the output files, with spaces
8478      automatically placed around them.  You should write spaces around
8479      the `%o' as well or the results are undefined.  `%o' is for use in
8480      the specs for running the linker.  Input files whose names have no
8481      recognized suffix are not compiled at all, but they are included
8482      among the output files, so they will be linked.
8484 `%O'
8485      Substitutes the suffix for object files.  Note that this is
8486      handled specially when it immediately follows `%g, %u, or %U',
8487      because of the need for those to form complete file names.  The
8488      handling is such that `%O' is treated exactly as if it had already
8489      been substituted, except that `%g, %u, and %U' do not currently
8490      support additional SUFFIX characters following `%O' as they would
8491      following, for example, `.o'.
8493 `%p'
8494      Substitutes the standard macro predefinitions for the current
8495      target machine.  Use this when running `cpp'.
8497 `%P'
8498      Like `%p', but puts `__' before and after the name of each
8499      predefined macro, except for macros that start with `__' or with
8500      `_L', where L is an uppercase letter.  This is for ISO C.
8502 `%I'
8503      Substitute any of `-iprefix' (made from `GCC_EXEC_PREFIX'),
8504      `-isysroot' (made from `TARGET_SYSTEM_ROOT'), `-isystem' (made
8505      from `COMPILER_PATH' and `-B' options) and `-imultilib' as
8506      necessary.
8508 `%s'
8509      Current argument is the name of a library or startup file of some
8510      sort.  Search for that file in a standard list of directories and
8511      substitute the full name found.
8513 `%eSTR'
8514      Print STR as an error message.  STR is terminated by a newline.
8515      Use this when inconsistent options are detected.
8517 `%(NAME)'
8518      Substitute the contents of spec string NAME at this point.
8520 `%[NAME]'
8521      Like `%(...)' but put `__' around `-D' arguments.
8523 `%x{OPTION}'
8524      Accumulate an option for `%X'.
8526 `%X'
8527      Output the accumulated linker options specified by `-Wl' or a `%x'
8528      spec string.
8530 `%Y'
8531      Output the accumulated assembler options specified by `-Wa'.
8533 `%Z'
8534      Output the accumulated preprocessor options specified by `-Wp'.
8536 `%a'
8537      Process the `asm' spec.  This is used to compute the switches to
8538      be passed to the assembler.
8540 `%A'
8541      Process the `asm_final' spec.  This is a spec string for passing
8542      switches to an assembler post-processor, if such a program is
8543      needed.
8545 `%l'
8546      Process the `link' spec.  This is the spec for computing the
8547      command line passed to the linker.  Typically it will make use of
8548      the `%L %G %S %D and %E' sequences.
8550 `%D'
8551      Dump out a `-L' option for each directory that GCC believes might
8552      contain startup files.  If the target supports multilibs then the
8553      current multilib directory will be prepended to each of these
8554      paths.
8556 `%L'
8557      Process the `lib' spec.  This is a spec string for deciding which
8558      libraries should be included on the command line to the linker.
8560 `%G'
8561      Process the `libgcc' spec.  This is a spec string for deciding
8562      which GCC support library should be included on the command line
8563      to the linker.
8565 `%S'
8566      Process the `startfile' spec.  This is a spec for deciding which
8567      object files should be the first ones passed to the linker.
8568      Typically this might be a file named `crt0.o'.
8570 `%E'
8571      Process the `endfile' spec.  This is a spec string that specifies
8572      the last object files that will be passed to the linker.
8574 `%C'
8575      Process the `cpp' spec.  This is used to construct the arguments
8576      to be passed to the C preprocessor.
8578 `%1'
8579      Process the `cc1' spec.  This is used to construct the options to
8580      be passed to the actual C compiler (`cc1').
8582 `%2'
8583      Process the `cc1plus' spec.  This is used to construct the options
8584      to be passed to the actual C++ compiler (`cc1plus').
8586 `%*'
8587      Substitute the variable part of a matched option.  See below.
8588      Note that each comma in the substituted string is replaced by a
8589      single space.
8591 `%<`S''
8592      Remove all occurrences of `-S' from the command line.  Note--this
8593      command is position dependent.  `%' commands in the spec string
8594      before this one will see `-S', `%' commands in the spec string
8595      after this one will not.
8597 `%:FUNCTION(ARGS)'
8598      Call the named function FUNCTION, passing it ARGS.  ARGS is first
8599      processed as a nested spec string, then split into an argument
8600      vector in the usual fashion.  The function returns a string which
8601      is processed as if it had appeared literally as part of the
8602      current spec.
8604      The following built-in spec functions are provided:
8606     ``getenv''
8607           The `getenv' spec function takes two arguments: an environment
8608           variable name and a string.  If the environment variable is
8609           not defined, a fatal error is issued.  Otherwise, the return
8610           value is the value of the environment variable concatenated
8611           with the string.  For example, if `TOPDIR' is defined as
8612           `/path/to/top', then:
8614                %:getenv(TOPDIR /include)
8616           expands to `/path/to/top/include'.
8618     ``if-exists''
8619           The `if-exists' spec function takes one argument, an absolute
8620           pathname to a file.  If the file exists, `if-exists' returns
8621           the pathname.  Here is a small example of its usage:
8623                *startfile:
8624                crt0%O%s %:if-exists(crti%O%s) crtbegin%O%s
8626     ``if-exists-else''
8627           The `if-exists-else' spec function is similar to the
8628           `if-exists' spec function, except that it takes two
8629           arguments.  The first argument is an absolute pathname to a
8630           file.  If the file exists, `if-exists-else' returns the
8631           pathname.  If it does not exist, it returns the second
8632           argument.  This way, `if-exists-else' can be used to select
8633           one file or another, based on the existence of the first.
8634           Here is a small example of its usage:
8636                *startfile:
8637                crt0%O%s %:if-exists(crti%O%s) \
8638                %:if-exists-else(crtbeginT%O%s crtbegin%O%s)
8640     ``replace-outfile''
8641           The `replace-outfile' spec function takes two arguments.  It
8642           looks for the first argument in the outfiles array and
8643           replaces it with the second argument.  Here is a small
8644           example of its usage:
8646                %{fgnu-runtime:%:replace-outfile(-lobjc -lobjc-gnu)}
8648     ``print-asm-header''
8649           The `print-asm-header' function takes no arguments and simply
8650           prints a banner like:
8652                Assembler options
8653                =================
8655                Use "-Wa,OPTION" to pass "OPTION" to the assembler.
8657           It is used to separate compiler options from assembler options
8658           in the `--target-help' output.
8660 `%{`S'}'
8661      Substitutes the `-S' switch, if that switch was given to GCC.  If
8662      that switch was not specified, this substitutes nothing.  Note that
8663      the leading dash is omitted when specifying this option, and it is
8664      automatically inserted if the substitution is performed.  Thus the
8665      spec string `%{foo}' would match the command-line option `-foo'
8666      and would output the command line option `-foo'.
8668 `%W{`S'}'
8669      Like %{`S'} but mark last argument supplied within as a file to be
8670      deleted on failure.
8672 `%{`S'*}'
8673      Substitutes all the switches specified to GCC whose names start
8674      with `-S', but which also take an argument.  This is used for
8675      switches like `-o', `-D', `-I', etc.  GCC considers `-o foo' as
8676      being one switch whose names starts with `o'.  %{o*} would
8677      substitute this text, including the space.  Thus two arguments
8678      would be generated.
8680 `%{`S'*&`T'*}'
8681      Like %{`S'*}, but preserve order of `S' and `T' options (the order
8682      of `S' and `T' in the spec is not significant).  There can be any
8683      number of ampersand-separated variables; for each the wild card is
8684      optional.  Useful for CPP as `%{D*&U*&A*}'.
8686 `%{`S':`X'}'
8687      Substitutes `X', if the `-S' switch was given to GCC.
8689 `%{!`S':`X'}'
8690      Substitutes `X', if the `-S' switch was _not_ given to GCC.
8692 `%{`S'*:`X'}'
8693      Substitutes `X' if one or more switches whose names start with
8694      `-S' are specified to GCC.  Normally `X' is substituted only once,
8695      no matter how many such switches appeared.  However, if `%*'
8696      appears somewhere in `X', then `X' will be substituted once for
8697      each matching switch, with the `%*' replaced by the part of that
8698      switch that matched the `*'.
8700 `%{.`S':`X'}'
8701      Substitutes `X', if processing a file with suffix `S'.
8703 `%{!.`S':`X'}'
8704      Substitutes `X', if _not_ processing a file with suffix `S'.
8706 `%{,`S':`X'}'
8707      Substitutes `X', if processing a file for language `S'.
8709 `%{!,`S':`X'}'
8710      Substitutes `X', if not processing a file for language `S'.
8712 `%{`S'|`P':`X'}'
8713      Substitutes `X' if either `-S' or `-P' was given to GCC.  This may
8714      be combined with `!', `.', `,', and `*' sequences as well,
8715      although they have a stronger binding than the `|'.  If `%*'
8716      appears in `X', all of the alternatives must be starred, and only
8717      the first matching alternative is substituted.
8719      For example, a spec string like this:
8721           %{.c:-foo} %{!.c:-bar} %{.c|d:-baz} %{!.c|d:-boggle}
8723      will output the following command-line options from the following
8724      input command-line options:
8726           fred.c        -foo -baz
8727           jim.d         -bar -boggle
8728           -d fred.c     -foo -baz -boggle
8729           -d jim.d      -bar -baz -boggle
8731 `%{S:X; T:Y; :D}'
8732      If `S' was given to GCC, substitutes `X'; else if `T' was given to
8733      GCC, substitutes `Y'; else substitutes `D'.  There can be as many
8734      clauses as you need.  This may be combined with `.', `,', `!',
8735      `|', and `*' as needed.
8738  The conditional text `X' in a %{`S':`X'} or similar construct may
8739 contain other nested `%' constructs or spaces, or even newlines.  They
8740 are processed as usual, as described above.  Trailing white space in
8741 `X' is ignored.  White space may also appear anywhere on the left side
8742 of the colon in these constructs, except between `.' or `*' and the
8743 corresponding word.
8745  The `-O', `-f', `-m', and `-W' switches are handled specifically in
8746 these constructs.  If another value of `-O' or the negated form of a
8747 `-f', `-m', or `-W' switch is found later in the command line, the
8748 earlier switch value is ignored, except with {`S'*} where `S' is just
8749 one letter, which passes all matching options.
8751  The character `|' at the beginning of the predicate text is used to
8752 indicate that a command should be piped to the following command, but
8753 only if `-pipe' is specified.
8755  It is built into GCC which switches take arguments and which do not.
8756 (You might think it would be useful to generalize this to allow each
8757 compiler's spec to say which switches take arguments.  But this cannot
8758 be done in a consistent fashion.  GCC cannot even decide which input
8759 files have been specified without knowing which switches take arguments,
8760 and it must know which input files to compile in order to tell which
8761 compilers to run).
8763  GCC also knows implicitly that arguments starting in `-l' are to be
8764 treated as compiler output files, and passed to the linker in their
8765 proper position among the other output files.
8767 \x1f
8768 File: gcc.info,  Node: Target Options,  Next: Submodel Options,  Prev: Spec Files,  Up: Invoking GCC
8770 3.16 Specifying Target Machine and Compiler Version
8771 ===================================================
8773 The usual way to run GCC is to run the executable called `gcc', or
8774 `<machine>-gcc' when cross-compiling, or `<machine>-gcc-<version>' to
8775 run a version other than the one that was installed last.  Sometimes
8776 this is inconvenient, so GCC provides options that will switch to
8777 another cross-compiler or version.
8779 `-b MACHINE'
8780      The argument MACHINE specifies the target machine for compilation.
8782      The value to use for MACHINE is the same as was specified as the
8783      machine type when configuring GCC as a cross-compiler.  For
8784      example, if a cross-compiler was configured with `configure
8785      arm-elf', meaning to compile for an arm processor with elf
8786      binaries, then you would specify `-b arm-elf' to run that cross
8787      compiler.  Because there are other options beginning with `-b', the
8788      configuration must contain a hyphen, or `-b' alone should be one
8789      argument followed by the configuration in the next argument.
8791 `-V VERSION'
8792      The argument VERSION specifies which version of GCC to run.  This
8793      is useful when multiple versions are installed.  For example,
8794      VERSION might be `4.0', meaning to run GCC version 4.0.
8796  The `-V' and `-b' options work by running the
8797 `<machine>-gcc-<version>' executable, so there's no real reason to use
8798 them if you can just run that directly.
8800 \x1f
8801 File: gcc.info,  Node: Submodel Options,  Next: Code Gen Options,  Prev: Target Options,  Up: Invoking GCC
8803 3.17 Hardware Models and Configurations
8804 =======================================
8806 Earlier we discussed the standard option `-b' which chooses among
8807 different installed compilers for completely different target machines,
8808 such as VAX vs. 68000 vs. 80386.
8810  In addition, each of these target machine types can have its own
8811 special options, starting with `-m', to choose among various hardware
8812 models or configurations--for example, 68010 vs 68020, floating
8813 coprocessor or none.  A single installed version of the compiler can
8814 compile for any model or configuration, according to the options
8815 specified.
8817  Some configurations of the compiler also support additional special
8818 options, usually for compatibility with other compilers on the same
8819 platform.
8821 * Menu:
8823 * ARC Options::
8824 * ARM Options::
8825 * AVR Options::
8826 * Blackfin Options::
8827 * CRIS Options::
8828 * CRX Options::
8829 * Darwin Options::
8830 * DEC Alpha Options::
8831 * DEC Alpha/VMS Options::
8832 * FR30 Options::
8833 * FRV Options::
8834 * GNU/Linux Options::
8835 * H8/300 Options::
8836 * HPPA Options::
8837 * i386 and x86-64 Options::
8838 * i386 and x86-64 Windows Options::
8839 * IA-64 Options::
8840 * M32C Options::
8841 * M32R/D Options::
8842 * M680x0 Options::
8843 * M68hc1x Options::
8844 * MCore Options::
8845 * MIPS Options::
8846 * MMIX Options::
8847 * MN10300 Options::
8848 * PDP-11 Options::
8849 * picoChip Options::
8850 * PowerPC Options::
8851 * RS/6000 and PowerPC Options::
8852 * S/390 and zSeries Options::
8853 * Score Options::
8854 * SH Options::
8855 * SPARC Options::
8856 * SPU Options::
8857 * System V Options::
8858 * V850 Options::
8859 * VAX Options::
8860 * VxWorks Options::
8861 * x86-64 Options::
8862 * Xstormy16 Options::
8863 * Xtensa Options::
8864 * zSeries Options::
8866 \x1f
8867 File: gcc.info,  Node: ARC Options,  Next: ARM Options,  Up: Submodel Options
8869 3.17.1 ARC Options
8870 ------------------
8872 These options are defined for ARC implementations:
8874 `-EL'
8875      Compile code for little endian mode.  This is the default.
8877 `-EB'
8878      Compile code for big endian mode.
8880 `-mmangle-cpu'
8881      Prepend the name of the cpu to all public symbol names.  In
8882      multiple-processor systems, there are many ARC variants with
8883      different instruction and register set characteristics.  This flag
8884      prevents code compiled for one cpu to be linked with code compiled
8885      for another.  No facility exists for handling variants that are
8886      "almost identical".  This is an all or nothing option.
8888 `-mcpu=CPU'
8889      Compile code for ARC variant CPU.  Which variants are supported
8890      depend on the configuration.  All variants support `-mcpu=base',
8891      this is the default.
8893 `-mtext=TEXT-SECTION'
8894 `-mdata=DATA-SECTION'
8895 `-mrodata=READONLY-DATA-SECTION'
8896      Put functions, data, and readonly data in TEXT-SECTION,
8897      DATA-SECTION, and READONLY-DATA-SECTION respectively by default.
8898      This can be overridden with the `section' attribute.  *Note
8899      Variable Attributes::.
8901 `-mfix-cortex-m3-ldrd'
8902      Some Cortex-M3 cores can cause data corruption when `ldrd'
8903      instructions with overlapping destination and base registers are
8904      used.  This option avoids generating these instructions.  This
8905      option is enabled by default when `-mcpu=cortex-m3' is specified.
8908 \x1f
8909 File: gcc.info,  Node: ARM Options,  Next: AVR Options,  Prev: ARC Options,  Up: Submodel Options
8911 3.17.2 ARM Options
8912 ------------------
8914 These `-m' options are defined for Advanced RISC Machines (ARM)
8915 architectures:
8917 `-mabi=NAME'
8918      Generate code for the specified ABI.  Permissible values are:
8919      `apcs-gnu', `atpcs', `aapcs', `aapcs-linux' and `iwmmxt'.
8921 `-mapcs-frame'
8922      Generate a stack frame that is compliant with the ARM Procedure
8923      Call Standard for all functions, even if this is not strictly
8924      necessary for correct execution of the code.  Specifying
8925      `-fomit-frame-pointer' with this option will cause the stack
8926      frames not to be generated for leaf functions.  The default is
8927      `-mno-apcs-frame'.
8929 `-mapcs'
8930      This is a synonym for `-mapcs-frame'.
8932 `-mthumb-interwork'
8933      Generate code which supports calling between the ARM and Thumb
8934      instruction sets.  Without this option the two instruction sets
8935      cannot be reliably used inside one program.  The default is
8936      `-mno-thumb-interwork', since slightly larger code is generated
8937      when `-mthumb-interwork' is specified.
8939 `-mno-sched-prolog'
8940      Prevent the reordering of instructions in the function prolog, or
8941      the merging of those instruction with the instructions in the
8942      function's body.  This means that all functions will start with a
8943      recognizable set of instructions (or in fact one of a choice from
8944      a small set of different function prologues), and this information
8945      can be used to locate the start if functions inside an executable
8946      piece of code.  The default is `-msched-prolog'.
8948 `-mfloat-abi=NAME'
8949      Specifies which floating-point ABI to use.  Permissible values
8950      are: `soft', `softfp' and `hard'.
8952      Specifying `soft' causes GCC to generate output containing library
8953      calls for floating-point operations.  `softfp' allows the
8954      generation of code using hardware floating-point instructions, but
8955      still uses the soft-float calling conventions.  `hard' allows
8956      generation of floating-point instructions and uses FPU-specific
8957      calling conventions.
8959      Using `-mfloat-abi=hard' with VFP coprocessors is not supported.
8960      Use `-mfloat-abi=softfp' with the appropriate `-mfpu' option to
8961      allow the compiler to generate code that makes use of the hardware
8962      floating-point capabilities for these CPUs.
8964      The default depends on the specific target configuration.  Note
8965      that the hard-float and soft-float ABIs are not link-compatible;
8966      you must compile your entire program with the same ABI, and link
8967      with a compatible set of libraries.
8969 `-mhard-float'
8970      Equivalent to `-mfloat-abi=hard'.
8972 `-msoft-float'
8973      Equivalent to `-mfloat-abi=soft'.
8975 `-mlittle-endian'
8976      Generate code for a processor running in little-endian mode.  This
8977      is the default for all standard configurations.
8979 `-mbig-endian'
8980      Generate code for a processor running in big-endian mode; the
8981      default is to compile code for a little-endian processor.
8983 `-mwords-little-endian'
8984      This option only applies when generating code for big-endian
8985      processors.  Generate code for a little-endian word order but a
8986      big-endian byte order.  That is, a byte order of the form
8987      `32107654'.  Note: this option should only be used if you require
8988      compatibility with code for big-endian ARM processors generated by
8989      versions of the compiler prior to 2.8.
8991 `-mcpu=NAME'
8992      This specifies the name of the target ARM processor.  GCC uses
8993      this name to determine what kind of instructions it can emit when
8994      generating assembly code.  Permissible names are: `arm2', `arm250',
8995      `arm3', `arm6', `arm60', `arm600', `arm610', `arm620', `arm7',
8996      `arm7m', `arm7d', `arm7dm', `arm7di', `arm7dmi', `arm70', `arm700',
8997      `arm700i', `arm710', `arm710c', `arm7100', `arm720', `arm7500',
8998      `arm7500fe', `arm7tdmi', `arm7tdmi-s', `arm710t', `arm720t',
8999      `arm740t', `strongarm', `strongarm110', `strongarm1100',
9000      `strongarm1110', `arm8', `arm810', `arm9', `arm9e', `arm920',
9001      `arm920t', `arm922t', `arm946e-s', `arm966e-s', `arm968e-s',
9002      `arm926ej-s', `arm940t', `arm9tdmi', `arm10tdmi', `arm1020t',
9003      `arm1026ej-s', `arm10e', `arm1020e', `arm1022e', `arm1136j-s',
9004      `arm1136jf-s', `mpcore', `mpcorenovfp', `arm1156t2-s',
9005      `arm1176jz-s', `arm1176jzf-s', `cortex-a8', `cortex-a9',
9006      `cortex-r4', `cortex-r4f', `cortex-m3', `cortex-m1', `xscale',
9007      `iwmmxt', `iwmmxt2', `ep9312'.
9009 `-mtune=NAME'
9010      This option is very similar to the `-mcpu=' option, except that
9011      instead of specifying the actual target processor type, and hence
9012      restricting which instructions can be used, it specifies that GCC
9013      should tune the performance of the code as if the target were of
9014      the type specified in this option, but still choosing the
9015      instructions that it will generate based on the cpu specified by a
9016      `-mcpu=' option.  For some ARM implementations better performance
9017      can be obtained by using this option.
9019 `-march=NAME'
9020      This specifies the name of the target ARM architecture.  GCC uses
9021      this name to determine what kind of instructions it can emit when
9022      generating assembly code.  This option can be used in conjunction
9023      with or instead of the `-mcpu=' option.  Permissible names are:
9024      `armv2', `armv2a', `armv3', `armv3m', `armv4', `armv4t', `armv5',
9025      `armv5t', `armv5e', `armv5te', `armv6', `armv6j', `armv6t2',
9026      `armv6z', `armv6zk', `armv6-m', `armv7', `armv7-a', `armv7-r',
9027      `armv7-m', `iwmmxt', `iwmmxt2', `ep9312'.
9029 `-mfpu=NAME'
9030 `-mfpe=NUMBER'
9031 `-mfp=NUMBER'
9032      This specifies what floating point hardware (or hardware
9033      emulation) is available on the target.  Permissible names are:
9034      `fpa', `fpe2', `fpe3', `maverick', `vfp', `vfpv3', `vfpv3-d16' and
9035      `neon'.  `-mfp' and `-mfpe' are synonyms for `-mfpu'=`fpe'NUMBER,
9036      for compatibility with older versions of GCC.
9038      If `-msoft-float' is specified this specifies the format of
9039      floating point values.
9041 `-mstructure-size-boundary=N'
9042      The size of all structures and unions will be rounded up to a
9043      multiple of the number of bits set by this option.  Permissible
9044      values are 8, 32 and 64.  The default value varies for different
9045      toolchains.  For the COFF targeted toolchain the default value is
9046      8.  A value of 64 is only allowed if the underlying ABI supports
9047      it.
9049      Specifying the larger number can produce faster, more efficient
9050      code, but can also increase the size of the program.  Different
9051      values are potentially incompatible.  Code compiled with one value
9052      cannot necessarily expect to work with code or libraries compiled
9053      with another value, if they exchange information using structures
9054      or unions.
9056 `-mabort-on-noreturn'
9057      Generate a call to the function `abort' at the end of a `noreturn'
9058      function.  It will be executed if the function tries to return.
9060 `-mlong-calls'
9061 `-mno-long-calls'
9062      Tells the compiler to perform function calls by first loading the
9063      address of the function into a register and then performing a
9064      subroutine call on this register.  This switch is needed if the
9065      target function will lie outside of the 64 megabyte addressing
9066      range of the offset based version of subroutine call instruction.
9068      Even if this switch is enabled, not all function calls will be
9069      turned into long calls.  The heuristic is that static functions,
9070      functions which have the `short-call' attribute, functions that
9071      are inside the scope of a `#pragma no_long_calls' directive and
9072      functions whose definitions have already been compiled within the
9073      current compilation unit, will not be turned into long calls.  The
9074      exception to this rule is that weak function definitions,
9075      functions with the `long-call' attribute or the `section'
9076      attribute, and functions that are within the scope of a `#pragma
9077      long_calls' directive, will always be turned into long calls.
9079      This feature is not enabled by default.  Specifying
9080      `-mno-long-calls' will restore the default behavior, as will
9081      placing the function calls within the scope of a `#pragma
9082      long_calls_off' directive.  Note these switches have no effect on
9083      how the compiler generates code to handle function calls via
9084      function pointers.
9086 `-msingle-pic-base'
9087      Treat the register used for PIC addressing as read-only, rather
9088      than loading it in the prologue for each function.  The run-time
9089      system is responsible for initializing this register with an
9090      appropriate value before execution begins.
9092 `-mpic-register=REG'
9093      Specify the register to be used for PIC addressing.  The default
9094      is R10 unless stack-checking is enabled, when R9 is used.
9096 `-mcirrus-fix-invalid-insns'
9097      Insert NOPs into the instruction stream to in order to work around
9098      problems with invalid Maverick instruction combinations.  This
9099      option is only valid if the `-mcpu=ep9312' option has been used to
9100      enable generation of instructions for the Cirrus Maverick floating
9101      point co-processor.  This option is not enabled by default, since
9102      the problem is only present in older Maverick implementations.
9103      The default can be re-enabled by use of the
9104      `-mno-cirrus-fix-invalid-insns' switch.
9106 `-mpoke-function-name'
9107      Write the name of each function into the text section, directly
9108      preceding the function prologue.  The generated code is similar to
9109      this:
9111                t0
9112                    .ascii "arm_poke_function_name", 0
9113                    .align
9114                t1
9115                    .word 0xff000000 + (t1 - t0)
9116                arm_poke_function_name
9117                    mov     ip, sp
9118                    stmfd   sp!, {fp, ip, lr, pc}
9119                    sub     fp, ip, #4
9121      When performing a stack backtrace, code can inspect the value of
9122      `pc' stored at `fp + 0'.  If the trace function then looks at
9123      location `pc - 12' and the top 8 bits are set, then we know that
9124      there is a function name embedded immediately preceding this
9125      location and has length `((pc[-3]) & 0xff000000)'.
9127 `-mthumb'
9128      Generate code for the Thumb instruction set.  The default is to
9129      use the 32-bit ARM instruction set.  This option automatically
9130      enables either 16-bit Thumb-1 or mixed 16/32-bit Thumb-2
9131      instructions based on the `-mcpu=NAME' and `-march=NAME' options.
9133 `-mtpcs-frame'
9134      Generate a stack frame that is compliant with the Thumb Procedure
9135      Call Standard for all non-leaf functions.  (A leaf function is one
9136      that does not call any other functions.)  The default is
9137      `-mno-tpcs-frame'.
9139 `-mtpcs-leaf-frame'
9140      Generate a stack frame that is compliant with the Thumb Procedure
9141      Call Standard for all leaf functions.  (A leaf function is one
9142      that does not call any other functions.)  The default is
9143      `-mno-apcs-leaf-frame'.
9145 `-mcallee-super-interworking'
9146      Gives all externally visible functions in the file being compiled
9147      an ARM instruction set header which switches to Thumb mode before
9148      executing the rest of the function.  This allows these functions
9149      to be called from non-interworking code.
9151 `-mcaller-super-interworking'
9152      Allows calls via function pointers (including virtual functions) to
9153      execute correctly regardless of whether the target code has been
9154      compiled for interworking or not.  There is a small overhead in
9155      the cost of executing a function pointer if this option is enabled.
9157 `-mtp=NAME'
9158      Specify the access model for the thread local storage pointer.
9159      The valid models are `soft', which generates calls to
9160      `__aeabi_read_tp', `cp15', which fetches the thread pointer from
9161      `cp15' directly (supported in the arm6k architecture), and `auto',
9162      which uses the best available method for the selected processor.
9163      The default setting is `auto'.
9165 `-mword-relocations'
9166      Only generate absolute relocations on word sized values (i.e.
9167      R_ARM_ABS32).  This is enabled by default on targets (uClinux,
9168      SymbianOS) where the runtime loader imposes this restriction, and
9169      when `-fpic' or `-fPIC' is specified.
9172 \x1f
9173 File: gcc.info,  Node: AVR Options,  Next: Blackfin Options,  Prev: ARM Options,  Up: Submodel Options
9175 3.17.3 AVR Options
9176 ------------------
9178 These options are defined for AVR implementations:
9180 `-mmcu=MCU'
9181      Specify ATMEL AVR instruction set or MCU type.
9183      Instruction set avr1 is for the minimal AVR core, not supported by
9184      the C compiler, only for assembler programs (MCU types: at90s1200,
9185      attiny10, attiny11, attiny12, attiny15, attiny28).
9187      Instruction set avr2 (default) is for the classic AVR core with up
9188      to 8K program memory space (MCU types: at90s2313, at90s2323,
9189      attiny22, at90s2333, at90s2343, at90s4414, at90s4433, at90s4434,
9190      at90s8515, at90c8534, at90s8535).
9192      Instruction set avr3 is for the classic AVR core with up to 128K
9193      program memory space (MCU types: atmega103, atmega603, at43usb320,
9194      at76c711).
9196      Instruction set avr4 is for the enhanced AVR core with up to 8K
9197      program memory space (MCU types: atmega8, atmega83, atmega85).
9199      Instruction set avr5 is for the enhanced AVR core with up to 128K
9200      program memory space (MCU types: atmega16, atmega161, atmega163,
9201      atmega32, atmega323, atmega64, atmega128, at43usb355, at94k).
9203 `-msize'
9204      Output instruction sizes to the asm file.
9206 `-minit-stack=N'
9207      Specify the initial stack address, which may be a symbol or
9208      numeric value, `__stack' is the default.
9210 `-mno-interrupts'
9211      Generated code is not compatible with hardware interrupts.  Code
9212      size will be smaller.
9214 `-mcall-prologues'
9215      Functions prologues/epilogues expanded as call to appropriate
9216      subroutines.  Code size will be smaller.
9218 `-mno-tablejump'
9219      Do not generate tablejump insns which sometimes increase code size.
9220      The option is now deprecated in favor of the equivalent
9221      `-fno-jump-tables'
9223 `-mtiny-stack'
9224      Change only the low 8 bits of the stack pointer.
9226 `-mint8'
9227      Assume int to be 8 bit integer.  This affects the sizes of all
9228      types: A char will be 1 byte, an int will be 1 byte, an long will
9229      be 2 bytes and long long will be 4 bytes.  Please note that this
9230      option does not comply to the C standards, but it will provide you
9231      with smaller code size.
9233 \x1f
9234 File: gcc.info,  Node: Blackfin Options,  Next: CRIS Options,  Prev: AVR Options,  Up: Submodel Options
9236 3.17.4 Blackfin Options
9237 -----------------------
9239 `-mcpu=CPU[-SIREVISION]'
9240      Specifies the name of the target Blackfin processor.  Currently,
9241      CPU can be one of `bf512', `bf514', `bf516', `bf518', `bf522',
9242      `bf523', `bf524', `bf525', `bf526', `bf527', `bf531', `bf532',
9243      `bf533', `bf534', `bf536', `bf537', `bf538', `bf539', `bf542',
9244      `bf544', `bf547', `bf548', `bf549', `bf561'.  The optional
9245      SIREVISION specifies the silicon revision of the target Blackfin
9246      processor.  Any workarounds available for the targeted silicon
9247      revision will be enabled.  If SIREVISION is `none', no workarounds
9248      are enabled.  If SIREVISION is `any', all workarounds for the
9249      targeted processor will be enabled.  The `__SILICON_REVISION__'
9250      macro is defined to two hexadecimal digits representing the major
9251      and minor numbers in the silicon revision.  If SIREVISION is
9252      `none', the `__SILICON_REVISION__' is not defined.  If SIREVISION
9253      is `any', the `__SILICON_REVISION__' is defined to be `0xffff'.
9254      If this optional SIREVISION is not used, GCC assumes the latest
9255      known silicon revision of the targeted Blackfin processor.
9257      Support for `bf561' is incomplete.  For `bf561', Only the
9258      processor macro is defined.  Without this option, `bf532' is used
9259      as the processor by default.  The corresponding predefined
9260      processor macros for CPU is to be defined.  And for `bfin-elf'
9261      toolchain, this causes the hardware BSP provided by libgloss to be
9262      linked in if `-msim' is not given.
9264 `-msim'
9265      Specifies that the program will be run on the simulator.  This
9266      causes the simulator BSP provided by libgloss to be linked in.
9267      This option has effect only for `bfin-elf' toolchain.  Certain
9268      other options, such as `-mid-shared-library' and `-mfdpic', imply
9269      `-msim'.
9271 `-momit-leaf-frame-pointer'
9272      Don't keep the frame pointer in a register for leaf functions.
9273      This avoids the instructions to save, set up and restore frame
9274      pointers and makes an extra register available in leaf functions.
9275      The option `-fomit-frame-pointer' removes the frame pointer for
9276      all functions which might make debugging harder.
9278 `-mspecld-anomaly'
9279      When enabled, the compiler will ensure that the generated code
9280      does not contain speculative loads after jump instructions. If
9281      this option is used, `__WORKAROUND_SPECULATIVE_LOADS' is defined.
9283 `-mno-specld-anomaly'
9284      Don't generate extra code to prevent speculative loads from
9285      occurring.
9287 `-mcsync-anomaly'
9288      When enabled, the compiler will ensure that the generated code
9289      does not contain CSYNC or SSYNC instructions too soon after
9290      conditional branches.  If this option is used,
9291      `__WORKAROUND_SPECULATIVE_SYNCS' is defined.
9293 `-mno-csync-anomaly'
9294      Don't generate extra code to prevent CSYNC or SSYNC instructions
9295      from occurring too soon after a conditional branch.
9297 `-mlow-64k'
9298      When enabled, the compiler is free to take advantage of the
9299      knowledge that the entire program fits into the low 64k of memory.
9301 `-mno-low-64k'
9302      Assume that the program is arbitrarily large.  This is the default.
9304 `-mstack-check-l1'
9305      Do stack checking using information placed into L1 scratchpad
9306      memory by the uClinux kernel.
9308 `-mid-shared-library'
9309      Generate code that supports shared libraries via the library ID
9310      method.  This allows for execute in place and shared libraries in
9311      an environment without virtual memory management.  This option
9312      implies `-fPIC'.  With a `bfin-elf' target, this option implies
9313      `-msim'.
9315 `-mno-id-shared-library'
9316      Generate code that doesn't assume ID based shared libraries are
9317      being used.  This is the default.
9319 `-mleaf-id-shared-library'
9320      Generate code that supports shared libraries via the library ID
9321      method, but assumes that this library or executable won't link
9322      against any other ID shared libraries.  That allows the compiler
9323      to use faster code for jumps and calls.
9325 `-mno-leaf-id-shared-library'
9326      Do not assume that the code being compiled won't link against any
9327      ID shared libraries.  Slower code will be generated for jump and
9328      call insns.
9330 `-mshared-library-id=n'
9331      Specified the identification number of the ID based shared library
9332      being compiled.  Specifying a value of 0 will generate more
9333      compact code, specifying other values will force the allocation of
9334      that number to the current library but is no more space or time
9335      efficient than omitting this option.
9337 `-msep-data'
9338      Generate code that allows the data segment to be located in a
9339      different area of memory from the text segment.  This allows for
9340      execute in place in an environment without virtual memory
9341      management by eliminating relocations against the text section.
9343 `-mno-sep-data'
9344      Generate code that assumes that the data segment follows the text
9345      segment.  This is the default.
9347 `-mlong-calls'
9348 `-mno-long-calls'
9349      Tells the compiler to perform function calls by first loading the
9350      address of the function into a register and then performing a
9351      subroutine call on this register.  This switch is needed if the
9352      target function will lie outside of the 24 bit addressing range of
9353      the offset based version of subroutine call instruction.
9355      This feature is not enabled by default.  Specifying
9356      `-mno-long-calls' will restore the default behavior.  Note these
9357      switches have no effect on how the compiler generates code to
9358      handle function calls via function pointers.
9360 `-mfast-fp'
9361      Link with the fast floating-point library. This library relaxes
9362      some of the IEEE floating-point standard's rules for checking
9363      inputs against Not-a-Number (NAN), in the interest of performance.
9365 `-minline-plt'
9366      Enable inlining of PLT entries in function calls to functions that
9367      are not known to bind locally.  It has no effect without `-mfdpic'.
9369 `-mmulticore'
9370      Build standalone application for multicore Blackfin processor.
9371      Proper start files and link scripts will be used to support
9372      multicore.  This option defines `__BFIN_MULTICORE'. It can only be
9373      used with `-mcpu=bf561[-SIREVISION]'. It can be used with
9374      `-mcorea' or `-mcoreb'. If it's used without `-mcorea' or
9375      `-mcoreb', single application/dual core programming model is used.
9376      In this model, the main function of Core B should be named as
9377      coreb_main. If it's used with `-mcorea' or `-mcoreb', one
9378      application per core programming model is used.  If this option is
9379      not used, single core application programming model is used.
9381 `-mcorea'
9382      Build standalone application for Core A of BF561 when using one
9383      application per core programming model. Proper start files and
9384      link scripts will be used to support Core A. This option defines
9385      `__BFIN_COREA'. It must be used with `-mmulticore'.
9387 `-mcoreb'
9388      Build standalone application for Core B of BF561 when using one
9389      application per core programming model. Proper start files and
9390      link scripts will be used to support Core B. This option defines
9391      `__BFIN_COREB'. When this option is used, coreb_main should be
9392      used instead of main. It must be used with `-mmulticore'.
9394 `-msdram'
9395      Build standalone application for SDRAM. Proper start files and
9396      link scripts will be used to put the application into SDRAM.
9397      Loader should initialize SDRAM before loading the application into
9398      SDRAM. This option defines `__BFIN_SDRAM'.
9400 `-micplb'
9401      Assume that ICPLBs are enabled at runtime.  This has an effect on
9402      certain anomaly workarounds.  For Linux targets, the default is to
9403      assume ICPLBs are enabled; for standalone applications the default
9404      is off.
9406 \x1f
9407 File: gcc.info,  Node: CRIS Options,  Next: CRX Options,  Prev: Blackfin Options,  Up: Submodel Options
9409 3.17.5 CRIS Options
9410 -------------------
9412 These options are defined specifically for the CRIS ports.
9414 `-march=ARCHITECTURE-TYPE'
9415 `-mcpu=ARCHITECTURE-TYPE'
9416      Generate code for the specified architecture.  The choices for
9417      ARCHITECTURE-TYPE are `v3', `v8' and `v10' for respectively
9418      ETRAX 4, ETRAX 100, and ETRAX 100 LX.  Default is `v0' except for
9419      cris-axis-linux-gnu, where the default is `v10'.
9421 `-mtune=ARCHITECTURE-TYPE'
9422      Tune to ARCHITECTURE-TYPE everything applicable about the generated
9423      code, except for the ABI and the set of available instructions.
9424      The choices for ARCHITECTURE-TYPE are the same as for
9425      `-march=ARCHITECTURE-TYPE'.
9427 `-mmax-stack-frame=N'
9428      Warn when the stack frame of a function exceeds N bytes.
9430 `-metrax4'
9431 `-metrax100'
9432      The options `-metrax4' and `-metrax100' are synonyms for
9433      `-march=v3' and `-march=v8' respectively.
9435 `-mmul-bug-workaround'
9436 `-mno-mul-bug-workaround'
9437      Work around a bug in the `muls' and `mulu' instructions for CPU
9438      models where it applies.  This option is active by default.
9440 `-mpdebug'
9441      Enable CRIS-specific verbose debug-related information in the
9442      assembly code.  This option also has the effect to turn off the
9443      `#NO_APP' formatted-code indicator to the assembler at the
9444      beginning of the assembly file.
9446 `-mcc-init'
9447      Do not use condition-code results from previous instruction;
9448      always emit compare and test instructions before use of condition
9449      codes.
9451 `-mno-side-effects'
9452      Do not emit instructions with side-effects in addressing modes
9453      other than post-increment.
9455 `-mstack-align'
9456 `-mno-stack-align'
9457 `-mdata-align'
9458 `-mno-data-align'
9459 `-mconst-align'
9460 `-mno-const-align'
9461      These options (no-options) arranges (eliminate arrangements) for
9462      the stack-frame, individual data and constants to be aligned for
9463      the maximum single data access size for the chosen CPU model.  The
9464      default is to arrange for 32-bit alignment.  ABI details such as
9465      structure layout are not affected by these options.
9467 `-m32-bit'
9468 `-m16-bit'
9469 `-m8-bit'
9470      Similar to the stack- data- and const-align options above, these
9471      options arrange for stack-frame, writable data and constants to
9472      all be 32-bit, 16-bit or 8-bit aligned.  The default is 32-bit
9473      alignment.
9475 `-mno-prologue-epilogue'
9476 `-mprologue-epilogue'
9477      With `-mno-prologue-epilogue', the normal function prologue and
9478      epilogue that sets up the stack-frame are omitted and no return
9479      instructions or return sequences are generated in the code.  Use
9480      this option only together with visual inspection of the compiled
9481      code: no warnings or errors are generated when call-saved
9482      registers must be saved, or storage for local variable needs to be
9483      allocated.
9485 `-mno-gotplt'
9486 `-mgotplt'
9487      With `-fpic' and `-fPIC', don't generate (do generate) instruction
9488      sequences that load addresses for functions from the PLT part of
9489      the GOT rather than (traditional on other architectures) calls to
9490      the PLT.  The default is `-mgotplt'.
9492 `-melf'
9493      Legacy no-op option only recognized with the cris-axis-elf and
9494      cris-axis-linux-gnu targets.
9496 `-mlinux'
9497      Legacy no-op option only recognized with the cris-axis-linux-gnu
9498      target.
9500 `-sim'
9501      This option, recognized for the cris-axis-elf arranges to link
9502      with input-output functions from a simulator library.  Code,
9503      initialized data and zero-initialized data are allocated
9504      consecutively.
9506 `-sim2'
9507      Like `-sim', but pass linker options to locate initialized data at
9508      0x40000000 and zero-initialized data at 0x80000000.
9510 \x1f
9511 File: gcc.info,  Node: CRX Options,  Next: Darwin Options,  Prev: CRIS Options,  Up: Submodel Options
9513 3.17.6 CRX Options
9514 ------------------
9516 These options are defined specifically for the CRX ports.
9518 `-mmac'
9519      Enable the use of multiply-accumulate instructions. Disabled by
9520      default.
9522 `-mpush-args'
9523      Push instructions will be used to pass outgoing arguments when
9524      functions are called. Enabled by default.
9526 \x1f
9527 File: gcc.info,  Node: Darwin Options,  Next: DEC Alpha Options,  Prev: CRX Options,  Up: Submodel Options
9529 3.17.7 Darwin Options
9530 ---------------------
9532 These options are defined for all architectures running the Darwin
9533 operating system.
9535  FSF GCC on Darwin does not create "fat" object files; it will create
9536 an object file for the single architecture that it was built to target.
9537 Apple's GCC on Darwin does create "fat" files if multiple `-arch'
9538 options are used; it does so by running the compiler or linker multiple
9539 times and joining the results together with `lipo'.
9541  The subtype of the file created (like `ppc7400' or `ppc970' or `i686')
9542 is determined by the flags that specify the ISA that GCC is targetting,
9543 like `-mcpu' or `-march'.  The `-force_cpusubtype_ALL' option can be
9544 used to override this.
9546  The Darwin tools vary in their behavior when presented with an ISA
9547 mismatch.  The assembler, `as', will only permit instructions to be
9548 used that are valid for the subtype of the file it is generating, so
9549 you cannot put 64-bit instructions in an `ppc750' object file.  The
9550 linker for shared libraries, `/usr/bin/libtool', will fail and print an
9551 error if asked to create a shared library with a less restrictive
9552 subtype than its input files (for instance, trying to put a `ppc970'
9553 object file in a `ppc7400' library).  The linker for executables, `ld',
9554 will quietly give the executable the most restrictive subtype of any of
9555 its input files.
9557 `-FDIR'
9558      Add the framework directory DIR to the head of the list of
9559      directories to be searched for header files.  These directories are
9560      interleaved with those specified by `-I' options and are scanned
9561      in a left-to-right order.
9563      A framework directory is a directory with frameworks in it.  A
9564      framework is a directory with a `"Headers"' and/or
9565      `"PrivateHeaders"' directory contained directly in it that ends in
9566      `".framework"'.  The name of a framework is the name of this
9567      directory excluding the `".framework"'.  Headers associated with
9568      the framework are found in one of those two directories, with
9569      `"Headers"' being searched first.  A subframework is a framework
9570      directory that is in a framework's `"Frameworks"' directory.
9571      Includes of subframework headers can only appear in a header of a
9572      framework that contains the subframework, or in a sibling
9573      subframework header.  Two subframeworks are siblings if they occur
9574      in the same framework.  A subframework should not have the same
9575      name as a framework, a warning will be issued if this is violated.
9576      Currently a subframework cannot have subframeworks, in the
9577      future, the mechanism may be extended to support this.  The
9578      standard frameworks can be found in `"/System/Library/Frameworks"'
9579      and `"/Library/Frameworks"'.  An example include looks like
9580      `#include <Framework/header.h>', where `Framework' denotes the
9581      name of the framework and header.h is found in the
9582      `"PrivateHeaders"' or `"Headers"' directory.
9584 `-iframeworkDIR'
9585      Like `-F' except the directory is a treated as a system directory.
9586      The main difference between this `-iframework' and `-F' is that
9587      with `-iframework' the compiler does not warn about constructs
9588      contained within header files found via DIR.  This option is valid
9589      only for the C family of languages.
9591 `-gused'
9592      Emit debugging information for symbols that are used.  For STABS
9593      debugging format, this enables `-feliminate-unused-debug-symbols'.
9594      This is by default ON.
9596 `-gfull'
9597      Emit debugging information for all symbols and types.
9599 `-mmacosx-version-min=VERSION'
9600      The earliest version of MacOS X that this executable will run on
9601      is VERSION.  Typical values of VERSION include `10.1', `10.2', and
9602      `10.3.9'.
9604      If the compiler was built to use the system's headers by default,
9605      then the default for this option is the system version on which the
9606      compiler is running, otherwise the default is to make choices which
9607      are compatible with as many systems and code bases as possible.
9609 `-mkernel'
9610      Enable kernel development mode.  The `-mkernel' option sets
9611      `-static', `-fno-common', `-fno-cxa-atexit', `-fno-exceptions',
9612      `-fno-non-call-exceptions', `-fapple-kext', `-fno-weak' and
9613      `-fno-rtti' where applicable.  This mode also sets `-mno-altivec',
9614      `-msoft-float', `-fno-builtin' and `-mlong-branch' for PowerPC
9615      targets.
9617 `-mone-byte-bool'
9618      Override the defaults for `bool' so that `sizeof(bool)==1'.  By
9619      default `sizeof(bool)' is `4' when compiling for Darwin/PowerPC
9620      and `1' when compiling for Darwin/x86, so this option has no
9621      effect on x86.
9623      *Warning:* The `-mone-byte-bool' switch causes GCC to generate
9624      code that is not binary compatible with code generated without
9625      that switch.  Using this switch may require recompiling all other
9626      modules in a program, including system libraries.  Use this switch
9627      to conform to a non-default data model.
9629 `-mfix-and-continue'
9630 `-ffix-and-continue'
9631 `-findirect-data'
9632      Generate code suitable for fast turn around development.  Needed to
9633      enable gdb to dynamically load `.o' files into already running
9634      programs.  `-findirect-data' and `-ffix-and-continue' are provided
9635      for backwards compatibility.
9637 `-all_load'
9638      Loads all members of static archive libraries.  See man ld(1) for
9639      more information.
9641 `-arch_errors_fatal'
9642      Cause the errors having to do with files that have the wrong
9643      architecture to be fatal.
9645 `-bind_at_load'
9646      Causes the output file to be marked such that the dynamic linker
9647      will bind all undefined references when the file is loaded or
9648      launched.
9650 `-bundle'
9651      Produce a Mach-o bundle format file.  See man ld(1) for more
9652      information.
9654 `-bundle_loader EXECUTABLE'
9655      This option specifies the EXECUTABLE that will be loading the build
9656      output file being linked.  See man ld(1) for more information.
9658 `-dynamiclib'
9659      When passed this option, GCC will produce a dynamic library
9660      instead of an executable when linking, using the Darwin `libtool'
9661      command.
9663 `-force_cpusubtype_ALL'
9664      This causes GCC's output file to have the ALL subtype, instead of
9665      one controlled by the `-mcpu' or `-march' option.
9667 `-allowable_client  CLIENT_NAME'
9668 `-client_name'
9669 `-compatibility_version'
9670 `-current_version'
9671 `-dead_strip'
9672 `-dependency-file'
9673 `-dylib_file'
9674 `-dylinker_install_name'
9675 `-dynamic'
9676 `-exported_symbols_list'
9677 `-filelist'
9678 `-flat_namespace'
9679 `-force_flat_namespace'
9680 `-headerpad_max_install_names'
9681 `-image_base'
9682 `-init'
9683 `-install_name'
9684 `-keep_private_externs'
9685 `-multi_module'
9686 `-multiply_defined'
9687 `-multiply_defined_unused'
9688 `-noall_load'
9689 `-no_dead_strip_inits_and_terms'
9690 `-nofixprebinding'
9691 `-nomultidefs'
9692 `-noprebind'
9693 `-noseglinkedit'
9694 `-pagezero_size'
9695 `-prebind'
9696 `-prebind_all_twolevel_modules'
9697 `-private_bundle'
9698 `-read_only_relocs'
9699 `-sectalign'
9700 `-sectobjectsymbols'
9701 `-whyload'
9702 `-seg1addr'
9703 `-sectcreate'
9704 `-sectobjectsymbols'
9705 `-sectorder'
9706 `-segaddr'
9707 `-segs_read_only_addr'
9708 `-segs_read_write_addr'
9709 `-seg_addr_table'
9710 `-seg_addr_table_filename'
9711 `-seglinkedit'
9712 `-segprot'
9713 `-segs_read_only_addr'
9714 `-segs_read_write_addr'
9715 `-single_module'
9716 `-static'
9717 `-sub_library'
9718 `-sub_umbrella'
9719 `-twolevel_namespace'
9720 `-umbrella'
9721 `-undefined'
9722 `-unexported_symbols_list'
9723 `-weak_reference_mismatches'
9724 `-whatsloaded'
9725      These options are passed to the Darwin linker.  The Darwin linker
9726      man page describes them in detail.
9728 \x1f
9729 File: gcc.info,  Node: DEC Alpha Options,  Next: DEC Alpha/VMS Options,  Prev: Darwin Options,  Up: Submodel Options
9731 3.17.8 DEC Alpha Options
9732 ------------------------
9734 These `-m' options are defined for the DEC Alpha implementations:
9736 `-mno-soft-float'
9737 `-msoft-float'
9738      Use (do not use) the hardware floating-point instructions for
9739      floating-point operations.  When `-msoft-float' is specified,
9740      functions in `libgcc.a' will be used to perform floating-point
9741      operations.  Unless they are replaced by routines that emulate the
9742      floating-point operations, or compiled in such a way as to call
9743      such emulations routines, these routines will issue floating-point
9744      operations.   If you are compiling for an Alpha without
9745      floating-point operations, you must ensure that the library is
9746      built so as not to call them.
9748      Note that Alpha implementations without floating-point operations
9749      are required to have floating-point registers.
9751 `-mfp-reg'
9752 `-mno-fp-regs'
9753      Generate code that uses (does not use) the floating-point register
9754      set.  `-mno-fp-regs' implies `-msoft-float'.  If the floating-point
9755      register set is not used, floating point operands are passed in
9756      integer registers as if they were integers and floating-point
9757      results are passed in `$0' instead of `$f0'.  This is a
9758      non-standard calling sequence, so any function with a
9759      floating-point argument or return value called by code compiled
9760      with `-mno-fp-regs' must also be compiled with that option.
9762      A typical use of this option is building a kernel that does not
9763      use, and hence need not save and restore, any floating-point
9764      registers.
9766 `-mieee'
9767      The Alpha architecture implements floating-point hardware
9768      optimized for maximum performance.  It is mostly compliant with
9769      the IEEE floating point standard.  However, for full compliance,
9770      software assistance is required.  This option generates code fully
9771      IEEE compliant code _except_ that the INEXACT-FLAG is not
9772      maintained (see below).  If this option is turned on, the
9773      preprocessor macro `_IEEE_FP' is defined during compilation.  The
9774      resulting code is less efficient but is able to correctly support
9775      denormalized numbers and exceptional IEEE values such as
9776      not-a-number and plus/minus infinity.  Other Alpha compilers call
9777      this option `-ieee_with_no_inexact'.
9779 `-mieee-with-inexact'
9780      This is like `-mieee' except the generated code also maintains the
9781      IEEE INEXACT-FLAG.  Turning on this option causes the generated
9782      code to implement fully-compliant IEEE math.  In addition to
9783      `_IEEE_FP', `_IEEE_FP_EXACT' is defined as a preprocessor macro.
9784      On some Alpha implementations the resulting code may execute
9785      significantly slower than the code generated by default.  Since
9786      there is very little code that depends on the INEXACT-FLAG, you
9787      should normally not specify this option.  Other Alpha compilers
9788      call this option `-ieee_with_inexact'.
9790 `-mfp-trap-mode=TRAP-MODE'
9791      This option controls what floating-point related traps are enabled.
9792      Other Alpha compilers call this option `-fptm TRAP-MODE'.  The
9793      trap mode can be set to one of four values:
9795     `n'
9796           This is the default (normal) setting.  The only traps that
9797           are enabled are the ones that cannot be disabled in software
9798           (e.g., division by zero trap).
9800     `u'
9801           In addition to the traps enabled by `n', underflow traps are
9802           enabled as well.
9804     `su'
9805           Like `u', but the instructions are marked to be safe for
9806           software completion (see Alpha architecture manual for
9807           details).
9809     `sui'
9810           Like `su', but inexact traps are enabled as well.
9812 `-mfp-rounding-mode=ROUNDING-MODE'
9813      Selects the IEEE rounding mode.  Other Alpha compilers call this
9814      option `-fprm ROUNDING-MODE'.  The ROUNDING-MODE can be one of:
9816     `n'
9817           Normal IEEE rounding mode.  Floating point numbers are
9818           rounded towards the nearest machine number or towards the
9819           even machine number in case of a tie.
9821     `m'
9822           Round towards minus infinity.
9824     `c'
9825           Chopped rounding mode.  Floating point numbers are rounded
9826           towards zero.
9828     `d'
9829           Dynamic rounding mode.  A field in the floating point control
9830           register (FPCR, see Alpha architecture reference manual)
9831           controls the rounding mode in effect.  The C library
9832           initializes this register for rounding towards plus infinity.
9833           Thus, unless your program modifies the FPCR, `d' corresponds
9834           to round towards plus infinity.
9836 `-mtrap-precision=TRAP-PRECISION'
9837      In the Alpha architecture, floating point traps are imprecise.
9838      This means without software assistance it is impossible to recover
9839      from a floating trap and program execution normally needs to be
9840      terminated.  GCC can generate code that can assist operating
9841      system trap handlers in determining the exact location that caused
9842      a floating point trap.  Depending on the requirements of an
9843      application, different levels of precisions can be selected:
9845     `p'
9846           Program precision.  This option is the default and means a
9847           trap handler can only identify which program caused a
9848           floating point exception.
9850     `f'
9851           Function precision.  The trap handler can determine the
9852           function that caused a floating point exception.
9854     `i'
9855           Instruction precision.  The trap handler can determine the
9856           exact instruction that caused a floating point exception.
9858      Other Alpha compilers provide the equivalent options called
9859      `-scope_safe' and `-resumption_safe'.
9861 `-mieee-conformant'
9862      This option marks the generated code as IEEE conformant.  You must
9863      not use this option unless you also specify `-mtrap-precision=i'
9864      and either `-mfp-trap-mode=su' or `-mfp-trap-mode=sui'.  Its only
9865      effect is to emit the line `.eflag 48' in the function prologue of
9866      the generated assembly file.  Under DEC Unix, this has the effect
9867      that IEEE-conformant math library routines will be linked in.
9869 `-mbuild-constants'
9870      Normally GCC examines a 32- or 64-bit integer constant to see if
9871      it can construct it from smaller constants in two or three
9872      instructions.  If it cannot, it will output the constant as a
9873      literal and generate code to load it from the data segment at
9874      runtime.
9876      Use this option to require GCC to construct _all_ integer constants
9877      using code, even if it takes more instructions (the maximum is
9878      six).
9880      You would typically use this option to build a shared library
9881      dynamic loader.  Itself a shared library, it must relocate itself
9882      in memory before it can find the variables and constants in its
9883      own data segment.
9885 `-malpha-as'
9886 `-mgas'
9887      Select whether to generate code to be assembled by the
9888      vendor-supplied assembler (`-malpha-as') or by the GNU assembler
9889      `-mgas'.
9891 `-mbwx'
9892 `-mno-bwx'
9893 `-mcix'
9894 `-mno-cix'
9895 `-mfix'
9896 `-mno-fix'
9897 `-mmax'
9898 `-mno-max'
9899      Indicate whether GCC should generate code to use the optional BWX,
9900      CIX, FIX and MAX instruction sets.  The default is to use the
9901      instruction sets supported by the CPU type specified via `-mcpu='
9902      option or that of the CPU on which GCC was built if none was
9903      specified.
9905 `-mfloat-vax'
9906 `-mfloat-ieee'
9907      Generate code that uses (does not use) VAX F and G floating point
9908      arithmetic instead of IEEE single and double precision.
9910 `-mexplicit-relocs'
9911 `-mno-explicit-relocs'
9912      Older Alpha assemblers provided no way to generate symbol
9913      relocations except via assembler macros.  Use of these macros does
9914      not allow optimal instruction scheduling.  GNU binutils as of
9915      version 2.12 supports a new syntax that allows the compiler to
9916      explicitly mark which relocations should apply to which
9917      instructions.  This option is mostly useful for debugging, as GCC
9918      detects the capabilities of the assembler when it is built and
9919      sets the default accordingly.
9921 `-msmall-data'
9922 `-mlarge-data'
9923      When `-mexplicit-relocs' is in effect, static data is accessed via
9924      "gp-relative" relocations.  When `-msmall-data' is used, objects 8
9925      bytes long or smaller are placed in a "small data area" (the
9926      `.sdata' and `.sbss' sections) and are accessed via 16-bit
9927      relocations off of the `$gp' register.  This limits the size of
9928      the small data area to 64KB, but allows the variables to be
9929      directly accessed via a single instruction.
9931      The default is `-mlarge-data'.  With this option the data area is
9932      limited to just below 2GB.  Programs that require more than 2GB of
9933      data must use `malloc' or `mmap' to allocate the data in the heap
9934      instead of in the program's data segment.
9936      When generating code for shared libraries, `-fpic' implies
9937      `-msmall-data' and `-fPIC' implies `-mlarge-data'.
9939 `-msmall-text'
9940 `-mlarge-text'
9941      When `-msmall-text' is used, the compiler assumes that the code of
9942      the entire program (or shared library) fits in 4MB, and is thus
9943      reachable with a branch instruction.  When `-msmall-data' is used,
9944      the compiler can assume that all local symbols share the same
9945      `$gp' value, and thus reduce the number of instructions required
9946      for a function call from 4 to 1.
9948      The default is `-mlarge-text'.
9950 `-mcpu=CPU_TYPE'
9951      Set the instruction set and instruction scheduling parameters for
9952      machine type CPU_TYPE.  You can specify either the `EV' style name
9953      or the corresponding chip number.  GCC supports scheduling
9954      parameters for the EV4, EV5 and EV6 family of processors and will
9955      choose the default values for the instruction set from the
9956      processor you specify.  If you do not specify a processor type,
9957      GCC will default to the processor on which the compiler was built.
9959      Supported values for CPU_TYPE are
9961     `ev4'
9962     `ev45'
9963     `21064'
9964           Schedules as an EV4 and has no instruction set extensions.
9966     `ev5'
9967     `21164'
9968           Schedules as an EV5 and has no instruction set extensions.
9970     `ev56'
9971     `21164a'
9972           Schedules as an EV5 and supports the BWX extension.
9974     `pca56'
9975     `21164pc'
9976     `21164PC'
9977           Schedules as an EV5 and supports the BWX and MAX extensions.
9979     `ev6'
9980     `21264'
9981           Schedules as an EV6 and supports the BWX, FIX, and MAX
9982           extensions.
9984     `ev67'
9985     `21264a'
9986           Schedules as an EV6 and supports the BWX, CIX, FIX, and MAX
9987           extensions.
9989      Native Linux/GNU toolchains also support the value `native', which
9990      selects the best architecture option for the host processor.
9991      `-mcpu=native' has no effect if GCC does not recognize the
9992      processor.
9994 `-mtune=CPU_TYPE'
9995      Set only the instruction scheduling parameters for machine type
9996      CPU_TYPE.  The instruction set is not changed.
9998      Native Linux/GNU toolchains also support the value `native', which
9999      selects the best architecture option for the host processor.
10000      `-mtune=native' has no effect if GCC does not recognize the
10001      processor.
10003 `-mmemory-latency=TIME'
10004      Sets the latency the scheduler should assume for typical memory
10005      references as seen by the application.  This number is highly
10006      dependent on the memory access patterns used by the application
10007      and the size of the external cache on the machine.
10009      Valid options for TIME are
10011     `NUMBER'
10012           A decimal number representing clock cycles.
10014     `L1'
10015     `L2'
10016     `L3'
10017     `main'
10018           The compiler contains estimates of the number of clock cycles
10019           for "typical" EV4 & EV5 hardware for the Level 1, 2 & 3 caches
10020           (also called Dcache, Scache, and Bcache), as well as to main
10021           memory.  Note that L3 is only valid for EV5.
10024 \x1f
10025 File: gcc.info,  Node: DEC Alpha/VMS Options,  Next: FR30 Options,  Prev: DEC Alpha Options,  Up: Submodel Options
10027 3.17.9 DEC Alpha/VMS Options
10028 ----------------------------
10030 These `-m' options are defined for the DEC Alpha/VMS implementations:
10032 `-mvms-return-codes'
10033      Return VMS condition codes from main.  The default is to return
10034      POSIX style condition (e.g. error) codes.
10036 \x1f
10037 File: gcc.info,  Node: FR30 Options,  Next: FRV Options,  Prev: DEC Alpha/VMS Options,  Up: Submodel Options
10039 3.17.10 FR30 Options
10040 --------------------
10042 These options are defined specifically for the FR30 port.
10044 `-msmall-model'
10045      Use the small address space model.  This can produce smaller code,
10046      but it does assume that all symbolic values and addresses will fit
10047      into a 20-bit range.
10049 `-mno-lsim'
10050      Assume that run-time support has been provided and so there is no
10051      need to include the simulator library (`libsim.a') on the linker
10052      command line.
10055 \x1f
10056 File: gcc.info,  Node: FRV Options,  Next: GNU/Linux Options,  Prev: FR30 Options,  Up: Submodel Options
10058 3.17.11 FRV Options
10059 -------------------
10061 `-mgpr-32'
10062      Only use the first 32 general purpose registers.
10064 `-mgpr-64'
10065      Use all 64 general purpose registers.
10067 `-mfpr-32'
10068      Use only the first 32 floating point registers.
10070 `-mfpr-64'
10071      Use all 64 floating point registers
10073 `-mhard-float'
10074      Use hardware instructions for floating point operations.
10076 `-msoft-float'
10077      Use library routines for floating point operations.
10079 `-malloc-cc'
10080      Dynamically allocate condition code registers.
10082 `-mfixed-cc'
10083      Do not try to dynamically allocate condition code registers, only
10084      use `icc0' and `fcc0'.
10086 `-mdword'
10087      Change ABI to use double word insns.
10089 `-mno-dword'
10090      Do not use double word instructions.
10092 `-mdouble'
10093      Use floating point double instructions.
10095 `-mno-double'
10096      Do not use floating point double instructions.
10098 `-mmedia'
10099      Use media instructions.
10101 `-mno-media'
10102      Do not use media instructions.
10104 `-mmuladd'
10105      Use multiply and add/subtract instructions.
10107 `-mno-muladd'
10108      Do not use multiply and add/subtract instructions.
10110 `-mfdpic'
10111      Select the FDPIC ABI, that uses function descriptors to represent
10112      pointers to functions.  Without any PIC/PIE-related options, it
10113      implies `-fPIE'.  With `-fpic' or `-fpie', it assumes GOT entries
10114      and small data are within a 12-bit range from the GOT base
10115      address; with `-fPIC' or `-fPIE', GOT offsets are computed with 32
10116      bits.  With a `bfin-elf' target, this option implies `-msim'.
10118 `-minline-plt'
10119      Enable inlining of PLT entries in function calls to functions that
10120      are not known to bind locally.  It has no effect without `-mfdpic'.
10121      It's enabled by default if optimizing for speed and compiling for
10122      shared libraries (i.e., `-fPIC' or `-fpic'), or when an
10123      optimization option such as `-O3' or above is present in the
10124      command line.
10126 `-mTLS'
10127      Assume a large TLS segment when generating thread-local code.
10129 `-mtls'
10130      Do not assume a large TLS segment when generating thread-local
10131      code.
10133 `-mgprel-ro'
10134      Enable the use of `GPREL' relocations in the FDPIC ABI for data
10135      that is known to be in read-only sections.  It's enabled by
10136      default, except for `-fpic' or `-fpie': even though it may help
10137      make the global offset table smaller, it trades 1 instruction for
10138      4.  With `-fPIC' or `-fPIE', it trades 3 instructions for 4, one
10139      of which may be shared by multiple symbols, and it avoids the need
10140      for a GOT entry for the referenced symbol, so it's more likely to
10141      be a win.  If it is not, `-mno-gprel-ro' can be used to disable it.
10143 `-multilib-library-pic'
10144      Link with the (library, not FD) pic libraries.  It's implied by
10145      `-mlibrary-pic', as well as by `-fPIC' and `-fpic' without
10146      `-mfdpic'.  You should never have to use it explicitly.
10148 `-mlinked-fp'
10149      Follow the EABI requirement of always creating a frame pointer
10150      whenever a stack frame is allocated.  This option is enabled by
10151      default and can be disabled with `-mno-linked-fp'.
10153 `-mlong-calls'
10154      Use indirect addressing to call functions outside the current
10155      compilation unit.  This allows the functions to be placed anywhere
10156      within the 32-bit address space.
10158 `-malign-labels'
10159      Try to align labels to an 8-byte boundary by inserting nops into
10160      the previous packet.  This option only has an effect when VLIW
10161      packing is enabled.  It doesn't create new packets; it merely adds
10162      nops to existing ones.
10164 `-mlibrary-pic'
10165      Generate position-independent EABI code.
10167 `-macc-4'
10168      Use only the first four media accumulator registers.
10170 `-macc-8'
10171      Use all eight media accumulator registers.
10173 `-mpack'
10174      Pack VLIW instructions.
10176 `-mno-pack'
10177      Do not pack VLIW instructions.
10179 `-mno-eflags'
10180      Do not mark ABI switches in e_flags.
10182 `-mcond-move'
10183      Enable the use of conditional-move instructions (default).
10185      This switch is mainly for debugging the compiler and will likely
10186      be removed in a future version.
10188 `-mno-cond-move'
10189      Disable the use of conditional-move instructions.
10191      This switch is mainly for debugging the compiler and will likely
10192      be removed in a future version.
10194 `-mscc'
10195      Enable the use of conditional set instructions (default).
10197      This switch is mainly for debugging the compiler and will likely
10198      be removed in a future version.
10200 `-mno-scc'
10201      Disable the use of conditional set instructions.
10203      This switch is mainly for debugging the compiler and will likely
10204      be removed in a future version.
10206 `-mcond-exec'
10207      Enable the use of conditional execution (default).
10209      This switch is mainly for debugging the compiler and will likely
10210      be removed in a future version.
10212 `-mno-cond-exec'
10213      Disable the use of conditional execution.
10215      This switch is mainly for debugging the compiler and will likely
10216      be removed in a future version.
10218 `-mvliw-branch'
10219      Run a pass to pack branches into VLIW instructions (default).
10221      This switch is mainly for debugging the compiler and will likely
10222      be removed in a future version.
10224 `-mno-vliw-branch'
10225      Do not run a pass to pack branches into VLIW instructions.
10227      This switch is mainly for debugging the compiler and will likely
10228      be removed in a future version.
10230 `-mmulti-cond-exec'
10231      Enable optimization of `&&' and `||' in conditional execution
10232      (default).
10234      This switch is mainly for debugging the compiler and will likely
10235      be removed in a future version.
10237 `-mno-multi-cond-exec'
10238      Disable optimization of `&&' and `||' in conditional execution.
10240      This switch is mainly for debugging the compiler and will likely
10241      be removed in a future version.
10243 `-mnested-cond-exec'
10244      Enable nested conditional execution optimizations (default).
10246      This switch is mainly for debugging the compiler and will likely
10247      be removed in a future version.
10249 `-mno-nested-cond-exec'
10250      Disable nested conditional execution optimizations.
10252      This switch is mainly for debugging the compiler and will likely
10253      be removed in a future version.
10255 `-moptimize-membar'
10256      This switch removes redundant `membar' instructions from the
10257      compiler generated code.  It is enabled by default.
10259 `-mno-optimize-membar'
10260      This switch disables the automatic removal of redundant `membar'
10261      instructions from the generated code.
10263 `-mtomcat-stats'
10264      Cause gas to print out tomcat statistics.
10266 `-mcpu=CPU'
10267      Select the processor type for which to generate code.  Possible
10268      values are `frv', `fr550', `tomcat', `fr500', `fr450', `fr405',
10269      `fr400', `fr300' and `simple'.
10272 \x1f
10273 File: gcc.info,  Node: GNU/Linux Options,  Next: H8/300 Options,  Prev: FRV Options,  Up: Submodel Options
10275 3.17.12 GNU/Linux Options
10276 -------------------------
10278 These `-m' options are defined for GNU/Linux targets:
10280 `-mglibc'
10281      Use the GNU C library instead of uClibc.  This is the default
10282      except on `*-*-linux-*uclibc*' targets.
10284 `-muclibc'
10285      Use uClibc instead of the GNU C library.  This is the default on
10286      `*-*-linux-*uclibc*' targets.
10288 \x1f
10289 File: gcc.info,  Node: H8/300 Options,  Next: HPPA Options,  Prev: GNU/Linux Options,  Up: Submodel Options
10291 3.17.13 H8/300 Options
10292 ----------------------
10294 These `-m' options are defined for the H8/300 implementations:
10296 `-mrelax'
10297      Shorten some address references at link time, when possible; uses
10298      the linker option `-relax'.  *Note `ld' and the H8/300:
10299      (ld)H8/300, for a fuller description.
10301 `-mh'
10302      Generate code for the H8/300H.
10304 `-ms'
10305      Generate code for the H8S.
10307 `-mn'
10308      Generate code for the H8S and H8/300H in the normal mode.  This
10309      switch must be used either with `-mh' or `-ms'.
10311 `-ms2600'
10312      Generate code for the H8S/2600.  This switch must be used with
10313      `-ms'.
10315 `-mint32'
10316      Make `int' data 32 bits by default.
10318 `-malign-300'
10319      On the H8/300H and H8S, use the same alignment rules as for the
10320      H8/300.  The default for the H8/300H and H8S is to align longs and
10321      floats on 4 byte boundaries.  `-malign-300' causes them to be
10322      aligned on 2 byte boundaries.  This option has no effect on the
10323      H8/300.
10325 \x1f
10326 File: gcc.info,  Node: HPPA Options,  Next: i386 and x86-64 Options,  Prev: H8/300 Options,  Up: Submodel Options
10328 3.17.14 HPPA Options
10329 --------------------
10331 These `-m' options are defined for the HPPA family of computers:
10333 `-march=ARCHITECTURE-TYPE'
10334      Generate code for the specified architecture.  The choices for
10335      ARCHITECTURE-TYPE are `1.0' for PA 1.0, `1.1' for PA 1.1, and
10336      `2.0' for PA 2.0 processors.  Refer to `/usr/lib/sched.models' on
10337      an HP-UX system to determine the proper architecture option for
10338      your machine.  Code compiled for lower numbered architectures will
10339      run on higher numbered architectures, but not the other way around.
10341 `-mpa-risc-1-0'
10342 `-mpa-risc-1-1'
10343 `-mpa-risc-2-0'
10344      Synonyms for `-march=1.0', `-march=1.1', and `-march=2.0'
10345      respectively.
10347 `-mbig-switch'
10348      Generate code suitable for big switch tables.  Use this option
10349      only if the assembler/linker complain about out of range branches
10350      within a switch table.
10352 `-mjump-in-delay'
10353      Fill delay slots of function calls with unconditional jump
10354      instructions by modifying the return pointer for the function call
10355      to be the target of the conditional jump.
10357 `-mdisable-fpregs'
10358      Prevent floating point registers from being used in any manner.
10359      This is necessary for compiling kernels which perform lazy context
10360      switching of floating point registers.  If you use this option and
10361      attempt to perform floating point operations, the compiler will
10362      abort.
10364 `-mdisable-indexing'
10365      Prevent the compiler from using indexing address modes.  This
10366      avoids some rather obscure problems when compiling MIG generated
10367      code under MACH.
10369 `-mno-space-regs'
10370      Generate code that assumes the target has no space registers.
10371      This allows GCC to generate faster indirect calls and use unscaled
10372      index address modes.
10374      Such code is suitable for level 0 PA systems and kernels.
10376 `-mfast-indirect-calls'
10377      Generate code that assumes calls never cross space boundaries.
10378      This allows GCC to emit code which performs faster indirect calls.
10380      This option will not work in the presence of shared libraries or
10381      nested functions.
10383 `-mfixed-range=REGISTER-RANGE'
10384      Generate code treating the given register range as fixed registers.
10385      A fixed register is one that the register allocator can not use.
10386      This is useful when compiling kernel code.  A register range is
10387      specified as two registers separated by a dash.  Multiple register
10388      ranges can be specified separated by a comma.
10390 `-mlong-load-store'
10391      Generate 3-instruction load and store sequences as sometimes
10392      required by the HP-UX 10 linker.  This is equivalent to the `+k'
10393      option to the HP compilers.
10395 `-mportable-runtime'
10396      Use the portable calling conventions proposed by HP for ELF
10397      systems.
10399 `-mgas'
10400      Enable the use of assembler directives only GAS understands.
10402 `-mschedule=CPU-TYPE'
10403      Schedule code according to the constraints for the machine type
10404      CPU-TYPE.  The choices for CPU-TYPE are `700' `7100', `7100LC',
10405      `7200', `7300' and `8000'.  Refer to `/usr/lib/sched.models' on an
10406      HP-UX system to determine the proper scheduling option for your
10407      machine.  The default scheduling is `8000'.
10409 `-mlinker-opt'
10410      Enable the optimization pass in the HP-UX linker.  Note this makes
10411      symbolic debugging impossible.  It also triggers a bug in the
10412      HP-UX 8 and HP-UX 9 linkers in which they give bogus error
10413      messages when linking some programs.
10415 `-msoft-float'
10416      Generate output containing library calls for floating point.
10417      *Warning:* the requisite libraries are not available for all HPPA
10418      targets.  Normally the facilities of the machine's usual C
10419      compiler are used, but this cannot be done directly in
10420      cross-compilation.  You must make your own arrangements to provide
10421      suitable library functions for cross-compilation.
10423      `-msoft-float' changes the calling convention in the output file;
10424      therefore, it is only useful if you compile _all_ of a program with
10425      this option.  In particular, you need to compile `libgcc.a', the
10426      library that comes with GCC, with `-msoft-float' in order for this
10427      to work.
10429 `-msio'
10430      Generate the predefine, `_SIO', for server IO.  The default is
10431      `-mwsio'.  This generates the predefines, `__hp9000s700',
10432      `__hp9000s700__' and `_WSIO', for workstation IO.  These options
10433      are available under HP-UX and HI-UX.
10435 `-mgnu-ld'
10436      Use GNU ld specific options.  This passes `-shared' to ld when
10437      building a shared library.  It is the default when GCC is
10438      configured, explicitly or implicitly, with the GNU linker.  This
10439      option does not have any affect on which ld is called, it only
10440      changes what parameters are passed to that ld.  The ld that is
10441      called is determined by the `--with-ld' configure option, GCC's
10442      program search path, and finally by the user's `PATH'.  The linker
10443      used by GCC can be printed using `which `gcc
10444      -print-prog-name=ld`'.  This option is only available on the 64
10445      bit HP-UX GCC, i.e. configured with `hppa*64*-*-hpux*'.
10447 `-mhp-ld'
10448      Use HP ld specific options.  This passes `-b' to ld when building
10449      a shared library and passes `+Accept TypeMismatch' to ld on all
10450      links.  It is the default when GCC is configured, explicitly or
10451      implicitly, with the HP linker.  This option does not have any
10452      affect on which ld is called, it only changes what parameters are
10453      passed to that ld.  The ld that is called is determined by the
10454      `--with-ld' configure option, GCC's program search path, and
10455      finally by the user's `PATH'.  The linker used by GCC can be
10456      printed using `which `gcc -print-prog-name=ld`'.  This option is
10457      only available on the 64 bit HP-UX GCC, i.e. configured with
10458      `hppa*64*-*-hpux*'.
10460 `-mlong-calls'
10461      Generate code that uses long call sequences.  This ensures that a
10462      call is always able to reach linker generated stubs.  The default
10463      is to generate long calls only when the distance from the call
10464      site to the beginning of the function or translation unit, as the
10465      case may be, exceeds a predefined limit set by the branch type
10466      being used.  The limits for normal calls are 7,600,000 and 240,000
10467      bytes, respectively for the PA 2.0 and PA 1.X architectures.
10468      Sibcalls are always limited at 240,000 bytes.
10470      Distances are measured from the beginning of functions when using
10471      the `-ffunction-sections' option, or when using the `-mgas' and
10472      `-mno-portable-runtime' options together under HP-UX with the SOM
10473      linker.
10475      It is normally not desirable to use this option as it will degrade
10476      performance.  However, it may be useful in large applications,
10477      particularly when partial linking is used to build the application.
10479      The types of long calls used depends on the capabilities of the
10480      assembler and linker, and the type of code being generated.  The
10481      impact on systems that support long absolute calls, and long pic
10482      symbol-difference or pc-relative calls should be relatively small.
10483      However, an indirect call is used on 32-bit ELF systems in pic code
10484      and it is quite long.
10486 `-munix=UNIX-STD'
10487      Generate compiler predefines and select a startfile for the
10488      specified UNIX standard.  The choices for UNIX-STD are `93', `95'
10489      and `98'.  `93' is supported on all HP-UX versions.  `95' is
10490      available on HP-UX 10.10 and later.  `98' is available on HP-UX
10491      11.11 and later.  The default values are `93' for HP-UX 10.00,
10492      `95' for HP-UX 10.10 though to 11.00, and `98' for HP-UX 11.11 and
10493      later.
10495      `-munix=93' provides the same predefines as GCC 3.3 and 3.4.
10496      `-munix=95' provides additional predefines for `XOPEN_UNIX' and
10497      `_XOPEN_SOURCE_EXTENDED', and the startfile `unix95.o'.
10498      `-munix=98' provides additional predefines for `_XOPEN_UNIX',
10499      `_XOPEN_SOURCE_EXTENDED', `_INCLUDE__STDC_A1_SOURCE' and
10500      `_INCLUDE_XOPEN_SOURCE_500', and the startfile `unix98.o'.
10502      It is _important_ to note that this option changes the interfaces
10503      for various library routines.  It also affects the operational
10504      behavior of the C library.  Thus, _extreme_ care is needed in
10505      using this option.
10507      Library code that is intended to operate with more than one UNIX
10508      standard must test, set and restore the variable
10509      __XPG4_EXTENDED_MASK as appropriate.  Most GNU software doesn't
10510      provide this capability.
10512 `-nolibdld'
10513      Suppress the generation of link options to search libdld.sl when
10514      the `-static' option is specified on HP-UX 10 and later.
10516 `-static'
10517      The HP-UX implementation of setlocale in libc has a dependency on
10518      libdld.sl.  There isn't an archive version of libdld.sl.  Thus,
10519      when the `-static' option is specified, special link options are
10520      needed to resolve this dependency.
10522      On HP-UX 10 and later, the GCC driver adds the necessary options to
10523      link with libdld.sl when the `-static' option is specified.  This
10524      causes the resulting binary to be dynamic.  On the 64-bit port,
10525      the linkers generate dynamic binaries by default in any case.  The
10526      `-nolibdld' option can be used to prevent the GCC driver from
10527      adding these link options.
10529 `-threads'
10530      Add support for multithreading with the "dce thread" library under
10531      HP-UX.  This option sets flags for both the preprocessor and
10532      linker.
10534 \x1f
10535 File: gcc.info,  Node: i386 and x86-64 Options,  Next: i386 and x86-64 Windows Options,  Prev: HPPA Options,  Up: Submodel Options
10537 3.17.15 Intel 386 and AMD x86-64 Options
10538 ----------------------------------------
10540 These `-m' options are defined for the i386 and x86-64 family of
10541 computers:
10543 `-mtune=CPU-TYPE'
10544      Tune to CPU-TYPE everything applicable about the generated code,
10545      except for the ABI and the set of available instructions.  The
10546      choices for CPU-TYPE are:
10547     _generic_
10548           Produce code optimized for the most common IA32/AMD64/EM64T
10549           processors.  If you know the CPU on which your code will run,
10550           then you should use the corresponding `-mtune' option instead
10551           of `-mtune=generic'.  But, if you do not know exactly what
10552           CPU users of your application will have, then you should use
10553           this option.
10555           As new processors are deployed in the marketplace, the
10556           behavior of this option will change.  Therefore, if you
10557           upgrade to a newer version of GCC, the code generated option
10558           will change to reflect the processors that were most common
10559           when that version of GCC was released.
10561           There is no `-march=generic' option because `-march'
10562           indicates the instruction set the compiler can use, and there
10563           is no generic instruction set applicable to all processors.
10564           In contrast, `-mtune' indicates the processor (or, in this
10565           case, collection of processors) for which the code is
10566           optimized.
10568     _native_
10569           This selects the CPU to tune for at compilation time by
10570           determining the processor type of the compiling machine.
10571           Using `-mtune=native' will produce code optimized for the
10572           local machine under the constraints of the selected
10573           instruction set.  Using `-march=native' will enable all
10574           instruction subsets supported by the local machine (hence the
10575           result might not run on different machines).
10577     _i386_
10578           Original Intel's i386 CPU.
10580     _i486_
10581           Intel's i486 CPU.  (No scheduling is implemented for this
10582           chip.)
10584     _i586, pentium_
10585           Intel Pentium CPU with no MMX support.
10587     _pentium-mmx_
10588           Intel PentiumMMX CPU based on Pentium core with MMX
10589           instruction set support.
10591     _pentiumpro_
10592           Intel PentiumPro CPU.
10594     _i686_
10595           Same as `generic', but when used as `march' option, PentiumPro
10596           instruction set will be used, so the code will run on all
10597           i686 family chips.
10599     _pentium2_
10600           Intel Pentium2 CPU based on PentiumPro core with MMX
10601           instruction set support.
10603     _pentium3, pentium3m_
10604           Intel Pentium3 CPU based on PentiumPro core with MMX and SSE
10605           instruction set support.
10607     _pentium-m_
10608           Low power version of Intel Pentium3 CPU with MMX, SSE and
10609           SSE2 instruction set support.  Used by Centrino notebooks.
10611     _pentium4, pentium4m_
10612           Intel Pentium4 CPU with MMX, SSE and SSE2 instruction set
10613           support.
10615     _prescott_
10616           Improved version of Intel Pentium4 CPU with MMX, SSE, SSE2
10617           and SSE3 instruction set support.
10619     _nocona_
10620           Improved version of Intel Pentium4 CPU with 64-bit
10621           extensions, MMX, SSE, SSE2 and SSE3 instruction set support.
10623     _core2_
10624           Intel Core2 CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3
10625           and SSSE3 instruction set support.
10627     _k6_
10628           AMD K6 CPU with MMX instruction set support.
10630     _k6-2, k6-3_
10631           Improved versions of AMD K6 CPU with MMX and 3dNOW!
10632           instruction set support.
10634     _athlon, athlon-tbird_
10635           AMD Athlon CPU with MMX, 3dNOW!, enhanced 3dNOW! and SSE
10636           prefetch instructions support.
10638     _athlon-4, athlon-xp, athlon-mp_
10639           Improved AMD Athlon CPU with MMX, 3dNOW!, enhanced 3dNOW! and
10640           full SSE instruction set support.
10642     _k8, opteron, athlon64, athlon-fx_
10643           AMD K8 core based CPUs with x86-64 instruction set support.
10644           (This supersets MMX, SSE, SSE2, 3dNOW!, enhanced 3dNOW! and
10645           64-bit instruction set extensions.)
10647     _k8-sse3, opteron-sse3, athlon64-sse3_
10648           Improved versions of k8, opteron and athlon64 with SSE3
10649           instruction set support.
10651     _amdfam10, barcelona_
10652           AMD Family 10h core based CPUs with x86-64 instruction set
10653           support.  (This supersets MMX, SSE, SSE2, SSE3, SSE4A,
10654           3dNOW!, enhanced 3dNOW!, ABM and 64-bit instruction set
10655           extensions.)
10657     _winchip-c6_
10658           IDT Winchip C6 CPU, dealt in same way as i486 with additional
10659           MMX instruction set support.
10661     _winchip2_
10662           IDT Winchip2 CPU, dealt in same way as i486 with additional
10663           MMX and 3dNOW!  instruction set support.
10665     _c3_
10666           Via C3 CPU with MMX and 3dNOW! instruction set support.  (No
10667           scheduling is implemented for this chip.)
10669     _c3-2_
10670           Via C3-2 CPU with MMX and SSE instruction set support.  (No
10671           scheduling is implemented for this chip.)
10673     _geode_
10674           Embedded AMD CPU with MMX and 3dNOW! instruction set support.
10676      While picking a specific CPU-TYPE will schedule things
10677      appropriately for that particular chip, the compiler will not
10678      generate any code that does not run on the i386 without the
10679      `-march=CPU-TYPE' option being used.
10681 `-march=CPU-TYPE'
10682      Generate instructions for the machine type CPU-TYPE.  The choices
10683      for CPU-TYPE are the same as for `-mtune'.  Moreover, specifying
10684      `-march=CPU-TYPE' implies `-mtune=CPU-TYPE'.
10686 `-mcpu=CPU-TYPE'
10687      A deprecated synonym for `-mtune'.
10689 `-mfpmath=UNIT'
10690      Generate floating point arithmetics for selected unit UNIT.  The
10691      choices for UNIT are:
10693     `387'
10694           Use the standard 387 floating point coprocessor present
10695           majority of chips and emulated otherwise.  Code compiled with
10696           this option will run almost everywhere.  The temporary
10697           results are computed in 80bit precision instead of precision
10698           specified by the type resulting in slightly different results
10699           compared to most of other chips.  See `-ffloat-store' for
10700           more detailed description.
10702           This is the default choice for i386 compiler.
10704     `sse'
10705           Use scalar floating point instructions present in the SSE
10706           instruction set.  This instruction set is supported by
10707           Pentium3 and newer chips, in the AMD line by Athlon-4,
10708           Athlon-xp and Athlon-mp chips.  The earlier version of SSE
10709           instruction set supports only single precision arithmetics,
10710           thus the double and extended precision arithmetics is still
10711           done using 387.  Later version, present only in Pentium4 and
10712           the future AMD x86-64 chips supports double precision
10713           arithmetics too.
10715           For the i386 compiler, you need to use `-march=CPU-TYPE',
10716           `-msse' or `-msse2' switches to enable SSE extensions and
10717           make this option effective.  For the x86-64 compiler, these
10718           extensions are enabled by default.
10720           The resulting code should be considerably faster in the
10721           majority of cases and avoid the numerical instability
10722           problems of 387 code, but may break some existing code that
10723           expects temporaries to be 80bit.
10725           This is the default choice for the x86-64 compiler.
10727     `sse,387'
10728     `sse+387'
10729     `both'
10730           Attempt to utilize both instruction sets at once.  This
10731           effectively double the amount of available registers and on
10732           chips with separate execution units for 387 and SSE the
10733           execution resources too.  Use this option with care, as it is
10734           still experimental, because the GCC register allocator does
10735           not model separate functional units well resulting in
10736           instable performance.
10738 `-masm=DIALECT'
10739      Output asm instructions using selected DIALECT.  Supported choices
10740      are `intel' or `att' (the default one).  Darwin does not support
10741      `intel'.
10743 `-mieee-fp'
10744 `-mno-ieee-fp'
10745      Control whether or not the compiler uses IEEE floating point
10746      comparisons.  These handle correctly the case where the result of a
10747      comparison is unordered.
10749 `-msoft-float'
10750      Generate output containing library calls for floating point.
10751      *Warning:* the requisite libraries are not part of GCC.  Normally
10752      the facilities of the machine's usual C compiler are used, but
10753      this can't be done directly in cross-compilation.  You must make
10754      your own arrangements to provide suitable library functions for
10755      cross-compilation.
10757      On machines where a function returns floating point results in the
10758      80387 register stack, some floating point opcodes may be emitted
10759      even if `-msoft-float' is used.
10761 `-mno-fp-ret-in-387'
10762      Do not use the FPU registers for return values of functions.
10764      The usual calling convention has functions return values of types
10765      `float' and `double' in an FPU register, even if there is no FPU.
10766      The idea is that the operating system should emulate an FPU.
10768      The option `-mno-fp-ret-in-387' causes such values to be returned
10769      in ordinary CPU registers instead.
10771 `-mno-fancy-math-387'
10772      Some 387 emulators do not support the `sin', `cos' and `sqrt'
10773      instructions for the 387.  Specify this option to avoid generating
10774      those instructions.  This option is the default on FreeBSD,
10775      OpenBSD and NetBSD.  This option is overridden when `-march'
10776      indicates that the target cpu will always have an FPU and so the
10777      instruction will not need emulation.  As of revision 2.6.1, these
10778      instructions are not generated unless you also use the
10779      `-funsafe-math-optimizations' switch.
10781 `-malign-double'
10782 `-mno-align-double'
10783      Control whether GCC aligns `double', `long double', and `long
10784      long' variables on a two word boundary or a one word boundary.
10785      Aligning `double' variables on a two word boundary will produce
10786      code that runs somewhat faster on a `Pentium' at the expense of
10787      more memory.
10789      On x86-64, `-malign-double' is enabled by default.
10791      *Warning:* if you use the `-malign-double' switch, structures
10792      containing the above types will be aligned differently than the
10793      published application binary interface specifications for the 386
10794      and will not be binary compatible with structures in code compiled
10795      without that switch.
10797 `-m96bit-long-double'
10798 `-m128bit-long-double'
10799      These switches control the size of `long double' type.  The i386
10800      application binary interface specifies the size to be 96 bits, so
10801      `-m96bit-long-double' is the default in 32 bit mode.
10803      Modern architectures (Pentium and newer) would prefer `long double'
10804      to be aligned to an 8 or 16 byte boundary.  In arrays or structures
10805      conforming to the ABI, this would not be possible.  So specifying a
10806      `-m128bit-long-double' will align `long double' to a 16 byte
10807      boundary by padding the `long double' with an additional 32 bit
10808      zero.
10810      In the x86-64 compiler, `-m128bit-long-double' is the default
10811      choice as its ABI specifies that `long double' is to be aligned on
10812      16 byte boundary.
10814      Notice that neither of these options enable any extra precision
10815      over the x87 standard of 80 bits for a `long double'.
10817      *Warning:* if you override the default value for your target ABI,
10818      the structures and arrays containing `long double' variables will
10819      change their size as well as function calling convention for
10820      function taking `long double' will be modified.  Hence they will
10821      not be binary compatible with arrays or structures in code
10822      compiled without that switch.
10824 `-mlarge-data-threshold=NUMBER'
10825      When `-mcmodel=medium' is specified, the data greater than
10826      THRESHOLD are placed in large data section.  This value must be the
10827      same across all object linked into the binary and defaults to
10828      65535.
10830 `-mrtd'
10831      Use a different function-calling convention, in which functions
10832      that take a fixed number of arguments return with the `ret' NUM
10833      instruction, which pops their arguments while returning.  This
10834      saves one instruction in the caller since there is no need to pop
10835      the arguments there.
10837      You can specify that an individual function is called with this
10838      calling sequence with the function attribute `stdcall'.  You can
10839      also override the `-mrtd' option by using the function attribute
10840      `cdecl'.  *Note Function Attributes::.
10842      *Warning:* this calling convention is incompatible with the one
10843      normally used on Unix, so you cannot use it if you need to call
10844      libraries compiled with the Unix compiler.
10846      Also, you must provide function prototypes for all functions that
10847      take variable numbers of arguments (including `printf'); otherwise
10848      incorrect code will be generated for calls to those functions.
10850      In addition, seriously incorrect code will result if you call a
10851      function with too many arguments.  (Normally, extra arguments are
10852      harmlessly ignored.)
10854 `-mregparm=NUM'
10855      Control how many registers are used to pass integer arguments.  By
10856      default, no registers are used to pass arguments, and at most 3
10857      registers can be used.  You can control this behavior for a
10858      specific function by using the function attribute `regparm'.
10859      *Note Function Attributes::.
10861      *Warning:* if you use this switch, and NUM is nonzero, then you
10862      must build all modules with the same value, including any
10863      libraries.  This includes the system libraries and startup modules.
10865 `-msseregparm'
10866      Use SSE register passing conventions for float and double arguments
10867      and return values.  You can control this behavior for a specific
10868      function by using the function attribute `sseregparm'.  *Note
10869      Function Attributes::.
10871      *Warning:* if you use this switch then you must build all modules
10872      with the same value, including any libraries.  This includes the
10873      system libraries and startup modules.
10875 `-mpc32'
10876 `-mpc64'
10877 `-mpc80'
10878      Set 80387 floating-point precision to 32, 64 or 80 bits.  When
10879      `-mpc32' is specified, the significands of results of
10880      floating-point operations are rounded to 24 bits (single
10881      precision); `-mpc64' rounds the significands of results of
10882      floating-point operations to 53 bits (double precision) and
10883      `-mpc80' rounds the significands of results of floating-point
10884      operations to 64 bits (extended double precision), which is the
10885      default.  When this option is used, floating-point operations in
10886      higher precisions are not available to the programmer without
10887      setting the FPU control word explicitly.
10889      Setting the rounding of floating-point operations to less than the
10890      default 80 bits can speed some programs by 2% or more.  Note that
10891      some mathematical libraries assume that extended precision (80
10892      bit) floating-point operations are enabled by default; routines in
10893      such libraries could suffer significant loss of accuracy,
10894      typically through so-called "catastrophic cancellation", when this
10895      option is used to set the precision to less than extended
10896      precision.
10898 `-mstackrealign'
10899      Realign the stack at entry.  On the Intel x86, the `-mstackrealign'
10900      option will generate an alternate prologue and epilogue that
10901      realigns the runtime stack if necessary.  This supports mixing
10902      legacy codes that keep a 4-byte aligned stack with modern codes
10903      that keep a 16-byte stack for SSE compatibility.  See also the
10904      attribute `force_align_arg_pointer', applicable to individual
10905      functions.
10907 `-mpreferred-stack-boundary=NUM'
10908      Attempt to keep the stack boundary aligned to a 2 raised to NUM
10909      byte boundary.  If `-mpreferred-stack-boundary' is not specified,
10910      the default is 4 (16 bytes or 128 bits).
10912 `-mincoming-stack-boundary=NUM'
10913      Assume the incoming stack is aligned to a 2 raised to NUM byte
10914      boundary.  If `-mincoming-stack-boundary' is not specified, the
10915      one specified by `-mpreferred-stack-boundary' will be used.
10917      On Pentium and PentiumPro, `double' and `long double' values
10918      should be aligned to an 8 byte boundary (see `-malign-double') or
10919      suffer significant run time performance penalties.  On Pentium
10920      III, the Streaming SIMD Extension (SSE) data type `__m128' may not
10921      work properly if it is not 16 byte aligned.
10923      To ensure proper alignment of this values on the stack, the stack
10924      boundary must be as aligned as that required by any value stored
10925      on the stack.  Further, every function must be generated such that
10926      it keeps the stack aligned.  Thus calling a function compiled with
10927      a higher preferred stack boundary from a function compiled with a
10928      lower preferred stack boundary will most likely misalign the
10929      stack.  It is recommended that libraries that use callbacks always
10930      use the default setting.
10932      This extra alignment does consume extra stack space, and generally
10933      increases code size.  Code that is sensitive to stack space usage,
10934      such as embedded systems and operating system kernels, may want to
10935      reduce the preferred alignment to `-mpreferred-stack-boundary=2'.
10937 `-mmmx'
10938 `-mno-mmx'
10939 `-msse'
10940 `-mno-sse'
10941 `-msse2'
10942 `-mno-sse2'
10943 `-msse3'
10944 `-mno-sse3'
10945 `-mssse3'
10946 `-mno-ssse3'
10947 `-msse4.1'
10948 `-mno-sse4.1'
10949 `-msse4.2'
10950 `-mno-sse4.2'
10951 `-msse4'
10952 `-mno-sse4'
10953 `-mavx'
10954 `-mno-avx'
10955 `-maes'
10956 `-mno-aes'
10957 `-mpclmul'
10958 `-mno-pclmul'
10959 `-msse4a'
10960 `-mno-sse4a'
10961 `-msse5'
10962 `-mno-sse5'
10963 `-m3dnow'
10964 `-mno-3dnow'
10965 `-mpopcnt'
10966 `-mno-popcnt'
10967 `-mabm'
10968 `-mno-abm'
10969      These switches enable or disable the use of instructions in the
10970      MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, AVX, AES, PCLMUL, SSE4A,
10971      SSE5, ABM or 3DNow! extended instruction sets.  These extensions
10972      are also available as built-in functions: see *Note X86 Built-in
10973      Functions::, for details of the functions enabled and disabled by
10974      these switches.
10976      To have SSE/SSE2 instructions generated automatically from
10977      floating-point code (as opposed to 387 instructions), see
10978      `-mfpmath=sse'.
10980      GCC depresses SSEx instructions when `-mavx' is used. Instead, it
10981      generates new AVX instructions or AVX equivalence for all SSEx
10982      instructions when needed.
10984      These options will enable GCC to use these extended instructions in
10985      generated code, even without `-mfpmath=sse'.  Applications which
10986      perform runtime CPU detection must compile separate files for each
10987      supported architecture, using the appropriate flags.  In
10988      particular, the file containing the CPU detection code should be
10989      compiled without these options.
10991 `-mcld'
10992      This option instructs GCC to emit a `cld' instruction in the
10993      prologue of functions that use string instructions.  String
10994      instructions depend on the DF flag to select between autoincrement
10995      or autodecrement mode.  While the ABI specifies the DF flag to be
10996      cleared on function entry, some operating systems violate this
10997      specification by not clearing the DF flag in their exception
10998      dispatchers.  The exception handler can be invoked with the DF flag
10999      set which leads to wrong direction mode, when string instructions
11000      are used.  This option can be enabled by default on 32-bit x86
11001      targets by configuring GCC with the `--enable-cld' configure
11002      option.  Generation of `cld' instructions can be suppressed with
11003      the `-mno-cld' compiler option in this case.
11005 `-mcx16'
11006      This option will enable GCC to use CMPXCHG16B instruction in
11007      generated code.  CMPXCHG16B allows for atomic operations on
11008      128-bit double quadword (or oword) data types.  This is useful for
11009      high resolution counters that could be updated by multiple
11010      processors (or cores).  This instruction is generated as part of
11011      atomic built-in functions: see *Note Atomic Builtins:: for details.
11013 `-msahf'
11014      This option will enable GCC to use SAHF instruction in generated
11015      64-bit code.  Early Intel CPUs with Intel 64 lacked LAHF and SAHF
11016      instructions supported by AMD64 until introduction of Pentium 4 G1
11017      step in December 2005.  LAHF and SAHF are load and store
11018      instructions, respectively, for certain status flags.  In 64-bit
11019      mode, SAHF instruction is used to optimize `fmod', `drem' or
11020      `remainder' built-in functions: see *Note Other Builtins:: for
11021      details.
11023 `-mrecip'
11024      This option will enable GCC to use RCPSS and RSQRTSS instructions
11025      (and their vectorized variants RCPPS and RSQRTPS) with an
11026      additional Newton-Raphson step to increase precision instead of
11027      DIVSS and SQRTSS (and their vectorized variants) for single
11028      precision floating point arguments.  These instructions are
11029      generated only when `-funsafe-math-optimizations' is enabled
11030      together with `-finite-math-only' and `-fno-trapping-math'.  Note
11031      that while the throughput of the sequence is higher than the
11032      throughput of the non-reciprocal instruction, the precision of the
11033      sequence can be decreased by up to 2 ulp (i.e. the inverse of 1.0
11034      equals 0.99999994).
11036 `-mveclibabi=TYPE'
11037      Specifies the ABI type to use for vectorizing intrinsics using an
11038      external library.  Supported types are `svml' for the Intel short
11039      vector math library and `acml' for the AMD math core library style
11040      of interfacing.  GCC will currently emit calls to `vmldExp2',
11041      `vmldLn2', `vmldLog102', `vmldLog102', `vmldPow2', `vmldTanh2',
11042      `vmldTan2', `vmldAtan2', `vmldAtanh2', `vmldCbrt2', `vmldSinh2',
11043      `vmldSin2', `vmldAsinh2', `vmldAsin2', `vmldCosh2', `vmldCos2',
11044      `vmldAcosh2', `vmldAcos2', `vmlsExp4', `vmlsLn4', `vmlsLog104',
11045      `vmlsLog104', `vmlsPow4', `vmlsTanh4', `vmlsTan4', `vmlsAtan4',
11046      `vmlsAtanh4', `vmlsCbrt4', `vmlsSinh4', `vmlsSin4', `vmlsAsinh4',
11047      `vmlsAsin4', `vmlsCosh4', `vmlsCos4', `vmlsAcosh4' and `vmlsAcos4'
11048      for corresponding function type when `-mveclibabi=svml' is used
11049      and `__vrd2_sin', `__vrd2_cos', `__vrd2_exp', `__vrd2_log',
11050      `__vrd2_log2', `__vrd2_log10', `__vrs4_sinf', `__vrs4_cosf',
11051      `__vrs4_expf', `__vrs4_logf', `__vrs4_log2f', `__vrs4_log10f' and
11052      `__vrs4_powf' for corresponding function type when
11053      `-mveclibabi=acml' is used. Both `-ftree-vectorize' and
11054      `-funsafe-math-optimizations' have to be enabled. A SVML or ACML
11055      ABI compatible library will have to be specified at link time.
11057 `-mpush-args'
11058 `-mno-push-args'
11059      Use PUSH operations to store outgoing parameters.  This method is
11060      shorter and usually equally fast as method using SUB/MOV
11061      operations and is enabled by default.  In some cases disabling it
11062      may improve performance because of improved scheduling and reduced
11063      dependencies.
11065 `-maccumulate-outgoing-args'
11066      If enabled, the maximum amount of space required for outgoing
11067      arguments will be computed in the function prologue.  This is
11068      faster on most modern CPUs because of reduced dependencies,
11069      improved scheduling and reduced stack usage when preferred stack
11070      boundary is not equal to 2.  The drawback is a notable increase in
11071      code size.  This switch implies `-mno-push-args'.
11073 `-mthreads'
11074      Support thread-safe exception handling on `Mingw32'.  Code that
11075      relies on thread-safe exception handling must compile and link all
11076      code with the `-mthreads' option.  When compiling, `-mthreads'
11077      defines `-D_MT'; when linking, it links in a special thread helper
11078      library `-lmingwthrd' which cleans up per thread exception
11079      handling data.
11081 `-mno-align-stringops'
11082      Do not align destination of inlined string operations.  This
11083      switch reduces code size and improves performance in case the
11084      destination is already aligned, but GCC doesn't know about it.
11086 `-minline-all-stringops'
11087      By default GCC inlines string operations only when destination is
11088      known to be aligned at least to 4 byte boundary.  This enables
11089      more inlining, increase code size, but may improve performance of
11090      code that depends on fast memcpy, strlen and memset for short
11091      lengths.
11093 `-minline-stringops-dynamically'
11094      For string operation of unknown size, inline runtime checks so for
11095      small blocks inline code is used, while for large blocks library
11096      call is used.
11098 `-mstringop-strategy=ALG'
11099      Overwrite internal decision heuristic about particular algorithm
11100      to inline string operation with.  The allowed values are
11101      `rep_byte', `rep_4byte', `rep_8byte' for expanding using i386
11102      `rep' prefix of specified size, `byte_loop', `loop',
11103      `unrolled_loop' for expanding inline loop, `libcall' for always
11104      expanding library call.
11106 `-momit-leaf-frame-pointer'
11107      Don't keep the frame pointer in a register for leaf functions.
11108      This avoids the instructions to save, set up and restore frame
11109      pointers and makes an extra register available in leaf functions.
11110      The option `-fomit-frame-pointer' removes the frame pointer for
11111      all functions which might make debugging harder.
11113 `-mtls-direct-seg-refs'
11114 `-mno-tls-direct-seg-refs'
11115      Controls whether TLS variables may be accessed with offsets from
11116      the TLS segment register (`%gs' for 32-bit, `%fs' for 64-bit), or
11117      whether the thread base pointer must be added.  Whether or not this
11118      is legal depends on the operating system, and whether it maps the
11119      segment to cover the entire TLS area.
11121      For systems that use GNU libc, the default is on.
11123 `-mfused-madd'
11124 `-mno-fused-madd'
11125      Enable automatic generation of fused floating point multiply-add
11126      instructions if the ISA supports such instructions.  The
11127      -mfused-madd option is on by default.  The fused multiply-add
11128      instructions have a different rounding behavior compared to
11129      executing a multiply followed by an add.
11131 `-msse2avx'
11132 `-mno-sse2avx'
11133      Specify that the assembler should encode SSE instructions with VEX
11134      prefix.  The option `-mavx' turns this on by default.
11136  These `-m' switches are supported in addition to the above on AMD
11137 x86-64 processors in 64-bit environments.
11139 `-m32'
11140 `-m64'
11141      Generate code for a 32-bit or 64-bit environment.  The 32-bit
11142      environment sets int, long and pointer to 32 bits and generates
11143      code that runs on any i386 system.  The 64-bit environment sets
11144      int to 32 bits and long and pointer to 64 bits and generates code
11145      for AMD's x86-64 architecture. For darwin only the -m64 option
11146      turns off the `-fno-pic' and `-mdynamic-no-pic' options.
11148 `-mno-red-zone'
11149      Do not use a so called red zone for x86-64 code.  The red zone is
11150      mandated by the x86-64 ABI, it is a 128-byte area beyond the
11151      location of the stack pointer that will not be modified by signal
11152      or interrupt handlers and therefore can be used for temporary data
11153      without adjusting the stack pointer.  The flag `-mno-red-zone'
11154      disables this red zone.
11156 `-mcmodel=small'
11157      Generate code for the small code model: the program and its
11158      symbols must be linked in the lower 2 GB of the address space.
11159      Pointers are 64 bits.  Programs can be statically or dynamically
11160      linked.  This is the default code model.
11162 `-mcmodel=kernel'
11163      Generate code for the kernel code model.  The kernel runs in the
11164      negative 2 GB of the address space.  This model has to be used for
11165      Linux kernel code.
11167 `-mcmodel=medium'
11168      Generate code for the medium model: The program is linked in the
11169      lower 2 GB of the address space.  Small symbols are also placed
11170      there.  Symbols with sizes larger than `-mlarge-data-threshold'
11171      are put into large data or bss sections and can be located above
11172      2GB.  Programs can be statically or dynamically linked.
11174 `-mcmodel=large'
11175      Generate code for the large model: This model makes no assumptions
11176      about addresses and sizes of sections.
11178 \x1f
11179 File: gcc.info,  Node: IA-64 Options,  Next: M32C Options,  Prev: i386 and x86-64 Windows Options,  Up: Submodel Options
11181 3.17.16 IA-64 Options
11182 ---------------------
11184 These are the `-m' options defined for the Intel IA-64 architecture.
11186 `-mbig-endian'
11187      Generate code for a big endian target.  This is the default for
11188      HP-UX.
11190 `-mlittle-endian'
11191      Generate code for a little endian target.  This is the default for
11192      AIX5 and GNU/Linux.
11194 `-mgnu-as'
11195 `-mno-gnu-as'
11196      Generate (or don't) code for the GNU assembler.  This is the
11197      default.
11199 `-mgnu-ld'
11200 `-mno-gnu-ld'
11201      Generate (or don't) code for the GNU linker.  This is the default.
11203 `-mno-pic'
11204      Generate code that does not use a global pointer register.  The
11205      result is not position independent code, and violates the IA-64
11206      ABI.
11208 `-mvolatile-asm-stop'
11209 `-mno-volatile-asm-stop'
11210      Generate (or don't) a stop bit immediately before and after
11211      volatile asm statements.
11213 `-mregister-names'
11214 `-mno-register-names'
11215      Generate (or don't) `in', `loc', and `out' register names for the
11216      stacked registers.  This may make assembler output more readable.
11218 `-mno-sdata'
11219 `-msdata'
11220      Disable (or enable) optimizations that use the small data section.
11221      This may be useful for working around optimizer bugs.
11223 `-mconstant-gp'
11224      Generate code that uses a single constant global pointer value.
11225      This is useful when compiling kernel code.
11227 `-mauto-pic'
11228      Generate code that is self-relocatable.  This implies
11229      `-mconstant-gp'.  This is useful when compiling firmware code.
11231 `-minline-float-divide-min-latency'
11232      Generate code for inline divides of floating point values using
11233      the minimum latency algorithm.
11235 `-minline-float-divide-max-throughput'
11236      Generate code for inline divides of floating point values using
11237      the maximum throughput algorithm.
11239 `-minline-int-divide-min-latency'
11240      Generate code for inline divides of integer values using the
11241      minimum latency algorithm.
11243 `-minline-int-divide-max-throughput'
11244      Generate code for inline divides of integer values using the
11245      maximum throughput algorithm.
11247 `-minline-sqrt-min-latency'
11248      Generate code for inline square roots using the minimum latency
11249      algorithm.
11251 `-minline-sqrt-max-throughput'
11252      Generate code for inline square roots using the maximum throughput
11253      algorithm.
11255 `-mno-dwarf2-asm'
11256 `-mdwarf2-asm'
11257      Don't (or do) generate assembler code for the DWARF2 line number
11258      debugging info.  This may be useful when not using the GNU
11259      assembler.
11261 `-mearly-stop-bits'
11262 `-mno-early-stop-bits'
11263      Allow stop bits to be placed earlier than immediately preceding the
11264      instruction that triggered the stop bit.  This can improve
11265      instruction scheduling, but does not always do so.
11267 `-mfixed-range=REGISTER-RANGE'
11268      Generate code treating the given register range as fixed registers.
11269      A fixed register is one that the register allocator can not use.
11270      This is useful when compiling kernel code.  A register range is
11271      specified as two registers separated by a dash.  Multiple register
11272      ranges can be specified separated by a comma.
11274 `-mtls-size=TLS-SIZE'
11275      Specify bit size of immediate TLS offsets.  Valid values are 14,
11276      22, and 64.
11278 `-mtune=CPU-TYPE'
11279      Tune the instruction scheduling for a particular CPU, Valid values
11280      are itanium, itanium1, merced, itanium2, and mckinley.
11282 `-mt'
11283 `-pthread'
11284      Add support for multithreading using the POSIX threads library.
11285      This option sets flags for both the preprocessor and linker.  It
11286      does not affect the thread safety of object code produced by the
11287      compiler or that of libraries supplied with it.  These are HP-UX
11288      specific flags.
11290 `-milp32'
11291 `-mlp64'
11292      Generate code for a 32-bit or 64-bit environment.  The 32-bit
11293      environment sets int, long and pointer to 32 bits.  The 64-bit
11294      environment sets int to 32 bits and long and pointer to 64 bits.
11295      These are HP-UX specific flags.
11297 `-mno-sched-br-data-spec'
11298 `-msched-br-data-spec'
11299      (Dis/En)able data speculative scheduling before reload.  This will
11300      result in generation of the ld.a instructions and the
11301      corresponding check instructions (ld.c / chk.a).  The default is
11302      'disable'.
11304 `-msched-ar-data-spec'
11305 `-mno-sched-ar-data-spec'
11306      (En/Dis)able data speculative scheduling after reload.  This will
11307      result in generation of the ld.a instructions and the
11308      corresponding check instructions (ld.c / chk.a).  The default is
11309      'enable'.
11311 `-mno-sched-control-spec'
11312 `-msched-control-spec'
11313      (Dis/En)able control speculative scheduling.  This feature is
11314      available only during region scheduling (i.e. before reload).
11315      This will result in generation of the ld.s instructions and the
11316      corresponding check instructions chk.s .  The default is 'disable'.
11318 `-msched-br-in-data-spec'
11319 `-mno-sched-br-in-data-spec'
11320      (En/Dis)able speculative scheduling of the instructions that are
11321      dependent on the data speculative loads before reload.  This is
11322      effective only with `-msched-br-data-spec' enabled.  The default
11323      is 'enable'.
11325 `-msched-ar-in-data-spec'
11326 `-mno-sched-ar-in-data-spec'
11327      (En/Dis)able speculative scheduling of the instructions that are
11328      dependent on the data speculative loads after reload.  This is
11329      effective only with `-msched-ar-data-spec' enabled.  The default
11330      is 'enable'.
11332 `-msched-in-control-spec'
11333 `-mno-sched-in-control-spec'
11334      (En/Dis)able speculative scheduling of the instructions that are
11335      dependent on the control speculative loads.  This is effective
11336      only with `-msched-control-spec' enabled.  The default is 'enable'.
11338 `-msched-ldc'
11339 `-mno-sched-ldc'
11340      (En/Dis)able use of simple data speculation checks ld.c .  If
11341      disabled, only chk.a instructions will be emitted to check data
11342      speculative loads.  The default is 'enable'.
11344 `-mno-sched-control-ldc'
11345 `-msched-control-ldc'
11346      (Dis/En)able use of ld.c instructions to check control speculative
11347      loads.  If enabled, in case of control speculative load with no
11348      speculatively scheduled dependent instructions this load will be
11349      emitted as ld.sa and ld.c will be used to check it.  The default
11350      is 'disable'.
11352 `-mno-sched-spec-verbose'
11353 `-msched-spec-verbose'
11354      (Dis/En)able printing of the information about speculative motions.
11356 `-mno-sched-prefer-non-data-spec-insns'
11357 `-msched-prefer-non-data-spec-insns'
11358      If enabled, data speculative instructions will be chosen for
11359      schedule only if there are no other choices at the moment.  This
11360      will make the use of the data speculation much more conservative.
11361      The default is 'disable'.
11363 `-mno-sched-prefer-non-control-spec-insns'
11364 `-msched-prefer-non-control-spec-insns'
11365      If enabled, control speculative instructions will be chosen for
11366      schedule only if there are no other choices at the moment.  This
11367      will make the use of the control speculation much more
11368      conservative.  The default is 'disable'.
11370 `-mno-sched-count-spec-in-critical-path'
11371 `-msched-count-spec-in-critical-path'
11372      If enabled, speculative dependencies will be considered during
11373      computation of the instructions priorities.  This will make the
11374      use of the speculation a bit more conservative.  The default is
11375      'disable'.
11378 \x1f
11379 File: gcc.info,  Node: M32C Options,  Next: M32R/D Options,  Prev: IA-64 Options,  Up: Submodel Options
11381 3.17.17 M32C Options
11382 --------------------
11384 `-mcpu=NAME'
11385      Select the CPU for which code is generated.  NAME may be one of
11386      `r8c' for the R8C/Tiny series, `m16c' for the M16C (up to /60)
11387      series, `m32cm' for the M16C/80 series, or `m32c' for the M32C/80
11388      series.
11390 `-msim'
11391      Specifies that the program will be run on the simulator.  This
11392      causes an alternate runtime library to be linked in which
11393      supports, for example, file I/O.  You must not use this option
11394      when generating programs that will run on real hardware; you must
11395      provide your own runtime library for whatever I/O functions are
11396      needed.
11398 `-memregs=NUMBER'
11399      Specifies the number of memory-based pseudo-registers GCC will use
11400      during code generation.  These pseudo-registers will be used like
11401      real registers, so there is a tradeoff between GCC's ability to
11402      fit the code into available registers, and the performance penalty
11403      of using memory instead of registers.  Note that all modules in a
11404      program must be compiled with the same value for this option.
11405      Because of that, you must not use this option with the default
11406      runtime libraries gcc builds.
11409 \x1f
11410 File: gcc.info,  Node: M32R/D Options,  Next: M680x0 Options,  Prev: M32C Options,  Up: Submodel Options
11412 3.17.18 M32R/D Options
11413 ----------------------
11415 These `-m' options are defined for Renesas M32R/D architectures:
11417 `-m32r2'
11418      Generate code for the M32R/2.
11420 `-m32rx'
11421      Generate code for the M32R/X.
11423 `-m32r'
11424      Generate code for the M32R.  This is the default.
11426 `-mmodel=small'
11427      Assume all objects live in the lower 16MB of memory (so that their
11428      addresses can be loaded with the `ld24' instruction), and assume
11429      all subroutines are reachable with the `bl' instruction.  This is
11430      the default.
11432      The addressability of a particular object can be set with the
11433      `model' attribute.
11435 `-mmodel=medium'
11436      Assume objects may be anywhere in the 32-bit address space (the
11437      compiler will generate `seth/add3' instructions to load their
11438      addresses), and assume all subroutines are reachable with the `bl'
11439      instruction.
11441 `-mmodel=large'
11442      Assume objects may be anywhere in the 32-bit address space (the
11443      compiler will generate `seth/add3' instructions to load their
11444      addresses), and assume subroutines may not be reachable with the
11445      `bl' instruction (the compiler will generate the much slower
11446      `seth/add3/jl' instruction sequence).
11448 `-msdata=none'
11449      Disable use of the small data area.  Variables will be put into
11450      one of `.data', `bss', or `.rodata' (unless the `section'
11451      attribute has been specified).  This is the default.
11453      The small data area consists of sections `.sdata' and `.sbss'.
11454      Objects may be explicitly put in the small data area with the
11455      `section' attribute using one of these sections.
11457 `-msdata=sdata'
11458      Put small global and static data in the small data area, but do not
11459      generate special code to reference them.
11461 `-msdata=use'
11462      Put small global and static data in the small data area, and
11463      generate special instructions to reference them.
11465 `-G NUM'
11466      Put global and static objects less than or equal to NUM bytes into
11467      the small data or bss sections instead of the normal data or bss
11468      sections.  The default value of NUM is 8.  The `-msdata' option
11469      must be set to one of `sdata' or `use' for this option to have any
11470      effect.
11472      All modules should be compiled with the same `-G NUM' value.
11473      Compiling with different values of NUM may or may not work; if it
11474      doesn't the linker will give an error message--incorrect code will
11475      not be generated.
11477 `-mdebug'
11478      Makes the M32R specific code in the compiler display some
11479      statistics that might help in debugging programs.
11481 `-malign-loops'
11482      Align all loops to a 32-byte boundary.
11484 `-mno-align-loops'
11485      Do not enforce a 32-byte alignment for loops.  This is the default.
11487 `-missue-rate=NUMBER'
11488      Issue NUMBER instructions per cycle.  NUMBER can only be 1 or 2.
11490 `-mbranch-cost=NUMBER'
11491      NUMBER can only be 1 or 2.  If it is 1 then branches will be
11492      preferred over conditional code, if it is 2, then the opposite will
11493      apply.
11495 `-mflush-trap=NUMBER'
11496      Specifies the trap number to use to flush the cache.  The default
11497      is 12.  Valid numbers are between 0 and 15 inclusive.
11499 `-mno-flush-trap'
11500      Specifies that the cache cannot be flushed by using a trap.
11502 `-mflush-func=NAME'
11503      Specifies the name of the operating system function to call to
11504      flush the cache.  The default is __flush_cache_, but a function
11505      call will only be used if a trap is not available.
11507 `-mno-flush-func'
11508      Indicates that there is no OS function for flushing the cache.
11511 \x1f
11512 File: gcc.info,  Node: M680x0 Options,  Next: M68hc1x Options,  Prev: M32R/D Options,  Up: Submodel Options
11514 3.17.19 M680x0 Options
11515 ----------------------
11517 These are the `-m' options defined for M680x0 and ColdFire processors.
11518 The default settings depend on which architecture was selected when the
11519 compiler was configured; the defaults for the most common choices are
11520 given below.
11522 `-march=ARCH'
11523      Generate code for a specific M680x0 or ColdFire instruction set
11524      architecture.  Permissible values of ARCH for M680x0 architectures
11525      are: `68000', `68010', `68020', `68030', `68040', `68060' and
11526      `cpu32'.  ColdFire architectures are selected according to
11527      Freescale's ISA classification and the permissible values are:
11528      `isaa', `isaaplus', `isab' and `isac'.
11530      gcc defines a macro `__mcfARCH__' whenever it is generating code
11531      for a ColdFire target.  The ARCH in this macro is one of the
11532      `-march' arguments given above.
11534      When used together, `-march' and `-mtune' select code that runs on
11535      a family of similar processors but that is optimized for a
11536      particular microarchitecture.
11538 `-mcpu=CPU'
11539      Generate code for a specific M680x0 or ColdFire processor.  The
11540      M680x0 CPUs are: `68000', `68010', `68020', `68030', `68040',
11541      `68060', `68302', `68332' and `cpu32'.  The ColdFire CPUs are
11542      given by the table below, which also classifies the CPUs into
11543      families:
11545      *Family*      *`-mcpu' arguments*
11546      `51qe'        `51qe'
11547      `5206'        `5202' `5204' `5206'
11548      `5206e'       `5206e'
11549      `5208'        `5207' `5208'
11550      `5211a'       `5210a' `5211a'
11551      `5213'        `5211' `5212' `5213'
11552      `5216'        `5214' `5216'
11553      `52235'       `52230' `52231' `52232' `52233' `52234' `52235'
11554      `5225'        `5224' `5225'
11555      `5235'        `5232' `5233' `5234' `5235' `523x'
11556      `5249'        `5249'
11557      `5250'        `5250'
11558      `5271'        `5270' `5271'
11559      `5272'        `5272'
11560      `5275'        `5274' `5275'
11561      `5282'        `5280' `5281' `5282' `528x'
11562      `5307'        `5307'
11563      `5329'        `5327' `5328' `5329' `532x'
11564      `5373'        `5372' `5373' `537x'
11565      `5407'        `5407'
11566      `5475'        `5470' `5471' `5472' `5473' `5474' `5475' `547x'
11567                    `5480' `5481' `5482' `5483' `5484' `5485'
11569      `-mcpu=CPU' overrides `-march=ARCH' if ARCH is compatible with
11570      CPU.  Other combinations of `-mcpu' and `-march' are rejected.
11572      gcc defines the macro `__mcf_cpu_CPU' when ColdFire target CPU is
11573      selected.  It also defines `__mcf_family_FAMILY', where the value
11574      of FAMILY is given by the table above.
11576 `-mtune=TUNE'
11577      Tune the code for a particular microarchitecture, within the
11578      constraints set by `-march' and `-mcpu'.  The M680x0
11579      microarchitectures are: `68000', `68010', `68020', `68030',
11580      `68040', `68060' and `cpu32'.  The ColdFire microarchitectures
11581      are: `cfv1', `cfv2', `cfv3', `cfv4' and `cfv4e'.
11583      You can also use `-mtune=68020-40' for code that needs to run
11584      relatively well on 68020, 68030 and 68040 targets.
11585      `-mtune=68020-60' is similar but includes 68060 targets as well.
11586      These two options select the same tuning decisions as `-m68020-40'
11587      and `-m68020-60' respectively.
11589      gcc defines the macros `__mcARCH' and `__mcARCH__' when tuning for
11590      680x0 architecture ARCH.  It also defines `mcARCH' unless either
11591      `-ansi' or a non-GNU `-std' option is used.  If gcc is tuning for
11592      a range of architectures, as selected by `-mtune=68020-40' or
11593      `-mtune=68020-60', it defines the macros for every architecture in
11594      the range.
11596      gcc also defines the macro `__mUARCH__' when tuning for ColdFire
11597      microarchitecture UARCH, where UARCH is one of the arguments given
11598      above.
11600 `-m68000'
11601 `-mc68000'
11602      Generate output for a 68000.  This is the default when the
11603      compiler is configured for 68000-based systems.  It is equivalent
11604      to `-march=68000'.
11606      Use this option for microcontrollers with a 68000 or EC000 core,
11607      including the 68008, 68302, 68306, 68307, 68322, 68328 and 68356.
11609 `-m68010'
11610      Generate output for a 68010.  This is the default when the
11611      compiler is configured for 68010-based systems.  It is equivalent
11612      to `-march=68010'.
11614 `-m68020'
11615 `-mc68020'
11616      Generate output for a 68020.  This is the default when the
11617      compiler is configured for 68020-based systems.  It is equivalent
11618      to `-march=68020'.
11620 `-m68030'
11621      Generate output for a 68030.  This is the default when the
11622      compiler is configured for 68030-based systems.  It is equivalent
11623      to `-march=68030'.
11625 `-m68040'
11626      Generate output for a 68040.  This is the default when the
11627      compiler is configured for 68040-based systems.  It is equivalent
11628      to `-march=68040'.
11630      This option inhibits the use of 68881/68882 instructions that have
11631      to be emulated by software on the 68040.  Use this option if your
11632      68040 does not have code to emulate those instructions.
11634 `-m68060'
11635      Generate output for a 68060.  This is the default when the
11636      compiler is configured for 68060-based systems.  It is equivalent
11637      to `-march=68060'.
11639      This option inhibits the use of 68020 and 68881/68882 instructions
11640      that have to be emulated by software on the 68060.  Use this
11641      option if your 68060 does not have code to emulate those
11642      instructions.
11644 `-mcpu32'
11645      Generate output for a CPU32.  This is the default when the
11646      compiler is configured for CPU32-based systems.  It is equivalent
11647      to `-march=cpu32'.
11649      Use this option for microcontrollers with a CPU32 or CPU32+ core,
11650      including the 68330, 68331, 68332, 68333, 68334, 68336, 68340,
11651      68341, 68349 and 68360.
11653 `-m5200'
11654      Generate output for a 520X ColdFire CPU.  This is the default when
11655      the compiler is configured for 520X-based systems.  It is
11656      equivalent to `-mcpu=5206', and is now deprecated in favor of that
11657      option.
11659      Use this option for microcontroller with a 5200 core, including
11660      the MCF5202, MCF5203, MCF5204 and MCF5206.
11662 `-m5206e'
11663      Generate output for a 5206e ColdFire CPU.  The option is now
11664      deprecated in favor of the equivalent `-mcpu=5206e'.
11666 `-m528x'
11667      Generate output for a member of the ColdFire 528X family.  The
11668      option is now deprecated in favor of the equivalent `-mcpu=528x'.
11670 `-m5307'
11671      Generate output for a ColdFire 5307 CPU.  The option is now
11672      deprecated in favor of the equivalent `-mcpu=5307'.
11674 `-m5407'
11675      Generate output for a ColdFire 5407 CPU.  The option is now
11676      deprecated in favor of the equivalent `-mcpu=5407'.
11678 `-mcfv4e'
11679      Generate output for a ColdFire V4e family CPU (e.g. 547x/548x).
11680      This includes use of hardware floating point instructions.  The
11681      option is equivalent to `-mcpu=547x', and is now deprecated in
11682      favor of that option.
11684 `-m68020-40'
11685      Generate output for a 68040, without using any of the new
11686      instructions.  This results in code which can run relatively
11687      efficiently on either a 68020/68881 or a 68030 or a 68040.  The
11688      generated code does use the 68881 instructions that are emulated
11689      on the 68040.
11691      The option is equivalent to `-march=68020' `-mtune=68020-40'.
11693 `-m68020-60'
11694      Generate output for a 68060, without using any of the new
11695      instructions.  This results in code which can run relatively
11696      efficiently on either a 68020/68881 or a 68030 or a 68040.  The
11697      generated code does use the 68881 instructions that are emulated
11698      on the 68060.
11700      The option is equivalent to `-march=68020' `-mtune=68020-60'.
11702 `-mhard-float'
11703 `-m68881'
11704      Generate floating-point instructions.  This is the default for
11705      68020 and above, and for ColdFire devices that have an FPU.  It
11706      defines the macro `__HAVE_68881__' on M680x0 targets and
11707      `__mcffpu__' on ColdFire targets.
11709 `-msoft-float'
11710      Do not generate floating-point instructions; use library calls
11711      instead.  This is the default for 68000, 68010, and 68832 targets.
11712      It is also the default for ColdFire devices that have no FPU.
11714 `-mdiv'
11715 `-mno-div'
11716      Generate (do not generate) ColdFire hardware divide and remainder
11717      instructions.  If `-march' is used without `-mcpu', the default is
11718      "on" for ColdFire architectures and "off" for M680x0
11719      architectures.  Otherwise, the default is taken from the target CPU
11720      (either the default CPU, or the one specified by `-mcpu').  For
11721      example, the default is "off" for `-mcpu=5206' and "on" for
11722      `-mcpu=5206e'.
11724      gcc defines the macro `__mcfhwdiv__' when this option is enabled.
11726 `-mshort'
11727      Consider type `int' to be 16 bits wide, like `short int'.
11728      Additionally, parameters passed on the stack are also aligned to a
11729      16-bit boundary even on targets whose API mandates promotion to
11730      32-bit.
11732 `-mno-short'
11733      Do not consider type `int' to be 16 bits wide.  This is the
11734      default.
11736 `-mnobitfield'
11737 `-mno-bitfield'
11738      Do not use the bit-field instructions.  The `-m68000', `-mcpu32'
11739      and `-m5200' options imply `-mnobitfield'.
11741 `-mbitfield'
11742      Do use the bit-field instructions.  The `-m68020' option implies
11743      `-mbitfield'.  This is the default if you use a configuration
11744      designed for a 68020.
11746 `-mrtd'
11747      Use a different function-calling convention, in which functions
11748      that take a fixed number of arguments return with the `rtd'
11749      instruction, which pops their arguments while returning.  This
11750      saves one instruction in the caller since there is no need to pop
11751      the arguments there.
11753      This calling convention is incompatible with the one normally used
11754      on Unix, so you cannot use it if you need to call libraries
11755      compiled with the Unix compiler.
11757      Also, you must provide function prototypes for all functions that
11758      take variable numbers of arguments (including `printf'); otherwise
11759      incorrect code will be generated for calls to those functions.
11761      In addition, seriously incorrect code will result if you call a
11762      function with too many arguments.  (Normally, extra arguments are
11763      harmlessly ignored.)
11765      The `rtd' instruction is supported by the 68010, 68020, 68030,
11766      68040, 68060 and CPU32 processors, but not by the 68000 or 5200.
11768 `-mno-rtd'
11769      Do not use the calling conventions selected by `-mrtd'.  This is
11770      the default.
11772 `-malign-int'
11773 `-mno-align-int'
11774      Control whether GCC aligns `int', `long', `long long', `float',
11775      `double', and `long double' variables on a 32-bit boundary
11776      (`-malign-int') or a 16-bit boundary (`-mno-align-int').  Aligning
11777      variables on 32-bit boundaries produces code that runs somewhat
11778      faster on processors with 32-bit busses at the expense of more
11779      memory.
11781      *Warning:* if you use the `-malign-int' switch, GCC will align
11782      structures containing the above types  differently than most
11783      published application binary interface specifications for the m68k.
11785 `-mpcrel'
11786      Use the pc-relative addressing mode of the 68000 directly, instead
11787      of using a global offset table.  At present, this option implies
11788      `-fpic', allowing at most a 16-bit offset for pc-relative
11789      addressing.  `-fPIC' is not presently supported with `-mpcrel',
11790      though this could be supported for 68020 and higher processors.
11792 `-mno-strict-align'
11793 `-mstrict-align'
11794      Do not (do) assume that unaligned memory references will be
11795      handled by the system.
11797 `-msep-data'
11798      Generate code that allows the data segment to be located in a
11799      different area of memory from the text segment.  This allows for
11800      execute in place in an environment without virtual memory
11801      management.  This option implies `-fPIC'.
11803 `-mno-sep-data'
11804      Generate code that assumes that the data segment follows the text
11805      segment.  This is the default.
11807 `-mid-shared-library'
11808      Generate code that supports shared libraries via the library ID
11809      method.  This allows for execute in place and shared libraries in
11810      an environment without virtual memory management.  This option
11811      implies `-fPIC'.
11813 `-mno-id-shared-library'
11814      Generate code that doesn't assume ID based shared libraries are
11815      being used.  This is the default.
11817 `-mshared-library-id=n'
11818      Specified the identification number of the ID based shared library
11819      being compiled.  Specifying a value of 0 will generate more
11820      compact code, specifying other values will force the allocation of
11821      that number to the current library but is no more space or time
11822      efficient than omitting this option.
11824 `-mxgot'
11825 `-mno-xgot'
11826      When generating position-independent code for ColdFire, generate
11827      code that works if the GOT has more than 8192 entries.  This code
11828      is larger and slower than code generated without this option.  On
11829      M680x0 processors, this option is not needed; `-fPIC' suffices.
11831      GCC normally uses a single instruction to load values from the GOT.
11832      While this is relatively efficient, it only works if the GOT is
11833      smaller than about 64k.  Anything larger causes the linker to
11834      report an error such as:
11836           relocation truncated to fit: R_68K_GOT16O foobar
11838      If this happens, you should recompile your code with `-mxgot'.  It
11839      should then work with very large GOTs.  However, code generated
11840      with `-mxgot' is less efficient, since it takes 4 instructions to
11841      fetch the value of a global symbol.
11843      Note that some linkers, including newer versions of the GNU linker,
11844      can create multiple GOTs and sort GOT entries.  If you have such a
11845      linker, you should only need to use `-mxgot' when compiling a
11846      single object file that accesses more than 8192 GOT entries.  Very
11847      few do.
11849      These options have no effect unless GCC is generating
11850      position-independent code.
11853 \x1f
11854 File: gcc.info,  Node: M68hc1x Options,  Next: MCore Options,  Prev: M680x0 Options,  Up: Submodel Options
11856 3.17.20 M68hc1x Options
11857 -----------------------
11859 These are the `-m' options defined for the 68hc11 and 68hc12
11860 microcontrollers.  The default values for these options depends on
11861 which style of microcontroller was selected when the compiler was
11862 configured; the defaults for the most common choices are given below.
11864 `-m6811'
11865 `-m68hc11'
11866      Generate output for a 68HC11.  This is the default when the
11867      compiler is configured for 68HC11-based systems.
11869 `-m6812'
11870 `-m68hc12'
11871      Generate output for a 68HC12.  This is the default when the
11872      compiler is configured for 68HC12-based systems.
11874 `-m68S12'
11875 `-m68hcs12'
11876      Generate output for a 68HCS12.
11878 `-mauto-incdec'
11879      Enable the use of 68HC12 pre and post auto-increment and
11880      auto-decrement addressing modes.
11882 `-minmax'
11883 `-nominmax'
11884      Enable the use of 68HC12 min and max instructions.
11886 `-mlong-calls'
11887 `-mno-long-calls'
11888      Treat all calls as being far away (near).  If calls are assumed to
11889      be far away, the compiler will use the `call' instruction to call
11890      a function and the `rtc' instruction for returning.
11892 `-mshort'
11893      Consider type `int' to be 16 bits wide, like `short int'.
11895 `-msoft-reg-count=COUNT'
11896      Specify the number of pseudo-soft registers which are used for the
11897      code generation.  The maximum number is 32.  Using more pseudo-soft
11898      register may or may not result in better code depending on the
11899      program.  The default is 4 for 68HC11 and 2 for 68HC12.
11902 \x1f
11903 File: gcc.info,  Node: MCore Options,  Next: MIPS Options,  Prev: M68hc1x Options,  Up: Submodel Options
11905 3.17.21 MCore Options
11906 ---------------------
11908 These are the `-m' options defined for the Motorola M*Core processors.
11910 `-mhardlit'
11911 `-mno-hardlit'
11912      Inline constants into the code stream if it can be done in two
11913      instructions or less.
11915 `-mdiv'
11916 `-mno-div'
11917      Use the divide instruction.  (Enabled by default).
11919 `-mrelax-immediate'
11920 `-mno-relax-immediate'
11921      Allow arbitrary sized immediates in bit operations.
11923 `-mwide-bitfields'
11924 `-mno-wide-bitfields'
11925      Always treat bit-fields as int-sized.
11927 `-m4byte-functions'
11928 `-mno-4byte-functions'
11929      Force all functions to be aligned to a four byte boundary.
11931 `-mcallgraph-data'
11932 `-mno-callgraph-data'
11933      Emit callgraph information.
11935 `-mslow-bytes'
11936 `-mno-slow-bytes'
11937      Prefer word access when reading byte quantities.
11939 `-mlittle-endian'
11940 `-mbig-endian'
11941      Generate code for a little endian target.
11943 `-m210'
11944 `-m340'
11945      Generate code for the 210 processor.
11947 `-mno-lsim'
11948      Assume that run-time support has been provided and so omit the
11949      simulator library (`libsim.a)' from the linker command line.
11951 `-mstack-increment=SIZE'
11952      Set the maximum amount for a single stack increment operation.
11953      Large values can increase the speed of programs which contain
11954      functions that need a large amount of stack space, but they can
11955      also trigger a segmentation fault if the stack is extended too
11956      much.  The default value is 0x1000.
11959 \x1f
11960 File: gcc.info,  Node: MIPS Options,  Next: MMIX Options,  Prev: MCore Options,  Up: Submodel Options
11962 3.17.22 MIPS Options
11963 --------------------
11965 `-EB'
11966      Generate big-endian code.
11968 `-EL'
11969      Generate little-endian code.  This is the default for `mips*el-*-*'
11970      configurations.
11972 `-march=ARCH'
11973      Generate code that will run on ARCH, which can be the name of a
11974      generic MIPS ISA, or the name of a particular processor.  The ISA
11975      names are: `mips1', `mips2', `mips3', `mips4', `mips32',
11976      `mips32r2', `mips64' and `mips64r2'.  The processor names are:
11977      `4kc', `4km', `4kp', `4ksc', `4kec', `4kem', `4kep', `4ksd',
11978      `5kc', `5kf', `20kc', `24kc', `24kf2_1', `24kf1_1', `24kec',
11979      `24kef2_1', `24kef1_1', `34kc', `34kf2_1', `34kf1_1', `74kc',
11980      `74kf2_1', `74kf1_1', `74kf3_2', `loongson2e', `loongson2f', `m4k',
11981      `octeon', `orion', `r2000', `r3000', `r3900', `r4000', `r4400',
11982      `r4600', `r4650', `r6000', `r8000', `rm7000', `rm9000', `r10000',
11983      `r12000', `r14000', `r16000', `sb1', `sr71000', `vr4100',
11984      `vr4111', `vr4120', `vr4130', `vr4300', `vr5000', `vr5400',
11985      `vr5500' and `xlr'.  The special value `from-abi' selects the most
11986      compatible architecture for the selected ABI (that is, `mips1' for
11987      32-bit ABIs and `mips3' for 64-bit ABIs).
11989      Native Linux/GNU toolchains also support the value `native', which
11990      selects the best architecture option for the host processor.
11991      `-march=native' has no effect if GCC does not recognize the
11992      processor.
11994      In processor names, a final `000' can be abbreviated as `k' (for
11995      example, `-march=r2k').  Prefixes are optional, and `vr' may be
11996      written `r'.
11998      Names of the form `Nf2_1' refer to processors with FPUs clocked at
11999      half the rate of the core, names of the form `Nf1_1' refer to
12000      processors with FPUs clocked at the same rate as the core, and
12001      names of the form `Nf3_2' refer to processors with FPUs clocked a
12002      ratio of 3:2 with respect to the core.  For compatibility reasons,
12003      `Nf' is accepted as a synonym for `Nf2_1' while `Nx' and `Bfx' are
12004      accepted as synonyms for `Nf1_1'.
12006      GCC defines two macros based on the value of this option.  The
12007      first is `_MIPS_ARCH', which gives the name of target
12008      architecture, as a string.  The second has the form
12009      `_MIPS_ARCH_FOO', where FOO is the capitalized value of
12010      `_MIPS_ARCH'.  For example, `-march=r2000' will set `_MIPS_ARCH'
12011      to `"r2000"' and define the macro `_MIPS_ARCH_R2000'.
12013      Note that the `_MIPS_ARCH' macro uses the processor names given
12014      above.  In other words, it will have the full prefix and will not
12015      abbreviate `000' as `k'.  In the case of `from-abi', the macro
12016      names the resolved architecture (either `"mips1"' or `"mips3"').
12017      It names the default architecture when no `-march' option is given.
12019 `-mtune=ARCH'
12020      Optimize for ARCH.  Among other things, this option controls the
12021      way instructions are scheduled, and the perceived cost of
12022      arithmetic operations.  The list of ARCH values is the same as for
12023      `-march'.
12025      When this option is not used, GCC will optimize for the processor
12026      specified by `-march'.  By using `-march' and `-mtune' together,
12027      it is possible to generate code that will run on a family of
12028      processors, but optimize the code for one particular member of
12029      that family.
12031      `-mtune' defines the macros `_MIPS_TUNE' and `_MIPS_TUNE_FOO',
12032      which work in the same way as the `-march' ones described above.
12034 `-mips1'
12035      Equivalent to `-march=mips1'.
12037 `-mips2'
12038      Equivalent to `-march=mips2'.
12040 `-mips3'
12041      Equivalent to `-march=mips3'.
12043 `-mips4'
12044      Equivalent to `-march=mips4'.
12046 `-mips32'
12047      Equivalent to `-march=mips32'.
12049 `-mips32r2'
12050      Equivalent to `-march=mips32r2'.
12052 `-mips64'
12053      Equivalent to `-march=mips64'.
12055 `-mips64r2'
12056      Equivalent to `-march=mips64r2'.
12058 `-mips16'
12059 `-mno-mips16'
12060      Generate (do not generate) MIPS16 code.  If GCC is targetting a
12061      MIPS32 or MIPS64 architecture, it will make use of the MIPS16e ASE.
12063      MIPS16 code generation can also be controlled on a per-function
12064      basis by means of `mips16' and `nomips16' attributes.  *Note
12065      Function Attributes::, for more information.
12067 `-mflip-mips16'
12068      Generate MIPS16 code on alternating functions.  This option is
12069      provided for regression testing of mixed MIPS16/non-MIPS16 code
12070      generation, and is not intended for ordinary use in compiling user
12071      code.
12073 `-minterlink-mips16'
12074 `-mno-interlink-mips16'
12075      Require (do not require) that non-MIPS16 code be link-compatible
12076      with MIPS16 code.
12078      For example, non-MIPS16 code cannot jump directly to MIPS16 code;
12079      it must either use a call or an indirect jump.
12080      `-minterlink-mips16' therefore disables direct jumps unless GCC
12081      knows that the target of the jump is not MIPS16.
12083 `-mabi=32'
12084 `-mabi=o64'
12085 `-mabi=n32'
12086 `-mabi=64'
12087 `-mabi=eabi'
12088      Generate code for the given ABI.
12090      Note that the EABI has a 32-bit and a 64-bit variant.  GCC normally
12091      generates 64-bit code when you select a 64-bit architecture, but
12092      you can use `-mgp32' to get 32-bit code instead.
12094      For information about the O64 ABI, see
12095      `http://gcc.gnu.org/projects/mipso64-abi.html'.
12097      GCC supports a variant of the o32 ABI in which floating-point
12098      registers are 64 rather than 32 bits wide.  You can select this
12099      combination with `-mabi=32' `-mfp64'.  This ABI relies on the
12100      `mthc1' and `mfhc1' instructions and is therefore only supported
12101      for MIPS32R2 processors.
12103      The register assignments for arguments and return values remain the
12104      same, but each scalar value is passed in a single 64-bit register
12105      rather than a pair of 32-bit registers.  For example, scalar
12106      floating-point values are returned in `$f0' only, not a
12107      `$f0'/`$f1' pair.  The set of call-saved registers also remains
12108      the same, but all 64 bits are saved.
12110 `-mabicalls'
12111 `-mno-abicalls'
12112      Generate (do not generate) code that is suitable for SVR4-style
12113      dynamic objects.  `-mabicalls' is the default for SVR4-based
12114      systems.
12116 `-mshared'
12117 `-mno-shared'
12118      Generate (do not generate) code that is fully position-independent,
12119      and that can therefore be linked into shared libraries.  This
12120      option only affects `-mabicalls'.
12122      All `-mabicalls' code has traditionally been position-independent,
12123      regardless of options like `-fPIC' and `-fpic'.  However, as an
12124      extension, the GNU toolchain allows executables to use absolute
12125      accesses for locally-binding symbols.  It can also use shorter GP
12126      initialization sequences and generate direct calls to
12127      locally-defined functions.  This mode is selected by `-mno-shared'.
12129      `-mno-shared' depends on binutils 2.16 or higher and generates
12130      objects that can only be linked by the GNU linker.  However, the
12131      option does not affect the ABI of the final executable; it only
12132      affects the ABI of relocatable objects.  Using `-mno-shared' will
12133      generally make executables both smaller and quicker.
12135      `-mshared' is the default.
12137 `-mplt'
12138 `-mno-plt'
12139      Assume (do not assume) that the static and dynamic linkers support
12140      PLTs and copy relocations.  This option only affects `-mno-shared
12141      -mabicalls'.  For the n64 ABI, this option has no effect without
12142      `-msym32'.
12144      You can make `-mplt' the default by configuring GCC with
12145      `--with-mips-plt'.  The default is `-mno-plt' otherwise.
12147 `-mxgot'
12148 `-mno-xgot'
12149      Lift (do not lift) the usual restrictions on the size of the global
12150      offset table.
12152      GCC normally uses a single instruction to load values from the GOT.
12153      While this is relatively efficient, it will only work if the GOT
12154      is smaller than about 64k.  Anything larger will cause the linker
12155      to report an error such as:
12157           relocation truncated to fit: R_MIPS_GOT16 foobar
12159      If this happens, you should recompile your code with `-mxgot'.  It
12160      should then work with very large GOTs, although it will also be
12161      less efficient, since it will take three instructions to fetch the
12162      value of a global symbol.
12164      Note that some linkers can create multiple GOTs.  If you have such
12165      a linker, you should only need to use `-mxgot' when a single object
12166      file accesses more than 64k's worth of GOT entries.  Very few do.
12168      These options have no effect unless GCC is generating position
12169      independent code.
12171 `-mgp32'
12172      Assume that general-purpose registers are 32 bits wide.
12174 `-mgp64'
12175      Assume that general-purpose registers are 64 bits wide.
12177 `-mfp32'
12178      Assume that floating-point registers are 32 bits wide.
12180 `-mfp64'
12181      Assume that floating-point registers are 64 bits wide.
12183 `-mhard-float'
12184      Use floating-point coprocessor instructions.
12186 `-msoft-float'
12187      Do not use floating-point coprocessor instructions.  Implement
12188      floating-point calculations using library calls instead.
12190 `-msingle-float'
12191      Assume that the floating-point coprocessor only supports
12192      single-precision operations.
12194 `-mdouble-float'
12195      Assume that the floating-point coprocessor supports
12196      double-precision operations.  This is the default.
12198 `-mllsc'
12199 `-mno-llsc'
12200      Use (do not use) `ll', `sc', and `sync' instructions to implement
12201      atomic memory built-in functions.  When neither option is
12202      specified, GCC will use the instructions if the target architecture
12203      supports them.
12205      `-mllsc' is useful if the runtime environment can emulate the
12206      instructions and `-mno-llsc' can be useful when compiling for
12207      nonstandard ISAs.  You can make either option the default by
12208      configuring GCC with `--with-llsc' and `--without-llsc'
12209      respectively.  `--with-llsc' is the default for some
12210      configurations; see the installation documentation for details.
12212 `-mdsp'
12213 `-mno-dsp'
12214      Use (do not use) revision 1 of the MIPS DSP ASE.  *Note MIPS DSP
12215      Built-in Functions::.  This option defines the preprocessor macro
12216      `__mips_dsp'.  It also defines `__mips_dsp_rev' to 1.
12218 `-mdspr2'
12219 `-mno-dspr2'
12220      Use (do not use) revision 2 of the MIPS DSP ASE.  *Note MIPS DSP
12221      Built-in Functions::.  This option defines the preprocessor macros
12222      `__mips_dsp' and `__mips_dspr2'.  It also defines `__mips_dsp_rev'
12223      to 2.
12225 `-msmartmips'
12226 `-mno-smartmips'
12227      Use (do not use) the MIPS SmartMIPS ASE.
12229 `-mpaired-single'
12230 `-mno-paired-single'
12231      Use (do not use) paired-single floating-point instructions.  *Note
12232      MIPS Paired-Single Support::.  This option requires hardware
12233      floating-point support to be enabled.
12235 `-mdmx'
12236 `-mno-mdmx'
12237      Use (do not use) MIPS Digital Media Extension instructions.  This
12238      option can only be used when generating 64-bit code and requires
12239      hardware floating-point support to be enabled.
12241 `-mips3d'
12242 `-mno-mips3d'
12243      Use (do not use) the MIPS-3D ASE.  *Note MIPS-3D Built-in
12244      Functions::.  The option `-mips3d' implies `-mpaired-single'.
12246 `-mmt'
12247 `-mno-mt'
12248      Use (do not use) MT Multithreading instructions.
12250 `-mlong64'
12251      Force `long' types to be 64 bits wide.  See `-mlong32' for an
12252      explanation of the default and the way that the pointer size is
12253      determined.
12255 `-mlong32'
12256      Force `long', `int', and pointer types to be 32 bits wide.
12258      The default size of `int's, `long's and pointers depends on the
12259      ABI.  All the supported ABIs use 32-bit `int's.  The n64 ABI uses
12260      64-bit `long's, as does the 64-bit EABI; the others use 32-bit
12261      `long's.  Pointers are the same size as `long's, or the same size
12262      as integer registers, whichever is smaller.
12264 `-msym32'
12265 `-mno-sym32'
12266      Assume (do not assume) that all symbols have 32-bit values,
12267      regardless of the selected ABI.  This option is useful in
12268      combination with `-mabi=64' and `-mno-abicalls' because it allows
12269      GCC to generate shorter and faster references to symbolic
12270      addresses.
12272 `-G NUM'
12273      Put definitions of externally-visible data in a small data section
12274      if that data is no bigger than NUM bytes.  GCC can then access the
12275      data more efficiently; see `-mgpopt' for details.
12277      The default `-G' option depends on the configuration.
12279 `-mlocal-sdata'
12280 `-mno-local-sdata'
12281      Extend (do not extend) the `-G' behavior to local data too, such
12282      as to static variables in C.  `-mlocal-sdata' is the default for
12283      all configurations.
12285      If the linker complains that an application is using too much
12286      small data, you might want to try rebuilding the less
12287      performance-critical parts with `-mno-local-sdata'.  You might
12288      also want to build large libraries with `-mno-local-sdata', so
12289      that the libraries leave more room for the main program.
12291 `-mextern-sdata'
12292 `-mno-extern-sdata'
12293      Assume (do not assume) that externally-defined data will be in a
12294      small data section if that data is within the `-G' limit.
12295      `-mextern-sdata' is the default for all configurations.
12297      If you compile a module MOD with `-mextern-sdata' `-G NUM'
12298      `-mgpopt', and MOD references a variable VAR that is no bigger
12299      than NUM bytes, you must make sure that VAR is placed in a small
12300      data section.  If VAR is defined by another module, you must
12301      either compile that module with a high-enough `-G' setting or
12302      attach a `section' attribute to VAR's definition.  If VAR is
12303      common, you must link the application with a high-enough `-G'
12304      setting.
12306      The easiest way of satisfying these restrictions is to compile and
12307      link every module with the same `-G' option.  However, you may
12308      wish to build a library that supports several different small data
12309      limits.  You can do this by compiling the library with the highest
12310      supported `-G' setting and additionally using `-mno-extern-sdata'
12311      to stop the library from making assumptions about
12312      externally-defined data.
12314 `-mgpopt'
12315 `-mno-gpopt'
12316      Use (do not use) GP-relative accesses for symbols that are known
12317      to be in a small data section; see `-G', `-mlocal-sdata' and
12318      `-mextern-sdata'.  `-mgpopt' is the default for all configurations.
12320      `-mno-gpopt' is useful for cases where the `$gp' register might
12321      not hold the value of `_gp'.  For example, if the code is part of
12322      a library that might be used in a boot monitor, programs that call
12323      boot monitor routines will pass an unknown value in `$gp'.  (In
12324      such situations, the boot monitor itself would usually be compiled
12325      with `-G0'.)
12327      `-mno-gpopt' implies `-mno-local-sdata' and `-mno-extern-sdata'.
12329 `-membedded-data'
12330 `-mno-embedded-data'
12331      Allocate variables to the read-only data section first if
12332      possible, then next in the small data section if possible,
12333      otherwise in data.  This gives slightly slower code than the
12334      default, but reduces the amount of RAM required when executing,
12335      and thus may be preferred for some embedded systems.
12337 `-muninit-const-in-rodata'
12338 `-mno-uninit-const-in-rodata'
12339      Put uninitialized `const' variables in the read-only data section.
12340      This option is only meaningful in conjunction with
12341      `-membedded-data'.
12343 `-mcode-readable=SETTING'
12344      Specify whether GCC may generate code that reads from executable
12345      sections.  There are three possible settings:
12347     `-mcode-readable=yes'
12348           Instructions may freely access executable sections.  This is
12349           the default setting.
12351     `-mcode-readable=pcrel'
12352           MIPS16 PC-relative load instructions can access executable
12353           sections, but other instructions must not do so.  This option
12354           is useful on 4KSc and 4KSd processors when the code TLBs have
12355           the Read Inhibit bit set.  It is also useful on processors
12356           that can be configured to have a dual instruction/data SRAM
12357           interface and that, like the M4K, automatically redirect
12358           PC-relative loads to the instruction RAM.
12360     `-mcode-readable=no'
12361           Instructions must not access executable sections.  This
12362           option can be useful on targets that are configured to have a
12363           dual instruction/data SRAM interface but that (unlike the
12364           M4K) do not automatically redirect PC-relative loads to the
12365           instruction RAM.
12367 `-msplit-addresses'
12368 `-mno-split-addresses'
12369      Enable (disable) use of the `%hi()' and `%lo()' assembler
12370      relocation operators.  This option has been superseded by
12371      `-mexplicit-relocs' but is retained for backwards compatibility.
12373 `-mexplicit-relocs'
12374 `-mno-explicit-relocs'
12375      Use (do not use) assembler relocation operators when dealing with
12376      symbolic addresses.  The alternative, selected by
12377      `-mno-explicit-relocs', is to use assembler macros instead.
12379      `-mexplicit-relocs' is the default if GCC was configured to use an
12380      assembler that supports relocation operators.
12382 `-mcheck-zero-division'
12383 `-mno-check-zero-division'
12384      Trap (do not trap) on integer division by zero.
12386      The default is `-mcheck-zero-division'.
12388 `-mdivide-traps'
12389 `-mdivide-breaks'
12390      MIPS systems check for division by zero by generating either a
12391      conditional trap or a break instruction.  Using traps results in
12392      smaller code, but is only supported on MIPS II and later.  Also,
12393      some versions of the Linux kernel have a bug that prevents trap
12394      from generating the proper signal (`SIGFPE').  Use
12395      `-mdivide-traps' to allow conditional traps on architectures that
12396      support them and `-mdivide-breaks' to force the use of breaks.
12398      The default is usually `-mdivide-traps', but this can be
12399      overridden at configure time using `--with-divide=breaks'.
12400      Divide-by-zero checks can be completely disabled using
12401      `-mno-check-zero-division'.
12403 `-mmemcpy'
12404 `-mno-memcpy'
12405      Force (do not force) the use of `memcpy()' for non-trivial block
12406      moves.  The default is `-mno-memcpy', which allows GCC to inline
12407      most constant-sized copies.
12409 `-mlong-calls'
12410 `-mno-long-calls'
12411      Disable (do not disable) use of the `jal' instruction.  Calling
12412      functions using `jal' is more efficient but requires the caller
12413      and callee to be in the same 256 megabyte segment.
12415      This option has no effect on abicalls code.  The default is
12416      `-mno-long-calls'.
12418 `-mmad'
12419 `-mno-mad'
12420      Enable (disable) use of the `mad', `madu' and `mul' instructions,
12421      as provided by the R4650 ISA.
12423 `-mfused-madd'
12424 `-mno-fused-madd'
12425      Enable (disable) use of the floating point multiply-accumulate
12426      instructions, when they are available.  The default is
12427      `-mfused-madd'.
12429      When multiply-accumulate instructions are used, the intermediate
12430      product is calculated to infinite precision and is not subject to
12431      the FCSR Flush to Zero bit.  This may be undesirable in some
12432      circumstances.
12434 `-nocpp'
12435      Tell the MIPS assembler to not run its preprocessor over user
12436      assembler files (with a `.s' suffix) when assembling them.
12438 `-mfix-r4000'
12439 `-mno-fix-r4000'
12440      Work around certain R4000 CPU errata:
12441         - A double-word or a variable shift may give an incorrect
12442           result if executed immediately after starting an integer
12443           division.
12445         - A double-word or a variable shift may give an incorrect
12446           result if executed while an integer multiplication is in
12447           progress.
12449         - An integer division may give an incorrect result if started
12450           in a delay slot of a taken branch or a jump.
12452 `-mfix-r4400'
12453 `-mno-fix-r4400'
12454      Work around certain R4400 CPU errata:
12455         - A double-word or a variable shift may give an incorrect
12456           result if executed immediately after starting an integer
12457           division.
12459 `-mfix-r10000'
12460 `-mno-fix-r10000'
12461      Work around certain R10000 errata:
12462         - `ll'/`sc' sequences may not behave atomically on revisions
12463           prior to 3.0.  They may deadlock on revisions 2.6 and earlier.
12465      This option can only be used if the target architecture supports
12466      branch-likely instructions.  `-mfix-r10000' is the default when
12467      `-march=r10000' is used; `-mno-fix-r10000' is the default
12468      otherwise.
12470 `-mfix-vr4120'
12471 `-mno-fix-vr4120'
12472      Work around certain VR4120 errata:
12473         - `dmultu' does not always produce the correct result.
12475         - `div' and `ddiv' do not always produce the correct result if
12476           one of the operands is negative.
12477      The workarounds for the division errata rely on special functions
12478      in `libgcc.a'.  At present, these functions are only provided by
12479      the `mips64vr*-elf' configurations.
12481      Other VR4120 errata require a nop to be inserted between certain
12482      pairs of instructions.  These errata are handled by the assembler,
12483      not by GCC itself.
12485 `-mfix-vr4130'
12486      Work around the VR4130 `mflo'/`mfhi' errata.  The workarounds are
12487      implemented by the assembler rather than by GCC, although GCC will
12488      avoid using `mflo' and `mfhi' if the VR4130 `macc', `macchi',
12489      `dmacc' and `dmacchi' instructions are available instead.
12491 `-mfix-sb1'
12492 `-mno-fix-sb1'
12493      Work around certain SB-1 CPU core errata.  (This flag currently
12494      works around the SB-1 revision 2 "F1" and "F2" floating point
12495      errata.)
12497 `-mr10k-cache-barrier=SETTING'
12498      Specify whether GCC should insert cache barriers to avoid the
12499      side-effects of speculation on R10K processors.
12501      In common with many processors, the R10K tries to predict the
12502      outcome of a conditional branch and speculatively executes
12503      instructions from the "taken" branch.  It later aborts these
12504      instructions if the predicted outcome was wrong.  However, on the
12505      R10K, even aborted instructions can have side effects.
12507      This problem only affects kernel stores and, depending on the
12508      system, kernel loads.  As an example, a speculatively-executed
12509      store may load the target memory into cache and mark the cache
12510      line as dirty, even if the store itself is later aborted.  If a
12511      DMA operation writes to the same area of memory before the "dirty"
12512      line is flushed, the cached data will overwrite the DMA-ed data.
12513      See the R10K processor manual for a full description, including
12514      other potential problems.
12516      One workaround is to insert cache barrier instructions before
12517      every memory access that might be speculatively executed and that
12518      might have side effects even if aborted.
12519      `-mr10k-cache-barrier=SETTING' controls GCC's implementation of
12520      this workaround.  It assumes that aborted accesses to any byte in
12521      the following regions will not have side effects:
12523        1. the memory occupied by the current function's stack frame;
12525        2. the memory occupied by an incoming stack argument;
12527        3. the memory occupied by an object with a link-time-constant
12528           address.
12530      It is the kernel's responsibility to ensure that speculative
12531      accesses to these regions are indeed safe.
12533      If the input program contains a function declaration such as:
12535           void foo (void);
12537      then the implementation of `foo' must allow `j foo' and `jal foo'
12538      to be executed speculatively.  GCC honors this restriction for
12539      functions it compiles itself.  It expects non-GCC functions (such
12540      as hand-written assembly code) to do the same.
12542      The option has three forms:
12544     `-mr10k-cache-barrier=load-store'
12545           Insert a cache barrier before a load or store that might be
12546           speculatively executed and that might have side effects even
12547           if aborted.
12549     `-mr10k-cache-barrier=store'
12550           Insert a cache barrier before a store that might be
12551           speculatively executed and that might have side effects even
12552           if aborted.
12554     `-mr10k-cache-barrier=none'
12555           Disable the insertion of cache barriers.  This is the default
12556           setting.
12558 `-mflush-func=FUNC'
12559 `-mno-flush-func'
12560      Specifies the function to call to flush the I and D caches, or to
12561      not call any such function.  If called, the function must take the
12562      same arguments as the common `_flush_func()', that is, the address
12563      of the memory range for which the cache is being flushed, the size
12564      of the memory range, and the number 3 (to flush both caches).  The
12565      default depends on the target GCC was configured for, but commonly
12566      is either `_flush_func' or `__cpu_flush'.
12568 `mbranch-cost=NUM'
12569      Set the cost of branches to roughly NUM "simple" instructions.
12570      This cost is only a heuristic and is not guaranteed to produce
12571      consistent results across releases.  A zero cost redundantly
12572      selects the default, which is based on the `-mtune' setting.
12574 `-mbranch-likely'
12575 `-mno-branch-likely'
12576      Enable or disable use of Branch Likely instructions, regardless of
12577      the default for the selected architecture.  By default, Branch
12578      Likely instructions may be generated if they are supported by the
12579      selected architecture.  An exception is for the MIPS32 and MIPS64
12580      architectures and processors which implement those architectures;
12581      for those, Branch Likely instructions will not be generated by
12582      default because the MIPS32 and MIPS64 architectures specifically
12583      deprecate their use.
12585 `-mfp-exceptions'
12586 `-mno-fp-exceptions'
12587      Specifies whether FP exceptions are enabled.  This affects how we
12588      schedule FP instructions for some processors.  The default is that
12589      FP exceptions are enabled.
12591      For instance, on the SB-1, if FP exceptions are disabled, and we
12592      are emitting 64-bit code, then we can use both FP pipes.
12593      Otherwise, we can only use one FP pipe.
12595 `-mvr4130-align'
12596 `-mno-vr4130-align'
12597      The VR4130 pipeline is two-way superscalar, but can only issue two
12598      instructions together if the first one is 8-byte aligned.  When
12599      this option is enabled, GCC will align pairs of instructions that
12600      it thinks should execute in parallel.
12602      This option only has an effect when optimizing for the VR4130.  It
12603      normally makes code faster, but at the expense of making it bigger.
12604      It is enabled by default at optimization level `-O3'.
12606 \x1f
12607 File: gcc.info,  Node: MMIX Options,  Next: MN10300 Options,  Prev: MIPS Options,  Up: Submodel Options
12609 3.17.23 MMIX Options
12610 --------------------
12612 These options are defined for the MMIX:
12614 `-mlibfuncs'
12615 `-mno-libfuncs'
12616      Specify that intrinsic library functions are being compiled,
12617      passing all values in registers, no matter the size.
12619 `-mepsilon'
12620 `-mno-epsilon'
12621      Generate floating-point comparison instructions that compare with
12622      respect to the `rE' epsilon register.
12624 `-mabi=mmixware'
12625 `-mabi=gnu'
12626      Generate code that passes function parameters and return values
12627      that (in the called function) are seen as registers `$0' and up,
12628      as opposed to the GNU ABI which uses global registers `$231' and
12629      up.
12631 `-mzero-extend'
12632 `-mno-zero-extend'
12633      When reading data from memory in sizes shorter than 64 bits, use
12634      (do not use) zero-extending load instructions by default, rather
12635      than sign-extending ones.
12637 `-mknuthdiv'
12638 `-mno-knuthdiv'
12639      Make the result of a division yielding a remainder have the same
12640      sign as the divisor.  With the default, `-mno-knuthdiv', the sign
12641      of the remainder follows the sign of the dividend.  Both methods
12642      are arithmetically valid, the latter being almost exclusively used.
12644 `-mtoplevel-symbols'
12645 `-mno-toplevel-symbols'
12646      Prepend (do not prepend) a `:' to all global symbols, so the
12647      assembly code can be used with the `PREFIX' assembly directive.
12649 `-melf'
12650      Generate an executable in the ELF format, rather than the default
12651      `mmo' format used by the `mmix' simulator.
12653 `-mbranch-predict'
12654 `-mno-branch-predict'
12655      Use (do not use) the probable-branch instructions, when static
12656      branch prediction indicates a probable branch.
12658 `-mbase-addresses'
12659 `-mno-base-addresses'
12660      Generate (do not generate) code that uses _base addresses_.  Using
12661      a base address automatically generates a request (handled by the
12662      assembler and the linker) for a constant to be set up in a global
12663      register.  The register is used for one or more base address
12664      requests within the range 0 to 255 from the value held in the
12665      register.  The generally leads to short and fast code, but the
12666      number of different data items that can be addressed is limited.
12667      This means that a program that uses lots of static data may
12668      require `-mno-base-addresses'.
12670 `-msingle-exit'
12671 `-mno-single-exit'
12672      Force (do not force) generated code to have a single exit point in
12673      each function.
12675 \x1f
12676 File: gcc.info,  Node: MN10300 Options,  Next: PDP-11 Options,  Prev: MMIX Options,  Up: Submodel Options
12678 3.17.24 MN10300 Options
12679 -----------------------
12681 These `-m' options are defined for Matsushita MN10300 architectures:
12683 `-mmult-bug'
12684      Generate code to avoid bugs in the multiply instructions for the
12685      MN10300 processors.  This is the default.
12687 `-mno-mult-bug'
12688      Do not generate code to avoid bugs in the multiply instructions
12689      for the MN10300 processors.
12691 `-mam33'
12692      Generate code which uses features specific to the AM33 processor.
12694 `-mno-am33'
12695      Do not generate code which uses features specific to the AM33
12696      processor.  This is the default.
12698 `-mreturn-pointer-on-d0'
12699      When generating a function which returns a pointer, return the
12700      pointer in both `a0' and `d0'.  Otherwise, the pointer is returned
12701      only in a0, and attempts to call such functions without a prototype
12702      would result in errors.  Note that this option is on by default;
12703      use `-mno-return-pointer-on-d0' to disable it.
12705 `-mno-crt0'
12706      Do not link in the C run-time initialization object file.
12708 `-mrelax'
12709      Indicate to the linker that it should perform a relaxation
12710      optimization pass to shorten branches, calls and absolute memory
12711      addresses.  This option only has an effect when used on the
12712      command line for the final link step.
12714      This option makes symbolic debugging impossible.
12716 \x1f
12717 File: gcc.info,  Node: PDP-11 Options,  Next: picoChip Options,  Prev: MN10300 Options,  Up: Submodel Options
12719 3.17.25 PDP-11 Options
12720 ----------------------
12722 These options are defined for the PDP-11:
12724 `-mfpu'
12725      Use hardware FPP floating point.  This is the default.  (FIS
12726      floating point on the PDP-11/40 is not supported.)
12728 `-msoft-float'
12729      Do not use hardware floating point.
12731 `-mac0'
12732      Return floating-point results in ac0 (fr0 in Unix assembler
12733      syntax).
12735 `-mno-ac0'
12736      Return floating-point results in memory.  This is the default.
12738 `-m40'
12739      Generate code for a PDP-11/40.
12741 `-m45'
12742      Generate code for a PDP-11/45.  This is the default.
12744 `-m10'
12745      Generate code for a PDP-11/10.
12747 `-mbcopy-builtin'
12748      Use inline `movmemhi' patterns for copying memory.  This is the
12749      default.
12751 `-mbcopy'
12752      Do not use inline `movmemhi' patterns for copying memory.
12754 `-mint16'
12755 `-mno-int32'
12756      Use 16-bit `int'.  This is the default.
12758 `-mint32'
12759 `-mno-int16'
12760      Use 32-bit `int'.
12762 `-mfloat64'
12763 `-mno-float32'
12764      Use 64-bit `float'.  This is the default.
12766 `-mfloat32'
12767 `-mno-float64'
12768      Use 32-bit `float'.
12770 `-mabshi'
12771      Use `abshi2' pattern.  This is the default.
12773 `-mno-abshi'
12774      Do not use `abshi2' pattern.
12776 `-mbranch-expensive'
12777      Pretend that branches are expensive.  This is for experimenting
12778      with code generation only.
12780 `-mbranch-cheap'
12781      Do not pretend that branches are expensive.  This is the default.
12783 `-msplit'
12784      Generate code for a system with split I&D.
12786 `-mno-split'
12787      Generate code for a system without split I&D.  This is the default.
12789 `-munix-asm'
12790      Use Unix assembler syntax.  This is the default when configured for
12791      `pdp11-*-bsd'.
12793 `-mdec-asm'
12794      Use DEC assembler syntax.  This is the default when configured for
12795      any PDP-11 target other than `pdp11-*-bsd'.
12797 \x1f
12798 File: gcc.info,  Node: picoChip Options,  Next: PowerPC Options,  Prev: PDP-11 Options,  Up: Submodel Options
12800 3.17.26 picoChip Options
12801 ------------------------
12803 These `-m' options are defined for picoChip implementations:
12805 `-mae=AE_TYPE'
12806      Set the instruction set, register set, and instruction scheduling
12807      parameters for array element type AE_TYPE.  Supported values for
12808      AE_TYPE are `ANY', `MUL', and `MAC'.
12810      `-mae=ANY' selects a completely generic AE type.  Code generated
12811      with this option will run on any of the other AE types.  The code
12812      will not be as efficient as it would be if compiled for a specific
12813      AE type, and some types of operation (e.g., multiplication) will
12814      not work properly on all types of AE.
12816      `-mae=MUL' selects a MUL AE type.  This is the most useful AE type
12817      for compiled code, and is the default.
12819      `-mae=MAC' selects a DSP-style MAC AE.  Code compiled with this
12820      option may suffer from poor performance of byte (char)
12821      manipulation, since the DSP AE does not provide hardware support
12822      for byte load/stores.
12824 `-msymbol-as-address'
12825      Enable the compiler to directly use a symbol name as an address in
12826      a load/store instruction, without first loading it into a
12827      register.  Typically, the use of this option will generate larger
12828      programs, which run faster than when the option isn't used.
12829      However, the results vary from program to program, so it is left
12830      as a user option, rather than being permanently enabled.
12832 `-mno-inefficient-warnings'
12833      Disables warnings about the generation of inefficient code.  These
12834      warnings can be generated, for example, when compiling code which
12835      performs byte-level memory operations on the MAC AE type.  The MAC
12836      AE has no hardware support for byte-level memory operations, so
12837      all byte load/stores must be synthesized from word load/store
12838      operations.  This is inefficient and a warning will be generated
12839      indicating to the programmer that they should rewrite the code to
12840      avoid byte operations, or to target an AE type which has the
12841      necessary hardware support.  This option enables the warning to be
12842      turned off.
12845 \x1f
12846 File: gcc.info,  Node: PowerPC Options,  Next: RS/6000 and PowerPC Options,  Prev: picoChip Options,  Up: Submodel Options
12848 3.17.27 PowerPC Options
12849 -----------------------
12851 These are listed under *Note RS/6000 and PowerPC Options::.
12853 \x1f
12854 File: gcc.info,  Node: RS/6000 and PowerPC Options,  Next: S/390 and zSeries Options,  Prev: PowerPC Options,  Up: Submodel Options
12856 3.17.28 IBM RS/6000 and PowerPC Options
12857 ---------------------------------------
12859 These `-m' options are defined for the IBM RS/6000 and PowerPC:
12860 `-mpower'
12861 `-mno-power'
12862 `-mpower2'
12863 `-mno-power2'
12864 `-mpowerpc'
12865 `-mno-powerpc'
12866 `-mpowerpc-gpopt'
12867 `-mno-powerpc-gpopt'
12868 `-mpowerpc-gfxopt'
12869 `-mno-powerpc-gfxopt'
12870 `-mpowerpc64'
12871 `-mno-powerpc64'
12872 `-mmfcrf'
12873 `-mno-mfcrf'
12874 `-mpopcntb'
12875 `-mno-popcntb'
12876 `-mfprnd'
12877 `-mno-fprnd'
12878 `-mcmpb'
12879 `-mno-cmpb'
12880 `-mmfpgpr'
12881 `-mno-mfpgpr'
12882 `-mhard-dfp'
12883 `-mno-hard-dfp'
12884      GCC supports two related instruction set architectures for the
12885      RS/6000 and PowerPC.  The "POWER" instruction set are those
12886      instructions supported by the `rios' chip set used in the original
12887      RS/6000 systems and the "PowerPC" instruction set is the
12888      architecture of the Freescale MPC5xx, MPC6xx, MPC8xx
12889      microprocessors, and the IBM 4xx, 6xx, and follow-on
12890      microprocessors.
12892      Neither architecture is a subset of the other.  However there is a
12893      large common subset of instructions supported by both.  An MQ
12894      register is included in processors supporting the POWER
12895      architecture.
12897      You use these options to specify which instructions are available
12898      on the processor you are using.  The default value of these
12899      options is determined when configuring GCC.  Specifying the
12900      `-mcpu=CPU_TYPE' overrides the specification of these options.  We
12901      recommend you use the `-mcpu=CPU_TYPE' option rather than the
12902      options listed above.
12904      The `-mpower' option allows GCC to generate instructions that are
12905      found only in the POWER architecture and to use the MQ register.
12906      Specifying `-mpower2' implies `-power' and also allows GCC to
12907      generate instructions that are present in the POWER2 architecture
12908      but not the original POWER architecture.
12910      The `-mpowerpc' option allows GCC to generate instructions that
12911      are found only in the 32-bit subset of the PowerPC architecture.
12912      Specifying `-mpowerpc-gpopt' implies `-mpowerpc' and also allows
12913      GCC to use the optional PowerPC architecture instructions in the
12914      General Purpose group, including floating-point square root.
12915      Specifying `-mpowerpc-gfxopt' implies `-mpowerpc' and also allows
12916      GCC to use the optional PowerPC architecture instructions in the
12917      Graphics group, including floating-point select.
12919      The `-mmfcrf' option allows GCC to generate the move from
12920      condition register field instruction implemented on the POWER4
12921      processor and other processors that support the PowerPC V2.01
12922      architecture.  The `-mpopcntb' option allows GCC to generate the
12923      popcount and double precision FP reciprocal estimate instruction
12924      implemented on the POWER5 processor and other processors that
12925      support the PowerPC V2.02 architecture.  The `-mfprnd' option
12926      allows GCC to generate the FP round to integer instructions
12927      implemented on the POWER5+ processor and other processors that
12928      support the PowerPC V2.03 architecture.  The `-mcmpb' option
12929      allows GCC to generate the compare bytes instruction implemented
12930      on the POWER6 processor and other processors that support the
12931      PowerPC V2.05 architecture.  The `-mmfpgpr' option allows GCC to
12932      generate the FP move to/from general purpose register instructions
12933      implemented on the POWER6X processor and other processors that
12934      support the extended PowerPC V2.05 architecture.  The `-mhard-dfp'
12935      option allows GCC to generate the decimal floating point
12936      instructions implemented on some POWER processors.
12938      The `-mpowerpc64' option allows GCC to generate the additional
12939      64-bit instructions that are found in the full PowerPC64
12940      architecture and to treat GPRs as 64-bit, doubleword quantities.
12941      GCC defaults to `-mno-powerpc64'.
12943      If you specify both `-mno-power' and `-mno-powerpc', GCC will use
12944      only the instructions in the common subset of both architectures
12945      plus some special AIX common-mode calls, and will not use the MQ
12946      register.  Specifying both `-mpower' and `-mpowerpc' permits GCC
12947      to use any instruction from either architecture and to allow use
12948      of the MQ register; specify this for the Motorola MPC601.
12950 `-mnew-mnemonics'
12951 `-mold-mnemonics'
12952      Select which mnemonics to use in the generated assembler code.
12953      With `-mnew-mnemonics', GCC uses the assembler mnemonics defined
12954      for the PowerPC architecture.  With `-mold-mnemonics' it uses the
12955      assembler mnemonics defined for the POWER architecture.
12956      Instructions defined in only one architecture have only one
12957      mnemonic; GCC uses that mnemonic irrespective of which of these
12958      options is specified.
12960      GCC defaults to the mnemonics appropriate for the architecture in
12961      use.  Specifying `-mcpu=CPU_TYPE' sometimes overrides the value of
12962      these option.  Unless you are building a cross-compiler, you
12963      should normally not specify either `-mnew-mnemonics' or
12964      `-mold-mnemonics', but should instead accept the default.
12966 `-mcpu=CPU_TYPE'
12967      Set architecture type, register usage, choice of mnemonics, and
12968      instruction scheduling parameters for machine type CPU_TYPE.
12969      Supported values for CPU_TYPE are `401', `403', `405', `405fp',
12970      `440', `440fp', `464', `464fp', `505', `601', `602', `603',
12971      `603e', `604', `604e', `620', `630', `740', `7400', `7450', `750',
12972      `801', `821', `823', `860', `970', `8540', `e300c2', `e300c3',
12973      `e500mc', `ec603e', `G3', `G4', `G5', `power', `power2', `power3',
12974      `power4', `power5', `power5+', `power6', `power6x', `power7'
12975      `common', `powerpc', `powerpc64', `rios', `rios1', `rios2', `rsc',
12976      and `rs64'.
12978      `-mcpu=common' selects a completely generic processor.  Code
12979      generated under this option will run on any POWER or PowerPC
12980      processor.  GCC will use only the instructions in the common
12981      subset of both architectures, and will not use the MQ register.
12982      GCC assumes a generic processor model for scheduling purposes.
12984      `-mcpu=power', `-mcpu=power2', `-mcpu=powerpc', and
12985      `-mcpu=powerpc64' specify generic POWER, POWER2, pure 32-bit
12986      PowerPC (i.e., not MPC601), and 64-bit PowerPC architecture machine
12987      types, with an appropriate, generic processor model assumed for
12988      scheduling purposes.
12990      The other options specify a specific processor.  Code generated
12991      under those options will run best on that processor, and may not
12992      run at all on others.
12994      The `-mcpu' options automatically enable or disable the following
12995      options:
12997           -maltivec  -mfprnd  -mhard-float  -mmfcrf  -mmultiple
12998           -mnew-mnemonics  -mpopcntb  -mpower  -mpower2  -mpowerpc64
12999           -mpowerpc-gpopt  -mpowerpc-gfxopt  -msingle-float -mdouble-float
13000           -msimple-fpu -mstring  -mmulhw  -mdlmzb  -mmfpgpr
13002      The particular options set for any particular CPU will vary between
13003      compiler versions, depending on what setting seems to produce
13004      optimal code for that CPU; it doesn't necessarily reflect the
13005      actual hardware's capabilities.  If you wish to set an individual
13006      option to a particular value, you may specify it after the `-mcpu'
13007      option, like `-mcpu=970 -mno-altivec'.
13009      On AIX, the `-maltivec' and `-mpowerpc64' options are not enabled
13010      or disabled by the `-mcpu' option at present because AIX does not
13011      have full support for these options.  You may still enable or
13012      disable them individually if you're sure it'll work in your
13013      environment.
13015 `-mtune=CPU_TYPE'
13016      Set the instruction scheduling parameters for machine type
13017      CPU_TYPE, but do not set the architecture type, register usage, or
13018      choice of mnemonics, as `-mcpu=CPU_TYPE' would.  The same values
13019      for CPU_TYPE are used for `-mtune' as for `-mcpu'.  If both are
13020      specified, the code generated will use the architecture,
13021      registers, and mnemonics set by `-mcpu', but the scheduling
13022      parameters set by `-mtune'.
13024 `-mswdiv'
13025 `-mno-swdiv'
13026      Generate code to compute division as reciprocal estimate and
13027      iterative refinement, creating opportunities for increased
13028      throughput.  This feature requires: optional PowerPC Graphics
13029      instruction set for single precision and FRE instruction for
13030      double precision, assuming divides cannot generate user-visible
13031      traps, and the domain values not include Infinities, denormals or
13032      zero denominator.
13034 `-maltivec'
13035 `-mno-altivec'
13036      Generate code that uses (does not use) AltiVec instructions, and
13037      also enable the use of built-in functions that allow more direct
13038      access to the AltiVec instruction set.  You may also need to set
13039      `-mabi=altivec' to adjust the current ABI with AltiVec ABI
13040      enhancements.
13042 `-mvrsave'
13043 `-mno-vrsave'
13044      Generate VRSAVE instructions when generating AltiVec code.
13046 `-mgen-cell-microcode'
13047      Generate Cell microcode instructions
13049 `-mwarn-cell-microcode'
13050      Warning when a Cell microcode instruction is going to emitted.  An
13051      example of a Cell microcode instruction is a variable shift.
13053 `-msecure-plt'
13054      Generate code that allows ld and ld.so to build executables and
13055      shared libraries with non-exec .plt and .got sections.  This is a
13056      PowerPC 32-bit SYSV ABI option.
13058 `-mbss-plt'
13059      Generate code that uses a BSS .plt section that ld.so fills in, and
13060      requires .plt and .got sections that are both writable and
13061      executable.  This is a PowerPC 32-bit SYSV ABI option.
13063 `-misel'
13064 `-mno-isel'
13065      This switch enables or disables the generation of ISEL
13066      instructions.
13068 `-misel=YES/NO'
13069      This switch has been deprecated.  Use `-misel' and `-mno-isel'
13070      instead.
13072 `-mspe'
13073 `-mno-spe'
13074      This switch enables or disables the generation of SPE simd
13075      instructions.
13077 `-mpaired'
13078 `-mno-paired'
13079      This switch enables or disables the generation of PAIRED simd
13080      instructions.
13082 `-mspe=YES/NO'
13083      This option has been deprecated.  Use `-mspe' and `-mno-spe'
13084      instead.
13086 `-mfloat-gprs=YES/SINGLE/DOUBLE/NO'
13087 `-mfloat-gprs'
13088      This switch enables or disables the generation of floating point
13089      operations on the general purpose registers for architectures that
13090      support it.
13092      The argument YES or SINGLE enables the use of single-precision
13093      floating point operations.
13095      The argument DOUBLE enables the use of single and double-precision
13096      floating point operations.
13098      The argument NO disables floating point operations on the general
13099      purpose registers.
13101      This option is currently only available on the MPC854x.
13103 `-m32'
13104 `-m64'
13105      Generate code for 32-bit or 64-bit environments of Darwin and SVR4
13106      targets (including GNU/Linux).  The 32-bit environment sets int,
13107      long and pointer to 32 bits and generates code that runs on any
13108      PowerPC variant.  The 64-bit environment sets int to 32 bits and
13109      long and pointer to 64 bits, and generates code for PowerPC64, as
13110      for `-mpowerpc64'.
13112 `-mfull-toc'
13113 `-mno-fp-in-toc'
13114 `-mno-sum-in-toc'
13115 `-mminimal-toc'
13116      Modify generation of the TOC (Table Of Contents), which is created
13117      for every executable file.  The `-mfull-toc' option is selected by
13118      default.  In that case, GCC will allocate at least one TOC entry
13119      for each unique non-automatic variable reference in your program.
13120      GCC will also place floating-point constants in the TOC.  However,
13121      only 16,384 entries are available in the TOC.
13123      If you receive a linker error message that saying you have
13124      overflowed the available TOC space, you can reduce the amount of
13125      TOC space used with the `-mno-fp-in-toc' and `-mno-sum-in-toc'
13126      options.  `-mno-fp-in-toc' prevents GCC from putting floating-point
13127      constants in the TOC and `-mno-sum-in-toc' forces GCC to generate
13128      code to calculate the sum of an address and a constant at run-time
13129      instead of putting that sum into the TOC.  You may specify one or
13130      both of these options.  Each causes GCC to produce very slightly
13131      slower and larger code at the expense of conserving TOC space.
13133      If you still run out of space in the TOC even when you specify
13134      both of these options, specify `-mminimal-toc' instead.  This
13135      option causes GCC to make only one TOC entry for every file.  When
13136      you specify this option, GCC will produce code that is slower and
13137      larger but which uses extremely little TOC space.  You may wish to
13138      use this option only on files that contain less frequently
13139      executed code.
13141 `-maix64'
13142 `-maix32'
13143      Enable 64-bit AIX ABI and calling convention: 64-bit pointers,
13144      64-bit `long' type, and the infrastructure needed to support them.
13145      Specifying `-maix64' implies `-mpowerpc64' and `-mpowerpc', while
13146      `-maix32' disables the 64-bit ABI and implies `-mno-powerpc64'.
13147      GCC defaults to `-maix32'.
13149 `-mxl-compat'
13150 `-mno-xl-compat'
13151      Produce code that conforms more closely to IBM XL compiler
13152      semantics when using AIX-compatible ABI.  Pass floating-point
13153      arguments to prototyped functions beyond the register save area
13154      (RSA) on the stack in addition to argument FPRs.  Do not assume
13155      that most significant double in 128-bit long double value is
13156      properly rounded when comparing values and converting to double.
13157      Use XL symbol names for long double support routines.
13159      The AIX calling convention was extended but not initially
13160      documented to handle an obscure K&R C case of calling a function
13161      that takes the address of its arguments with fewer arguments than
13162      declared.  IBM XL compilers access floating point arguments which
13163      do not fit in the RSA from the stack when a subroutine is compiled
13164      without optimization.  Because always storing floating-point
13165      arguments on the stack is inefficient and rarely needed, this
13166      option is not enabled by default and only is necessary when
13167      calling subroutines compiled by IBM XL compilers without
13168      optimization.
13170 `-mpe'
13171      Support "IBM RS/6000 SP" "Parallel Environment" (PE).  Link an
13172      application written to use message passing with special startup
13173      code to enable the application to run.  The system must have PE
13174      installed in the standard location (`/usr/lpp/ppe.poe/'), or the
13175      `specs' file must be overridden with the `-specs=' option to
13176      specify the appropriate directory location.  The Parallel
13177      Environment does not support threads, so the `-mpe' option and the
13178      `-pthread' option are incompatible.
13180 `-malign-natural'
13181 `-malign-power'
13182      On AIX, 32-bit Darwin, and 64-bit PowerPC GNU/Linux, the option
13183      `-malign-natural' overrides the ABI-defined alignment of larger
13184      types, such as floating-point doubles, on their natural size-based
13185      boundary.  The option `-malign-power' instructs GCC to follow the
13186      ABI-specified alignment rules.  GCC defaults to the standard
13187      alignment defined in the ABI.
13189      On 64-bit Darwin, natural alignment is the default, and
13190      `-malign-power' is not supported.
13192 `-msoft-float'
13193 `-mhard-float'
13194      Generate code that does not use (uses) the floating-point register
13195      set.  Software floating point emulation is provided if you use the
13196      `-msoft-float' option, and pass the option to GCC when linking.
13198 `-msingle-float'
13199 `-mdouble-float'
13200      Generate code for single or double-precision floating point
13201      operations.  `-mdouble-float' implies `-msingle-float'.
13203 `-msimple-fpu'
13204      Do not generate sqrt and div instructions for hardware floating
13205      point unit.
13207 `-mfpu'
13208      Specify type of floating point unit.  Valid values are SP_LITE
13209      (equivalent to -msingle-float -msimple-fpu), DP_LITE (equivalent
13210      to -mdouble-float -msimple-fpu), SP_FULL (equivalent to
13211      -msingle-float), and DP_FULL (equivalent to -mdouble-float).
13213 `-mxilinx-fpu'
13214      Perform optimizations for floating point unit on Xilinx PPC
13215      405/440.
13217 `-mmultiple'
13218 `-mno-multiple'
13219      Generate code that uses (does not use) the load multiple word
13220      instructions and the store multiple word instructions.  These
13221      instructions are generated by default on POWER systems, and not
13222      generated on PowerPC systems.  Do not use `-mmultiple' on little
13223      endian PowerPC systems, since those instructions do not work when
13224      the processor is in little endian mode.  The exceptions are PPC740
13225      and PPC750 which permit the instructions usage in little endian
13226      mode.
13228 `-mstring'
13229 `-mno-string'
13230      Generate code that uses (does not use) the load string instructions
13231      and the store string word instructions to save multiple registers
13232      and do small block moves.  These instructions are generated by
13233      default on POWER systems, and not generated on PowerPC systems.
13234      Do not use `-mstring' on little endian PowerPC systems, since those
13235      instructions do not work when the processor is in little endian
13236      mode.  The exceptions are PPC740 and PPC750 which permit the
13237      instructions usage in little endian mode.
13239 `-mupdate'
13240 `-mno-update'
13241      Generate code that uses (does not use) the load or store
13242      instructions that update the base register to the address of the
13243      calculated memory location.  These instructions are generated by
13244      default.  If you use `-mno-update', there is a small window
13245      between the time that the stack pointer is updated and the address
13246      of the previous frame is stored, which means code that walks the
13247      stack frame across interrupts or signals may get corrupted data.
13249 `-mavoid-indexed-addresses'
13251 `-mno-avoid-indexed-addresses'
13252      Generate code that tries to avoid (not avoid) the use of indexed
13253      load or store instructions. These instructions can incur a
13254      performance penalty on Power6 processors in certain situations,
13255      such as when stepping through large arrays that cross a 16M
13256      boundary.  This option is enabled by default when targetting
13257      Power6 and disabled otherwise.
13259 `-mfused-madd'
13260 `-mno-fused-madd'
13261      Generate code that uses (does not use) the floating point multiply
13262      and accumulate instructions.  These instructions are generated by
13263      default if hardware floating is used.
13265 `-mmulhw'
13266 `-mno-mulhw'
13267      Generate code that uses (does not use) the half-word multiply and
13268      multiply-accumulate instructions on the IBM 405, 440 and 464
13269      processors.  These instructions are generated by default when
13270      targetting those processors.
13272 `-mdlmzb'
13273 `-mno-dlmzb'
13274      Generate code that uses (does not use) the string-search `dlmzb'
13275      instruction on the IBM 405, 440 and 464 processors.  This
13276      instruction is generated by default when targetting those
13277      processors.
13279 `-mno-bit-align'
13280 `-mbit-align'
13281      On System V.4 and embedded PowerPC systems do not (do) force
13282      structures and unions that contain bit-fields to be aligned to the
13283      base type of the bit-field.
13285      For example, by default a structure containing nothing but 8
13286      `unsigned' bit-fields of length 1 would be aligned to a 4 byte
13287      boundary and have a size of 4 bytes.  By using `-mno-bit-align',
13288      the structure would be aligned to a 1 byte boundary and be one
13289      byte in size.
13291 `-mno-strict-align'
13292 `-mstrict-align'
13293      On System V.4 and embedded PowerPC systems do not (do) assume that
13294      unaligned memory references will be handled by the system.
13296 `-mrelocatable'
13297 `-mno-relocatable'
13298      On embedded PowerPC systems generate code that allows (does not
13299      allow) the program to be relocated to a different address at
13300      runtime.  If you use `-mrelocatable' on any module, all objects
13301      linked together must be compiled with `-mrelocatable' or
13302      `-mrelocatable-lib'.
13304 `-mrelocatable-lib'
13305 `-mno-relocatable-lib'
13306      On embedded PowerPC systems generate code that allows (does not
13307      allow) the program to be relocated to a different address at
13308      runtime.  Modules compiled with `-mrelocatable-lib' can be linked
13309      with either modules compiled without `-mrelocatable' and
13310      `-mrelocatable-lib' or with modules compiled with the
13311      `-mrelocatable' options.
13313 `-mno-toc'
13314 `-mtoc'
13315      On System V.4 and embedded PowerPC systems do not (do) assume that
13316      register 2 contains a pointer to a global area pointing to the
13317      addresses used in the program.
13319 `-mlittle'
13320 `-mlittle-endian'
13321      On System V.4 and embedded PowerPC systems compile code for the
13322      processor in little endian mode.  The `-mlittle-endian' option is
13323      the same as `-mlittle'.
13325 `-mbig'
13326 `-mbig-endian'
13327      On System V.4 and embedded PowerPC systems compile code for the
13328      processor in big endian mode.  The `-mbig-endian' option is the
13329      same as `-mbig'.
13331 `-mdynamic-no-pic'
13332      On Darwin and Mac OS X systems, compile code so that it is not
13333      relocatable, but that its external references are relocatable.  The
13334      resulting code is suitable for applications, but not shared
13335      libraries.
13337 `-mprioritize-restricted-insns=PRIORITY'
13338      This option controls the priority that is assigned to
13339      dispatch-slot restricted instructions during the second scheduling
13340      pass.  The argument PRIORITY takes the value 0/1/2 to assign
13341      NO/HIGHEST/SECOND-HIGHEST priority to dispatch slot restricted
13342      instructions.
13344 `-msched-costly-dep=DEPENDENCE_TYPE'
13345      This option controls which dependences are considered costly by
13346      the target during instruction scheduling.  The argument
13347      DEPENDENCE_TYPE takes one of the following values: NO: no
13348      dependence is costly, ALL: all dependences are costly,
13349      TRUE_STORE_TO_LOAD: a true dependence from store to load is costly,
13350      STORE_TO_LOAD: any dependence from store to load is costly,
13351      NUMBER: any dependence which latency >= NUMBER is costly.
13353 `-minsert-sched-nops=SCHEME'
13354      This option controls which nop insertion scheme will be used during
13355      the second scheduling pass.  The argument SCHEME takes one of the
13356      following values: NO: Don't insert nops.  PAD: Pad with nops any
13357      dispatch group which has vacant issue slots, according to the
13358      scheduler's grouping.  REGROUP_EXACT: Insert nops to force costly
13359      dependent insns into separate groups.  Insert exactly as many nops
13360      as needed to force an insn to a new group, according to the
13361      estimated processor grouping.  NUMBER: Insert nops to force costly
13362      dependent insns into separate groups.  Insert NUMBER nops to force
13363      an insn to a new group.
13365 `-mcall-sysv'
13366      On System V.4 and embedded PowerPC systems compile code using
13367      calling conventions that adheres to the March 1995 draft of the
13368      System V Application Binary Interface, PowerPC processor
13369      supplement.  This is the default unless you configured GCC using
13370      `powerpc-*-eabiaix'.
13372 `-mcall-sysv-eabi'
13373      Specify both `-mcall-sysv' and `-meabi' options.
13375 `-mcall-sysv-noeabi'
13376      Specify both `-mcall-sysv' and `-mno-eabi' options.
13378 `-mcall-solaris'
13379      On System V.4 and embedded PowerPC systems compile code for the
13380      Solaris operating system.
13382 `-mcall-linux'
13383      On System V.4 and embedded PowerPC systems compile code for the
13384      Linux-based GNU system.
13386 `-mcall-gnu'
13387      On System V.4 and embedded PowerPC systems compile code for the
13388      Hurd-based GNU system.
13390 `-mcall-netbsd'
13391      On System V.4 and embedded PowerPC systems compile code for the
13392      NetBSD operating system.
13394 `-maix-struct-return'
13395      Return all structures in memory (as specified by the AIX ABI).
13397 `-msvr4-struct-return'
13398      Return structures smaller than 8 bytes in registers (as specified
13399      by the SVR4 ABI).
13401 `-mabi=ABI-TYPE'
13402      Extend the current ABI with a particular extension, or remove such
13403      extension.  Valid values are ALTIVEC, NO-ALTIVEC, SPE, NO-SPE,
13404      IBMLONGDOUBLE, IEEELONGDOUBLE.
13406 `-mabi=spe'
13407      Extend the current ABI with SPE ABI extensions.  This does not
13408      change the default ABI, instead it adds the SPE ABI extensions to
13409      the current ABI.
13411 `-mabi=no-spe'
13412      Disable Booke SPE ABI extensions for the current ABI.
13414 `-mabi=ibmlongdouble'
13415      Change the current ABI to use IBM extended precision long double.
13416      This is a PowerPC 32-bit SYSV ABI option.
13418 `-mabi=ieeelongdouble'
13419      Change the current ABI to use IEEE extended precision long double.
13420      This is a PowerPC 32-bit Linux ABI option.
13422 `-mprototype'
13423 `-mno-prototype'
13424      On System V.4 and embedded PowerPC systems assume that all calls to
13425      variable argument functions are properly prototyped.  Otherwise,
13426      the compiler must insert an instruction before every non
13427      prototyped call to set or clear bit 6 of the condition code
13428      register (CR) to indicate whether floating point values were
13429      passed in the floating point registers in case the function takes
13430      a variable arguments.  With `-mprototype', only calls to
13431      prototyped variable argument functions will set or clear the bit.
13433 `-msim'
13434      On embedded PowerPC systems, assume that the startup module is
13435      called `sim-crt0.o' and that the standard C libraries are
13436      `libsim.a' and `libc.a'.  This is the default for
13437      `powerpc-*-eabisim' configurations.
13439 `-mmvme'
13440      On embedded PowerPC systems, assume that the startup module is
13441      called `crt0.o' and the standard C libraries are `libmvme.a' and
13442      `libc.a'.
13444 `-mads'
13445      On embedded PowerPC systems, assume that the startup module is
13446      called `crt0.o' and the standard C libraries are `libads.a' and
13447      `libc.a'.
13449 `-myellowknife'
13450      On embedded PowerPC systems, assume that the startup module is
13451      called `crt0.o' and the standard C libraries are `libyk.a' and
13452      `libc.a'.
13454 `-mvxworks'
13455      On System V.4 and embedded PowerPC systems, specify that you are
13456      compiling for a VxWorks system.
13458 `-memb'
13459      On embedded PowerPC systems, set the PPC_EMB bit in the ELF flags
13460      header to indicate that `eabi' extended relocations are used.
13462 `-meabi'
13463 `-mno-eabi'
13464      On System V.4 and embedded PowerPC systems do (do not) adhere to
13465      the Embedded Applications Binary Interface (eabi) which is a set of
13466      modifications to the System V.4 specifications.  Selecting `-meabi'
13467      means that the stack is aligned to an 8 byte boundary, a function
13468      `__eabi' is called to from `main' to set up the eabi environment,
13469      and the `-msdata' option can use both `r2' and `r13' to point to
13470      two separate small data areas.  Selecting `-mno-eabi' means that
13471      the stack is aligned to a 16 byte boundary, do not call an
13472      initialization function from `main', and the `-msdata' option will
13473      only use `r13' to point to a single small data area.  The `-meabi'
13474      option is on by default if you configured GCC using one of the
13475      `powerpc*-*-eabi*' options.
13477 `-msdata=eabi'
13478      On System V.4 and embedded PowerPC systems, put small initialized
13479      `const' global and static data in the `.sdata2' section, which is
13480      pointed to by register `r2'.  Put small initialized non-`const'
13481      global and static data in the `.sdata' section, which is pointed
13482      to by register `r13'.  Put small uninitialized global and static
13483      data in the `.sbss' section, which is adjacent to the `.sdata'
13484      section.  The `-msdata=eabi' option is incompatible with the
13485      `-mrelocatable' option.  The `-msdata=eabi' option also sets the
13486      `-memb' option.
13488 `-msdata=sysv'
13489      On System V.4 and embedded PowerPC systems, put small global and
13490      static data in the `.sdata' section, which is pointed to by
13491      register `r13'.  Put small uninitialized global and static data in
13492      the `.sbss' section, which is adjacent to the `.sdata' section.
13493      The `-msdata=sysv' option is incompatible with the `-mrelocatable'
13494      option.
13496 `-msdata=default'
13497 `-msdata'
13498      On System V.4 and embedded PowerPC systems, if `-meabi' is used,
13499      compile code the same as `-msdata=eabi', otherwise compile code the
13500      same as `-msdata=sysv'.
13502 `-msdata=data'
13503      On System V.4 and embedded PowerPC systems, put small global data
13504      in the `.sdata' section.  Put small uninitialized global data in
13505      the `.sbss' section.  Do not use register `r13' to address small
13506      data however.  This is the default behavior unless other `-msdata'
13507      options are used.
13509 `-msdata=none'
13510 `-mno-sdata'
13511      On embedded PowerPC systems, put all initialized global and static
13512      data in the `.data' section, and all uninitialized data in the
13513      `.bss' section.
13515 `-G NUM'
13516      On embedded PowerPC systems, put global and static items less than
13517      or equal to NUM bytes into the small data or bss sections instead
13518      of the normal data or bss section.  By default, NUM is 8.  The `-G
13519      NUM' switch is also passed to the linker.  All modules should be
13520      compiled with the same `-G NUM' value.
13522 `-mregnames'
13523 `-mno-regnames'
13524      On System V.4 and embedded PowerPC systems do (do not) emit
13525      register names in the assembly language output using symbolic
13526      forms.
13528 `-mlongcall'
13529 `-mno-longcall'
13530      By default assume that all calls are far away so that a longer more
13531      expensive calling sequence is required.  This is required for calls
13532      further than 32 megabytes (33,554,432 bytes) from the current
13533      location.  A short call will be generated if the compiler knows
13534      the call cannot be that far away.  This setting can be overridden
13535      by the `shortcall' function attribute, or by `#pragma longcall(0)'.
13537      Some linkers are capable of detecting out-of-range calls and
13538      generating glue code on the fly.  On these systems, long calls are
13539      unnecessary and generate slower code.  As of this writing, the AIX
13540      linker can do this, as can the GNU linker for PowerPC/64.  It is
13541      planned to add this feature to the GNU linker for 32-bit PowerPC
13542      systems as well.
13544      On Darwin/PPC systems, `#pragma longcall' will generate "jbsr
13545      callee, L42", plus a "branch island" (glue code).  The two target
13546      addresses represent the callee and the "branch island".  The
13547      Darwin/PPC linker will prefer the first address and generate a "bl
13548      callee" if the PPC "bl" instruction will reach the callee directly;
13549      otherwise, the linker will generate "bl L42" to call the "branch
13550      island".  The "branch island" is appended to the body of the
13551      calling function; it computes the full 32-bit address of the callee
13552      and jumps to it.
13554      On Mach-O (Darwin) systems, this option directs the compiler emit
13555      to the glue for every direct call, and the Darwin linker decides
13556      whether to use or discard it.
13558      In the future, we may cause GCC to ignore all longcall
13559      specifications when the linker is known to generate glue.
13561 `-pthread'
13562      Adds support for multithreading with the "pthreads" library.  This
13563      option sets flags for both the preprocessor and linker.
13566 \x1f
13567 File: gcc.info,  Node: S/390 and zSeries Options,  Next: Score Options,  Prev: RS/6000 and PowerPC Options,  Up: Submodel Options
13569 3.17.29 S/390 and zSeries Options
13570 ---------------------------------
13572 These are the `-m' options defined for the S/390 and zSeries
13573 architecture.
13575 `-mhard-float'
13576 `-msoft-float'
13577      Use (do not use) the hardware floating-point instructions and
13578      registers for floating-point operations.  When `-msoft-float' is
13579      specified, functions in `libgcc.a' will be used to perform
13580      floating-point operations.  When `-mhard-float' is specified, the
13581      compiler generates IEEE floating-point instructions.  This is the
13582      default.
13584 `-mhard-dfp'
13585 `-mno-hard-dfp'
13586      Use (do not use) the hardware decimal-floating-point instructions
13587      for decimal-floating-point operations.  When `-mno-hard-dfp' is
13588      specified, functions in `libgcc.a' will be used to perform
13589      decimal-floating-point operations.  When `-mhard-dfp' is
13590      specified, the compiler generates decimal-floating-point hardware
13591      instructions.  This is the default for `-march=z9-ec' or higher.
13593 `-mlong-double-64'
13594 `-mlong-double-128'
13595      These switches control the size of `long double' type. A size of
13596      64bit makes the `long double' type equivalent to the `double'
13597      type. This is the default.
13599 `-mbackchain'
13600 `-mno-backchain'
13601      Store (do not store) the address of the caller's frame as
13602      backchain pointer into the callee's stack frame.  A backchain may
13603      be needed to allow debugging using tools that do not understand
13604      DWARF-2 call frame information.  When `-mno-packed-stack' is in
13605      effect, the backchain pointer is stored at the bottom of the stack
13606      frame; when `-mpacked-stack' is in effect, the backchain is placed
13607      into the topmost word of the 96/160 byte register save area.
13609      In general, code compiled with `-mbackchain' is call-compatible
13610      with code compiled with `-mmo-backchain'; however, use of the
13611      backchain for debugging purposes usually requires that the whole
13612      binary is built with `-mbackchain'.  Note that the combination of
13613      `-mbackchain', `-mpacked-stack' and `-mhard-float' is not
13614      supported.  In order to build a linux kernel use `-msoft-float'.
13616      The default is to not maintain the backchain.
13618 `-mpacked-stack'
13619 `-mno-packed-stack'
13620      Use (do not use) the packed stack layout.  When
13621      `-mno-packed-stack' is specified, the compiler uses the all fields
13622      of the 96/160 byte register save area only for their default
13623      purpose; unused fields still take up stack space.  When
13624      `-mpacked-stack' is specified, register save slots are densely
13625      packed at the top of the register save area; unused space is
13626      reused for other purposes, allowing for more efficient use of the
13627      available stack space.  However, when `-mbackchain' is also in
13628      effect, the topmost word of the save area is always used to store
13629      the backchain, and the return address register is always saved two
13630      words below the backchain.
13632      As long as the stack frame backchain is not used, code generated
13633      with `-mpacked-stack' is call-compatible with code generated with
13634      `-mno-packed-stack'.  Note that some non-FSF releases of GCC 2.95
13635      for S/390 or zSeries generated code that uses the stack frame
13636      backchain at run time, not just for debugging purposes.  Such code
13637      is not call-compatible with code compiled with `-mpacked-stack'.
13638      Also, note that the combination of `-mbackchain', `-mpacked-stack'
13639      and `-mhard-float' is not supported.  In order to build a linux
13640      kernel use `-msoft-float'.
13642      The default is to not use the packed stack layout.
13644 `-msmall-exec'
13645 `-mno-small-exec'
13646      Generate (or do not generate) code using the `bras' instruction to
13647      do subroutine calls.  This only works reliably if the total
13648      executable size does not exceed 64k.  The default is to use the
13649      `basr' instruction instead, which does not have this limitation.
13651 `-m64'
13652 `-m31'
13653      When `-m31' is specified, generate code compliant to the GNU/Linux
13654      for S/390 ABI.  When `-m64' is specified, generate code compliant
13655      to the GNU/Linux for zSeries ABI.  This allows GCC in particular
13656      to generate 64-bit instructions.  For the `s390' targets, the
13657      default is `-m31', while the `s390x' targets default to `-m64'.
13659 `-mzarch'
13660 `-mesa'
13661      When `-mzarch' is specified, generate code using the instructions
13662      available on z/Architecture.  When `-mesa' is specified, generate
13663      code using the instructions available on ESA/390.  Note that
13664      `-mesa' is not possible with `-m64'.  When generating code
13665      compliant to the GNU/Linux for S/390 ABI, the default is `-mesa'.
13666      When generating code compliant to the GNU/Linux for zSeries ABI,
13667      the default is `-mzarch'.
13669 `-mmvcle'
13670 `-mno-mvcle'
13671      Generate (or do not generate) code using the `mvcle' instruction
13672      to perform block moves.  When `-mno-mvcle' is specified, use a
13673      `mvc' loop instead.  This is the default unless optimizing for
13674      size.
13676 `-mdebug'
13677 `-mno-debug'
13678      Print (or do not print) additional debug information when
13679      compiling.  The default is to not print debug information.
13681 `-march=CPU-TYPE'
13682      Generate code that will run on CPU-TYPE, which is the name of a
13683      system representing a certain processor type.  Possible values for
13684      CPU-TYPE are `g5', `g6', `z900', `z990', `z9-109', `z9-ec' and
13685      `z10'.  When generating code using the instructions available on
13686      z/Architecture, the default is `-march=z900'.  Otherwise, the
13687      default is `-march=g5'.
13689 `-mtune=CPU-TYPE'
13690      Tune to CPU-TYPE everything applicable about the generated code,
13691      except for the ABI and the set of available instructions.  The
13692      list of CPU-TYPE values is the same as for `-march'.  The default
13693      is the value used for `-march'.
13695 `-mtpf-trace'
13696 `-mno-tpf-trace'
13697      Generate code that adds (does not add) in TPF OS specific branches
13698      to trace routines in the operating system.  This option is off by
13699      default, even when compiling for the TPF OS.
13701 `-mfused-madd'
13702 `-mno-fused-madd'
13703      Generate code that uses (does not use) the floating point multiply
13704      and accumulate instructions.  These instructions are generated by
13705      default if hardware floating point is used.
13707 `-mwarn-framesize=FRAMESIZE'
13708      Emit a warning if the current function exceeds the given frame
13709      size.  Because this is a compile time check it doesn't need to be
13710      a real problem when the program runs.  It is intended to identify
13711      functions which most probably cause a stack overflow.  It is
13712      useful to be used in an environment with limited stack size e.g.
13713      the linux kernel.
13715 `-mwarn-dynamicstack'
13716      Emit a warning if the function calls alloca or uses dynamically
13717      sized arrays.  This is generally a bad idea with a limited stack
13718      size.
13720 `-mstack-guard=STACK-GUARD'
13721 `-mstack-size=STACK-SIZE'
13722      If these options are provided the s390 back end emits additional
13723      instructions in the function prologue which trigger a trap if the
13724      stack size is STACK-GUARD bytes above the STACK-SIZE (remember
13725      that the stack on s390 grows downward).  If the STACK-GUARD option
13726      is omitted the smallest power of 2 larger than the frame size of
13727      the compiled function is chosen.  These options are intended to be
13728      used to help debugging stack overflow problems.  The additionally
13729      emitted code causes only little overhead and hence can also be
13730      used in production like systems without greater performance
13731      degradation.  The given values have to be exact powers of 2 and
13732      STACK-SIZE has to be greater than STACK-GUARD without exceeding
13733      64k.  In order to be efficient the extra code makes the assumption
13734      that the stack starts at an address aligned to the value given by
13735      STACK-SIZE.  The STACK-GUARD option can only be used in
13736      conjunction with STACK-SIZE.
13738 \x1f
13739 File: gcc.info,  Node: Score Options,  Next: SH Options,  Prev: S/390 and zSeries Options,  Up: Submodel Options
13741 3.17.30 Score Options
13742 ---------------------
13744 These options are defined for Score implementations:
13746 `-meb'
13747      Compile code for big endian mode.  This is the default.
13749 `-mel'
13750      Compile code for little endian mode.
13752 `-mnhwloop'
13753      Disable generate bcnz instruction.
13755 `-muls'
13756      Enable generate unaligned load and store instruction.
13758 `-mmac'
13759      Enable the use of multiply-accumulate instructions. Disabled by
13760      default.
13762 `-mscore5'
13763      Specify the SCORE5 as the target architecture.
13765 `-mscore5u'
13766      Specify the SCORE5U of the target architecture.
13768 `-mscore7'
13769      Specify the SCORE7 as the target architecture. This is the default.
13771 `-mscore7d'
13772      Specify the SCORE7D as the target architecture.
13774 \x1f
13775 File: gcc.info,  Node: SH Options,  Next: SPARC Options,  Prev: Score Options,  Up: Submodel Options
13777 3.17.31 SH Options
13778 ------------------
13780 These `-m' options are defined for the SH implementations:
13782 `-m1'
13783      Generate code for the SH1.
13785 `-m2'
13786      Generate code for the SH2.
13788 `-m2e'
13789      Generate code for the SH2e.
13791 `-m3'
13792      Generate code for the SH3.
13794 `-m3e'
13795      Generate code for the SH3e.
13797 `-m4-nofpu'
13798      Generate code for the SH4 without a floating-point unit.
13800 `-m4-single-only'
13801      Generate code for the SH4 with a floating-point unit that only
13802      supports single-precision arithmetic.
13804 `-m4-single'
13805      Generate code for the SH4 assuming the floating-point unit is in
13806      single-precision mode by default.
13808 `-m4'
13809      Generate code for the SH4.
13811 `-m4a-nofpu'
13812      Generate code for the SH4al-dsp, or for a SH4a in such a way that
13813      the floating-point unit is not used.
13815 `-m4a-single-only'
13816      Generate code for the SH4a, in such a way that no double-precision
13817      floating point operations are used.
13819 `-m4a-single'
13820      Generate code for the SH4a assuming the floating-point unit is in
13821      single-precision mode by default.
13823 `-m4a'
13824      Generate code for the SH4a.
13826 `-m4al'
13827      Same as `-m4a-nofpu', except that it implicitly passes `-dsp' to
13828      the assembler.  GCC doesn't generate any DSP instructions at the
13829      moment.
13831 `-mb'
13832      Compile code for the processor in big endian mode.
13834 `-ml'
13835      Compile code for the processor in little endian mode.
13837 `-mdalign'
13838      Align doubles at 64-bit boundaries.  Note that this changes the
13839      calling conventions, and thus some functions from the standard C
13840      library will not work unless you recompile it first with
13841      `-mdalign'.
13843 `-mrelax'
13844      Shorten some address references at link time, when possible; uses
13845      the linker option `-relax'.
13847 `-mbigtable'
13848      Use 32-bit offsets in `switch' tables.  The default is to use
13849      16-bit offsets.
13851 `-mbitops'
13852      Enable the use of bit manipulation instructions on SH2A.
13854 `-mfmovd'
13855      Enable the use of the instruction `fmovd'.
13857 `-mhitachi'
13858      Comply with the calling conventions defined by Renesas.
13860 `-mrenesas'
13861      Comply with the calling conventions defined by Renesas.
13863 `-mno-renesas'
13864      Comply with the calling conventions defined for GCC before the
13865      Renesas conventions were available.  This option is the default
13866      for all targets of the SH toolchain except for `sh-symbianelf'.
13868 `-mnomacsave'
13869      Mark the `MAC' register as call-clobbered, even if `-mhitachi' is
13870      given.
13872 `-mieee'
13873      Increase IEEE-compliance of floating-point code.  At the moment,
13874      this is equivalent to `-fno-finite-math-only'.  When generating 16
13875      bit SH opcodes, getting IEEE-conforming results for comparisons of
13876      NANs / infinities incurs extra overhead in every floating point
13877      comparison, therefore the default is set to `-ffinite-math-only'.
13879 `-minline-ic_invalidate'
13880      Inline code to invalidate instruction cache entries after setting
13881      up nested function trampolines.  This option has no effect if
13882      -musermode is in effect and the selected code generation option
13883      (e.g. -m4) does not allow the use of the icbi instruction.  If the
13884      selected code generation option does not allow the use of the icbi
13885      instruction, and -musermode is not in effect, the inlined code will
13886      manipulate the instruction cache address array directly with an
13887      associative write.  This not only requires privileged mode, but it
13888      will also fail if the cache line had been mapped via the TLB and
13889      has become unmapped.
13891 `-misize'
13892      Dump instruction size and location in the assembly code.
13894 `-mpadstruct'
13895      This option is deprecated.  It pads structures to multiple of 4
13896      bytes, which is incompatible with the SH ABI.
13898 `-mspace'
13899      Optimize for space instead of speed.  Implied by `-Os'.
13901 `-mprefergot'
13902      When generating position-independent code, emit function calls
13903      using the Global Offset Table instead of the Procedure Linkage
13904      Table.
13906 `-musermode'
13907      Don't generate privileged mode only code; implies
13908      -mno-inline-ic_invalidate if the inlined code would not work in
13909      user mode.  This is the default when the target is `sh-*-linux*'.
13911 `-multcost=NUMBER'
13912      Set the cost to assume for a multiply insn.
13914 `-mdiv=STRATEGY'
13915      Set the division strategy to use for SHmedia code.  STRATEGY must
13916      be one of: call, call2, fp, inv, inv:minlat, inv20u, inv20l,
13917      inv:call, inv:call2, inv:fp .  "fp" performs the operation in
13918      floating point.  This has a very high latency, but needs only a
13919      few instructions, so it might be a good choice if your code has
13920      enough easily exploitable ILP to allow the compiler to schedule
13921      the floating point instructions together with other instructions.
13922      Division by zero causes a floating point exception.  "inv" uses
13923      integer operations to calculate the inverse of the divisor, and
13924      then multiplies the dividend with the inverse.  This strategy
13925      allows cse and hoisting of the inverse calculation.  Division by
13926      zero calculates an unspecified result, but does not trap.
13927      "inv:minlat" is a variant of "inv" where if no cse / hoisting
13928      opportunities have been found, or if the entire operation has been
13929      hoisted to the same place, the last stages of the inverse
13930      calculation are intertwined with the final multiply to reduce the
13931      overall latency, at the expense of using a few more instructions,
13932      and thus offering fewer scheduling opportunities with other code.
13933      "call" calls a library function that usually implements the
13934      inv:minlat strategy.  This gives high code density for
13935      m5-*media-nofpu compilations.  "call2" uses a different entry
13936      point of the same library function, where it assumes that a
13937      pointer to a lookup table has already been set up, which exposes
13938      the pointer load to cse / code hoisting optimizations.
13939      "inv:call", "inv:call2" and "inv:fp" all use the "inv" algorithm
13940      for initial code generation, but if the code stays unoptimized,
13941      revert to the "call", "call2", or "fp" strategies, respectively.
13942      Note that the potentially-trapping side effect of division by zero
13943      is carried by a separate instruction, so it is possible that all
13944      the integer instructions are hoisted out, but the marker for the
13945      side effect stays where it is.  A recombination to fp operations
13946      or a call is not possible in that case.  "inv20u" and "inv20l" are
13947      variants of the "inv:minlat" strategy.  In the case that the
13948      inverse calculation was nor separated from the multiply, they speed
13949      up division where the dividend fits into 20 bits (plus sign where
13950      applicable), by inserting a test to skip a number of operations in
13951      this case; this test slows down the case of larger dividends.
13952      inv20u assumes the case of a such a small dividend to be unlikely,
13953      and inv20l assumes it to be likely.
13955 `-mdivsi3_libfunc=NAME'
13956      Set the name of the library function used for 32 bit signed
13957      division to NAME.  This only affect the name used in the call and
13958      inv:call division strategies, and the compiler will still expect
13959      the same sets of input/output/clobbered registers as if this
13960      option was not present.
13962 `-mfixed-range=REGISTER-RANGE'
13963      Generate code treating the given register range as fixed registers.
13964      A fixed register is one that the register allocator can not use.
13965      This is useful when compiling kernel code.  A register range is
13966      specified as two registers separated by a dash.  Multiple register
13967      ranges can be specified separated by a comma.
13969 `-madjust-unroll'
13970      Throttle unrolling to avoid thrashing target registers.  This
13971      option only has an effect if the gcc code base supports the
13972      TARGET_ADJUST_UNROLL_MAX target hook.
13974 `-mindexed-addressing'
13975      Enable the use of the indexed addressing mode for
13976      SHmedia32/SHcompact.  This is only safe if the hardware and/or OS
13977      implement 32 bit wrap-around semantics for the indexed addressing
13978      mode.  The architecture allows the implementation of processors
13979      with 64 bit MMU, which the OS could use to get 32 bit addressing,
13980      but since no current hardware implementation supports this or any
13981      other way to make the indexed addressing mode safe to use in the
13982      32 bit ABI, the default is -mno-indexed-addressing.
13984 `-mgettrcost=NUMBER'
13985      Set the cost assumed for the gettr instruction to NUMBER.  The
13986      default is 2 if `-mpt-fixed' is in effect, 100 otherwise.
13988 `-mpt-fixed'
13989      Assume pt* instructions won't trap.  This will generally generate
13990      better scheduled code, but is unsafe on current hardware.  The
13991      current architecture definition says that ptabs and ptrel trap
13992      when the target anded with 3 is 3.  This has the unintentional
13993      effect of making it unsafe to schedule ptabs / ptrel before a
13994      branch, or hoist it out of a loop.  For example,
13995      __do_global_ctors, a part of libgcc that runs constructors at
13996      program startup, calls functions in a list which is delimited by
13997      -1.  With the -mpt-fixed option, the ptabs will be done before
13998      testing against -1.  That means that all the constructors will be
13999      run a bit quicker, but when the loop comes to the end of the list,
14000      the program crashes because ptabs loads -1 into a target register.
14001      Since this option is unsafe for any hardware implementing the
14002      current architecture specification, the default is -mno-pt-fixed.
14003      Unless the user specifies a specific cost with `-mgettrcost',
14004      -mno-pt-fixed also implies `-mgettrcost=100'; this deters register
14005      allocation using target registers for storing ordinary integers.
14007 `-minvalid-symbols'
14008      Assume symbols might be invalid.  Ordinary function symbols
14009      generated by the compiler will always be valid to load with
14010      movi/shori/ptabs or movi/shori/ptrel, but with assembler and/or
14011      linker tricks it is possible to generate symbols that will cause
14012      ptabs / ptrel to trap.  This option is only meaningful when
14013      `-mno-pt-fixed' is in effect.  It will then prevent
14014      cross-basic-block cse, hoisting and most scheduling of symbol
14015      loads.  The default is `-mno-invalid-symbols'.
14017 \x1f
14018 File: gcc.info,  Node: SPARC Options,  Next: SPU Options,  Prev: SH Options,  Up: Submodel Options
14020 3.17.32 SPARC Options
14021 ---------------------
14023 These `-m' options are supported on the SPARC:
14025 `-mno-app-regs'
14026 `-mapp-regs'
14027      Specify `-mapp-regs' to generate output using the global registers
14028      2 through 4, which the SPARC SVR4 ABI reserves for applications.
14029      This is the default.
14031      To be fully SVR4 ABI compliant at the cost of some performance
14032      loss, specify `-mno-app-regs'.  You should compile libraries and
14033      system software with this option.
14035 `-mfpu'
14036 `-mhard-float'
14037      Generate output containing floating point instructions.  This is
14038      the default.
14040 `-mno-fpu'
14041 `-msoft-float'
14042      Generate output containing library calls for floating point.
14043      *Warning:* the requisite libraries are not available for all SPARC
14044      targets.  Normally the facilities of the machine's usual C
14045      compiler are used, but this cannot be done directly in
14046      cross-compilation.  You must make your own arrangements to provide
14047      suitable library functions for cross-compilation.  The embedded
14048      targets `sparc-*-aout' and `sparclite-*-*' do provide software
14049      floating point support.
14051      `-msoft-float' changes the calling convention in the output file;
14052      therefore, it is only useful if you compile _all_ of a program with
14053      this option.  In particular, you need to compile `libgcc.a', the
14054      library that comes with GCC, with `-msoft-float' in order for this
14055      to work.
14057 `-mhard-quad-float'
14058      Generate output containing quad-word (long double) floating point
14059      instructions.
14061 `-msoft-quad-float'
14062      Generate output containing library calls for quad-word (long
14063      double) floating point instructions.  The functions called are
14064      those specified in the SPARC ABI.  This is the default.
14066      As of this writing, there are no SPARC implementations that have
14067      hardware support for the quad-word floating point instructions.
14068      They all invoke a trap handler for one of these instructions, and
14069      then the trap handler emulates the effect of the instruction.
14070      Because of the trap handler overhead, this is much slower than
14071      calling the ABI library routines.  Thus the `-msoft-quad-float'
14072      option is the default.
14074 `-mno-unaligned-doubles'
14075 `-munaligned-doubles'
14076      Assume that doubles have 8 byte alignment.  This is the default.
14078      With `-munaligned-doubles', GCC assumes that doubles have 8 byte
14079      alignment only if they are contained in another type, or if they
14080      have an absolute address.  Otherwise, it assumes they have 4 byte
14081      alignment.  Specifying this option avoids some rare compatibility
14082      problems with code generated by other compilers.  It is not the
14083      default because it results in a performance loss, especially for
14084      floating point code.
14086 `-mno-faster-structs'
14087 `-mfaster-structs'
14088      With `-mfaster-structs', the compiler assumes that structures
14089      should have 8 byte alignment.  This enables the use of pairs of
14090      `ldd' and `std' instructions for copies in structure assignment,
14091      in place of twice as many `ld' and `st' pairs.  However, the use
14092      of this changed alignment directly violates the SPARC ABI.  Thus,
14093      it's intended only for use on targets where the developer
14094      acknowledges that their resulting code will not be directly in
14095      line with the rules of the ABI.
14097 `-mimpure-text'
14098      `-mimpure-text', used in addition to `-shared', tells the compiler
14099      to not pass `-z text' to the linker when linking a shared object.
14100      Using this option, you can link position-dependent code into a
14101      shared object.
14103      `-mimpure-text' suppresses the "relocations remain against
14104      allocatable but non-writable sections" linker error message.
14105      However, the necessary relocations will trigger copy-on-write, and
14106      the shared object is not actually shared across processes.
14107      Instead of using `-mimpure-text', you should compile all source
14108      code with `-fpic' or `-fPIC'.
14110      This option is only available on SunOS and Solaris.
14112 `-mcpu=CPU_TYPE'
14113      Set the instruction set, register set, and instruction scheduling
14114      parameters for machine type CPU_TYPE.  Supported values for
14115      CPU_TYPE are `v7', `cypress', `v8', `supersparc', `sparclite',
14116      `f930', `f934', `hypersparc', `sparclite86x', `sparclet',
14117      `tsc701', `v9', `ultrasparc', `ultrasparc3', `niagara' and
14118      `niagara2'.
14120      Default instruction scheduling parameters are used for values that
14121      select an architecture and not an implementation.  These are `v7',
14122      `v8', `sparclite', `sparclet', `v9'.
14124      Here is a list of each supported architecture and their supported
14125      implementations.
14127               v7:             cypress
14128               v8:             supersparc, hypersparc
14129               sparclite:      f930, f934, sparclite86x
14130               sparclet:       tsc701
14131               v9:             ultrasparc, ultrasparc3, niagara, niagara2
14133      By default (unless configured otherwise), GCC generates code for
14134      the V7 variant of the SPARC architecture.  With `-mcpu=cypress',
14135      the compiler additionally optimizes it for the Cypress CY7C602
14136      chip, as used in the SPARCStation/SPARCServer 3xx series.  This is
14137      also appropriate for the older SPARCStation 1, 2, IPX etc.
14139      With `-mcpu=v8', GCC generates code for the V8 variant of the SPARC
14140      architecture.  The only difference from V7 code is that the
14141      compiler emits the integer multiply and integer divide
14142      instructions which exist in SPARC-V8 but not in SPARC-V7.  With
14143      `-mcpu=supersparc', the compiler additionally optimizes it for the
14144      SuperSPARC chip, as used in the SPARCStation 10, 1000 and 2000
14145      series.
14147      With `-mcpu=sparclite', GCC generates code for the SPARClite
14148      variant of the SPARC architecture.  This adds the integer
14149      multiply, integer divide step and scan (`ffs') instructions which
14150      exist in SPARClite but not in SPARC-V7.  With `-mcpu=f930', the
14151      compiler additionally optimizes it for the Fujitsu MB86930 chip,
14152      which is the original SPARClite, with no FPU.  With `-mcpu=f934',
14153      the compiler additionally optimizes it for the Fujitsu MB86934
14154      chip, which is the more recent SPARClite with FPU.
14156      With `-mcpu=sparclet', GCC generates code for the SPARClet variant
14157      of the SPARC architecture.  This adds the integer multiply,
14158      multiply/accumulate, integer divide step and scan (`ffs')
14159      instructions which exist in SPARClet but not in SPARC-V7.  With
14160      `-mcpu=tsc701', the compiler additionally optimizes it for the
14161      TEMIC SPARClet chip.
14163      With `-mcpu=v9', GCC generates code for the V9 variant of the SPARC
14164      architecture.  This adds 64-bit integer and floating-point move
14165      instructions, 3 additional floating-point condition code registers
14166      and conditional move instructions.  With `-mcpu=ultrasparc', the
14167      compiler additionally optimizes it for the Sun UltraSPARC I/II/IIi
14168      chips.  With `-mcpu=ultrasparc3', the compiler additionally
14169      optimizes it for the Sun UltraSPARC III/III+/IIIi/IIIi+/IV/IV+
14170      chips.  With `-mcpu=niagara', the compiler additionally optimizes
14171      it for Sun UltraSPARC T1 chips.  With `-mcpu=niagara2', the
14172      compiler additionally optimizes it for Sun UltraSPARC T2 chips.
14174 `-mtune=CPU_TYPE'
14175      Set the instruction scheduling parameters for machine type
14176      CPU_TYPE, but do not set the instruction set or register set that
14177      the option `-mcpu=CPU_TYPE' would.
14179      The same values for `-mcpu=CPU_TYPE' can be used for
14180      `-mtune=CPU_TYPE', but the only useful values are those that
14181      select a particular cpu implementation.  Those are `cypress',
14182      `supersparc', `hypersparc', `f930', `f934', `sparclite86x',
14183      `tsc701', `ultrasparc', `ultrasparc3', `niagara', and `niagara2'.
14185 `-mv8plus'
14186 `-mno-v8plus'
14187      With `-mv8plus', GCC generates code for the SPARC-V8+ ABI.  The
14188      difference from the V8 ABI is that the global and out registers are
14189      considered 64-bit wide.  This is enabled by default on Solaris in
14190      32-bit mode for all SPARC-V9 processors.
14192 `-mvis'
14193 `-mno-vis'
14194      With `-mvis', GCC generates code that takes advantage of the
14195      UltraSPARC Visual Instruction Set extensions.  The default is
14196      `-mno-vis'.
14198  These `-m' options are supported in addition to the above on SPARC-V9
14199 processors in 64-bit environments:
14201 `-mlittle-endian'
14202      Generate code for a processor running in little-endian mode.  It
14203      is only available for a few configurations and most notably not on
14204      Solaris and Linux.
14206 `-m32'
14207 `-m64'
14208      Generate code for a 32-bit or 64-bit environment.  The 32-bit
14209      environment sets int, long and pointer to 32 bits.  The 64-bit
14210      environment sets int to 32 bits and long and pointer to 64 bits.
14212 `-mcmodel=medlow'
14213      Generate code for the Medium/Low code model: 64-bit addresses,
14214      programs must be linked in the low 32 bits of memory.  Programs
14215      can be statically or dynamically linked.
14217 `-mcmodel=medmid'
14218      Generate code for the Medium/Middle code model: 64-bit addresses,
14219      programs must be linked in the low 44 bits of memory, the text and
14220      data segments must be less than 2GB in size and the data segment
14221      must be located within 2GB of the text segment.
14223 `-mcmodel=medany'
14224      Generate code for the Medium/Anywhere code model: 64-bit
14225      addresses, programs may be linked anywhere in memory, the text and
14226      data segments must be less than 2GB in size and the data segment
14227      must be located within 2GB of the text segment.
14229 `-mcmodel=embmedany'
14230      Generate code for the Medium/Anywhere code model for embedded
14231      systems: 64-bit addresses, the text and data segments must be less
14232      than 2GB in size, both starting anywhere in memory (determined at
14233      link time).  The global register %g4 points to the base of the
14234      data segment.  Programs are statically linked and PIC is not
14235      supported.
14237 `-mstack-bias'
14238 `-mno-stack-bias'
14239      With `-mstack-bias', GCC assumes that the stack pointer, and frame
14240      pointer if present, are offset by -2047 which must be added back
14241      when making stack frame references.  This is the default in 64-bit
14242      mode.  Otherwise, assume no such offset is present.
14244  These switches are supported in addition to the above on Solaris:
14246 `-threads'
14247      Add support for multithreading using the Solaris threads library.
14248      This option sets flags for both the preprocessor and linker.  This
14249      option does not affect the thread safety of object code produced
14250      by the compiler or that of libraries supplied with it.
14252 `-pthreads'
14253      Add support for multithreading using the POSIX threads library.
14254      This option sets flags for both the preprocessor and linker.  This
14255      option does not affect the thread safety of object code produced
14256      by the compiler or that of libraries supplied with it.
14258 `-pthread'
14259      This is a synonym for `-pthreads'.
14261 \x1f
14262 File: gcc.info,  Node: SPU Options,  Next: System V Options,  Prev: SPARC Options,  Up: Submodel Options
14264 3.17.33 SPU Options
14265 -------------------
14267 These `-m' options are supported on the SPU:
14269 `-mwarn-reloc'
14270 `-merror-reloc'
14271      The loader for SPU does not handle dynamic relocations.  By
14272      default, GCC will give an error when it generates code that
14273      requires a dynamic relocation.  `-mno-error-reloc' disables the
14274      error, `-mwarn-reloc' will generate a warning instead.
14276 `-msafe-dma'
14277 `-munsafe-dma'
14278      Instructions which initiate or test completion of DMA must not be
14279      reordered with respect to loads and stores of the memory which is
14280      being accessed.  Users typically address this problem using the
14281      volatile keyword, but that can lead to inefficient code in places
14282      where the memory is known to not change.  Rather than mark the
14283      memory as volatile we treat the DMA instructions as potentially
14284      effecting all memory.  With `-munsafe-dma' users must use the
14285      volatile keyword to protect memory accesses.
14287 `-mbranch-hints'
14288      By default, GCC will generate a branch hint instruction to avoid
14289      pipeline stalls for always taken or probably taken branches.  A
14290      hint will not be generated closer than 8 instructions away from
14291      its branch.  There is little reason to disable them, except for
14292      debugging purposes, or to make an object a little bit smaller.
14294 `-msmall-mem'
14295 `-mlarge-mem'
14296      By default, GCC generates code assuming that addresses are never
14297      larger than 18 bits.  With `-mlarge-mem' code is generated that
14298      assumes a full 32 bit address.
14300 `-mstdmain'
14301      By default, GCC links against startup code that assumes the
14302      SPU-style main function interface (which has an unconventional
14303      parameter list).  With `-mstdmain', GCC will link your program
14304      against startup code that assumes a C99-style interface to `main',
14305      including a local copy of `argv' strings.
14307 `-mfixed-range=REGISTER-RANGE'
14308      Generate code treating the given register range as fixed registers.
14309      A fixed register is one that the register allocator can not use.
14310      This is useful when compiling kernel code.  A register range is
14311      specified as two registers separated by a dash.  Multiple register
14312      ranges can be specified separated by a comma.
14314 `-mdual-nops'
14315 `-mdual-nops=N'
14316      By default, GCC will insert nops to increase dual issue when it
14317      expects it to increase performance.  N can be a value from 0 to
14318      10.  A smaller N will insert fewer nops.  10 is the default, 0 is
14319      the same as `-mno-dual-nops'.  Disabled with `-Os'.
14321 `-mhint-max-nops=N'
14322      Maximum number of nops to insert for a branch hint.  A branch hint
14323      must be at least 8 instructions away from the branch it is
14324      effecting.  GCC will insert up to N nops to enforce this,
14325      otherwise it will not generate the branch hint.
14327 `-mhint-max-distance=N'
14328      The encoding of the branch hint instruction limits the hint to be
14329      within 256 instructions of the branch it is effecting.  By
14330      default, GCC makes sure it is within 125.
14332 `-msafe-hints'
14333      Work around a hardware bug which causes the SPU to stall
14334      indefinitely.  By default, GCC will insert the `hbrp' instruction
14335      to make sure this stall won't happen.
14338 \x1f
14339 File: gcc.info,  Node: System V Options,  Next: V850 Options,  Prev: SPU Options,  Up: Submodel Options
14341 3.17.34 Options for System V
14342 ----------------------------
14344 These additional options are available on System V Release 4 for
14345 compatibility with other compilers on those systems:
14347 `-G'
14348      Create a shared object.  It is recommended that `-symbolic' or
14349      `-shared' be used instead.
14351 `-Qy'
14352      Identify the versions of each tool used by the compiler, in a
14353      `.ident' assembler directive in the output.
14355 `-Qn'
14356      Refrain from adding `.ident' directives to the output file (this is
14357      the default).
14359 `-YP,DIRS'
14360      Search the directories DIRS, and no others, for libraries
14361      specified with `-l'.
14363 `-Ym,DIR'
14364      Look in the directory DIR to find the M4 preprocessor.  The
14365      assembler uses this option.
14367 \x1f
14368 File: gcc.info,  Node: V850 Options,  Next: VAX Options,  Prev: System V Options,  Up: Submodel Options
14370 3.17.35 V850 Options
14371 --------------------
14373 These `-m' options are defined for V850 implementations:
14375 `-mlong-calls'
14376 `-mno-long-calls'
14377      Treat all calls as being far away (near).  If calls are assumed to
14378      be far away, the compiler will always load the functions address
14379      up into a register, and call indirect through the pointer.
14381 `-mno-ep'
14382 `-mep'
14383      Do not optimize (do optimize) basic blocks that use the same index
14384      pointer 4 or more times to copy pointer into the `ep' register, and
14385      use the shorter `sld' and `sst' instructions.  The `-mep' option
14386      is on by default if you optimize.
14388 `-mno-prolog-function'
14389 `-mprolog-function'
14390      Do not use (do use) external functions to save and restore
14391      registers at the prologue and epilogue of a function.  The
14392      external functions are slower, but use less code space if more
14393      than one function saves the same number of registers.  The
14394      `-mprolog-function' option is on by default if you optimize.
14396 `-mspace'
14397      Try to make the code as small as possible.  At present, this just
14398      turns on the `-mep' and `-mprolog-function' options.
14400 `-mtda=N'
14401      Put static or global variables whose size is N bytes or less into
14402      the tiny data area that register `ep' points to.  The tiny data
14403      area can hold up to 256 bytes in total (128 bytes for byte
14404      references).
14406 `-msda=N'
14407      Put static or global variables whose size is N bytes or less into
14408      the small data area that register `gp' points to.  The small data
14409      area can hold up to 64 kilobytes.
14411 `-mzda=N'
14412      Put static or global variables whose size is N bytes or less into
14413      the first 32 kilobytes of memory.
14415 `-mv850'
14416      Specify that the target processor is the V850.
14418 `-mbig-switch'
14419      Generate code suitable for big switch tables.  Use this option
14420      only if the assembler/linker complain about out of range branches
14421      within a switch table.
14423 `-mapp-regs'
14424      This option will cause r2 and r5 to be used in the code generated
14425      by the compiler.  This setting is the default.
14427 `-mno-app-regs'
14428      This option will cause r2 and r5 to be treated as fixed registers.
14430 `-mv850e1'
14431      Specify that the target processor is the V850E1.  The preprocessor
14432      constants `__v850e1__' and `__v850e__' will be defined if this
14433      option is used.
14435 `-mv850e'
14436      Specify that the target processor is the V850E.  The preprocessor
14437      constant `__v850e__' will be defined if this option is used.
14439      If neither `-mv850' nor `-mv850e' nor `-mv850e1' are defined then
14440      a default target processor will be chosen and the relevant
14441      `__v850*__' preprocessor constant will be defined.
14443      The preprocessor constants `__v850' and `__v851__' are always
14444      defined, regardless of which processor variant is the target.
14446 `-mdisable-callt'
14447      This option will suppress generation of the CALLT instruction for
14448      the v850e and v850e1 flavors of the v850 architecture.  The
14449      default is `-mno-disable-callt' which allows the CALLT instruction
14450      to be used.
14453 \x1f
14454 File: gcc.info,  Node: VAX Options,  Next: VxWorks Options,  Prev: V850 Options,  Up: Submodel Options
14456 3.17.36 VAX Options
14457 -------------------
14459 These `-m' options are defined for the VAX:
14461 `-munix'
14462      Do not output certain jump instructions (`aobleq' and so on) that
14463      the Unix assembler for the VAX cannot handle across long ranges.
14465 `-mgnu'
14466      Do output those jump instructions, on the assumption that you will
14467      assemble with the GNU assembler.
14469 `-mg'
14470      Output code for g-format floating point numbers instead of
14471      d-format.
14473 \x1f
14474 File: gcc.info,  Node: VxWorks Options,  Next: x86-64 Options,  Prev: VAX Options,  Up: Submodel Options
14476 3.17.37 VxWorks Options
14477 -----------------------
14479 The options in this section are defined for all VxWorks targets.
14480 Options specific to the target hardware are listed with the other
14481 options for that target.
14483 `-mrtp'
14484      GCC can generate code for both VxWorks kernels and real time
14485      processes (RTPs).  This option switches from the former to the
14486      latter.  It also defines the preprocessor macro `__RTP__'.
14488 `-non-static'
14489      Link an RTP executable against shared libraries rather than static
14490      libraries.  The options `-static' and `-shared' can also be used
14491      for RTPs (*note Link Options::); `-static' is the default.
14493 `-Bstatic'
14494 `-Bdynamic'
14495      These options are passed down to the linker.  They are defined for
14496      compatibility with Diab.
14498 `-Xbind-lazy'
14499      Enable lazy binding of function calls.  This option is equivalent
14500      to `-Wl,-z,now' and is defined for compatibility with Diab.
14502 `-Xbind-now'
14503      Disable lazy binding of function calls.  This option is the
14504      default and is defined for compatibility with Diab.
14506 \x1f
14507 File: gcc.info,  Node: x86-64 Options,  Next: Xstormy16 Options,  Prev: VxWorks Options,  Up: Submodel Options
14509 3.17.38 x86-64 Options
14510 ----------------------
14512 These are listed under *Note i386 and x86-64 Options::.
14514 \x1f
14515 File: gcc.info,  Node: i386 and x86-64 Windows Options,  Next: IA-64 Options,  Prev: i386 and x86-64 Options,  Up: Submodel Options
14517 3.17.39 i386 and x86-64 Windows Options
14518 ---------------------------------------
14520 These additional options are available for Windows targets:
14522 `-mconsole'
14523      This option is available for Cygwin and MinGW targets.  It
14524      specifies that a console application is to be generated, by
14525      instructing the linker to set the PE header subsystem type
14526      required for console applications.  This is the default behaviour
14527      for Cygwin and MinGW targets.
14529 `-mcygwin'
14530      This option is available for Cygwin targets.  It specifies that
14531      the Cygwin internal interface is to be used for predefined
14532      preprocessor macros, C runtime libraries and related linker paths
14533      and options.  For Cygwin targets this is the default behaviour.
14534      This option is deprecated and will be removed in a future release.
14536 `-mno-cygwin'
14537      This option is available for Cygwin targets.  It specifies that
14538      the MinGW internal interface is to be used instead of Cygwin's, by
14539      setting MinGW-related predefined macros and linker paths and
14540      default library options.  This option is deprecated and will be
14541      removed in a future release.
14543 `-mdll'
14544      This option is available for Cygwin and MinGW targets.  It
14545      specifies that a DLL - a dynamic link library - is to be
14546      generated, enabling the selection of the required runtime startup
14547      object and entry point.
14549 `-mnop-fun-dllimport'
14550      This option is available for Cygwin and MinGW targets.  It
14551      specifies that the dllimport attribute should be ignored.
14553 `-mthread'
14554      This option is available for MinGW targets. It specifies that
14555      MinGW-specific thread support is to be used.
14557 `-mwin32'
14558      This option is available for Cygwin and MinGW targets.  It
14559      specifies that the typical Windows pre-defined macros are to be
14560      set in the pre-processor, but does not influence the choice of
14561      runtime library/startup code.
14563 `-mwindows'
14564      This option is available for Cygwin and MinGW targets.  It
14565      specifies that a GUI application is to be generated by instructing
14566      the linker to set the PE header subsystem type appropriately.
14568  See also under *Note i386 and x86-64 Options:: for standard options.
14570 \x1f
14571 File: gcc.info,  Node: Xstormy16 Options,  Next: Xtensa Options,  Prev: x86-64 Options,  Up: Submodel Options
14573 3.17.40 Xstormy16 Options
14574 -------------------------
14576 These options are defined for Xstormy16:
14578 `-msim'
14579      Choose startup files and linker script suitable for the simulator.
14581 \x1f
14582 File: gcc.info,  Node: Xtensa Options,  Next: zSeries Options,  Prev: Xstormy16 Options,  Up: Submodel Options
14584 3.17.41 Xtensa Options
14585 ----------------------
14587 These options are supported for Xtensa targets:
14589 `-mconst16'
14590 `-mno-const16'
14591      Enable or disable use of `CONST16' instructions for loading
14592      constant values.  The `CONST16' instruction is currently not a
14593      standard option from Tensilica.  When enabled, `CONST16'
14594      instructions are always used in place of the standard `L32R'
14595      instructions.  The use of `CONST16' is enabled by default only if
14596      the `L32R' instruction is not available.
14598 `-mfused-madd'
14599 `-mno-fused-madd'
14600      Enable or disable use of fused multiply/add and multiply/subtract
14601      instructions in the floating-point option.  This has no effect if
14602      the floating-point option is not also enabled.  Disabling fused
14603      multiply/add and multiply/subtract instructions forces the
14604      compiler to use separate instructions for the multiply and
14605      add/subtract operations.  This may be desirable in some cases
14606      where strict IEEE 754-compliant results are required: the fused
14607      multiply add/subtract instructions do not round the intermediate
14608      result, thereby producing results with _more_ bits of precision
14609      than specified by the IEEE standard.  Disabling fused multiply
14610      add/subtract instructions also ensures that the program output is
14611      not sensitive to the compiler's ability to combine multiply and
14612      add/subtract operations.
14614 `-mserialize-volatile'
14615 `-mno-serialize-volatile'
14616      When this option is enabled, GCC inserts `MEMW' instructions before
14617      `volatile' memory references to guarantee sequential consistency.
14618      The default is `-mserialize-volatile'.  Use
14619      `-mno-serialize-volatile' to omit the `MEMW' instructions.
14621 `-mtext-section-literals'
14622 `-mno-text-section-literals'
14623      Control the treatment of literal pools.  The default is
14624      `-mno-text-section-literals', which places literals in a separate
14625      section in the output file.  This allows the literal pool to be
14626      placed in a data RAM/ROM, and it also allows the linker to combine
14627      literal pools from separate object files to remove redundant
14628      literals and improve code size.  With `-mtext-section-literals',
14629      the literals are interspersed in the text section in order to keep
14630      them as close as possible to their references.  This may be
14631      necessary for large assembly files.
14633 `-mtarget-align'
14634 `-mno-target-align'
14635      When this option is enabled, GCC instructs the assembler to
14636      automatically align instructions to reduce branch penalties at the
14637      expense of some code density.  The assembler attempts to widen
14638      density instructions to align branch targets and the instructions
14639      following call instructions.  If there are not enough preceding
14640      safe density instructions to align a target, no widening will be
14641      performed.  The default is `-mtarget-align'.  These options do not
14642      affect the treatment of auto-aligned instructions like `LOOP',
14643      which the assembler will always align, either by widening density
14644      instructions or by inserting no-op instructions.
14646 `-mlongcalls'
14647 `-mno-longcalls'
14648      When this option is enabled, GCC instructs the assembler to
14649      translate direct calls to indirect calls unless it can determine
14650      that the target of a direct call is in the range allowed by the
14651      call instruction.  This translation typically occurs for calls to
14652      functions in other source files.  Specifically, the assembler
14653      translates a direct `CALL' instruction into an `L32R' followed by
14654      a `CALLX' instruction.  The default is `-mno-longcalls'.  This
14655      option should be used in programs where the call target can
14656      potentially be out of range.  This option is implemented in the
14657      assembler, not the compiler, so the assembly code generated by GCC
14658      will still show direct call instructions--look at the disassembled
14659      object code to see the actual instructions.  Note that the
14660      assembler will use an indirect call for every cross-file call, not
14661      just those that really will be out of range.
14663 \x1f
14664 File: gcc.info,  Node: zSeries Options,  Prev: Xtensa Options,  Up: Submodel Options
14666 3.17.42 zSeries Options
14667 -----------------------
14669 These are listed under *Note S/390 and zSeries Options::.
14671 \x1f
14672 File: gcc.info,  Node: Code Gen Options,  Next: Environment Variables,  Prev: Submodel Options,  Up: Invoking GCC
14674 3.18 Options for Code Generation Conventions
14675 ============================================
14677 These machine-independent options control the interface conventions
14678 used in code generation.
14680  Most of them have both positive and negative forms; the negative form
14681 of `-ffoo' would be `-fno-foo'.  In the table below, only one of the
14682 forms is listed--the one which is not the default.  You can figure out
14683 the other form by either removing `no-' or adding it.
14685 `-fbounds-check'
14686      For front-ends that support it, generate additional code to check
14687      that indices used to access arrays are within the declared range.
14688      This is currently only supported by the Java and Fortran
14689      front-ends, where this option defaults to true and false
14690      respectively.
14692 `-ftrapv'
14693      This option generates traps for signed overflow on addition,
14694      subtraction, multiplication operations.
14696 `-fwrapv'
14697      This option instructs the compiler to assume that signed arithmetic
14698      overflow of addition, subtraction and multiplication wraps around
14699      using twos-complement representation.  This flag enables some
14700      optimizations and disables others.  This option is enabled by
14701      default for the Java front-end, as required by the Java language
14702      specification.
14704 `-fexceptions'
14705      Enable exception handling.  Generates extra code needed to
14706      propagate exceptions.  For some targets, this implies GCC will
14707      generate frame unwind information for all functions, which can
14708      produce significant data size overhead, although it does not
14709      affect execution.  If you do not specify this option, GCC will
14710      enable it by default for languages like C++ which normally require
14711      exception handling, and disable it for languages like C that do
14712      not normally require it.  However, you may need to enable this
14713      option when compiling C code that needs to interoperate properly
14714      with exception handlers written in C++.  You may also wish to
14715      disable this option if you are compiling older C++ programs that
14716      don't use exception handling.
14718 `-fnon-call-exceptions'
14719      Generate code that allows trapping instructions to throw
14720      exceptions.  Note that this requires platform-specific runtime
14721      support that does not exist everywhere.  Moreover, it only allows
14722      _trapping_ instructions to throw exceptions, i.e. memory
14723      references or floating point instructions.  It does not allow
14724      exceptions to be thrown from arbitrary signal handlers such as
14725      `SIGALRM'.
14727 `-funwind-tables'
14728      Similar to `-fexceptions', except that it will just generate any
14729      needed static data, but will not affect the generated code in any
14730      other way.  You will normally not enable this option; instead, a
14731      language processor that needs this handling would enable it on
14732      your behalf.
14734 `-fasynchronous-unwind-tables'
14735      Generate unwind table in dwarf2 format, if supported by target
14736      machine.  The table is exact at each instruction boundary, so it
14737      can be used for stack unwinding from asynchronous events (such as
14738      debugger or garbage collector).
14740 `-fpcc-struct-return'
14741      Return "short" `struct' and `union' values in memory like longer
14742      ones, rather than in registers.  This convention is less
14743      efficient, but it has the advantage of allowing intercallability
14744      between GCC-compiled files and files compiled with other
14745      compilers, particularly the Portable C Compiler (pcc).
14747      The precise convention for returning structures in memory depends
14748      on the target configuration macros.
14750      Short structures and unions are those whose size and alignment
14751      match that of some integer type.
14753      *Warning:* code compiled with the `-fpcc-struct-return' switch is
14754      not binary compatible with code compiled with the
14755      `-freg-struct-return' switch.  Use it to conform to a non-default
14756      application binary interface.
14758 `-freg-struct-return'
14759      Return `struct' and `union' values in registers when possible.
14760      This is more efficient for small structures than
14761      `-fpcc-struct-return'.
14763      If you specify neither `-fpcc-struct-return' nor
14764      `-freg-struct-return', GCC defaults to whichever convention is
14765      standard for the target.  If there is no standard convention, GCC
14766      defaults to `-fpcc-struct-return', except on targets where GCC is
14767      the principal compiler.  In those cases, we can choose the
14768      standard, and we chose the more efficient register return
14769      alternative.
14771      *Warning:* code compiled with the `-freg-struct-return' switch is
14772      not binary compatible with code compiled with the
14773      `-fpcc-struct-return' switch.  Use it to conform to a non-default
14774      application binary interface.
14776 `-fshort-enums'
14777      Allocate to an `enum' type only as many bytes as it needs for the
14778      declared range of possible values.  Specifically, the `enum' type
14779      will be equivalent to the smallest integer type which has enough
14780      room.
14782      *Warning:* the `-fshort-enums' switch causes GCC to generate code
14783      that is not binary compatible with code generated without that
14784      switch.  Use it to conform to a non-default application binary
14785      interface.
14787 `-fshort-double'
14788      Use the same size for `double' as for `float'.
14790      *Warning:* the `-fshort-double' switch causes GCC to generate code
14791      that is not binary compatible with code generated without that
14792      switch.  Use it to conform to a non-default application binary
14793      interface.
14795 `-fshort-wchar'
14796      Override the underlying type for `wchar_t' to be `short unsigned
14797      int' instead of the default for the target.  This option is useful
14798      for building programs to run under WINE.
14800      *Warning:* the `-fshort-wchar' switch causes GCC to generate code
14801      that is not binary compatible with code generated without that
14802      switch.  Use it to conform to a non-default application binary
14803      interface.
14805 `-fno-common'
14806      In C code, controls the placement of uninitialized global
14807      variables.  Unix C compilers have traditionally permitted multiple
14808      definitions of such variables in different compilation units by
14809      placing the variables in a common block.  This is the behavior
14810      specified by `-fcommon', and is the default for GCC on most
14811      targets.  On the other hand, this behavior is not required by ISO
14812      C, and on some targets may carry a speed or code size penalty on
14813      variable references.  The `-fno-common' option specifies that the
14814      compiler should place uninitialized global variables in the data
14815      section of the object file, rather than generating them as common
14816      blocks.  This has the effect that if the same variable is declared
14817      (without `extern') in two different compilations, you will get a
14818      multiple-definition error when you link them.  In this case, you
14819      must compile with `-fcommon' instead.  Compiling with
14820      `-fno-common' is useful on targets for which it provides better
14821      performance, or if you wish to verify that the program will work
14822      on other systems which always treat uninitialized variable
14823      declarations this way.
14825 `-fno-ident'
14826      Ignore the `#ident' directive.
14828 `-finhibit-size-directive'
14829      Don't output a `.size' assembler directive, or anything else that
14830      would cause trouble if the function is split in the middle, and the
14831      two halves are placed at locations far apart in memory.  This
14832      option is used when compiling `crtstuff.c'; you should not need to
14833      use it for anything else.
14835 `-fverbose-asm'
14836      Put extra commentary information in the generated assembly code to
14837      make it more readable.  This option is generally only of use to
14838      those who actually need to read the generated assembly code
14839      (perhaps while debugging the compiler itself).
14841      `-fno-verbose-asm', the default, causes the extra information to
14842      be omitted and is useful when comparing two assembler files.
14844 `-frecord-gcc-switches'
14845      This switch causes the command line that was used to invoke the
14846      compiler to be recorded into the object file that is being created.
14847      This switch is only implemented on some targets and the exact
14848      format of the recording is target and binary file format
14849      dependent, but it usually takes the form of a section containing
14850      ASCII text.  This switch is related to the `-fverbose-asm' switch,
14851      but that switch only records information in the assembler output
14852      file as comments, so it never reaches the object file.
14854 `-fpic'
14855      Generate position-independent code (PIC) suitable for use in a
14856      shared library, if supported for the target machine.  Such code
14857      accesses all constant addresses through a global offset table
14858      (GOT).  The dynamic loader resolves the GOT entries when the
14859      program starts (the dynamic loader is not part of GCC; it is part
14860      of the operating system).  If the GOT size for the linked
14861      executable exceeds a machine-specific maximum size, you get an
14862      error message from the linker indicating that `-fpic' does not
14863      work; in that case, recompile with `-fPIC' instead.  (These
14864      maximums are 8k on the SPARC and 32k on the m68k and RS/6000.  The
14865      386 has no such limit.)
14867      Position-independent code requires special support, and therefore
14868      works only on certain machines.  For the 386, GCC supports PIC for
14869      System V but not for the Sun 386i.  Code generated for the IBM
14870      RS/6000 is always position-independent.
14872      When this flag is set, the macros `__pic__' and `__PIC__' are
14873      defined to 1.
14875 `-fPIC'
14876      If supported for the target machine, emit position-independent
14877      code, suitable for dynamic linking and avoiding any limit on the
14878      size of the global offset table.  This option makes a difference
14879      on the m68k, PowerPC and SPARC.
14881      Position-independent code requires special support, and therefore
14882      works only on certain machines.
14884      When this flag is set, the macros `__pic__' and `__PIC__' are
14885      defined to 2.
14887 `-fpie'
14888 `-fPIE'
14889      These options are similar to `-fpic' and `-fPIC', but generated
14890      position independent code can be only linked into executables.
14891      Usually these options are used when `-pie' GCC option will be used
14892      during linking.
14894      `-fpie' and `-fPIE' both define the macros `__pie__' and
14895      `__PIE__'.  The macros have the value 1 for `-fpie' and 2 for
14896      `-fPIE'.
14898 `-fno-jump-tables'
14899      Do not use jump tables for switch statements even where it would be
14900      more efficient than other code generation strategies.  This option
14901      is of use in conjunction with `-fpic' or `-fPIC' for building code
14902      which forms part of a dynamic linker and cannot reference the
14903      address of a jump table.  On some targets, jump tables do not
14904      require a GOT and this option is not needed.
14906 `-ffixed-REG'
14907      Treat the register named REG as a fixed register; generated code
14908      should never refer to it (except perhaps as a stack pointer, frame
14909      pointer or in some other fixed role).
14911      REG must be the name of a register.  The register names accepted
14912      are machine-specific and are defined in the `REGISTER_NAMES' macro
14913      in the machine description macro file.
14915      This flag does not have a negative form, because it specifies a
14916      three-way choice.
14918 `-fcall-used-REG'
14919      Treat the register named REG as an allocable register that is
14920      clobbered by function calls.  It may be allocated for temporaries
14921      or variables that do not live across a call.  Functions compiled
14922      this way will not save and restore the register REG.
14924      It is an error to used this flag with the frame pointer or stack
14925      pointer.  Use of this flag for other registers that have fixed
14926      pervasive roles in the machine's execution model will produce
14927      disastrous results.
14929      This flag does not have a negative form, because it specifies a
14930      three-way choice.
14932 `-fcall-saved-REG'
14933      Treat the register named REG as an allocable register saved by
14934      functions.  It may be allocated even for temporaries or variables
14935      that live across a call.  Functions compiled this way will save
14936      and restore the register REG if they use it.
14938      It is an error to used this flag with the frame pointer or stack
14939      pointer.  Use of this flag for other registers that have fixed
14940      pervasive roles in the machine's execution model will produce
14941      disastrous results.
14943      A different sort of disaster will result from the use of this flag
14944      for a register in which function values may be returned.
14946      This flag does not have a negative form, because it specifies a
14947      three-way choice.
14949 `-fpack-struct[=N]'
14950      Without a value specified, pack all structure members together
14951      without holes.  When a value is specified (which must be a small
14952      power of two), pack structure members according to this value,
14953      representing the maximum alignment (that is, objects with default
14954      alignment requirements larger than this will be output potentially
14955      unaligned at the next fitting location.
14957      *Warning:* the `-fpack-struct' switch causes GCC to generate code
14958      that is not binary compatible with code generated without that
14959      switch.  Additionally, it makes the code suboptimal.  Use it to
14960      conform to a non-default application binary interface.
14962 `-finstrument-functions'
14963      Generate instrumentation calls for entry and exit to functions.
14964      Just after function entry and just before function exit, the
14965      following profiling functions will be called with the address of
14966      the current function and its call site.  (On some platforms,
14967      `__builtin_return_address' does not work beyond the current
14968      function, so the call site information may not be available to the
14969      profiling functions otherwise.)
14971           void __cyg_profile_func_enter (void *this_fn,
14972                                          void *call_site);
14973           void __cyg_profile_func_exit  (void *this_fn,
14974                                          void *call_site);
14976      The first argument is the address of the start of the current
14977      function, which may be looked up exactly in the symbol table.
14979      This instrumentation is also done for functions expanded inline in
14980      other functions.  The profiling calls will indicate where,
14981      conceptually, the inline function is entered and exited.  This
14982      means that addressable versions of such functions must be
14983      available.  If all your uses of a function are expanded inline,
14984      this may mean an additional expansion of code size.  If you use
14985      `extern inline' in your C code, an addressable version of such
14986      functions must be provided.  (This is normally the case anyways,
14987      but if you get lucky and the optimizer always expands the
14988      functions inline, you might have gotten away without providing
14989      static copies.)
14991      A function may be given the attribute `no_instrument_function', in
14992      which case this instrumentation will not be done.  This can be
14993      used, for example, for the profiling functions listed above,
14994      high-priority interrupt routines, and any functions from which the
14995      profiling functions cannot safely be called (perhaps signal
14996      handlers, if the profiling routines generate output or allocate
14997      memory).
14999 `-finstrument-functions-exclude-file-list=FILE,FILE,...'
15000      Set the list of functions that are excluded from instrumentation
15001      (see the description of `-finstrument-functions').  If the file
15002      that contains a function definition matches with one of FILE, then
15003      that function is not instrumented.  The match is done on
15004      substrings: if the FILE parameter is a substring of the file name,
15005      it is considered to be a match.
15007      For example,
15008      `-finstrument-functions-exclude-file-list=/bits/stl,include/sys'
15009      will exclude any inline function defined in files whose pathnames
15010      contain `/bits/stl' or `include/sys'.
15012      If, for some reason, you want to include letter `','' in one of
15013      SYM, write `'\,''. For example,
15014      `-finstrument-functions-exclude-file-list='\,\,tmp'' (note the
15015      single quote surrounding the option).
15017 `-finstrument-functions-exclude-function-list=SYM,SYM,...'
15018      This is similar to `-finstrument-functions-exclude-file-list', but
15019      this option sets the list of function names to be excluded from
15020      instrumentation.  The function name to be matched is its
15021      user-visible name, such as `vector<int> blah(const vector<int>
15022      &)', not the internal mangled name (e.g.,
15023      `_Z4blahRSt6vectorIiSaIiEE').  The match is done on substrings: if
15024      the SYM parameter is a substring of the function name, it is
15025      considered to be a match.
15027 `-fstack-check'
15028      Generate code to verify that you do not go beyond the boundary of
15029      the stack.  You should specify this flag if you are running in an
15030      environment with multiple threads, but only rarely need to specify
15031      it in a single-threaded environment since stack overflow is
15032      automatically detected on nearly all systems if there is only one
15033      stack.
15035      Note that this switch does not actually cause checking to be done;
15036      the operating system or the language runtime must do that.  The
15037      switch causes generation of code to ensure that they see the stack
15038      being extended.
15040      You can additionally specify a string parameter: `no' means no
15041      checking, `generic' means force the use of old-style checking,
15042      `specific' means use the best checking method and is equivalent to
15043      bare `-fstack-check'.
15045      Old-style checking is a generic mechanism that requires no specific
15046      target support in the compiler but comes with the following
15047      drawbacks:
15049        1. Modified allocation strategy for large objects: they will
15050           always be allocated dynamically if their size exceeds a fixed
15051           threshold.
15053        2. Fixed limit on the size of the static frame of functions:
15054           when it is topped by a particular function, stack checking is
15055           not reliable and a warning is issued by the compiler.
15057        3. Inefficiency: because of both the modified allocation
15058           strategy and the generic implementation, the performances of
15059           the code are hampered.
15061      Note that old-style stack checking is also the fallback method for
15062      `specific' if no target support has been added in the compiler.
15064 `-fstack-limit-register=REG'
15065 `-fstack-limit-symbol=SYM'
15066 `-fno-stack-limit'
15067      Generate code to ensure that the stack does not grow beyond a
15068      certain value, either the value of a register or the address of a
15069      symbol.  If the stack would grow beyond the value, a signal is
15070      raised.  For most targets, the signal is raised before the stack
15071      overruns the boundary, so it is possible to catch the signal
15072      without taking special precautions.
15074      For instance, if the stack starts at absolute address `0x80000000'
15075      and grows downwards, you can use the flags
15076      `-fstack-limit-symbol=__stack_limit' and
15077      `-Wl,--defsym,__stack_limit=0x7ffe0000' to enforce a stack limit
15078      of 128KB.  Note that this may only work with the GNU linker.
15080 `-fargument-alias'
15081 `-fargument-noalias'
15082 `-fargument-noalias-global'
15083 `-fargument-noalias-anything'
15084      Specify the possible relationships among parameters and between
15085      parameters and global data.
15087      `-fargument-alias' specifies that arguments (parameters) may alias
15088      each other and may alias global storage.
15089      `-fargument-noalias' specifies that arguments do not alias each
15090      other, but may alias global storage.
15091      `-fargument-noalias-global' specifies that arguments do not alias
15092      each other and do not alias global storage.
15093      `-fargument-noalias-anything' specifies that arguments do not
15094      alias any other storage.
15096      Each language will automatically use whatever option is required by
15097      the language standard.  You should not need to use these options
15098      yourself.
15100 `-fleading-underscore'
15101      This option and its counterpart, `-fno-leading-underscore',
15102      forcibly change the way C symbols are represented in the object
15103      file.  One use is to help link with legacy assembly code.
15105      *Warning:* the `-fleading-underscore' switch causes GCC to
15106      generate code that is not binary compatible with code generated
15107      without that switch.  Use it to conform to a non-default
15108      application binary interface.  Not all targets provide complete
15109      support for this switch.
15111 `-ftls-model=MODEL'
15112      Alter the thread-local storage model to be used (*note
15113      Thread-Local::).  The MODEL argument should be one of
15114      `global-dynamic', `local-dynamic', `initial-exec' or `local-exec'.
15116      The default without `-fpic' is `initial-exec'; with `-fpic' the
15117      default is `global-dynamic'.
15119 `-fvisibility=DEFAULT|INTERNAL|HIDDEN|PROTECTED'
15120      Set the default ELF image symbol visibility to the specified
15121      option--all symbols will be marked with this unless overridden
15122      within the code.  Using this feature can very substantially
15123      improve linking and load times of shared object libraries, produce
15124      more optimized code, provide near-perfect API export and prevent
15125      symbol clashes.  It is *strongly* recommended that you use this in
15126      any shared objects you distribute.
15128      Despite the nomenclature, `default' always means public ie;
15129      available to be linked against from outside the shared object.
15130      `protected' and `internal' are pretty useless in real-world usage
15131      so the only other commonly used option will be `hidden'.  The
15132      default if `-fvisibility' isn't specified is `default', i.e., make
15133      every symbol public--this causes the same behavior as previous
15134      versions of GCC.
15136      A good explanation of the benefits offered by ensuring ELF symbols
15137      have the correct visibility is given by "How To Write Shared
15138      Libraries" by Ulrich Drepper (which can be found at
15139      `http://people.redhat.com/~drepper/')--however a superior solution
15140      made possible by this option to marking things hidden when the
15141      default is public is to make the default hidden and mark things
15142      public.  This is the norm with DLL's on Windows and with
15143      `-fvisibility=hidden' and `__attribute__
15144      ((visibility("default")))' instead of `__declspec(dllexport)' you
15145      get almost identical semantics with identical syntax.  This is a
15146      great boon to those working with cross-platform projects.
15148      For those adding visibility support to existing code, you may find
15149      `#pragma GCC visibility' of use.  This works by you enclosing the
15150      declarations you wish to set visibility for with (for example)
15151      `#pragma GCC visibility push(hidden)' and `#pragma GCC visibility
15152      pop'.  Bear in mind that symbol visibility should be viewed *as
15153      part of the API interface contract* and thus all new code should
15154      always specify visibility when it is not the default ie;
15155      declarations only for use within the local DSO should *always* be
15156      marked explicitly as hidden as so to avoid PLT indirection
15157      overheads--making this abundantly clear also aids readability and
15158      self-documentation of the code.  Note that due to ISO C++
15159      specification requirements, operator new and operator delete must
15160      always be of default visibility.
15162      Be aware that headers from outside your project, in particular
15163      system headers and headers from any other library you use, may not
15164      be expecting to be compiled with visibility other than the
15165      default.  You may need to explicitly say `#pragma GCC visibility
15166      push(default)' before including any such headers.
15168      `extern' declarations are not affected by `-fvisibility', so a lot
15169      of code can be recompiled with `-fvisibility=hidden' with no
15170      modifications.  However, this means that calls to `extern'
15171      functions with no explicit visibility will use the PLT, so it is
15172      more effective to use `__attribute ((visibility))' and/or `#pragma
15173      GCC visibility' to tell the compiler which `extern' declarations
15174      should be treated as hidden.
15176      Note that `-fvisibility' does affect C++ vague linkage entities.
15177      This means that, for instance, an exception class that will be
15178      thrown between DSOs must be explicitly marked with default
15179      visibility so that the `type_info' nodes will be unified between
15180      the DSOs.
15182      An overview of these techniques, their benefits and how to use them
15183      is at `http://gcc.gnu.org/wiki/Visibility'.
15186 \x1f
15187 File: gcc.info,  Node: Environment Variables,  Next: Precompiled Headers,  Prev: Code Gen Options,  Up: Invoking GCC
15189 3.19 Environment Variables Affecting GCC
15190 ========================================
15192 This section describes several environment variables that affect how GCC
15193 operates.  Some of them work by specifying directories or prefixes to
15194 use when searching for various kinds of files.  Some are used to
15195 specify other aspects of the compilation environment.
15197  Note that you can also specify places to search using options such as
15198 `-B', `-I' and `-L' (*note Directory Options::).  These take precedence
15199 over places specified using environment variables, which in turn take
15200 precedence over those specified by the configuration of GCC.  *Note
15201 Controlling the Compilation Driver `gcc': (gccint)Driver.
15203 `LANG'
15204 `LC_CTYPE'
15205 `LC_MESSAGES'
15206 `LC_ALL'
15207      These environment variables control the way that GCC uses
15208      localization information that allow GCC to work with different
15209      national conventions.  GCC inspects the locale categories
15210      `LC_CTYPE' and `LC_MESSAGES' if it has been configured to do so.
15211      These locale categories can be set to any value supported by your
15212      installation.  A typical value is `en_GB.UTF-8' for English in the
15213      United Kingdom encoded in UTF-8.
15215      The `LC_CTYPE' environment variable specifies character
15216      classification.  GCC uses it to determine the character boundaries
15217      in a string; this is needed for some multibyte encodings that
15218      contain quote and escape characters that would otherwise be
15219      interpreted as a string end or escape.
15221      The `LC_MESSAGES' environment variable specifies the language to
15222      use in diagnostic messages.
15224      If the `LC_ALL' environment variable is set, it overrides the value
15225      of `LC_CTYPE' and `LC_MESSAGES'; otherwise, `LC_CTYPE' and
15226      `LC_MESSAGES' default to the value of the `LANG' environment
15227      variable.  If none of these variables are set, GCC defaults to
15228      traditional C English behavior.
15230 `TMPDIR'
15231      If `TMPDIR' is set, it specifies the directory to use for temporary
15232      files.  GCC uses temporary files to hold the output of one stage of
15233      compilation which is to be used as input to the next stage: for
15234      example, the output of the preprocessor, which is the input to the
15235      compiler proper.
15237 `GCC_EXEC_PREFIX'
15238      If `GCC_EXEC_PREFIX' is set, it specifies a prefix to use in the
15239      names of the subprograms executed by the compiler.  No slash is
15240      added when this prefix is combined with the name of a subprogram,
15241      but you can specify a prefix that ends with a slash if you wish.
15243      If `GCC_EXEC_PREFIX' is not set, GCC will attempt to figure out an
15244      appropriate prefix to use based on the pathname it was invoked
15245      with.
15247      If GCC cannot find the subprogram using the specified prefix, it
15248      tries looking in the usual places for the subprogram.
15250      The default value of `GCC_EXEC_PREFIX' is `PREFIX/lib/gcc/' where
15251      PREFIX is the prefix to the installed compiler. In many cases
15252      PREFIX is the value of `prefix' when you ran the `configure'
15253      script.
15255      Other prefixes specified with `-B' take precedence over this
15256      prefix.
15258      This prefix is also used for finding files such as `crt0.o' that
15259      are used for linking.
15261      In addition, the prefix is used in an unusual way in finding the
15262      directories to search for header files.  For each of the standard
15263      directories whose name normally begins with `/usr/local/lib/gcc'
15264      (more precisely, with the value of `GCC_INCLUDE_DIR'), GCC tries
15265      replacing that beginning with the specified prefix to produce an
15266      alternate directory name.  Thus, with `-Bfoo/', GCC will search
15267      `foo/bar' where it would normally search `/usr/local/lib/bar'.
15268      These alternate directories are searched first; the standard
15269      directories come next. If a standard directory begins with the
15270      configured PREFIX then the value of PREFIX is replaced by
15271      `GCC_EXEC_PREFIX' when looking for header files.
15273 `COMPILER_PATH'
15274      The value of `COMPILER_PATH' is a colon-separated list of
15275      directories, much like `PATH'.  GCC tries the directories thus
15276      specified when searching for subprograms, if it can't find the
15277      subprograms using `GCC_EXEC_PREFIX'.
15279 `LIBRARY_PATH'
15280      The value of `LIBRARY_PATH' is a colon-separated list of
15281      directories, much like `PATH'.  When configured as a native
15282      compiler, GCC tries the directories thus specified when searching
15283      for special linker files, if it can't find them using
15284      `GCC_EXEC_PREFIX'.  Linking using GCC also uses these directories
15285      when searching for ordinary libraries for the `-l' option (but
15286      directories specified with `-L' come first).
15288 `LANG'
15289      This variable is used to pass locale information to the compiler.
15290      One way in which this information is used is to determine the
15291      character set to be used when character literals, string literals
15292      and comments are parsed in C and C++.  When the compiler is
15293      configured to allow multibyte characters, the following values for
15294      `LANG' are recognized:
15296     `C-JIS'
15297           Recognize JIS characters.
15299     `C-SJIS'
15300           Recognize SJIS characters.
15302     `C-EUCJP'
15303           Recognize EUCJP characters.
15305      If `LANG' is not defined, or if it has some other value, then the
15306      compiler will use mblen and mbtowc as defined by the default
15307      locale to recognize and translate multibyte characters.
15309 Some additional environments variables affect the behavior of the
15310 preprocessor.
15312 `CPATH'
15313 `C_INCLUDE_PATH'
15314 `CPLUS_INCLUDE_PATH'
15315 `OBJC_INCLUDE_PATH'
15316      Each variable's value is a list of directories separated by a
15317      special character, much like `PATH', in which to look for header
15318      files.  The special character, `PATH_SEPARATOR', is
15319      target-dependent and determined at GCC build time.  For Microsoft
15320      Windows-based targets it is a semicolon, and for almost all other
15321      targets it is a colon.
15323      `CPATH' specifies a list of directories to be searched as if
15324      specified with `-I', but after any paths given with `-I' options
15325      on the command line.  This environment variable is used regardless
15326      of which language is being preprocessed.
15328      The remaining environment variables apply only when preprocessing
15329      the particular language indicated.  Each specifies a list of
15330      directories to be searched as if specified with `-isystem', but
15331      after any paths given with `-isystem' options on the command line.
15333      In all these variables, an empty element instructs the compiler to
15334      search its current working directory.  Empty elements can appear
15335      at the beginning or end of a path.  For instance, if the value of
15336      `CPATH' is `:/special/include', that has the same effect as
15337      `-I. -I/special/include'.
15339 `DEPENDENCIES_OUTPUT'
15340      If this variable is set, its value specifies how to output
15341      dependencies for Make based on the non-system header files
15342      processed by the compiler.  System header files are ignored in the
15343      dependency output.
15345      The value of `DEPENDENCIES_OUTPUT' can be just a file name, in
15346      which case the Make rules are written to that file, guessing the
15347      target name from the source file name.  Or the value can have the
15348      form `FILE TARGET', in which case the rules are written to file
15349      FILE using TARGET as the target name.
15351      In other words, this environment variable is equivalent to
15352      combining the options `-MM' and `-MF' (*note Preprocessor
15353      Options::), with an optional `-MT' switch too.
15355 `SUNPRO_DEPENDENCIES'
15356      This variable is the same as `DEPENDENCIES_OUTPUT' (see above),
15357      except that system header files are not ignored, so it implies
15358      `-M' rather than `-MM'.  However, the dependence on the main input
15359      file is omitted.  *Note Preprocessor Options::.
15361 \x1f
15362 File: gcc.info,  Node: Precompiled Headers,  Next: Running Protoize,  Prev: Environment Variables,  Up: Invoking GCC
15364 3.20 Using Precompiled Headers
15365 ==============================
15367 Often large projects have many header files that are included in every
15368 source file.  The time the compiler takes to process these header files
15369 over and over again can account for nearly all of the time required to
15370 build the project.  To make builds faster, GCC allows users to
15371 `precompile' a header file; then, if builds can use the precompiled
15372 header file they will be much faster.
15374  To create a precompiled header file, simply compile it as you would any
15375 other file, if necessary using the `-x' option to make the driver treat
15376 it as a C or C++ header file.  You will probably want to use a tool
15377 like `make' to keep the precompiled header up-to-date when the headers
15378 it contains change.
15380  A precompiled header file will be searched for when `#include' is seen
15381 in the compilation.  As it searches for the included file (*note Search
15382 Path: (cpp)Search Path.) the compiler looks for a precompiled header in
15383 each directory just before it looks for the include file in that
15384 directory.  The name searched for is the name specified in the
15385 `#include' with `.gch' appended.  If the precompiled header file can't
15386 be used, it is ignored.
15388  For instance, if you have `#include "all.h"', and you have `all.h.gch'
15389 in the same directory as `all.h', then the precompiled header file will
15390 be used if possible, and the original header will be used otherwise.
15392  Alternatively, you might decide to put the precompiled header file in a
15393 directory and use `-I' to ensure that directory is searched before (or
15394 instead of) the directory containing the original header.  Then, if you
15395 want to check that the precompiled header file is always used, you can
15396 put a file of the same name as the original header in this directory
15397 containing an `#error' command.
15399  This also works with `-include'.  So yet another way to use
15400 precompiled headers, good for projects not designed with precompiled
15401 header files in mind, is to simply take most of the header files used by
15402 a project, include them from another header file, precompile that header
15403 file, and `-include' the precompiled header.  If the header files have
15404 guards against multiple inclusion, they will be skipped because they've
15405 already been included (in the precompiled header).
15407  If you need to precompile the same header file for different
15408 languages, targets, or compiler options, you can instead make a
15409 _directory_ named like `all.h.gch', and put each precompiled header in
15410 the directory, perhaps using `-o'.  It doesn't matter what you call the
15411 files in the directory, every precompiled header in the directory will
15412 be considered.  The first precompiled header encountered in the
15413 directory that is valid for this compilation will be used; they're
15414 searched in no particular order.
15416  There are many other possibilities, limited only by your imagination,
15417 good sense, and the constraints of your build system.
15419  A precompiled header file can be used only when these conditions apply:
15421    * Only one precompiled header can be used in a particular
15422      compilation.
15424    * A precompiled header can't be used once the first C token is seen.
15425      You can have preprocessor directives before a precompiled header;
15426      you can even include a precompiled header from inside another
15427      header, so long as there are no C tokens before the `#include'.
15429    * The precompiled header file must be produced for the same language
15430      as the current compilation.  You can't use a C precompiled header
15431      for a C++ compilation.
15433    * The precompiled header file must have been produced by the same
15434      compiler binary as the current compilation is using.
15436    * Any macros defined before the precompiled header is included must
15437      either be defined in the same way as when the precompiled header
15438      was generated, or must not affect the precompiled header, which
15439      usually means that they don't appear in the precompiled header at
15440      all.
15442      The `-D' option is one way to define a macro before a precompiled
15443      header is included; using a `#define' can also do it.  There are
15444      also some options that define macros implicitly, like `-O' and
15445      `-Wdeprecated'; the same rule applies to macros defined this way.
15447    * If debugging information is output when using the precompiled
15448      header, using `-g' or similar, the same kind of debugging
15449      information must have been output when building the precompiled
15450      header.  However, a precompiled header built using `-g' can be
15451      used in a compilation when no debugging information is being
15452      output.
15454    * The same `-m' options must generally be used when building and
15455      using the precompiled header.  *Note Submodel Options::, for any
15456      cases where this rule is relaxed.
15458    * Each of the following options must be the same when building and
15459      using the precompiled header:
15461           -fexceptions
15463    * Some other command-line options starting with `-f', `-p', or `-O'
15464      must be defined in the same way as when the precompiled header was
15465      generated.  At present, it's not clear which options are safe to
15466      change and which are not; the safest choice is to use exactly the
15467      same options when generating and using the precompiled header.
15468      The following are known to be safe:
15470           -fmessage-length=  -fpreprocessed  -fsched-interblock
15471           -fsched-spec  -fsched-spec-load  -fsched-spec-load-dangerous
15472           -fsched-verbose=<number>  -fschedule-insns  -fvisibility=
15473           -pedantic-errors
15476  For all of these except the last, the compiler will automatically
15477 ignore the precompiled header if the conditions aren't met.  If you
15478 find an option combination that doesn't work and doesn't cause the
15479 precompiled header to be ignored, please consider filing a bug report,
15480 see *Note Bugs::.
15482  If you do use differing options when generating and using the
15483 precompiled header, the actual behavior will be a mixture of the
15484 behavior for the options.  For instance, if you use `-g' to generate
15485 the precompiled header but not when using it, you may or may not get
15486 debugging information for routines in the precompiled header.
15488 \x1f
15489 File: gcc.info,  Node: Running Protoize,  Prev: Precompiled Headers,  Up: Invoking GCC
15491 3.21 Running Protoize
15492 =====================
15494 The program `protoize' is an optional part of GCC.  You can use it to
15495 add prototypes to a program, thus converting the program to ISO C in
15496 one respect.  The companion program `unprotoize' does the reverse: it
15497 removes argument types from any prototypes that are found.
15499  When you run these programs, you must specify a set of source files as
15500 command line arguments.  The conversion programs start out by compiling
15501 these files to see what functions they define.  The information gathered
15502 about a file FOO is saved in a file named `FOO.X'.
15504  After scanning comes actual conversion.  The specified files are all
15505 eligible to be converted; any files they include (whether sources or
15506 just headers) are eligible as well.
15508  But not all the eligible files are converted.  By default, `protoize'
15509 and `unprotoize' convert only source and header files in the current
15510 directory.  You can specify additional directories whose files should
15511 be converted with the `-d DIRECTORY' option.  You can also specify
15512 particular files to exclude with the `-x FILE' option.  A file is
15513 converted if it is eligible, its directory name matches one of the
15514 specified directory names, and its name within the directory has not
15515 been excluded.
15517  Basic conversion with `protoize' consists of rewriting most function
15518 definitions and function declarations to specify the types of the
15519 arguments.  The only ones not rewritten are those for varargs functions.
15521  `protoize' optionally inserts prototype declarations at the beginning
15522 of the source file, to make them available for any calls that precede
15523 the function's definition.  Or it can insert prototype declarations
15524 with block scope in the blocks where undeclared functions are called.
15526  Basic conversion with `unprotoize' consists of rewriting most function
15527 declarations to remove any argument types, and rewriting function
15528 definitions to the old-style pre-ISO form.
15530  Both conversion programs print a warning for any function declaration
15531 or definition that they can't convert.  You can suppress these warnings
15532 with `-q'.
15534  The output from `protoize' or `unprotoize' replaces the original
15535 source file.  The original file is renamed to a name ending with
15536 `.save' (for DOS, the saved filename ends in `.sav' without the
15537 original `.c' suffix).  If the `.save' (`.sav' for DOS) file already
15538 exists, then the source file is simply discarded.
15540  `protoize' and `unprotoize' both depend on GCC itself to scan the
15541 program and collect information about the functions it uses.  So
15542 neither of these programs will work until GCC is installed.
15544  Here is a table of the options you can use with `protoize' and
15545 `unprotoize'.  Each option works with both programs unless otherwise
15546 stated.
15548 `-B DIRECTORY'
15549      Look for the file `SYSCALLS.c.X' in DIRECTORY, instead of the
15550      usual directory (normally `/usr/local/lib').  This file contains
15551      prototype information about standard system functions.  This option
15552      applies only to `protoize'.
15554 `-c COMPILATION-OPTIONS'
15555      Use COMPILATION-OPTIONS as the options when running `gcc' to
15556      produce the `.X' files.  The special option `-aux-info' is always
15557      passed in addition, to tell `gcc' to write a `.X' file.
15559      Note that the compilation options must be given as a single
15560      argument to `protoize' or `unprotoize'.  If you want to specify
15561      several `gcc' options, you must quote the entire set of
15562      compilation options to make them a single word in the shell.
15564      There are certain `gcc' arguments that you cannot use, because they
15565      would produce the wrong kind of output.  These include `-g', `-O',
15566      `-c', `-S', and `-o' If you include these in the
15567      COMPILATION-OPTIONS, they are ignored.
15569 `-C'
15570      Rename files to end in `.C' (`.cc' for DOS-based file systems)
15571      instead of `.c'.  This is convenient if you are converting a C
15572      program to C++.  This option applies only to `protoize'.
15574 `-g'
15575      Add explicit global declarations.  This means inserting explicit
15576      declarations at the beginning of each source file for each function
15577      that is called in the file and was not declared.  These
15578      declarations precede the first function definition that contains a
15579      call to an undeclared function.  This option applies only to
15580      `protoize'.
15582 `-i STRING'
15583      Indent old-style parameter declarations with the string STRING.
15584      This option applies only to `protoize'.
15586      `unprotoize' converts prototyped function definitions to old-style
15587      function definitions, where the arguments are declared between the
15588      argument list and the initial `{'.  By default, `unprotoize' uses
15589      five spaces as the indentation.  If you want to indent with just
15590      one space instead, use `-i " "'.
15592 `-k'
15593      Keep the `.X' files.  Normally, they are deleted after conversion
15594      is finished.
15596 `-l'
15597      Add explicit local declarations.  `protoize' with `-l' inserts a
15598      prototype declaration for each function in each block which calls
15599      the function without any declaration.  This option applies only to
15600      `protoize'.
15602 `-n'
15603      Make no real changes.  This mode just prints information about the
15604      conversions that would have been done without `-n'.
15606 `-N'
15607      Make no `.save' files.  The original files are simply deleted.
15608      Use this option with caution.
15610 `-p PROGRAM'
15611      Use the program PROGRAM as the compiler.  Normally, the name `gcc'
15612      is used.
15614 `-q'
15615      Work quietly.  Most warnings are suppressed.
15617 `-v'
15618      Print the version number, just like `-v' for `gcc'.
15620  If you need special compiler options to compile one of your program's
15621 source files, then you should generate that file's `.X' file specially,
15622 by running `gcc' on that source file with the appropriate options and
15623 the option `-aux-info'.  Then run `protoize' on the entire set of
15624 files.  `protoize' will use the existing `.X' file because it is newer
15625 than the source file.  For example:
15627      gcc -Dfoo=bar file1.c -aux-info file1.X
15628      protoize *.c
15630 You need to include the special files along with the rest in the
15631 `protoize' command, even though their `.X' files already exist, because
15632 otherwise they won't get converted.
15634  *Note Protoize Caveats::, for more information on how to use
15635 `protoize' successfully.
15637 \x1f
15638 File: gcc.info,  Node: C Implementation,  Next: C Extensions,  Prev: Invoking GCC,  Up: Top
15640 4 C Implementation-defined behavior
15641 ***********************************
15643 A conforming implementation of ISO C is required to document its choice
15644 of behavior in each of the areas that are designated "implementation
15645 defined".  The following lists all such areas, along with the section
15646 numbers from the ISO/IEC 9899:1990 and ISO/IEC 9899:1999 standards.
15647 Some areas are only implementation-defined in one version of the
15648 standard.
15650  Some choices depend on the externally determined ABI for the platform
15651 (including standard character encodings) which GCC follows; these are
15652 listed as "determined by ABI" below.  *Note Binary Compatibility:
15653 Compatibility, and `http://gcc.gnu.org/readings.html'.  Some choices
15654 are documented in the preprocessor manual.  *Note
15655 Implementation-defined behavior: (cpp)Implementation-defined behavior.
15656 Some choices are made by the library and operating system (or other
15657 environment when compiling for a freestanding environment); refer to
15658 their documentation for details.
15660 * Menu:
15662 * Translation implementation::
15663 * Environment implementation::
15664 * Identifiers implementation::
15665 * Characters implementation::
15666 * Integers implementation::
15667 * Floating point implementation::
15668 * Arrays and pointers implementation::
15669 * Hints implementation::
15670 * Structures unions enumerations and bit-fields implementation::
15671 * Qualifiers implementation::
15672 * Declarators implementation::
15673 * Statements implementation::
15674 * Preprocessing directives implementation::
15675 * Library functions implementation::
15676 * Architecture implementation::
15677 * Locale-specific behavior implementation::
15679 \x1f
15680 File: gcc.info,  Node: Translation implementation,  Next: Environment implementation,  Up: C Implementation
15682 4.1 Translation
15683 ===============
15685    * `How a diagnostic is identified (C90 3.7, C99 3.10, C90 and C99
15686      5.1.1.3).'
15688      Diagnostics consist of all the output sent to stderr by GCC.
15690    * `Whether each nonempty sequence of white-space characters other
15691      than new-line is retained or replaced by one space character in
15692      translation phase 3 (C90 and C99 5.1.1.2).'
15694      *Note Implementation-defined behavior: (cpp)Implementation-defined
15695      behavior.
15698 \x1f
15699 File: gcc.info,  Node: Environment implementation,  Next: Identifiers implementation,  Prev: Translation implementation,  Up: C Implementation
15701 4.2 Environment
15702 ===============
15704 The behavior of most of these points are dependent on the implementation
15705 of the C library, and are not defined by GCC itself.
15707    * `The mapping between physical source file multibyte characters and
15708      the source character set in translation phase 1 (C90 and C99
15709      5.1.1.2).'
15711      *Note Implementation-defined behavior: (cpp)Implementation-defined
15712      behavior.
15715 \x1f
15716 File: gcc.info,  Node: Identifiers implementation,  Next: Characters implementation,  Prev: Environment implementation,  Up: C Implementation
15718 4.3 Identifiers
15719 ===============
15721    * `Which additional multibyte characters may appear in identifiers
15722      and their correspondence to universal character names (C99 6.4.2).'
15724      *Note Implementation-defined behavior: (cpp)Implementation-defined
15725      behavior.
15727    * `The number of significant initial characters in an identifier
15728      (C90 6.1.2, C90 and C99 5.2.4.1, C99 6.4.2).'
15730      For internal names, all characters are significant.  For external
15731      names, the number of significant characters are defined by the
15732      linker; for almost all targets, all characters are significant.
15734    * `Whether case distinctions are significant in an identifier with
15735      external linkage (C90 6.1.2).'
15737      This is a property of the linker.  C99 requires that case
15738      distinctions are always significant in identifiers with external
15739      linkage and systems without this property are not supported by GCC.
15742 \x1f
15743 File: gcc.info,  Node: Characters implementation,  Next: Integers implementation,  Prev: Identifiers implementation,  Up: C Implementation
15745 4.4 Characters
15746 ==============
15748    * `The number of bits in a byte (C90 3.4, C99 3.6).'
15750      Determined by ABI.
15752    * `The values of the members of the execution character set (C90 and
15753      C99 5.2.1).'
15755      Determined by ABI.
15757    * `The unique value of the member of the execution character set
15758      produced for each of the standard alphabetic escape sequences (C90
15759      and C99 5.2.2).'
15761      Determined by ABI.
15763    * `The value of a `char' object into which has been stored any
15764      character other than a member of the basic execution character set
15765      (C90 6.1.2.5, C99 6.2.5).'
15767      Determined by ABI.
15769    * `Which of `signed char' or `unsigned char' has the same range,
15770      representation, and behavior as "plain" `char' (C90 6.1.2.5, C90
15771      6.2.1.1, C99 6.2.5, C99 6.3.1.1).'
15773      Determined by ABI.  The options `-funsigned-char' and
15774      `-fsigned-char' change the default.  *Note Options Controlling C
15775      Dialect: C Dialect Options.
15777    * `The mapping of members of the source character set (in character
15778      constants and string literals) to members of the execution
15779      character set (C90 6.1.3.4, C99 6.4.4.4, C90 and C99 5.1.1.2).'
15781      Determined by ABI.
15783    * `The value of an integer character constant containing more than
15784      one character or containing a character or escape sequence that
15785      does not map to a single-byte execution character (C90 6.1.3.4,
15786      C99 6.4.4.4).'
15788      *Note Implementation-defined behavior: (cpp)Implementation-defined
15789      behavior.
15791    * `The value of a wide character constant containing more than one
15792      multibyte character, or containing a multibyte character or escape
15793      sequence not represented in the extended execution character set
15794      (C90 6.1.3.4, C99 6.4.4.4).'
15796      *Note Implementation-defined behavior: (cpp)Implementation-defined
15797      behavior.
15799    * `The current locale used to convert a wide character constant
15800      consisting of a single multibyte character that maps to a member
15801      of the extended execution character set into a corresponding wide
15802      character code (C90 6.1.3.4, C99 6.4.4.4).'
15804      *Note Implementation-defined behavior: (cpp)Implementation-defined
15805      behavior.
15807    * `The current locale used to convert a wide string literal into
15808      corresponding wide character codes (C90 6.1.4, C99 6.4.5).'
15810      *Note Implementation-defined behavior: (cpp)Implementation-defined
15811      behavior.
15813    * `The value of a string literal containing a multibyte character or
15814      escape sequence not represented in the execution character set
15815      (C90 6.1.4, C99 6.4.5).'
15817      *Note Implementation-defined behavior: (cpp)Implementation-defined
15818      behavior.
15820 \x1f
15821 File: gcc.info,  Node: Integers implementation,  Next: Floating point implementation,  Prev: Characters implementation,  Up: C Implementation
15823 4.5 Integers
15824 ============
15826    * `Any extended integer types that exist in the implementation (C99
15827      6.2.5).'
15829      GCC does not support any extended integer types.
15831    * `Whether signed integer types are represented using sign and
15832      magnitude, two's complement, or one's complement, and whether the
15833      extraordinary value is a trap representation or an ordinary value
15834      (C99 6.2.6.2).'
15836      GCC supports only two's complement integer types, and all bit
15837      patterns are ordinary values.
15839    * `The rank of any extended integer type relative to another extended
15840      integer type with the same precision (C99 6.3.1.1).'
15842      GCC does not support any extended integer types.
15844    * `The result of, or the signal raised by, converting an integer to a
15845      signed integer type when the value cannot be represented in an
15846      object of that type (C90 6.2.1.2, C99 6.3.1.3).'
15848      For conversion to a type of width N, the value is reduced modulo
15849      2^N to be within range of the type; no signal is raised.
15851    * `The results of some bitwise operations on signed integers (C90
15852      6.3, C99 6.5).'
15854      Bitwise operators act on the representation of the value including
15855      both the sign and value bits, where the sign bit is considered
15856      immediately above the highest-value value bit.  Signed `>>' acts
15857      on negative numbers by sign extension.
15859      GCC does not use the latitude given in C99 only to treat certain
15860      aspects of signed `<<' as undefined, but this is subject to change.
15862    * `The sign of the remainder on integer division (C90 6.3.5).'
15864      GCC always follows the C99 requirement that the result of division
15865      is truncated towards zero.
15868 \x1f
15869 File: gcc.info,  Node: Floating point implementation,  Next: Arrays and pointers implementation,  Prev: Integers implementation,  Up: C Implementation
15871 4.6 Floating point
15872 ==================
15874    * `The accuracy of the floating-point operations and of the library
15875      functions in `<math.h>' and `<complex.h>' that return
15876      floating-point results (C90 and C99 5.2.4.2.2).'
15878      The accuracy is unknown.
15880    * `The rounding behaviors characterized by non-standard values of
15881      `FLT_ROUNDS'  (C90 and C99 5.2.4.2.2).'
15883      GCC does not use such values.
15885    * `The evaluation methods characterized by non-standard negative
15886      values of `FLT_EVAL_METHOD' (C99 5.2.4.2.2).'
15888      GCC does not use such values.
15890    * `The direction of rounding when an integer is converted to a
15891      floating-point number that cannot exactly represent the original
15892      value (C90 6.2.1.3, C99 6.3.1.4).'
15894      C99 Annex F is followed.
15896    * `The direction of rounding when a floating-point number is
15897      converted to a narrower floating-point number (C90 6.2.1.4, C99
15898      6.3.1.5).'
15900      C99 Annex F is followed.
15902    * `How the nearest representable value or the larger or smaller
15903      representable value immediately adjacent to the nearest
15904      representable value is chosen for certain floating constants (C90
15905      6.1.3.1, C99 6.4.4.2).'
15907      C99 Annex F is followed.
15909    * `Whether and how floating expressions are contracted when not
15910      disallowed by the `FP_CONTRACT' pragma (C99 6.5).'
15912      Expressions are currently only contracted if
15913      `-funsafe-math-optimizations' or `-ffast-math' are used.  This is
15914      subject to change.
15916    * `The default state for the `FENV_ACCESS' pragma (C99 7.6.1).'
15918      This pragma is not implemented, but the default is to "off" unless
15919      `-frounding-math' is used in which case it is "on".
15921    * `Additional floating-point exceptions, rounding modes,
15922      environments, and classifications, and their macro names (C99 7.6,
15923      C99 7.12).'
15925      This is dependent on the implementation of the C library, and is
15926      not defined by GCC itself.
15928    * `The default state for the `FP_CONTRACT' pragma (C99 7.12.2).'
15930      This pragma is not implemented.  Expressions are currently only
15931      contracted if `-funsafe-math-optimizations' or `-ffast-math' are
15932      used.  This is subject to change.
15934    * `Whether the "inexact" floating-point exception can be raised when
15935      the rounded result actually does equal the mathematical result in
15936      an IEC 60559 conformant implementation (C99 F.9).'
15938      This is dependent on the implementation of the C library, and is
15939      not defined by GCC itself.
15941    * `Whether the "underflow" (and "inexact") floating-point exception
15942      can be raised when a result is tiny but not inexact in an IEC
15943      60559 conformant implementation (C99 F.9).'
15945      This is dependent on the implementation of the C library, and is
15946      not defined by GCC itself.
15949 \x1f
15950 File: gcc.info,  Node: Arrays and pointers implementation,  Next: Hints implementation,  Prev: Floating point implementation,  Up: C Implementation
15952 4.7 Arrays and pointers
15953 =======================
15955    * `The result of converting a pointer to an integer or vice versa
15956      (C90 6.3.4, C99 6.3.2.3).'
15958      A cast from pointer to integer discards most-significant bits if
15959      the pointer representation is larger than the integer type,
15960      sign-extends(1) if the pointer representation is smaller than the
15961      integer type, otherwise the bits are unchanged.
15963      A cast from integer to pointer discards most-significant bits if
15964      the pointer representation is smaller than the integer type,
15965      extends according to the signedness of the integer type if the
15966      pointer representation is larger than the integer type, otherwise
15967      the bits are unchanged.
15969      When casting from pointer to integer and back again, the resulting
15970      pointer must reference the same object as the original pointer,
15971      otherwise the behavior is undefined.  That is, one may not use
15972      integer arithmetic to avoid the undefined behavior of pointer
15973      arithmetic as proscribed in C99 6.5.6/8.
15975    * `The size of the result of subtracting two pointers to elements of
15976      the same array (C90 6.3.6, C99 6.5.6).'
15978      The value is as specified in the standard and the type is
15979      determined by the ABI.
15982  ---------- Footnotes ----------
15984  (1) Future versions of GCC may zero-extend, or use a target-defined
15985 `ptr_extend' pattern.  Do not rely on sign extension.
15987 \x1f
15988 File: gcc.info,  Node: Hints implementation,  Next: Structures unions enumerations and bit-fields implementation,  Prev: Arrays and pointers implementation,  Up: C Implementation
15990 4.8 Hints
15991 =========
15993    * `The extent to which suggestions made by using the `register'
15994      storage-class specifier are effective (C90 6.5.1, C99 6.7.1).'
15996      The `register' specifier affects code generation only in these
15997      ways:
15999         * When used as part of the register variable extension, see
16000           *Note Explicit Reg Vars::.
16002         * When `-O0' is in use, the compiler allocates distinct stack
16003           memory for all variables that do not have the `register'
16004           storage-class specifier; if `register' is specified, the
16005           variable may have a shorter lifespan than the code would
16006           indicate and may never be placed in memory.
16008         * On some rare x86 targets, `setjmp' doesn't save the registers
16009           in all circumstances.  In those cases, GCC doesn't allocate
16010           any variables in registers unless they are marked `register'.
16013    * `The extent to which suggestions made by using the inline function
16014      specifier are effective (C99 6.7.4).'
16016      GCC will not inline any functions if the `-fno-inline' option is
16017      used or if `-O0' is used.  Otherwise, GCC may still be unable to
16018      inline a function for many reasons; the `-Winline' option may be
16019      used to determine if a function has not been inlined and why not.
16022 \x1f
16023 File: gcc.info,  Node: Structures unions enumerations and bit-fields implementation,  Next: Qualifiers implementation,  Prev: Hints implementation,  Up: C Implementation
16025 4.9 Structures, unions, enumerations, and bit-fields
16026 ====================================================
16028    * `A member of a union object is accessed using a member of a
16029      different type (C90 6.3.2.3).'
16031      The relevant bytes of the representation of the object are treated
16032      as an object of the type used for the access.  *Note
16033      Type-punning::.  This may be a trap representation.
16035    * `Whether a "plain" `int' bit-field is treated as a `signed int'
16036      bit-field or as an `unsigned int' bit-field (C90 6.5.2, C90
16037      6.5.2.1, C99 6.7.2, C99 6.7.2.1).'
16039      By default it is treated as `signed int' but this may be changed
16040      by the `-funsigned-bitfields' option.
16042    * `Allowable bit-field types other than `_Bool', `signed int', and
16043      `unsigned int' (C99 6.7.2.1).'
16045      No other types are permitted in strictly conforming mode.
16047    * `Whether a bit-field can straddle a storage-unit boundary (C90
16048      6.5.2.1, C99 6.7.2.1).'
16050      Determined by ABI.
16052    * `The order of allocation of bit-fields within a unit (C90 6.5.2.1,
16053      C99 6.7.2.1).'
16055      Determined by ABI.
16057    * `The alignment of non-bit-field members of structures (C90
16058      6.5.2.1, C99 6.7.2.1).'
16060      Determined by ABI.
16062    * `The integer type compatible with each enumerated type (C90
16063      6.5.2.2, C99 6.7.2.2).'
16065      Normally, the type is `unsigned int' if there are no negative
16066      values in the enumeration, otherwise `int'.  If `-fshort-enums' is
16067      specified, then if there are negative values it is the first of
16068      `signed char', `short' and `int' that can represent all the
16069      values, otherwise it is the first of `unsigned char', `unsigned
16070      short' and `unsigned int' that can represent all the values.
16072      On some targets, `-fshort-enums' is the default; this is
16073      determined by the ABI.
16076 \x1f
16077 File: gcc.info,  Node: Qualifiers implementation,  Next: Declarators implementation,  Prev: Structures unions enumerations and bit-fields implementation,  Up: C Implementation
16079 4.10 Qualifiers
16080 ===============
16082    * `What constitutes an access to an object that has
16083      volatile-qualified type (C90 6.5.3, C99 6.7.3).'
16085      Such an object is normally accessed by pointers and used for
16086      accessing hardware.  In most expressions, it is intuitively
16087      obvious what is a read and what is a write.  For example
16089           volatile int *dst = SOMEVALUE;
16090           volatile int *src = SOMEOTHERVALUE;
16091           *dst = *src;
16093      will cause a read of the volatile object pointed to by SRC and
16094      store the value into the volatile object pointed to by DST.  There
16095      is no guarantee that these reads and writes are atomic, especially
16096      for objects larger than `int'.
16098      However, if the volatile storage is not being modified, and the
16099      value of the volatile storage is not used, then the situation is
16100      less obvious.  For example
16102           volatile int *src = SOMEVALUE;
16103           *src;
16105      According to the C standard, such an expression is an rvalue whose
16106      type is the unqualified version of its original type, i.e. `int'.
16107      Whether GCC interprets this as a read of the volatile object being
16108      pointed to or only as a request to evaluate the expression for its
16109      side-effects depends on this type.
16111      If it is a scalar type, or on most targets an aggregate type whose
16112      only member object is of a scalar type, or a union type whose
16113      member objects are of scalar types, the expression is interpreted
16114      by GCC as a read of the volatile object; in the other cases, the
16115      expression is only evaluated for its side-effects.
16118 \x1f
16119 File: gcc.info,  Node: Declarators implementation,  Next: Statements implementation,  Prev: Qualifiers implementation,  Up: C Implementation
16121 4.11 Declarators
16122 ================
16124    * `The maximum number of declarators that may modify an arithmetic,
16125      structure or union type (C90 6.5.4).'
16127      GCC is only limited by available memory.
16130 \x1f
16131 File: gcc.info,  Node: Statements implementation,  Next: Preprocessing directives implementation,  Prev: Declarators implementation,  Up: C Implementation
16133 4.12 Statements
16134 ===============
16136    * `The maximum number of `case' values in a `switch' statement (C90
16137      6.6.4.2).'
16139      GCC is only limited by available memory.
16142 \x1f
16143 File: gcc.info,  Node: Preprocessing directives implementation,  Next: Library functions implementation,  Prev: Statements implementation,  Up: C Implementation
16145 4.13 Preprocessing directives
16146 =============================
16148 *Note Implementation-defined behavior: (cpp)Implementation-defined
16149 behavior, for details of these aspects of implementation-defined
16150 behavior.
16152    * `How sequences in both forms of header names are mapped to headers
16153      or external source file names (C90 6.1.7, C99 6.4.7).'
16155    * `Whether the value of a character constant in a constant expression
16156      that controls conditional inclusion matches the value of the same
16157      character constant in the execution character set (C90 6.8.1, C99
16158      6.10.1).'
16160    * `Whether the value of a single-character character constant in a
16161      constant expression that controls conditional inclusion may have a
16162      negative value (C90 6.8.1, C99 6.10.1).'
16164    * `The places that are searched for an included `<>' delimited
16165      header, and how the places are specified or the header is
16166      identified (C90 6.8.2, C99 6.10.2).'
16168    * `How the named source file is searched for in an included `""'
16169      delimited header (C90 6.8.2, C99 6.10.2).'
16171    * `The method by which preprocessing tokens (possibly resulting from
16172      macro expansion) in a `#include' directive are combined into a
16173      header name (C90 6.8.2, C99 6.10.2).'
16175    * `The nesting limit for `#include' processing (C90 6.8.2, C99
16176      6.10.2).'
16178    * `Whether the `#' operator inserts a `\' character before the `\'
16179      character that begins a universal character name in a character
16180      constant or string literal (C99 6.10.3.2).'
16182    * `The behavior on each recognized non-`STDC #pragma' directive (C90
16183      6.8.6, C99 6.10.6).'
16185      *Note Pragmas: (cpp)Pragmas, for details of pragmas accepted by
16186      GCC on all targets.  *Note Pragmas Accepted by GCC: Pragmas, for
16187      details of target-specific pragmas.
16189    * `The definitions for `__DATE__' and `__TIME__' when respectively,
16190      the date and time of translation are not available (C90 6.8.8, C99
16191      6.10.8).'
16194 \x1f
16195 File: gcc.info,  Node: Library functions implementation,  Next: Architecture implementation,  Prev: Preprocessing directives implementation,  Up: C Implementation
16197 4.14 Library functions
16198 ======================
16200 The behavior of most of these points are dependent on the implementation
16201 of the C library, and are not defined by GCC itself.
16203    * `The null pointer constant to which the macro `NULL' expands (C90
16204      7.1.6, C99 7.17).'
16206      In `<stddef.h>', `NULL' expands to `((void *)0)'.  GCC does not
16207      provide the other headers which define `NULL' and some library
16208      implementations may use other definitions in those headers.
16211 \x1f
16212 File: gcc.info,  Node: Architecture implementation,  Next: Locale-specific behavior implementation,  Prev: Library functions implementation,  Up: C Implementation
16214 4.15 Architecture
16215 =================
16217    * `The values or expressions assigned to the macros specified in the
16218      headers `<float.h>', `<limits.h>', and `<stdint.h>' (C90 and C99
16219      5.2.4.2, C99 7.18.2, C99 7.18.3).'
16221      Determined by ABI.
16223    * `The number, order, and encoding of bytes in any object (when not
16224      explicitly specified in this International Standard) (C99
16225      6.2.6.1).'
16227      Determined by ABI.
16229    * `The value of the result of the `sizeof' operator (C90 6.3.3.4,
16230      C99 6.5.3.4).'
16232      Determined by ABI.
16235 \x1f
16236 File: gcc.info,  Node: Locale-specific behavior implementation,  Prev: Architecture implementation,  Up: C Implementation
16238 4.16 Locale-specific behavior
16239 =============================
16241 The behavior of these points are dependent on the implementation of the
16242 C library, and are not defined by GCC itself.
16244 \x1f
16245 File: gcc.info,  Node: C Extensions,  Next: C++ Extensions,  Prev: C Implementation,  Up: Top
16247 5 Extensions to the C Language Family
16248 *************************************
16250 GNU C provides several language features not found in ISO standard C.
16251 (The `-pedantic' option directs GCC to print a warning message if any
16252 of these features is used.)  To test for the availability of these
16253 features in conditional compilation, check for a predefined macro
16254 `__GNUC__', which is always defined under GCC.
16256  These extensions are available in C and Objective-C.  Most of them are
16257 also available in C++.  *Note Extensions to the C++ Language: C++
16258 Extensions, for extensions that apply _only_ to C++.
16260  Some features that are in ISO C99 but not C89 or C++ are also, as
16261 extensions, accepted by GCC in C89 mode and in C++.
16263 * Menu:
16265 * Statement Exprs::     Putting statements and declarations inside expressions.
16266 * Local Labels::        Labels local to a block.
16267 * Labels as Values::    Getting pointers to labels, and computed gotos.
16268 * Nested Functions::    As in Algol and Pascal, lexical scoping of functions.
16269 * Constructing Calls::  Dispatching a call to another function.
16270 * Typeof::              `typeof': referring to the type of an expression.
16271 * Conditionals::        Omitting the middle operand of a `?:' expression.
16272 * Long Long::           Double-word integers---`long long int'.
16273 * Complex::             Data types for complex numbers.
16274 * Floating Types::      Additional Floating Types.
16275 * Decimal Float::       Decimal Floating Types.
16276 * Hex Floats::          Hexadecimal floating-point constants.
16277 * Fixed-Point::         Fixed-Point Types.
16278 * Zero Length::         Zero-length arrays.
16279 * Variable Length::     Arrays whose length is computed at run time.
16280 * Empty Structures::    Structures with no members.
16281 * Variadic Macros::     Macros with a variable number of arguments.
16282 * Escaped Newlines::    Slightly looser rules for escaped newlines.
16283 * Subscripting::        Any array can be subscripted, even if not an lvalue.
16284 * Pointer Arith::       Arithmetic on `void'-pointers and function pointers.
16285 * Initializers::        Non-constant initializers.
16286 * Compound Literals::   Compound literals give structures, unions
16287                         or arrays as values.
16288 * Designated Inits::    Labeling elements of initializers.
16289 * Cast to Union::       Casting to union type from any member of the union.
16290 * Case Ranges::         `case 1 ... 9' and such.
16291 * Mixed Declarations::  Mixing declarations and code.
16292 * Function Attributes:: Declaring that functions have no side effects,
16293                         or that they can never return.
16294 * Attribute Syntax::    Formal syntax for attributes.
16295 * Function Prototypes:: Prototype declarations and old-style definitions.
16296 * C++ Comments::        C++ comments are recognized.
16297 * Dollar Signs::        Dollar sign is allowed in identifiers.
16298 * Character Escapes::   `\e' stands for the character <ESC>.
16299 * Variable Attributes:: Specifying attributes of variables.
16300 * Type Attributes::     Specifying attributes of types.
16301 * Alignment::           Inquiring about the alignment of a type or variable.
16302 * Inline::              Defining inline functions (as fast as macros).
16303 * Extended Asm::        Assembler instructions with C expressions as operands.
16304                         (With them you can define ``built-in'' functions.)
16305 * Constraints::         Constraints for asm operands
16306 * Asm Labels::          Specifying the assembler name to use for a C symbol.
16307 * Explicit Reg Vars::   Defining variables residing in specified registers.
16308 * Alternate Keywords::  `__const__', `__asm__', etc., for header files.
16309 * Incomplete Enums::    `enum foo;', with details to follow.
16310 * Function Names::      Printable strings which are the name of the current
16311                         function.
16312 * Return Address::      Getting the return or frame address of a function.
16313 * Vector Extensions::   Using vector instructions through built-in functions.
16314 * Offsetof::            Special syntax for implementing `offsetof'.
16315 * Atomic Builtins::     Built-in functions for atomic memory access.
16316 * Object Size Checking:: Built-in functions for limited buffer overflow
16317                         checking.
16318 * Other Builtins::      Other built-in functions.
16319 * Target Builtins::     Built-in functions specific to particular targets.
16320 * Target Format Checks:: Format checks specific to particular targets.
16321 * Pragmas::             Pragmas accepted by GCC.
16322 * Unnamed Fields::      Unnamed struct/union fields within structs/unions.
16323 * Thread-Local::        Per-thread variables.
16324 * Binary constants::    Binary constants using the `0b' prefix.
16326 \x1f
16327 File: gcc.info,  Node: Statement Exprs,  Next: Local Labels,  Up: C Extensions
16329 5.1 Statements and Declarations in Expressions
16330 ==============================================
16332 A compound statement enclosed in parentheses may appear as an expression
16333 in GNU C.  This allows you to use loops, switches, and local variables
16334 within an expression.
16336  Recall that a compound statement is a sequence of statements surrounded
16337 by braces; in this construct, parentheses go around the braces.  For
16338 example:
16340      ({ int y = foo (); int z;
16341         if (y > 0) z = y;
16342         else z = - y;
16343         z; })
16345 is a valid (though slightly more complex than necessary) expression for
16346 the absolute value of `foo ()'.
16348  The last thing in the compound statement should be an expression
16349 followed by a semicolon; the value of this subexpression serves as the
16350 value of the entire construct.  (If you use some other kind of statement
16351 last within the braces, the construct has type `void', and thus
16352 effectively no value.)
16354  This feature is especially useful in making macro definitions "safe"
16355 (so that they evaluate each operand exactly once).  For example, the
16356 "maximum" function is commonly defined as a macro in standard C as
16357 follows:
16359      #define max(a,b) ((a) > (b) ? (a) : (b))
16361 But this definition computes either A or B twice, with bad results if
16362 the operand has side effects.  In GNU C, if you know the type of the
16363 operands (here taken as `int'), you can define the macro safely as
16364 follows:
16366      #define maxint(a,b) \
16367        ({int _a = (a), _b = (b); _a > _b ? _a : _b; })
16369  Embedded statements are not allowed in constant expressions, such as
16370 the value of an enumeration constant, the width of a bit-field, or the
16371 initial value of a static variable.
16373  If you don't know the type of the operand, you can still do this, but
16374 you must use `typeof' (*note Typeof::).
16376  In G++, the result value of a statement expression undergoes array and
16377 function pointer decay, and is returned by value to the enclosing
16378 expression.  For instance, if `A' is a class, then
16380              A a;
16382              ({a;}).Foo ()
16384 will construct a temporary `A' object to hold the result of the
16385 statement expression, and that will be used to invoke `Foo'.  Therefore
16386 the `this' pointer observed by `Foo' will not be the address of `a'.
16388  Any temporaries created within a statement within a statement
16389 expression will be destroyed at the statement's end.  This makes
16390 statement expressions inside macros slightly different from function
16391 calls.  In the latter case temporaries introduced during argument
16392 evaluation will be destroyed at the end of the statement that includes
16393 the function call.  In the statement expression case they will be
16394 destroyed during the statement expression.  For instance,
16396      #define macro(a)  ({__typeof__(a) b = (a); b + 3; })
16397      template<typename T> T function(T a) { T b = a; return b + 3; }
16399      void foo ()
16400      {
16401        macro (X ());
16402        function (X ());
16403      }
16405 will have different places where temporaries are destroyed.  For the
16406 `macro' case, the temporary `X' will be destroyed just after the
16407 initialization of `b'.  In the `function' case that temporary will be
16408 destroyed when the function returns.
16410  These considerations mean that it is probably a bad idea to use
16411 statement-expressions of this form in header files that are designed to
16412 work with C++.  (Note that some versions of the GNU C Library contained
16413 header files using statement-expression that lead to precisely this
16414 bug.)
16416  Jumping into a statement expression with `goto' or using a `switch'
16417 statement outside the statement expression with a `case' or `default'
16418 label inside the statement expression is not permitted.  Jumping into a
16419 statement expression with a computed `goto' (*note Labels as Values::)
16420 yields undefined behavior.  Jumping out of a statement expression is
16421 permitted, but if the statement expression is part of a larger
16422 expression then it is unspecified which other subexpressions of that
16423 expression have been evaluated except where the language definition
16424 requires certain subexpressions to be evaluated before or after the
16425 statement expression.  In any case, as with a function call the
16426 evaluation of a statement expression is not interleaved with the
16427 evaluation of other parts of the containing expression.  For example,
16429        foo (), (({ bar1 (); goto a; 0; }) + bar2 ()), baz();
16431 will call `foo' and `bar1' and will not call `baz' but may or may not
16432 call `bar2'.  If `bar2' is called, it will be called after `foo' and
16433 before `bar1'
16435 \x1f
16436 File: gcc.info,  Node: Local Labels,  Next: Labels as Values,  Prev: Statement Exprs,  Up: C Extensions
16438 5.2 Locally Declared Labels
16439 ===========================
16441 GCC allows you to declare "local labels" in any nested block scope.  A
16442 local label is just like an ordinary label, but you can only reference
16443 it (with a `goto' statement, or by taking its address) within the block
16444 in which it was declared.
16446  A local label declaration looks like this:
16448      __label__ LABEL;
16452      __label__ LABEL1, LABEL2, /* ... */;
16454  Local label declarations must come at the beginning of the block,
16455 before any ordinary declarations or statements.
16457  The label declaration defines the label _name_, but does not define
16458 the label itself.  You must do this in the usual way, with `LABEL:',
16459 within the statements of the statement expression.
16461  The local label feature is useful for complex macros.  If a macro
16462 contains nested loops, a `goto' can be useful for breaking out of them.
16463 However, an ordinary label whose scope is the whole function cannot be
16464 used: if the macro can be expanded several times in one function, the
16465 label will be multiply defined in that function.  A local label avoids
16466 this problem.  For example:
16468      #define SEARCH(value, array, target)              \
16469      do {                                              \
16470        __label__ found;                                \
16471        typeof (target) _SEARCH_target = (target);      \
16472        typeof (*(array)) *_SEARCH_array = (array);     \
16473        int i, j;                                       \
16474        int value;                                      \
16475        for (i = 0; i < max; i++)                       \
16476          for (j = 0; j < max; j++)                     \
16477            if (_SEARCH_array[i][j] == _SEARCH_target)  \
16478              { (value) = i; goto found; }              \
16479        (value) = -1;                                   \
16480       found:;                                          \
16481      } while (0)
16483  This could also be written using a statement-expression:
16485      #define SEARCH(array, target)                     \
16486      ({                                                \
16487        __label__ found;                                \
16488        typeof (target) _SEARCH_target = (target);      \
16489        typeof (*(array)) *_SEARCH_array = (array);     \
16490        int i, j;                                       \
16491        int value;                                      \
16492        for (i = 0; i < max; i++)                       \
16493          for (j = 0; j < max; j++)                     \
16494            if (_SEARCH_array[i][j] == _SEARCH_target)  \
16495              { value = i; goto found; }                \
16496        value = -1;                                     \
16497       found:                                           \
16498        value;                                          \
16499      })
16501  Local label declarations also make the labels they declare visible to
16502 nested functions, if there are any.  *Note Nested Functions::, for
16503 details.
16505 \x1f
16506 File: gcc.info,  Node: Labels as Values,  Next: Nested Functions,  Prev: Local Labels,  Up: C Extensions
16508 5.3 Labels as Values
16509 ====================
16511 You can get the address of a label defined in the current function (or
16512 a containing function) with the unary operator `&&'.  The value has
16513 type `void *'.  This value is a constant and can be used wherever a
16514 constant of that type is valid.  For example:
16516      void *ptr;
16517      /* ... */
16518      ptr = &&foo;
16520  To use these values, you need to be able to jump to one.  This is done
16521 with the computed goto statement(1), `goto *EXP;'.  For example,
16523      goto *ptr;
16525 Any expression of type `void *' is allowed.
16527  One way of using these constants is in initializing a static array that
16528 will serve as a jump table:
16530      static void *array[] = { &&foo, &&bar, &&hack };
16532  Then you can select a label with indexing, like this:
16534      goto *array[i];
16536 Note that this does not check whether the subscript is in bounds--array
16537 indexing in C never does that.
16539  Such an array of label values serves a purpose much like that of the
16540 `switch' statement.  The `switch' statement is cleaner, so use that
16541 rather than an array unless the problem does not fit a `switch'
16542 statement very well.
16544  Another use of label values is in an interpreter for threaded code.
16545 The labels within the interpreter function can be stored in the
16546 threaded code for super-fast dispatching.
16548  You may not use this mechanism to jump to code in a different function.
16549 If you do that, totally unpredictable things will happen.  The best way
16550 to avoid this is to store the label address only in automatic variables
16551 and never pass it as an argument.
16553  An alternate way to write the above example is
16555      static const int array[] = { &&foo - &&foo, &&bar - &&foo,
16556                                   &&hack - &&foo };
16557      goto *(&&foo + array[i]);
16559 This is more friendly to code living in shared libraries, as it reduces
16560 the number of dynamic relocations that are needed, and by consequence,
16561 allows the data to be read-only.
16563  The `&&foo' expressions for the same label might have different values
16564 if the containing function is inlined or cloned.  If a program relies on
16565 them being always the same, `__attribute__((__noinline__))' should be
16566 used to prevent inlining.  If `&&foo' is used in a static variable
16567 initializer, inlining is forbidden.
16569  ---------- Footnotes ----------
16571  (1) The analogous feature in Fortran is called an assigned goto, but
16572 that name seems inappropriate in C, where one can do more than simply
16573 store label addresses in label variables.
16575 \x1f
16576 File: gcc.info,  Node: Nested Functions,  Next: Constructing Calls,  Prev: Labels as Values,  Up: C Extensions
16578 5.4 Nested Functions
16579 ====================
16581 A "nested function" is a function defined inside another function.
16582 (Nested functions are not supported for GNU C++.)  The nested function's
16583 name is local to the block where it is defined.  For example, here we
16584 define a nested function named `square', and call it twice:
16586      foo (double a, double b)
16587      {
16588        double square (double z) { return z * z; }
16590        return square (a) + square (b);
16591      }
16593  The nested function can access all the variables of the containing
16594 function that are visible at the point of its definition.  This is
16595 called "lexical scoping".  For example, here we show a nested function
16596 which uses an inherited variable named `offset':
16598      bar (int *array, int offset, int size)
16599      {
16600        int access (int *array, int index)
16601          { return array[index + offset]; }
16602        int i;
16603        /* ... */
16604        for (i = 0; i < size; i++)
16605          /* ... */ access (array, i) /* ... */
16606      }
16608  Nested function definitions are permitted within functions in the
16609 places where variable definitions are allowed; that is, in any block,
16610 mixed with the other declarations and statements in the block.
16612  It is possible to call the nested function from outside the scope of
16613 its name by storing its address or passing the address to another
16614 function:
16616      hack (int *array, int size)
16617      {
16618        void store (int index, int value)
16619          { array[index] = value; }
16621        intermediate (store, size);
16622      }
16624  Here, the function `intermediate' receives the address of `store' as
16625 an argument.  If `intermediate' calls `store', the arguments given to
16626 `store' are used to store into `array'.  But this technique works only
16627 so long as the containing function (`hack', in this example) does not
16628 exit.
16630  If you try to call the nested function through its address after the
16631 containing function has exited, all hell will break loose.  If you try
16632 to call it after a containing scope level has exited, and if it refers
16633 to some of the variables that are no longer in scope, you may be lucky,
16634 but it's not wise to take the risk.  If, however, the nested function
16635 does not refer to anything that has gone out of scope, you should be
16636 safe.
16638  GCC implements taking the address of a nested function using a
16639 technique called "trampolines".  A paper describing them is available as
16641 `http://people.debian.org/~aaronl/Usenix88-lexic.pdf'.
16643  A nested function can jump to a label inherited from a containing
16644 function, provided the label was explicitly declared in the containing
16645 function (*note Local Labels::).  Such a jump returns instantly to the
16646 containing function, exiting the nested function which did the `goto'
16647 and any intermediate functions as well.  Here is an example:
16649      bar (int *array, int offset, int size)
16650      {
16651        __label__ failure;
16652        int access (int *array, int index)
16653          {
16654            if (index > size)
16655              goto failure;
16656            return array[index + offset];
16657          }
16658        int i;
16659        /* ... */
16660        for (i = 0; i < size; i++)
16661          /* ... */ access (array, i) /* ... */
16662        /* ... */
16663        return 0;
16665       /* Control comes here from `access'
16666          if it detects an error.  */
16667       failure:
16668        return -1;
16669      }
16671  A nested function always has no linkage.  Declaring one with `extern'
16672 or `static' is erroneous.  If you need to declare the nested function
16673 before its definition, use `auto' (which is otherwise meaningless for
16674 function declarations).
16676      bar (int *array, int offset, int size)
16677      {
16678        __label__ failure;
16679        auto int access (int *, int);
16680        /* ... */
16681        int access (int *array, int index)
16682          {
16683            if (index > size)
16684              goto failure;
16685            return array[index + offset];
16686          }
16687        /* ... */
16688      }
16690 \x1f
16691 File: gcc.info,  Node: Constructing Calls,  Next: Typeof,  Prev: Nested Functions,  Up: C Extensions
16693 5.5 Constructing Function Calls
16694 ===============================
16696 Using the built-in functions described below, you can record the
16697 arguments a function received, and call another function with the same
16698 arguments, without knowing the number or types of the arguments.
16700  You can also record the return value of that function call, and later
16701 return that value, without knowing what data type the function tried to
16702 return (as long as your caller expects that data type).
16704  However, these built-in functions may interact badly with some
16705 sophisticated features or other extensions of the language.  It is,
16706 therefore, not recommended to use them outside very simple functions
16707 acting as mere forwarders for their arguments.
16709  -- Built-in Function: void * __builtin_apply_args ()
16710      This built-in function returns a pointer to data describing how to
16711      perform a call with the same arguments as were passed to the
16712      current function.
16714      The function saves the arg pointer register, structure value
16715      address, and all registers that might be used to pass arguments to
16716      a function into a block of memory allocated on the stack.  Then it
16717      returns the address of that block.
16719  -- Built-in Function: void * __builtin_apply (void (*FUNCTION)(), void
16720           *ARGUMENTS, size_t SIZE)
16721      This built-in function invokes FUNCTION with a copy of the
16722      parameters described by ARGUMENTS and SIZE.
16724      The value of ARGUMENTS should be the value returned by
16725      `__builtin_apply_args'.  The argument SIZE specifies the size of
16726      the stack argument data, in bytes.
16728      This function returns a pointer to data describing how to return
16729      whatever value was returned by FUNCTION.  The data is saved in a
16730      block of memory allocated on the stack.
16732      It is not always simple to compute the proper value for SIZE.  The
16733      value is used by `__builtin_apply' to compute the amount of data
16734      that should be pushed on the stack and copied from the incoming
16735      argument area.
16737  -- Built-in Function: void __builtin_return (void *RESULT)
16738      This built-in function returns the value described by RESULT from
16739      the containing function.  You should specify, for RESULT, a value
16740      returned by `__builtin_apply'.
16742  -- Built-in Function: __builtin_va_arg_pack ()
16743      This built-in function represents all anonymous arguments of an
16744      inline function.  It can be used only in inline functions which
16745      will be always inlined, never compiled as a separate function,
16746      such as those using `__attribute__ ((__always_inline__))' or
16747      `__attribute__ ((__gnu_inline__))' extern inline functions.  It
16748      must be only passed as last argument to some other function with
16749      variable arguments.  This is useful for writing small wrapper
16750      inlines for variable argument functions, when using preprocessor
16751      macros is undesirable.  For example:
16752           extern int myprintf (FILE *f, const char *format, ...);
16753           extern inline __attribute__ ((__gnu_inline__)) int
16754           myprintf (FILE *f, const char *format, ...)
16755           {
16756             int r = fprintf (f, "myprintf: ");
16757             if (r < 0)
16758               return r;
16759             int s = fprintf (f, format, __builtin_va_arg_pack ());
16760             if (s < 0)
16761               return s;
16762             return r + s;
16763           }
16765  -- Built-in Function: __builtin_va_arg_pack_len ()
16766      This built-in function returns the number of anonymous arguments of
16767      an inline function.  It can be used only in inline functions which
16768      will be always inlined, never compiled as a separate function, such
16769      as those using `__attribute__ ((__always_inline__))' or
16770      `__attribute__ ((__gnu_inline__))' extern inline functions.  For
16771      example following will do link or runtime checking of open
16772      arguments for optimized code:
16773           #ifdef __OPTIMIZE__
16774           extern inline __attribute__((__gnu_inline__)) int
16775           myopen (const char *path, int oflag, ...)
16776           {
16777             if (__builtin_va_arg_pack_len () > 1)
16778               warn_open_too_many_arguments ();
16780             if (__builtin_constant_p (oflag))
16781               {
16782                 if ((oflag & O_CREAT) != 0 && __builtin_va_arg_pack_len () < 1)
16783                   {
16784                     warn_open_missing_mode ();
16785                     return __open_2 (path, oflag);
16786                   }
16787                 return open (path, oflag, __builtin_va_arg_pack ());
16788               }
16790             if (__builtin_va_arg_pack_len () < 1)
16791               return __open_2 (path, oflag);
16793             return open (path, oflag, __builtin_va_arg_pack ());
16794           }
16795           #endif
16797 \x1f
16798 File: gcc.info,  Node: Typeof,  Next: Conditionals,  Prev: Constructing Calls,  Up: C Extensions
16800 5.6 Referring to a Type with `typeof'
16801 =====================================
16803 Another way to refer to the type of an expression is with `typeof'.
16804 The syntax of using of this keyword looks like `sizeof', but the
16805 construct acts semantically like a type name defined with `typedef'.
16807  There are two ways of writing the argument to `typeof': with an
16808 expression or with a type.  Here is an example with an expression:
16810      typeof (x[0](1))
16812 This assumes that `x' is an array of pointers to functions; the type
16813 described is that of the values of the functions.
16815  Here is an example with a typename as the argument:
16817      typeof (int *)
16819 Here the type described is that of pointers to `int'.
16821  If you are writing a header file that must work when included in ISO C
16822 programs, write `__typeof__' instead of `typeof'.  *Note Alternate
16823 Keywords::.
16825  A `typeof'-construct can be used anywhere a typedef name could be
16826 used.  For example, you can use it in a declaration, in a cast, or
16827 inside of `sizeof' or `typeof'.
16829  `typeof' is often useful in conjunction with the
16830 statements-within-expressions feature.  Here is how the two together can
16831 be used to define a safe "maximum" macro that operates on any
16832 arithmetic type and evaluates each of its arguments exactly once:
16834      #define max(a,b) \
16835        ({ typeof (a) _a = (a); \
16836            typeof (b) _b = (b); \
16837          _a > _b ? _a : _b; })
16839  The reason for using names that start with underscores for the local
16840 variables is to avoid conflicts with variable names that occur within
16841 the expressions that are substituted for `a' and `b'.  Eventually we
16842 hope to design a new form of declaration syntax that allows you to
16843 declare variables whose scopes start only after their initializers;
16844 this will be a more reliable way to prevent such conflicts.
16846 Some more examples of the use of `typeof':
16848    * This declares `y' with the type of what `x' points to.
16850           typeof (*x) y;
16852    * This declares `y' as an array of such values.
16854           typeof (*x) y[4];
16856    * This declares `y' as an array of pointers to characters:
16858           typeof (typeof (char *)[4]) y;
16860      It is equivalent to the following traditional C declaration:
16862           char *y[4];
16864      To see the meaning of the declaration using `typeof', and why it
16865      might be a useful way to write, rewrite it with these macros:
16867           #define pointer(T)  typeof(T *)
16868           #define array(T, N) typeof(T [N])
16870      Now the declaration can be rewritten this way:
16872           array (pointer (char), 4) y;
16874      Thus, `array (pointer (char), 4)' is the type of arrays of 4
16875      pointers to `char'.
16877  _Compatibility Note:_ In addition to `typeof', GCC 2 supported a more
16878 limited extension which permitted one to write
16880      typedef T = EXPR;
16882 with the effect of declaring T to have the type of the expression EXPR.
16883 This extension does not work with GCC 3 (versions between 3.0 and 3.2
16884 will crash; 3.2.1 and later give an error).  Code which relies on it
16885 should be rewritten to use `typeof':
16887      typedef typeof(EXPR) T;
16889 This will work with all versions of GCC.
16891 \x1f
16892 File: gcc.info,  Node: Conditionals,  Next: Long Long,  Prev: Typeof,  Up: C Extensions
16894 5.7 Conditionals with Omitted Operands
16895 ======================================
16897 The middle operand in a conditional expression may be omitted.  Then if
16898 the first operand is nonzero, its value is the value of the conditional
16899 expression.
16901  Therefore, the expression
16903      x ? : y
16905 has the value of `x' if that is nonzero; otherwise, the value of `y'.
16907  This example is perfectly equivalent to
16909      x ? x : y
16911 In this simple case, the ability to omit the middle operand is not
16912 especially useful.  When it becomes useful is when the first operand
16913 does, or may (if it is a macro argument), contain a side effect.  Then
16914 repeating the operand in the middle would perform the side effect
16915 twice.  Omitting the middle operand uses the value already computed
16916 without the undesirable effects of recomputing it.
16918 \x1f
16919 File: gcc.info,  Node: Long Long,  Next: Complex,  Prev: Conditionals,  Up: C Extensions
16921 5.8 Double-Word Integers
16922 ========================
16924 ISO C99 supports data types for integers that are at least 64 bits wide,
16925 and as an extension GCC supports them in C89 mode and in C++.  Simply
16926 write `long long int' for a signed integer, or `unsigned long long int'
16927 for an unsigned integer.  To make an integer constant of type `long
16928 long int', add the suffix `LL' to the integer.  To make an integer
16929 constant of type `unsigned long long int', add the suffix `ULL' to the
16930 integer.
16932  You can use these types in arithmetic like any other integer types.
16933 Addition, subtraction, and bitwise boolean operations on these types
16934 are open-coded on all types of machines.  Multiplication is open-coded
16935 if the machine supports fullword-to-doubleword a widening multiply
16936 instruction.  Division and shifts are open-coded only on machines that
16937 provide special support.  The operations that are not open-coded use
16938 special library routines that come with GCC.
16940  There may be pitfalls when you use `long long' types for function
16941 arguments, unless you declare function prototypes.  If a function
16942 expects type `int' for its argument, and you pass a value of type `long
16943 long int', confusion will result because the caller and the subroutine
16944 will disagree about the number of bytes for the argument.  Likewise, if
16945 the function expects `long long int' and you pass `int'.  The best way
16946 to avoid such problems is to use prototypes.
16948 \x1f
16949 File: gcc.info,  Node: Complex,  Next: Floating Types,  Prev: Long Long,  Up: C Extensions
16951 5.9 Complex Numbers
16952 ===================
16954 ISO C99 supports complex floating data types, and as an extension GCC
16955 supports them in C89 mode and in C++, and supports complex integer data
16956 types which are not part of ISO C99.  You can declare complex types
16957 using the keyword `_Complex'.  As an extension, the older GNU keyword
16958 `__complex__' is also supported.
16960  For example, `_Complex double x;' declares `x' as a variable whose
16961 real part and imaginary part are both of type `double'.  `_Complex
16962 short int y;' declares `y' to have real and imaginary parts of type
16963 `short int'; this is not likely to be useful, but it shows that the set
16964 of complex types is complete.
16966  To write a constant with a complex data type, use the suffix `i' or
16967 `j' (either one; they are equivalent).  For example, `2.5fi' has type
16968 `_Complex float' and `3i' has type `_Complex int'.  Such a constant
16969 always has a pure imaginary value, but you can form any complex value
16970 you like by adding one to a real constant.  This is a GNU extension; if
16971 you have an ISO C99 conforming C library (such as GNU libc), and want
16972 to construct complex constants of floating type, you should include
16973 `<complex.h>' and use the macros `I' or `_Complex_I' instead.
16975  To extract the real part of a complex-valued expression EXP, write
16976 `__real__ EXP'.  Likewise, use `__imag__' to extract the imaginary
16977 part.  This is a GNU extension; for values of floating type, you should
16978 use the ISO C99 functions `crealf', `creal', `creall', `cimagf',
16979 `cimag' and `cimagl', declared in `<complex.h>' and also provided as
16980 built-in functions by GCC.
16982  The operator `~' performs complex conjugation when used on a value
16983 with a complex type.  This is a GNU extension; for values of floating
16984 type, you should use the ISO C99 functions `conjf', `conj' and `conjl',
16985 declared in `<complex.h>' and also provided as built-in functions by
16986 GCC.
16988  GCC can allocate complex automatic variables in a noncontiguous
16989 fashion; it's even possible for the real part to be in a register while
16990 the imaginary part is on the stack (or vice-versa).  Only the DWARF2
16991 debug info format can represent this, so use of DWARF2 is recommended.
16992 If you are using the stabs debug info format, GCC describes a
16993 noncontiguous complex variable as if it were two separate variables of
16994 noncomplex type.  If the variable's actual name is `foo', the two
16995 fictitious variables are named `foo$real' and `foo$imag'.  You can
16996 examine and set these two fictitious variables with your debugger.
16998 \x1f
16999 File: gcc.info,  Node: Floating Types,  Next: Decimal Float,  Prev: Complex,  Up: C Extensions
17001 5.10 Additional Floating Types
17002 ==============================
17004 As an extension, the GNU C compiler supports additional floating types,
17005 `__float80' and `__float128' to support 80bit (`XFmode') and 128 bit
17006 (`TFmode') floating types.  Support for additional types includes the
17007 arithmetic operators: add, subtract, multiply, divide; unary arithmetic
17008 operators; relational operators; equality operators; and conversions to
17009 and from integer and other floating types.  Use a suffix `w' or `W' in
17010 a literal constant of type `__float80' and `q' or `Q' for `_float128'.
17011 You can declare complex types using the corresponding internal complex
17012 type, `XCmode' for `__float80' type and `TCmode' for `__float128' type:
17014      typedef _Complex float __attribute__((mode(TC))) _Complex128;
17015      typedef _Complex float __attribute__((mode(XC))) _Complex80;
17017  Not all targets support additional floating point types.  `__float80'
17018 is supported on i386, x86_64 and ia64 targets and target `__float128'
17019 is supported on x86_64 and ia64 targets.
17021 \x1f
17022 File: gcc.info,  Node: Decimal Float,  Next: Hex Floats,  Prev: Floating Types,  Up: C Extensions
17024 5.11 Decimal Floating Types
17025 ===========================
17027 As an extension, the GNU C compiler supports decimal floating types as
17028 defined in the N1312 draft of ISO/IEC WDTR24732.  Support for decimal
17029 floating types in GCC will evolve as the draft technical report changes.
17030 Calling conventions for any target might also change.  Not all targets
17031 support decimal floating types.
17033  The decimal floating types are `_Decimal32', `_Decimal64', and
17034 `_Decimal128'.  They use a radix of ten, unlike the floating types
17035 `float', `double', and `long double' whose radix is not specified by
17036 the C standard but is usually two.
17038  Support for decimal floating types includes the arithmetic operators
17039 add, subtract, multiply, divide; unary arithmetic operators; relational
17040 operators; equality operators; and conversions to and from integer and
17041 other floating types.  Use a suffix `df' or `DF' in a literal constant
17042 of type `_Decimal32', `dd' or `DD' for `_Decimal64', and `dl' or `DL'
17043 for `_Decimal128'.
17045  GCC support of decimal float as specified by the draft technical report
17046 is incomplete:
17048    * Pragma `FLOAT_CONST_DECIMAL64' is not supported, nor is the `d'
17049      suffix for literal constants of type `double'.
17051    * When the value of a decimal floating type cannot be represented in
17052      the integer type to which it is being converted, the result is
17053      undefined rather than the result value specified by the draft
17054      technical report.
17056    * GCC does not provide the C library functionality associated with
17057      `math.h', `fenv.h', `stdio.h', `stdlib.h', and `wchar.h', which
17058      must come from a separate C library implementation.  Because of
17059      this the GNU C compiler does not define macro `__STDC_DEC_FP__' to
17060      indicate that the implementation conforms to the technical report.
17062  Types `_Decimal32', `_Decimal64', and `_Decimal128' are supported by
17063 the DWARF2 debug information format.
17065 \x1f
17066 File: gcc.info,  Node: Hex Floats,  Next: Fixed-Point,  Prev: Decimal Float,  Up: C Extensions
17068 5.12 Hex Floats
17069 ===============
17071 ISO C99 supports floating-point numbers written not only in the usual
17072 decimal notation, such as `1.55e1', but also numbers such as `0x1.fp3'
17073 written in hexadecimal format.  As a GNU extension, GCC supports this
17074 in C89 mode (except in some cases when strictly conforming) and in C++.
17075 In that format the `0x' hex introducer and the `p' or `P' exponent
17076 field are mandatory.  The exponent is a decimal number that indicates
17077 the power of 2 by which the significant part will be multiplied.  Thus
17078 `0x1.f' is 1 15/16, `p3' multiplies it by 8, and the value of `0x1.fp3'
17079 is the same as `1.55e1'.
17081  Unlike for floating-point numbers in the decimal notation the exponent
17082 is always required in the hexadecimal notation.  Otherwise the compiler
17083 would not be able to resolve the ambiguity of, e.g., `0x1.f'.  This
17084 could mean `1.0f' or `1.9375' since `f' is also the extension for
17085 floating-point constants of type `float'.
17087 \x1f
17088 File: gcc.info,  Node: Fixed-Point,  Next: Zero Length,  Prev: Hex Floats,  Up: C Extensions
17090 5.13 Fixed-Point Types
17091 ======================
17093 As an extension, the GNU C compiler supports fixed-point types as
17094 defined in the N1169 draft of ISO/IEC DTR 18037.  Support for
17095 fixed-point types in GCC will evolve as the draft technical report
17096 changes.  Calling conventions for any target might also change.  Not
17097 all targets support fixed-point types.
17099  The fixed-point types are `short _Fract', `_Fract', `long _Fract',
17100 `long long _Fract', `unsigned short _Fract', `unsigned _Fract',
17101 `unsigned long _Fract', `unsigned long long _Fract', `_Sat short
17102 _Fract', `_Sat _Fract', `_Sat long _Fract', `_Sat long long _Fract',
17103 `_Sat unsigned short _Fract', `_Sat unsigned _Fract', `_Sat unsigned
17104 long _Fract', `_Sat unsigned long long _Fract', `short _Accum',
17105 `_Accum', `long _Accum', `long long _Accum', `unsigned short _Accum',
17106 `unsigned _Accum', `unsigned long _Accum', `unsigned long long _Accum',
17107 `_Sat short _Accum', `_Sat _Accum', `_Sat long _Accum', `_Sat long long
17108 _Accum', `_Sat unsigned short _Accum', `_Sat unsigned _Accum', `_Sat
17109 unsigned long _Accum', `_Sat unsigned long long _Accum'.
17111  Fixed-point data values contain fractional and optional integral parts.
17112 The format of fixed-point data varies and depends on the target machine.
17114  Support for fixed-point types includes:
17115    * prefix and postfix increment and decrement operators (`++', `--')
17117    * unary arithmetic operators (`+', `-', `!')
17119    * binary arithmetic operators (`+', `-', `*', `/')
17121    * binary shift operators (`<<', `>>')
17123    * relational operators (`<', `<=', `>=', `>')
17125    * equality operators (`==', `!=')
17127    * assignment operators (`+=', `-=', `*=', `/=', `<<=', `>>=')
17129    * conversions to and from integer, floating-point, or fixed-point
17130      types
17132  Use a suffix in a fixed-point literal constant:
17133    * `hr' or `HR' for `short _Fract' and `_Sat short _Fract'
17135    * `r' or `R' for `_Fract' and `_Sat _Fract'
17137    * `lr' or `LR' for `long _Fract' and `_Sat long _Fract'
17139    * `llr' or `LLR' for `long long _Fract' and `_Sat long long _Fract'
17141    * `uhr' or `UHR' for `unsigned short _Fract' and `_Sat unsigned
17142      short _Fract'
17144    * `ur' or `UR' for `unsigned _Fract' and `_Sat unsigned _Fract'
17146    * `ulr' or `ULR' for `unsigned long _Fract' and `_Sat unsigned long
17147      _Fract'
17149    * `ullr' or `ULLR' for `unsigned long long _Fract' and `_Sat
17150      unsigned long long _Fract'
17152    * `hk' or `HK' for `short _Accum' and `_Sat short _Accum'
17154    * `k' or `K' for `_Accum' and `_Sat _Accum'
17156    * `lk' or `LK' for `long _Accum' and `_Sat long _Accum'
17158    * `llk' or `LLK' for `long long _Accum' and `_Sat long long _Accum'
17160    * `uhk' or `UHK' for `unsigned short _Accum' and `_Sat unsigned
17161      short _Accum'
17163    * `uk' or `UK' for `unsigned _Accum' and `_Sat unsigned _Accum'
17165    * `ulk' or `ULK' for `unsigned long _Accum' and `_Sat unsigned long
17166      _Accum'
17168    * `ullk' or `ULLK' for `unsigned long long _Accum' and `_Sat
17169      unsigned long long _Accum'
17171  GCC support of fixed-point types as specified by the draft technical
17172 report is incomplete:
17174    * Pragmas to control overflow and rounding behaviors are not
17175      implemented.
17177  Fixed-point types are supported by the DWARF2 debug information format.
17179 \x1f
17180 File: gcc.info,  Node: Zero Length,  Next: Variable Length,  Prev: Fixed-Point,  Up: C Extensions
17182 5.14 Arrays of Length Zero
17183 ==========================
17185 Zero-length arrays are allowed in GNU C.  They are very useful as the
17186 last element of a structure which is really a header for a
17187 variable-length object:
17189      struct line {
17190        int length;
17191        char contents[0];
17192      };
17194      struct line *thisline = (struct line *)
17195        malloc (sizeof (struct line) + this_length);
17196      thisline->length = this_length;
17198  In ISO C90, you would have to give `contents' a length of 1, which
17199 means either you waste space or complicate the argument to `malloc'.
17201  In ISO C99, you would use a "flexible array member", which is slightly
17202 different in syntax and semantics:
17204    * Flexible array members are written as `contents[]' without the `0'.
17206    * Flexible array members have incomplete type, and so the `sizeof'
17207      operator may not be applied.  As a quirk of the original
17208      implementation of zero-length arrays, `sizeof' evaluates to zero.
17210    * Flexible array members may only appear as the last member of a
17211      `struct' that is otherwise non-empty.
17213    * A structure containing a flexible array member, or a union
17214      containing such a structure (possibly recursively), may not be a
17215      member of a structure or an element of an array.  (However, these
17216      uses are permitted by GCC as extensions.)
17218  GCC versions before 3.0 allowed zero-length arrays to be statically
17219 initialized, as if they were flexible arrays.  In addition to those
17220 cases that were useful, it also allowed initializations in situations
17221 that would corrupt later data.  Non-empty initialization of zero-length
17222 arrays is now treated like any case where there are more initializer
17223 elements than the array holds, in that a suitable warning about "excess
17224 elements in array" is given, and the excess elements (all of them, in
17225 this case) are ignored.
17227  Instead GCC allows static initialization of flexible array members.
17228 This is equivalent to defining a new structure containing the original
17229 structure followed by an array of sufficient size to contain the data.
17230 I.e. in the following, `f1' is constructed as if it were declared like
17231 `f2'.
17233      struct f1 {
17234        int x; int y[];
17235      } f1 = { 1, { 2, 3, 4 } };
17237      struct f2 {
17238        struct f1 f1; int data[3];
17239      } f2 = { { 1 }, { 2, 3, 4 } };
17241 The convenience of this extension is that `f1' has the desired type,
17242 eliminating the need to consistently refer to `f2.f1'.
17244  This has symmetry with normal static arrays, in that an array of
17245 unknown size is also written with `[]'.
17247  Of course, this extension only makes sense if the extra data comes at
17248 the end of a top-level object, as otherwise we would be overwriting
17249 data at subsequent offsets.  To avoid undue complication and confusion
17250 with initialization of deeply nested arrays, we simply disallow any
17251 non-empty initialization except when the structure is the top-level
17252 object.  For example:
17254      struct foo { int x; int y[]; };
17255      struct bar { struct foo z; };
17257      struct foo a = { 1, { 2, 3, 4 } };        // Valid.
17258      struct bar b = { { 1, { 2, 3, 4 } } };    // Invalid.
17259      struct bar c = { { 1, { } } };            // Valid.
17260      struct foo d[1] = { { 1 { 2, 3, 4 } } };  // Invalid.
17262 \x1f
17263 File: gcc.info,  Node: Empty Structures,  Next: Variadic Macros,  Prev: Variable Length,  Up: C Extensions
17265 5.15 Structures With No Members
17266 ===============================
17268 GCC permits a C structure to have no members:
17270      struct empty {
17271      };
17273  The structure will have size zero.  In C++, empty structures are part
17274 of the language.  G++ treats empty structures as if they had a single
17275 member of type `char'.
17277 \x1f
17278 File: gcc.info,  Node: Variable Length,  Next: Empty Structures,  Prev: Zero Length,  Up: C Extensions
17280 5.16 Arrays of Variable Length
17281 ==============================
17283 Variable-length automatic arrays are allowed in ISO C99, and as an
17284 extension GCC accepts them in C89 mode and in C++.  (However, GCC's
17285 implementation of variable-length arrays does not yet conform in detail
17286 to the ISO C99 standard.)  These arrays are declared like any other
17287 automatic arrays, but with a length that is not a constant expression.
17288 The storage is allocated at the point of declaration and deallocated
17289 when the brace-level is exited.  For example:
17291      FILE *
17292      concat_fopen (char *s1, char *s2, char *mode)
17293      {
17294        char str[strlen (s1) + strlen (s2) + 1];
17295        strcpy (str, s1);
17296        strcat (str, s2);
17297        return fopen (str, mode);
17298      }
17300  Jumping or breaking out of the scope of the array name deallocates the
17301 storage.  Jumping into the scope is not allowed; you get an error
17302 message for it.
17304  You can use the function `alloca' to get an effect much like
17305 variable-length arrays.  The function `alloca' is available in many
17306 other C implementations (but not in all).  On the other hand,
17307 variable-length arrays are more elegant.
17309  There are other differences between these two methods.  Space allocated
17310 with `alloca' exists until the containing _function_ returns.  The
17311 space for a variable-length array is deallocated as soon as the array
17312 name's scope ends.  (If you use both variable-length arrays and
17313 `alloca' in the same function, deallocation of a variable-length array
17314 will also deallocate anything more recently allocated with `alloca'.)
17316  You can also use variable-length arrays as arguments to functions:
17318      struct entry
17319      tester (int len, char data[len][len])
17320      {
17321        /* ... */
17322      }
17324  The length of an array is computed once when the storage is allocated
17325 and is remembered for the scope of the array in case you access it with
17326 `sizeof'.
17328  If you want to pass the array first and the length afterward, you can
17329 use a forward declaration in the parameter list--another GNU extension.
17331      struct entry
17332      tester (int len; char data[len][len], int len)
17333      {
17334        /* ... */
17335      }
17337  The `int len' before the semicolon is a "parameter forward
17338 declaration", and it serves the purpose of making the name `len' known
17339 when the declaration of `data' is parsed.
17341  You can write any number of such parameter forward declarations in the
17342 parameter list.  They can be separated by commas or semicolons, but the
17343 last one must end with a semicolon, which is followed by the "real"
17344 parameter declarations.  Each forward declaration must match a "real"
17345 declaration in parameter name and data type.  ISO C99 does not support
17346 parameter forward declarations.
17348 \x1f
17349 File: gcc.info,  Node: Variadic Macros,  Next: Escaped Newlines,  Prev: Empty Structures,  Up: C Extensions
17351 5.17 Macros with a Variable Number of Arguments.
17352 ================================================
17354 In the ISO C standard of 1999, a macro can be declared to accept a
17355 variable number of arguments much as a function can.  The syntax for
17356 defining the macro is similar to that of a function.  Here is an
17357 example:
17359      #define debug(format, ...) fprintf (stderr, format, __VA_ARGS__)
17361  Here `...' is a "variable argument".  In the invocation of such a
17362 macro, it represents the zero or more tokens until the closing
17363 parenthesis that ends the invocation, including any commas.  This set of
17364 tokens replaces the identifier `__VA_ARGS__' in the macro body wherever
17365 it appears.  See the CPP manual for more information.
17367  GCC has long supported variadic macros, and used a different syntax
17368 that allowed you to give a name to the variable arguments just like any
17369 other argument.  Here is an example:
17371      #define debug(format, args...) fprintf (stderr, format, args)
17373  This is in all ways equivalent to the ISO C example above, but arguably
17374 more readable and descriptive.
17376  GNU CPP has two further variadic macro extensions, and permits them to
17377 be used with either of the above forms of macro definition.
17379  In standard C, you are not allowed to leave the variable argument out
17380 entirely; but you are allowed to pass an empty argument.  For example,
17381 this invocation is invalid in ISO C, because there is no comma after
17382 the string:
17384      debug ("A message")
17386  GNU CPP permits you to completely omit the variable arguments in this
17387 way.  In the above examples, the compiler would complain, though since
17388 the expansion of the macro still has the extra comma after the format
17389 string.
17391  To help solve this problem, CPP behaves specially for variable
17392 arguments used with the token paste operator, `##'.  If instead you
17393 write
17395      #define debug(format, ...) fprintf (stderr, format, ## __VA_ARGS__)
17397  and if the variable arguments are omitted or empty, the `##' operator
17398 causes the preprocessor to remove the comma before it.  If you do
17399 provide some variable arguments in your macro invocation, GNU CPP does
17400 not complain about the paste operation and instead places the variable
17401 arguments after the comma.  Just like any other pasted macro argument,
17402 these arguments are not macro expanded.
17404 \x1f
17405 File: gcc.info,  Node: Escaped Newlines,  Next: Subscripting,  Prev: Variadic Macros,  Up: C Extensions
17407 5.18 Slightly Looser Rules for Escaped Newlines
17408 ===============================================
17410 Recently, the preprocessor has relaxed its treatment of escaped
17411 newlines.  Previously, the newline had to immediately follow a
17412 backslash.  The current implementation allows whitespace in the form of
17413 spaces, horizontal and vertical tabs, and form feeds between the
17414 backslash and the subsequent newline.  The preprocessor issues a
17415 warning, but treats it as a valid escaped newline and combines the two
17416 lines to form a single logical line.  This works within comments and
17417 tokens, as well as between tokens.  Comments are _not_ treated as
17418 whitespace for the purposes of this relaxation, since they have not yet
17419 been replaced with spaces.
17421 \x1f
17422 File: gcc.info,  Node: Subscripting,  Next: Pointer Arith,  Prev: Escaped Newlines,  Up: C Extensions
17424 5.19 Non-Lvalue Arrays May Have Subscripts
17425 ==========================================
17427 In ISO C99, arrays that are not lvalues still decay to pointers, and
17428 may be subscripted, although they may not be modified or used after the
17429 next sequence point and the unary `&' operator may not be applied to
17430 them.  As an extension, GCC allows such arrays to be subscripted in C89
17431 mode, though otherwise they do not decay to pointers outside C99 mode.
17432 For example, this is valid in GNU C though not valid in C89:
17434      struct foo {int a[4];};
17436      struct foo f();
17438      bar (int index)
17439      {
17440        return f().a[index];
17441      }
17443 \x1f
17444 File: gcc.info,  Node: Pointer Arith,  Next: Initializers,  Prev: Subscripting,  Up: C Extensions
17446 5.20 Arithmetic on `void'- and Function-Pointers
17447 ================================================
17449 In GNU C, addition and subtraction operations are supported on pointers
17450 to `void' and on pointers to functions.  This is done by treating the
17451 size of a `void' or of a function as 1.
17453  A consequence of this is that `sizeof' is also allowed on `void' and
17454 on function types, and returns 1.
17456  The option `-Wpointer-arith' requests a warning if these extensions
17457 are used.
17459 \x1f
17460 File: gcc.info,  Node: Initializers,  Next: Compound Literals,  Prev: Pointer Arith,  Up: C Extensions
17462 5.21 Non-Constant Initializers
17463 ==============================
17465 As in standard C++ and ISO C99, the elements of an aggregate
17466 initializer for an automatic variable are not required to be constant
17467 expressions in GNU C.  Here is an example of an initializer with
17468 run-time varying elements:
17470      foo (float f, float g)
17471      {
17472        float beat_freqs[2] = { f-g, f+g };
17473        /* ... */
17474      }
17476 \x1f
17477 File: gcc.info,  Node: Compound Literals,  Next: Designated Inits,  Prev: Initializers,  Up: C Extensions
17479 5.22 Compound Literals
17480 ======================
17482 ISO C99 supports compound literals.  A compound literal looks like a
17483 cast containing an initializer.  Its value is an object of the type
17484 specified in the cast, containing the elements specified in the
17485 initializer; it is an lvalue.  As an extension, GCC supports compound
17486 literals in C89 mode and in C++.
17488  Usually, the specified type is a structure.  Assume that `struct foo'
17489 and `structure' are declared as shown:
17491      struct foo {int a; char b[2];} structure;
17493 Here is an example of constructing a `struct foo' with a compound
17494 literal:
17496      structure = ((struct foo) {x + y, 'a', 0});
17498 This is equivalent to writing the following:
17500      {
17501        struct foo temp = {x + y, 'a', 0};
17502        structure = temp;
17503      }
17505  You can also construct an array.  If all the elements of the compound
17506 literal are (made up of) simple constant expressions, suitable for use
17507 in initializers of objects of static storage duration, then the compound
17508 literal can be coerced to a pointer to its first element and used in
17509 such an initializer, as shown here:
17511      char **foo = (char *[]) { "x", "y", "z" };
17513  Compound literals for scalar types and union types are is also
17514 allowed, but then the compound literal is equivalent to a cast.
17516  As a GNU extension, GCC allows initialization of objects with static
17517 storage duration by compound literals (which is not possible in ISO
17518 C99, because the initializer is not a constant).  It is handled as if
17519 the object was initialized only with the bracket enclosed list if the
17520 types of the compound literal and the object match.  The initializer
17521 list of the compound literal must be constant.  If the object being
17522 initialized has array type of unknown size, the size is determined by
17523 compound literal size.
17525      static struct foo x = (struct foo) {1, 'a', 'b'};
17526      static int y[] = (int []) {1, 2, 3};
17527      static int z[] = (int [3]) {1};
17529 The above lines are equivalent to the following:
17530      static struct foo x = {1, 'a', 'b'};
17531      static int y[] = {1, 2, 3};
17532      static int z[] = {1, 0, 0};
17534 \x1f
17535 File: gcc.info,  Node: Designated Inits,  Next: Cast to Union,  Prev: Compound Literals,  Up: C Extensions
17537 5.23 Designated Initializers
17538 ============================
17540 Standard C89 requires the elements of an initializer to appear in a
17541 fixed order, the same as the order of the elements in the array or
17542 structure being initialized.
17544  In ISO C99 you can give the elements in any order, specifying the array
17545 indices or structure field names they apply to, and GNU C allows this as
17546 an extension in C89 mode as well.  This extension is not implemented in
17547 GNU C++.
17549  To specify an array index, write `[INDEX] =' before the element value.
17550 For example,
17552      int a[6] = { [4] = 29, [2] = 15 };
17554 is equivalent to
17556      int a[6] = { 0, 0, 15, 0, 29, 0 };
17558 The index values must be constant expressions, even if the array being
17559 initialized is automatic.
17561  An alternative syntax for this which has been obsolete since GCC 2.5
17562 but GCC still accepts is to write `[INDEX]' before the element value,
17563 with no `='.
17565  To initialize a range of elements to the same value, write `[FIRST ...
17566 LAST] = VALUE'.  This is a GNU extension.  For example,
17568      int widths[] = { [0 ... 9] = 1, [10 ... 99] = 2, [100] = 3 };
17570 If the value in it has side-effects, the side-effects will happen only
17571 once, not for each initialized field by the range initializer.
17573 Note that the length of the array is the highest value specified plus
17574 one.
17576  In a structure initializer, specify the name of a field to initialize
17577 with `.FIELDNAME =' before the element value.  For example, given the
17578 following structure,
17580      struct point { int x, y; };
17582 the following initialization
17584      struct point p = { .y = yvalue, .x = xvalue };
17586 is equivalent to
17588      struct point p = { xvalue, yvalue };
17590  Another syntax which has the same meaning, obsolete since GCC 2.5, is
17591 `FIELDNAME:', as shown here:
17593      struct point p = { y: yvalue, x: xvalue };
17595  The `[INDEX]' or `.FIELDNAME' is known as a "designator".  You can
17596 also use a designator (or the obsolete colon syntax) when initializing
17597 a union, to specify which element of the union should be used.  For
17598 example,
17600      union foo { int i; double d; };
17602      union foo f = { .d = 4 };
17604 will convert 4 to a `double' to store it in the union using the second
17605 element.  By contrast, casting 4 to type `union foo' would store it
17606 into the union as the integer `i', since it is an integer.  (*Note Cast
17607 to Union::.)
17609  You can combine this technique of naming elements with ordinary C
17610 initialization of successive elements.  Each initializer element that
17611 does not have a designator applies to the next consecutive element of
17612 the array or structure.  For example,
17614      int a[6] = { [1] = v1, v2, [4] = v4 };
17616 is equivalent to
17618      int a[6] = { 0, v1, v2, 0, v4, 0 };
17620  Labeling the elements of an array initializer is especially useful
17621 when the indices are characters or belong to an `enum' type.  For
17622 example:
17624      int whitespace[256]
17625        = { [' '] = 1, ['\t'] = 1, ['\h'] = 1,
17626            ['\f'] = 1, ['\n'] = 1, ['\r'] = 1 };
17628  You can also write a series of `.FIELDNAME' and `[INDEX]' designators
17629 before an `=' to specify a nested subobject to initialize; the list is
17630 taken relative to the subobject corresponding to the closest
17631 surrounding brace pair.  For example, with the `struct point'
17632 declaration above:
17634      struct point ptarray[10] = { [2].y = yv2, [2].x = xv2, [0].x = xv0 };
17636 If the same field is initialized multiple times, it will have value from
17637 the last initialization.  If any such overridden initialization has
17638 side-effect, it is unspecified whether the side-effect happens or not.
17639 Currently, GCC will discard them and issue a warning.
17641 \x1f
17642 File: gcc.info,  Node: Case Ranges,  Next: Mixed Declarations,  Prev: Cast to Union,  Up: C Extensions
17644 5.24 Case Ranges
17645 ================
17647 You can specify a range of consecutive values in a single `case' label,
17648 like this:
17650      case LOW ... HIGH:
17652 This has the same effect as the proper number of individual `case'
17653 labels, one for each integer value from LOW to HIGH, inclusive.
17655  This feature is especially useful for ranges of ASCII character codes:
17657      case 'A' ... 'Z':
17659  *Be careful:* Write spaces around the `...', for otherwise it may be
17660 parsed wrong when you use it with integer values.  For example, write
17661 this:
17663      case 1 ... 5:
17665 rather than this:
17667      case 1...5:
17669 \x1f
17670 File: gcc.info,  Node: Cast to Union,  Next: Case Ranges,  Prev: Designated Inits,  Up: C Extensions
17672 5.25 Cast to a Union Type
17673 =========================
17675 A cast to union type is similar to other casts, except that the type
17676 specified is a union type.  You can specify the type either with `union
17677 TAG' or with a typedef name.  A cast to union is actually a constructor
17678 though, not a cast, and hence does not yield an lvalue like normal
17679 casts.  (*Note Compound Literals::.)
17681  The types that may be cast to the union type are those of the members
17682 of the union.  Thus, given the following union and variables:
17684      union foo { int i; double d; };
17685      int x;
17686      double y;
17688 both `x' and `y' can be cast to type `union foo'.
17690  Using the cast as the right-hand side of an assignment to a variable of
17691 union type is equivalent to storing in a member of the union:
17693      union foo u;
17694      /* ... */
17695      u = (union foo) x  ==  u.i = x
17696      u = (union foo) y  ==  u.d = y
17698  You can also use the union cast as a function argument:
17700      void hack (union foo);
17701      /* ... */
17702      hack ((union foo) x);
17704 \x1f
17705 File: gcc.info,  Node: Mixed Declarations,  Next: Function Attributes,  Prev: Case Ranges,  Up: C Extensions
17707 5.26 Mixed Declarations and Code
17708 ================================
17710 ISO C99 and ISO C++ allow declarations and code to be freely mixed
17711 within compound statements.  As an extension, GCC also allows this in
17712 C89 mode.  For example, you could do:
17714      int i;
17715      /* ... */
17716      i++;
17717      int j = i + 2;
17719  Each identifier is visible from where it is declared until the end of
17720 the enclosing block.
17722 \x1f
17723 File: gcc.info,  Node: Function Attributes,  Next: Attribute Syntax,  Prev: Mixed Declarations,  Up: C Extensions
17725 5.27 Declaring Attributes of Functions
17726 ======================================
17728 In GNU C, you declare certain things about functions called in your
17729 program which help the compiler optimize function calls and check your
17730 code more carefully.
17732  The keyword `__attribute__' allows you to specify special attributes
17733 when making a declaration.  This keyword is followed by an attribute
17734 specification inside double parentheses.  The following attributes are
17735 currently defined for functions on all targets: `aligned',
17736 `alloc_size', `noreturn', `returns_twice', `noinline', `always_inline',
17737 `flatten', `pure', `const', `nothrow', `sentinel', `format',
17738 `format_arg', `no_instrument_function', `section', `constructor',
17739 `destructor', `used', `unused', `deprecated', `weak', `malloc',
17740 `alias', `warn_unused_result', `nonnull', `gnu_inline',
17741 `externally_visible', `hot', `cold', `artificial', `error' and
17742 `warning'.  Several other attributes are defined for functions on
17743 particular target systems.  Other attributes, including `section' are
17744 supported for variables declarations (*note Variable Attributes::) and
17745 for types (*note Type Attributes::).
17747  You may also specify attributes with `__' preceding and following each
17748 keyword.  This allows you to use them in header files without being
17749 concerned about a possible macro of the same name.  For example, you
17750 may use `__noreturn__' instead of `noreturn'.
17752  *Note Attribute Syntax::, for details of the exact syntax for using
17753 attributes.
17755 `alias ("TARGET")'
17756      The `alias' attribute causes the declaration to be emitted as an
17757      alias for another symbol, which must be specified.  For instance,
17759           void __f () { /* Do something. */; }
17760           void f () __attribute__ ((weak, alias ("__f")));
17762      defines `f' to be a weak alias for `__f'.  In C++, the mangled
17763      name for the target must be used.  It is an error if `__f' is not
17764      defined in the same translation unit.
17766      Not all target machines support this attribute.
17768 `aligned (ALIGNMENT)'
17769      This attribute specifies a minimum alignment for the function,
17770      measured in bytes.
17772      You cannot use this attribute to decrease the alignment of a
17773      function, only to increase it.  However, when you explicitly
17774      specify a function alignment this will override the effect of the
17775      `-falign-functions' (*note Optimize Options::) option for this
17776      function.
17778      Note that the effectiveness of `aligned' attributes may be limited
17779      by inherent limitations in your linker.  On many systems, the
17780      linker is only able to arrange for functions to be aligned up to a
17781      certain maximum alignment.  (For some linkers, the maximum
17782      supported alignment may be very very small.)  See your linker
17783      documentation for further information.
17785      The `aligned' attribute can also be used for variables and fields
17786      (*note Variable Attributes::.)
17788 `alloc_size'
17789      The `alloc_size' attribute is used to tell the compiler that the
17790      function return value points to memory, where the size is given by
17791      one or two of the functions parameters.  GCC uses this information
17792      to improve the correctness of `__builtin_object_size'.
17794      The function parameter(s) denoting the allocated size are
17795      specified by one or two integer arguments supplied to the
17796      attribute.  The allocated size is either the value of the single
17797      function argument specified or the product of the two function
17798      arguments specified.  Argument numbering starts at one.
17800      For instance,
17802           void* my_calloc(size_t, size_t) __attribute__((alloc_size(1,2)))
17803           void my_realloc(void*, size_t) __attribute__((alloc_size(2)))
17805      declares that my_calloc will return memory of the size given by
17806      the product of parameter 1 and 2 and that my_realloc will return
17807      memory of the size given by parameter 2.
17809 `always_inline'
17810      Generally, functions are not inlined unless optimization is
17811      specified.  For functions declared inline, this attribute inlines
17812      the function even if no optimization level was specified.
17814 `gnu_inline'
17815      This attribute should be used with a function which is also
17816      declared with the `inline' keyword.  It directs GCC to treat the
17817      function as if it were defined in gnu89 mode even when compiling
17818      in C99 or gnu99 mode.
17820      If the function is declared `extern', then this definition of the
17821      function is used only for inlining.  In no case is the function
17822      compiled as a standalone function, not even if you take its address
17823      explicitly.  Such an address becomes an external reference, as if
17824      you had only declared the function, and had not defined it.  This
17825      has almost the effect of a macro.  The way to use this is to put a
17826      function definition in a header file with this attribute, and put
17827      another copy of the function, without `extern', in a library file.
17828      The definition in the header file will cause most calls to the
17829      function to be inlined.  If any uses of the function remain, they
17830      will refer to the single copy in the library.  Note that the two
17831      definitions of the functions need not be precisely the same,
17832      although if they do not have the same effect your program may
17833      behave oddly.
17835      In C, if the function is neither `extern' nor `static', then the
17836      function is compiled as a standalone function, as well as being
17837      inlined where possible.
17839      This is how GCC traditionally handled functions declared `inline'.
17840      Since ISO C99 specifies a different semantics for `inline', this
17841      function attribute is provided as a transition measure and as a
17842      useful feature in its own right.  This attribute is available in
17843      GCC 4.1.3 and later.  It is available if either of the
17844      preprocessor macros `__GNUC_GNU_INLINE__' or
17845      `__GNUC_STDC_INLINE__' are defined.  *Note An Inline Function is
17846      As Fast As a Macro: Inline.
17848      In C++, this attribute does not depend on `extern' in any way, but
17849      it still requires the `inline' keyword to enable its special
17850      behavior.
17852 `artificial'
17853      This attribute is useful for small inline wrappers which if
17854      possible should appear during debugging as a unit, depending on
17855      the debug info format it will either mean marking the function as
17856      artificial or using the caller location for all instructions
17857      within the inlined body.
17859 `flatten'
17860      Generally, inlining into a function is limited.  For a function
17861      marked with this attribute, every call inside this function will
17862      be inlined, if possible.  Whether the function itself is
17863      considered for inlining depends on its size and the current
17864      inlining parameters.
17866 `error ("MESSAGE")'
17867      If this attribute is used on a function declaration and a call to
17868      such a function is not eliminated through dead code elimination or
17869      other optimizations, an error which will include MESSAGE will be
17870      diagnosed.  This is useful for compile time checking, especially
17871      together with `__builtin_constant_p' and inline functions where
17872      checking the inline function arguments is not possible through
17873      `extern char [(condition) ? 1 : -1];' tricks.  While it is
17874      possible to leave the function undefined and thus invoke a link
17875      failure, when using this attribute the problem will be diagnosed
17876      earlier and with exact location of the call even in presence of
17877      inline functions or when not emitting debugging information.
17879 `warning ("MESSAGE")'
17880      If this attribute is used on a function declaration and a call to
17881      such a function is not eliminated through dead code elimination or
17882      other optimizations, a warning which will include MESSAGE will be
17883      diagnosed.  This is useful for compile time checking, especially
17884      together with `__builtin_constant_p' and inline functions.  While
17885      it is possible to define the function with a message in
17886      `.gnu.warning*' section, when using this attribute the problem
17887      will be diagnosed earlier and with exact location of the call even
17888      in presence of inline functions or when not emitting debugging
17889      information.
17891 `cdecl'
17892      On the Intel 386, the `cdecl' attribute causes the compiler to
17893      assume that the calling function will pop off the stack space used
17894      to pass arguments.  This is useful to override the effects of the
17895      `-mrtd' switch.
17897 `const'
17898      Many functions do not examine any values except their arguments,
17899      and have no effects except the return value.  Basically this is
17900      just slightly more strict class than the `pure' attribute below,
17901      since function is not allowed to read global memory.
17903      Note that a function that has pointer arguments and examines the
17904      data pointed to must _not_ be declared `const'.  Likewise, a
17905      function that calls a non-`const' function usually must not be
17906      `const'.  It does not make sense for a `const' function to return
17907      `void'.
17909      The attribute `const' is not implemented in GCC versions earlier
17910      than 2.5.  An alternative way to declare that a function has no
17911      side effects, which works in the current version and in some older
17912      versions, is as follows:
17914           typedef int intfn ();
17916           extern const intfn square;
17918      This approach does not work in GNU C++ from 2.6.0 on, since the
17919      language specifies that the `const' must be attached to the return
17920      value.
17922 `constructor'
17923 `destructor'
17924 `constructor (PRIORITY)'
17925 `destructor (PRIORITY)'
17926      The `constructor' attribute causes the function to be called
17927      automatically before execution enters `main ()'.  Similarly, the
17928      `destructor' attribute causes the function to be called
17929      automatically after `main ()' has completed or `exit ()' has been
17930      called.  Functions with these attributes are useful for
17931      initializing data that will be used implicitly during the
17932      execution of the program.
17934      You may provide an optional integer priority to control the order
17935      in which constructor and destructor functions are run.  A
17936      constructor with a smaller priority number runs before a
17937      constructor with a larger priority number; the opposite
17938      relationship holds for destructors.  So, if you have a constructor
17939      that allocates a resource and a destructor that deallocates the
17940      same resource, both functions typically have the same priority.
17941      The priorities for constructor and destructor functions are the
17942      same as those specified for namespace-scope C++ objects (*note C++
17943      Attributes::).
17945      These attributes are not currently implemented for Objective-C.
17947 `deprecated'
17948      The `deprecated' attribute results in a warning if the function is
17949      used anywhere in the source file.  This is useful when identifying
17950      functions that are expected to be removed in a future version of a
17951      program.  The warning also includes the location of the declaration
17952      of the deprecated function, to enable users to easily find further
17953      information about why the function is deprecated, or what they
17954      should do instead.  Note that the warnings only occurs for uses:
17956           int old_fn () __attribute__ ((deprecated));
17957           int old_fn ();
17958           int (*fn_ptr)() = old_fn;
17960      results in a warning on line 3 but not line 2.
17962      The `deprecated' attribute can also be used for variables and
17963      types (*note Variable Attributes::, *note Type Attributes::.)
17965 `dllexport'
17966      On Microsoft Windows targets and Symbian OS targets the
17967      `dllexport' attribute causes the compiler to provide a global
17968      pointer to a pointer in a DLL, so that it can be referenced with
17969      the `dllimport' attribute.  On Microsoft Windows targets, the
17970      pointer name is formed by combining `_imp__' and the function or
17971      variable name.
17973      You can use `__declspec(dllexport)' as a synonym for
17974      `__attribute__ ((dllexport))' for compatibility with other
17975      compilers.
17977      On systems that support the `visibility' attribute, this attribute
17978      also implies "default" visibility.  It is an error to explicitly
17979      specify any other visibility.
17981      Currently, the `dllexport' attribute is ignored for inlined
17982      functions, unless the `-fkeep-inline-functions' flag has been
17983      used.  The attribute is also ignored for undefined symbols.
17985      When applied to C++ classes, the attribute marks defined
17986      non-inlined member functions and static data members as exports.
17987      Static consts initialized in-class are not marked unless they are
17988      also defined out-of-class.
17990      For Microsoft Windows targets there are alternative methods for
17991      including the symbol in the DLL's export table such as using a
17992      `.def' file with an `EXPORTS' section or, with GNU ld, using the
17993      `--export-all' linker flag.
17995 `dllimport'
17996      On Microsoft Windows and Symbian OS targets, the `dllimport'
17997      attribute causes the compiler to reference a function or variable
17998      via a global pointer to a pointer that is set up by the DLL
17999      exporting the symbol.  The attribute implies `extern'.  On
18000      Microsoft Windows targets, the pointer name is formed by combining
18001      `_imp__' and the function or variable name.
18003      You can use `__declspec(dllimport)' as a synonym for
18004      `__attribute__ ((dllimport))' for compatibility with other
18005      compilers.
18007      On systems that support the `visibility' attribute, this attribute
18008      also implies "default" visibility.  It is an error to explicitly
18009      specify any other visibility.
18011      Currently, the attribute is ignored for inlined functions.  If the
18012      attribute is applied to a symbol _definition_, an error is
18013      reported.  If a symbol previously declared `dllimport' is later
18014      defined, the attribute is ignored in subsequent references, and a
18015      warning is emitted.  The attribute is also overridden by a
18016      subsequent declaration as `dllexport'.
18018      When applied to C++ classes, the attribute marks non-inlined
18019      member functions and static data members as imports.  However, the
18020      attribute is ignored for virtual methods to allow creation of
18021      vtables using thunks.
18023      On the SH Symbian OS target the `dllimport' attribute also has
18024      another affect--it can cause the vtable and run-time type
18025      information for a class to be exported.  This happens when the
18026      class has a dllimport'ed constructor or a non-inline, non-pure
18027      virtual function and, for either of those two conditions, the
18028      class also has a inline constructor or destructor and has a key
18029      function that is defined in the current translation unit.
18031      For Microsoft Windows based targets the use of the `dllimport'
18032      attribute on functions is not necessary, but provides a small
18033      performance benefit by eliminating a thunk in the DLL.  The use of
18034      the `dllimport' attribute on imported variables was required on
18035      older versions of the GNU linker, but can now be avoided by
18036      passing the `--enable-auto-import' switch to the GNU linker.  As
18037      with functions, using the attribute for a variable eliminates a
18038      thunk in the DLL.
18040      One drawback to using this attribute is that a pointer to a
18041      _variable_ marked as `dllimport' cannot be used as a constant
18042      address. However, a pointer to a _function_ with the `dllimport'
18043      attribute can be used as a constant initializer; in this case, the
18044      address of a stub function in the import lib is referenced.  On
18045      Microsoft Windows targets, the attribute can be disabled for
18046      functions by setting the `-mnop-fun-dllimport' flag.
18048 `eightbit_data'
18049      Use this attribute on the H8/300, H8/300H, and H8S to indicate
18050      that the specified variable should be placed into the eight bit
18051      data section.  The compiler will generate more efficient code for
18052      certain operations on data in the eight bit data area.  Note the
18053      eight bit data area is limited to 256 bytes of data.
18055      You must use GAS and GLD from GNU binutils version 2.7 or later for
18056      this attribute to work correctly.
18058 `exception_handler'
18059      Use this attribute on the Blackfin to indicate that the specified
18060      function is an exception handler.  The compiler will generate
18061      function entry and exit sequences suitable for use in an exception
18062      handler when this attribute is present.
18064 `externally_visible'
18065      This attribute, attached to a global variable or function,
18066      nullifies the effect of the `-fwhole-program' command-line option,
18067      so the object remains visible outside the current compilation unit.
18069 `far'
18070      On 68HC11 and 68HC12 the `far' attribute causes the compiler to
18071      use a calling convention that takes care of switching memory banks
18072      when entering and leaving a function.  This calling convention is
18073      also the default when using the `-mlong-calls' option.
18075      On 68HC12 the compiler will use the `call' and `rtc' instructions
18076      to call and return from a function.
18078      On 68HC11 the compiler will generate a sequence of instructions to
18079      invoke a board-specific routine to switch the memory bank and call
18080      the real function.  The board-specific routine simulates a `call'.
18081      At the end of a function, it will jump to a board-specific routine
18082      instead of using `rts'.  The board-specific return routine
18083      simulates the `rtc'.
18085 `fastcall'
18086      On the Intel 386, the `fastcall' attribute causes the compiler to
18087      pass the first argument (if of integral type) in the register ECX
18088      and the second argument (if of integral type) in the register EDX.
18089      Subsequent and other typed arguments are passed on the stack.
18090      The called function will pop the arguments off the stack.  If the
18091      number of arguments is variable all arguments are pushed on the
18092      stack.
18094 `format (ARCHETYPE, STRING-INDEX, FIRST-TO-CHECK)'
18095      The `format' attribute specifies that a function takes `printf',
18096      `scanf', `strftime' or `strfmon' style arguments which should be
18097      type-checked against a format string.  For example, the
18098      declaration:
18100           extern int
18101           my_printf (void *my_object, const char *my_format, ...)
18102                 __attribute__ ((format (printf, 2, 3)));
18104      causes the compiler to check the arguments in calls to `my_printf'
18105      for consistency with the `printf' style format string argument
18106      `my_format'.
18108      The parameter ARCHETYPE determines how the format string is
18109      interpreted, and should be `printf', `scanf', `strftime',
18110      `gnu_printf', `gnu_scanf', `gnu_strftime' or `strfmon'.  (You can
18111      also use `__printf__', `__scanf__', `__strftime__' or
18112      `__strfmon__'.)  On MinGW targets, `ms_printf', `ms_scanf', and
18113      `ms_strftime' are also present.  ARCHTYPE values such as `printf'
18114      refer to the formats accepted by the system's C run-time library,
18115      while `gnu_' values always refer to the formats accepted by the
18116      GNU C Library.  On Microsoft Windows targets, `ms_' values refer
18117      to the formats accepted by the `msvcrt.dll' library.  The
18118      parameter STRING-INDEX specifies which argument is the format
18119      string argument (starting from 1), while FIRST-TO-CHECK is the
18120      number of the first argument to check against the format string.
18121      For functions where the arguments are not available to be checked
18122      (such as `vprintf'), specify the third parameter as zero.  In this
18123      case the compiler only checks the format string for consistency.
18124      For `strftime' formats, the third parameter is required to be zero.
18125      Since non-static C++ methods have an implicit `this' argument, the
18126      arguments of such methods should be counted from two, not one, when
18127      giving values for STRING-INDEX and FIRST-TO-CHECK.
18129      In the example above, the format string (`my_format') is the second
18130      argument of the function `my_print', and the arguments to check
18131      start with the third argument, so the correct parameters for the
18132      format attribute are 2 and 3.
18134      The `format' attribute allows you to identify your own functions
18135      which take format strings as arguments, so that GCC can check the
18136      calls to these functions for errors.  The compiler always (unless
18137      `-ffreestanding' or `-fno-builtin' is used) checks formats for the
18138      standard library functions `printf', `fprintf', `sprintf',
18139      `scanf', `fscanf', `sscanf', `strftime', `vprintf', `vfprintf' and
18140      `vsprintf' whenever such warnings are requested (using
18141      `-Wformat'), so there is no need to modify the header file
18142      `stdio.h'.  In C99 mode, the functions `snprintf', `vsnprintf',
18143      `vscanf', `vfscanf' and `vsscanf' are also checked.  Except in
18144      strictly conforming C standard modes, the X/Open function
18145      `strfmon' is also checked as are `printf_unlocked' and
18146      `fprintf_unlocked'.  *Note Options Controlling C Dialect: C
18147      Dialect Options.
18149      The target may provide additional types of format checks.  *Note
18150      Format Checks Specific to Particular Target Machines: Target
18151      Format Checks.
18153 `format_arg (STRING-INDEX)'
18154      The `format_arg' attribute specifies that a function takes a format
18155      string for a `printf', `scanf', `strftime' or `strfmon' style
18156      function and modifies it (for example, to translate it into
18157      another language), so the result can be passed to a `printf',
18158      `scanf', `strftime' or `strfmon' style function (with the
18159      remaining arguments to the format function the same as they would
18160      have been for the unmodified string).  For example, the
18161      declaration:
18163           extern char *
18164           my_dgettext (char *my_domain, const char *my_format)
18165                 __attribute__ ((format_arg (2)));
18167      causes the compiler to check the arguments in calls to a `printf',
18168      `scanf', `strftime' or `strfmon' type function, whose format
18169      string argument is a call to the `my_dgettext' function, for
18170      consistency with the format string argument `my_format'.  If the
18171      `format_arg' attribute had not been specified, all the compiler
18172      could tell in such calls to format functions would be that the
18173      format string argument is not constant; this would generate a
18174      warning when `-Wformat-nonliteral' is used, but the calls could
18175      not be checked without the attribute.
18177      The parameter STRING-INDEX specifies which argument is the format
18178      string argument (starting from one).  Since non-static C++ methods
18179      have an implicit `this' argument, the arguments of such methods
18180      should be counted from two.
18182      The `format-arg' attribute allows you to identify your own
18183      functions which modify format strings, so that GCC can check the
18184      calls to `printf', `scanf', `strftime' or `strfmon' type function
18185      whose operands are a call to one of your own function.  The
18186      compiler always treats `gettext', `dgettext', and `dcgettext' in
18187      this manner except when strict ISO C support is requested by
18188      `-ansi' or an appropriate `-std' option, or `-ffreestanding' or
18189      `-fno-builtin' is used.  *Note Options Controlling C Dialect: C
18190      Dialect Options.
18192 `function_vector'
18193      Use this attribute on the H8/300, H8/300H, and H8S to indicate
18194      that the specified function should be called through the function
18195      vector.  Calling a function through the function vector will
18196      reduce code size, however; the function vector has a limited size
18197      (maximum 128 entries on the H8/300 and 64 entries on the H8/300H
18198      and H8S) and shares space with the interrupt vector.
18200      In SH2A target, this attribute declares a function to be called
18201      using the TBR relative addressing mode.  The argument to this
18202      attribute is the entry number of the same function in a vector
18203      table containing all the TBR relative addressable functions.  For
18204      the successful jump, register TBR should contain the start address
18205      of this TBR relative vector table.  In the startup routine of the
18206      user application, user needs to care of this TBR register
18207      initialization.  The TBR relative vector table can have at max 256
18208      function entries.  The jumps to these functions will be generated
18209      using a SH2A specific, non delayed branch instruction JSR/N
18210      @(disp8,TBR).  You must use GAS and GLD from GNU binutils version
18211      2.7 or later for this attribute to work correctly.
18213      Please refer the example of M16C target, to see the use of this
18214      attribute while declaring a function,
18216      In an application, for a function being called once, this
18217      attribute will save at least 8 bytes of code; and if other
18218      successive calls are being made to the same function, it will save
18219      2 bytes of code per each of these calls.
18221      On M16C/M32C targets, the `function_vector' attribute declares a
18222      special page subroutine call function. Use of this attribute
18223      reduces the code size by 2 bytes for each call generated to the
18224      subroutine. The argument to the attribute is the vector number
18225      entry from the special page vector table which contains the 16
18226      low-order bits of the subroutine's entry address. Each vector
18227      table has special page number (18 to 255) which are used in `jsrs'
18228      instruction.  Jump addresses of the routines are generated by
18229      adding 0x0F0000 (in case of M16C targets) or 0xFF0000 (in case of
18230      M32C targets), to the 2 byte addresses set in the vector table.
18231      Therefore you need to ensure that all the special page vector
18232      routines should get mapped within the address range 0x0F0000 to
18233      0x0FFFFF (for M16C) and 0xFF0000 to 0xFFFFFF (for M32C).
18235      In the following example 2 bytes will be saved for each call to
18236      function `foo'.
18238           void foo (void) __attribute__((function_vector(0x18)));
18239           void foo (void)
18240           {
18241           }
18243           void bar (void)
18244           {
18245               foo();
18246           }
18248      If functions are defined in one file and are called in another
18249      file, then be sure to write this declaration in both files.
18251      This attribute is ignored for R8C target.
18253 `interrupt'
18254      Use this attribute on the ARM, AVR, CRX, M32C, M32R/D, m68k, and
18255      Xstormy16 ports to indicate that the specified function is an
18256      interrupt handler.  The compiler will generate function entry and
18257      exit sequences suitable for use in an interrupt handler when this
18258      attribute is present.
18260      Note, interrupt handlers for the Blackfin, H8/300, H8/300H, H8S,
18261      and SH processors can be specified via the `interrupt_handler'
18262      attribute.
18264      Note, on the AVR, interrupts will be enabled inside the function.
18266      Note, for the ARM, you can specify the kind of interrupt to be
18267      handled by adding an optional parameter to the interrupt attribute
18268      like this:
18270           void f () __attribute__ ((interrupt ("IRQ")));
18272      Permissible values for this parameter are: IRQ, FIQ, SWI, ABORT
18273      and UNDEF.
18275      On ARMv7-M the interrupt type is ignored, and the attribute means
18276      the function may be called with a word aligned stack pointer.
18278 `interrupt_handler'
18279      Use this attribute on the Blackfin, m68k, H8/300, H8/300H, H8S,
18280      and SH to indicate that the specified function is an interrupt
18281      handler.  The compiler will generate function entry and exit
18282      sequences suitable for use in an interrupt handler when this
18283      attribute is present.
18285 `interrupt_thread'
18286      Use this attribute on fido, a subarchitecture of the m68k, to
18287      indicate that the specified function is an interrupt handler that
18288      is designed to run as a thread.  The compiler omits generate
18289      prologue/epilogue sequences and replaces the return instruction
18290      with a `sleep' instruction.  This attribute is available only on
18291      fido.
18293 `isr'
18294      Use this attribute on ARM to write Interrupt Service Routines.
18295      This is an alias to the `interrupt' attribute above.
18297 `kspisusp'
18298      When used together with `interrupt_handler', `exception_handler'
18299      or `nmi_handler', code will be generated to load the stack pointer
18300      from the USP register in the function prologue.
18302 `l1_text'
18303      This attribute specifies a function to be placed into L1
18304      Instruction SRAM. The function will be put into a specific section
18305      named `.l1.text'.  With `-mfdpic', function calls with a such
18306      function as the callee or caller will use inlined PLT.
18308 `long_call/short_call'
18309      This attribute specifies how a particular function is called on
18310      ARM.  Both attributes override the `-mlong-calls' (*note ARM
18311      Options::) command line switch and `#pragma long_calls' settings.
18312      The `long_call' attribute indicates that the function might be far
18313      away from the call site and require a different (more expensive)
18314      calling sequence.   The `short_call' attribute always places the
18315      offset to the function from the call site into the `BL'
18316      instruction directly.
18318 `longcall/shortcall'
18319      On the Blackfin, RS/6000 and PowerPC, the `longcall' attribute
18320      indicates that the function might be far away from the call site
18321      and require a different (more expensive) calling sequence.  The
18322      `shortcall' attribute indicates that the function is always close
18323      enough for the shorter calling sequence to be used.  These
18324      attributes override both the `-mlongcall' switch and, on the
18325      RS/6000 and PowerPC, the `#pragma longcall' setting.
18327      *Note RS/6000 and PowerPC Options::, for more information on
18328      whether long calls are necessary.
18330 `long_call/near/far'
18331      These attributes specify how a particular function is called on
18332      MIPS.  The attributes override the `-mlong-calls' (*note MIPS
18333      Options::) command-line switch.  The `long_call' and `far'
18334      attributes are synonyms, and cause the compiler to always call the
18335      function by first loading its address into a register, and then
18336      using the contents of that register.  The `near' attribute has the
18337      opposite effect; it specifies that non-PIC calls should be made
18338      using the more efficient `jal' instruction.
18340 `malloc'
18341      The `malloc' attribute is used to tell the compiler that a function
18342      may be treated as if any non-`NULL' pointer it returns cannot
18343      alias any other pointer valid when the function returns.  This
18344      will often improve optimization.  Standard functions with this
18345      property include `malloc' and `calloc'.  `realloc'-like functions
18346      have this property as long as the old pointer is never referred to
18347      (including comparing it to the new pointer) after the function
18348      returns a non-`NULL' value.
18350 `mips16/nomips16'
18351      On MIPS targets, you can use the `mips16' and `nomips16' function
18352      attributes to locally select or turn off MIPS16 code generation.
18353      A function with the `mips16' attribute is emitted as MIPS16 code,
18354      while MIPS16 code generation is disabled for functions with the
18355      `nomips16' attribute.  These attributes override the `-mips16' and
18356      `-mno-mips16' options on the command line (*note MIPS Options::).
18358      When compiling files containing mixed MIPS16 and non-MIPS16 code,
18359      the preprocessor symbol `__mips16' reflects the setting on the
18360      command line, not that within individual functions.  Mixed MIPS16
18361      and non-MIPS16 code may interact badly with some GCC extensions
18362      such as `__builtin_apply' (*note Constructing Calls::).
18364 `model (MODEL-NAME)'
18365      On the M32R/D, use this attribute to set the addressability of an
18366      object, and of the code generated for a function.  The identifier
18367      MODEL-NAME is one of `small', `medium', or `large', representing
18368      each of the code models.
18370      Small model objects live in the lower 16MB of memory (so that their
18371      addresses can be loaded with the `ld24' instruction), and are
18372      callable with the `bl' instruction.
18374      Medium model objects may live anywhere in the 32-bit address space
18375      (the compiler will generate `seth/add3' instructions to load their
18376      addresses), and are callable with the `bl' instruction.
18378      Large model objects may live anywhere in the 32-bit address space
18379      (the compiler will generate `seth/add3' instructions to load their
18380      addresses), and may not be reachable with the `bl' instruction
18381      (the compiler will generate the much slower `seth/add3/jl'
18382      instruction sequence).
18384      On IA-64, use this attribute to set the addressability of an
18385      object.  At present, the only supported identifier for MODEL-NAME
18386      is `small', indicating addressability via "small" (22-bit)
18387      addresses (so that their addresses can be loaded with the `addl'
18388      instruction).  Caveat: such addressing is by definition not
18389      position independent and hence this attribute must not be used for
18390      objects defined by shared libraries.
18392 `ms_abi/sysv_abi'
18393      On 64-bit x86_64-*-* targets, you can use an ABI attribute to
18394      indicate which calling convention should be used for a function.
18395      The `ms_abi' attribute tells the compiler to use the Microsoft
18396      ABI, while the `sysv_abi' attribute tells the compiler to use the
18397      ABI used on GNU/Linux and other systems.  The default is to use
18398      the Microsoft ABI when targeting Windows.  On all other systems,
18399      the default is the AMD ABI.
18401      Note, This feature is currently sorried out for Windows targets
18402      trying to
18404 `naked'
18405      Use this attribute on the ARM, AVR, IP2K and SPU ports to indicate
18406      that the specified function does not need prologue/epilogue
18407      sequences generated by the compiler.  It is up to the programmer
18408      to provide these sequences. The only statements that can be safely
18409      included in naked functions are `asm' statements that do not have
18410      operands.  All other statements, including declarations of local
18411      variables, `if' statements, and so forth, should be avoided.
18412      Naked functions should be used to implement the body of an
18413      assembly function, while allowing the compiler to construct the
18414      requisite function declaration for the assembler.
18416 `near'
18417      On 68HC11 and 68HC12 the `near' attribute causes the compiler to
18418      use the normal calling convention based on `jsr' and `rts'.  This
18419      attribute can be used to cancel the effect of the `-mlong-calls'
18420      option.
18422 `nesting'
18423      Use this attribute together with `interrupt_handler',
18424      `exception_handler' or `nmi_handler' to indicate that the function
18425      entry code should enable nested interrupts or exceptions.
18427 `nmi_handler'
18428      Use this attribute on the Blackfin to indicate that the specified
18429      function is an NMI handler.  The compiler will generate function
18430      entry and exit sequences suitable for use in an NMI handler when
18431      this attribute is present.
18433 `no_instrument_function'
18434      If `-finstrument-functions' is given, profiling function calls will
18435      be generated at entry and exit of most user-compiled functions.
18436      Functions with this attribute will not be so instrumented.
18438 `noinline'
18439      This function attribute prevents a function from being considered
18440      for inlining.  If the function does not have side-effects, there
18441      are optimizations other than inlining that causes function calls
18442      to be optimized away, although the function call is live.  To keep
18443      such calls from being optimized away, put
18444           asm ("");
18445      (*note Extended Asm::) in the called function, to serve as a
18446      special side-effect.
18448 `nonnull (ARG-INDEX, ...)'
18449      The `nonnull' attribute specifies that some function parameters
18450      should be non-null pointers.  For instance, the declaration:
18452           extern void *
18453           my_memcpy (void *dest, const void *src, size_t len)
18454                   __attribute__((nonnull (1, 2)));
18456      causes the compiler to check that, in calls to `my_memcpy',
18457      arguments DEST and SRC are non-null.  If the compiler determines
18458      that a null pointer is passed in an argument slot marked as
18459      non-null, and the `-Wnonnull' option is enabled, a warning is
18460      issued.  The compiler may also choose to make optimizations based
18461      on the knowledge that certain function arguments will not be null.
18463      If no argument index list is given to the `nonnull' attribute, all
18464      pointer arguments are marked as non-null.  To illustrate, the
18465      following declaration is equivalent to the previous example:
18467           extern void *
18468           my_memcpy (void *dest, const void *src, size_t len)
18469                   __attribute__((nonnull));
18471 `noreturn'
18472      A few standard library functions, such as `abort' and `exit',
18473      cannot return.  GCC knows this automatically.  Some programs define
18474      their own functions that never return.  You can declare them
18475      `noreturn' to tell the compiler this fact.  For example,
18477           void fatal () __attribute__ ((noreturn));
18479           void
18480           fatal (/* ... */)
18481           {
18482             /* ... */ /* Print error message. */ /* ... */
18483             exit (1);
18484           }
18486      The `noreturn' keyword tells the compiler to assume that `fatal'
18487      cannot return.  It can then optimize without regard to what would
18488      happen if `fatal' ever did return.  This makes slightly better
18489      code.  More importantly, it helps avoid spurious warnings of
18490      uninitialized variables.
18492      The `noreturn' keyword does not affect the exceptional path when
18493      that applies: a `noreturn'-marked function may still return to the
18494      caller by throwing an exception or calling `longjmp'.
18496      Do not assume that registers saved by the calling function are
18497      restored before calling the `noreturn' function.
18499      It does not make sense for a `noreturn' function to have a return
18500      type other than `void'.
18502      The attribute `noreturn' is not implemented in GCC versions
18503      earlier than 2.5.  An alternative way to declare that a function
18504      does not return, which works in the current version and in some
18505      older versions, is as follows:
18507           typedef void voidfn ();
18509           volatile voidfn fatal;
18511      This approach does not work in GNU C++.
18513 `nothrow'
18514      The `nothrow' attribute is used to inform the compiler that a
18515      function cannot throw an exception.  For example, most functions in
18516      the standard C library can be guaranteed not to throw an exception
18517      with the notable exceptions of `qsort' and `bsearch' that take
18518      function pointer arguments.  The `nothrow' attribute is not
18519      implemented in GCC versions earlier than 3.3.
18521 `optimize'
18522      The `optimize' attribute is used to specify that a function is to
18523      be compiled with different optimization options than specified on
18524      the command line.  Arguments can either be numbers or strings.
18525      Numbers are assumed to be an optimization level.  Strings that
18526      begin with `O' are assumed to be an optimization option, while
18527      other options are assumed to be used with a `-f' prefix.  You can
18528      also use the `#pragma GCC optimize' pragma to set the optimization
18529      options that affect more than one function.  *Note Function
18530      Specific Option Pragmas::, for details about the `#pragma GCC
18531      optimize' pragma.
18533      This can be used for instance to have frequently executed functions
18534      compiled with more aggressive optimization options that produce
18535      faster and larger code, while other functions can be called with
18536      less aggressive options.
18538 `pure'
18539      Many functions have no effects except the return value and their
18540      return value depends only on the parameters and/or global
18541      variables.  Such a function can be subject to common subexpression
18542      elimination and loop optimization just as an arithmetic operator
18543      would be.  These functions should be declared with the attribute
18544      `pure'.  For example,
18546           int square (int) __attribute__ ((pure));
18548      says that the hypothetical function `square' is safe to call fewer
18549      times than the program says.
18551      Some of common examples of pure functions are `strlen' or `memcmp'.
18552      Interesting non-pure functions are functions with infinite loops
18553      or those depending on volatile memory or other system resource,
18554      that may change between two consecutive calls (such as `feof' in a
18555      multithreading environment).
18557      The attribute `pure' is not implemented in GCC versions earlier
18558      than 2.96.
18560 `hot'
18561      The `hot' attribute is used to inform the compiler that a function
18562      is a hot spot of the compiled program.  The function is optimized
18563      more aggressively and on many target it is placed into special
18564      subsection of the text section so all hot functions appears close
18565      together improving locality.
18567      When profile feedback is available, via `-fprofile-use', hot
18568      functions are automatically detected and this attribute is ignored.
18570      The `hot' attribute is not implemented in GCC versions earlier
18571      than 4.3.
18573 `cold'
18574      The `cold' attribute is used to inform the compiler that a
18575      function is unlikely executed.  The function is optimized for size
18576      rather than speed and on many targets it is placed into special
18577      subsection of the text section so all cold functions appears close
18578      together improving code locality of non-cold parts of program.
18579      The paths leading to call of cold functions within code are marked
18580      as unlikely by the branch prediction mechanism. It is thus useful
18581      to mark functions used to handle unlikely conditions, such as
18582      `perror', as cold to improve optimization of hot functions that do
18583      call marked functions in rare occasions.
18585      When profile feedback is available, via `-fprofile-use', hot
18586      functions are automatically detected and this attribute is ignored.
18588      The `cold' attribute is not implemented in GCC versions earlier
18589      than 4.3.
18591 `regparm (NUMBER)'
18592      On the Intel 386, the `regparm' attribute causes the compiler to
18593      pass arguments number one to NUMBER if they are of integral type
18594      in registers EAX, EDX, and ECX instead of on the stack.  Functions
18595      that take a variable number of arguments will continue to be
18596      passed all of their arguments on the stack.
18598      Beware that on some ELF systems this attribute is unsuitable for
18599      global functions in shared libraries with lazy binding (which is
18600      the default).  Lazy binding will send the first call via resolving
18601      code in the loader, which might assume EAX, EDX and ECX can be
18602      clobbered, as per the standard calling conventions.  Solaris 8 is
18603      affected by this.  GNU systems with GLIBC 2.1 or higher, and
18604      FreeBSD, are believed to be safe since the loaders there save EAX,
18605      EDX and ECX.  (Lazy binding can be disabled with the linker or the
18606      loader if desired, to avoid the problem.)
18608 `sseregparm'
18609      On the Intel 386 with SSE support, the `sseregparm' attribute
18610      causes the compiler to pass up to 3 floating point arguments in
18611      SSE registers instead of on the stack.  Functions that take a
18612      variable number of arguments will continue to pass all of their
18613      floating point arguments on the stack.
18615 `force_align_arg_pointer'
18616      On the Intel x86, the `force_align_arg_pointer' attribute may be
18617      applied to individual function definitions, generating an alternate
18618      prologue and epilogue that realigns the runtime stack if necessary.
18619      This supports mixing legacy codes that run with a 4-byte aligned
18620      stack with modern codes that keep a 16-byte stack for SSE
18621      compatibility.
18623 `resbank'
18624      On the SH2A target, this attribute enables the high-speed register
18625      saving and restoration using a register bank for
18626      `interrupt_handler' routines.  Saving to the bank is performed
18627      automatically after the CPU accepts an interrupt that uses a
18628      register bank.
18630      The nineteen 32-bit registers comprising general register R0 to
18631      R14, control register GBR, and system registers MACH, MACL, and PR
18632      and the vector table address offset are saved into a register
18633      bank.  Register banks are stacked in first-in last-out (FILO)
18634      sequence.  Restoration from the bank is executed by issuing a
18635      RESBANK instruction.
18637 `returns_twice'
18638      The `returns_twice' attribute tells the compiler that a function
18639      may return more than one time.  The compiler will ensure that all
18640      registers are dead before calling such a function and will emit a
18641      warning about the variables that may be clobbered after the second
18642      return from the function.  Examples of such functions are `setjmp'
18643      and `vfork'.  The `longjmp'-like counterpart of such function, if
18644      any, might need to be marked with the `noreturn' attribute.
18646 `saveall'
18647      Use this attribute on the Blackfin, H8/300, H8/300H, and H8S to
18648      indicate that all registers except the stack pointer should be
18649      saved in the prologue regardless of whether they are used or not.
18651 `section ("SECTION-NAME")'
18652      Normally, the compiler places the code it generates in the `text'
18653      section.  Sometimes, however, you need additional sections, or you
18654      need certain particular functions to appear in special sections.
18655      The `section' attribute specifies that a function lives in a
18656      particular section.  For example, the declaration:
18658           extern void foobar (void) __attribute__ ((section ("bar")));
18660      puts the function `foobar' in the `bar' section.
18662      Some file formats do not support arbitrary sections so the
18663      `section' attribute is not available on all platforms.  If you
18664      need to map the entire contents of a module to a particular
18665      section, consider using the facilities of the linker instead.
18667 `sentinel'
18668      This function attribute ensures that a parameter in a function
18669      call is an explicit `NULL'.  The attribute is only valid on
18670      variadic functions.  By default, the sentinel is located at
18671      position zero, the last parameter of the function call.  If an
18672      optional integer position argument P is supplied to the attribute,
18673      the sentinel must be located at position P counting backwards from
18674      the end of the argument list.
18676           __attribute__ ((sentinel))
18677           is equivalent to
18678           __attribute__ ((sentinel(0)))
18680      The attribute is automatically set with a position of 0 for the
18681      built-in functions `execl' and `execlp'.  The built-in function
18682      `execle' has the attribute set with a position of 1.
18684      A valid `NULL' in this context is defined as zero with any pointer
18685      type.  If your system defines the `NULL' macro with an integer type
18686      then you need to add an explicit cast.  GCC replaces `stddef.h'
18687      with a copy that redefines NULL appropriately.
18689      The warnings for missing or incorrect sentinels are enabled with
18690      `-Wformat'.
18692 `short_call'
18693      See long_call/short_call.
18695 `shortcall'
18696      See longcall/shortcall.
18698 `signal'
18699      Use this attribute on the AVR to indicate that the specified
18700      function is a signal handler.  The compiler will generate function
18701      entry and exit sequences suitable for use in a signal handler when
18702      this attribute is present.  Interrupts will be disabled inside the
18703      function.
18705 `sp_switch'
18706      Use this attribute on the SH to indicate an `interrupt_handler'
18707      function should switch to an alternate stack.  It expects a string
18708      argument that names a global variable holding the address of the
18709      alternate stack.
18711           void *alt_stack;
18712           void f () __attribute__ ((interrupt_handler,
18713                                     sp_switch ("alt_stack")));
18715 `stdcall'
18716      On the Intel 386, the `stdcall' attribute causes the compiler to
18717      assume that the called function will pop off the stack space used
18718      to pass arguments, unless it takes a variable number of arguments.
18720 `syscall_linkage'
18721      This attribute is used to modify the IA64 calling convention by
18722      marking all input registers as live at all function exits.  This
18723      makes it possible to restart a system call after an interrupt
18724      without having to save/restore the input registers.  This also
18725      prevents kernel data from leaking into application code.
18727 `target'
18728      The `target' attribute is used to specify that a function is to be
18729      compiled with different target options than specified on the
18730      command line.  This can be used for instance to have functions
18731      compiled with a different ISA (instruction set architecture) than
18732      the default.  You can also use the `#pragma GCC target' pragma to
18733      set more than one function to be compiled with specific target
18734      options.  *Note Function Specific Option Pragmas::, for details
18735      about the `#pragma GCC target' pragma.
18737      For instance on a 386, you could compile one function with
18738      `target("sse4.1,arch=core2")' and another with
18739      `target("sse4a,arch=amdfam10")' that would be equivalent to
18740      compiling the first function with `-msse4.1' and `-march=core2'
18741      options, and the second function with `-msse4a' and
18742      `-march=amdfam10' options.  It is up to the user to make sure that
18743      a function is only invoked on a machine that supports the
18744      particular ISA it was compiled for (for example by using `cpuid'
18745      on 386 to determine what feature bits and architecture family are
18746      used).
18748           int core2_func (void) __attribute__ ((__target__ ("arch=core2")));
18749           int sse3_func (void) __attribute__ ((__target__ ("sse3")));
18751      On the 386, the following options are allowed:
18753     `abm'
18754     `no-abm'
18755           Enable/disable the generation of the advanced bit
18756           instructions.
18758     `aes'
18759     `no-aes'
18760           Enable/disable the generation of the AES instructions.
18762     `mmx'
18763     `no-mmx'
18764           Enable/disable the generation of the MMX instructions.
18766     `pclmul'
18767     `no-pclmul'
18768           Enable/disable the generation of the PCLMUL instructions.
18770     `popcnt'
18771     `no-popcnt'
18772           Enable/disable the generation of the POPCNT instruction.
18774     `sse'
18775     `no-sse'
18776           Enable/disable the generation of the SSE instructions.
18778     `sse2'
18779     `no-sse2'
18780           Enable/disable the generation of the SSE2 instructions.
18782     `sse3'
18783     `no-sse3'
18784           Enable/disable the generation of the SSE3 instructions.
18786     `sse4'
18787     `no-sse4'
18788           Enable/disable the generation of the SSE4 instructions (both
18789           SSE4.1 and SSE4.2).
18791     `sse4.1'
18792     `no-sse4.1'
18793           Enable/disable the generation of the sse4.1 instructions.
18795     `sse4.2'
18796     `no-sse4.2'
18797           Enable/disable the generation of the sse4.2 instructions.
18799     `sse4a'
18800     `no-sse4a'
18801           Enable/disable the generation of the SSE4A instructions.
18803     `sse5'
18804     `no-sse5'
18805           Enable/disable the generation of the SSE5 instructions.
18807     `ssse3'
18808     `no-ssse3'
18809           Enable/disable the generation of the SSSE3 instructions.
18811     `cld'
18812     `no-cld'
18813           Enable/disable the generation of the CLD before string moves.
18815     `fancy-math-387'
18816     `no-fancy-math-387'
18817           Enable/disable the generation of the `sin', `cos', and `sqrt'
18818           instructions on the 387 floating point unit.
18820     `fused-madd'
18821     `no-fused-madd'
18822           Enable/disable the generation of the fused multiply/add
18823           instructions.
18825     `ieee-fp'
18826     `no-ieee-fp'
18827           Enable/disable the generation of floating point that depends
18828           on IEEE arithmetic.
18830     `inline-all-stringops'
18831     `no-inline-all-stringops'
18832           Enable/disable inlining of string operations.
18834     `inline-stringops-dynamically'
18835     `no-inline-stringops-dynamically'
18836           Enable/disable the generation of the inline code to do small
18837           string operations and calling the library routines for large
18838           operations.
18840     `align-stringops'
18841     `no-align-stringops'
18842           Do/do not align destination of inlined string operations.
18844     `recip'
18845     `no-recip'
18846           Enable/disable the generation of RCPSS, RCPPS, RSQRTSS and
18847           RSQRTPS instructions followed an additional Newton-Raphson
18848           step instead of doing a floating point division.
18850     `arch=ARCH'
18851           Specify the architecture to generate code for in compiling
18852           the function.
18854     `tune=TUNE'
18855           Specify the architecture to tune for in compiling the
18856           function.
18858     `fpmath=FPMATH'
18859           Specify which floating point unit to use.  The
18860           `target("fpmath=sse,387")' option must be specified as
18861           `target("fpmath=sse+387")' because the comma would separate
18862           different options.
18864      On the 386, you can use either multiple strings to specify multiple
18865      options, or you can separate the option with a comma (`,').
18867      On the 386, the inliner will not inline a function that has
18868      different target options than the caller, unless the callee has a
18869      subset of the target options of the caller.  For example a
18870      function declared with `target("sse5")' can inline a function with
18871      `target("sse2")', since `-msse5' implies `-msse2'.
18873      The `target' attribute is not implemented in GCC versions earlier
18874      than 4.4, and at present only the 386 uses it.
18876 `tiny_data'
18877      Use this attribute on the H8/300H and H8S to indicate that the
18878      specified variable should be placed into the tiny data section.
18879      The compiler will generate more efficient code for loads and stores
18880      on data in the tiny data section.  Note the tiny data area is
18881      limited to slightly under 32kbytes of data.
18883 `trap_exit'
18884      Use this attribute on the SH for an `interrupt_handler' to return
18885      using `trapa' instead of `rte'.  This attribute expects an integer
18886      argument specifying the trap number to be used.
18888 `unused'
18889      This attribute, attached to a function, means that the function is
18890      meant to be possibly unused.  GCC will not produce a warning for
18891      this function.
18893 `used'
18894      This attribute, attached to a function, means that code must be
18895      emitted for the function even if it appears that the function is
18896      not referenced.  This is useful, for example, when the function is
18897      referenced only in inline assembly.
18899 `version_id'
18900      This IA64 HP-UX attribute, attached to a global variable or
18901      function, renames a symbol to contain a version string, thus
18902      allowing for function level versioning.  HP-UX system header files
18903      may use version level functioning for some system calls.
18905           extern int foo () __attribute__((version_id ("20040821")));
18907      Calls to FOO will be mapped to calls to FOO{20040821}.
18909 `visibility ("VISIBILITY_TYPE")'
18910      This attribute affects the linkage of the declaration to which it
18911      is attached.  There are four supported VISIBILITY_TYPE values:
18912      default, hidden, protected or internal visibility.
18914           void __attribute__ ((visibility ("protected")))
18915           f () { /* Do something. */; }
18916           int i __attribute__ ((visibility ("hidden")));
18918      The possible values of VISIBILITY_TYPE correspond to the
18919      visibility settings in the ELF gABI.
18921     "default"
18922           Default visibility is the normal case for the object file
18923           format.  This value is available for the visibility attribute
18924           to override other options that may change the assumed
18925           visibility of entities.
18927           On ELF, default visibility means that the declaration is
18928           visible to other modules and, in shared libraries, means that
18929           the declared entity may be overridden.
18931           On Darwin, default visibility means that the declaration is
18932           visible to other modules.
18934           Default visibility corresponds to "external linkage" in the
18935           language.
18937     "hidden"
18938           Hidden visibility indicates that the entity declared will
18939           have a new form of linkage, which we'll call "hidden
18940           linkage".  Two declarations of an object with hidden linkage
18941           refer to the same object if they are in the same shared
18942           object.
18944     "internal"
18945           Internal visibility is like hidden visibility, but with
18946           additional processor specific semantics.  Unless otherwise
18947           specified by the psABI, GCC defines internal visibility to
18948           mean that a function is _never_ called from another module.
18949           Compare this with hidden functions which, while they cannot
18950           be referenced directly by other modules, can be referenced
18951           indirectly via function pointers.  By indicating that a
18952           function cannot be called from outside the module, GCC may
18953           for instance omit the load of a PIC register since it is known
18954           that the calling function loaded the correct value.
18956     "protected"
18957           Protected visibility is like default visibility except that it
18958           indicates that references within the defining module will
18959           bind to the definition in that module.  That is, the declared
18960           entity cannot be overridden by another module.
18963      All visibilities are supported on many, but not all, ELF targets
18964      (supported when the assembler supports the `.visibility'
18965      pseudo-op).  Default visibility is supported everywhere.  Hidden
18966      visibility is supported on Darwin targets.
18968      The visibility attribute should be applied only to declarations
18969      which would otherwise have external linkage.  The attribute should
18970      be applied consistently, so that the same entity should not be
18971      declared with different settings of the attribute.
18973      In C++, the visibility attribute applies to types as well as
18974      functions and objects, because in C++ types have linkage.  A class
18975      must not have greater visibility than its non-static data member
18976      types and bases, and class members default to the visibility of
18977      their class.  Also, a declaration without explicit visibility is
18978      limited to the visibility of its type.
18980      In C++, you can mark member functions and static member variables
18981      of a class with the visibility attribute.  This is useful if you
18982      know a particular method or static member variable should only be
18983      used from one shared object; then you can mark it hidden while the
18984      rest of the class has default visibility.  Care must be taken to
18985      avoid breaking the One Definition Rule; for example, it is usually
18986      not useful to mark an inline method as hidden without marking the
18987      whole class as hidden.
18989      A C++ namespace declaration can also have the visibility attribute.
18990      This attribute applies only to the particular namespace body, not
18991      to other definitions of the same namespace; it is equivalent to
18992      using `#pragma GCC visibility' before and after the namespace
18993      definition (*note Visibility Pragmas::).
18995      In C++, if a template argument has limited visibility, this
18996      restriction is implicitly propagated to the template instantiation.
18997      Otherwise, template instantiations and specializations default to
18998      the visibility of their template.
19000      If both the template and enclosing class have explicit visibility,
19001      the visibility from the template is used.
19003 `warn_unused_result'
19004      The `warn_unused_result' attribute causes a warning to be emitted
19005      if a caller of the function with this attribute does not use its
19006      return value.  This is useful for functions where not checking the
19007      result is either a security problem or always a bug, such as
19008      `realloc'.
19010           int fn () __attribute__ ((warn_unused_result));
19011           int foo ()
19012           {
19013             if (fn () < 0) return -1;
19014             fn ();
19015             return 0;
19016           }
19018      results in warning on line 5.
19020 `weak'
19021      The `weak' attribute causes the declaration to be emitted as a weak
19022      symbol rather than a global.  This is primarily useful in defining
19023      library functions which can be overridden in user code, though it
19024      can also be used with non-function declarations.  Weak symbols are
19025      supported for ELF targets, and also for a.out targets when using
19026      the GNU assembler and linker.
19028 `weakref'
19029 `weakref ("TARGET")'
19030      The `weakref' attribute marks a declaration as a weak reference.
19031      Without arguments, it should be accompanied by an `alias' attribute
19032      naming the target symbol.  Optionally, the TARGET may be given as
19033      an argument to `weakref' itself.  In either case, `weakref'
19034      implicitly marks the declaration as `weak'.  Without a TARGET,
19035      given as an argument to `weakref' or to `alias', `weakref' is
19036      equivalent to `weak'.
19038           static int x() __attribute__ ((weakref ("y")));
19039           /* is equivalent to... */
19040           static int x() __attribute__ ((weak, weakref, alias ("y")));
19041           /* and to... */
19042           static int x() __attribute__ ((weakref));
19043           static int x() __attribute__ ((alias ("y")));
19045      A weak reference is an alias that does not by itself require a
19046      definition to be given for the target symbol.  If the target
19047      symbol is only referenced through weak references, then the
19048      becomes a `weak' undefined symbol.  If it is directly referenced,
19049      however, then such strong references prevail, and a definition
19050      will be required for the symbol, not necessarily in the same
19051      translation unit.
19053      The effect is equivalent to moving all references to the alias to a
19054      separate translation unit, renaming the alias to the aliased
19055      symbol, declaring it as weak, compiling the two separate
19056      translation units and performing a reloadable link on them.
19058      At present, a declaration to which `weakref' is attached can only
19059      be `static'.
19062  You can specify multiple attributes in a declaration by separating them
19063 by commas within the double parentheses or by immediately following an
19064 attribute declaration with another attribute declaration.
19066  Some people object to the `__attribute__' feature, suggesting that ISO
19067 C's `#pragma' should be used instead.  At the time `__attribute__' was
19068 designed, there were two reasons for not doing this.
19070   1. It is impossible to generate `#pragma' commands from a macro.
19072   2. There is no telling what the same `#pragma' might mean in another
19073      compiler.
19075  These two reasons applied to almost any application that might have
19076 been proposed for `#pragma'.  It was basically a mistake to use
19077 `#pragma' for _anything_.
19079  The ISO C99 standard includes `_Pragma', which now allows pragmas to
19080 be generated from macros.  In addition, a `#pragma GCC' namespace is
19081 now in use for GCC-specific pragmas.  However, it has been found
19082 convenient to use `__attribute__' to achieve a natural attachment of
19083 attributes to their corresponding declarations, whereas `#pragma GCC'
19084 is of use for constructs that do not naturally form part of the
19085 grammar.  *Note Miscellaneous Preprocessing Directives: (cpp)Other
19086 Directives.
19088 \x1f
19089 File: gcc.info,  Node: Attribute Syntax,  Next: Function Prototypes,  Prev: Function Attributes,  Up: C Extensions
19091 5.28 Attribute Syntax
19092 =====================
19094 This section describes the syntax with which `__attribute__' may be
19095 used, and the constructs to which attribute specifiers bind, for the C
19096 language.  Some details may vary for C++ and Objective-C.  Because of
19097 infelicities in the grammar for attributes, some forms described here
19098 may not be successfully parsed in all cases.
19100  There are some problems with the semantics of attributes in C++.  For
19101 example, there are no manglings for attributes, although they may affect
19102 code generation, so problems may arise when attributed types are used in
19103 conjunction with templates or overloading.  Similarly, `typeid' does
19104 not distinguish between types with different attributes.  Support for
19105 attributes in C++ may be restricted in future to attributes on
19106 declarations only, but not on nested declarators.
19108  *Note Function Attributes::, for details of the semantics of attributes
19109 applying to functions.  *Note Variable Attributes::, for details of the
19110 semantics of attributes applying to variables.  *Note Type Attributes::,
19111 for details of the semantics of attributes applying to structure, union
19112 and enumerated types.
19114  An "attribute specifier" is of the form `__attribute__
19115 ((ATTRIBUTE-LIST))'.  An "attribute list" is a possibly empty
19116 comma-separated sequence of "attributes", where each attribute is one
19117 of the following:
19119    * Empty.  Empty attributes are ignored.
19121    * A word (which may be an identifier such as `unused', or a reserved
19122      word such as `const').
19124    * A word, followed by, in parentheses, parameters for the attribute.
19125      These parameters take one of the following forms:
19127         * An identifier.  For example, `mode' attributes use this form.
19129         * An identifier followed by a comma and a non-empty
19130           comma-separated list of expressions.  For example, `format'
19131           attributes use this form.
19133         * A possibly empty comma-separated list of expressions.  For
19134           example, `format_arg' attributes use this form with the list
19135           being a single integer constant expression, and `alias'
19136           attributes use this form with the list being a single string
19137           constant.
19139  An "attribute specifier list" is a sequence of one or more attribute
19140 specifiers, not separated by any other tokens.
19142  In GNU C, an attribute specifier list may appear after the colon
19143 following a label, other than a `case' or `default' label.  The only
19144 attribute it makes sense to use after a label is `unused'.  This
19145 feature is intended for code generated by programs which contains labels
19146 that may be unused but which is compiled with `-Wall'.  It would not
19147 normally be appropriate to use in it human-written code, though it
19148 could be useful in cases where the code that jumps to the label is
19149 contained within an `#ifdef' conditional.  GNU C++ does not permit such
19150 placement of attribute lists, as it is permissible for a declaration,
19151 which could begin with an attribute list, to be labelled in C++.
19152 Declarations cannot be labelled in C90 or C99, so the ambiguity does
19153 not arise there.
19155  An attribute specifier list may appear as part of a `struct', `union'
19156 or `enum' specifier.  It may go either immediately after the `struct',
19157 `union' or `enum' keyword, or after the closing brace.  The former
19158 syntax is preferred.  Where attribute specifiers follow the closing
19159 brace, they are considered to relate to the structure, union or
19160 enumerated type defined, not to any enclosing declaration the type
19161 specifier appears in, and the type defined is not complete until after
19162 the attribute specifiers.
19164  Otherwise, an attribute specifier appears as part of a declaration,
19165 counting declarations of unnamed parameters and type names, and relates
19166 to that declaration (which may be nested in another declaration, for
19167 example in the case of a parameter declaration), or to a particular
19168 declarator within a declaration.  Where an attribute specifier is
19169 applied to a parameter declared as a function or an array, it should
19170 apply to the function or array rather than the pointer to which the
19171 parameter is implicitly converted, but this is not yet correctly
19172 implemented.
19174  Any list of specifiers and qualifiers at the start of a declaration may
19175 contain attribute specifiers, whether or not such a list may in that
19176 context contain storage class specifiers.  (Some attributes, however,
19177 are essentially in the nature of storage class specifiers, and only make
19178 sense where storage class specifiers may be used; for example,
19179 `section'.)  There is one necessary limitation to this syntax: the
19180 first old-style parameter declaration in a function definition cannot
19181 begin with an attribute specifier, because such an attribute applies to
19182 the function instead by syntax described below (which, however, is not
19183 yet implemented in this case).  In some other cases, attribute
19184 specifiers are permitted by this grammar but not yet supported by the
19185 compiler.  All attribute specifiers in this place relate to the
19186 declaration as a whole.  In the obsolescent usage where a type of `int'
19187 is implied by the absence of type specifiers, such a list of specifiers
19188 and qualifiers may be an attribute specifier list with no other
19189 specifiers or qualifiers.
19191  At present, the first parameter in a function prototype must have some
19192 type specifier which is not an attribute specifier; this resolves an
19193 ambiguity in the interpretation of `void f(int (__attribute__((foo))
19194 x))', but is subject to change.  At present, if the parentheses of a
19195 function declarator contain only attributes then those attributes are
19196 ignored, rather than yielding an error or warning or implying a single
19197 parameter of type int, but this is subject to change.
19199  An attribute specifier list may appear immediately before a declarator
19200 (other than the first) in a comma-separated list of declarators in a
19201 declaration of more than one identifier using a single list of
19202 specifiers and qualifiers.  Such attribute specifiers apply only to the
19203 identifier before whose declarator they appear.  For example, in
19205      __attribute__((noreturn)) void d0 (void),
19206          __attribute__((format(printf, 1, 2))) d1 (const char *, ...),
19207           d2 (void)
19209 the `noreturn' attribute applies to all the functions declared; the
19210 `format' attribute only applies to `d1'.
19212  An attribute specifier list may appear immediately before the comma,
19213 `=' or semicolon terminating the declaration of an identifier other
19214 than a function definition.  Such attribute specifiers apply to the
19215 declared object or function.  Where an assembler name for an object or
19216 function is specified (*note Asm Labels::), the attribute must follow
19217 the `asm' specification.
19219  An attribute specifier list may, in future, be permitted to appear
19220 after the declarator in a function definition (before any old-style
19221 parameter declarations or the function body).
19223  Attribute specifiers may be mixed with type qualifiers appearing inside
19224 the `[]' of a parameter array declarator, in the C99 construct by which
19225 such qualifiers are applied to the pointer to which the array is
19226 implicitly converted.  Such attribute specifiers apply to the pointer,
19227 not to the array, but at present this is not implemented and they are
19228 ignored.
19230  An attribute specifier list may appear at the start of a nested
19231 declarator.  At present, there are some limitations in this usage: the
19232 attributes correctly apply to the declarator, but for most individual
19233 attributes the semantics this implies are not implemented.  When
19234 attribute specifiers follow the `*' of a pointer declarator, they may
19235 be mixed with any type qualifiers present.  The following describes the
19236 formal semantics of this syntax.  It will make the most sense if you
19237 are familiar with the formal specification of declarators in the ISO C
19238 standard.
19240  Consider (as in C99 subclause 6.7.5 paragraph 4) a declaration `T D1',
19241 where `T' contains declaration specifiers that specify a type TYPE
19242 (such as `int') and `D1' is a declarator that contains an identifier
19243 IDENT.  The type specified for IDENT for derived declarators whose type
19244 does not include an attribute specifier is as in the ISO C standard.
19246  If `D1' has the form `( ATTRIBUTE-SPECIFIER-LIST D )', and the
19247 declaration `T D' specifies the type "DERIVED-DECLARATOR-TYPE-LIST
19248 TYPE" for IDENT, then `T D1' specifies the type
19249 "DERIVED-DECLARATOR-TYPE-LIST ATTRIBUTE-SPECIFIER-LIST TYPE" for IDENT.
19251  If `D1' has the form `* TYPE-QUALIFIER-AND-ATTRIBUTE-SPECIFIER-LIST
19252 D', and the declaration `T D' specifies the type
19253 "DERIVED-DECLARATOR-TYPE-LIST TYPE" for IDENT, then `T D1' specifies
19254 the type "DERIVED-DECLARATOR-TYPE-LIST
19255 TYPE-QUALIFIER-AND-ATTRIBUTE-SPECIFIER-LIST TYPE" for IDENT.
19257  For example,
19259      void (__attribute__((noreturn)) ****f) (void);
19261 specifies the type "pointer to pointer to pointer to pointer to
19262 non-returning function returning `void'".  As another example,
19264      char *__attribute__((aligned(8))) *f;
19266 specifies the type "pointer to 8-byte-aligned pointer to `char'".  Note
19267 again that this does not work with most attributes; for example, the
19268 usage of `aligned' and `noreturn' attributes given above is not yet
19269 supported.
19271  For compatibility with existing code written for compiler versions that
19272 did not implement attributes on nested declarators, some laxity is
19273 allowed in the placing of attributes.  If an attribute that only applies
19274 to types is applied to a declaration, it will be treated as applying to
19275 the type of that declaration.  If an attribute that only applies to
19276 declarations is applied to the type of a declaration, it will be treated
19277 as applying to that declaration; and, for compatibility with code
19278 placing the attributes immediately before the identifier declared, such
19279 an attribute applied to a function return type will be treated as
19280 applying to the function type, and such an attribute applied to an array
19281 element type will be treated as applying to the array type.  If an
19282 attribute that only applies to function types is applied to a
19283 pointer-to-function type, it will be treated as applying to the pointer
19284 target type; if such an attribute is applied to a function return type
19285 that is not a pointer-to-function type, it will be treated as applying
19286 to the function type.
19288 \x1f
19289 File: gcc.info,  Node: Function Prototypes,  Next: C++ Comments,  Prev: Attribute Syntax,  Up: C Extensions
19291 5.29 Prototypes and Old-Style Function Definitions
19292 ==================================================
19294 GNU C extends ISO C to allow a function prototype to override a later
19295 old-style non-prototype definition.  Consider the following example:
19297      /* Use prototypes unless the compiler is old-fashioned.  */
19298      #ifdef __STDC__
19299      #define P(x) x
19300      #else
19301      #define P(x) ()
19302      #endif
19304      /* Prototype function declaration.  */
19305      int isroot P((uid_t));
19307      /* Old-style function definition.  */
19308      int
19309      isroot (x)   /* ??? lossage here ??? */
19310           uid_t x;
19311      {
19312        return x == 0;
19313      }
19315  Suppose the type `uid_t' happens to be `short'.  ISO C does not allow
19316 this example, because subword arguments in old-style non-prototype
19317 definitions are promoted.  Therefore in this example the function
19318 definition's argument is really an `int', which does not match the
19319 prototype argument type of `short'.
19321  This restriction of ISO C makes it hard to write code that is portable
19322 to traditional C compilers, because the programmer does not know
19323 whether the `uid_t' type is `short', `int', or `long'.  Therefore, in
19324 cases like these GNU C allows a prototype to override a later old-style
19325 definition.  More precisely, in GNU C, a function prototype argument
19326 type overrides the argument type specified by a later old-style
19327 definition if the former type is the same as the latter type before
19328 promotion.  Thus in GNU C the above example is equivalent to the
19329 following:
19331      int isroot (uid_t);
19333      int
19334      isroot (uid_t x)
19335      {
19336        return x == 0;
19337      }
19339 GNU C++ does not support old-style function definitions, so this
19340 extension is irrelevant.
19342 \x1f
19343 File: gcc.info,  Node: C++ Comments,  Next: Dollar Signs,  Prev: Function Prototypes,  Up: C Extensions
19345 5.30 C++ Style Comments
19346 =======================
19348 In GNU C, you may use C++ style comments, which start with `//' and
19349 continue until the end of the line.  Many other C implementations allow
19350 such comments, and they are included in the 1999 C standard.  However,
19351 C++ style comments are not recognized if you specify an `-std' option
19352 specifying a version of ISO C before C99, or `-ansi' (equivalent to
19353 `-std=c89').
19355 \x1f
19356 File: gcc.info,  Node: Dollar Signs,  Next: Character Escapes,  Prev: C++ Comments,  Up: C Extensions
19358 5.31 Dollar Signs in Identifier Names
19359 =====================================
19361 In GNU C, you may normally use dollar signs in identifier names.  This
19362 is because many traditional C implementations allow such identifiers.
19363 However, dollar signs in identifiers are not supported on a few target
19364 machines, typically because the target assembler does not allow them.
19366 \x1f
19367 File: gcc.info,  Node: Character Escapes,  Next: Variable Attributes,  Prev: Dollar Signs,  Up: C Extensions
19369 5.32 The Character <ESC> in Constants
19370 =====================================
19372 You can use the sequence `\e' in a string or character constant to
19373 stand for the ASCII character <ESC>.
19375 \x1f
19376 File: gcc.info,  Node: Alignment,  Next: Inline,  Prev: Type Attributes,  Up: C Extensions
19378 5.33 Inquiring on Alignment of Types or Variables
19379 =================================================
19381 The keyword `__alignof__' allows you to inquire about how an object is
19382 aligned, or the minimum alignment usually required by a type.  Its
19383 syntax is just like `sizeof'.
19385  For example, if the target machine requires a `double' value to be
19386 aligned on an 8-byte boundary, then `__alignof__ (double)' is 8.  This
19387 is true on many RISC machines.  On more traditional machine designs,
19388 `__alignof__ (double)' is 4 or even 2.
19390  Some machines never actually require alignment; they allow reference
19391 to any data type even at an odd address.  For these machines,
19392 `__alignof__' reports the smallest alignment that GCC will give the
19393 data type, usually as mandated by the target ABI.
19395  If the operand of `__alignof__' is an lvalue rather than a type, its
19396 value is the required alignment for its type, taking into account any
19397 minimum alignment specified with GCC's `__attribute__' extension (*note
19398 Variable Attributes::).  For example, after this declaration:
19400      struct foo { int x; char y; } foo1;
19402 the value of `__alignof__ (foo1.y)' is 1, even though its actual
19403 alignment is probably 2 or 4, the same as `__alignof__ (int)'.
19405  It is an error to ask for the alignment of an incomplete type.
19407 \x1f
19408 File: gcc.info,  Node: Variable Attributes,  Next: Type Attributes,  Prev: Character Escapes,  Up: C Extensions
19410 5.34 Specifying Attributes of Variables
19411 =======================================
19413 The keyword `__attribute__' allows you to specify special attributes of
19414 variables or structure fields.  This keyword is followed by an
19415 attribute specification inside double parentheses.  Some attributes are
19416 currently defined generically for variables.  Other attributes are
19417 defined for variables on particular target systems.  Other attributes
19418 are available for functions (*note Function Attributes::) and for types
19419 (*note Type Attributes::).  Other front ends might define more
19420 attributes (*note Extensions to the C++ Language: C++ Extensions.).
19422  You may also specify attributes with `__' preceding and following each
19423 keyword.  This allows you to use them in header files without being
19424 concerned about a possible macro of the same name.  For example, you
19425 may use `__aligned__' instead of `aligned'.
19427  *Note Attribute Syntax::, for details of the exact syntax for using
19428 attributes.
19430 `aligned (ALIGNMENT)'
19431      This attribute specifies a minimum alignment for the variable or
19432      structure field, measured in bytes.  For example, the declaration:
19434           int x __attribute__ ((aligned (16))) = 0;
19436      causes the compiler to allocate the global variable `x' on a
19437      16-byte boundary.  On a 68040, this could be used in conjunction
19438      with an `asm' expression to access the `move16' instruction which
19439      requires 16-byte aligned operands.
19441      You can also specify the alignment of structure fields.  For
19442      example, to create a double-word aligned `int' pair, you could
19443      write:
19445           struct foo { int x[2] __attribute__ ((aligned (8))); };
19447      This is an alternative to creating a union with a `double' member
19448      that forces the union to be double-word aligned.
19450      As in the preceding examples, you can explicitly specify the
19451      alignment (in bytes) that you wish the compiler to use for a given
19452      variable or structure field.  Alternatively, you can leave out the
19453      alignment factor and just ask the compiler to align a variable or
19454      field to the default alignment for the target architecture you are
19455      compiling for.  The default alignment is sufficient for all scalar
19456      types, but may not be enough for all vector types on a target
19457      which supports vector operations.  The default alignment is fixed
19458      for a particular target ABI.
19460      Gcc also provides a target specific macro `__BIGGEST_ALIGNMENT__',
19461      which is the largest alignment ever used for any data type on the
19462      target machine you are compiling for.  For example, you could
19463      write:
19465           short array[3] __attribute__ ((aligned (__BIGGEST_ALIGNMENT__)));
19467      The compiler automatically sets the alignment for the declared
19468      variable or field to `__BIGGEST_ALIGNMENT__'.  Doing this can
19469      often make copy operations more efficient, because the compiler can
19470      use whatever instructions copy the biggest chunks of memory when
19471      performing copies to or from the variables or fields that you have
19472      aligned this way.  Note that the value of `__BIGGEST_ALIGNMENT__'
19473      may change depending on command line options.
19475      When used on a struct, or struct member, the `aligned' attribute
19476      can only increase the alignment; in order to decrease it, the
19477      `packed' attribute must be specified as well.  When used as part
19478      of a typedef, the `aligned' attribute can both increase and
19479      decrease alignment, and specifying the `packed' attribute will
19480      generate a warning.
19482      Note that the effectiveness of `aligned' attributes may be limited
19483      by inherent limitations in your linker.  On many systems, the
19484      linker is only able to arrange for variables to be aligned up to a
19485      certain maximum alignment.  (For some linkers, the maximum
19486      supported alignment may be very very small.)  If your linker is
19487      only able to align variables up to a maximum of 8 byte alignment,
19488      then specifying `aligned(16)' in an `__attribute__' will still
19489      only provide you with 8 byte alignment.  See your linker
19490      documentation for further information.
19492      The `aligned' attribute can also be used for functions (*note
19493      Function Attributes::.)
19495 `cleanup (CLEANUP_FUNCTION)'
19496      The `cleanup' attribute runs a function when the variable goes out
19497      of scope.  This attribute can only be applied to auto function
19498      scope variables; it may not be applied to parameters or variables
19499      with static storage duration.  The function must take one
19500      parameter, a pointer to a type compatible with the variable.  The
19501      return value of the function (if any) is ignored.
19503      If `-fexceptions' is enabled, then CLEANUP_FUNCTION will be run
19504      during the stack unwinding that happens during the processing of
19505      the exception.  Note that the `cleanup' attribute does not allow
19506      the exception to be caught, only to perform an action.  It is
19507      undefined what happens if CLEANUP_FUNCTION does not return
19508      normally.
19510 `common'
19511 `nocommon'
19512      The `common' attribute requests GCC to place a variable in
19513      "common" storage.  The `nocommon' attribute requests the
19514      opposite--to allocate space for it directly.
19516      These attributes override the default chosen by the `-fno-common'
19517      and `-fcommon' flags respectively.
19519 `deprecated'
19520      The `deprecated' attribute results in a warning if the variable is
19521      used anywhere in the source file.  This is useful when identifying
19522      variables that are expected to be removed in a future version of a
19523      program.  The warning also includes the location of the declaration
19524      of the deprecated variable, to enable users to easily find further
19525      information about why the variable is deprecated, or what they
19526      should do instead.  Note that the warning only occurs for uses:
19528           extern int old_var __attribute__ ((deprecated));
19529           extern int old_var;
19530           int new_fn () { return old_var; }
19532      results in a warning on line 3 but not line 2.
19534      The `deprecated' attribute can also be used for functions and
19535      types (*note Function Attributes::, *note Type Attributes::.)
19537 `mode (MODE)'
19538      This attribute specifies the data type for the
19539      declaration--whichever type corresponds to the mode MODE.  This in
19540      effect lets you request an integer or floating point type
19541      according to its width.
19543      You may also specify a mode of `byte' or `__byte__' to indicate
19544      the mode corresponding to a one-byte integer, `word' or `__word__'
19545      for the mode of a one-word integer, and `pointer' or `__pointer__'
19546      for the mode used to represent pointers.
19548 `packed'
19549      The `packed' attribute specifies that a variable or structure field
19550      should have the smallest possible alignment--one byte for a
19551      variable, and one bit for a field, unless you specify a larger
19552      value with the `aligned' attribute.
19554      Here is a structure in which the field `x' is packed, so that it
19555      immediately follows `a':
19557           struct foo
19558           {
19559             char a;
19560             int x[2] __attribute__ ((packed));
19561           };
19563      _Note:_ The 4.1, 4.2 and 4.3 series of GCC ignore the `packed'
19564      attribute on bit-fields of type `char'.  This has been fixed in
19565      GCC 4.4 but the change can lead to differences in the structure
19566      layout.  See the documentation of `-Wpacked-bitfield-compat' for
19567      more information.
19569 `section ("SECTION-NAME")'
19570      Normally, the compiler places the objects it generates in sections
19571      like `data' and `bss'.  Sometimes, however, you need additional
19572      sections, or you need certain particular variables to appear in
19573      special sections, for example to map to special hardware.  The
19574      `section' attribute specifies that a variable (or function) lives
19575      in a particular section.  For example, this small program uses
19576      several specific section names:
19578           struct duart a __attribute__ ((section ("DUART_A"))) = { 0 };
19579           struct duart b __attribute__ ((section ("DUART_B"))) = { 0 };
19580           char stack[10000] __attribute__ ((section ("STACK"))) = { 0 };
19581           int init_data __attribute__ ((section ("INITDATA")));
19583           main()
19584           {
19585             /* Initialize stack pointer */
19586             init_sp (stack + sizeof (stack));
19588             /* Initialize initialized data */
19589             memcpy (&init_data, &data, &edata - &data);
19591             /* Turn on the serial ports */
19592             init_duart (&a);
19593             init_duart (&b);
19594           }
19596      Use the `section' attribute with _global_ variables and not
19597      _local_ variables, as shown in the example.
19599      You may use the `section' attribute with initialized or
19600      uninitialized global variables but the linker requires each object
19601      be defined once, with the exception that uninitialized variables
19602      tentatively go in the `common' (or `bss') section and can be
19603      multiply "defined".  Using the `section' attribute will change
19604      what section the variable goes into and may cause the linker to
19605      issue an error if an uninitialized variable has multiple
19606      definitions.  You can force a variable to be initialized with the
19607      `-fno-common' flag or the `nocommon' attribute.
19609      Some file formats do not support arbitrary sections so the
19610      `section' attribute is not available on all platforms.  If you
19611      need to map the entire contents of a module to a particular
19612      section, consider using the facilities of the linker instead.
19614 `shared'
19615      On Microsoft Windows, in addition to putting variable definitions
19616      in a named section, the section can also be shared among all
19617      running copies of an executable or DLL.  For example, this small
19618      program defines shared data by putting it in a named section
19619      `shared' and marking the section shareable:
19621           int foo __attribute__((section ("shared"), shared)) = 0;
19623           int
19624           main()
19625           {
19626             /* Read and write foo.  All running
19627                copies see the same value.  */
19628             return 0;
19629           }
19631      You may only use the `shared' attribute along with `section'
19632      attribute with a fully initialized global definition because of
19633      the way linkers work.  See `section' attribute for more
19634      information.
19636      The `shared' attribute is only available on Microsoft Windows.
19638 `tls_model ("TLS_MODEL")'
19639      The `tls_model' attribute sets thread-local storage model (*note
19640      Thread-Local::) of a particular `__thread' variable, overriding
19641      `-ftls-model=' command line switch on a per-variable basis.  The
19642      TLS_MODEL argument should be one of `global-dynamic',
19643      `local-dynamic', `initial-exec' or `local-exec'.
19645      Not all targets support this attribute.
19647 `unused'
19648      This attribute, attached to a variable, means that the variable is
19649      meant to be possibly unused.  GCC will not produce a warning for
19650      this variable.
19652 `used'
19653      This attribute, attached to a variable, means that the variable
19654      must be emitted even if it appears that the variable is not
19655      referenced.
19657 `vector_size (BYTES)'
19658      This attribute specifies the vector size for the variable,
19659      measured in bytes.  For example, the declaration:
19661           int foo __attribute__ ((vector_size (16)));
19663      causes the compiler to set the mode for `foo', to be 16 bytes,
19664      divided into `int' sized units.  Assuming a 32-bit int (a vector of
19665      4 units of 4 bytes), the corresponding mode of `foo' will be V4SI.
19667      This attribute is only applicable to integral and float scalars,
19668      although arrays, pointers, and function return values are allowed
19669      in conjunction with this construct.
19671      Aggregates with this attribute are invalid, even if they are of
19672      the same size as a corresponding scalar.  For example, the
19673      declaration:
19675           struct S { int a; };
19676           struct S  __attribute__ ((vector_size (16))) foo;
19678      is invalid even if the size of the structure is the same as the
19679      size of the `int'.
19681 `selectany'
19682      The `selectany' attribute causes an initialized global variable to
19683      have link-once semantics.  When multiple definitions of the
19684      variable are encountered by the linker, the first is selected and
19685      the remainder are discarded.  Following usage by the Microsoft
19686      compiler, the linker is told _not_ to warn about size or content
19687      differences of the multiple definitions.
19689      Although the primary usage of this attribute is for POD types, the
19690      attribute can also be applied to global C++ objects that are
19691      initialized by a constructor.  In this case, the static
19692      initialization and destruction code for the object is emitted in
19693      each translation defining the object, but the calls to the
19694      constructor and destructor are protected by a link-once guard
19695      variable.
19697      The `selectany' attribute is only available on Microsoft Windows
19698      targets.  You can use `__declspec (selectany)' as a synonym for
19699      `__attribute__ ((selectany))' for compatibility with other
19700      compilers.
19702 `weak'
19703      The `weak' attribute is described in *Note Function Attributes::.
19705 `dllimport'
19706      The `dllimport' attribute is described in *Note Function
19707      Attributes::.
19709 `dllexport'
19710      The `dllexport' attribute is described in *Note Function
19711      Attributes::.
19714 5.34.1 Blackfin Variable Attributes
19715 -----------------------------------
19717 Three attributes are currently defined for the Blackfin.
19719 `l1_data'
19721 `l1_data_A'
19723 `l1_data_B'
19724      Use these attributes on the Blackfin to place the variable into L1
19725      Data SRAM.  Variables with `l1_data' attribute will be put into
19726      the specific section named `.l1.data'. Those with `l1_data_A'
19727      attribute will be put into the specific section named
19728      `.l1.data.A'. Those with `l1_data_B' attribute will be put into
19729      the specific section named `.l1.data.B'.
19731 5.34.2 M32R/D Variable Attributes
19732 ---------------------------------
19734 One attribute is currently defined for the M32R/D.
19736 `model (MODEL-NAME)'
19737      Use this attribute on the M32R/D to set the addressability of an
19738      object.  The identifier MODEL-NAME is one of `small', `medium', or
19739      `large', representing each of the code models.
19741      Small model objects live in the lower 16MB of memory (so that their
19742      addresses can be loaded with the `ld24' instruction).
19744      Medium and large model objects may live anywhere in the 32-bit
19745      address space (the compiler will generate `seth/add3' instructions
19746      to load their addresses).
19748 5.34.3 i386 Variable Attributes
19749 -------------------------------
19751 Two attributes are currently defined for i386 configurations:
19752 `ms_struct' and `gcc_struct'
19754 `ms_struct'
19755 `gcc_struct'
19756      If `packed' is used on a structure, or if bit-fields are used it
19757      may be that the Microsoft ABI packs them differently than GCC
19758      would normally pack them.  Particularly when moving packed data
19759      between functions compiled with GCC and the native Microsoft
19760      compiler (either via function call or as data in a file), it may
19761      be necessary to access either format.
19763      Currently `-m[no-]ms-bitfields' is provided for the Microsoft
19764      Windows X86 compilers to match the native Microsoft compiler.
19766      The Microsoft structure layout algorithm is fairly simple with the
19767      exception of the bitfield packing:
19769      The padding and alignment of members of structures and whether a
19770      bit field can straddle a storage-unit boundary
19772        1. Structure members are stored sequentially in the order in
19773           which they are declared: the first member has the lowest
19774           memory address and the last member the highest.
19776        2. Every data object has an alignment-requirement. The
19777           alignment-requirement for all data except structures, unions,
19778           and arrays is either the size of the object or the current
19779           packing size (specified with either the aligned attribute or
19780           the pack pragma), whichever is less. For structures,  unions,
19781           and arrays, the alignment-requirement is the largest
19782           alignment-requirement of its members.  Every object is
19783           allocated an offset so that:
19785           offset %  alignment-requirement == 0
19787        3. Adjacent bit fields are packed into the same 1-, 2-, or
19788           4-byte allocation unit if the integral types are the same
19789           size and if the next bit field fits into the current
19790           allocation unit without crossing the boundary imposed by the
19791           common alignment requirements of the bit fields.
19793      Handling of zero-length bitfields:
19795      MSVC interprets zero-length bitfields in the following ways:
19797        1. If a zero-length bitfield is inserted between two bitfields
19798           that would normally be coalesced, the bitfields will not be
19799           coalesced.
19801           For example:
19803                struct
19804                 {
19805                   unsigned long bf_1 : 12;
19806                   unsigned long : 0;
19807                   unsigned long bf_2 : 12;
19808                 } t1;
19810           The size of `t1' would be 8 bytes with the zero-length
19811           bitfield.  If the zero-length bitfield were removed, `t1''s
19812           size would be 4 bytes.
19814        2. If a zero-length bitfield is inserted after a bitfield,
19815           `foo', and the alignment of the zero-length bitfield is
19816           greater than the member that follows it, `bar', `bar' will be
19817           aligned as the type of the zero-length bitfield.
19819           For example:
19821                struct
19822                 {
19823                   char foo : 4;
19824                   short : 0;
19825                   char bar;
19826                 } t2;
19828                struct
19829                 {
19830                   char foo : 4;
19831                   short : 0;
19832                   double bar;
19833                 } t3;
19835           For `t2', `bar' will be placed at offset 2, rather than
19836           offset 1.  Accordingly, the size of `t2' will be 4.  For
19837           `t3', the zero-length bitfield will not affect the alignment
19838           of `bar' or, as a result, the size of the structure.
19840           Taking this into account, it is important to note the
19841           following:
19843             1. If a zero-length bitfield follows a normal bitfield, the
19844                type of the zero-length bitfield may affect the
19845                alignment of the structure as whole. For example, `t2'
19846                has a size of 4 bytes, since the zero-length bitfield
19847                follows a normal bitfield, and is of type short.
19849             2. Even if a zero-length bitfield is not followed by a
19850                normal bitfield, it may still affect the alignment of
19851                the structure:
19853                     struct
19854                      {
19855                        char foo : 6;
19856                        long : 0;
19857                      } t4;
19859                Here, `t4' will take up 4 bytes.
19861        3. Zero-length bitfields following non-bitfield members are
19862           ignored:
19864                struct
19865                 {
19866                   char foo;
19867                   long : 0;
19868                   char bar;
19869                 } t5;
19871           Here, `t5' will take up 2 bytes.
19873 5.34.4 PowerPC Variable Attributes
19874 ----------------------------------
19876 Three attributes currently are defined for PowerPC configurations:
19877 `altivec', `ms_struct' and `gcc_struct'.
19879  For full documentation of the struct attributes please see the
19880 documentation in *Note i386 Variable Attributes::.
19882  For documentation of `altivec' attribute please see the documentation
19883 in *Note PowerPC Type Attributes::.
19885 5.34.5 SPU Variable Attributes
19886 ------------------------------
19888 The SPU supports the `spu_vector' attribute for variables.  For
19889 documentation of this attribute please see the documentation in *Note
19890 SPU Type Attributes::.
19892 5.34.6 Xstormy16 Variable Attributes
19893 ------------------------------------
19895 One attribute is currently defined for xstormy16 configurations:
19896 `below100'.
19898 `below100'
19899      If a variable has the `below100' attribute (`BELOW100' is allowed
19900      also), GCC will place the variable in the first 0x100 bytes of
19901      memory and use special opcodes to access it.  Such variables will
19902      be placed in either the `.bss_below100' section or the
19903      `.data_below100' section.
19906 5.34.7 AVR Variable Attributes
19907 ------------------------------
19909 `progmem'
19910      The `progmem' attribute is used on the AVR to place data in the
19911      Program Memory address space. The AVR is a Harvard Architecture
19912      processor and data normally resides in the Data Memory address
19913      space.
19915 \x1f
19916 File: gcc.info,  Node: Type Attributes,  Next: Alignment,  Prev: Variable Attributes,  Up: C Extensions
19918 5.35 Specifying Attributes of Types
19919 ===================================
19921 The keyword `__attribute__' allows you to specify special attributes of
19922 `struct' and `union' types when you define such types.  This keyword is
19923 followed by an attribute specification inside double parentheses.
19924 Seven attributes are currently defined for types: `aligned', `packed',
19925 `transparent_union', `unused', `deprecated', `visibility', and
19926 `may_alias'.  Other attributes are defined for functions (*note
19927 Function Attributes::) and for variables (*note Variable Attributes::).
19929  You may also specify any one of these attributes with `__' preceding
19930 and following its keyword.  This allows you to use these attributes in
19931 header files without being concerned about a possible macro of the same
19932 name.  For example, you may use `__aligned__' instead of `aligned'.
19934  You may specify type attributes in an enum, struct or union type
19935 declaration or definition, or for other types in a `typedef'
19936 declaration.
19938  For an enum, struct or union type, you may specify attributes either
19939 between the enum, struct or union tag and the name of the type, or just
19940 past the closing curly brace of the _definition_.  The former syntax is
19941 preferred.
19943  *Note Attribute Syntax::, for details of the exact syntax for using
19944 attributes.
19946 `aligned (ALIGNMENT)'
19947      This attribute specifies a minimum alignment (in bytes) for
19948      variables of the specified type.  For example, the declarations:
19950           struct S { short f[3]; } __attribute__ ((aligned (8)));
19951           typedef int more_aligned_int __attribute__ ((aligned (8)));
19953      force the compiler to insure (as far as it can) that each variable
19954      whose type is `struct S' or `more_aligned_int' will be allocated
19955      and aligned _at least_ on a 8-byte boundary.  On a SPARC, having
19956      all variables of type `struct S' aligned to 8-byte boundaries
19957      allows the compiler to use the `ldd' and `std' (doubleword load and
19958      store) instructions when copying one variable of type `struct S' to
19959      another, thus improving run-time efficiency.
19961      Note that the alignment of any given `struct' or `union' type is
19962      required by the ISO C standard to be at least a perfect multiple of
19963      the lowest common multiple of the alignments of all of the members
19964      of the `struct' or `union' in question.  This means that you _can_
19965      effectively adjust the alignment of a `struct' or `union' type by
19966      attaching an `aligned' attribute to any one of the members of such
19967      a type, but the notation illustrated in the example above is a
19968      more obvious, intuitive, and readable way to request the compiler
19969      to adjust the alignment of an entire `struct' or `union' type.
19971      As in the preceding example, you can explicitly specify the
19972      alignment (in bytes) that you wish the compiler to use for a given
19973      `struct' or `union' type.  Alternatively, you can leave out the
19974      alignment factor and just ask the compiler to align a type to the
19975      maximum useful alignment for the target machine you are compiling
19976      for.  For example, you could write:
19978           struct S { short f[3]; } __attribute__ ((aligned));
19980      Whenever you leave out the alignment factor in an `aligned'
19981      attribute specification, the compiler automatically sets the
19982      alignment for the type to the largest alignment which is ever used
19983      for any data type on the target machine you are compiling for.
19984      Doing this can often make copy operations more efficient, because
19985      the compiler can use whatever instructions copy the biggest chunks
19986      of memory when performing copies to or from the variables which
19987      have types that you have aligned this way.
19989      In the example above, if the size of each `short' is 2 bytes, then
19990      the size of the entire `struct S' type is 6 bytes.  The smallest
19991      power of two which is greater than or equal to that is 8, so the
19992      compiler sets the alignment for the entire `struct S' type to 8
19993      bytes.
19995      Note that although you can ask the compiler to select a
19996      time-efficient alignment for a given type and then declare only
19997      individual stand-alone objects of that type, the compiler's
19998      ability to select a time-efficient alignment is primarily useful
19999      only when you plan to create arrays of variables having the
20000      relevant (efficiently aligned) type.  If you declare or use arrays
20001      of variables of an efficiently-aligned type, then it is likely
20002      that your program will also be doing pointer arithmetic (or
20003      subscripting, which amounts to the same thing) on pointers to the
20004      relevant type, and the code that the compiler generates for these
20005      pointer arithmetic operations will often be more efficient for
20006      efficiently-aligned types than for other types.
20008      The `aligned' attribute can only increase the alignment; but you
20009      can decrease it by specifying `packed' as well.  See below.
20011      Note that the effectiveness of `aligned' attributes may be limited
20012      by inherent limitations in your linker.  On many systems, the
20013      linker is only able to arrange for variables to be aligned up to a
20014      certain maximum alignment.  (For some linkers, the maximum
20015      supported alignment may be very very small.)  If your linker is
20016      only able to align variables up to a maximum of 8 byte alignment,
20017      then specifying `aligned(16)' in an `__attribute__' will still
20018      only provide you with 8 byte alignment.  See your linker
20019      documentation for further information.
20021 `packed'
20022      This attribute, attached to `struct' or `union' type definition,
20023      specifies that each member (other than zero-width bitfields) of
20024      the structure or union is placed to minimize the memory required.
20025      When attached to an `enum' definition, it indicates that the
20026      smallest integral type should be used.
20028      Specifying this attribute for `struct' and `union' types is
20029      equivalent to specifying the `packed' attribute on each of the
20030      structure or union members.  Specifying the `-fshort-enums' flag
20031      on the line is equivalent to specifying the `packed' attribute on
20032      all `enum' definitions.
20034      In the following example `struct my_packed_struct''s members are
20035      packed closely together, but the internal layout of its `s' member
20036      is not packed--to do that, `struct my_unpacked_struct' would need
20037      to be packed too.
20039           struct my_unpacked_struct
20040            {
20041               char c;
20042               int i;
20043            };
20045           struct __attribute__ ((__packed__)) my_packed_struct
20046             {
20047                char c;
20048                int  i;
20049                struct my_unpacked_struct s;
20050             };
20052      You may only specify this attribute on the definition of a `enum',
20053      `struct' or `union', not on a `typedef' which does not also define
20054      the enumerated type, structure or union.
20056 `transparent_union'
20057      This attribute, attached to a `union' type definition, indicates
20058      that any function parameter having that union type causes calls to
20059      that function to be treated in a special way.
20061      First, the argument corresponding to a transparent union type can
20062      be of any type in the union; no cast is required.  Also, if the
20063      union contains a pointer type, the corresponding argument can be a
20064      null pointer constant or a void pointer expression; and if the
20065      union contains a void pointer type, the corresponding argument can
20066      be any pointer expression.  If the union member type is a pointer,
20067      qualifiers like `const' on the referenced type must be respected,
20068      just as with normal pointer conversions.
20070      Second, the argument is passed to the function using the calling
20071      conventions of the first member of the transparent union, not the
20072      calling conventions of the union itself.  All members of the union
20073      must have the same machine representation; this is necessary for
20074      this argument passing to work properly.
20076      Transparent unions are designed for library functions that have
20077      multiple interfaces for compatibility reasons.  For example,
20078      suppose the `wait' function must accept either a value of type
20079      `int *' to comply with Posix, or a value of type `union wait *' to
20080      comply with the 4.1BSD interface.  If `wait''s parameter were
20081      `void *', `wait' would accept both kinds of arguments, but it
20082      would also accept any other pointer type and this would make
20083      argument type checking less useful.  Instead, `<sys/wait.h>' might
20084      define the interface as follows:
20086           typedef union __attribute__ ((__transparent_union__))
20087             {
20088               int *__ip;
20089               union wait *__up;
20090             } wait_status_ptr_t;
20092           pid_t wait (wait_status_ptr_t);
20094      This interface allows either `int *' or `union wait *' arguments
20095      to be passed, using the `int *' calling convention.  The program
20096      can call `wait' with arguments of either type:
20098           int w1 () { int w; return wait (&w); }
20099           int w2 () { union wait w; return wait (&w); }
20101      With this interface, `wait''s implementation might look like this:
20103           pid_t wait (wait_status_ptr_t p)
20104           {
20105             return waitpid (-1, p.__ip, 0);
20106           }
20108 `unused'
20109      When attached to a type (including a `union' or a `struct'), this
20110      attribute means that variables of that type are meant to appear
20111      possibly unused.  GCC will not produce a warning for any variables
20112      of that type, even if the variable appears to do nothing.  This is
20113      often the case with lock or thread classes, which are usually
20114      defined and then not referenced, but contain constructors and
20115      destructors that have nontrivial bookkeeping functions.
20117 `deprecated'
20118      The `deprecated' attribute results in a warning if the type is
20119      used anywhere in the source file.  This is useful when identifying
20120      types that are expected to be removed in a future version of a
20121      program.  If possible, the warning also includes the location of
20122      the declaration of the deprecated type, to enable users to easily
20123      find further information about why the type is deprecated, or what
20124      they should do instead.  Note that the warnings only occur for
20125      uses and then only if the type is being applied to an identifier
20126      that itself is not being declared as deprecated.
20128           typedef int T1 __attribute__ ((deprecated));
20129           T1 x;
20130           typedef T1 T2;
20131           T2 y;
20132           typedef T1 T3 __attribute__ ((deprecated));
20133           T3 z __attribute__ ((deprecated));
20135      results in a warning on line 2 and 3 but not lines 4, 5, or 6.  No
20136      warning is issued for line 4 because T2 is not explicitly
20137      deprecated.  Line 5 has no warning because T3 is explicitly
20138      deprecated.  Similarly for line 6.
20140      The `deprecated' attribute can also be used for functions and
20141      variables (*note Function Attributes::, *note Variable
20142      Attributes::.)
20144 `may_alias'
20145      Accesses through pointers to types with this attribute are not
20146      subject to type-based alias analysis, but are instead assumed to
20147      be able to alias any other type of objects.  In the context of
20148      6.5/7 an lvalue expression dereferencing such a pointer is treated
20149      like having a character type.  See `-fstrict-aliasing' for more
20150      information on aliasing issues.  This extension exists to support
20151      some vector APIs, in which pointers to one vector type are
20152      permitted to alias pointers to a different vector type.
20154      Note that an object of a type with this attribute does not have any
20155      special semantics.
20157      Example of use:
20159           typedef short __attribute__((__may_alias__)) short_a;
20161           int
20162           main (void)
20163           {
20164             int a = 0x12345678;
20165             short_a *b = (short_a *) &a;
20167             b[1] = 0;
20169             if (a == 0x12345678)
20170               abort();
20172             exit(0);
20173           }
20175      If you replaced `short_a' with `short' in the variable
20176      declaration, the above program would abort when compiled with
20177      `-fstrict-aliasing', which is on by default at `-O2' or above in
20178      recent GCC versions.
20180 `visibility'
20181      In C++, attribute visibility (*note Function Attributes::) can
20182      also be applied to class, struct, union and enum types.  Unlike
20183      other type attributes, the attribute must appear between the
20184      initial keyword and the name of the type; it cannot appear after
20185      the body of the type.
20187      Note that the type visibility is applied to vague linkage entities
20188      associated with the class (vtable, typeinfo node, etc.).  In
20189      particular, if a class is thrown as an exception in one shared
20190      object and caught in another, the class must have default
20191      visibility.  Otherwise the two shared objects will be unable to
20192      use the same typeinfo node and exception handling will break.
20195 5.35.1 ARM Type Attributes
20196 --------------------------
20198 On those ARM targets that support `dllimport' (such as Symbian OS), you
20199 can use the `notshared' attribute to indicate that the virtual table
20200 and other similar data for a class should not be exported from a DLL.
20201 For example:
20203      class __declspec(notshared) C {
20204      public:
20205        __declspec(dllimport) C();
20206        virtual void f();
20207      }
20209      __declspec(dllexport)
20210      C::C() {}
20212  In this code, `C::C' is exported from the current DLL, but the virtual
20213 table for `C' is not exported.  (You can use `__attribute__' instead of
20214 `__declspec' if you prefer, but most Symbian OS code uses `__declspec'.)
20216 5.35.2 i386 Type Attributes
20217 ---------------------------
20219 Two attributes are currently defined for i386 configurations:
20220 `ms_struct' and `gcc_struct'.
20222 `ms_struct'
20223 `gcc_struct'
20224      If `packed' is used on a structure, or if bit-fields are used it
20225      may be that the Microsoft ABI packs them differently than GCC
20226      would normally pack them.  Particularly when moving packed data
20227      between functions compiled with GCC and the native Microsoft
20228      compiler (either via function call or as data in a file), it may
20229      be necessary to access either format.
20231      Currently `-m[no-]ms-bitfields' is provided for the Microsoft
20232      Windows X86 compilers to match the native Microsoft compiler.
20234  To specify multiple attributes, separate them by commas within the
20235 double parentheses: for example, `__attribute__ ((aligned (16),
20236 packed))'.
20238 5.35.3 PowerPC Type Attributes
20239 ------------------------------
20241 Three attributes currently are defined for PowerPC configurations:
20242 `altivec', `ms_struct' and `gcc_struct'.
20244  For full documentation of the `ms_struct' and `gcc_struct' attributes
20245 please see the documentation in *Note i386 Type Attributes::.
20247  The `altivec' attribute allows one to declare AltiVec vector data
20248 types supported by the AltiVec Programming Interface Manual.  The
20249 attribute requires an argument to specify one of three vector types:
20250 `vector__', `pixel__' (always followed by unsigned short), and `bool__'
20251 (always followed by unsigned).
20253      __attribute__((altivec(vector__)))
20254      __attribute__((altivec(pixel__))) unsigned short
20255      __attribute__((altivec(bool__))) unsigned
20257  These attributes mainly are intended to support the `__vector',
20258 `__pixel', and `__bool' AltiVec keywords.
20260 5.35.4 SPU Type Attributes
20261 --------------------------
20263 The SPU supports the `spu_vector' attribute for types.  This attribute
20264 allows one to declare vector data types supported by the
20265 Sony/Toshiba/IBM SPU Language Extensions Specification.  It is intended
20266 to support the `__vector' keyword.
20268 \x1f
20269 File: gcc.info,  Node: Inline,  Next: Extended Asm,  Prev: Alignment,  Up: C Extensions
20271 5.36 An Inline Function is As Fast As a Macro
20272 =============================================
20274 By declaring a function inline, you can direct GCC to make calls to
20275 that function faster.  One way GCC can achieve this is to integrate
20276 that function's code into the code for its callers.  This makes
20277 execution faster by eliminating the function-call overhead; in
20278 addition, if any of the actual argument values are constant, their
20279 known values may permit simplifications at compile time so that not all
20280 of the inline function's code needs to be included.  The effect on code
20281 size is less predictable; object code may be larger or smaller with
20282 function inlining, depending on the particular case.  You can also
20283 direct GCC to try to integrate all "simple enough" functions into their
20284 callers with the option `-finline-functions'.
20286  GCC implements three different semantics of declaring a function
20287 inline.  One is available with `-std=gnu89' or `-fgnu89-inline' or when
20288 `gnu_inline' attribute is present on all inline declarations, another
20289 when `-std=c99' or `-std=gnu99' (without `-fgnu89-inline'), and the
20290 third is used when compiling C++.
20292  To declare a function inline, use the `inline' keyword in its
20293 declaration, like this:
20295      static inline int
20296      inc (int *a)
20297      {
20298        (*a)++;
20299      }
20301  If you are writing a header file to be included in ISO C89 programs,
20302 write `__inline__' instead of `inline'.  *Note Alternate Keywords::.
20304  The three types of inlining behave similarly in two important cases:
20305 when the `inline' keyword is used on a `static' function, like the
20306 example above, and when a function is first declared without using the
20307 `inline' keyword and then is defined with `inline', like this:
20309      extern int inc (int *a);
20310      inline int
20311      inc (int *a)
20312      {
20313        (*a)++;
20314      }
20316  In both of these common cases, the program behaves the same as if you
20317 had not used the `inline' keyword, except for its speed.
20319  When a function is both inline and `static', if all calls to the
20320 function are integrated into the caller, and the function's address is
20321 never used, then the function's own assembler code is never referenced.
20322 In this case, GCC does not actually output assembler code for the
20323 function, unless you specify the option `-fkeep-inline-functions'.
20324 Some calls cannot be integrated for various reasons (in particular,
20325 calls that precede the function's definition cannot be integrated, and
20326 neither can recursive calls within the definition).  If there is a
20327 nonintegrated call, then the function is compiled to assembler code as
20328 usual.  The function must also be compiled as usual if the program
20329 refers to its address, because that can't be inlined.
20331  Note that certain usages in a function definition can make it
20332 unsuitable for inline substitution.  Among these usages are: use of
20333 varargs, use of alloca, use of variable sized data types (*note
20334 Variable Length::), use of computed goto (*note Labels as Values::),
20335 use of nonlocal goto, and nested functions (*note Nested Functions::).
20336 Using `-Winline' will warn when a function marked `inline' could not be
20337 substituted, and will give the reason for the failure.
20339  As required by ISO C++, GCC considers member functions defined within
20340 the body of a class to be marked inline even if they are not explicitly
20341 declared with the `inline' keyword.  You can override this with
20342 `-fno-default-inline'; *note Options Controlling C++ Dialect: C++
20343 Dialect Options.
20345  GCC does not inline any functions when not optimizing unless you
20346 specify the `always_inline' attribute for the function, like this:
20348      /* Prototype.  */
20349      inline void foo (const char) __attribute__((always_inline));
20351  The remainder of this section is specific to GNU C89 inlining.
20353  When an inline function is not `static', then the compiler must assume
20354 that there may be calls from other source files; since a global symbol
20355 can be defined only once in any program, the function must not be
20356 defined in the other source files, so the calls therein cannot be
20357 integrated.  Therefore, a non-`static' inline function is always
20358 compiled on its own in the usual fashion.
20360  If you specify both `inline' and `extern' in the function definition,
20361 then the definition is used only for inlining.  In no case is the
20362 function compiled on its own, not even if you refer to its address
20363 explicitly.  Such an address becomes an external reference, as if you
20364 had only declared the function, and had not defined it.
20366  This combination of `inline' and `extern' has almost the effect of a
20367 macro.  The way to use it is to put a function definition in a header
20368 file with these keywords, and put another copy of the definition
20369 (lacking `inline' and `extern') in a library file.  The definition in
20370 the header file will cause most calls to the function to be inlined.
20371 If any uses of the function remain, they will refer to the single copy
20372 in the library.
20374 \x1f
20375 File: gcc.info,  Node: Extended Asm,  Next: Constraints,  Prev: Inline,  Up: C Extensions
20377 5.37 Assembler Instructions with C Expression Operands
20378 ======================================================
20380 In an assembler instruction using `asm', you can specify the operands
20381 of the instruction using C expressions.  This means you need not guess
20382 which registers or memory locations will contain the data you want to
20383 use.
20385  You must specify an assembler instruction template much like what
20386 appears in a machine description, plus an operand constraint string for
20387 each operand.
20389  For example, here is how to use the 68881's `fsinx' instruction:
20391      asm ("fsinx %1,%0" : "=f" (result) : "f" (angle));
20393 Here `angle' is the C expression for the input operand while `result'
20394 is that of the output operand.  Each has `"f"' as its operand
20395 constraint, saying that a floating point register is required.  The `='
20396 in `=f' indicates that the operand is an output; all output operands'
20397 constraints must use `='.  The constraints use the same language used
20398 in the machine description (*note Constraints::).
20400  Each operand is described by an operand-constraint string followed by
20401 the C expression in parentheses.  A colon separates the assembler
20402 template from the first output operand and another separates the last
20403 output operand from the first input, if any.  Commas separate the
20404 operands within each group.  The total number of operands is currently
20405 limited to 30; this limitation may be lifted in some future version of
20406 GCC.
20408  If there are no output operands but there are input operands, you must
20409 place two consecutive colons surrounding the place where the output
20410 operands would go.
20412  As of GCC version 3.1, it is also possible to specify input and output
20413 operands using symbolic names which can be referenced within the
20414 assembler code.  These names are specified inside square brackets
20415 preceding the constraint string, and can be referenced inside the
20416 assembler code using `%[NAME]' instead of a percentage sign followed by
20417 the operand number.  Using named operands the above example could look
20418 like:
20420      asm ("fsinx %[angle],%[output]"
20421           : [output] "=f" (result)
20422           : [angle] "f" (angle));
20424 Note that the symbolic operand names have no relation whatsoever to
20425 other C identifiers.  You may use any name you like, even those of
20426 existing C symbols, but you must ensure that no two operands within the
20427 same assembler construct use the same symbolic name.
20429  Output operand expressions must be lvalues; the compiler can check
20430 this.  The input operands need not be lvalues.  The compiler cannot
20431 check whether the operands have data types that are reasonable for the
20432 instruction being executed.  It does not parse the assembler instruction
20433 template and does not know what it means or even whether it is valid
20434 assembler input.  The extended `asm' feature is most often used for
20435 machine instructions the compiler itself does not know exist.  If the
20436 output expression cannot be directly addressed (for example, it is a
20437 bit-field), your constraint must allow a register.  In that case, GCC
20438 will use the register as the output of the `asm', and then store that
20439 register into the output.
20441  The ordinary output operands must be write-only; GCC will assume that
20442 the values in these operands before the instruction are dead and need
20443 not be generated.  Extended asm supports input-output or read-write
20444 operands.  Use the constraint character `+' to indicate such an operand
20445 and list it with the output operands.  You should only use read-write
20446 operands when the constraints for the operand (or the operand in which
20447 only some of the bits are to be changed) allow a register.
20449  You may, as an alternative, logically split its function into two
20450 separate operands, one input operand and one write-only output operand.
20451 The connection between them is expressed by constraints which say they
20452 need to be in the same location when the instruction executes.  You can
20453 use the same C expression for both operands, or different expressions.
20454 For example, here we write the (fictitious) `combine' instruction with
20455 `bar' as its read-only source operand and `foo' as its read-write
20456 destination:
20458      asm ("combine %2,%0" : "=r" (foo) : "0" (foo), "g" (bar));
20460 The constraint `"0"' for operand 1 says that it must occupy the same
20461 location as operand 0.  A number in constraint is allowed only in an
20462 input operand and it must refer to an output operand.
20464  Only a number in the constraint can guarantee that one operand will be
20465 in the same place as another.  The mere fact that `foo' is the value of
20466 both operands is not enough to guarantee that they will be in the same
20467 place in the generated assembler code.  The following would not work
20468 reliably:
20470      asm ("combine %2,%0" : "=r" (foo) : "r" (foo), "g" (bar));
20472  Various optimizations or reloading could cause operands 0 and 1 to be
20473 in different registers; GCC knows no reason not to do so.  For example,
20474 the compiler might find a copy of the value of `foo' in one register and
20475 use it for operand 1, but generate the output operand 0 in a different
20476 register (copying it afterward to `foo''s own address).  Of course,
20477 since the register for operand 1 is not even mentioned in the assembler
20478 code, the result will not work, but GCC can't tell that.
20480  As of GCC version 3.1, one may write `[NAME]' instead of the operand
20481 number for a matching constraint.  For example:
20483      asm ("cmoveq %1,%2,%[result]"
20484           : [result] "=r"(result)
20485           : "r" (test), "r"(new), "[result]"(old));
20487  Sometimes you need to make an `asm' operand be a specific register,
20488 but there's no matching constraint letter for that register _by
20489 itself_.  To force the operand into that register, use a local variable
20490 for the operand and specify the register in the variable declaration.
20491 *Note Explicit Reg Vars::.  Then for the `asm' operand, use any
20492 register constraint letter that matches the register:
20494      register int *p1 asm ("r0") = ...;
20495      register int *p2 asm ("r1") = ...;
20496      register int *result asm ("r0");
20497      asm ("sysint" : "=r" (result) : "0" (p1), "r" (p2));
20499  In the above example, beware that a register that is call-clobbered by
20500 the target ABI will be overwritten by any function call in the
20501 assignment, including library calls for arithmetic operators.  Also a
20502 register may be clobbered when generating some operations, like
20503 variable shift, memory copy or memory move on x86.  Assuming it is a
20504 call-clobbered register, this may happen to `r0' above by the
20505 assignment to `p2'.  If you have to use such a register, use temporary
20506 variables for expressions between the register assignment and use:
20508      int t1 = ...;
20509      register int *p1 asm ("r0") = ...;
20510      register int *p2 asm ("r1") = t1;
20511      register int *result asm ("r0");
20512      asm ("sysint" : "=r" (result) : "0" (p1), "r" (p2));
20514  Some instructions clobber specific hard registers.  To describe this,
20515 write a third colon after the input operands, followed by the names of
20516 the clobbered hard registers (given as strings).  Here is a realistic
20517 example for the VAX:
20519      asm volatile ("movc3 %0,%1,%2"
20520                    : /* no outputs */
20521                    : "g" (from), "g" (to), "g" (count)
20522                    : "r0", "r1", "r2", "r3", "r4", "r5");
20524  You may not write a clobber description in a way that overlaps with an
20525 input or output operand.  For example, you may not have an operand
20526 describing a register class with one member if you mention that register
20527 in the clobber list.  Variables declared to live in specific registers
20528 (*note Explicit Reg Vars::), and used as asm input or output operands
20529 must have no part mentioned in the clobber description.  There is no
20530 way for you to specify that an input operand is modified without also
20531 specifying it as an output operand.  Note that if all the output
20532 operands you specify are for this purpose (and hence unused), you will
20533 then also need to specify `volatile' for the `asm' construct, as
20534 described below, to prevent GCC from deleting the `asm' statement as
20535 unused.
20537  If you refer to a particular hardware register from the assembler code,
20538 you will probably have to list the register after the third colon to
20539 tell the compiler the register's value is modified.  In some assemblers,
20540 the register names begin with `%'; to produce one `%' in the assembler
20541 code, you must write `%%' in the input.
20543  If your assembler instruction can alter the condition code register,
20544 add `cc' to the list of clobbered registers.  GCC on some machines
20545 represents the condition codes as a specific hardware register; `cc'
20546 serves to name this register.  On other machines, the condition code is
20547 handled differently, and specifying `cc' has no effect.  But it is
20548 valid no matter what the machine.
20550  If your assembler instructions access memory in an unpredictable
20551 fashion, add `memory' to the list of clobbered registers.  This will
20552 cause GCC to not keep memory values cached in registers across the
20553 assembler instruction and not optimize stores or loads to that memory.
20554 You will also want to add the `volatile' keyword if the memory affected
20555 is not listed in the inputs or outputs of the `asm', as the `memory'
20556 clobber does not count as a side-effect of the `asm'.  If you know how
20557 large the accessed memory is, you can add it as input or output but if
20558 this is not known, you should add `memory'.  As an example, if you
20559 access ten bytes of a string, you can use a memory input like:
20561      {"m"( ({ struct { char x[10]; } *p = (void *)ptr ; *p; }) )}.
20563  Note that in the following example the memory input is necessary,
20564 otherwise GCC might optimize the store to `x' away:
20565      int foo ()
20566      {
20567        int x = 42;
20568        int *y = &x;
20569        int result;
20570        asm ("magic stuff accessing an 'int' pointed to by '%1'"
20571              "=&d" (r) : "a" (y), "m" (*y));
20572        return result;
20573      }
20575  You can put multiple assembler instructions together in a single `asm'
20576 template, separated by the characters normally used in assembly code
20577 for the system.  A combination that works in most places is a newline
20578 to break the line, plus a tab character to move to the instruction field
20579 (written as `\n\t').  Sometimes semicolons can be used, if the
20580 assembler allows semicolons as a line-breaking character.  Note that
20581 some assembler dialects use semicolons to start a comment.  The input
20582 operands are guaranteed not to use any of the clobbered registers, and
20583 neither will the output operands' addresses, so you can read and write
20584 the clobbered registers as many times as you like.  Here is an example
20585 of multiple instructions in a template; it assumes the subroutine
20586 `_foo' accepts arguments in registers 9 and 10:
20588      asm ("movl %0,r9\n\tmovl %1,r10\n\tcall _foo"
20589           : /* no outputs */
20590           : "g" (from), "g" (to)
20591           : "r9", "r10");
20593  Unless an output operand has the `&' constraint modifier, GCC may
20594 allocate it in the same register as an unrelated input operand, on the
20595 assumption the inputs are consumed before the outputs are produced.
20596 This assumption may be false if the assembler code actually consists of
20597 more than one instruction.  In such a case, use `&' for each output
20598 operand that may not overlap an input.  *Note Modifiers::.
20600  If you want to test the condition code produced by an assembler
20601 instruction, you must include a branch and a label in the `asm'
20602 construct, as follows:
20604      asm ("clr %0\n\tfrob %1\n\tbeq 0f\n\tmov #1,%0\n0:"
20605           : "g" (result)
20606           : "g" (input));
20608 This assumes your assembler supports local labels, as the GNU assembler
20609 and most Unix assemblers do.
20611  Speaking of labels, jumps from one `asm' to another are not supported.
20612 The compiler's optimizers do not know about these jumps, and therefore
20613 they cannot take account of them when deciding how to optimize.
20615  Usually the most convenient way to use these `asm' instructions is to
20616 encapsulate them in macros that look like functions.  For example,
20618      #define sin(x)       \
20619      ({ double __value, __arg = (x);   \
20620         asm ("fsinx %1,%0": "=f" (__value): "f" (__arg));  \
20621         __value; })
20623 Here the variable `__arg' is used to make sure that the instruction
20624 operates on a proper `double' value, and to accept only those arguments
20625 `x' which can convert automatically to a `double'.
20627  Another way to make sure the instruction operates on the correct data
20628 type is to use a cast in the `asm'.  This is different from using a
20629 variable `__arg' in that it converts more different types.  For
20630 example, if the desired type were `int', casting the argument to `int'
20631 would accept a pointer with no complaint, while assigning the argument
20632 to an `int' variable named `__arg' would warn about using a pointer
20633 unless the caller explicitly casts it.
20635  If an `asm' has output operands, GCC assumes for optimization purposes
20636 the instruction has no side effects except to change the output
20637 operands.  This does not mean instructions with a side effect cannot be
20638 used, but you must be careful, because the compiler may eliminate them
20639 if the output operands aren't used, or move them out of loops, or
20640 replace two with one if they constitute a common subexpression.  Also,
20641 if your instruction does have a side effect on a variable that otherwise
20642 appears not to change, the old value of the variable may be reused later
20643 if it happens to be found in a register.
20645  You can prevent an `asm' instruction from being deleted by writing the
20646 keyword `volatile' after the `asm'.  For example:
20648      #define get_and_set_priority(new)              \
20649      ({ int __old;                                  \
20650         asm volatile ("get_and_set_priority %0, %1" \
20651                       : "=g" (__old) : "g" (new));  \
20652         __old; })
20654 The `volatile' keyword indicates that the instruction has important
20655 side-effects.  GCC will not delete a volatile `asm' if it is reachable.
20656 (The instruction can still be deleted if GCC can prove that
20657 control-flow will never reach the location of the instruction.)  Note
20658 that even a volatile `asm' instruction can be moved relative to other
20659 code, including across jump instructions.  For example, on many targets
20660 there is a system register which can be set to control the rounding
20661 mode of floating point operations.  You might try setting it with a
20662 volatile `asm', like this PowerPC example:
20664             asm volatile("mtfsf 255,%0" : : "f" (fpenv));
20665             sum = x + y;
20667 This will not work reliably, as the compiler may move the addition back
20668 before the volatile `asm'.  To make it work you need to add an
20669 artificial dependency to the `asm' referencing a variable in the code
20670 you don't want moved, for example:
20672          asm volatile ("mtfsf 255,%1" : "=X"(sum): "f"(fpenv));
20673          sum = x + y;
20675  Similarly, you can't expect a sequence of volatile `asm' instructions
20676 to remain perfectly consecutive.  If you want consecutive output, use a
20677 single `asm'.  Also, GCC will perform some optimizations across a
20678 volatile `asm' instruction; GCC does not "forget everything" when it
20679 encounters a volatile `asm' instruction the way some other compilers do.
20681  An `asm' instruction without any output operands will be treated
20682 identically to a volatile `asm' instruction.
20684  It is a natural idea to look for a way to give access to the condition
20685 code left by the assembler instruction.  However, when we attempted to
20686 implement this, we found no way to make it work reliably.  The problem
20687 is that output operands might need reloading, which would result in
20688 additional following "store" instructions.  On most machines, these
20689 instructions would alter the condition code before there was time to
20690 test it.  This problem doesn't arise for ordinary "test" and "compare"
20691 instructions because they don't have any output operands.
20693  For reasons similar to those described above, it is not possible to
20694 give an assembler instruction access to the condition code left by
20695 previous instructions.
20697  If you are writing a header file that should be includable in ISO C
20698 programs, write `__asm__' instead of `asm'.  *Note Alternate Keywords::.
20700 5.37.1 Size of an `asm'
20701 -----------------------
20703 Some targets require that GCC track the size of each instruction used in
20704 order to generate correct code.  Because the final length of an `asm'
20705 is only known by the assembler, GCC must make an estimate as to how big
20706 it will be.  The estimate is formed by counting the number of
20707 statements in the pattern of the `asm' and multiplying that by the
20708 length of the longest instruction on that processor.  Statements in the
20709 `asm' are identified by newline characters and whatever statement
20710 separator characters are supported by the assembler; on most processors
20711 this is the ``;'' character.
20713  Normally, GCC's estimate is perfectly adequate to ensure that correct
20714 code is generated, but it is possible to confuse the compiler if you use
20715 pseudo instructions or assembler macros that expand into multiple real
20716 instructions or if you use assembler directives that expand to more
20717 space in the object file than would be needed for a single instruction.
20718 If this happens then the assembler will produce a diagnostic saying that
20719 a label is unreachable.
20721 5.37.2 i386 floating point asm operands
20722 ---------------------------------------
20724 There are several rules on the usage of stack-like regs in asm_operands
20725 insns.  These rules apply only to the operands that are stack-like regs:
20727   1. Given a set of input regs that die in an asm_operands, it is
20728      necessary to know which are implicitly popped by the asm, and
20729      which must be explicitly popped by gcc.
20731      An input reg that is implicitly popped by the asm must be
20732      explicitly clobbered, unless it is constrained to match an output
20733      operand.
20735   2. For any input reg that is implicitly popped by an asm, it is
20736      necessary to know how to adjust the stack to compensate for the
20737      pop.  If any non-popped input is closer to the top of the
20738      reg-stack than the implicitly popped reg, it would not be possible
20739      to know what the stack looked like--it's not clear how the rest of
20740      the stack "slides up".
20742      All implicitly popped input regs must be closer to the top of the
20743      reg-stack than any input that is not implicitly popped.
20745      It is possible that if an input dies in an insn, reload might use
20746      the input reg for an output reload.  Consider this example:
20748           asm ("foo" : "=t" (a) : "f" (b));
20750      This asm says that input B is not popped by the asm, and that the
20751      asm pushes a result onto the reg-stack, i.e., the stack is one
20752      deeper after the asm than it was before.  But, it is possible that
20753      reload will think that it can use the same reg for both the input
20754      and the output, if input B dies in this insn.
20756      If any input operand uses the `f' constraint, all output reg
20757      constraints must use the `&' earlyclobber.
20759      The asm above would be written as
20761           asm ("foo" : "=&t" (a) : "f" (b));
20763   3. Some operands need to be in particular places on the stack.  All
20764      output operands fall in this category--there is no other way to
20765      know which regs the outputs appear in unless the user indicates
20766      this in the constraints.
20768      Output operands must specifically indicate which reg an output
20769      appears in after an asm.  `=f' is not allowed: the operand
20770      constraints must select a class with a single reg.
20772   4. Output operands may not be "inserted" between existing stack regs.
20773      Since no 387 opcode uses a read/write operand, all output operands
20774      are dead before the asm_operands, and are pushed by the
20775      asm_operands.  It makes no sense to push anywhere but the top of
20776      the reg-stack.
20778      Output operands must start at the top of the reg-stack: output
20779      operands may not "skip" a reg.
20781   5. Some asm statements may need extra stack space for internal
20782      calculations.  This can be guaranteed by clobbering stack registers
20783      unrelated to the inputs and outputs.
20786  Here are a couple of reasonable asms to want to write.  This asm takes
20787 one input, which is internally popped, and produces two outputs.
20789      asm ("fsincos" : "=t" (cos), "=u" (sin) : "0" (inp));
20791  This asm takes two inputs, which are popped by the `fyl2xp1' opcode,
20792 and replaces them with one output.  The user must code the `st(1)'
20793 clobber for reg-stack.c to know that `fyl2xp1' pops both inputs.
20795      asm ("fyl2xp1" : "=t" (result) : "0" (x), "u" (y) : "st(1)");
20797 \x1f
20798 File: gcc.info,  Node: Constraints,  Next: Asm Labels,  Prev: Extended Asm,  Up: C Extensions
20800 5.38 Constraints for `asm' Operands
20801 ===================================
20803 Here are specific details on what constraint letters you can use with
20804 `asm' operands.  Constraints can say whether an operand may be in a
20805 register, and which kinds of register; whether the operand can be a
20806 memory reference, and which kinds of address; whether the operand may
20807 be an immediate constant, and which possible values it may have.
20808 Constraints can also require two operands to match.
20810 * Menu:
20812 * Simple Constraints::  Basic use of constraints.
20813 * Multi-Alternative::   When an insn has two alternative constraint-patterns.
20814 * Modifiers::           More precise control over effects of constraints.
20815 * Machine Constraints:: Special constraints for some particular machines.
20817 \x1f
20818 File: gcc.info,  Node: Simple Constraints,  Next: Multi-Alternative,  Up: Constraints
20820 5.38.1 Simple Constraints
20821 -------------------------
20823 The simplest kind of constraint is a string full of letters, each of
20824 which describes one kind of operand that is permitted.  Here are the
20825 letters that are allowed:
20827 whitespace
20828      Whitespace characters are ignored and can be inserted at any
20829      position except the first.  This enables each alternative for
20830      different operands to be visually aligned in the machine
20831      description even if they have different number of constraints and
20832      modifiers.
20835      A memory operand is allowed, with any kind of address that the
20836      machine supports in general.  Note that the letter used for the
20837      general memory constraint can be re-defined by a back end using
20838      the `TARGET_MEM_CONSTRAINT' macro.
20841      A memory operand is allowed, but only if the address is
20842      "offsettable".  This means that adding a small integer (actually,
20843      the width in bytes of the operand, as determined by its machine
20844      mode) may be added to the address and the result is also a valid
20845      memory address.
20847      For example, an address which is constant is offsettable; so is an
20848      address that is the sum of a register and a constant (as long as a
20849      slightly larger constant is also within the range of
20850      address-offsets supported by the machine); but an autoincrement or
20851      autodecrement address is not offsettable.  More complicated
20852      indirect/indexed addresses may or may not be offsettable depending
20853      on the other addressing modes that the machine supports.
20855      Note that in an output operand which can be matched by another
20856      operand, the constraint letter `o' is valid only when accompanied
20857      by both `<' (if the target machine has predecrement addressing)
20858      and `>' (if the target machine has preincrement addressing).
20861      A memory operand that is not offsettable.  In other words,
20862      anything that would fit the `m' constraint but not the `o'
20863      constraint.
20866      A memory operand with autodecrement addressing (either
20867      predecrement or postdecrement) is allowed.
20870      A memory operand with autoincrement addressing (either
20871      preincrement or postincrement) is allowed.
20874      A register operand is allowed provided that it is in a general
20875      register.
20878      An immediate integer operand (one with constant value) is allowed.
20879      This includes symbolic constants whose values will be known only at
20880      assembly time or later.
20883      An immediate integer operand with a known numeric value is allowed.
20884      Many systems cannot support assembly-time constants for operands
20885      less than a word wide.  Constraints for these operands should use
20886      `n' rather than `i'.
20888 `I', `J', `K', ... `P'
20889      Other letters in the range `I' through `P' may be defined in a
20890      machine-dependent fashion to permit immediate integer operands with
20891      explicit integer values in specified ranges.  For example, on the
20892      68000, `I' is defined to stand for the range of values 1 to 8.
20893      This is the range permitted as a shift count in the shift
20894      instructions.
20897      An immediate floating operand (expression code `const_double') is
20898      allowed, but only if the target floating point format is the same
20899      as that of the host machine (on which the compiler is running).
20902      An immediate floating operand (expression code `const_double' or
20903      `const_vector') is allowed.
20905 `G', `H'
20906      `G' and `H' may be defined in a machine-dependent fashion to
20907      permit immediate floating operands in particular ranges of values.
20910      An immediate integer operand whose value is not an explicit
20911      integer is allowed.
20913      This might appear strange; if an insn allows a constant operand
20914      with a value not known at compile time, it certainly must allow
20915      any known value.  So why use `s' instead of `i'?  Sometimes it
20916      allows better code to be generated.
20918      For example, on the 68000 in a fullword instruction it is possible
20919      to use an immediate operand; but if the immediate value is between
20920      -128 and 127, better code results from loading the value into a
20921      register and using the register.  This is because the load into
20922      the register can be done with a `moveq' instruction.  We arrange
20923      for this to happen by defining the letter `K' to mean "any integer
20924      outside the range -128 to 127", and then specifying `Ks' in the
20925      operand constraints.
20928      Any register, memory or immediate integer operand is allowed,
20929      except for registers that are not general registers.
20932      Any operand whatsoever is allowed.
20934 `0', `1', `2', ... `9'
20935      An operand that matches the specified operand number is allowed.
20936      If a digit is used together with letters within the same
20937      alternative, the digit should come last.
20939      This number is allowed to be more than a single digit.  If multiple
20940      digits are encountered consecutively, they are interpreted as a
20941      single decimal integer.  There is scant chance for ambiguity,
20942      since to-date it has never been desirable that `10' be interpreted
20943      as matching either operand 1 _or_ operand 0.  Should this be
20944      desired, one can use multiple alternatives instead.
20946      This is called a "matching constraint" and what it really means is
20947      that the assembler has only a single operand that fills two roles
20948      which `asm' distinguishes.  For example, an add instruction uses
20949      two input operands and an output operand, but on most CISC
20950      machines an add instruction really has only two operands, one of
20951      them an input-output operand:
20953           addl #35,r12
20955      Matching constraints are used in these circumstances.  More
20956      precisely, the two operands that match must include one input-only
20957      operand and one output-only operand.  Moreover, the digit must be a
20958      smaller number than the number of the operand that uses it in the
20959      constraint.
20962      An operand that is a valid memory address is allowed.  This is for
20963      "load address" and "push address" instructions.
20965      `p' in the constraint must be accompanied by `address_operand' as
20966      the predicate in the `match_operand'.  This predicate interprets
20967      the mode specified in the `match_operand' as the mode of the memory
20968      reference for which the address would be valid.
20970 OTHER-LETTERS
20971      Other letters can be defined in machine-dependent fashion to stand
20972      for particular classes of registers or other arbitrary operand
20973      types.  `d', `a' and `f' are defined on the 68000/68020 to stand
20974      for data, address and floating point registers.
20976 \x1f
20977 File: gcc.info,  Node: Multi-Alternative,  Next: Modifiers,  Prev: Simple Constraints,  Up: Constraints
20979 5.38.2 Multiple Alternative Constraints
20980 ---------------------------------------
20982 Sometimes a single instruction has multiple alternative sets of possible
20983 operands.  For example, on the 68000, a logical-or instruction can
20984 combine register or an immediate value into memory, or it can combine
20985 any kind of operand into a register; but it cannot combine one memory
20986 location into another.
20988  These constraints are represented as multiple alternatives.  An
20989 alternative can be described by a series of letters for each operand.
20990 The overall constraint for an operand is made from the letters for this
20991 operand from the first alternative, a comma, the letters for this
20992 operand from the second alternative, a comma, and so on until the last
20993 alternative.
20995  If all the operands fit any one alternative, the instruction is valid.
20996 Otherwise, for each alternative, the compiler counts how many
20997 instructions must be added to copy the operands so that that
20998 alternative applies.  The alternative requiring the least copying is
20999 chosen.  If two alternatives need the same amount of copying, the one
21000 that comes first is chosen.  These choices can be altered with the `?'
21001 and `!' characters:
21004      Disparage slightly the alternative that the `?' appears in, as a
21005      choice when no alternative applies exactly.  The compiler regards
21006      this alternative as one unit more costly for each `?' that appears
21007      in it.
21010      Disparage severely the alternative that the `!' appears in.  This
21011      alternative can still be used if it fits without reloading, but if
21012      reloading is needed, some other alternative will be used.
21014 \x1f
21015 File: gcc.info,  Node: Modifiers,  Next: Machine Constraints,  Prev: Multi-Alternative,  Up: Constraints
21017 5.38.3 Constraint Modifier Characters
21018 -------------------------------------
21020 Here are constraint modifier characters.
21023      Means that this operand is write-only for this instruction: the
21024      previous value is discarded and replaced by output data.
21027      Means that this operand is both read and written by the
21028      instruction.
21030      When the compiler fixes up the operands to satisfy the constraints,
21031      it needs to know which operands are inputs to the instruction and
21032      which are outputs from it.  `=' identifies an output; `+'
21033      identifies an operand that is both input and output; all other
21034      operands are assumed to be input only.
21036      If you specify `=' or `+' in a constraint, you put it in the first
21037      character of the constraint string.
21040      Means (in a particular alternative) that this operand is an
21041      "earlyclobber" operand, which is modified before the instruction is
21042      finished using the input operands.  Therefore, this operand may
21043      not lie in a register that is used as an input operand or as part
21044      of any memory address.
21046      `&' applies only to the alternative in which it is written.  In
21047      constraints with multiple alternatives, sometimes one alternative
21048      requires `&' while others do not.  See, for example, the `movdf'
21049      insn of the 68000.
21051      An input operand can be tied to an earlyclobber operand if its only
21052      use as an input occurs before the early result is written.  Adding
21053      alternatives of this form often allows GCC to produce better code
21054      when only some of the inputs can be affected by the earlyclobber.
21055      See, for example, the `mulsi3' insn of the ARM.
21057      `&' does not obviate the need to write `='.
21060      Declares the instruction to be commutative for this operand and the
21061      following operand.  This means that the compiler may interchange
21062      the two operands if that is the cheapest way to make all operands
21063      fit the constraints.  GCC can only handle one commutative pair in
21064      an asm; if you use more, the compiler may fail.  Note that you
21065      need not use the modifier if the two alternatives are strictly
21066      identical; this would only waste time in the reload pass.  The
21067      modifier is not operational after register allocation, so the
21068      result of `define_peephole2' and `define_split's performed after
21069      reload cannot rely on `%' to make the intended insn match.
21072      Says that all following characters, up to the next comma, are to be
21073      ignored as a constraint.  They are significant only for choosing
21074      register preferences.
21077      Says that the following character should be ignored when choosing
21078      register preferences.  `*' has no effect on the meaning of the
21079      constraint as a constraint, and no effect on reloading.
21082 \x1f
21083 File: gcc.info,  Node: Machine Constraints,  Prev: Modifiers,  Up: Constraints
21085 5.38.4 Constraints for Particular Machines
21086 ------------------------------------------
21088 Whenever possible, you should use the general-purpose constraint letters
21089 in `asm' arguments, since they will convey meaning more readily to
21090 people reading your code.  Failing that, use the constraint letters
21091 that usually have very similar meanings across architectures.  The most
21092 commonly used constraints are `m' and `r' (for memory and
21093 general-purpose registers respectively; *note Simple Constraints::), and
21094 `I', usually the letter indicating the most common immediate-constant
21095 format.
21097  Each architecture defines additional constraints.  These constraints
21098 are used by the compiler itself for instruction generation, as well as
21099 for `asm' statements; therefore, some of the constraints are not
21100 particularly useful for `asm'.  Here is a summary of some of the
21101 machine-dependent constraints available on some particular machines; it
21102 includes both constraints that are useful for `asm' and constraints
21103 that aren't.  The compiler source file mentioned in the table heading
21104 for each architecture is the definitive reference for the meanings of
21105 that architecture's constraints.
21107 _ARM family--`config/arm/arm.h'_
21109     `f'
21110           Floating-point register
21112     `w'
21113           VFP floating-point register
21115     `F'
21116           One of the floating-point constants 0.0, 0.5, 1.0, 2.0, 3.0,
21117           4.0, 5.0 or 10.0
21119     `G'
21120           Floating-point constant that would satisfy the constraint `F'
21121           if it were negated
21123     `I'
21124           Integer that is valid as an immediate operand in a data
21125           processing instruction.  That is, an integer in the range 0
21126           to 255 rotated by a multiple of 2
21128     `J'
21129           Integer in the range -4095 to 4095
21131     `K'
21132           Integer that satisfies constraint `I' when inverted (ones
21133           complement)
21135     `L'
21136           Integer that satisfies constraint `I' when negated (twos
21137           complement)
21139     `M'
21140           Integer in the range 0 to 32
21142     `Q'
21143           A memory reference where the exact address is in a single
21144           register (``m'' is preferable for `asm' statements)
21146     `R'
21147           An item in the constant pool
21149     `S'
21150           A symbol in the text segment of the current file
21152     `Uv'
21153           A memory reference suitable for VFP load/store insns
21154           (reg+constant offset)
21156     `Uy'
21157           A memory reference suitable for iWMMXt load/store
21158           instructions.
21160     `Uq'
21161           A memory reference suitable for the ARMv4 ldrsb instruction.
21163 _AVR family--`config/avr/constraints.md'_
21165     `l'
21166           Registers from r0 to r15
21168     `a'
21169           Registers from r16 to r23
21171     `d'
21172           Registers from r16 to r31
21174     `w'
21175           Registers from r24 to r31.  These registers can be used in
21176           `adiw' command
21178     `e'
21179           Pointer register (r26-r31)
21181     `b'
21182           Base pointer register (r28-r31)
21184     `q'
21185           Stack pointer register (SPH:SPL)
21187     `t'
21188           Temporary register r0
21190     `x'
21191           Register pair X (r27:r26)
21193     `y'
21194           Register pair Y (r29:r28)
21196     `z'
21197           Register pair Z (r31:r30)
21199     `I'
21200           Constant greater than -1, less than 64
21202     `J'
21203           Constant greater than -64, less than 1
21205     `K'
21206           Constant integer 2
21208     `L'
21209           Constant integer 0
21211     `M'
21212           Constant that fits in 8 bits
21214     `N'
21215           Constant integer -1
21217     `O'
21218           Constant integer 8, 16, or 24
21220     `P'
21221           Constant integer 1
21223     `G'
21224           A floating point constant 0.0
21226     `R'
21227           Integer constant in the range -6 ... 5.
21229     `Q'
21230           A memory address based on Y or Z pointer with displacement.
21232 _CRX Architecture--`config/crx/crx.h'_
21234     `b'
21235           Registers from r0 to r14 (registers without stack pointer)
21237     `l'
21238           Register r16 (64-bit accumulator lo register)
21240     `h'
21241           Register r17 (64-bit accumulator hi register)
21243     `k'
21244           Register pair r16-r17. (64-bit accumulator lo-hi pair)
21246     `I'
21247           Constant that fits in 3 bits
21249     `J'
21250           Constant that fits in 4 bits
21252     `K'
21253           Constant that fits in 5 bits
21255     `L'
21256           Constant that is one of -1, 4, -4, 7, 8, 12, 16, 20, 32, 48
21258     `G'
21259           Floating point constant that is legal for store immediate
21261 _Hewlett-Packard PA-RISC--`config/pa/pa.h'_
21263     `a'
21264           General register 1
21266     `f'
21267           Floating point register
21269     `q'
21270           Shift amount register
21272     `x'
21273           Floating point register (deprecated)
21275     `y'
21276           Upper floating point register (32-bit), floating point
21277           register (64-bit)
21279     `Z'
21280           Any register
21282     `I'
21283           Signed 11-bit integer constant
21285     `J'
21286           Signed 14-bit integer constant
21288     `K'
21289           Integer constant that can be deposited with a `zdepi'
21290           instruction
21292     `L'
21293           Signed 5-bit integer constant
21295     `M'
21296           Integer constant 0
21298     `N'
21299           Integer constant that can be loaded with a `ldil' instruction
21301     `O'
21302           Integer constant whose value plus one is a power of 2
21304     `P'
21305           Integer constant that can be used for `and' operations in
21306           `depi' and `extru' instructions
21308     `S'
21309           Integer constant 31
21311     `U'
21312           Integer constant 63
21314     `G'
21315           Floating-point constant 0.0
21317     `A'
21318           A `lo_sum' data-linkage-table memory operand
21320     `Q'
21321           A memory operand that can be used as the destination operand
21322           of an integer store instruction
21324     `R'
21325           A scaled or unscaled indexed memory operand
21327     `T'
21328           A memory operand for floating-point loads and stores
21330     `W'
21331           A register indirect memory operand
21333 _picoChip family--`picochip.h'_
21335     `k'
21336           Stack register.
21338     `f'
21339           Pointer register.  A register which can be used to access
21340           memory without supplying an offset.  Any other register can
21341           be used to access memory, but will need a constant offset.
21342           In the case of the offset being zero, it is more efficient to
21343           use a pointer register, since this reduces code size.
21345     `t'
21346           A twin register.  A register which may be paired with an
21347           adjacent register to create a 32-bit register.
21349     `a'
21350           Any absolute memory address (e.g., symbolic constant, symbolic
21351           constant + offset).
21353     `I'
21354           4-bit signed integer.
21356     `J'
21357           4-bit unsigned integer.
21359     `K'
21360           8-bit signed integer.
21362     `M'
21363           Any constant whose absolute value is no greater than 4-bits.
21365     `N'
21366           10-bit signed integer
21368     `O'
21369           16-bit signed integer.
21372 _PowerPC and IBM RS6000--`config/rs6000/rs6000.h'_
21374     `b'
21375           Address base register
21377     `f'
21378           Floating point register
21380     `v'
21381           Vector register
21383     `h'
21384           `MQ', `CTR', or `LINK' register
21386     `q'
21387           `MQ' register
21389     `c'
21390           `CTR' register
21392     `l'
21393           `LINK' register
21395     `x'
21396           `CR' register (condition register) number 0
21398     `y'
21399           `CR' register (condition register)
21401     `z'
21402           `FPMEM' stack memory for FPR-GPR transfers
21404     `I'
21405           Signed 16-bit constant
21407     `J'
21408           Unsigned 16-bit constant shifted left 16 bits (use `L'
21409           instead for `SImode' constants)
21411     `K'
21412           Unsigned 16-bit constant
21414     `L'
21415           Signed 16-bit constant shifted left 16 bits
21417     `M'
21418           Constant larger than 31
21420     `N'
21421           Exact power of 2
21423     `O'
21424           Zero
21426     `P'
21427           Constant whose negation is a signed 16-bit constant
21429     `G'
21430           Floating point constant that can be loaded into a register
21431           with one instruction per word
21433     `H'
21434           Integer/Floating point constant that can be loaded into a
21435           register using three instructions
21437     `Q'
21438           Memory operand that is an offset from a register (`m' is
21439           preferable for `asm' statements)
21441     `Z'
21442           Memory operand that is an indexed or indirect from a register
21443           (`m' is preferable for `asm' statements)
21445     `R'
21446           AIX TOC entry
21448     `a'
21449           Address operand that is an indexed or indirect from a
21450           register (`p' is preferable for `asm' statements)
21452     `S'
21453           Constant suitable as a 64-bit mask operand
21455     `T'
21456           Constant suitable as a 32-bit mask operand
21458     `U'
21459           System V Release 4 small data area reference
21461     `t'
21462           AND masks that can be performed by two rldic{l, r}
21463           instructions
21465     `W'
21466           Vector constant that does not require memory
21469 _Intel 386--`config/i386/constraints.md'_
21471     `R'
21472           Legacy register--the eight integer registers available on all
21473           i386 processors (`a', `b', `c', `d', `si', `di', `bp', `sp').
21475     `q'
21476           Any register accessible as `Rl'.  In 32-bit mode, `a', `b',
21477           `c', and `d'; in 64-bit mode, any integer register.
21479     `Q'
21480           Any register accessible as `Rh': `a', `b', `c', and `d'.
21482     `a'
21483           The `a' register.
21485     `b'
21486           The `b' register.
21488     `c'
21489           The `c' register.
21491     `d'
21492           The `d' register.
21494     `S'
21495           The `si' register.
21497     `D'
21498           The `di' register.
21500     `A'
21501           The `a' and `d' registers, as a pair (for instructions that
21502           return half the result in one and half in the other).
21504     `f'
21505           Any 80387 floating-point (stack) register.
21507     `t'
21508           Top of 80387 floating-point stack (`%st(0)').
21510     `u'
21511           Second from top of 80387 floating-point stack (`%st(1)').
21513     `y'
21514           Any MMX register.
21516     `x'
21517           Any SSE register.
21519     `Yz'
21520           First SSE register (`%xmm0').
21522     `I'
21523           Integer constant in the range 0 ... 31, for 32-bit shifts.
21525     `J'
21526           Integer constant in the range 0 ... 63, for 64-bit shifts.
21528     `K'
21529           Signed 8-bit integer constant.
21531     `L'
21532           `0xFF' or `0xFFFF', for andsi as a zero-extending move.
21534     `M'
21535           0, 1, 2, or 3 (shifts for the `lea' instruction).
21537     `N'
21538           Unsigned 8-bit integer constant (for `in' and `out'
21539           instructions).
21541     `G'
21542           Standard 80387 floating point constant.
21544     `C'
21545           Standard SSE floating point constant.
21547     `e'
21548           32-bit signed integer constant, or a symbolic reference known
21549           to fit that range (for immediate operands in sign-extending
21550           x86-64 instructions).
21552     `Z'
21553           32-bit unsigned integer constant, or a symbolic reference
21554           known to fit that range (for immediate operands in
21555           zero-extending x86-64 instructions).
21558 _Intel IA-64--`config/ia64/ia64.h'_
21560     `a'
21561           General register `r0' to `r3' for `addl' instruction
21563     `b'
21564           Branch register
21566     `c'
21567           Predicate register (`c' as in "conditional")
21569     `d'
21570           Application register residing in M-unit
21572     `e'
21573           Application register residing in I-unit
21575     `f'
21576           Floating-point register
21578     `m'
21579           Memory operand.  Remember that `m' allows postincrement and
21580           postdecrement which require printing with `%Pn' on IA-64.
21581           Use `S' to disallow postincrement and postdecrement.
21583     `G'
21584           Floating-point constant 0.0 or 1.0
21586     `I'
21587           14-bit signed integer constant
21589     `J'
21590           22-bit signed integer constant
21592     `K'
21593           8-bit signed integer constant for logical instructions
21595     `L'
21596           8-bit adjusted signed integer constant for compare pseudo-ops
21598     `M'
21599           6-bit unsigned integer constant for shift counts
21601     `N'
21602           9-bit signed integer constant for load and store
21603           postincrements
21605     `O'
21606           The constant zero
21608     `P'
21609           0 or -1 for `dep' instruction
21611     `Q'
21612           Non-volatile memory for floating-point loads and stores
21614     `R'
21615           Integer constant in the range 1 to 4 for `shladd' instruction
21617     `S'
21618           Memory operand except postincrement and postdecrement
21620 _FRV--`config/frv/frv.h'_
21622     `a'
21623           Register in the class `ACC_REGS' (`acc0' to `acc7').
21625     `b'
21626           Register in the class `EVEN_ACC_REGS' (`acc0' to `acc7').
21628     `c'
21629           Register in the class `CC_REGS' (`fcc0' to `fcc3' and `icc0'
21630           to `icc3').
21632     `d'
21633           Register in the class `GPR_REGS' (`gr0' to `gr63').
21635     `e'
21636           Register in the class `EVEN_REGS' (`gr0' to `gr63').  Odd
21637           registers are excluded not in the class but through the use
21638           of a machine mode larger than 4 bytes.
21640     `f'
21641           Register in the class `FPR_REGS' (`fr0' to `fr63').
21643     `h'
21644           Register in the class `FEVEN_REGS' (`fr0' to `fr63').  Odd
21645           registers are excluded not in the class but through the use
21646           of a machine mode larger than 4 bytes.
21648     `l'
21649           Register in the class `LR_REG' (the `lr' register).
21651     `q'
21652           Register in the class `QUAD_REGS' (`gr2' to `gr63').
21653           Register numbers not divisible by 4 are excluded not in the
21654           class but through the use of a machine mode larger than 8
21655           bytes.
21657     `t'
21658           Register in the class `ICC_REGS' (`icc0' to `icc3').
21660     `u'
21661           Register in the class `FCC_REGS' (`fcc0' to `fcc3').
21663     `v'
21664           Register in the class `ICR_REGS' (`cc4' to `cc7').
21666     `w'
21667           Register in the class `FCR_REGS' (`cc0' to `cc3').
21669     `x'
21670           Register in the class `QUAD_FPR_REGS' (`fr0' to `fr63').
21671           Register numbers not divisible by 4 are excluded not in the
21672           class but through the use of a machine mode larger than 8
21673           bytes.
21675     `z'
21676           Register in the class `SPR_REGS' (`lcr' and `lr').
21678     `A'
21679           Register in the class `QUAD_ACC_REGS' (`acc0' to `acc7').
21681     `B'
21682           Register in the class `ACCG_REGS' (`accg0' to `accg7').
21684     `C'
21685           Register in the class `CR_REGS' (`cc0' to `cc7').
21687     `G'
21688           Floating point constant zero
21690     `I'
21691           6-bit signed integer constant
21693     `J'
21694           10-bit signed integer constant
21696     `L'
21697           16-bit signed integer constant
21699     `M'
21700           16-bit unsigned integer constant
21702     `N'
21703           12-bit signed integer constant that is negative--i.e. in the
21704           range of -2048 to -1
21706     `O'
21707           Constant zero
21709     `P'
21710           12-bit signed integer constant that is greater than
21711           zero--i.e. in the range of 1 to 2047.
21714 _Blackfin family--`config/bfin/constraints.md'_
21716     `a'
21717           P register
21719     `d'
21720           D register
21722     `z'
21723           A call clobbered P register.
21725     `qN'
21726           A single register.  If N is in the range 0 to 7, the
21727           corresponding D register.  If it is `A', then the register P0.
21729     `D'
21730           Even-numbered D register
21732     `W'
21733           Odd-numbered D register
21735     `e'
21736           Accumulator register.
21738     `A'
21739           Even-numbered accumulator register.
21741     `B'
21742           Odd-numbered accumulator register.
21744     `b'
21745           I register
21747     `v'
21748           B register
21750     `f'
21751           M register
21753     `c'
21754           Registers used for circular buffering, i.e. I, B, or L
21755           registers.
21757     `C'
21758           The CC register.
21760     `t'
21761           LT0 or LT1.
21763     `k'
21764           LC0 or LC1.
21766     `u'
21767           LB0 or LB1.
21769     `x'
21770           Any D, P, B, M, I or L register.
21772     `y'
21773           Additional registers typically used only in prologues and
21774           epilogues: RETS, RETN, RETI, RETX, RETE, ASTAT, SEQSTAT and
21775           USP.
21777     `w'
21778           Any register except accumulators or CC.
21780     `Ksh'
21781           Signed 16 bit integer (in the range -32768 to 32767)
21783     `Kuh'
21784           Unsigned 16 bit integer (in the range 0 to 65535)
21786     `Ks7'
21787           Signed 7 bit integer (in the range -64 to 63)
21789     `Ku7'
21790           Unsigned 7 bit integer (in the range 0 to 127)
21792     `Ku5'
21793           Unsigned 5 bit integer (in the range 0 to 31)
21795     `Ks4'
21796           Signed 4 bit integer (in the range -8 to 7)
21798     `Ks3'
21799           Signed 3 bit integer (in the range -3 to 4)
21801     `Ku3'
21802           Unsigned 3 bit integer (in the range 0 to 7)
21804     `PN'
21805           Constant N, where N is a single-digit constant in the range 0
21806           to 4.
21808     `PA'
21809           An integer equal to one of the MACFLAG_XXX constants that is
21810           suitable for use with either accumulator.
21812     `PB'
21813           An integer equal to one of the MACFLAG_XXX constants that is
21814           suitable for use only with accumulator A1.
21816     `M1'
21817           Constant 255.
21819     `M2'
21820           Constant 65535.
21822     `J'
21823           An integer constant with exactly a single bit set.
21825     `L'
21826           An integer constant with all bits set except exactly one.
21828     `H'
21830     `Q'
21831           Any SYMBOL_REF.
21833 _M32C--`config/m32c/m32c.c'_
21835     `Rsp'
21836     `Rfb'
21837     `Rsb'
21838           `$sp', `$fb', `$sb'.
21840     `Rcr'
21841           Any control register, when they're 16 bits wide (nothing if
21842           control registers are 24 bits wide)
21844     `Rcl'
21845           Any control register, when they're 24 bits wide.
21847     `R0w'
21848     `R1w'
21849     `R2w'
21850     `R3w'
21851           $r0, $r1, $r2, $r3.
21853     `R02'
21854           $r0 or $r2, or $r2r0 for 32 bit values.
21856     `R13'
21857           $r1 or $r3, or $r3r1 for 32 bit values.
21859     `Rdi'
21860           A register that can hold a 64 bit value.
21862     `Rhl'
21863           $r0 or $r1 (registers with addressable high/low bytes)
21865     `R23'
21866           $r2 or $r3
21868     `Raa'
21869           Address registers
21871     `Raw'
21872           Address registers when they're 16 bits wide.
21874     `Ral'
21875           Address registers when they're 24 bits wide.
21877     `Rqi'
21878           Registers that can hold QI values.
21880     `Rad'
21881           Registers that can be used with displacements ($a0, $a1, $sb).
21883     `Rsi'
21884           Registers that can hold 32 bit values.
21886     `Rhi'
21887           Registers that can hold 16 bit values.
21889     `Rhc'
21890           Registers chat can hold 16 bit values, including all control
21891           registers.
21893     `Rra'
21894           $r0 through R1, plus $a0 and $a1.
21896     `Rfl'
21897           The flags register.
21899     `Rmm'
21900           The memory-based pseudo-registers $mem0 through $mem15.
21902     `Rpi'
21903           Registers that can hold pointers (16 bit registers for r8c,
21904           m16c; 24 bit registers for m32cm, m32c).
21906     `Rpa'
21907           Matches multiple registers in a PARALLEL to form a larger
21908           register.  Used to match function return values.
21910     `Is3'
21911           -8 ... 7
21913     `IS1'
21914           -128 ... 127
21916     `IS2'
21917           -32768 ... 32767
21919     `IU2'
21920           0 ... 65535
21922     `In4'
21923           -8 ... -1 or 1 ... 8
21925     `In5'
21926           -16 ... -1 or 1 ... 16
21928     `In6'
21929           -32 ... -1 or 1 ... 32
21931     `IM2'
21932           -65536 ... -1
21934     `Ilb'
21935           An 8 bit value with exactly one bit set.
21937     `Ilw'
21938           A 16 bit value with exactly one bit set.
21940     `Sd'
21941           The common src/dest memory addressing modes.
21943     `Sa'
21944           Memory addressed using $a0 or $a1.
21946     `Si'
21947           Memory addressed with immediate addresses.
21949     `Ss'
21950           Memory addressed using the stack pointer ($sp).
21952     `Sf'
21953           Memory addressed using the frame base register ($fb).
21955     `Ss'
21956           Memory addressed using the small base register ($sb).
21958     `S1'
21959           $r1h
21961 _MIPS--`config/mips/constraints.md'_
21963     `d'
21964           An address register.  This is equivalent to `r' unless
21965           generating MIPS16 code.
21967     `f'
21968           A floating-point register (if available).
21970     `h'
21971           Formerly the `hi' register.  This constraint is no longer
21972           supported.
21974     `l'
21975           The `lo' register.  Use this register to store values that are
21976           no bigger than a word.
21978     `x'
21979           The concatenated `hi' and `lo' registers.  Use this register
21980           to store doubleword values.
21982     `c'
21983           A register suitable for use in an indirect jump.  This will
21984           always be `$25' for `-mabicalls'.
21986     `v'
21987           Register `$3'.  Do not use this constraint in new code; it is
21988           retained only for compatibility with glibc.
21990     `y'
21991           Equivalent to `r'; retained for backwards compatibility.
21993     `z'
21994           A floating-point condition code register.
21996     `I'
21997           A signed 16-bit constant (for arithmetic instructions).
21999     `J'
22000           Integer zero.
22002     `K'
22003           An unsigned 16-bit constant (for logic instructions).
22005     `L'
22006           A signed 32-bit constant in which the lower 16 bits are zero.
22007           Such constants can be loaded using `lui'.
22009     `M'
22010           A constant that cannot be loaded using `lui', `addiu' or
22011           `ori'.
22013     `N'
22014           A constant in the range -65535 to -1 (inclusive).
22016     `O'
22017           A signed 15-bit constant.
22019     `P'
22020           A constant in the range 1 to 65535 (inclusive).
22022     `G'
22023           Floating-point zero.
22025     `R'
22026           An address that can be used in a non-macro load or store.
22028 _Motorola 680x0--`config/m68k/constraints.md'_
22030     `a'
22031           Address register
22033     `d'
22034           Data register
22036     `f'
22037           68881 floating-point register, if available
22039     `I'
22040           Integer in the range 1 to 8
22042     `J'
22043           16-bit signed number
22045     `K'
22046           Signed number whose magnitude is greater than 0x80
22048     `L'
22049           Integer in the range -8 to -1
22051     `M'
22052           Signed number whose magnitude is greater than 0x100
22054     `N'
22055           Range 24 to 31, rotatert:SI 8 to 1 expressed as rotate
22057     `O'
22058           16 (for rotate using swap)
22060     `P'
22061           Range 8 to 15, rotatert:HI 8 to 1 expressed as rotate
22063     `R'
22064           Numbers that mov3q can handle
22066     `G'
22067           Floating point constant that is not a 68881 constant
22069     `S'
22070           Operands that satisfy 'm' when -mpcrel is in effect
22072     `T'
22073           Operands that satisfy 's' when -mpcrel is not in effect
22075     `Q'
22076           Address register indirect addressing mode
22078     `U'
22079           Register offset addressing
22081     `W'
22082           const_call_operand
22084     `Cs'
22085           symbol_ref or const
22087     `Ci'
22088           const_int
22090     `C0'
22091           const_int 0
22093     `Cj'
22094           Range of signed numbers that don't fit in 16 bits
22096     `Cmvq'
22097           Integers valid for mvq
22099     `Capsw'
22100           Integers valid for a moveq followed by a swap
22102     `Cmvz'
22103           Integers valid for mvz
22105     `Cmvs'
22106           Integers valid for mvs
22108     `Ap'
22109           push_operand
22111     `Ac'
22112           Non-register operands allowed in clr
22115 _Motorola 68HC11 & 68HC12 families--`config/m68hc11/m68hc11.h'_
22117     `a'
22118           Register `a'
22120     `b'
22121           Register `b'
22123     `d'
22124           Register `d'
22126     `q'
22127           An 8-bit register
22129     `t'
22130           Temporary soft register _.tmp
22132     `u'
22133           A soft register _.d1 to _.d31
22135     `w'
22136           Stack pointer register
22138     `x'
22139           Register `x'
22141     `y'
22142           Register `y'
22144     `z'
22145           Pseudo register `z' (replaced by `x' or `y' at the end)
22147     `A'
22148           An address register: x, y or z
22150     `B'
22151           An address register: x or y
22153     `D'
22154           Register pair (x:d) to form a 32-bit value
22156     `L'
22157           Constants in the range -65536 to 65535
22159     `M'
22160           Constants whose 16-bit low part is zero
22162     `N'
22163           Constant integer 1 or -1
22165     `O'
22166           Constant integer 16
22168     `P'
22169           Constants in the range -8 to 2
22172 _SPARC--`config/sparc/sparc.h'_
22174     `f'
22175           Floating-point register on the SPARC-V8 architecture and
22176           lower floating-point register on the SPARC-V9 architecture.
22178     `e'
22179           Floating-point register.  It is equivalent to `f' on the
22180           SPARC-V8 architecture and contains both lower and upper
22181           floating-point registers on the SPARC-V9 architecture.
22183     `c'
22184           Floating-point condition code register.
22186     `d'
22187           Lower floating-point register.  It is only valid on the
22188           SPARC-V9 architecture when the Visual Instruction Set is
22189           available.
22191     `b'
22192           Floating-point register.  It is only valid on the SPARC-V9
22193           architecture when the Visual Instruction Set is available.
22195     `h'
22196           64-bit global or out register for the SPARC-V8+ architecture.
22198     `D'
22199           A vector constant
22201     `I'
22202           Signed 13-bit constant
22204     `J'
22205           Zero
22207     `K'
22208           32-bit constant with the low 12 bits clear (a constant that
22209           can be loaded with the `sethi' instruction)
22211     `L'
22212           A constant in the range supported by `movcc' instructions
22214     `M'
22215           A constant in the range supported by `movrcc' instructions
22217     `N'
22218           Same as `K', except that it verifies that bits that are not
22219           in the lower 32-bit range are all zero.  Must be used instead
22220           of `K' for modes wider than `SImode'
22222     `O'
22223           The constant 4096
22225     `G'
22226           Floating-point zero
22228     `H'
22229           Signed 13-bit constant, sign-extended to 32 or 64 bits
22231     `Q'
22232           Floating-point constant whose integral representation can be
22233           moved into an integer register using a single sethi
22234           instruction
22236     `R'
22237           Floating-point constant whose integral representation can be
22238           moved into an integer register using a single mov instruction
22240     `S'
22241           Floating-point constant whose integral representation can be
22242           moved into an integer register using a high/lo_sum
22243           instruction sequence
22245     `T'
22246           Memory address aligned to an 8-byte boundary
22248     `U'
22249           Even register
22251     `W'
22252           Memory address for `e' constraint registers
22254     `Y'
22255           Vector zero
22258 _SPU--`config/spu/spu.h'_
22260     `a'
22261           An immediate which can be loaded with the il/ila/ilh/ilhu
22262           instructions.  const_int is treated as a 64 bit value.
22264     `c'
22265           An immediate for and/xor/or instructions.  const_int is
22266           treated as a 64 bit value.
22268     `d'
22269           An immediate for the `iohl' instruction.  const_int is
22270           treated as a 64 bit value.
22272     `f'
22273           An immediate which can be loaded with `fsmbi'.
22275     `A'
22276           An immediate which can be loaded with the il/ila/ilh/ilhu
22277           instructions.  const_int is treated as a 32 bit value.
22279     `B'
22280           An immediate for most arithmetic instructions.  const_int is
22281           treated as a 32 bit value.
22283     `C'
22284           An immediate for and/xor/or instructions.  const_int is
22285           treated as a 32 bit value.
22287     `D'
22288           An immediate for the `iohl' instruction.  const_int is
22289           treated as a 32 bit value.
22291     `I'
22292           A constant in the range [-64, 63] for shift/rotate
22293           instructions.
22295     `J'
22296           An unsigned 7-bit constant for conversion/nop/channel
22297           instructions.
22299     `K'
22300           A signed 10-bit constant for most arithmetic instructions.
22302     `M'
22303           A signed 16 bit immediate for `stop'.
22305     `N'
22306           An unsigned 16-bit constant for `iohl' and `fsmbi'.
22308     `O'
22309           An unsigned 7-bit constant whose 3 least significant bits are
22310           0.
22312     `P'
22313           An unsigned 3-bit constant for 16-byte rotates and shifts
22315     `R'
22316           Call operand, reg, for indirect calls
22318     `S'
22319           Call operand, symbol, for relative calls.
22321     `T'
22322           Call operand, const_int, for absolute calls.
22324     `U'
22325           An immediate which can be loaded with the il/ila/ilh/ilhu
22326           instructions.  const_int is sign extended to 128 bit.
22328     `W'
22329           An immediate for shift and rotate instructions.  const_int is
22330           treated as a 32 bit value.
22332     `Y'
22333           An immediate for and/xor/or instructions.  const_int is sign
22334           extended as a 128 bit.
22336     `Z'
22337           An immediate for the `iohl' instruction.  const_int is sign
22338           extended to 128 bit.
22341 _S/390 and zSeries--`config/s390/s390.h'_
22343     `a'
22344           Address register (general purpose register except r0)
22346     `c'
22347           Condition code register
22349     `d'
22350           Data register (arbitrary general purpose register)
22352     `f'
22353           Floating-point register
22355     `I'
22356           Unsigned 8-bit constant (0-255)
22358     `J'
22359           Unsigned 12-bit constant (0-4095)
22361     `K'
22362           Signed 16-bit constant (-32768-32767)
22364     `L'
22365           Value appropriate as displacement.
22366          `(0..4095)'
22367                for short displacement
22369          `(-524288..524287)'
22370                for long displacement
22372     `M'
22373           Constant integer with a value of 0x7fffffff.
22375     `N'
22376           Multiple letter constraint followed by 4 parameter letters.
22377          `0..9:'
22378                number of the part counting from most to least
22379                significant
22381          `H,Q:'
22382                mode of the part
22384          `D,S,H:'
22385                mode of the containing operand
22387          `0,F:'
22388                value of the other parts (F--all bits set)
22389           The constraint matches if the specified part of a constant
22390           has a value different from its other parts.
22392     `Q'
22393           Memory reference without index register and with short
22394           displacement.
22396     `R'
22397           Memory reference with index register and short displacement.
22399     `S'
22400           Memory reference without index register but with long
22401           displacement.
22403     `T'
22404           Memory reference with index register and long displacement.
22406     `U'
22407           Pointer with short displacement.
22409     `W'
22410           Pointer with long displacement.
22412     `Y'
22413           Shift count operand.
22416 _Score family--`config/score/score.h'_
22418     `d'
22419           Registers from r0 to r32.
22421     `e'
22422           Registers from r0 to r16.
22424     `t'
22425           r8--r11 or r22--r27 registers.
22427     `h'
22428           hi register.
22430     `l'
22431           lo register.
22433     `x'
22434           hi + lo register.
22436     `q'
22437           cnt register.
22439     `y'
22440           lcb register.
22442     `z'
22443           scb register.
22445     `a'
22446           cnt + lcb + scb register.
22448     `c'
22449           cr0--cr15 register.
22451     `b'
22452           cp1 registers.
22454     `f'
22455           cp2 registers.
22457     `i'
22458           cp3 registers.
22460     `j'
22461           cp1 + cp2 + cp3 registers.
22463     `I'
22464           High 16-bit constant (32-bit constant with 16 LSBs zero).
22466     `J'
22467           Unsigned 5 bit integer (in the range 0 to 31).
22469     `K'
22470           Unsigned 16 bit integer (in the range 0 to 65535).
22472     `L'
22473           Signed 16 bit integer (in the range -32768 to 32767).
22475     `M'
22476           Unsigned 14 bit integer (in the range 0 to 16383).
22478     `N'
22479           Signed 14 bit integer (in the range -8192 to 8191).
22481     `Z'
22482           Any SYMBOL_REF.
22484 _Xstormy16--`config/stormy16/stormy16.h'_
22486     `a'
22487           Register r0.
22489     `b'
22490           Register r1.
22492     `c'
22493           Register r2.
22495     `d'
22496           Register r8.
22498     `e'
22499           Registers r0 through r7.
22501     `t'
22502           Registers r0 and r1.
22504     `y'
22505           The carry register.
22507     `z'
22508           Registers r8 and r9.
22510     `I'
22511           A constant between 0 and 3 inclusive.
22513     `J'
22514           A constant that has exactly one bit set.
22516     `K'
22517           A constant that has exactly one bit clear.
22519     `L'
22520           A constant between 0 and 255 inclusive.
22522     `M'
22523           A constant between -255 and 0 inclusive.
22525     `N'
22526           A constant between -3 and 0 inclusive.
22528     `O'
22529           A constant between 1 and 4 inclusive.
22531     `P'
22532           A constant between -4 and -1 inclusive.
22534     `Q'
22535           A memory reference that is a stack push.
22537     `R'
22538           A memory reference that is a stack pop.
22540     `S'
22541           A memory reference that refers to a constant address of known
22542           value.
22544     `T'
22545           The register indicated by Rx (not implemented yet).
22547     `U'
22548           A constant that is not between 2 and 15 inclusive.
22550     `Z'
22551           The constant 0.
22554 _Xtensa--`config/xtensa/constraints.md'_
22556     `a'
22557           General-purpose 32-bit register
22559     `b'
22560           One-bit boolean register
22562     `A'
22563           MAC16 40-bit accumulator register
22565     `I'
22566           Signed 12-bit integer constant, for use in MOVI instructions
22568     `J'
22569           Signed 8-bit integer constant, for use in ADDI instructions
22571     `K'
22572           Integer constant valid for BccI instructions
22574     `L'
22575           Unsigned constant valid for BccUI instructions
22579 \x1f
22580 File: gcc.info,  Node: Asm Labels,  Next: Explicit Reg Vars,  Prev: Constraints,  Up: C Extensions
22582 5.39 Controlling Names Used in Assembler Code
22583 =============================================
22585 You can specify the name to be used in the assembler code for a C
22586 function or variable by writing the `asm' (or `__asm__') keyword after
22587 the declarator as follows:
22589      int foo asm ("myfoo") = 2;
22591 This specifies that the name to be used for the variable `foo' in the
22592 assembler code should be `myfoo' rather than the usual `_foo'.
22594  On systems where an underscore is normally prepended to the name of a C
22595 function or variable, this feature allows you to define names for the
22596 linker that do not start with an underscore.
22598  It does not make sense to use this feature with a non-static local
22599 variable since such variables do not have assembler names.  If you are
22600 trying to put the variable in a particular register, see *Note Explicit
22601 Reg Vars::.  GCC presently accepts such code with a warning, but will
22602 probably be changed to issue an error, rather than a warning, in the
22603 future.
22605  You cannot use `asm' in this way in a function _definition_; but you
22606 can get the same effect by writing a declaration for the function
22607 before its definition and putting `asm' there, like this:
22609      extern func () asm ("FUNC");
22611      func (x, y)
22612           int x, y;
22613      /* ... */
22615  It is up to you to make sure that the assembler names you choose do not
22616 conflict with any other assembler symbols.  Also, you must not use a
22617 register name; that would produce completely invalid assembler code.
22618 GCC does not as yet have the ability to store static variables in
22619 registers.  Perhaps that will be added.
22621 \x1f
22622 File: gcc.info,  Node: Explicit Reg Vars,  Next: Alternate Keywords,  Prev: Asm Labels,  Up: C Extensions
22624 5.40 Variables in Specified Registers
22625 =====================================
22627 GNU C allows you to put a few global variables into specified hardware
22628 registers.  You can also specify the register in which an ordinary
22629 register variable should be allocated.
22631    * Global register variables reserve registers throughout the program.
22632      This may be useful in programs such as programming language
22633      interpreters which have a couple of global variables that are
22634      accessed very often.
22636    * Local register variables in specific registers do not reserve the
22637      registers, except at the point where they are used as input or
22638      output operands in an `asm' statement and the `asm' statement
22639      itself is not deleted.  The compiler's data flow analysis is
22640      capable of determining where the specified registers contain live
22641      values, and where they are available for other uses.  Stores into
22642      local register variables may be deleted when they appear to be
22643      dead according to dataflow analysis.  References to local register
22644      variables may be deleted or moved or simplified.
22646      These local variables are sometimes convenient for use with the
22647      extended `asm' feature (*note Extended Asm::), if you want to
22648      write one output of the assembler instruction directly into a
22649      particular register.  (This will work provided the register you
22650      specify fits the constraints specified for that operand in the
22651      `asm'.)
22653 * Menu:
22655 * Global Reg Vars::
22656 * Local Reg Vars::
22658 \x1f
22659 File: gcc.info,  Node: Global Reg Vars,  Next: Local Reg Vars,  Up: Explicit Reg Vars
22661 5.40.1 Defining Global Register Variables
22662 -----------------------------------------
22664 You can define a global register variable in GNU C like this:
22666      register int *foo asm ("a5");
22668 Here `a5' is the name of the register which should be used.  Choose a
22669 register which is normally saved and restored by function calls on your
22670 machine, so that library routines will not clobber it.
22672  Naturally the register name is cpu-dependent, so you would need to
22673 conditionalize your program according to cpu type.  The register `a5'
22674 would be a good choice on a 68000 for a variable of pointer type.  On
22675 machines with register windows, be sure to choose a "global" register
22676 that is not affected magically by the function call mechanism.
22678  In addition, operating systems on one type of cpu may differ in how
22679 they name the registers; then you would need additional conditionals.
22680 For example, some 68000 operating systems call this register `%a5'.
22682  Eventually there may be a way of asking the compiler to choose a
22683 register automatically, but first we need to figure out how it should
22684 choose and how to enable you to guide the choice.  No solution is
22685 evident.
22687  Defining a global register variable in a certain register reserves that
22688 register entirely for this use, at least within the current compilation.
22689 The register will not be allocated for any other purpose in the
22690 functions in the current compilation.  The register will not be saved
22691 and restored by these functions.  Stores into this register are never
22692 deleted even if they would appear to be dead, but references may be
22693 deleted or moved or simplified.
22695  It is not safe to access the global register variables from signal
22696 handlers, or from more than one thread of control, because the system
22697 library routines may temporarily use the register for other things
22698 (unless you recompile them specially for the task at hand).
22700  It is not safe for one function that uses a global register variable to
22701 call another such function `foo' by way of a third function `lose' that
22702 was compiled without knowledge of this variable (i.e. in a different
22703 source file in which the variable wasn't declared).  This is because
22704 `lose' might save the register and put some other value there.  For
22705 example, you can't expect a global register variable to be available in
22706 the comparison-function that you pass to `qsort', since `qsort' might
22707 have put something else in that register.  (If you are prepared to
22708 recompile `qsort' with the same global register variable, you can solve
22709 this problem.)
22711  If you want to recompile `qsort' or other source files which do not
22712 actually use your global register variable, so that they will not use
22713 that register for any other purpose, then it suffices to specify the
22714 compiler option `-ffixed-REG'.  You need not actually add a global
22715 register declaration to their source code.
22717  A function which can alter the value of a global register variable
22718 cannot safely be called from a function compiled without this variable,
22719 because it could clobber the value the caller expects to find there on
22720 return.  Therefore, the function which is the entry point into the part
22721 of the program that uses the global register variable must explicitly
22722 save and restore the value which belongs to its caller.
22724  On most machines, `longjmp' will restore to each global register
22725 variable the value it had at the time of the `setjmp'.  On some
22726 machines, however, `longjmp' will not change the value of global
22727 register variables.  To be portable, the function that called `setjmp'
22728 should make other arrangements to save the values of the global register
22729 variables, and to restore them in a `longjmp'.  This way, the same
22730 thing will happen regardless of what `longjmp' does.
22732  All global register variable declarations must precede all function
22733 definitions.  If such a declaration could appear after function
22734 definitions, the declaration would be too late to prevent the register
22735 from being used for other purposes in the preceding functions.
22737  Global register variables may not have initial values, because an
22738 executable file has no means to supply initial contents for a register.
22740  On the SPARC, there are reports that g3 ... g7 are suitable registers,
22741 but certain library functions, such as `getwd', as well as the
22742 subroutines for division and remainder, modify g3 and g4.  g1 and g2
22743 are local temporaries.
22745  On the 68000, a2 ... a5 should be suitable, as should d2 ... d7.  Of
22746 course, it will not do to use more than a few of those.
22748 \x1f
22749 File: gcc.info,  Node: Local Reg Vars,  Prev: Global Reg Vars,  Up: Explicit Reg Vars
22751 5.40.2 Specifying Registers for Local Variables
22752 -----------------------------------------------
22754 You can define a local register variable with a specified register like
22755 this:
22757      register int *foo asm ("a5");
22759 Here `a5' is the name of the register which should be used.  Note that
22760 this is the same syntax used for defining global register variables,
22761 but for a local variable it would appear within a function.
22763  Naturally the register name is cpu-dependent, but this is not a
22764 problem, since specific registers are most often useful with explicit
22765 assembler instructions (*note Extended Asm::).  Both of these things
22766 generally require that you conditionalize your program according to cpu
22767 type.
22769  In addition, operating systems on one type of cpu may differ in how
22770 they name the registers; then you would need additional conditionals.
22771 For example, some 68000 operating systems call this register `%a5'.
22773  Defining such a register variable does not reserve the register; it
22774 remains available for other uses in places where flow control determines
22775 the variable's value is not live.
22777  This option does not guarantee that GCC will generate code that has
22778 this variable in the register you specify at all times.  You may not
22779 code an explicit reference to this register in the _assembler
22780 instruction template_ part of an `asm' statement and assume it will
22781 always refer to this variable.  However, using the variable as an `asm'
22782 _operand_ guarantees that the specified register is used for the
22783 operand.
22785  Stores into local register variables may be deleted when they appear
22786 to be dead according to dataflow analysis.  References to local
22787 register variables may be deleted or moved or simplified.
22789  As for global register variables, it's recommended that you choose a
22790 register which is normally saved and restored by function calls on your
22791 machine, so that library routines will not clobber it.  A common
22792 pitfall is to initialize multiple call-clobbered registers with
22793 arbitrary expressions, where a function call or library call for an
22794 arithmetic operator will overwrite a register value from a previous
22795 assignment, for example `r0' below:
22796      register int *p1 asm ("r0") = ...;
22797      register int *p2 asm ("r1") = ...;
22798  In those cases, a solution is to use a temporary variable for each
22799 arbitrary expression.   *Note Example of asm with clobbered asm reg::.
22801 \x1f
22802 File: gcc.info,  Node: Alternate Keywords,  Next: Incomplete Enums,  Prev: Explicit Reg Vars,  Up: C Extensions
22804 5.41 Alternate Keywords
22805 =======================
22807 `-ansi' and the various `-std' options disable certain keywords.  This
22808 causes trouble when you want to use GNU C extensions, or a
22809 general-purpose header file that should be usable by all programs,
22810 including ISO C programs.  The keywords `asm', `typeof' and `inline'
22811 are not available in programs compiled with `-ansi' or `-std' (although
22812 `inline' can be used in a program compiled with `-std=c99').  The ISO
22813 C99 keyword `restrict' is only available when `-std=gnu99' (which will
22814 eventually be the default) or `-std=c99' (or the equivalent
22815 `-std=iso9899:1999') is used.
22817  The way to solve these problems is to put `__' at the beginning and
22818 end of each problematical keyword.  For example, use `__asm__' instead
22819 of `asm', and `__inline__' instead of `inline'.
22821  Other C compilers won't accept these alternative keywords; if you want
22822 to compile with another compiler, you can define the alternate keywords
22823 as macros to replace them with the customary keywords.  It looks like
22824 this:
22826      #ifndef __GNUC__
22827      #define __asm__ asm
22828      #endif
22830  `-pedantic' and other options cause warnings for many GNU C extensions.
22831 You can prevent such warnings within one expression by writing
22832 `__extension__' before the expression.  `__extension__' has no effect
22833 aside from this.
22835 \x1f
22836 File: gcc.info,  Node: Incomplete Enums,  Next: Function Names,  Prev: Alternate Keywords,  Up: C Extensions
22838 5.42 Incomplete `enum' Types
22839 ============================
22841 You can define an `enum' tag without specifying its possible values.
22842 This results in an incomplete type, much like what you get if you write
22843 `struct foo' without describing the elements.  A later declaration
22844 which does specify the possible values completes the type.
22846  You can't allocate variables or storage using the type while it is
22847 incomplete.  However, you can work with pointers to that type.
22849  This extension may not be very useful, but it makes the handling of
22850 `enum' more consistent with the way `struct' and `union' are handled.
22852  This extension is not supported by GNU C++.
22854 \x1f
22855 File: gcc.info,  Node: Function Names,  Next: Return Address,  Prev: Incomplete Enums,  Up: C Extensions
22857 5.43 Function Names as Strings
22858 ==============================
22860 GCC provides three magic variables which hold the name of the current
22861 function, as a string.  The first of these is `__func__', which is part
22862 of the C99 standard:
22864  The identifier `__func__' is implicitly declared by the translator as
22865 if, immediately following the opening brace of each function
22866 definition, the declaration
22868      static const char __func__[] = "function-name";
22870 appeared, where function-name is the name of the lexically-enclosing
22871 function.  This name is the unadorned name of the function.
22873  `__FUNCTION__' is another name for `__func__'.  Older versions of GCC
22874 recognize only this name.  However, it is not standardized.  For
22875 maximum portability, we recommend you use `__func__', but provide a
22876 fallback definition with the preprocessor:
22878      #if __STDC_VERSION__ < 199901L
22879      # if __GNUC__ >= 2
22880      #  define __func__ __FUNCTION__
22881      # else
22882      #  define __func__ "<unknown>"
22883      # endif
22884      #endif
22886  In C, `__PRETTY_FUNCTION__' is yet another name for `__func__'.
22887 However, in C++, `__PRETTY_FUNCTION__' contains the type signature of
22888 the function as well as its bare name.  For example, this program:
22890      extern "C" {
22891      extern int printf (char *, ...);
22892      }
22894      class a {
22895       public:
22896        void sub (int i)
22897          {
22898            printf ("__FUNCTION__ = %s\n", __FUNCTION__);
22899            printf ("__PRETTY_FUNCTION__ = %s\n", __PRETTY_FUNCTION__);
22900          }
22901      };
22903      int
22904      main (void)
22905      {
22906        a ax;
22907        ax.sub (0);
22908        return 0;
22909      }
22911 gives this output:
22913      __FUNCTION__ = sub
22914      __PRETTY_FUNCTION__ = void a::sub(int)
22916  These identifiers are not preprocessor macros.  In GCC 3.3 and
22917 earlier, in C only, `__FUNCTION__' and `__PRETTY_FUNCTION__' were
22918 treated as string literals; they could be used to initialize `char'
22919 arrays, and they could be concatenated with other string literals.  GCC
22920 3.4 and later treat them as variables, like `__func__'.  In C++,
22921 `__FUNCTION__' and `__PRETTY_FUNCTION__' have always been variables.
22923 \x1f
22924 File: gcc.info,  Node: Return Address,  Next: Vector Extensions,  Prev: Function Names,  Up: C Extensions
22926 5.44 Getting the Return or Frame Address of a Function
22927 ======================================================
22929 These functions may be used to get information about the callers of a
22930 function.
22932  -- Built-in Function: void * __builtin_return_address (unsigned int
22933           LEVEL)
22934      This function returns the return address of the current function,
22935      or of one of its callers.  The LEVEL argument is number of frames
22936      to scan up the call stack.  A value of `0' yields the return
22937      address of the current function, a value of `1' yields the return
22938      address of the caller of the current function, and so forth.  When
22939      inlining the expected behavior is that the function will return
22940      the address of the function that will be returned to.  To work
22941      around this behavior use the `noinline' function attribute.
22943      The LEVEL argument must be a constant integer.
22945      On some machines it may be impossible to determine the return
22946      address of any function other than the current one; in such cases,
22947      or when the top of the stack has been reached, this function will
22948      return `0' or a random value.  In addition,
22949      `__builtin_frame_address' may be used to determine if the top of
22950      the stack has been reached.
22952      This function should only be used with a nonzero argument for
22953      debugging purposes.
22955  -- Built-in Function: void * __builtin_frame_address (unsigned int
22956           LEVEL)
22957      This function is similar to `__builtin_return_address', but it
22958      returns the address of the function frame rather than the return
22959      address of the function.  Calling `__builtin_frame_address' with a
22960      value of `0' yields the frame address of the current function, a
22961      value of `1' yields the frame address of the caller of the current
22962      function, and so forth.
22964      The frame is the area on the stack which holds local variables and
22965      saved registers.  The frame address is normally the address of the
22966      first word pushed on to the stack by the function.  However, the
22967      exact definition depends upon the processor and the calling
22968      convention.  If the processor has a dedicated frame pointer
22969      register, and the function has a frame, then
22970      `__builtin_frame_address' will return the value of the frame
22971      pointer register.
22973      On some machines it may be impossible to determine the frame
22974      address of any function other than the current one; in such cases,
22975      or when the top of the stack has been reached, this function will
22976      return `0' if the first frame pointer is properly initialized by
22977      the startup code.
22979      This function should only be used with a nonzero argument for
22980      debugging purposes.
22982 \x1f
22983 File: gcc.info,  Node: Vector Extensions,  Next: Offsetof,  Prev: Return Address,  Up: C Extensions
22985 5.45 Using vector instructions through built-in functions
22986 =========================================================
22988 On some targets, the instruction set contains SIMD vector instructions
22989 that operate on multiple values contained in one large register at the
22990 same time.  For example, on the i386 the MMX, 3Dnow! and SSE extensions
22991 can be used this way.
22993  The first step in using these extensions is to provide the necessary
22994 data types.  This should be done using an appropriate `typedef':
22996      typedef int v4si __attribute__ ((vector_size (16)));
22998  The `int' type specifies the base type, while the attribute specifies
22999 the vector size for the variable, measured in bytes.  For example, the
23000 declaration above causes the compiler to set the mode for the `v4si'
23001 type to be 16 bytes wide and divided into `int' sized units.  For a
23002 32-bit `int' this means a vector of 4 units of 4 bytes, and the
23003 corresponding mode of `foo' will be V4SI.
23005  The `vector_size' attribute is only applicable to integral and float
23006 scalars, although arrays, pointers, and function return values are
23007 allowed in conjunction with this construct.
23009  All the basic integer types can be used as base types, both as signed
23010 and as unsigned: `char', `short', `int', `long', `long long'.  In
23011 addition, `float' and `double' can be used to build floating-point
23012 vector types.
23014  Specifying a combination that is not valid for the current architecture
23015 will cause GCC to synthesize the instructions using a narrower mode.
23016 For example, if you specify a variable of type `V4SI' and your
23017 architecture does not allow for this specific SIMD type, GCC will
23018 produce code that uses 4 `SIs'.
23020  The types defined in this manner can be used with a subset of normal C
23021 operations.  Currently, GCC will allow using the following operators on
23022 these types: `+, -, *, /, unary minus, ^, |, &, ~'.
23024  The operations behave like C++ `valarrays'.  Addition is defined as
23025 the addition of the corresponding elements of the operands.  For
23026 example, in the code below, each of the 4 elements in A will be added
23027 to the corresponding 4 elements in B and the resulting vector will be
23028 stored in C.
23030      typedef int v4si __attribute__ ((vector_size (16)));
23032      v4si a, b, c;
23034      c = a + b;
23036  Subtraction, multiplication, division, and the logical operations
23037 operate in a similar manner.  Likewise, the result of using the unary
23038 minus or complement operators on a vector type is a vector whose
23039 elements are the negative or complemented values of the corresponding
23040 elements in the operand.
23042  You can declare variables and use them in function calls and returns,
23043 as well as in assignments and some casts.  You can specify a vector
23044 type as a return type for a function.  Vector types can also be used as
23045 function arguments.  It is possible to cast from one vector type to
23046 another, provided they are of the same size (in fact, you can also cast
23047 vectors to and from other datatypes of the same size).
23049  You cannot operate between vectors of different lengths or different
23050 signedness without a cast.
23052  A port that supports hardware vector operations, usually provides a set
23053 of built-in functions that can be used to operate on vectors.  For
23054 example, a function to add two vectors and multiply the result by a
23055 third could look like this:
23057      v4si f (v4si a, v4si b, v4si c)
23058      {
23059        v4si tmp = __builtin_addv4si (a, b);
23060        return __builtin_mulv4si (tmp, c);
23061      }
23063 \x1f
23064 File: gcc.info,  Node: Offsetof,  Next: Atomic Builtins,  Prev: Vector Extensions,  Up: C Extensions
23066 5.46 Offsetof
23067 =============
23069 GCC implements for both C and C++ a syntactic extension to implement
23070 the `offsetof' macro.
23072      primary:
23073              "__builtin_offsetof" "(" `typename' "," offsetof_member_designator ")"
23075      offsetof_member_designator:
23076                `identifier'
23077              | offsetof_member_designator "." `identifier'
23078              | offsetof_member_designator "[" `expr' "]"
23080  This extension is sufficient such that
23082      #define offsetof(TYPE, MEMBER)  __builtin_offsetof (TYPE, MEMBER)
23084  is a suitable definition of the `offsetof' macro.  In C++, TYPE may be
23085 dependent.  In either case, MEMBER may consist of a single identifier,
23086 or a sequence of member accesses and array references.
23088 \x1f
23089 File: gcc.info,  Node: Atomic Builtins,  Next: Object Size Checking,  Prev: Offsetof,  Up: C Extensions
23091 5.47 Built-in functions for atomic memory access
23092 ================================================
23094 The following builtins are intended to be compatible with those
23095 described in the `Intel Itanium Processor-specific Application Binary
23096 Interface', section 7.4.  As such, they depart from the normal GCC
23097 practice of using the "__builtin_" prefix, and further that they are
23098 overloaded such that they work on multiple types.
23100  The definition given in the Intel documentation allows only for the
23101 use of the types `int', `long', `long long' as well as their unsigned
23102 counterparts.  GCC will allow any integral scalar or pointer type that
23103 is 1, 2, 4 or 8 bytes in length.
23105  Not all operations are supported by all target processors.  If a
23106 particular operation cannot be implemented on the target processor, a
23107 warning will be generated and a call an external function will be
23108 generated.  The external function will carry the same name as the
23109 builtin, with an additional suffix `_N' where N is the size of the data
23110 type.
23112  In most cases, these builtins are considered a "full barrier".  That
23113 is, no memory operand will be moved across the operation, either
23114 forward or backward.  Further, instructions will be issued as necessary
23115 to prevent the processor from speculating loads across the operation
23116 and from queuing stores after the operation.
23118  All of the routines are described in the Intel documentation to take
23119 "an optional list of variables protected by the memory barrier".  It's
23120 not clear what is meant by that; it could mean that _only_ the
23121 following variables are protected, or it could mean that these variables
23122 should in addition be protected.  At present GCC ignores this list and
23123 protects all variables which are globally accessible.  If in the future
23124 we make some use of this list, an empty list will continue to mean all
23125 globally accessible variables.
23127 `TYPE __sync_fetch_and_add (TYPE *ptr, TYPE value, ...)'
23128 `TYPE __sync_fetch_and_sub (TYPE *ptr, TYPE value, ...)'
23129 `TYPE __sync_fetch_and_or (TYPE *ptr, TYPE value, ...)'
23130 `TYPE __sync_fetch_and_and (TYPE *ptr, TYPE value, ...)'
23131 `TYPE __sync_fetch_and_xor (TYPE *ptr, TYPE value, ...)'
23132 `TYPE __sync_fetch_and_nand (TYPE *ptr, TYPE value, ...)'
23133      These builtins perform the operation suggested by the name, and
23134      returns the value that had previously been in memory.  That is,
23136           { tmp = *ptr; *ptr OP= value; return tmp; }
23137           { tmp = *ptr; *ptr = ~(tmp & value); return tmp; }   // nand
23139      _Note:_ GCC 4.4 and later implement `__sync_fetch_and_nand'
23140      builtin as `*ptr = ~(tmp & value)' instead of `*ptr = ~tmp &
23141      value'.
23143 `TYPE __sync_add_and_fetch (TYPE *ptr, TYPE value, ...)'
23144 `TYPE __sync_sub_and_fetch (TYPE *ptr, TYPE value, ...)'
23145 `TYPE __sync_or_and_fetch (TYPE *ptr, TYPE value, ...)'
23146 `TYPE __sync_and_and_fetch (TYPE *ptr, TYPE value, ...)'
23147 `TYPE __sync_xor_and_fetch (TYPE *ptr, TYPE value, ...)'
23148 `TYPE __sync_nand_and_fetch (TYPE *ptr, TYPE value, ...)'
23149      These builtins perform the operation suggested by the name, and
23150      return the new value.  That is,
23152           { *ptr OP= value; return *ptr; }
23153           { *ptr = ~(*ptr & value); return *ptr; }   // nand
23155      _Note:_ GCC 4.4 and later implement `__sync_nand_and_fetch'
23156      builtin as `*ptr = ~(*ptr & value)' instead of `*ptr = ~*ptr &
23157      value'.
23159 `bool __sync_bool_compare_and_swap (TYPE *ptr, TYPE oldval TYPE newval, ...)'
23160 `TYPE __sync_val_compare_and_swap (TYPE *ptr, TYPE oldval TYPE newval, ...)'
23161      These builtins perform an atomic compare and swap.  That is, if
23162      the current value of `*PTR' is OLDVAL, then write NEWVAL into
23163      `*PTR'.
23165      The "bool" version returns true if the comparison is successful and
23166      NEWVAL was written.  The "val" version returns the contents of
23167      `*PTR' before the operation.
23169 `__sync_synchronize (...)'
23170      This builtin issues a full memory barrier.
23172 `TYPE __sync_lock_test_and_set (TYPE *ptr, TYPE value, ...)'
23173      This builtin, as described by Intel, is not a traditional
23174      test-and-set operation, but rather an atomic exchange operation.
23175      It writes VALUE into `*PTR', and returns the previous contents of
23176      `*PTR'.
23178      Many targets have only minimal support for such locks, and do not
23179      support a full exchange operation.  In this case, a target may
23180      support reduced functionality here by which the _only_ valid value
23181      to store is the immediate constant 1.  The exact value actually
23182      stored in `*PTR' is implementation defined.
23184      This builtin is not a full barrier, but rather an "acquire
23185      barrier".  This means that references after the builtin cannot
23186      move to (or be speculated to) before the builtin, but previous
23187      memory stores may not be globally visible yet, and previous memory
23188      loads may not yet be satisfied.
23190 `void __sync_lock_release (TYPE *ptr, ...)'
23191      This builtin releases the lock acquired by
23192      `__sync_lock_test_and_set'.  Normally this means writing the
23193      constant 0 to `*PTR'.
23195      This builtin is not a full barrier, but rather a "release barrier".
23196      This means that all previous memory stores are globally visible,
23197      and all previous memory loads have been satisfied, but following
23198      memory reads are not prevented from being speculated to before the
23199      barrier.
23201 \x1f
23202 File: gcc.info,  Node: Object Size Checking,  Next: Other Builtins,  Prev: Atomic Builtins,  Up: C Extensions
23204 5.48 Object Size Checking Builtins
23205 ==================================
23207 GCC implements a limited buffer overflow protection mechanism that can
23208 prevent some buffer overflow attacks.
23210  -- Built-in Function: size_t __builtin_object_size (void * PTR, int
23211           TYPE)
23212      is a built-in construct that returns a constant number of bytes
23213      from PTR to the end of the object PTR pointer points to (if known
23214      at compile time).  `__builtin_object_size' never evaluates its
23215      arguments for side-effects.  If there are any side-effects in
23216      them, it returns `(size_t) -1' for TYPE 0 or 1 and `(size_t) 0'
23217      for TYPE 2 or 3.  If there are multiple objects PTR can point to
23218      and all of them are known at compile time, the returned number is
23219      the maximum of remaining byte counts in those objects if TYPE & 2
23220      is 0 and minimum if nonzero.  If it is not possible to determine
23221      which objects PTR points to at compile time,
23222      `__builtin_object_size' should return `(size_t) -1' for TYPE 0 or
23223      1 and `(size_t) 0' for TYPE 2 or 3.
23225      TYPE is an integer constant from 0 to 3.  If the least significant
23226      bit is clear, objects are whole variables, if it is set, a closest
23227      surrounding subobject is considered the object a pointer points to.
23228      The second bit determines if maximum or minimum of remaining bytes
23229      is computed.
23231           struct V { char buf1[10]; int b; char buf2[10]; } var;
23232           char *p = &var.buf1[1], *q = &var.b;
23234           /* Here the object p points to is var.  */
23235           assert (__builtin_object_size (p, 0) == sizeof (var) - 1);
23236           /* The subobject p points to is var.buf1.  */
23237           assert (__builtin_object_size (p, 1) == sizeof (var.buf1) - 1);
23238           /* The object q points to is var.  */
23239           assert (__builtin_object_size (q, 0)
23240                   == (char *) (&var + 1) - (char *) &var.b);
23241           /* The subobject q points to is var.b.  */
23242           assert (__builtin_object_size (q, 1) == sizeof (var.b));
23244  There are built-in functions added for many common string operation
23245 functions, e.g., for `memcpy' `__builtin___memcpy_chk' built-in is
23246 provided.  This built-in has an additional last argument, which is the
23247 number of bytes remaining in object the DEST argument points to or
23248 `(size_t) -1' if the size is not known.
23250  The built-in functions are optimized into the normal string functions
23251 like `memcpy' if the last argument is `(size_t) -1' or if it is known
23252 at compile time that the destination object will not be overflown.  If
23253 the compiler can determine at compile time the object will be always
23254 overflown, it issues a warning.
23256  The intended use can be e.g.
23258      #undef memcpy
23259      #define bos0(dest) __builtin_object_size (dest, 0)
23260      #define memcpy(dest, src, n) \
23261        __builtin___memcpy_chk (dest, src, n, bos0 (dest))
23263      char *volatile p;
23264      char buf[10];
23265      /* It is unknown what object p points to, so this is optimized
23266         into plain memcpy - no checking is possible.  */
23267      memcpy (p, "abcde", n);
23268      /* Destination is known and length too.  It is known at compile
23269         time there will be no overflow.  */
23270      memcpy (&buf[5], "abcde", 5);
23271      /* Destination is known, but the length is not known at compile time.
23272         This will result in __memcpy_chk call that can check for overflow
23273         at runtime.  */
23274      memcpy (&buf[5], "abcde", n);
23275      /* Destination is known and it is known at compile time there will
23276         be overflow.  There will be a warning and __memcpy_chk call that
23277         will abort the program at runtime.  */
23278      memcpy (&buf[6], "abcde", 5);
23280  Such built-in functions are provided for `memcpy', `mempcpy',
23281 `memmove', `memset', `strcpy', `stpcpy', `strncpy', `strcat' and
23282 `strncat'.
23284  There are also checking built-in functions for formatted output
23285 functions.
23286      int __builtin___sprintf_chk (char *s, int flag, size_t os, const char *fmt, ...);
23287      int __builtin___snprintf_chk (char *s, size_t maxlen, int flag, size_t os,
23288                                    const char *fmt, ...);
23289      int __builtin___vsprintf_chk (char *s, int flag, size_t os, const char *fmt,
23290                                    va_list ap);
23291      int __builtin___vsnprintf_chk (char *s, size_t maxlen, int flag, size_t os,
23292                                     const char *fmt, va_list ap);
23294  The added FLAG argument is passed unchanged to `__sprintf_chk' etc.
23295 functions and can contain implementation specific flags on what
23296 additional security measures the checking function might take, such as
23297 handling `%n' differently.
23299  The OS argument is the object size S points to, like in the other
23300 built-in functions.  There is a small difference in the behavior
23301 though, if OS is `(size_t) -1', the built-in functions are optimized
23302 into the non-checking functions only if FLAG is 0, otherwise the
23303 checking function is called with OS argument set to `(size_t) -1'.
23305  In addition to this, there are checking built-in functions
23306 `__builtin___printf_chk', `__builtin___vprintf_chk',
23307 `__builtin___fprintf_chk' and `__builtin___vfprintf_chk'.  These have
23308 just one additional argument, FLAG, right before format string FMT.  If
23309 the compiler is able to optimize them to `fputc' etc. functions, it
23310 will, otherwise the checking function should be called and the FLAG
23311 argument passed to it.
23313 \x1f
23314 File: gcc.info,  Node: Other Builtins,  Next: Target Builtins,  Prev: Object Size Checking,  Up: C Extensions
23316 5.49 Other built-in functions provided by GCC
23317 =============================================
23319 GCC provides a large number of built-in functions other than the ones
23320 mentioned above.  Some of these are for internal use in the processing
23321 of exceptions or variable-length argument lists and will not be
23322 documented here because they may change from time to time; we do not
23323 recommend general use of these functions.
23325  The remaining functions are provided for optimization purposes.
23327  GCC includes built-in versions of many of the functions in the standard
23328 C library.  The versions prefixed with `__builtin_' will always be
23329 treated as having the same meaning as the C library function even if you
23330 specify the `-fno-builtin' option.  (*note C Dialect Options::) Many of
23331 these functions are only optimized in certain cases; if they are not
23332 optimized in a particular case, a call to the library function will be
23333 emitted.
23335  Outside strict ISO C mode (`-ansi', `-std=c89' or `-std=c99'), the
23336 functions `_exit', `alloca', `bcmp', `bzero', `dcgettext', `dgettext',
23337 `dremf', `dreml', `drem', `exp10f', `exp10l', `exp10', `ffsll', `ffsl',
23338 `ffs', `fprintf_unlocked', `fputs_unlocked', `gammaf', `gammal',
23339 `gamma', `gammaf_r', `gammal_r', `gamma_r', `gettext', `index',
23340 `isascii', `j0f', `j0l', `j0', `j1f', `j1l', `j1', `jnf', `jnl', `jn',
23341 `lgammaf_r', `lgammal_r', `lgamma_r', `mempcpy', `pow10f', `pow10l',
23342 `pow10', `printf_unlocked', `rindex', `scalbf', `scalbl', `scalb',
23343 `signbit', `signbitf', `signbitl', `signbitd32', `signbitd64',
23344 `signbitd128', `significandf', `significandl', `significand', `sincosf',
23345 `sincosl', `sincos', `stpcpy', `stpncpy', `strcasecmp', `strdup',
23346 `strfmon', `strncasecmp', `strndup', `toascii', `y0f', `y0l', `y0',
23347 `y1f', `y1l', `y1', `ynf', `ynl' and `yn' may be handled as built-in
23348 functions.  All these functions have corresponding versions prefixed
23349 with `__builtin_', which may be used even in strict C89 mode.
23351  The ISO C99 functions `_Exit', `acoshf', `acoshl', `acosh', `asinhf',
23352 `asinhl', `asinh', `atanhf', `atanhl', `atanh', `cabsf', `cabsl',
23353 `cabs', `cacosf', `cacoshf', `cacoshl', `cacosh', `cacosl', `cacos',
23354 `cargf', `cargl', `carg', `casinf', `casinhf', `casinhl', `casinh',
23355 `casinl', `casin', `catanf', `catanhf', `catanhl', `catanh', `catanl',
23356 `catan', `cbrtf', `cbrtl', `cbrt', `ccosf', `ccoshf', `ccoshl',
23357 `ccosh', `ccosl', `ccos', `cexpf', `cexpl', `cexp', `cimagf', `cimagl',
23358 `cimag', `clogf', `clogl', `clog', `conjf', `conjl', `conj',
23359 `copysignf', `copysignl', `copysign', `cpowf', `cpowl', `cpow',
23360 `cprojf', `cprojl', `cproj', `crealf', `creall', `creal', `csinf',
23361 `csinhf', `csinhl', `csinh', `csinl', `csin', `csqrtf', `csqrtl',
23362 `csqrt', `ctanf', `ctanhf', `ctanhl', `ctanh', `ctanl', `ctan',
23363 `erfcf', `erfcl', `erfc', `erff', `erfl', `erf', `exp2f', `exp2l',
23364 `exp2', `expm1f', `expm1l', `expm1', `fdimf', `fdiml', `fdim', `fmaf',
23365 `fmal', `fmaxf', `fmaxl', `fmax', `fma', `fminf', `fminl', `fmin',
23366 `hypotf', `hypotl', `hypot', `ilogbf', `ilogbl', `ilogb', `imaxabs',
23367 `isblank', `iswblank', `lgammaf', `lgammal', `lgamma', `llabs',
23368 `llrintf', `llrintl', `llrint', `llroundf', `llroundl', `llround',
23369 `log1pf', `log1pl', `log1p', `log2f', `log2l', `log2', `logbf',
23370 `logbl', `logb', `lrintf', `lrintl', `lrint', `lroundf', `lroundl',
23371 `lround', `nearbyintf', `nearbyintl', `nearbyint', `nextafterf',
23372 `nextafterl', `nextafter', `nexttowardf', `nexttowardl', `nexttoward',
23373 `remainderf', `remainderl', `remainder', `remquof', `remquol',
23374 `remquo', `rintf', `rintl', `rint', `roundf', `roundl', `round',
23375 `scalblnf', `scalblnl', `scalbln', `scalbnf', `scalbnl', `scalbn',
23376 `snprintf', `tgammaf', `tgammal', `tgamma', `truncf', `truncl', `trunc',
23377 `vfscanf', `vscanf', `vsnprintf' and `vsscanf' are handled as built-in
23378 functions except in strict ISO C90 mode (`-ansi' or `-std=c89').
23380  There are also built-in versions of the ISO C99 functions `acosf',
23381 `acosl', `asinf', `asinl', `atan2f', `atan2l', `atanf', `atanl',
23382 `ceilf', `ceill', `cosf', `coshf', `coshl', `cosl', `expf', `expl',
23383 `fabsf', `fabsl', `floorf', `floorl', `fmodf', `fmodl', `frexpf',
23384 `frexpl', `ldexpf', `ldexpl', `log10f', `log10l', `logf', `logl',
23385 `modfl', `modf', `powf', `powl', `sinf', `sinhf', `sinhl', `sinl',
23386 `sqrtf', `sqrtl', `tanf', `tanhf', `tanhl' and `tanl' that are
23387 recognized in any mode since ISO C90 reserves these names for the
23388 purpose to which ISO C99 puts them.  All these functions have
23389 corresponding versions prefixed with `__builtin_'.
23391  The ISO C94 functions `iswalnum', `iswalpha', `iswcntrl', `iswdigit',
23392 `iswgraph', `iswlower', `iswprint', `iswpunct', `iswspace', `iswupper',
23393 `iswxdigit', `towlower' and `towupper' are handled as built-in functions
23394 except in strict ISO C90 mode (`-ansi' or `-std=c89').
23396  The ISO C90 functions `abort', `abs', `acos', `asin', `atan2', `atan',
23397 `calloc', `ceil', `cosh', `cos', `exit', `exp', `fabs', `floor', `fmod',
23398 `fprintf', `fputs', `frexp', `fscanf', `isalnum', `isalpha', `iscntrl',
23399 `isdigit', `isgraph', `islower', `isprint', `ispunct', `isspace',
23400 `isupper', `isxdigit', `tolower', `toupper', `labs', `ldexp', `log10',
23401 `log', `malloc', `memchr', `memcmp', `memcpy', `memset', `modf', `pow',
23402 `printf', `putchar', `puts', `scanf', `sinh', `sin', `snprintf',
23403 `sprintf', `sqrt', `sscanf', `strcat', `strchr', `strcmp', `strcpy',
23404 `strcspn', `strlen', `strncat', `strncmp', `strncpy', `strpbrk',
23405 `strrchr', `strspn', `strstr', `tanh', `tan', `vfprintf', `vprintf' and
23406 `vsprintf' are all recognized as built-in functions unless
23407 `-fno-builtin' is specified (or `-fno-builtin-FUNCTION' is specified
23408 for an individual function).  All of these functions have corresponding
23409 versions prefixed with `__builtin_'.
23411  GCC provides built-in versions of the ISO C99 floating point comparison
23412 macros that avoid raising exceptions for unordered operands.  They have
23413 the same names as the standard macros ( `isgreater', `isgreaterequal',
23414 `isless', `islessequal', `islessgreater', and `isunordered') , with
23415 `__builtin_' prefixed.  We intend for a library implementor to be able
23416 to simply `#define' each standard macro to its built-in equivalent.  In
23417 the same fashion, GCC provides `fpclassify', `isfinite', `isinf_sign'
23418 and `isnormal' built-ins used with `__builtin_' prefixed.  The `isinf'
23419 and `isnan' builtins appear both with and without the `__builtin_'
23420 prefix.
23422  -- Built-in Function: int __builtin_types_compatible_p (TYPE1, TYPE2)
23423      You can use the built-in function `__builtin_types_compatible_p' to
23424      determine whether two types are the same.
23426      This built-in function returns 1 if the unqualified versions of the
23427      types TYPE1 and TYPE2 (which are types, not expressions) are
23428      compatible, 0 otherwise.  The result of this built-in function can
23429      be used in integer constant expressions.
23431      This built-in function ignores top level qualifiers (e.g., `const',
23432      `volatile').  For example, `int' is equivalent to `const int'.
23434      The type `int[]' and `int[5]' are compatible.  On the other hand,
23435      `int' and `char *' are not compatible, even if the size of their
23436      types, on the particular architecture are the same.  Also, the
23437      amount of pointer indirection is taken into account when
23438      determining similarity.  Consequently, `short *' is not similar to
23439      `short **'.  Furthermore, two types that are typedefed are
23440      considered compatible if their underlying types are compatible.
23442      An `enum' type is not considered to be compatible with another
23443      `enum' type even if both are compatible with the same integer
23444      type; this is what the C standard specifies.  For example, `enum
23445      {foo, bar}' is not similar to `enum {hot, dog}'.
23447      You would typically use this function in code whose execution
23448      varies depending on the arguments' types.  For example:
23450           #define foo(x)                                                  \
23451             ({                                                           \
23452               typeof (x) tmp = (x);                                       \
23453               if (__builtin_types_compatible_p (typeof (x), long double)) \
23454                 tmp = foo_long_double (tmp);                              \
23455               else if (__builtin_types_compatible_p (typeof (x), double)) \
23456                 tmp = foo_double (tmp);                                   \
23457               else if (__builtin_types_compatible_p (typeof (x), float))  \
23458                 tmp = foo_float (tmp);                                    \
23459               else                                                        \
23460                 abort ();                                                 \
23461               tmp;                                                        \
23462             })
23464      _Note:_ This construct is only available for C.
23467  -- Built-in Function: TYPE __builtin_choose_expr (CONST_EXP, EXP1,
23468           EXP2)
23469      You can use the built-in function `__builtin_choose_expr' to
23470      evaluate code depending on the value of a constant expression.
23471      This built-in function returns EXP1 if CONST_EXP, which is a
23472      constant expression that must be able to be determined at compile
23473      time, is nonzero.  Otherwise it returns 0.
23475      This built-in function is analogous to the `? :' operator in C,
23476      except that the expression returned has its type unaltered by
23477      promotion rules.  Also, the built-in function does not evaluate
23478      the expression that was not chosen.  For example, if CONST_EXP
23479      evaluates to true, EXP2 is not evaluated even if it has
23480      side-effects.
23482      This built-in function can return an lvalue if the chosen argument
23483      is an lvalue.
23485      If EXP1 is returned, the return type is the same as EXP1's type.
23486      Similarly, if EXP2 is returned, its return type is the same as
23487      EXP2.
23489      Example:
23491           #define foo(x)                                                    \
23492             __builtin_choose_expr (                                         \
23493               __builtin_types_compatible_p (typeof (x), double),            \
23494               foo_double (x),                                               \
23495               __builtin_choose_expr (                                       \
23496                 __builtin_types_compatible_p (typeof (x), float),           \
23497                 foo_float (x),                                              \
23498                 /* The void expression results in a compile-time error  \
23499                    when assigning the result to something.  */          \
23500                 (void)0))
23502      _Note:_ This construct is only available for C.  Furthermore, the
23503      unused expression (EXP1 or EXP2 depending on the value of
23504      CONST_EXP) may still generate syntax errors.  This may change in
23505      future revisions.
23508  -- Built-in Function: int __builtin_constant_p (EXP)
23509      You can use the built-in function `__builtin_constant_p' to
23510      determine if a value is known to be constant at compile-time and
23511      hence that GCC can perform constant-folding on expressions
23512      involving that value.  The argument of the function is the value
23513      to test.  The function returns the integer 1 if the argument is
23514      known to be a compile-time constant and 0 if it is not known to be
23515      a compile-time constant.  A return of 0 does not indicate that the
23516      value is _not_ a constant, but merely that GCC cannot prove it is
23517      a constant with the specified value of the `-O' option.
23519      You would typically use this function in an embedded application
23520      where memory was a critical resource.  If you have some complex
23521      calculation, you may want it to be folded if it involves
23522      constants, but need to call a function if it does not.  For
23523      example:
23525           #define Scale_Value(X)      \
23526             (__builtin_constant_p (X) \
23527             ? ((X) * SCALE + OFFSET) : Scale (X))
23529      You may use this built-in function in either a macro or an inline
23530      function.  However, if you use it in an inlined function and pass
23531      an argument of the function as the argument to the built-in, GCC
23532      will never return 1 when you call the inline function with a
23533      string constant or compound literal (*note Compound Literals::)
23534      and will not return 1 when you pass a constant numeric value to
23535      the inline function unless you specify the `-O' option.
23537      You may also use `__builtin_constant_p' in initializers for static
23538      data.  For instance, you can write
23540           static const int table[] = {
23541              __builtin_constant_p (EXPRESSION) ? (EXPRESSION) : -1,
23542              /* ... */
23543           };
23545      This is an acceptable initializer even if EXPRESSION is not a
23546      constant expression.  GCC must be more conservative about
23547      evaluating the built-in in this case, because it has no
23548      opportunity to perform optimization.
23550      Previous versions of GCC did not accept this built-in in data
23551      initializers.  The earliest version where it is completely safe is
23552      3.0.1.
23554  -- Built-in Function: long __builtin_expect (long EXP, long C)
23555      You may use `__builtin_expect' to provide the compiler with branch
23556      prediction information.  In general, you should prefer to use
23557      actual profile feedback for this (`-fprofile-arcs'), as
23558      programmers are notoriously bad at predicting how their programs
23559      actually perform.  However, there are applications in which this
23560      data is hard to collect.
23562      The return value is the value of EXP, which should be an integral
23563      expression.  The semantics of the built-in are that it is expected
23564      that EXP == C.  For example:
23566           if (__builtin_expect (x, 0))
23567             foo ();
23569      would indicate that we do not expect to call `foo', since we
23570      expect `x' to be zero.  Since you are limited to integral
23571      expressions for EXP, you should use constructions such as
23573           if (__builtin_expect (ptr != NULL, 1))
23574             error ();
23576      when testing pointer or floating-point values.
23578  -- Built-in Function: void __builtin_trap (void)
23579      This function causes the program to exit abnormally.  GCC
23580      implements this function by using a target-dependent mechanism
23581      (such as intentionally executing an illegal instruction) or by
23582      calling `abort'.  The mechanism used may vary from release to
23583      release so you should not rely on any particular implementation.
23585  -- Built-in Function: void __builtin___clear_cache (char *BEGIN, char
23586           *END)
23587      This function is used to flush the processor's instruction cache
23588      for the region of memory between BEGIN inclusive and END
23589      exclusive.  Some targets require that the instruction cache be
23590      flushed, after modifying memory containing code, in order to obtain
23591      deterministic behavior.
23593      If the target does not require instruction cache flushes,
23594      `__builtin___clear_cache' has no effect.  Otherwise either
23595      instructions are emitted in-line to clear the instruction cache or
23596      a call to the `__clear_cache' function in libgcc is made.
23598  -- Built-in Function: void __builtin_prefetch (const void *ADDR, ...)
23599      This function is used to minimize cache-miss latency by moving
23600      data into a cache before it is accessed.  You can insert calls to
23601      `__builtin_prefetch' into code for which you know addresses of
23602      data in memory that is likely to be accessed soon.  If the target
23603      supports them, data prefetch instructions will be generated.  If
23604      the prefetch is done early enough before the access then the data
23605      will be in the cache by the time it is accessed.
23607      The value of ADDR is the address of the memory to prefetch.  There
23608      are two optional arguments, RW and LOCALITY.  The value of RW is a
23609      compile-time constant one or zero; one means that the prefetch is
23610      preparing for a write to the memory address and zero, the default,
23611      means that the prefetch is preparing for a read.  The value
23612      LOCALITY must be a compile-time constant integer between zero and
23613      three.  A value of zero means that the data has no temporal
23614      locality, so it need not be left in the cache after the access.  A
23615      value of three means that the data has a high degree of temporal
23616      locality and should be left in all levels of cache possible.
23617      Values of one and two mean, respectively, a low or moderate degree
23618      of temporal locality.  The default is three.
23620           for (i = 0; i < n; i++)
23621             {
23622               a[i] = a[i] + b[i];
23623               __builtin_prefetch (&a[i+j], 1, 1);
23624               __builtin_prefetch (&b[i+j], 0, 1);
23625               /* ... */
23626             }
23628      Data prefetch does not generate faults if ADDR is invalid, but the
23629      address expression itself must be valid.  For example, a prefetch
23630      of `p->next' will not fault if `p->next' is not a valid address,
23631      but evaluation will fault if `p' is not a valid address.
23633      If the target does not support data prefetch, the address
23634      expression is evaluated if it includes side effects but no other
23635      code is generated and GCC does not issue a warning.
23637  -- Built-in Function: double __builtin_huge_val (void)
23638      Returns a positive infinity, if supported by the floating-point
23639      format, else `DBL_MAX'.  This function is suitable for
23640      implementing the ISO C macro `HUGE_VAL'.
23642  -- Built-in Function: float __builtin_huge_valf (void)
23643      Similar to `__builtin_huge_val', except the return type is `float'.
23645  -- Built-in Function: long double __builtin_huge_vall (void)
23646      Similar to `__builtin_huge_val', except the return type is `long
23647      double'.
23649  -- Built-in Function: int __builtin_fpclassify (int, int, int, int,
23650           int, ...)
23651      This built-in implements the C99 fpclassify functionality.  The
23652      first five int arguments should be the target library's notion of
23653      the possible FP classes and are used for return values.  They must
23654      be constant values and they must appear in this order: `FP_NAN',
23655      `FP_INFINITE', `FP_NORMAL', `FP_SUBNORMAL' and `FP_ZERO'.  The
23656      ellipsis is for exactly one floating point value to classify.  GCC
23657      treats the last argument as type-generic, which means it does not
23658      do default promotion from float to double.
23660  -- Built-in Function: double __builtin_inf (void)
23661      Similar to `__builtin_huge_val', except a warning is generated if
23662      the target floating-point format does not support infinities.
23664  -- Built-in Function: _Decimal32 __builtin_infd32 (void)
23665      Similar to `__builtin_inf', except the return type is `_Decimal32'.
23667  -- Built-in Function: _Decimal64 __builtin_infd64 (void)
23668      Similar to `__builtin_inf', except the return type is `_Decimal64'.
23670  -- Built-in Function: _Decimal128 __builtin_infd128 (void)
23671      Similar to `__builtin_inf', except the return type is
23672      `_Decimal128'.
23674  -- Built-in Function: float __builtin_inff (void)
23675      Similar to `__builtin_inf', except the return type is `float'.
23676      This function is suitable for implementing the ISO C99 macro
23677      `INFINITY'.
23679  -- Built-in Function: long double __builtin_infl (void)
23680      Similar to `__builtin_inf', except the return type is `long
23681      double'.
23683  -- Built-in Function: int __builtin_isinf_sign (...)
23684      Similar to `isinf', except the return value will be negative for
23685      an argument of `-Inf'.  Note while the parameter list is an
23686      ellipsis, this function only accepts exactly one floating point
23687      argument.  GCC treats this parameter as type-generic, which means
23688      it does not do default promotion from float to double.
23690  -- Built-in Function: double __builtin_nan (const char *str)
23691      This is an implementation of the ISO C99 function `nan'.
23693      Since ISO C99 defines this function in terms of `strtod', which we
23694      do not implement, a description of the parsing is in order.  The
23695      string is parsed as by `strtol'; that is, the base is recognized by
23696      leading `0' or `0x' prefixes.  The number parsed is placed in the
23697      significand such that the least significant bit of the number is
23698      at the least significant bit of the significand.  The number is
23699      truncated to fit the significand field provided.  The significand
23700      is forced to be a quiet NaN.
23702      This function, if given a string literal all of which would have
23703      been consumed by strtol, is evaluated early enough that it is
23704      considered a compile-time constant.
23706  -- Built-in Function: _Decimal32 __builtin_nand32 (const char *str)
23707      Similar to `__builtin_nan', except the return type is `_Decimal32'.
23709  -- Built-in Function: _Decimal64 __builtin_nand64 (const char *str)
23710      Similar to `__builtin_nan', except the return type is `_Decimal64'.
23712  -- Built-in Function: _Decimal128 __builtin_nand128 (const char *str)
23713      Similar to `__builtin_nan', except the return type is
23714      `_Decimal128'.
23716  -- Built-in Function: float __builtin_nanf (const char *str)
23717      Similar to `__builtin_nan', except the return type is `float'.
23719  -- Built-in Function: long double __builtin_nanl (const char *str)
23720      Similar to `__builtin_nan', except the return type is `long
23721      double'.
23723  -- Built-in Function: double __builtin_nans (const char *str)
23724      Similar to `__builtin_nan', except the significand is forced to be
23725      a signaling NaN.  The `nans' function is proposed by WG14 N965.
23727  -- Built-in Function: float __builtin_nansf (const char *str)
23728      Similar to `__builtin_nans', except the return type is `float'.
23730  -- Built-in Function: long double __builtin_nansl (const char *str)
23731      Similar to `__builtin_nans', except the return type is `long
23732      double'.
23734  -- Built-in Function: int __builtin_ffs (unsigned int x)
23735      Returns one plus the index of the least significant 1-bit of X, or
23736      if X is zero, returns zero.
23738  -- Built-in Function: int __builtin_clz (unsigned int x)
23739      Returns the number of leading 0-bits in X, starting at the most
23740      significant bit position.  If X is 0, the result is undefined.
23742  -- Built-in Function: int __builtin_ctz (unsigned int x)
23743      Returns the number of trailing 0-bits in X, starting at the least
23744      significant bit position.  If X is 0, the result is undefined.
23746  -- Built-in Function: int __builtin_popcount (unsigned int x)
23747      Returns the number of 1-bits in X.
23749  -- Built-in Function: int __builtin_parity (unsigned int x)
23750      Returns the parity of X, i.e. the number of 1-bits in X modulo 2.
23752  -- Built-in Function: int __builtin_ffsl (unsigned long)
23753      Similar to `__builtin_ffs', except the argument type is `unsigned
23754      long'.
23756  -- Built-in Function: int __builtin_clzl (unsigned long)
23757      Similar to `__builtin_clz', except the argument type is `unsigned
23758      long'.
23760  -- Built-in Function: int __builtin_ctzl (unsigned long)
23761      Similar to `__builtin_ctz', except the argument type is `unsigned
23762      long'.
23764  -- Built-in Function: int __builtin_popcountl (unsigned long)
23765      Similar to `__builtin_popcount', except the argument type is
23766      `unsigned long'.
23768  -- Built-in Function: int __builtin_parityl (unsigned long)
23769      Similar to `__builtin_parity', except the argument type is
23770      `unsigned long'.
23772  -- Built-in Function: int __builtin_ffsll (unsigned long long)
23773      Similar to `__builtin_ffs', except the argument type is `unsigned
23774      long long'.
23776  -- Built-in Function: int __builtin_clzll (unsigned long long)
23777      Similar to `__builtin_clz', except the argument type is `unsigned
23778      long long'.
23780  -- Built-in Function: int __builtin_ctzll (unsigned long long)
23781      Similar to `__builtin_ctz', except the argument type is `unsigned
23782      long long'.
23784  -- Built-in Function: int __builtin_popcountll (unsigned long long)
23785      Similar to `__builtin_popcount', except the argument type is
23786      `unsigned long long'.
23788  -- Built-in Function: int __builtin_parityll (unsigned long long)
23789      Similar to `__builtin_parity', except the argument type is
23790      `unsigned long long'.
23792  -- Built-in Function: double __builtin_powi (double, int)
23793      Returns the first argument raised to the power of the second.
23794      Unlike the `pow' function no guarantees about precision and
23795      rounding are made.
23797  -- Built-in Function: float __builtin_powif (float, int)
23798      Similar to `__builtin_powi', except the argument and return types
23799      are `float'.
23801  -- Built-in Function: long double __builtin_powil (long double, int)
23802      Similar to `__builtin_powi', except the argument and return types
23803      are `long double'.
23805  -- Built-in Function: int32_t __builtin_bswap32 (int32_t x)
23806      Returns X with the order of the bytes reversed; for example,
23807      `0xaabbccdd' becomes `0xddccbbaa'.  Byte here always means exactly
23808      8 bits.
23810  -- Built-in Function: int64_t __builtin_bswap64 (int64_t x)
23811      Similar to `__builtin_bswap32', except the argument and return
23812      types are 64-bit.
23814 \x1f
23815 File: gcc.info,  Node: Target Builtins,  Next: Target Format Checks,  Prev: Other Builtins,  Up: C Extensions
23817 5.50 Built-in Functions Specific to Particular Target Machines
23818 ==============================================================
23820 On some target machines, GCC supports many built-in functions specific
23821 to those machines.  Generally these generate calls to specific machine
23822 instructions, but allow the compiler to schedule those calls.
23824 * Menu:
23826 * Alpha Built-in Functions::
23827 * ARM iWMMXt Built-in Functions::
23828 * ARM NEON Intrinsics::
23829 * Blackfin Built-in Functions::
23830 * FR-V Built-in Functions::
23831 * X86 Built-in Functions::
23832 * MIPS DSP Built-in Functions::
23833 * MIPS Paired-Single Support::
23834 * MIPS Loongson Built-in Functions::
23835 * Other MIPS Built-in Functions::
23836 * picoChip Built-in Functions::
23837 * PowerPC AltiVec Built-in Functions::
23838 * SPARC VIS Built-in Functions::
23839 * SPU Built-in Functions::
23841 \x1f
23842 File: gcc.info,  Node: Alpha Built-in Functions,  Next: ARM iWMMXt Built-in Functions,  Up: Target Builtins
23844 5.50.1 Alpha Built-in Functions
23845 -------------------------------
23847 These built-in functions are available for the Alpha family of
23848 processors, depending on the command-line switches used.
23850  The following built-in functions are always available.  They all
23851 generate the machine instruction that is part of the name.
23853      long __builtin_alpha_implver (void)
23854      long __builtin_alpha_rpcc (void)
23855      long __builtin_alpha_amask (long)
23856      long __builtin_alpha_cmpbge (long, long)
23857      long __builtin_alpha_extbl (long, long)
23858      long __builtin_alpha_extwl (long, long)
23859      long __builtin_alpha_extll (long, long)
23860      long __builtin_alpha_extql (long, long)
23861      long __builtin_alpha_extwh (long, long)
23862      long __builtin_alpha_extlh (long, long)
23863      long __builtin_alpha_extqh (long, long)
23864      long __builtin_alpha_insbl (long, long)
23865      long __builtin_alpha_inswl (long, long)
23866      long __builtin_alpha_insll (long, long)
23867      long __builtin_alpha_insql (long, long)
23868      long __builtin_alpha_inswh (long, long)
23869      long __builtin_alpha_inslh (long, long)
23870      long __builtin_alpha_insqh (long, long)
23871      long __builtin_alpha_mskbl (long, long)
23872      long __builtin_alpha_mskwl (long, long)
23873      long __builtin_alpha_mskll (long, long)
23874      long __builtin_alpha_mskql (long, long)
23875      long __builtin_alpha_mskwh (long, long)
23876      long __builtin_alpha_msklh (long, long)
23877      long __builtin_alpha_mskqh (long, long)
23878      long __builtin_alpha_umulh (long, long)
23879      long __builtin_alpha_zap (long, long)
23880      long __builtin_alpha_zapnot (long, long)
23882  The following built-in functions are always with `-mmax' or
23883 `-mcpu=CPU' where CPU is `pca56' or later.  They all generate the
23884 machine instruction that is part of the name.
23886      long __builtin_alpha_pklb (long)
23887      long __builtin_alpha_pkwb (long)
23888      long __builtin_alpha_unpkbl (long)
23889      long __builtin_alpha_unpkbw (long)
23890      long __builtin_alpha_minub8 (long, long)
23891      long __builtin_alpha_minsb8 (long, long)
23892      long __builtin_alpha_minuw4 (long, long)
23893      long __builtin_alpha_minsw4 (long, long)
23894      long __builtin_alpha_maxub8 (long, long)
23895      long __builtin_alpha_maxsb8 (long, long)
23896      long __builtin_alpha_maxuw4 (long, long)
23897      long __builtin_alpha_maxsw4 (long, long)
23898      long __builtin_alpha_perr (long, long)
23900  The following built-in functions are always with `-mcix' or
23901 `-mcpu=CPU' where CPU is `ev67' or later.  They all generate the
23902 machine instruction that is part of the name.
23904      long __builtin_alpha_cttz (long)
23905      long __builtin_alpha_ctlz (long)
23906      long __builtin_alpha_ctpop (long)
23908  The following builtins are available on systems that use the OSF/1
23909 PALcode.  Normally they invoke the `rduniq' and `wruniq' PAL calls, but
23910 when invoked with `-mtls-kernel', they invoke `rdval' and `wrval'.
23912      void *__builtin_thread_pointer (void)
23913      void __builtin_set_thread_pointer (void *)
23915 \x1f
23916 File: gcc.info,  Node: ARM iWMMXt Built-in Functions,  Next: ARM NEON Intrinsics,  Prev: Alpha Built-in Functions,  Up: Target Builtins
23918 5.50.2 ARM iWMMXt Built-in Functions
23919 ------------------------------------
23921 These built-in functions are available for the ARM family of processors
23922 when the `-mcpu=iwmmxt' switch is used:
23924      typedef int v2si __attribute__ ((vector_size (8)));
23925      typedef short v4hi __attribute__ ((vector_size (8)));
23926      typedef char v8qi __attribute__ ((vector_size (8)));
23928      int __builtin_arm_getwcx (int)
23929      void __builtin_arm_setwcx (int, int)
23930      int __builtin_arm_textrmsb (v8qi, int)
23931      int __builtin_arm_textrmsh (v4hi, int)
23932      int __builtin_arm_textrmsw (v2si, int)
23933      int __builtin_arm_textrmub (v8qi, int)
23934      int __builtin_arm_textrmuh (v4hi, int)
23935      int __builtin_arm_textrmuw (v2si, int)
23936      v8qi __builtin_arm_tinsrb (v8qi, int)
23937      v4hi __builtin_arm_tinsrh (v4hi, int)
23938      v2si __builtin_arm_tinsrw (v2si, int)
23939      long long __builtin_arm_tmia (long long, int, int)
23940      long long __builtin_arm_tmiabb (long long, int, int)
23941      long long __builtin_arm_tmiabt (long long, int, int)
23942      long long __builtin_arm_tmiaph (long long, int, int)
23943      long long __builtin_arm_tmiatb (long long, int, int)
23944      long long __builtin_arm_tmiatt (long long, int, int)
23945      int __builtin_arm_tmovmskb (v8qi)
23946      int __builtin_arm_tmovmskh (v4hi)
23947      int __builtin_arm_tmovmskw (v2si)
23948      long long __builtin_arm_waccb (v8qi)
23949      long long __builtin_arm_wacch (v4hi)
23950      long long __builtin_arm_waccw (v2si)
23951      v8qi __builtin_arm_waddb (v8qi, v8qi)
23952      v8qi __builtin_arm_waddbss (v8qi, v8qi)
23953      v8qi __builtin_arm_waddbus (v8qi, v8qi)
23954      v4hi __builtin_arm_waddh (v4hi, v4hi)
23955      v4hi __builtin_arm_waddhss (v4hi, v4hi)
23956      v4hi __builtin_arm_waddhus (v4hi, v4hi)
23957      v2si __builtin_arm_waddw (v2si, v2si)
23958      v2si __builtin_arm_waddwss (v2si, v2si)
23959      v2si __builtin_arm_waddwus (v2si, v2si)
23960      v8qi __builtin_arm_walign (v8qi, v8qi, int)
23961      long long __builtin_arm_wand(long long, long long)
23962      long long __builtin_arm_wandn (long long, long long)
23963      v8qi __builtin_arm_wavg2b (v8qi, v8qi)
23964      v8qi __builtin_arm_wavg2br (v8qi, v8qi)
23965      v4hi __builtin_arm_wavg2h (v4hi, v4hi)
23966      v4hi __builtin_arm_wavg2hr (v4hi, v4hi)
23967      v8qi __builtin_arm_wcmpeqb (v8qi, v8qi)
23968      v4hi __builtin_arm_wcmpeqh (v4hi, v4hi)
23969      v2si __builtin_arm_wcmpeqw (v2si, v2si)
23970      v8qi __builtin_arm_wcmpgtsb (v8qi, v8qi)
23971      v4hi __builtin_arm_wcmpgtsh (v4hi, v4hi)
23972      v2si __builtin_arm_wcmpgtsw (v2si, v2si)
23973      v8qi __builtin_arm_wcmpgtub (v8qi, v8qi)
23974      v4hi __builtin_arm_wcmpgtuh (v4hi, v4hi)
23975      v2si __builtin_arm_wcmpgtuw (v2si, v2si)
23976      long long __builtin_arm_wmacs (long long, v4hi, v4hi)
23977      long long __builtin_arm_wmacsz (v4hi, v4hi)
23978      long long __builtin_arm_wmacu (long long, v4hi, v4hi)
23979      long long __builtin_arm_wmacuz (v4hi, v4hi)
23980      v4hi __builtin_arm_wmadds (v4hi, v4hi)
23981      v4hi __builtin_arm_wmaddu (v4hi, v4hi)
23982      v8qi __builtin_arm_wmaxsb (v8qi, v8qi)
23983      v4hi __builtin_arm_wmaxsh (v4hi, v4hi)
23984      v2si __builtin_arm_wmaxsw (v2si, v2si)
23985      v8qi __builtin_arm_wmaxub (v8qi, v8qi)
23986      v4hi __builtin_arm_wmaxuh (v4hi, v4hi)
23987      v2si __builtin_arm_wmaxuw (v2si, v2si)
23988      v8qi __builtin_arm_wminsb (v8qi, v8qi)
23989      v4hi __builtin_arm_wminsh (v4hi, v4hi)
23990      v2si __builtin_arm_wminsw (v2si, v2si)
23991      v8qi __builtin_arm_wminub (v8qi, v8qi)
23992      v4hi __builtin_arm_wminuh (v4hi, v4hi)
23993      v2si __builtin_arm_wminuw (v2si, v2si)
23994      v4hi __builtin_arm_wmulsm (v4hi, v4hi)
23995      v4hi __builtin_arm_wmulul (v4hi, v4hi)
23996      v4hi __builtin_arm_wmulum (v4hi, v4hi)
23997      long long __builtin_arm_wor (long long, long long)
23998      v2si __builtin_arm_wpackdss (long long, long long)
23999      v2si __builtin_arm_wpackdus (long long, long long)
24000      v8qi __builtin_arm_wpackhss (v4hi, v4hi)
24001      v8qi __builtin_arm_wpackhus (v4hi, v4hi)
24002      v4hi __builtin_arm_wpackwss (v2si, v2si)
24003      v4hi __builtin_arm_wpackwus (v2si, v2si)
24004      long long __builtin_arm_wrord (long long, long long)
24005      long long __builtin_arm_wrordi (long long, int)
24006      v4hi __builtin_arm_wrorh (v4hi, long long)
24007      v4hi __builtin_arm_wrorhi (v4hi, int)
24008      v2si __builtin_arm_wrorw (v2si, long long)
24009      v2si __builtin_arm_wrorwi (v2si, int)
24010      v2si __builtin_arm_wsadb (v8qi, v8qi)
24011      v2si __builtin_arm_wsadbz (v8qi, v8qi)
24012      v2si __builtin_arm_wsadh (v4hi, v4hi)
24013      v2si __builtin_arm_wsadhz (v4hi, v4hi)
24014      v4hi __builtin_arm_wshufh (v4hi, int)
24015      long long __builtin_arm_wslld (long long, long long)
24016      long long __builtin_arm_wslldi (long long, int)
24017      v4hi __builtin_arm_wsllh (v4hi, long long)
24018      v4hi __builtin_arm_wsllhi (v4hi, int)
24019      v2si __builtin_arm_wsllw (v2si, long long)
24020      v2si __builtin_arm_wsllwi (v2si, int)
24021      long long __builtin_arm_wsrad (long long, long long)
24022      long long __builtin_arm_wsradi (long long, int)
24023      v4hi __builtin_arm_wsrah (v4hi, long long)
24024      v4hi __builtin_arm_wsrahi (v4hi, int)
24025      v2si __builtin_arm_wsraw (v2si, long long)
24026      v2si __builtin_arm_wsrawi (v2si, int)
24027      long long __builtin_arm_wsrld (long long, long long)
24028      long long __builtin_arm_wsrldi (long long, int)
24029      v4hi __builtin_arm_wsrlh (v4hi, long long)
24030      v4hi __builtin_arm_wsrlhi (v4hi, int)
24031      v2si __builtin_arm_wsrlw (v2si, long long)
24032      v2si __builtin_arm_wsrlwi (v2si, int)
24033      v8qi __builtin_arm_wsubb (v8qi, v8qi)
24034      v8qi __builtin_arm_wsubbss (v8qi, v8qi)
24035      v8qi __builtin_arm_wsubbus (v8qi, v8qi)
24036      v4hi __builtin_arm_wsubh (v4hi, v4hi)
24037      v4hi __builtin_arm_wsubhss (v4hi, v4hi)
24038      v4hi __builtin_arm_wsubhus (v4hi, v4hi)
24039      v2si __builtin_arm_wsubw (v2si, v2si)
24040      v2si __builtin_arm_wsubwss (v2si, v2si)
24041      v2si __builtin_arm_wsubwus (v2si, v2si)
24042      v4hi __builtin_arm_wunpckehsb (v8qi)
24043      v2si __builtin_arm_wunpckehsh (v4hi)
24044      long long __builtin_arm_wunpckehsw (v2si)
24045      v4hi __builtin_arm_wunpckehub (v8qi)
24046      v2si __builtin_arm_wunpckehuh (v4hi)
24047      long long __builtin_arm_wunpckehuw (v2si)
24048      v4hi __builtin_arm_wunpckelsb (v8qi)
24049      v2si __builtin_arm_wunpckelsh (v4hi)
24050      long long __builtin_arm_wunpckelsw (v2si)
24051      v4hi __builtin_arm_wunpckelub (v8qi)
24052      v2si __builtin_arm_wunpckeluh (v4hi)
24053      long long __builtin_arm_wunpckeluw (v2si)
24054      v8qi __builtin_arm_wunpckihb (v8qi, v8qi)
24055      v4hi __builtin_arm_wunpckihh (v4hi, v4hi)
24056      v2si __builtin_arm_wunpckihw (v2si, v2si)
24057      v8qi __builtin_arm_wunpckilb (v8qi, v8qi)
24058      v4hi __builtin_arm_wunpckilh (v4hi, v4hi)
24059      v2si __builtin_arm_wunpckilw (v2si, v2si)
24060      long long __builtin_arm_wxor (long long, long long)
24061      long long __builtin_arm_wzero ()
24063 \x1f
24064 File: gcc.info,  Node: ARM NEON Intrinsics,  Next: Blackfin Built-in Functions,  Prev: ARM iWMMXt Built-in Functions,  Up: Target Builtins
24066 5.50.3 ARM NEON Intrinsics
24067 --------------------------
24069 These built-in intrinsics for the ARM Advanced SIMD extension are
24070 available when the `-mfpu=neon' switch is used:
24072 5.50.3.1 Addition
24073 .................
24075    * uint32x2_t vadd_u32 (uint32x2_t, uint32x2_t)
24076      _Form of expected instruction(s):_ `vadd.i32 D0, D0, D0'
24078    * uint16x4_t vadd_u16 (uint16x4_t, uint16x4_t)
24079      _Form of expected instruction(s):_ `vadd.i16 D0, D0, D0'
24081    * uint8x8_t vadd_u8 (uint8x8_t, uint8x8_t)
24082      _Form of expected instruction(s):_ `vadd.i8 D0, D0, D0'
24084    * int32x2_t vadd_s32 (int32x2_t, int32x2_t)
24085      _Form of expected instruction(s):_ `vadd.i32 D0, D0, D0'
24087    * int16x4_t vadd_s16 (int16x4_t, int16x4_t)
24088      _Form of expected instruction(s):_ `vadd.i16 D0, D0, D0'
24090    * int8x8_t vadd_s8 (int8x8_t, int8x8_t)
24091      _Form of expected instruction(s):_ `vadd.i8 D0, D0, D0'
24093    * uint64x1_t vadd_u64 (uint64x1_t, uint64x1_t)
24094      _Form of expected instruction(s):_ `vadd.i64 D0, D0, D0'
24096    * int64x1_t vadd_s64 (int64x1_t, int64x1_t)
24097      _Form of expected instruction(s):_ `vadd.i64 D0, D0, D0'
24099    * float32x2_t vadd_f32 (float32x2_t, float32x2_t)
24100      _Form of expected instruction(s):_ `vadd.f32 D0, D0, D0'
24102    * uint32x4_t vaddq_u32 (uint32x4_t, uint32x4_t)
24103      _Form of expected instruction(s):_ `vadd.i32 Q0, Q0, Q0'
24105    * uint16x8_t vaddq_u16 (uint16x8_t, uint16x8_t)
24106      _Form of expected instruction(s):_ `vadd.i16 Q0, Q0, Q0'
24108    * uint8x16_t vaddq_u8 (uint8x16_t, uint8x16_t)
24109      _Form of expected instruction(s):_ `vadd.i8 Q0, Q0, Q0'
24111    * int32x4_t vaddq_s32 (int32x4_t, int32x4_t)
24112      _Form of expected instruction(s):_ `vadd.i32 Q0, Q0, Q0'
24114    * int16x8_t vaddq_s16 (int16x8_t, int16x8_t)
24115      _Form of expected instruction(s):_ `vadd.i16 Q0, Q0, Q0'
24117    * int8x16_t vaddq_s8 (int8x16_t, int8x16_t)
24118      _Form of expected instruction(s):_ `vadd.i8 Q0, Q0, Q0'
24120    * uint64x2_t vaddq_u64 (uint64x2_t, uint64x2_t)
24121      _Form of expected instruction(s):_ `vadd.i64 Q0, Q0, Q0'
24123    * int64x2_t vaddq_s64 (int64x2_t, int64x2_t)
24124      _Form of expected instruction(s):_ `vadd.i64 Q0, Q0, Q0'
24126    * float32x4_t vaddq_f32 (float32x4_t, float32x4_t)
24127      _Form of expected instruction(s):_ `vadd.f32 Q0, Q0, Q0'
24129    * uint64x2_t vaddl_u32 (uint32x2_t, uint32x2_t)
24130      _Form of expected instruction(s):_ `vaddl.u32 Q0, D0, D0'
24132    * uint32x4_t vaddl_u16 (uint16x4_t, uint16x4_t)
24133      _Form of expected instruction(s):_ `vaddl.u16 Q0, D0, D0'
24135    * uint16x8_t vaddl_u8 (uint8x8_t, uint8x8_t)
24136      _Form of expected instruction(s):_ `vaddl.u8 Q0, D0, D0'
24138    * int64x2_t vaddl_s32 (int32x2_t, int32x2_t)
24139      _Form of expected instruction(s):_ `vaddl.s32 Q0, D0, D0'
24141    * int32x4_t vaddl_s16 (int16x4_t, int16x4_t)
24142      _Form of expected instruction(s):_ `vaddl.s16 Q0, D0, D0'
24144    * int16x8_t vaddl_s8 (int8x8_t, int8x8_t)
24145      _Form of expected instruction(s):_ `vaddl.s8 Q0, D0, D0'
24147    * uint64x2_t vaddw_u32 (uint64x2_t, uint32x2_t)
24148      _Form of expected instruction(s):_ `vaddw.u32 Q0, Q0, D0'
24150    * uint32x4_t vaddw_u16 (uint32x4_t, uint16x4_t)
24151      _Form of expected instruction(s):_ `vaddw.u16 Q0, Q0, D0'
24153    * uint16x8_t vaddw_u8 (uint16x8_t, uint8x8_t)
24154      _Form of expected instruction(s):_ `vaddw.u8 Q0, Q0, D0'
24156    * int64x2_t vaddw_s32 (int64x2_t, int32x2_t)
24157      _Form of expected instruction(s):_ `vaddw.s32 Q0, Q0, D0'
24159    * int32x4_t vaddw_s16 (int32x4_t, int16x4_t)
24160      _Form of expected instruction(s):_ `vaddw.s16 Q0, Q0, D0'
24162    * int16x8_t vaddw_s8 (int16x8_t, int8x8_t)
24163      _Form of expected instruction(s):_ `vaddw.s8 Q0, Q0, D0'
24165    * uint32x2_t vhadd_u32 (uint32x2_t, uint32x2_t)
24166      _Form of expected instruction(s):_ `vhadd.u32 D0, D0, D0'
24168    * uint16x4_t vhadd_u16 (uint16x4_t, uint16x4_t)
24169      _Form of expected instruction(s):_ `vhadd.u16 D0, D0, D0'
24171    * uint8x8_t vhadd_u8 (uint8x8_t, uint8x8_t)
24172      _Form of expected instruction(s):_ `vhadd.u8 D0, D0, D0'
24174    * int32x2_t vhadd_s32 (int32x2_t, int32x2_t)
24175      _Form of expected instruction(s):_ `vhadd.s32 D0, D0, D0'
24177    * int16x4_t vhadd_s16 (int16x4_t, int16x4_t)
24178      _Form of expected instruction(s):_ `vhadd.s16 D0, D0, D0'
24180    * int8x8_t vhadd_s8 (int8x8_t, int8x8_t)
24181      _Form of expected instruction(s):_ `vhadd.s8 D0, D0, D0'
24183    * uint32x4_t vhaddq_u32 (uint32x4_t, uint32x4_t)
24184      _Form of expected instruction(s):_ `vhadd.u32 Q0, Q0, Q0'
24186    * uint16x8_t vhaddq_u16 (uint16x8_t, uint16x8_t)
24187      _Form of expected instruction(s):_ `vhadd.u16 Q0, Q0, Q0'
24189    * uint8x16_t vhaddq_u8 (uint8x16_t, uint8x16_t)
24190      _Form of expected instruction(s):_ `vhadd.u8 Q0, Q0, Q0'
24192    * int32x4_t vhaddq_s32 (int32x4_t, int32x4_t)
24193      _Form of expected instruction(s):_ `vhadd.s32 Q0, Q0, Q0'
24195    * int16x8_t vhaddq_s16 (int16x8_t, int16x8_t)
24196      _Form of expected instruction(s):_ `vhadd.s16 Q0, Q0, Q0'
24198    * int8x16_t vhaddq_s8 (int8x16_t, int8x16_t)
24199      _Form of expected instruction(s):_ `vhadd.s8 Q0, Q0, Q0'
24201    * uint32x2_t vrhadd_u32 (uint32x2_t, uint32x2_t)
24202      _Form of expected instruction(s):_ `vrhadd.u32 D0, D0, D0'
24204    * uint16x4_t vrhadd_u16 (uint16x4_t, uint16x4_t)
24205      _Form of expected instruction(s):_ `vrhadd.u16 D0, D0, D0'
24207    * uint8x8_t vrhadd_u8 (uint8x8_t, uint8x8_t)
24208      _Form of expected instruction(s):_ `vrhadd.u8 D0, D0, D0'
24210    * int32x2_t vrhadd_s32 (int32x2_t, int32x2_t)
24211      _Form of expected instruction(s):_ `vrhadd.s32 D0, D0, D0'
24213    * int16x4_t vrhadd_s16 (int16x4_t, int16x4_t)
24214      _Form of expected instruction(s):_ `vrhadd.s16 D0, D0, D0'
24216    * int8x8_t vrhadd_s8 (int8x8_t, int8x8_t)
24217      _Form of expected instruction(s):_ `vrhadd.s8 D0, D0, D0'
24219    * uint32x4_t vrhaddq_u32 (uint32x4_t, uint32x4_t)
24220      _Form of expected instruction(s):_ `vrhadd.u32 Q0, Q0, Q0'
24222    * uint16x8_t vrhaddq_u16 (uint16x8_t, uint16x8_t)
24223      _Form of expected instruction(s):_ `vrhadd.u16 Q0, Q0, Q0'
24225    * uint8x16_t vrhaddq_u8 (uint8x16_t, uint8x16_t)
24226      _Form of expected instruction(s):_ `vrhadd.u8 Q0, Q0, Q0'
24228    * int32x4_t vrhaddq_s32 (int32x4_t, int32x4_t)
24229      _Form of expected instruction(s):_ `vrhadd.s32 Q0, Q0, Q0'
24231    * int16x8_t vrhaddq_s16 (int16x8_t, int16x8_t)
24232      _Form of expected instruction(s):_ `vrhadd.s16 Q0, Q0, Q0'
24234    * int8x16_t vrhaddq_s8 (int8x16_t, int8x16_t)
24235      _Form of expected instruction(s):_ `vrhadd.s8 Q0, Q0, Q0'
24237    * uint32x2_t vqadd_u32 (uint32x2_t, uint32x2_t)
24238      _Form of expected instruction(s):_ `vqadd.u32 D0, D0, D0'
24240    * uint16x4_t vqadd_u16 (uint16x4_t, uint16x4_t)
24241      _Form of expected instruction(s):_ `vqadd.u16 D0, D0, D0'
24243    * uint8x8_t vqadd_u8 (uint8x8_t, uint8x8_t)
24244      _Form of expected instruction(s):_ `vqadd.u8 D0, D0, D0'
24246    * int32x2_t vqadd_s32 (int32x2_t, int32x2_t)
24247      _Form of expected instruction(s):_ `vqadd.s32 D0, D0, D0'
24249    * int16x4_t vqadd_s16 (int16x4_t, int16x4_t)
24250      _Form of expected instruction(s):_ `vqadd.s16 D0, D0, D0'
24252    * int8x8_t vqadd_s8 (int8x8_t, int8x8_t)
24253      _Form of expected instruction(s):_ `vqadd.s8 D0, D0, D0'
24255    * uint64x1_t vqadd_u64 (uint64x1_t, uint64x1_t)
24256      _Form of expected instruction(s):_ `vqadd.u64 D0, D0, D0'
24258    * int64x1_t vqadd_s64 (int64x1_t, int64x1_t)
24259      _Form of expected instruction(s):_ `vqadd.s64 D0, D0, D0'
24261    * uint32x4_t vqaddq_u32 (uint32x4_t, uint32x4_t)
24262      _Form of expected instruction(s):_ `vqadd.u32 Q0, Q0, Q0'
24264    * uint16x8_t vqaddq_u16 (uint16x8_t, uint16x8_t)
24265      _Form of expected instruction(s):_ `vqadd.u16 Q0, Q0, Q0'
24267    * uint8x16_t vqaddq_u8 (uint8x16_t, uint8x16_t)
24268      _Form of expected instruction(s):_ `vqadd.u8 Q0, Q0, Q0'
24270    * int32x4_t vqaddq_s32 (int32x4_t, int32x4_t)
24271      _Form of expected instruction(s):_ `vqadd.s32 Q0, Q0, Q0'
24273    * int16x8_t vqaddq_s16 (int16x8_t, int16x8_t)
24274      _Form of expected instruction(s):_ `vqadd.s16 Q0, Q0, Q0'
24276    * int8x16_t vqaddq_s8 (int8x16_t, int8x16_t)
24277      _Form of expected instruction(s):_ `vqadd.s8 Q0, Q0, Q0'
24279    * uint64x2_t vqaddq_u64 (uint64x2_t, uint64x2_t)
24280      _Form of expected instruction(s):_ `vqadd.u64 Q0, Q0, Q0'
24282    * int64x2_t vqaddq_s64 (int64x2_t, int64x2_t)
24283      _Form of expected instruction(s):_ `vqadd.s64 Q0, Q0, Q0'
24285    * uint32x2_t vaddhn_u64 (uint64x2_t, uint64x2_t)
24286      _Form of expected instruction(s):_ `vaddhn.i64 D0, Q0, Q0'
24288    * uint16x4_t vaddhn_u32 (uint32x4_t, uint32x4_t)
24289      _Form of expected instruction(s):_ `vaddhn.i32 D0, Q0, Q0'
24291    * uint8x8_t vaddhn_u16 (uint16x8_t, uint16x8_t)
24292      _Form of expected instruction(s):_ `vaddhn.i16 D0, Q0, Q0'
24294    * int32x2_t vaddhn_s64 (int64x2_t, int64x2_t)
24295      _Form of expected instruction(s):_ `vaddhn.i64 D0, Q0, Q0'
24297    * int16x4_t vaddhn_s32 (int32x4_t, int32x4_t)
24298      _Form of expected instruction(s):_ `vaddhn.i32 D0, Q0, Q0'
24300    * int8x8_t vaddhn_s16 (int16x8_t, int16x8_t)
24301      _Form of expected instruction(s):_ `vaddhn.i16 D0, Q0, Q0'
24303    * uint32x2_t vraddhn_u64 (uint64x2_t, uint64x2_t)
24304      _Form of expected instruction(s):_ `vraddhn.i64 D0, Q0, Q0'
24306    * uint16x4_t vraddhn_u32 (uint32x4_t, uint32x4_t)
24307      _Form of expected instruction(s):_ `vraddhn.i32 D0, Q0, Q0'
24309    * uint8x8_t vraddhn_u16 (uint16x8_t, uint16x8_t)
24310      _Form of expected instruction(s):_ `vraddhn.i16 D0, Q0, Q0'
24312    * int32x2_t vraddhn_s64 (int64x2_t, int64x2_t)
24313      _Form of expected instruction(s):_ `vraddhn.i64 D0, Q0, Q0'
24315    * int16x4_t vraddhn_s32 (int32x4_t, int32x4_t)
24316      _Form of expected instruction(s):_ `vraddhn.i32 D0, Q0, Q0'
24318    * int8x8_t vraddhn_s16 (int16x8_t, int16x8_t)
24319      _Form of expected instruction(s):_ `vraddhn.i16 D0, Q0, Q0'
24321 5.50.3.2 Multiplication
24322 .......................
24324    * uint32x2_t vmul_u32 (uint32x2_t, uint32x2_t)
24325      _Form of expected instruction(s):_ `vmul.i32 D0, D0, D0'
24327    * uint16x4_t vmul_u16 (uint16x4_t, uint16x4_t)
24328      _Form of expected instruction(s):_ `vmul.i16 D0, D0, D0'
24330    * uint8x8_t vmul_u8 (uint8x8_t, uint8x8_t)
24331      _Form of expected instruction(s):_ `vmul.i8 D0, D0, D0'
24333    * int32x2_t vmul_s32 (int32x2_t, int32x2_t)
24334      _Form of expected instruction(s):_ `vmul.i32 D0, D0, D0'
24336    * int16x4_t vmul_s16 (int16x4_t, int16x4_t)
24337      _Form of expected instruction(s):_ `vmul.i16 D0, D0, D0'
24339    * int8x8_t vmul_s8 (int8x8_t, int8x8_t)
24340      _Form of expected instruction(s):_ `vmul.i8 D0, D0, D0'
24342    * float32x2_t vmul_f32 (float32x2_t, float32x2_t)
24343      _Form of expected instruction(s):_ `vmul.f32 D0, D0, D0'
24345    * poly8x8_t vmul_p8 (poly8x8_t, poly8x8_t)
24346      _Form of expected instruction(s):_ `vmul.p8 D0, D0, D0'
24348    * uint32x4_t vmulq_u32 (uint32x4_t, uint32x4_t)
24349      _Form of expected instruction(s):_ `vmul.i32 Q0, Q0, Q0'
24351    * uint16x8_t vmulq_u16 (uint16x8_t, uint16x8_t)
24352      _Form of expected instruction(s):_ `vmul.i16 Q0, Q0, Q0'
24354    * uint8x16_t vmulq_u8 (uint8x16_t, uint8x16_t)
24355      _Form of expected instruction(s):_ `vmul.i8 Q0, Q0, Q0'
24357    * int32x4_t vmulq_s32 (int32x4_t, int32x4_t)
24358      _Form of expected instruction(s):_ `vmul.i32 Q0, Q0, Q0'
24360    * int16x8_t vmulq_s16 (int16x8_t, int16x8_t)
24361      _Form of expected instruction(s):_ `vmul.i16 Q0, Q0, Q0'
24363    * int8x16_t vmulq_s8 (int8x16_t, int8x16_t)
24364      _Form of expected instruction(s):_ `vmul.i8 Q0, Q0, Q0'
24366    * float32x4_t vmulq_f32 (float32x4_t, float32x4_t)
24367      _Form of expected instruction(s):_ `vmul.f32 Q0, Q0, Q0'
24369    * poly8x16_t vmulq_p8 (poly8x16_t, poly8x16_t)
24370      _Form of expected instruction(s):_ `vmul.p8 Q0, Q0, Q0'
24372    * int32x2_t vqdmulh_s32 (int32x2_t, int32x2_t)
24373      _Form of expected instruction(s):_ `vqdmulh.s32 D0, D0, D0'
24375    * int16x4_t vqdmulh_s16 (int16x4_t, int16x4_t)
24376      _Form of expected instruction(s):_ `vqdmulh.s16 D0, D0, D0'
24378    * int32x4_t vqdmulhq_s32 (int32x4_t, int32x4_t)
24379      _Form of expected instruction(s):_ `vqdmulh.s32 Q0, Q0, Q0'
24381    * int16x8_t vqdmulhq_s16 (int16x8_t, int16x8_t)
24382      _Form of expected instruction(s):_ `vqdmulh.s16 Q0, Q0, Q0'
24384    * int32x2_t vqrdmulh_s32 (int32x2_t, int32x2_t)
24385      _Form of expected instruction(s):_ `vqrdmulh.s32 D0, D0, D0'
24387    * int16x4_t vqrdmulh_s16 (int16x4_t, int16x4_t)
24388      _Form of expected instruction(s):_ `vqrdmulh.s16 D0, D0, D0'
24390    * int32x4_t vqrdmulhq_s32 (int32x4_t, int32x4_t)
24391      _Form of expected instruction(s):_ `vqrdmulh.s32 Q0, Q0, Q0'
24393    * int16x8_t vqrdmulhq_s16 (int16x8_t, int16x8_t)
24394      _Form of expected instruction(s):_ `vqrdmulh.s16 Q0, Q0, Q0'
24396    * uint64x2_t vmull_u32 (uint32x2_t, uint32x2_t)
24397      _Form of expected instruction(s):_ `vmull.u32 Q0, D0, D0'
24399    * uint32x4_t vmull_u16 (uint16x4_t, uint16x4_t)
24400      _Form of expected instruction(s):_ `vmull.u16 Q0, D0, D0'
24402    * uint16x8_t vmull_u8 (uint8x8_t, uint8x8_t)
24403      _Form of expected instruction(s):_ `vmull.u8 Q0, D0, D0'
24405    * int64x2_t vmull_s32 (int32x2_t, int32x2_t)
24406      _Form of expected instruction(s):_ `vmull.s32 Q0, D0, D0'
24408    * int32x4_t vmull_s16 (int16x4_t, int16x4_t)
24409      _Form of expected instruction(s):_ `vmull.s16 Q0, D0, D0'
24411    * int16x8_t vmull_s8 (int8x8_t, int8x8_t)
24412      _Form of expected instruction(s):_ `vmull.s8 Q0, D0, D0'
24414    * poly16x8_t vmull_p8 (poly8x8_t, poly8x8_t)
24415      _Form of expected instruction(s):_ `vmull.p8 Q0, D0, D0'
24417    * int64x2_t vqdmull_s32 (int32x2_t, int32x2_t)
24418      _Form of expected instruction(s):_ `vqdmull.s32 Q0, D0, D0'
24420    * int32x4_t vqdmull_s16 (int16x4_t, int16x4_t)
24421      _Form of expected instruction(s):_ `vqdmull.s16 Q0, D0, D0'
24423 5.50.3.3 Multiply-accumulate
24424 ............................
24426    * uint32x2_t vmla_u32 (uint32x2_t, uint32x2_t, uint32x2_t)
24427      _Form of expected instruction(s):_ `vmla.i32 D0, D0, D0'
24429    * uint16x4_t vmla_u16 (uint16x4_t, uint16x4_t, uint16x4_t)
24430      _Form of expected instruction(s):_ `vmla.i16 D0, D0, D0'
24432    * uint8x8_t vmla_u8 (uint8x8_t, uint8x8_t, uint8x8_t)
24433      _Form of expected instruction(s):_ `vmla.i8 D0, D0, D0'
24435    * int32x2_t vmla_s32 (int32x2_t, int32x2_t, int32x2_t)
24436      _Form of expected instruction(s):_ `vmla.i32 D0, D0, D0'
24438    * int16x4_t vmla_s16 (int16x4_t, int16x4_t, int16x4_t)
24439      _Form of expected instruction(s):_ `vmla.i16 D0, D0, D0'
24441    * int8x8_t vmla_s8 (int8x8_t, int8x8_t, int8x8_t)
24442      _Form of expected instruction(s):_ `vmla.i8 D0, D0, D0'
24444    * float32x2_t vmla_f32 (float32x2_t, float32x2_t, float32x2_t)
24445      _Form of expected instruction(s):_ `vmla.f32 D0, D0, D0'
24447    * uint32x4_t vmlaq_u32 (uint32x4_t, uint32x4_t, uint32x4_t)
24448      _Form of expected instruction(s):_ `vmla.i32 Q0, Q0, Q0'
24450    * uint16x8_t vmlaq_u16 (uint16x8_t, uint16x8_t, uint16x8_t)
24451      _Form of expected instruction(s):_ `vmla.i16 Q0, Q0, Q0'
24453    * uint8x16_t vmlaq_u8 (uint8x16_t, uint8x16_t, uint8x16_t)
24454      _Form of expected instruction(s):_ `vmla.i8 Q0, Q0, Q0'
24456    * int32x4_t vmlaq_s32 (int32x4_t, int32x4_t, int32x4_t)
24457      _Form of expected instruction(s):_ `vmla.i32 Q0, Q0, Q0'
24459    * int16x8_t vmlaq_s16 (int16x8_t, int16x8_t, int16x8_t)
24460      _Form of expected instruction(s):_ `vmla.i16 Q0, Q0, Q0'
24462    * int8x16_t vmlaq_s8 (int8x16_t, int8x16_t, int8x16_t)
24463      _Form of expected instruction(s):_ `vmla.i8 Q0, Q0, Q0'
24465    * float32x4_t vmlaq_f32 (float32x4_t, float32x4_t, float32x4_t)
24466      _Form of expected instruction(s):_ `vmla.f32 Q0, Q0, Q0'
24468    * uint64x2_t vmlal_u32 (uint64x2_t, uint32x2_t, uint32x2_t)
24469      _Form of expected instruction(s):_ `vmlal.u32 Q0, D0, D0'
24471    * uint32x4_t vmlal_u16 (uint32x4_t, uint16x4_t, uint16x4_t)
24472      _Form of expected instruction(s):_ `vmlal.u16 Q0, D0, D0'
24474    * uint16x8_t vmlal_u8 (uint16x8_t, uint8x8_t, uint8x8_t)
24475      _Form of expected instruction(s):_ `vmlal.u8 Q0, D0, D0'
24477    * int64x2_t vmlal_s32 (int64x2_t, int32x2_t, int32x2_t)
24478      _Form of expected instruction(s):_ `vmlal.s32 Q0, D0, D0'
24480    * int32x4_t vmlal_s16 (int32x4_t, int16x4_t, int16x4_t)
24481      _Form of expected instruction(s):_ `vmlal.s16 Q0, D0, D0'
24483    * int16x8_t vmlal_s8 (int16x8_t, int8x8_t, int8x8_t)
24484      _Form of expected instruction(s):_ `vmlal.s8 Q0, D0, D0'
24486    * int64x2_t vqdmlal_s32 (int64x2_t, int32x2_t, int32x2_t)
24487      _Form of expected instruction(s):_ `vqdmlal.s32 Q0, D0, D0'
24489    * int32x4_t vqdmlal_s16 (int32x4_t, int16x4_t, int16x4_t)
24490      _Form of expected instruction(s):_ `vqdmlal.s16 Q0, D0, D0'
24492 5.50.3.4 Multiply-subtract
24493 ..........................
24495    * uint32x2_t vmls_u32 (uint32x2_t, uint32x2_t, uint32x2_t)
24496      _Form of expected instruction(s):_ `vmls.i32 D0, D0, D0'
24498    * uint16x4_t vmls_u16 (uint16x4_t, uint16x4_t, uint16x4_t)
24499      _Form of expected instruction(s):_ `vmls.i16 D0, D0, D0'
24501    * uint8x8_t vmls_u8 (uint8x8_t, uint8x8_t, uint8x8_t)
24502      _Form of expected instruction(s):_ `vmls.i8 D0, D0, D0'
24504    * int32x2_t vmls_s32 (int32x2_t, int32x2_t, int32x2_t)
24505      _Form of expected instruction(s):_ `vmls.i32 D0, D0, D0'
24507    * int16x4_t vmls_s16 (int16x4_t, int16x4_t, int16x4_t)
24508      _Form of expected instruction(s):_ `vmls.i16 D0, D0, D0'
24510    * int8x8_t vmls_s8 (int8x8_t, int8x8_t, int8x8_t)
24511      _Form of expected instruction(s):_ `vmls.i8 D0, D0, D0'
24513    * float32x2_t vmls_f32 (float32x2_t, float32x2_t, float32x2_t)
24514      _Form of expected instruction(s):_ `vmls.f32 D0, D0, D0'
24516    * uint32x4_t vmlsq_u32 (uint32x4_t, uint32x4_t, uint32x4_t)
24517      _Form of expected instruction(s):_ `vmls.i32 Q0, Q0, Q0'
24519    * uint16x8_t vmlsq_u16 (uint16x8_t, uint16x8_t, uint16x8_t)
24520      _Form of expected instruction(s):_ `vmls.i16 Q0, Q0, Q0'
24522    * uint8x16_t vmlsq_u8 (uint8x16_t, uint8x16_t, uint8x16_t)
24523      _Form of expected instruction(s):_ `vmls.i8 Q0, Q0, Q0'
24525    * int32x4_t vmlsq_s32 (int32x4_t, int32x4_t, int32x4_t)
24526      _Form of expected instruction(s):_ `vmls.i32 Q0, Q0, Q0'
24528    * int16x8_t vmlsq_s16 (int16x8_t, int16x8_t, int16x8_t)
24529      _Form of expected instruction(s):_ `vmls.i16 Q0, Q0, Q0'
24531    * int8x16_t vmlsq_s8 (int8x16_t, int8x16_t, int8x16_t)
24532      _Form of expected instruction(s):_ `vmls.i8 Q0, Q0, Q0'
24534    * float32x4_t vmlsq_f32 (float32x4_t, float32x4_t, float32x4_t)
24535      _Form of expected instruction(s):_ `vmls.f32 Q0, Q0, Q0'
24537    * uint64x2_t vmlsl_u32 (uint64x2_t, uint32x2_t, uint32x2_t)
24538      _Form of expected instruction(s):_ `vmlsl.u32 Q0, D0, D0'
24540    * uint32x4_t vmlsl_u16 (uint32x4_t, uint16x4_t, uint16x4_t)
24541      _Form of expected instruction(s):_ `vmlsl.u16 Q0, D0, D0'
24543    * uint16x8_t vmlsl_u8 (uint16x8_t, uint8x8_t, uint8x8_t)
24544      _Form of expected instruction(s):_ `vmlsl.u8 Q0, D0, D0'
24546    * int64x2_t vmlsl_s32 (int64x2_t, int32x2_t, int32x2_t)
24547      _Form of expected instruction(s):_ `vmlsl.s32 Q0, D0, D0'
24549    * int32x4_t vmlsl_s16 (int32x4_t, int16x4_t, int16x4_t)
24550      _Form of expected instruction(s):_ `vmlsl.s16 Q0, D0, D0'
24552    * int16x8_t vmlsl_s8 (int16x8_t, int8x8_t, int8x8_t)
24553      _Form of expected instruction(s):_ `vmlsl.s8 Q0, D0, D0'
24555    * int64x2_t vqdmlsl_s32 (int64x2_t, int32x2_t, int32x2_t)
24556      _Form of expected instruction(s):_ `vqdmlsl.s32 Q0, D0, D0'
24558    * int32x4_t vqdmlsl_s16 (int32x4_t, int16x4_t, int16x4_t)
24559      _Form of expected instruction(s):_ `vqdmlsl.s16 Q0, D0, D0'
24561 5.50.3.5 Subtraction
24562 ....................
24564    * uint32x2_t vsub_u32 (uint32x2_t, uint32x2_t)
24565      _Form of expected instruction(s):_ `vsub.i32 D0, D0, D0'
24567    * uint16x4_t vsub_u16 (uint16x4_t, uint16x4_t)
24568      _Form of expected instruction(s):_ `vsub.i16 D0, D0, D0'
24570    * uint8x8_t vsub_u8 (uint8x8_t, uint8x8_t)
24571      _Form of expected instruction(s):_ `vsub.i8 D0, D0, D0'
24573    * int32x2_t vsub_s32 (int32x2_t, int32x2_t)
24574      _Form of expected instruction(s):_ `vsub.i32 D0, D0, D0'
24576    * int16x4_t vsub_s16 (int16x4_t, int16x4_t)
24577      _Form of expected instruction(s):_ `vsub.i16 D0, D0, D0'
24579    * int8x8_t vsub_s8 (int8x8_t, int8x8_t)
24580      _Form of expected instruction(s):_ `vsub.i8 D0, D0, D0'
24582    * uint64x1_t vsub_u64 (uint64x1_t, uint64x1_t)
24583      _Form of expected instruction(s):_ `vsub.i64 D0, D0, D0'
24585    * int64x1_t vsub_s64 (int64x1_t, int64x1_t)
24586      _Form of expected instruction(s):_ `vsub.i64 D0, D0, D0'
24588    * float32x2_t vsub_f32 (float32x2_t, float32x2_t)
24589      _Form of expected instruction(s):_ `vsub.f32 D0, D0, D0'
24591    * uint32x4_t vsubq_u32 (uint32x4_t, uint32x4_t)
24592      _Form of expected instruction(s):_ `vsub.i32 Q0, Q0, Q0'
24594    * uint16x8_t vsubq_u16 (uint16x8_t, uint16x8_t)
24595      _Form of expected instruction(s):_ `vsub.i16 Q0, Q0, Q0'
24597    * uint8x16_t vsubq_u8 (uint8x16_t, uint8x16_t)
24598      _Form of expected instruction(s):_ `vsub.i8 Q0, Q0, Q0'
24600    * int32x4_t vsubq_s32 (int32x4_t, int32x4_t)
24601      _Form of expected instruction(s):_ `vsub.i32 Q0, Q0, Q0'
24603    * int16x8_t vsubq_s16 (int16x8_t, int16x8_t)
24604      _Form of expected instruction(s):_ `vsub.i16 Q0, Q0, Q0'
24606    * int8x16_t vsubq_s8 (int8x16_t, int8x16_t)
24607      _Form of expected instruction(s):_ `vsub.i8 Q0, Q0, Q0'
24609    * uint64x2_t vsubq_u64 (uint64x2_t, uint64x2_t)
24610      _Form of expected instruction(s):_ `vsub.i64 Q0, Q0, Q0'
24612    * int64x2_t vsubq_s64 (int64x2_t, int64x2_t)
24613      _Form of expected instruction(s):_ `vsub.i64 Q0, Q0, Q0'
24615    * float32x4_t vsubq_f32 (float32x4_t, float32x4_t)
24616      _Form of expected instruction(s):_ `vsub.f32 Q0, Q0, Q0'
24618    * uint64x2_t vsubl_u32 (uint32x2_t, uint32x2_t)
24619      _Form of expected instruction(s):_ `vsubl.u32 Q0, D0, D0'
24621    * uint32x4_t vsubl_u16 (uint16x4_t, uint16x4_t)
24622      _Form of expected instruction(s):_ `vsubl.u16 Q0, D0, D0'
24624    * uint16x8_t vsubl_u8 (uint8x8_t, uint8x8_t)
24625      _Form of expected instruction(s):_ `vsubl.u8 Q0, D0, D0'
24627    * int64x2_t vsubl_s32 (int32x2_t, int32x2_t)
24628      _Form of expected instruction(s):_ `vsubl.s32 Q0, D0, D0'
24630    * int32x4_t vsubl_s16 (int16x4_t, int16x4_t)
24631      _Form of expected instruction(s):_ `vsubl.s16 Q0, D0, D0'
24633    * int16x8_t vsubl_s8 (int8x8_t, int8x8_t)
24634      _Form of expected instruction(s):_ `vsubl.s8 Q0, D0, D0'
24636    * uint64x2_t vsubw_u32 (uint64x2_t, uint32x2_t)
24637      _Form of expected instruction(s):_ `vsubw.u32 Q0, Q0, D0'
24639    * uint32x4_t vsubw_u16 (uint32x4_t, uint16x4_t)
24640      _Form of expected instruction(s):_ `vsubw.u16 Q0, Q0, D0'
24642    * uint16x8_t vsubw_u8 (uint16x8_t, uint8x8_t)
24643      _Form of expected instruction(s):_ `vsubw.u8 Q0, Q0, D0'
24645    * int64x2_t vsubw_s32 (int64x2_t, int32x2_t)
24646      _Form of expected instruction(s):_ `vsubw.s32 Q0, Q0, D0'
24648    * int32x4_t vsubw_s16 (int32x4_t, int16x4_t)
24649      _Form of expected instruction(s):_ `vsubw.s16 Q0, Q0, D0'
24651    * int16x8_t vsubw_s8 (int16x8_t, int8x8_t)
24652      _Form of expected instruction(s):_ `vsubw.s8 Q0, Q0, D0'
24654    * uint32x2_t vhsub_u32 (uint32x2_t, uint32x2_t)
24655      _Form of expected instruction(s):_ `vhsub.u32 D0, D0, D0'
24657    * uint16x4_t vhsub_u16 (uint16x4_t, uint16x4_t)
24658      _Form of expected instruction(s):_ `vhsub.u16 D0, D0, D0'
24660    * uint8x8_t vhsub_u8 (uint8x8_t, uint8x8_t)
24661      _Form of expected instruction(s):_ `vhsub.u8 D0, D0, D0'
24663    * int32x2_t vhsub_s32 (int32x2_t, int32x2_t)
24664      _Form of expected instruction(s):_ `vhsub.s32 D0, D0, D0'
24666    * int16x4_t vhsub_s16 (int16x4_t, int16x4_t)
24667      _Form of expected instruction(s):_ `vhsub.s16 D0, D0, D0'
24669    * int8x8_t vhsub_s8 (int8x8_t, int8x8_t)
24670      _Form of expected instruction(s):_ `vhsub.s8 D0, D0, D0'
24672    * uint32x4_t vhsubq_u32 (uint32x4_t, uint32x4_t)
24673      _Form of expected instruction(s):_ `vhsub.u32 Q0, Q0, Q0'
24675    * uint16x8_t vhsubq_u16 (uint16x8_t, uint16x8_t)
24676      _Form of expected instruction(s):_ `vhsub.u16 Q0, Q0, Q0'
24678    * uint8x16_t vhsubq_u8 (uint8x16_t, uint8x16_t)
24679      _Form of expected instruction(s):_ `vhsub.u8 Q0, Q0, Q0'
24681    * int32x4_t vhsubq_s32 (int32x4_t, int32x4_t)
24682      _Form of expected instruction(s):_ `vhsub.s32 Q0, Q0, Q0'
24684    * int16x8_t vhsubq_s16 (int16x8_t, int16x8_t)
24685      _Form of expected instruction(s):_ `vhsub.s16 Q0, Q0, Q0'
24687    * int8x16_t vhsubq_s8 (int8x16_t, int8x16_t)
24688      _Form of expected instruction(s):_ `vhsub.s8 Q0, Q0, Q0'
24690    * uint32x2_t vqsub_u32 (uint32x2_t, uint32x2_t)
24691      _Form of expected instruction(s):_ `vqsub.u32 D0, D0, D0'
24693    * uint16x4_t vqsub_u16 (uint16x4_t, uint16x4_t)
24694      _Form of expected instruction(s):_ `vqsub.u16 D0, D0, D0'
24696    * uint8x8_t vqsub_u8 (uint8x8_t, uint8x8_t)
24697      _Form of expected instruction(s):_ `vqsub.u8 D0, D0, D0'
24699    * int32x2_t vqsub_s32 (int32x2_t, int32x2_t)
24700      _Form of expected instruction(s):_ `vqsub.s32 D0, D0, D0'
24702    * int16x4_t vqsub_s16 (int16x4_t, int16x4_t)
24703      _Form of expected instruction(s):_ `vqsub.s16 D0, D0, D0'
24705    * int8x8_t vqsub_s8 (int8x8_t, int8x8_t)
24706      _Form of expected instruction(s):_ `vqsub.s8 D0, D0, D0'
24708    * uint64x1_t vqsub_u64 (uint64x1_t, uint64x1_t)
24709      _Form of expected instruction(s):_ `vqsub.u64 D0, D0, D0'
24711    * int64x1_t vqsub_s64 (int64x1_t, int64x1_t)
24712      _Form of expected instruction(s):_ `vqsub.s64 D0, D0, D0'
24714    * uint32x4_t vqsubq_u32 (uint32x4_t, uint32x4_t)
24715      _Form of expected instruction(s):_ `vqsub.u32 Q0, Q0, Q0'
24717    * uint16x8_t vqsubq_u16 (uint16x8_t, uint16x8_t)
24718      _Form of expected instruction(s):_ `vqsub.u16 Q0, Q0, Q0'
24720    * uint8x16_t vqsubq_u8 (uint8x16_t, uint8x16_t)
24721      _Form of expected instruction(s):_ `vqsub.u8 Q0, Q0, Q0'
24723    * int32x4_t vqsubq_s32 (int32x4_t, int32x4_t)
24724      _Form of expected instruction(s):_ `vqsub.s32 Q0, Q0, Q0'
24726    * int16x8_t vqsubq_s16 (int16x8_t, int16x8_t)
24727      _Form of expected instruction(s):_ `vqsub.s16 Q0, Q0, Q0'
24729    * int8x16_t vqsubq_s8 (int8x16_t, int8x16_t)
24730      _Form of expected instruction(s):_ `vqsub.s8 Q0, Q0, Q0'
24732    * uint64x2_t vqsubq_u64 (uint64x2_t, uint64x2_t)
24733      _Form of expected instruction(s):_ `vqsub.u64 Q0, Q0, Q0'
24735    * int64x2_t vqsubq_s64 (int64x2_t, int64x2_t)
24736      _Form of expected instruction(s):_ `vqsub.s64 Q0, Q0, Q0'
24738    * uint32x2_t vsubhn_u64 (uint64x2_t, uint64x2_t)
24739      _Form of expected instruction(s):_ `vsubhn.i64 D0, Q0, Q0'
24741    * uint16x4_t vsubhn_u32 (uint32x4_t, uint32x4_t)
24742      _Form of expected instruction(s):_ `vsubhn.i32 D0, Q0, Q0'
24744    * uint8x8_t vsubhn_u16 (uint16x8_t, uint16x8_t)
24745      _Form of expected instruction(s):_ `vsubhn.i16 D0, Q0, Q0'
24747    * int32x2_t vsubhn_s64 (int64x2_t, int64x2_t)
24748      _Form of expected instruction(s):_ `vsubhn.i64 D0, Q0, Q0'
24750    * int16x4_t vsubhn_s32 (int32x4_t, int32x4_t)
24751      _Form of expected instruction(s):_ `vsubhn.i32 D0, Q0, Q0'
24753    * int8x8_t vsubhn_s16 (int16x8_t, int16x8_t)
24754      _Form of expected instruction(s):_ `vsubhn.i16 D0, Q0, Q0'
24756    * uint32x2_t vrsubhn_u64 (uint64x2_t, uint64x2_t)
24757      _Form of expected instruction(s):_ `vrsubhn.i64 D0, Q0, Q0'
24759    * uint16x4_t vrsubhn_u32 (uint32x4_t, uint32x4_t)
24760      _Form of expected instruction(s):_ `vrsubhn.i32 D0, Q0, Q0'
24762    * uint8x8_t vrsubhn_u16 (uint16x8_t, uint16x8_t)
24763      _Form of expected instruction(s):_ `vrsubhn.i16 D0, Q0, Q0'
24765    * int32x2_t vrsubhn_s64 (int64x2_t, int64x2_t)
24766      _Form of expected instruction(s):_ `vrsubhn.i64 D0, Q0, Q0'
24768    * int16x4_t vrsubhn_s32 (int32x4_t, int32x4_t)
24769      _Form of expected instruction(s):_ `vrsubhn.i32 D0, Q0, Q0'
24771    * int8x8_t vrsubhn_s16 (int16x8_t, int16x8_t)
24772      _Form of expected instruction(s):_ `vrsubhn.i16 D0, Q0, Q0'
24774 5.50.3.6 Comparison (equal-to)
24775 ..............................
24777    * uint32x2_t vceq_u32 (uint32x2_t, uint32x2_t)
24778      _Form of expected instruction(s):_ `vceq.i32 D0, D0, D0'
24780    * uint16x4_t vceq_u16 (uint16x4_t, uint16x4_t)
24781      _Form of expected instruction(s):_ `vceq.i16 D0, D0, D0'
24783    * uint8x8_t vceq_u8 (uint8x8_t, uint8x8_t)
24784      _Form of expected instruction(s):_ `vceq.i8 D0, D0, D0'
24786    * uint32x2_t vceq_s32 (int32x2_t, int32x2_t)
24787      _Form of expected instruction(s):_ `vceq.i32 D0, D0, D0'
24789    * uint16x4_t vceq_s16 (int16x4_t, int16x4_t)
24790      _Form of expected instruction(s):_ `vceq.i16 D0, D0, D0'
24792    * uint8x8_t vceq_s8 (int8x8_t, int8x8_t)
24793      _Form of expected instruction(s):_ `vceq.i8 D0, D0, D0'
24795    * uint32x2_t vceq_f32 (float32x2_t, float32x2_t)
24796      _Form of expected instruction(s):_ `vceq.f32 D0, D0, D0'
24798    * uint8x8_t vceq_p8 (poly8x8_t, poly8x8_t)
24799      _Form of expected instruction(s):_ `vceq.i8 D0, D0, D0'
24801    * uint32x4_t vceqq_u32 (uint32x4_t, uint32x4_t)
24802      _Form of expected instruction(s):_ `vceq.i32 Q0, Q0, Q0'
24804    * uint16x8_t vceqq_u16 (uint16x8_t, uint16x8_t)
24805      _Form of expected instruction(s):_ `vceq.i16 Q0, Q0, Q0'
24807    * uint8x16_t vceqq_u8 (uint8x16_t, uint8x16_t)
24808      _Form of expected instruction(s):_ `vceq.i8 Q0, Q0, Q0'
24810    * uint32x4_t vceqq_s32 (int32x4_t, int32x4_t)
24811      _Form of expected instruction(s):_ `vceq.i32 Q0, Q0, Q0'
24813    * uint16x8_t vceqq_s16 (int16x8_t, int16x8_t)
24814      _Form of expected instruction(s):_ `vceq.i16 Q0, Q0, Q0'
24816    * uint8x16_t vceqq_s8 (int8x16_t, int8x16_t)
24817      _Form of expected instruction(s):_ `vceq.i8 Q0, Q0, Q0'
24819    * uint32x4_t vceqq_f32 (float32x4_t, float32x4_t)
24820      _Form of expected instruction(s):_ `vceq.f32 Q0, Q0, Q0'
24822    * uint8x16_t vceqq_p8 (poly8x16_t, poly8x16_t)
24823      _Form of expected instruction(s):_ `vceq.i8 Q0, Q0, Q0'
24825 5.50.3.7 Comparison (greater-than-or-equal-to)
24826 ..............................................
24828    * uint32x2_t vcge_u32 (uint32x2_t, uint32x2_t)
24829      _Form of expected instruction(s):_ `vcge.u32 D0, D0, D0'
24831    * uint16x4_t vcge_u16 (uint16x4_t, uint16x4_t)
24832      _Form of expected instruction(s):_ `vcge.u16 D0, D0, D0'
24834    * uint8x8_t vcge_u8 (uint8x8_t, uint8x8_t)
24835      _Form of expected instruction(s):_ `vcge.u8 D0, D0, D0'
24837    * uint32x2_t vcge_s32 (int32x2_t, int32x2_t)
24838      _Form of expected instruction(s):_ `vcge.s32 D0, D0, D0'
24840    * uint16x4_t vcge_s16 (int16x4_t, int16x4_t)
24841      _Form of expected instruction(s):_ `vcge.s16 D0, D0, D0'
24843    * uint8x8_t vcge_s8 (int8x8_t, int8x8_t)
24844      _Form of expected instruction(s):_ `vcge.s8 D0, D0, D0'
24846    * uint32x2_t vcge_f32 (float32x2_t, float32x2_t)
24847      _Form of expected instruction(s):_ `vcge.f32 D0, D0, D0'
24849    * uint32x4_t vcgeq_u32 (uint32x4_t, uint32x4_t)
24850      _Form of expected instruction(s):_ `vcge.u32 Q0, Q0, Q0'
24852    * uint16x8_t vcgeq_u16 (uint16x8_t, uint16x8_t)
24853      _Form of expected instruction(s):_ `vcge.u16 Q0, Q0, Q0'
24855    * uint8x16_t vcgeq_u8 (uint8x16_t, uint8x16_t)
24856      _Form of expected instruction(s):_ `vcge.u8 Q0, Q0, Q0'
24858    * uint32x4_t vcgeq_s32 (int32x4_t, int32x4_t)
24859      _Form of expected instruction(s):_ `vcge.s32 Q0, Q0, Q0'
24861    * uint16x8_t vcgeq_s16 (int16x8_t, int16x8_t)
24862      _Form of expected instruction(s):_ `vcge.s16 Q0, Q0, Q0'
24864    * uint8x16_t vcgeq_s8 (int8x16_t, int8x16_t)
24865      _Form of expected instruction(s):_ `vcge.s8 Q0, Q0, Q0'
24867    * uint32x4_t vcgeq_f32 (float32x4_t, float32x4_t)
24868      _Form of expected instruction(s):_ `vcge.f32 Q0, Q0, Q0'
24870 5.50.3.8 Comparison (less-than-or-equal-to)
24871 ...........................................
24873    * uint32x2_t vcle_u32 (uint32x2_t, uint32x2_t)
24874      _Form of expected instruction(s):_ `vcge.u32 D0, D0, D0'
24876    * uint16x4_t vcle_u16 (uint16x4_t, uint16x4_t)
24877      _Form of expected instruction(s):_ `vcge.u16 D0, D0, D0'
24879    * uint8x8_t vcle_u8 (uint8x8_t, uint8x8_t)
24880      _Form of expected instruction(s):_ `vcge.u8 D0, D0, D0'
24882    * uint32x2_t vcle_s32 (int32x2_t, int32x2_t)
24883      _Form of expected instruction(s):_ `vcge.s32 D0, D0, D0'
24885    * uint16x4_t vcle_s16 (int16x4_t, int16x4_t)
24886      _Form of expected instruction(s):_ `vcge.s16 D0, D0, D0'
24888    * uint8x8_t vcle_s8 (int8x8_t, int8x8_t)
24889      _Form of expected instruction(s):_ `vcge.s8 D0, D0, D0'
24891    * uint32x2_t vcle_f32 (float32x2_t, float32x2_t)
24892      _Form of expected instruction(s):_ `vcge.f32 D0, D0, D0'
24894    * uint32x4_t vcleq_u32 (uint32x4_t, uint32x4_t)
24895      _Form of expected instruction(s):_ `vcge.u32 Q0, Q0, Q0'
24897    * uint16x8_t vcleq_u16 (uint16x8_t, uint16x8_t)
24898      _Form of expected instruction(s):_ `vcge.u16 Q0, Q0, Q0'
24900    * uint8x16_t vcleq_u8 (uint8x16_t, uint8x16_t)
24901      _Form of expected instruction(s):_ `vcge.u8 Q0, Q0, Q0'
24903    * uint32x4_t vcleq_s32 (int32x4_t, int32x4_t)
24904      _Form of expected instruction(s):_ `vcge.s32 Q0, Q0, Q0'
24906    * uint16x8_t vcleq_s16 (int16x8_t, int16x8_t)
24907      _Form of expected instruction(s):_ `vcge.s16 Q0, Q0, Q0'
24909    * uint8x16_t vcleq_s8 (int8x16_t, int8x16_t)
24910      _Form of expected instruction(s):_ `vcge.s8 Q0, Q0, Q0'
24912    * uint32x4_t vcleq_f32 (float32x4_t, float32x4_t)
24913      _Form of expected instruction(s):_ `vcge.f32 Q0, Q0, Q0'
24915 5.50.3.9 Comparison (greater-than)
24916 ..................................
24918    * uint32x2_t vcgt_u32 (uint32x2_t, uint32x2_t)
24919      _Form of expected instruction(s):_ `vcgt.u32 D0, D0, D0'
24921    * uint16x4_t vcgt_u16 (uint16x4_t, uint16x4_t)
24922      _Form of expected instruction(s):_ `vcgt.u16 D0, D0, D0'
24924    * uint8x8_t vcgt_u8 (uint8x8_t, uint8x8_t)
24925      _Form of expected instruction(s):_ `vcgt.u8 D0, D0, D0'
24927    * uint32x2_t vcgt_s32 (int32x2_t, int32x2_t)
24928      _Form of expected instruction(s):_ `vcgt.s32 D0, D0, D0'
24930    * uint16x4_t vcgt_s16 (int16x4_t, int16x4_t)
24931      _Form of expected instruction(s):_ `vcgt.s16 D0, D0, D0'
24933    * uint8x8_t vcgt_s8 (int8x8_t, int8x8_t)
24934      _Form of expected instruction(s):_ `vcgt.s8 D0, D0, D0'
24936    * uint32x2_t vcgt_f32 (float32x2_t, float32x2_t)
24937      _Form of expected instruction(s):_ `vcgt.f32 D0, D0, D0'
24939    * uint32x4_t vcgtq_u32 (uint32x4_t, uint32x4_t)
24940      _Form of expected instruction(s):_ `vcgt.u32 Q0, Q0, Q0'
24942    * uint16x8_t vcgtq_u16 (uint16x8_t, uint16x8_t)
24943      _Form of expected instruction(s):_ `vcgt.u16 Q0, Q0, Q0'
24945    * uint8x16_t vcgtq_u8 (uint8x16_t, uint8x16_t)
24946      _Form of expected instruction(s):_ `vcgt.u8 Q0, Q0, Q0'
24948    * uint32x4_t vcgtq_s32 (int32x4_t, int32x4_t)
24949      _Form of expected instruction(s):_ `vcgt.s32 Q0, Q0, Q0'
24951    * uint16x8_t vcgtq_s16 (int16x8_t, int16x8_t)
24952      _Form of expected instruction(s):_ `vcgt.s16 Q0, Q0, Q0'
24954    * uint8x16_t vcgtq_s8 (int8x16_t, int8x16_t)
24955      _Form of expected instruction(s):_ `vcgt.s8 Q0, Q0, Q0'
24957    * uint32x4_t vcgtq_f32 (float32x4_t, float32x4_t)
24958      _Form of expected instruction(s):_ `vcgt.f32 Q0, Q0, Q0'
24960 5.50.3.10 Comparison (less-than)
24961 ................................
24963    * uint32x2_t vclt_u32 (uint32x2_t, uint32x2_t)
24964      _Form of expected instruction(s):_ `vcgt.u32 D0, D0, D0'
24966    * uint16x4_t vclt_u16 (uint16x4_t, uint16x4_t)
24967      _Form of expected instruction(s):_ `vcgt.u16 D0, D0, D0'
24969    * uint8x8_t vclt_u8 (uint8x8_t, uint8x8_t)
24970      _Form of expected instruction(s):_ `vcgt.u8 D0, D0, D0'
24972    * uint32x2_t vclt_s32 (int32x2_t, int32x2_t)
24973      _Form of expected instruction(s):_ `vcgt.s32 D0, D0, D0'
24975    * uint16x4_t vclt_s16 (int16x4_t, int16x4_t)
24976      _Form of expected instruction(s):_ `vcgt.s16 D0, D0, D0'
24978    * uint8x8_t vclt_s8 (int8x8_t, int8x8_t)
24979      _Form of expected instruction(s):_ `vcgt.s8 D0, D0, D0'
24981    * uint32x2_t vclt_f32 (float32x2_t, float32x2_t)
24982      _Form of expected instruction(s):_ `vcgt.f32 D0, D0, D0'
24984    * uint32x4_t vcltq_u32 (uint32x4_t, uint32x4_t)
24985      _Form of expected instruction(s):_ `vcgt.u32 Q0, Q0, Q0'
24987    * uint16x8_t vcltq_u16 (uint16x8_t, uint16x8_t)
24988      _Form of expected instruction(s):_ `vcgt.u16 Q0, Q0, Q0'
24990    * uint8x16_t vcltq_u8 (uint8x16_t, uint8x16_t)
24991      _Form of expected instruction(s):_ `vcgt.u8 Q0, Q0, Q0'
24993    * uint32x4_t vcltq_s32 (int32x4_t, int32x4_t)
24994      _Form of expected instruction(s):_ `vcgt.s32 Q0, Q0, Q0'
24996    * uint16x8_t vcltq_s16 (int16x8_t, int16x8_t)
24997      _Form of expected instruction(s):_ `vcgt.s16 Q0, Q0, Q0'
24999    * uint8x16_t vcltq_s8 (int8x16_t, int8x16_t)
25000      _Form of expected instruction(s):_ `vcgt.s8 Q0, Q0, Q0'
25002    * uint32x4_t vcltq_f32 (float32x4_t, float32x4_t)
25003      _Form of expected instruction(s):_ `vcgt.f32 Q0, Q0, Q0'
25005 5.50.3.11 Comparison (absolute greater-than-or-equal-to)
25006 ........................................................
25008    * uint32x2_t vcage_f32 (float32x2_t, float32x2_t)
25009      _Form of expected instruction(s):_ `vacge.f32 D0, D0, D0'
25011    * uint32x4_t vcageq_f32 (float32x4_t, float32x4_t)
25012      _Form of expected instruction(s):_ `vacge.f32 Q0, Q0, Q0'
25014 5.50.3.12 Comparison (absolute less-than-or-equal-to)
25015 .....................................................
25017    * uint32x2_t vcale_f32 (float32x2_t, float32x2_t)
25018      _Form of expected instruction(s):_ `vacge.f32 D0, D0, D0'
25020    * uint32x4_t vcaleq_f32 (float32x4_t, float32x4_t)
25021      _Form of expected instruction(s):_ `vacge.f32 Q0, Q0, Q0'
25023 5.50.3.13 Comparison (absolute greater-than)
25024 ............................................
25026    * uint32x2_t vcagt_f32 (float32x2_t, float32x2_t)
25027      _Form of expected instruction(s):_ `vacgt.f32 D0, D0, D0'
25029    * uint32x4_t vcagtq_f32 (float32x4_t, float32x4_t)
25030      _Form of expected instruction(s):_ `vacgt.f32 Q0, Q0, Q0'
25032 5.50.3.14 Comparison (absolute less-than)
25033 .........................................
25035    * uint32x2_t vcalt_f32 (float32x2_t, float32x2_t)
25036      _Form of expected instruction(s):_ `vacgt.f32 D0, D0, D0'
25038    * uint32x4_t vcaltq_f32 (float32x4_t, float32x4_t)
25039      _Form of expected instruction(s):_ `vacgt.f32 Q0, Q0, Q0'
25041 5.50.3.15 Test bits
25042 ...................
25044    * uint32x2_t vtst_u32 (uint32x2_t, uint32x2_t)
25045      _Form of expected instruction(s):_ `vtst.32 D0, D0, D0'
25047    * uint16x4_t vtst_u16 (uint16x4_t, uint16x4_t)
25048      _Form of expected instruction(s):_ `vtst.16 D0, D0, D0'
25050    * uint8x8_t vtst_u8 (uint8x8_t, uint8x8_t)
25051      _Form of expected instruction(s):_ `vtst.8 D0, D0, D0'
25053    * uint32x2_t vtst_s32 (int32x2_t, int32x2_t)
25054      _Form of expected instruction(s):_ `vtst.32 D0, D0, D0'
25056    * uint16x4_t vtst_s16 (int16x4_t, int16x4_t)
25057      _Form of expected instruction(s):_ `vtst.16 D0, D0, D0'
25059    * uint8x8_t vtst_s8 (int8x8_t, int8x8_t)
25060      _Form of expected instruction(s):_ `vtst.8 D0, D0, D0'
25062    * uint8x8_t vtst_p8 (poly8x8_t, poly8x8_t)
25063      _Form of expected instruction(s):_ `vtst.8 D0, D0, D0'
25065    * uint32x4_t vtstq_u32 (uint32x4_t, uint32x4_t)
25066      _Form of expected instruction(s):_ `vtst.32 Q0, Q0, Q0'
25068    * uint16x8_t vtstq_u16 (uint16x8_t, uint16x8_t)
25069      _Form of expected instruction(s):_ `vtst.16 Q0, Q0, Q0'
25071    * uint8x16_t vtstq_u8 (uint8x16_t, uint8x16_t)
25072      _Form of expected instruction(s):_ `vtst.8 Q0, Q0, Q0'
25074    * uint32x4_t vtstq_s32 (int32x4_t, int32x4_t)
25075      _Form of expected instruction(s):_ `vtst.32 Q0, Q0, Q0'
25077    * uint16x8_t vtstq_s16 (int16x8_t, int16x8_t)
25078      _Form of expected instruction(s):_ `vtst.16 Q0, Q0, Q0'
25080    * uint8x16_t vtstq_s8 (int8x16_t, int8x16_t)
25081      _Form of expected instruction(s):_ `vtst.8 Q0, Q0, Q0'
25083    * uint8x16_t vtstq_p8 (poly8x16_t, poly8x16_t)
25084      _Form of expected instruction(s):_ `vtst.8 Q0, Q0, Q0'
25086 5.50.3.16 Absolute difference
25087 .............................
25089    * uint32x2_t vabd_u32 (uint32x2_t, uint32x2_t)
25090      _Form of expected instruction(s):_ `vabd.u32 D0, D0, D0'
25092    * uint16x4_t vabd_u16 (uint16x4_t, uint16x4_t)
25093      _Form of expected instruction(s):_ `vabd.u16 D0, D0, D0'
25095    * uint8x8_t vabd_u8 (uint8x8_t, uint8x8_t)
25096      _Form of expected instruction(s):_ `vabd.u8 D0, D0, D0'
25098    * int32x2_t vabd_s32 (int32x2_t, int32x2_t)
25099      _Form of expected instruction(s):_ `vabd.s32 D0, D0, D0'
25101    * int16x4_t vabd_s16 (int16x4_t, int16x4_t)
25102      _Form of expected instruction(s):_ `vabd.s16 D0, D0, D0'
25104    * int8x8_t vabd_s8 (int8x8_t, int8x8_t)
25105      _Form of expected instruction(s):_ `vabd.s8 D0, D0, D0'
25107    * float32x2_t vabd_f32 (float32x2_t, float32x2_t)
25108      _Form of expected instruction(s):_ `vabd.f32 D0, D0, D0'
25110    * uint32x4_t vabdq_u32 (uint32x4_t, uint32x4_t)
25111      _Form of expected instruction(s):_ `vabd.u32 Q0, Q0, Q0'
25113    * uint16x8_t vabdq_u16 (uint16x8_t, uint16x8_t)
25114      _Form of expected instruction(s):_ `vabd.u16 Q0, Q0, Q0'
25116    * uint8x16_t vabdq_u8 (uint8x16_t, uint8x16_t)
25117      _Form of expected instruction(s):_ `vabd.u8 Q0, Q0, Q0'
25119    * int32x4_t vabdq_s32 (int32x4_t, int32x4_t)
25120      _Form of expected instruction(s):_ `vabd.s32 Q0, Q0, Q0'
25122    * int16x8_t vabdq_s16 (int16x8_t, int16x8_t)
25123      _Form of expected instruction(s):_ `vabd.s16 Q0, Q0, Q0'
25125    * int8x16_t vabdq_s8 (int8x16_t, int8x16_t)
25126      _Form of expected instruction(s):_ `vabd.s8 Q0, Q0, Q0'
25128    * float32x4_t vabdq_f32 (float32x4_t, float32x4_t)
25129      _Form of expected instruction(s):_ `vabd.f32 Q0, Q0, Q0'
25131    * uint64x2_t vabdl_u32 (uint32x2_t, uint32x2_t)
25132      _Form of expected instruction(s):_ `vabdl.u32 Q0, D0, D0'
25134    * uint32x4_t vabdl_u16 (uint16x4_t, uint16x4_t)
25135      _Form of expected instruction(s):_ `vabdl.u16 Q0, D0, D0'
25137    * uint16x8_t vabdl_u8 (uint8x8_t, uint8x8_t)
25138      _Form of expected instruction(s):_ `vabdl.u8 Q0, D0, D0'
25140    * int64x2_t vabdl_s32 (int32x2_t, int32x2_t)
25141      _Form of expected instruction(s):_ `vabdl.s32 Q0, D0, D0'
25143    * int32x4_t vabdl_s16 (int16x4_t, int16x4_t)
25144      _Form of expected instruction(s):_ `vabdl.s16 Q0, D0, D0'
25146    * int16x8_t vabdl_s8 (int8x8_t, int8x8_t)
25147      _Form of expected instruction(s):_ `vabdl.s8 Q0, D0, D0'
25149 5.50.3.17 Absolute difference and accumulate
25150 ............................................
25152    * uint32x2_t vaba_u32 (uint32x2_t, uint32x2_t, uint32x2_t)
25153      _Form of expected instruction(s):_ `vaba.u32 D0, D0, D0'
25155    * uint16x4_t vaba_u16 (uint16x4_t, uint16x4_t, uint16x4_t)
25156      _Form of expected instruction(s):_ `vaba.u16 D0, D0, D0'
25158    * uint8x8_t vaba_u8 (uint8x8_t, uint8x8_t, uint8x8_t)
25159      _Form of expected instruction(s):_ `vaba.u8 D0, D0, D0'
25161    * int32x2_t vaba_s32 (int32x2_t, int32x2_t, int32x2_t)
25162      _Form of expected instruction(s):_ `vaba.s32 D0, D0, D0'
25164    * int16x4_t vaba_s16 (int16x4_t, int16x4_t, int16x4_t)
25165      _Form of expected instruction(s):_ `vaba.s16 D0, D0, D0'
25167    * int8x8_t vaba_s8 (int8x8_t, int8x8_t, int8x8_t)
25168      _Form of expected instruction(s):_ `vaba.s8 D0, D0, D0'
25170    * uint32x4_t vabaq_u32 (uint32x4_t, uint32x4_t, uint32x4_t)
25171      _Form of expected instruction(s):_ `vaba.u32 Q0, Q0, Q0'
25173    * uint16x8_t vabaq_u16 (uint16x8_t, uint16x8_t, uint16x8_t)
25174      _Form of expected instruction(s):_ `vaba.u16 Q0, Q0, Q0'
25176    * uint8x16_t vabaq_u8 (uint8x16_t, uint8x16_t, uint8x16_t)
25177      _Form of expected instruction(s):_ `vaba.u8 Q0, Q0, Q0'
25179    * int32x4_t vabaq_s32 (int32x4_t, int32x4_t, int32x4_t)
25180      _Form of expected instruction(s):_ `vaba.s32 Q0, Q0, Q0'
25182    * int16x8_t vabaq_s16 (int16x8_t, int16x8_t, int16x8_t)
25183      _Form of expected instruction(s):_ `vaba.s16 Q0, Q0, Q0'
25185    * int8x16_t vabaq_s8 (int8x16_t, int8x16_t, int8x16_t)
25186      _Form of expected instruction(s):_ `vaba.s8 Q0, Q0, Q0'
25188    * uint64x2_t vabal_u32 (uint64x2_t, uint32x2_t, uint32x2_t)
25189      _Form of expected instruction(s):_ `vabal.u32 Q0, D0, D0'
25191    * uint32x4_t vabal_u16 (uint32x4_t, uint16x4_t, uint16x4_t)
25192      _Form of expected instruction(s):_ `vabal.u16 Q0, D0, D0'
25194    * uint16x8_t vabal_u8 (uint16x8_t, uint8x8_t, uint8x8_t)
25195      _Form of expected instruction(s):_ `vabal.u8 Q0, D0, D0'
25197    * int64x2_t vabal_s32 (int64x2_t, int32x2_t, int32x2_t)
25198      _Form of expected instruction(s):_ `vabal.s32 Q0, D0, D0'
25200    * int32x4_t vabal_s16 (int32x4_t, int16x4_t, int16x4_t)
25201      _Form of expected instruction(s):_ `vabal.s16 Q0, D0, D0'
25203    * int16x8_t vabal_s8 (int16x8_t, int8x8_t, int8x8_t)
25204      _Form of expected instruction(s):_ `vabal.s8 Q0, D0, D0'
25206 5.50.3.18 Maximum
25207 .................
25209    * uint32x2_t vmax_u32 (uint32x2_t, uint32x2_t)
25210      _Form of expected instruction(s):_ `vmax.u32 D0, D0, D0'
25212    * uint16x4_t vmax_u16 (uint16x4_t, uint16x4_t)
25213      _Form of expected instruction(s):_ `vmax.u16 D0, D0, D0'
25215    * uint8x8_t vmax_u8 (uint8x8_t, uint8x8_t)
25216      _Form of expected instruction(s):_ `vmax.u8 D0, D0, D0'
25218    * int32x2_t vmax_s32 (int32x2_t, int32x2_t)
25219      _Form of expected instruction(s):_ `vmax.s32 D0, D0, D0'
25221    * int16x4_t vmax_s16 (int16x4_t, int16x4_t)
25222      _Form of expected instruction(s):_ `vmax.s16 D0, D0, D0'
25224    * int8x8_t vmax_s8 (int8x8_t, int8x8_t)
25225      _Form of expected instruction(s):_ `vmax.s8 D0, D0, D0'
25227    * float32x2_t vmax_f32 (float32x2_t, float32x2_t)
25228      _Form of expected instruction(s):_ `vmax.f32 D0, D0, D0'
25230    * uint32x4_t vmaxq_u32 (uint32x4_t, uint32x4_t)
25231      _Form of expected instruction(s):_ `vmax.u32 Q0, Q0, Q0'
25233    * uint16x8_t vmaxq_u16 (uint16x8_t, uint16x8_t)
25234      _Form of expected instruction(s):_ `vmax.u16 Q0, Q0, Q0'
25236    * uint8x16_t vmaxq_u8 (uint8x16_t, uint8x16_t)
25237      _Form of expected instruction(s):_ `vmax.u8 Q0, Q0, Q0'
25239    * int32x4_t vmaxq_s32 (int32x4_t, int32x4_t)
25240      _Form of expected instruction(s):_ `vmax.s32 Q0, Q0, Q0'
25242    * int16x8_t vmaxq_s16 (int16x8_t, int16x8_t)
25243      _Form of expected instruction(s):_ `vmax.s16 Q0, Q0, Q0'
25245    * int8x16_t vmaxq_s8 (int8x16_t, int8x16_t)
25246      _Form of expected instruction(s):_ `vmax.s8 Q0, Q0, Q0'
25248    * float32x4_t vmaxq_f32 (float32x4_t, float32x4_t)
25249      _Form of expected instruction(s):_ `vmax.f32 Q0, Q0, Q0'
25251 5.50.3.19 Minimum
25252 .................
25254    * uint32x2_t vmin_u32 (uint32x2_t, uint32x2_t)
25255      _Form of expected instruction(s):_ `vmin.u32 D0, D0, D0'
25257    * uint16x4_t vmin_u16 (uint16x4_t, uint16x4_t)
25258      _Form of expected instruction(s):_ `vmin.u16 D0, D0, D0'
25260    * uint8x8_t vmin_u8 (uint8x8_t, uint8x8_t)
25261      _Form of expected instruction(s):_ `vmin.u8 D0, D0, D0'
25263    * int32x2_t vmin_s32 (int32x2_t, int32x2_t)
25264      _Form of expected instruction(s):_ `vmin.s32 D0, D0, D0'
25266    * int16x4_t vmin_s16 (int16x4_t, int16x4_t)
25267      _Form of expected instruction(s):_ `vmin.s16 D0, D0, D0'
25269    * int8x8_t vmin_s8 (int8x8_t, int8x8_t)
25270      _Form of expected instruction(s):_ `vmin.s8 D0, D0, D0'
25272    * float32x2_t vmin_f32 (float32x2_t, float32x2_t)
25273      _Form of expected instruction(s):_ `vmin.f32 D0, D0, D0'
25275    * uint32x4_t vminq_u32 (uint32x4_t, uint32x4_t)
25276      _Form of expected instruction(s):_ `vmin.u32 Q0, Q0, Q0'
25278    * uint16x8_t vminq_u16 (uint16x8_t, uint16x8_t)
25279      _Form of expected instruction(s):_ `vmin.u16 Q0, Q0, Q0'
25281    * uint8x16_t vminq_u8 (uint8x16_t, uint8x16_t)
25282      _Form of expected instruction(s):_ `vmin.u8 Q0, Q0, Q0'
25284    * int32x4_t vminq_s32 (int32x4_t, int32x4_t)
25285      _Form of expected instruction(s):_ `vmin.s32 Q0, Q0, Q0'
25287    * int16x8_t vminq_s16 (int16x8_t, int16x8_t)
25288      _Form of expected instruction(s):_ `vmin.s16 Q0, Q0, Q0'
25290    * int8x16_t vminq_s8 (int8x16_t, int8x16_t)
25291      _Form of expected instruction(s):_ `vmin.s8 Q0, Q0, Q0'
25293    * float32x4_t vminq_f32 (float32x4_t, float32x4_t)
25294      _Form of expected instruction(s):_ `vmin.f32 Q0, Q0, Q0'
25296 5.50.3.20 Pairwise add
25297 ......................
25299    * uint32x2_t vpadd_u32 (uint32x2_t, uint32x2_t)
25300      _Form of expected instruction(s):_ `vpadd.i32 D0, D0, D0'
25302    * uint16x4_t vpadd_u16 (uint16x4_t, uint16x4_t)
25303      _Form of expected instruction(s):_ `vpadd.i16 D0, D0, D0'
25305    * uint8x8_t vpadd_u8 (uint8x8_t, uint8x8_t)
25306      _Form of expected instruction(s):_ `vpadd.i8 D0, D0, D0'
25308    * int32x2_t vpadd_s32 (int32x2_t, int32x2_t)
25309      _Form of expected instruction(s):_ `vpadd.i32 D0, D0, D0'
25311    * int16x4_t vpadd_s16 (int16x4_t, int16x4_t)
25312      _Form of expected instruction(s):_ `vpadd.i16 D0, D0, D0'
25314    * int8x8_t vpadd_s8 (int8x8_t, int8x8_t)
25315      _Form of expected instruction(s):_ `vpadd.i8 D0, D0, D0'
25317    * float32x2_t vpadd_f32 (float32x2_t, float32x2_t)
25318      _Form of expected instruction(s):_ `vpadd.f32 D0, D0, D0'
25320    * uint64x1_t vpaddl_u32 (uint32x2_t)
25321      _Form of expected instruction(s):_ `vpaddl.u32 D0, D0'
25323    * uint32x2_t vpaddl_u16 (uint16x4_t)
25324      _Form of expected instruction(s):_ `vpaddl.u16 D0, D0'
25326    * uint16x4_t vpaddl_u8 (uint8x8_t)
25327      _Form of expected instruction(s):_ `vpaddl.u8 D0, D0'
25329    * int64x1_t vpaddl_s32 (int32x2_t)
25330      _Form of expected instruction(s):_ `vpaddl.s32 D0, D0'
25332    * int32x2_t vpaddl_s16 (int16x4_t)
25333      _Form of expected instruction(s):_ `vpaddl.s16 D0, D0'
25335    * int16x4_t vpaddl_s8 (int8x8_t)
25336      _Form of expected instruction(s):_ `vpaddl.s8 D0, D0'
25338    * uint64x2_t vpaddlq_u32 (uint32x4_t)
25339      _Form of expected instruction(s):_ `vpaddl.u32 Q0, Q0'
25341    * uint32x4_t vpaddlq_u16 (uint16x8_t)
25342      _Form of expected instruction(s):_ `vpaddl.u16 Q0, Q0'
25344    * uint16x8_t vpaddlq_u8 (uint8x16_t)
25345      _Form of expected instruction(s):_ `vpaddl.u8 Q0, Q0'
25347    * int64x2_t vpaddlq_s32 (int32x4_t)
25348      _Form of expected instruction(s):_ `vpaddl.s32 Q0, Q0'
25350    * int32x4_t vpaddlq_s16 (int16x8_t)
25351      _Form of expected instruction(s):_ `vpaddl.s16 Q0, Q0'
25353    * int16x8_t vpaddlq_s8 (int8x16_t)
25354      _Form of expected instruction(s):_ `vpaddl.s8 Q0, Q0'
25356 5.50.3.21 Pairwise add, single_opcode widen and accumulate
25357 ..........................................................
25359    * uint64x1_t vpadal_u32 (uint64x1_t, uint32x2_t)
25360      _Form of expected instruction(s):_ `vpadal.u32 D0, D0'
25362    * uint32x2_t vpadal_u16 (uint32x2_t, uint16x4_t)
25363      _Form of expected instruction(s):_ `vpadal.u16 D0, D0'
25365    * uint16x4_t vpadal_u8 (uint16x4_t, uint8x8_t)
25366      _Form of expected instruction(s):_ `vpadal.u8 D0, D0'
25368    * int64x1_t vpadal_s32 (int64x1_t, int32x2_t)
25369      _Form of expected instruction(s):_ `vpadal.s32 D0, D0'
25371    * int32x2_t vpadal_s16 (int32x2_t, int16x4_t)
25372      _Form of expected instruction(s):_ `vpadal.s16 D0, D0'
25374    * int16x4_t vpadal_s8 (int16x4_t, int8x8_t)
25375      _Form of expected instruction(s):_ `vpadal.s8 D0, D0'
25377    * uint64x2_t vpadalq_u32 (uint64x2_t, uint32x4_t)
25378      _Form of expected instruction(s):_ `vpadal.u32 Q0, Q0'
25380    * uint32x4_t vpadalq_u16 (uint32x4_t, uint16x8_t)
25381      _Form of expected instruction(s):_ `vpadal.u16 Q0, Q0'
25383    * uint16x8_t vpadalq_u8 (uint16x8_t, uint8x16_t)
25384      _Form of expected instruction(s):_ `vpadal.u8 Q0, Q0'
25386    * int64x2_t vpadalq_s32 (int64x2_t, int32x4_t)
25387      _Form of expected instruction(s):_ `vpadal.s32 Q0, Q0'
25389    * int32x4_t vpadalq_s16 (int32x4_t, int16x8_t)
25390      _Form of expected instruction(s):_ `vpadal.s16 Q0, Q0'
25392    * int16x8_t vpadalq_s8 (int16x8_t, int8x16_t)
25393      _Form of expected instruction(s):_ `vpadal.s8 Q0, Q0'
25395 5.50.3.22 Folding maximum
25396 .........................
25398    * uint32x2_t vpmax_u32 (uint32x2_t, uint32x2_t)
25399      _Form of expected instruction(s):_ `vpmax.u32 D0, D0, D0'
25401    * uint16x4_t vpmax_u16 (uint16x4_t, uint16x4_t)
25402      _Form of expected instruction(s):_ `vpmax.u16 D0, D0, D0'
25404    * uint8x8_t vpmax_u8 (uint8x8_t, uint8x8_t)
25405      _Form of expected instruction(s):_ `vpmax.u8 D0, D0, D0'
25407    * int32x2_t vpmax_s32 (int32x2_t, int32x2_t)
25408      _Form of expected instruction(s):_ `vpmax.s32 D0, D0, D0'
25410    * int16x4_t vpmax_s16 (int16x4_t, int16x4_t)
25411      _Form of expected instruction(s):_ `vpmax.s16 D0, D0, D0'
25413    * int8x8_t vpmax_s8 (int8x8_t, int8x8_t)
25414      _Form of expected instruction(s):_ `vpmax.s8 D0, D0, D0'
25416    * float32x2_t vpmax_f32 (float32x2_t, float32x2_t)
25417      _Form of expected instruction(s):_ `vpmax.f32 D0, D0, D0'
25419 5.50.3.23 Folding minimum
25420 .........................
25422    * uint32x2_t vpmin_u32 (uint32x2_t, uint32x2_t)
25423      _Form of expected instruction(s):_ `vpmin.u32 D0, D0, D0'
25425    * uint16x4_t vpmin_u16 (uint16x4_t, uint16x4_t)
25426      _Form of expected instruction(s):_ `vpmin.u16 D0, D0, D0'
25428    * uint8x8_t vpmin_u8 (uint8x8_t, uint8x8_t)
25429      _Form of expected instruction(s):_ `vpmin.u8 D0, D0, D0'
25431    * int32x2_t vpmin_s32 (int32x2_t, int32x2_t)
25432      _Form of expected instruction(s):_ `vpmin.s32 D0, D0, D0'
25434    * int16x4_t vpmin_s16 (int16x4_t, int16x4_t)
25435      _Form of expected instruction(s):_ `vpmin.s16 D0, D0, D0'
25437    * int8x8_t vpmin_s8 (int8x8_t, int8x8_t)
25438      _Form of expected instruction(s):_ `vpmin.s8 D0, D0, D0'
25440    * float32x2_t vpmin_f32 (float32x2_t, float32x2_t)
25441      _Form of expected instruction(s):_ `vpmin.f32 D0, D0, D0'
25443 5.50.3.24 Reciprocal step
25444 .........................
25446    * float32x2_t vrecps_f32 (float32x2_t, float32x2_t)
25447      _Form of expected instruction(s):_ `vrecps.f32 D0, D0, D0'
25449    * float32x4_t vrecpsq_f32 (float32x4_t, float32x4_t)
25450      _Form of expected instruction(s):_ `vrecps.f32 Q0, Q0, Q0'
25452    * float32x2_t vrsqrts_f32 (float32x2_t, float32x2_t)
25453      _Form of expected instruction(s):_ `vrsqrts.f32 D0, D0, D0'
25455    * float32x4_t vrsqrtsq_f32 (float32x4_t, float32x4_t)
25456      _Form of expected instruction(s):_ `vrsqrts.f32 Q0, Q0, Q0'
25458 5.50.3.25 Vector shift left
25459 ...........................
25461    * uint32x2_t vshl_u32 (uint32x2_t, int32x2_t)
25462      _Form of expected instruction(s):_ `vshl.u32 D0, D0, D0'
25464    * uint16x4_t vshl_u16 (uint16x4_t, int16x4_t)
25465      _Form of expected instruction(s):_ `vshl.u16 D0, D0, D0'
25467    * uint8x8_t vshl_u8 (uint8x8_t, int8x8_t)
25468      _Form of expected instruction(s):_ `vshl.u8 D0, D0, D0'
25470    * int32x2_t vshl_s32 (int32x2_t, int32x2_t)
25471      _Form of expected instruction(s):_ `vshl.s32 D0, D0, D0'
25473    * int16x4_t vshl_s16 (int16x4_t, int16x4_t)
25474      _Form of expected instruction(s):_ `vshl.s16 D0, D0, D0'
25476    * int8x8_t vshl_s8 (int8x8_t, int8x8_t)
25477      _Form of expected instruction(s):_ `vshl.s8 D0, D0, D0'
25479    * uint64x1_t vshl_u64 (uint64x1_t, int64x1_t)
25480      _Form of expected instruction(s):_ `vshl.u64 D0, D0, D0'
25482    * int64x1_t vshl_s64 (int64x1_t, int64x1_t)
25483      _Form of expected instruction(s):_ `vshl.s64 D0, D0, D0'
25485    * uint32x4_t vshlq_u32 (uint32x4_t, int32x4_t)
25486      _Form of expected instruction(s):_ `vshl.u32 Q0, Q0, Q0'
25488    * uint16x8_t vshlq_u16 (uint16x8_t, int16x8_t)
25489      _Form of expected instruction(s):_ `vshl.u16 Q0, Q0, Q0'
25491    * uint8x16_t vshlq_u8 (uint8x16_t, int8x16_t)
25492      _Form of expected instruction(s):_ `vshl.u8 Q0, Q0, Q0'
25494    * int32x4_t vshlq_s32 (int32x4_t, int32x4_t)
25495      _Form of expected instruction(s):_ `vshl.s32 Q0, Q0, Q0'
25497    * int16x8_t vshlq_s16 (int16x8_t, int16x8_t)
25498      _Form of expected instruction(s):_ `vshl.s16 Q0, Q0, Q0'
25500    * int8x16_t vshlq_s8 (int8x16_t, int8x16_t)
25501      _Form of expected instruction(s):_ `vshl.s8 Q0, Q0, Q0'
25503    * uint64x2_t vshlq_u64 (uint64x2_t, int64x2_t)
25504      _Form of expected instruction(s):_ `vshl.u64 Q0, Q0, Q0'
25506    * int64x2_t vshlq_s64 (int64x2_t, int64x2_t)
25507      _Form of expected instruction(s):_ `vshl.s64 Q0, Q0, Q0'
25509    * uint32x2_t vrshl_u32 (uint32x2_t, int32x2_t)
25510      _Form of expected instruction(s):_ `vrshl.u32 D0, D0, D0'
25512    * uint16x4_t vrshl_u16 (uint16x4_t, int16x4_t)
25513      _Form of expected instruction(s):_ `vrshl.u16 D0, D0, D0'
25515    * uint8x8_t vrshl_u8 (uint8x8_t, int8x8_t)
25516      _Form of expected instruction(s):_ `vrshl.u8 D0, D0, D0'
25518    * int32x2_t vrshl_s32 (int32x2_t, int32x2_t)
25519      _Form of expected instruction(s):_ `vrshl.s32 D0, D0, D0'
25521    * int16x4_t vrshl_s16 (int16x4_t, int16x4_t)
25522      _Form of expected instruction(s):_ `vrshl.s16 D0, D0, D0'
25524    * int8x8_t vrshl_s8 (int8x8_t, int8x8_t)
25525      _Form of expected instruction(s):_ `vrshl.s8 D0, D0, D0'
25527    * uint64x1_t vrshl_u64 (uint64x1_t, int64x1_t)
25528      _Form of expected instruction(s):_ `vrshl.u64 D0, D0, D0'
25530    * int64x1_t vrshl_s64 (int64x1_t, int64x1_t)
25531      _Form of expected instruction(s):_ `vrshl.s64 D0, D0, D0'
25533    * uint32x4_t vrshlq_u32 (uint32x4_t, int32x4_t)
25534      _Form of expected instruction(s):_ `vrshl.u32 Q0, Q0, Q0'
25536    * uint16x8_t vrshlq_u16 (uint16x8_t, int16x8_t)
25537      _Form of expected instruction(s):_ `vrshl.u16 Q0, Q0, Q0'
25539    * uint8x16_t vrshlq_u8 (uint8x16_t, int8x16_t)
25540      _Form of expected instruction(s):_ `vrshl.u8 Q0, Q0, Q0'
25542    * int32x4_t vrshlq_s32 (int32x4_t, int32x4_t)
25543      _Form of expected instruction(s):_ `vrshl.s32 Q0, Q0, Q0'
25545    * int16x8_t vrshlq_s16 (int16x8_t, int16x8_t)
25546      _Form of expected instruction(s):_ `vrshl.s16 Q0, Q0, Q0'
25548    * int8x16_t vrshlq_s8 (int8x16_t, int8x16_t)
25549      _Form of expected instruction(s):_ `vrshl.s8 Q0, Q0, Q0'
25551    * uint64x2_t vrshlq_u64 (uint64x2_t, int64x2_t)
25552      _Form of expected instruction(s):_ `vrshl.u64 Q0, Q0, Q0'
25554    * int64x2_t vrshlq_s64 (int64x2_t, int64x2_t)
25555      _Form of expected instruction(s):_ `vrshl.s64 Q0, Q0, Q0'
25557    * uint32x2_t vqshl_u32 (uint32x2_t, int32x2_t)
25558      _Form of expected instruction(s):_ `vqshl.u32 D0, D0, D0'
25560    * uint16x4_t vqshl_u16 (uint16x4_t, int16x4_t)
25561      _Form of expected instruction(s):_ `vqshl.u16 D0, D0, D0'
25563    * uint8x8_t vqshl_u8 (uint8x8_t, int8x8_t)
25564      _Form of expected instruction(s):_ `vqshl.u8 D0, D0, D0'
25566    * int32x2_t vqshl_s32 (int32x2_t, int32x2_t)
25567      _Form of expected instruction(s):_ `vqshl.s32 D0, D0, D0'
25569    * int16x4_t vqshl_s16 (int16x4_t, int16x4_t)
25570      _Form of expected instruction(s):_ `vqshl.s16 D0, D0, D0'
25572    * int8x8_t vqshl_s8 (int8x8_t, int8x8_t)
25573      _Form of expected instruction(s):_ `vqshl.s8 D0, D0, D0'
25575    * uint64x1_t vqshl_u64 (uint64x1_t, int64x1_t)
25576      _Form of expected instruction(s):_ `vqshl.u64 D0, D0, D0'
25578    * int64x1_t vqshl_s64 (int64x1_t, int64x1_t)
25579      _Form of expected instruction(s):_ `vqshl.s64 D0, D0, D0'
25581    * uint32x4_t vqshlq_u32 (uint32x4_t, int32x4_t)
25582      _Form of expected instruction(s):_ `vqshl.u32 Q0, Q0, Q0'
25584    * uint16x8_t vqshlq_u16 (uint16x8_t, int16x8_t)
25585      _Form of expected instruction(s):_ `vqshl.u16 Q0, Q0, Q0'
25587    * uint8x16_t vqshlq_u8 (uint8x16_t, int8x16_t)
25588      _Form of expected instruction(s):_ `vqshl.u8 Q0, Q0, Q0'
25590    * int32x4_t vqshlq_s32 (int32x4_t, int32x4_t)
25591      _Form of expected instruction(s):_ `vqshl.s32 Q0, Q0, Q0'
25593    * int16x8_t vqshlq_s16 (int16x8_t, int16x8_t)
25594      _Form of expected instruction(s):_ `vqshl.s16 Q0, Q0, Q0'
25596    * int8x16_t vqshlq_s8 (int8x16_t, int8x16_t)
25597      _Form of expected instruction(s):_ `vqshl.s8 Q0, Q0, Q0'
25599    * uint64x2_t vqshlq_u64 (uint64x2_t, int64x2_t)
25600      _Form of expected instruction(s):_ `vqshl.u64 Q0, Q0, Q0'
25602    * int64x2_t vqshlq_s64 (int64x2_t, int64x2_t)
25603      _Form of expected instruction(s):_ `vqshl.s64 Q0, Q0, Q0'
25605    * uint32x2_t vqrshl_u32 (uint32x2_t, int32x2_t)
25606      _Form of expected instruction(s):_ `vqrshl.u32 D0, D0, D0'
25608    * uint16x4_t vqrshl_u16 (uint16x4_t, int16x4_t)
25609      _Form of expected instruction(s):_ `vqrshl.u16 D0, D0, D0'
25611    * uint8x8_t vqrshl_u8 (uint8x8_t, int8x8_t)
25612      _Form of expected instruction(s):_ `vqrshl.u8 D0, D0, D0'
25614    * int32x2_t vqrshl_s32 (int32x2_t, int32x2_t)
25615      _Form of expected instruction(s):_ `vqrshl.s32 D0, D0, D0'
25617    * int16x4_t vqrshl_s16 (int16x4_t, int16x4_t)
25618      _Form of expected instruction(s):_ `vqrshl.s16 D0, D0, D0'
25620    * int8x8_t vqrshl_s8 (int8x8_t, int8x8_t)
25621      _Form of expected instruction(s):_ `vqrshl.s8 D0, D0, D0'
25623    * uint64x1_t vqrshl_u64 (uint64x1_t, int64x1_t)
25624      _Form of expected instruction(s):_ `vqrshl.u64 D0, D0, D0'
25626    * int64x1_t vqrshl_s64 (int64x1_t, int64x1_t)
25627      _Form of expected instruction(s):_ `vqrshl.s64 D0, D0, D0'
25629    * uint32x4_t vqrshlq_u32 (uint32x4_t, int32x4_t)
25630      _Form of expected instruction(s):_ `vqrshl.u32 Q0, Q0, Q0'
25632    * uint16x8_t vqrshlq_u16 (uint16x8_t, int16x8_t)
25633      _Form of expected instruction(s):_ `vqrshl.u16 Q0, Q0, Q0'
25635    * uint8x16_t vqrshlq_u8 (uint8x16_t, int8x16_t)
25636      _Form of expected instruction(s):_ `vqrshl.u8 Q0, Q0, Q0'
25638    * int32x4_t vqrshlq_s32 (int32x4_t, int32x4_t)
25639      _Form of expected instruction(s):_ `vqrshl.s32 Q0, Q0, Q0'
25641    * int16x8_t vqrshlq_s16 (int16x8_t, int16x8_t)
25642      _Form of expected instruction(s):_ `vqrshl.s16 Q0, Q0, Q0'
25644    * int8x16_t vqrshlq_s8 (int8x16_t, int8x16_t)
25645      _Form of expected instruction(s):_ `vqrshl.s8 Q0, Q0, Q0'
25647    * uint64x2_t vqrshlq_u64 (uint64x2_t, int64x2_t)
25648      _Form of expected instruction(s):_ `vqrshl.u64 Q0, Q0, Q0'
25650    * int64x2_t vqrshlq_s64 (int64x2_t, int64x2_t)
25651      _Form of expected instruction(s):_ `vqrshl.s64 Q0, Q0, Q0'
25653 5.50.3.26 Vector shift left by constant
25654 .......................................
25656    * uint32x2_t vshl_n_u32 (uint32x2_t, const int)
25657      _Form of expected instruction(s):_ `vshl.i32 D0, D0, #0'
25659    * uint16x4_t vshl_n_u16 (uint16x4_t, const int)
25660      _Form of expected instruction(s):_ `vshl.i16 D0, D0, #0'
25662    * uint8x8_t vshl_n_u8 (uint8x8_t, const int)
25663      _Form of expected instruction(s):_ `vshl.i8 D0, D0, #0'
25665    * int32x2_t vshl_n_s32 (int32x2_t, const int)
25666      _Form of expected instruction(s):_ `vshl.i32 D0, D0, #0'
25668    * int16x4_t vshl_n_s16 (int16x4_t, const int)
25669      _Form of expected instruction(s):_ `vshl.i16 D0, D0, #0'
25671    * int8x8_t vshl_n_s8 (int8x8_t, const int)
25672      _Form of expected instruction(s):_ `vshl.i8 D0, D0, #0'
25674    * uint64x1_t vshl_n_u64 (uint64x1_t, const int)
25675      _Form of expected instruction(s):_ `vshl.i64 D0, D0, #0'
25677    * int64x1_t vshl_n_s64 (int64x1_t, const int)
25678      _Form of expected instruction(s):_ `vshl.i64 D0, D0, #0'
25680    * uint32x4_t vshlq_n_u32 (uint32x4_t, const int)
25681      _Form of expected instruction(s):_ `vshl.i32 Q0, Q0, #0'
25683    * uint16x8_t vshlq_n_u16 (uint16x8_t, const int)
25684      _Form of expected instruction(s):_ `vshl.i16 Q0, Q0, #0'
25686    * uint8x16_t vshlq_n_u8 (uint8x16_t, const int)
25687      _Form of expected instruction(s):_ `vshl.i8 Q0, Q0, #0'
25689    * int32x4_t vshlq_n_s32 (int32x4_t, const int)
25690      _Form of expected instruction(s):_ `vshl.i32 Q0, Q0, #0'
25692    * int16x8_t vshlq_n_s16 (int16x8_t, const int)
25693      _Form of expected instruction(s):_ `vshl.i16 Q0, Q0, #0'
25695    * int8x16_t vshlq_n_s8 (int8x16_t, const int)
25696      _Form of expected instruction(s):_ `vshl.i8 Q0, Q0, #0'
25698    * uint64x2_t vshlq_n_u64 (uint64x2_t, const int)
25699      _Form of expected instruction(s):_ `vshl.i64 Q0, Q0, #0'
25701    * int64x2_t vshlq_n_s64 (int64x2_t, const int)
25702      _Form of expected instruction(s):_ `vshl.i64 Q0, Q0, #0'
25704    * uint32x2_t vqshl_n_u32 (uint32x2_t, const int)
25705      _Form of expected instruction(s):_ `vqshl.u32 D0, D0, #0'
25707    * uint16x4_t vqshl_n_u16 (uint16x4_t, const int)
25708      _Form of expected instruction(s):_ `vqshl.u16 D0, D0, #0'
25710    * uint8x8_t vqshl_n_u8 (uint8x8_t, const int)
25711      _Form of expected instruction(s):_ `vqshl.u8 D0, D0, #0'
25713    * int32x2_t vqshl_n_s32 (int32x2_t, const int)
25714      _Form of expected instruction(s):_ `vqshl.s32 D0, D0, #0'
25716    * int16x4_t vqshl_n_s16 (int16x4_t, const int)
25717      _Form of expected instruction(s):_ `vqshl.s16 D0, D0, #0'
25719    * int8x8_t vqshl_n_s8 (int8x8_t, const int)
25720      _Form of expected instruction(s):_ `vqshl.s8 D0, D0, #0'
25722    * uint64x1_t vqshl_n_u64 (uint64x1_t, const int)
25723      _Form of expected instruction(s):_ `vqshl.u64 D0, D0, #0'
25725    * int64x1_t vqshl_n_s64 (int64x1_t, const int)
25726      _Form of expected instruction(s):_ `vqshl.s64 D0, D0, #0'
25728    * uint32x4_t vqshlq_n_u32 (uint32x4_t, const int)
25729      _Form of expected instruction(s):_ `vqshl.u32 Q0, Q0, #0'
25731    * uint16x8_t vqshlq_n_u16 (uint16x8_t, const int)
25732      _Form of expected instruction(s):_ `vqshl.u16 Q0, Q0, #0'
25734    * uint8x16_t vqshlq_n_u8 (uint8x16_t, const int)
25735      _Form of expected instruction(s):_ `vqshl.u8 Q0, Q0, #0'
25737    * int32x4_t vqshlq_n_s32 (int32x4_t, const int)
25738      _Form of expected instruction(s):_ `vqshl.s32 Q0, Q0, #0'
25740    * int16x8_t vqshlq_n_s16 (int16x8_t, const int)
25741      _Form of expected instruction(s):_ `vqshl.s16 Q0, Q0, #0'
25743    * int8x16_t vqshlq_n_s8 (int8x16_t, const int)
25744      _Form of expected instruction(s):_ `vqshl.s8 Q0, Q0, #0'
25746    * uint64x2_t vqshlq_n_u64 (uint64x2_t, const int)
25747      _Form of expected instruction(s):_ `vqshl.u64 Q0, Q0, #0'
25749    * int64x2_t vqshlq_n_s64 (int64x2_t, const int)
25750      _Form of expected instruction(s):_ `vqshl.s64 Q0, Q0, #0'
25752    * uint64x1_t vqshlu_n_s64 (int64x1_t, const int)
25753      _Form of expected instruction(s):_ `vqshlu.s64 D0, D0, #0'
25755    * uint32x2_t vqshlu_n_s32 (int32x2_t, const int)
25756      _Form of expected instruction(s):_ `vqshlu.s32 D0, D0, #0'
25758    * uint16x4_t vqshlu_n_s16 (int16x4_t, const int)
25759      _Form of expected instruction(s):_ `vqshlu.s16 D0, D0, #0'
25761    * uint8x8_t vqshlu_n_s8 (int8x8_t, const int)
25762      _Form of expected instruction(s):_ `vqshlu.s8 D0, D0, #0'
25764    * uint64x2_t vqshluq_n_s64 (int64x2_t, const int)
25765      _Form of expected instruction(s):_ `vqshlu.s64 Q0, Q0, #0'
25767    * uint32x4_t vqshluq_n_s32 (int32x4_t, const int)
25768      _Form of expected instruction(s):_ `vqshlu.s32 Q0, Q0, #0'
25770    * uint16x8_t vqshluq_n_s16 (int16x8_t, const int)
25771      _Form of expected instruction(s):_ `vqshlu.s16 Q0, Q0, #0'
25773    * uint8x16_t vqshluq_n_s8 (int8x16_t, const int)
25774      _Form of expected instruction(s):_ `vqshlu.s8 Q0, Q0, #0'
25776    * uint64x2_t vshll_n_u32 (uint32x2_t, const int)
25777      _Form of expected instruction(s):_ `vshll.u32 Q0, D0, #0'
25779    * uint32x4_t vshll_n_u16 (uint16x4_t, const int)
25780      _Form of expected instruction(s):_ `vshll.u16 Q0, D0, #0'
25782    * uint16x8_t vshll_n_u8 (uint8x8_t, const int)
25783      _Form of expected instruction(s):_ `vshll.u8 Q0, D0, #0'
25785    * int64x2_t vshll_n_s32 (int32x2_t, const int)
25786      _Form of expected instruction(s):_ `vshll.s32 Q0, D0, #0'
25788    * int32x4_t vshll_n_s16 (int16x4_t, const int)
25789      _Form of expected instruction(s):_ `vshll.s16 Q0, D0, #0'
25791    * int16x8_t vshll_n_s8 (int8x8_t, const int)
25792      _Form of expected instruction(s):_ `vshll.s8 Q0, D0, #0'
25794 5.50.3.27 Vector shift right by constant
25795 ........................................
25797    * uint32x2_t vshr_n_u32 (uint32x2_t, const int)
25798      _Form of expected instruction(s):_ `vshr.u32 D0, D0, #0'
25800    * uint16x4_t vshr_n_u16 (uint16x4_t, const int)
25801      _Form of expected instruction(s):_ `vshr.u16 D0, D0, #0'
25803    * uint8x8_t vshr_n_u8 (uint8x8_t, const int)
25804      _Form of expected instruction(s):_ `vshr.u8 D0, D0, #0'
25806    * int32x2_t vshr_n_s32 (int32x2_t, const int)
25807      _Form of expected instruction(s):_ `vshr.s32 D0, D0, #0'
25809    * int16x4_t vshr_n_s16 (int16x4_t, const int)
25810      _Form of expected instruction(s):_ `vshr.s16 D0, D0, #0'
25812    * int8x8_t vshr_n_s8 (int8x8_t, const int)
25813      _Form of expected instruction(s):_ `vshr.s8 D0, D0, #0'
25815    * uint64x1_t vshr_n_u64 (uint64x1_t, const int)
25816      _Form of expected instruction(s):_ `vshr.u64 D0, D0, #0'
25818    * int64x1_t vshr_n_s64 (int64x1_t, const int)
25819      _Form of expected instruction(s):_ `vshr.s64 D0, D0, #0'
25821    * uint32x4_t vshrq_n_u32 (uint32x4_t, const int)
25822      _Form of expected instruction(s):_ `vshr.u32 Q0, Q0, #0'
25824    * uint16x8_t vshrq_n_u16 (uint16x8_t, const int)
25825      _Form of expected instruction(s):_ `vshr.u16 Q0, Q0, #0'
25827    * uint8x16_t vshrq_n_u8 (uint8x16_t, const int)
25828      _Form of expected instruction(s):_ `vshr.u8 Q0, Q0, #0'
25830    * int32x4_t vshrq_n_s32 (int32x4_t, const int)
25831      _Form of expected instruction(s):_ `vshr.s32 Q0, Q0, #0'
25833    * int16x8_t vshrq_n_s16 (int16x8_t, const int)
25834      _Form of expected instruction(s):_ `vshr.s16 Q0, Q0, #0'
25836    * int8x16_t vshrq_n_s8 (int8x16_t, const int)
25837      _Form of expected instruction(s):_ `vshr.s8 Q0, Q0, #0'
25839    * uint64x2_t vshrq_n_u64 (uint64x2_t, const int)
25840      _Form of expected instruction(s):_ `vshr.u64 Q0, Q0, #0'
25842    * int64x2_t vshrq_n_s64 (int64x2_t, const int)
25843      _Form of expected instruction(s):_ `vshr.s64 Q0, Q0, #0'
25845    * uint32x2_t vrshr_n_u32 (uint32x2_t, const int)
25846      _Form of expected instruction(s):_ `vrshr.u32 D0, D0, #0'
25848    * uint16x4_t vrshr_n_u16 (uint16x4_t, const int)
25849      _Form of expected instruction(s):_ `vrshr.u16 D0, D0, #0'
25851    * uint8x8_t vrshr_n_u8 (uint8x8_t, const int)
25852      _Form of expected instruction(s):_ `vrshr.u8 D0, D0, #0'
25854    * int32x2_t vrshr_n_s32 (int32x2_t, const int)
25855      _Form of expected instruction(s):_ `vrshr.s32 D0, D0, #0'
25857    * int16x4_t vrshr_n_s16 (int16x4_t, const int)
25858      _Form of expected instruction(s):_ `vrshr.s16 D0, D0, #0'
25860    * int8x8_t vrshr_n_s8 (int8x8_t, const int)
25861      _Form of expected instruction(s):_ `vrshr.s8 D0, D0, #0'
25863    * uint64x1_t vrshr_n_u64 (uint64x1_t, const int)
25864      _Form of expected instruction(s):_ `vrshr.u64 D0, D0, #0'
25866    * int64x1_t vrshr_n_s64 (int64x1_t, const int)
25867      _Form of expected instruction(s):_ `vrshr.s64 D0, D0, #0'
25869    * uint32x4_t vrshrq_n_u32 (uint32x4_t, const int)
25870      _Form of expected instruction(s):_ `vrshr.u32 Q0, Q0, #0'
25872    * uint16x8_t vrshrq_n_u16 (uint16x8_t, const int)
25873      _Form of expected instruction(s):_ `vrshr.u16 Q0, Q0, #0'
25875    * uint8x16_t vrshrq_n_u8 (uint8x16_t, const int)
25876      _Form of expected instruction(s):_ `vrshr.u8 Q0, Q0, #0'
25878    * int32x4_t vrshrq_n_s32 (int32x4_t, const int)
25879      _Form of expected instruction(s):_ `vrshr.s32 Q0, Q0, #0'
25881    * int16x8_t vrshrq_n_s16 (int16x8_t, const int)
25882      _Form of expected instruction(s):_ `vrshr.s16 Q0, Q0, #0'
25884    * int8x16_t vrshrq_n_s8 (int8x16_t, const int)
25885      _Form of expected instruction(s):_ `vrshr.s8 Q0, Q0, #0'
25887    * uint64x2_t vrshrq_n_u64 (uint64x2_t, const int)
25888      _Form of expected instruction(s):_ `vrshr.u64 Q0, Q0, #0'
25890    * int64x2_t vrshrq_n_s64 (int64x2_t, const int)
25891      _Form of expected instruction(s):_ `vrshr.s64 Q0, Q0, #0'
25893    * uint32x2_t vshrn_n_u64 (uint64x2_t, const int)
25894      _Form of expected instruction(s):_ `vshrn.i64 D0, Q0, #0'
25896    * uint16x4_t vshrn_n_u32 (uint32x4_t, const int)
25897      _Form of expected instruction(s):_ `vshrn.i32 D0, Q0, #0'
25899    * uint8x8_t vshrn_n_u16 (uint16x8_t, const int)
25900      _Form of expected instruction(s):_ `vshrn.i16 D0, Q0, #0'
25902    * int32x2_t vshrn_n_s64 (int64x2_t, const int)
25903      _Form of expected instruction(s):_ `vshrn.i64 D0, Q0, #0'
25905    * int16x4_t vshrn_n_s32 (int32x4_t, const int)
25906      _Form of expected instruction(s):_ `vshrn.i32 D0, Q0, #0'
25908    * int8x8_t vshrn_n_s16 (int16x8_t, const int)
25909      _Form of expected instruction(s):_ `vshrn.i16 D0, Q0, #0'
25911    * uint32x2_t vrshrn_n_u64 (uint64x2_t, const int)
25912      _Form of expected instruction(s):_ `vrshrn.i64 D0, Q0, #0'
25914    * uint16x4_t vrshrn_n_u32 (uint32x4_t, const int)
25915      _Form of expected instruction(s):_ `vrshrn.i32 D0, Q0, #0'
25917    * uint8x8_t vrshrn_n_u16 (uint16x8_t, const int)
25918      _Form of expected instruction(s):_ `vrshrn.i16 D0, Q0, #0'
25920    * int32x2_t vrshrn_n_s64 (int64x2_t, const int)
25921      _Form of expected instruction(s):_ `vrshrn.i64 D0, Q0, #0'
25923    * int16x4_t vrshrn_n_s32 (int32x4_t, const int)
25924      _Form of expected instruction(s):_ `vrshrn.i32 D0, Q0, #0'
25926    * int8x8_t vrshrn_n_s16 (int16x8_t, const int)
25927      _Form of expected instruction(s):_ `vrshrn.i16 D0, Q0, #0'
25929    * uint32x2_t vqshrn_n_u64 (uint64x2_t, const int)
25930      _Form of expected instruction(s):_ `vqshrn.u64 D0, Q0, #0'
25932    * uint16x4_t vqshrn_n_u32 (uint32x4_t, const int)
25933      _Form of expected instruction(s):_ `vqshrn.u32 D0, Q0, #0'
25935    * uint8x8_t vqshrn_n_u16 (uint16x8_t, const int)
25936      _Form of expected instruction(s):_ `vqshrn.u16 D0, Q0, #0'
25938    * int32x2_t vqshrn_n_s64 (int64x2_t, const int)
25939      _Form of expected instruction(s):_ `vqshrn.s64 D0, Q0, #0'
25941    * int16x4_t vqshrn_n_s32 (int32x4_t, const int)
25942      _Form of expected instruction(s):_ `vqshrn.s32 D0, Q0, #0'
25944    * int8x8_t vqshrn_n_s16 (int16x8_t, const int)
25945      _Form of expected instruction(s):_ `vqshrn.s16 D0, Q0, #0'
25947    * uint32x2_t vqrshrn_n_u64 (uint64x2_t, const int)
25948      _Form of expected instruction(s):_ `vqrshrn.u64 D0, Q0, #0'
25950    * uint16x4_t vqrshrn_n_u32 (uint32x4_t, const int)
25951      _Form of expected instruction(s):_ `vqrshrn.u32 D0, Q0, #0'
25953    * uint8x8_t vqrshrn_n_u16 (uint16x8_t, const int)
25954      _Form of expected instruction(s):_ `vqrshrn.u16 D0, Q0, #0'
25956    * int32x2_t vqrshrn_n_s64 (int64x2_t, const int)
25957      _Form of expected instruction(s):_ `vqrshrn.s64 D0, Q0, #0'
25959    * int16x4_t vqrshrn_n_s32 (int32x4_t, const int)
25960      _Form of expected instruction(s):_ `vqrshrn.s32 D0, Q0, #0'
25962    * int8x8_t vqrshrn_n_s16 (int16x8_t, const int)
25963      _Form of expected instruction(s):_ `vqrshrn.s16 D0, Q0, #0'
25965    * uint32x2_t vqshrun_n_s64 (int64x2_t, const int)
25966      _Form of expected instruction(s):_ `vqshrun.s64 D0, Q0, #0'
25968    * uint16x4_t vqshrun_n_s32 (int32x4_t, const int)
25969      _Form of expected instruction(s):_ `vqshrun.s32 D0, Q0, #0'
25971    * uint8x8_t vqshrun_n_s16 (int16x8_t, const int)
25972      _Form of expected instruction(s):_ `vqshrun.s16 D0, Q0, #0'
25974    * uint32x2_t vqrshrun_n_s64 (int64x2_t, const int)
25975      _Form of expected instruction(s):_ `vqrshrun.s64 D0, Q0, #0'
25977    * uint16x4_t vqrshrun_n_s32 (int32x4_t, const int)
25978      _Form of expected instruction(s):_ `vqrshrun.s32 D0, Q0, #0'
25980    * uint8x8_t vqrshrun_n_s16 (int16x8_t, const int)
25981      _Form of expected instruction(s):_ `vqrshrun.s16 D0, Q0, #0'
25983 5.50.3.28 Vector shift right by constant and accumulate
25984 .......................................................
25986    * uint32x2_t vsra_n_u32 (uint32x2_t, uint32x2_t, const int)
25987      _Form of expected instruction(s):_ `vsra.u32 D0, D0, #0'
25989    * uint16x4_t vsra_n_u16 (uint16x4_t, uint16x4_t, const int)
25990      _Form of expected instruction(s):_ `vsra.u16 D0, D0, #0'
25992    * uint8x8_t vsra_n_u8 (uint8x8_t, uint8x8_t, const int)
25993      _Form of expected instruction(s):_ `vsra.u8 D0, D0, #0'
25995    * int32x2_t vsra_n_s32 (int32x2_t, int32x2_t, const int)
25996      _Form of expected instruction(s):_ `vsra.s32 D0, D0, #0'
25998    * int16x4_t vsra_n_s16 (int16x4_t, int16x4_t, const int)
25999      _Form of expected instruction(s):_ `vsra.s16 D0, D0, #0'
26001    * int8x8_t vsra_n_s8 (int8x8_t, int8x8_t, const int)
26002      _Form of expected instruction(s):_ `vsra.s8 D0, D0, #0'
26004    * uint64x1_t vsra_n_u64 (uint64x1_t, uint64x1_t, const int)
26005      _Form of expected instruction(s):_ `vsra.u64 D0, D0, #0'
26007    * int64x1_t vsra_n_s64 (int64x1_t, int64x1_t, const int)
26008      _Form of expected instruction(s):_ `vsra.s64 D0, D0, #0'
26010    * uint32x4_t vsraq_n_u32 (uint32x4_t, uint32x4_t, const int)
26011      _Form of expected instruction(s):_ `vsra.u32 Q0, Q0, #0'
26013    * uint16x8_t vsraq_n_u16 (uint16x8_t, uint16x8_t, const int)
26014      _Form of expected instruction(s):_ `vsra.u16 Q0, Q0, #0'
26016    * uint8x16_t vsraq_n_u8 (uint8x16_t, uint8x16_t, const int)
26017      _Form of expected instruction(s):_ `vsra.u8 Q0, Q0, #0'
26019    * int32x4_t vsraq_n_s32 (int32x4_t, int32x4_t, const int)
26020      _Form of expected instruction(s):_ `vsra.s32 Q0, Q0, #0'
26022    * int16x8_t vsraq_n_s16 (int16x8_t, int16x8_t, const int)
26023      _Form of expected instruction(s):_ `vsra.s16 Q0, Q0, #0'
26025    * int8x16_t vsraq_n_s8 (int8x16_t, int8x16_t, const int)
26026      _Form of expected instruction(s):_ `vsra.s8 Q0, Q0, #0'
26028    * uint64x2_t vsraq_n_u64 (uint64x2_t, uint64x2_t, const int)
26029      _Form of expected instruction(s):_ `vsra.u64 Q0, Q0, #0'
26031    * int64x2_t vsraq_n_s64 (int64x2_t, int64x2_t, const int)
26032      _Form of expected instruction(s):_ `vsra.s64 Q0, Q0, #0'
26034    * uint32x2_t vrsra_n_u32 (uint32x2_t, uint32x2_t, const int)
26035      _Form of expected instruction(s):_ `vrsra.u32 D0, D0, #0'
26037    * uint16x4_t vrsra_n_u16 (uint16x4_t, uint16x4_t, const int)
26038      _Form of expected instruction(s):_ `vrsra.u16 D0, D0, #0'
26040    * uint8x8_t vrsra_n_u8 (uint8x8_t, uint8x8_t, const int)
26041      _Form of expected instruction(s):_ `vrsra.u8 D0, D0, #0'
26043    * int32x2_t vrsra_n_s32 (int32x2_t, int32x2_t, const int)
26044      _Form of expected instruction(s):_ `vrsra.s32 D0, D0, #0'
26046    * int16x4_t vrsra_n_s16 (int16x4_t, int16x4_t, const int)
26047      _Form of expected instruction(s):_ `vrsra.s16 D0, D0, #0'
26049    * int8x8_t vrsra_n_s8 (int8x8_t, int8x8_t, const int)
26050      _Form of expected instruction(s):_ `vrsra.s8 D0, D0, #0'
26052    * uint64x1_t vrsra_n_u64 (uint64x1_t, uint64x1_t, const int)
26053      _Form of expected instruction(s):_ `vrsra.u64 D0, D0, #0'
26055    * int64x1_t vrsra_n_s64 (int64x1_t, int64x1_t, const int)
26056      _Form of expected instruction(s):_ `vrsra.s64 D0, D0, #0'
26058    * uint32x4_t vrsraq_n_u32 (uint32x4_t, uint32x4_t, const int)
26059      _Form of expected instruction(s):_ `vrsra.u32 Q0, Q0, #0'
26061    * uint16x8_t vrsraq_n_u16 (uint16x8_t, uint16x8_t, const int)
26062      _Form of expected instruction(s):_ `vrsra.u16 Q0, Q0, #0'
26064    * uint8x16_t vrsraq_n_u8 (uint8x16_t, uint8x16_t, const int)
26065      _Form of expected instruction(s):_ `vrsra.u8 Q0, Q0, #0'
26067    * int32x4_t vrsraq_n_s32 (int32x4_t, int32x4_t, const int)
26068      _Form of expected instruction(s):_ `vrsra.s32 Q0, Q0, #0'
26070    * int16x8_t vrsraq_n_s16 (int16x8_t, int16x8_t, const int)
26071      _Form of expected instruction(s):_ `vrsra.s16 Q0, Q0, #0'
26073    * int8x16_t vrsraq_n_s8 (int8x16_t, int8x16_t, const int)
26074      _Form of expected instruction(s):_ `vrsra.s8 Q0, Q0, #0'
26076    * uint64x2_t vrsraq_n_u64 (uint64x2_t, uint64x2_t, const int)
26077      _Form of expected instruction(s):_ `vrsra.u64 Q0, Q0, #0'
26079    * int64x2_t vrsraq_n_s64 (int64x2_t, int64x2_t, const int)
26080      _Form of expected instruction(s):_ `vrsra.s64 Q0, Q0, #0'
26082 5.50.3.29 Vector shift right and insert
26083 .......................................
26085    * uint32x2_t vsri_n_u32 (uint32x2_t, uint32x2_t, const int)
26086      _Form of expected instruction(s):_ `vsri.32 D0, D0, #0'
26088    * uint16x4_t vsri_n_u16 (uint16x4_t, uint16x4_t, const int)
26089      _Form of expected instruction(s):_ `vsri.16 D0, D0, #0'
26091    * uint8x8_t vsri_n_u8 (uint8x8_t, uint8x8_t, const int)
26092      _Form of expected instruction(s):_ `vsri.8 D0, D0, #0'
26094    * int32x2_t vsri_n_s32 (int32x2_t, int32x2_t, const int)
26095      _Form of expected instruction(s):_ `vsri.32 D0, D0, #0'
26097    * int16x4_t vsri_n_s16 (int16x4_t, int16x4_t, const int)
26098      _Form of expected instruction(s):_ `vsri.16 D0, D0, #0'
26100    * int8x8_t vsri_n_s8 (int8x8_t, int8x8_t, const int)
26101      _Form of expected instruction(s):_ `vsri.8 D0, D0, #0'
26103    * uint64x1_t vsri_n_u64 (uint64x1_t, uint64x1_t, const int)
26104      _Form of expected instruction(s):_ `vsri.64 D0, D0, #0'
26106    * int64x1_t vsri_n_s64 (int64x1_t, int64x1_t, const int)
26107      _Form of expected instruction(s):_ `vsri.64 D0, D0, #0'
26109    * poly16x4_t vsri_n_p16 (poly16x4_t, poly16x4_t, const int)
26110      _Form of expected instruction(s):_ `vsri.16 D0, D0, #0'
26112    * poly8x8_t vsri_n_p8 (poly8x8_t, poly8x8_t, const int)
26113      _Form of expected instruction(s):_ `vsri.8 D0, D0, #0'
26115    * uint32x4_t vsriq_n_u32 (uint32x4_t, uint32x4_t, const int)
26116      _Form of expected instruction(s):_ `vsri.32 Q0, Q0, #0'
26118    * uint16x8_t vsriq_n_u16 (uint16x8_t, uint16x8_t, const int)
26119      _Form of expected instruction(s):_ `vsri.16 Q0, Q0, #0'
26121    * uint8x16_t vsriq_n_u8 (uint8x16_t, uint8x16_t, const int)
26122      _Form of expected instruction(s):_ `vsri.8 Q0, Q0, #0'
26124    * int32x4_t vsriq_n_s32 (int32x4_t, int32x4_t, const int)
26125      _Form of expected instruction(s):_ `vsri.32 Q0, Q0, #0'
26127    * int16x8_t vsriq_n_s16 (int16x8_t, int16x8_t, const int)
26128      _Form of expected instruction(s):_ `vsri.16 Q0, Q0, #0'
26130    * int8x16_t vsriq_n_s8 (int8x16_t, int8x16_t, const int)
26131      _Form of expected instruction(s):_ `vsri.8 Q0, Q0, #0'
26133    * uint64x2_t vsriq_n_u64 (uint64x2_t, uint64x2_t, const int)
26134      _Form of expected instruction(s):_ `vsri.64 Q0, Q0, #0'
26136    * int64x2_t vsriq_n_s64 (int64x2_t, int64x2_t, const int)
26137      _Form of expected instruction(s):_ `vsri.64 Q0, Q0, #0'
26139    * poly16x8_t vsriq_n_p16 (poly16x8_t, poly16x8_t, const int)
26140      _Form of expected instruction(s):_ `vsri.16 Q0, Q0, #0'
26142    * poly8x16_t vsriq_n_p8 (poly8x16_t, poly8x16_t, const int)
26143      _Form of expected instruction(s):_ `vsri.8 Q0, Q0, #0'
26145 5.50.3.30 Vector shift left and insert
26146 ......................................
26148    * uint32x2_t vsli_n_u32 (uint32x2_t, uint32x2_t, const int)
26149      _Form of expected instruction(s):_ `vsli.32 D0, D0, #0'
26151    * uint16x4_t vsli_n_u16 (uint16x4_t, uint16x4_t, const int)
26152      _Form of expected instruction(s):_ `vsli.16 D0, D0, #0'
26154    * uint8x8_t vsli_n_u8 (uint8x8_t, uint8x8_t, const int)
26155      _Form of expected instruction(s):_ `vsli.8 D0, D0, #0'
26157    * int32x2_t vsli_n_s32 (int32x2_t, int32x2_t, const int)
26158      _Form of expected instruction(s):_ `vsli.32 D0, D0, #0'
26160    * int16x4_t vsli_n_s16 (int16x4_t, int16x4_t, const int)
26161      _Form of expected instruction(s):_ `vsli.16 D0, D0, #0'
26163    * int8x8_t vsli_n_s8 (int8x8_t, int8x8_t, const int)
26164      _Form of expected instruction(s):_ `vsli.8 D0, D0, #0'
26166    * uint64x1_t vsli_n_u64 (uint64x1_t, uint64x1_t, const int)
26167      _Form of expected instruction(s):_ `vsli.64 D0, D0, #0'
26169    * int64x1_t vsli_n_s64 (int64x1_t, int64x1_t, const int)
26170      _Form of expected instruction(s):_ `vsli.64 D0, D0, #0'
26172    * poly16x4_t vsli_n_p16 (poly16x4_t, poly16x4_t, const int)
26173      _Form of expected instruction(s):_ `vsli.16 D0, D0, #0'
26175    * poly8x8_t vsli_n_p8 (poly8x8_t, poly8x8_t, const int)
26176      _Form of expected instruction(s):_ `vsli.8 D0, D0, #0'
26178    * uint32x4_t vsliq_n_u32 (uint32x4_t, uint32x4_t, const int)
26179      _Form of expected instruction(s):_ `vsli.32 Q0, Q0, #0'
26181    * uint16x8_t vsliq_n_u16 (uint16x8_t, uint16x8_t, const int)
26182      _Form of expected instruction(s):_ `vsli.16 Q0, Q0, #0'
26184    * uint8x16_t vsliq_n_u8 (uint8x16_t, uint8x16_t, const int)
26185      _Form of expected instruction(s):_ `vsli.8 Q0, Q0, #0'
26187    * int32x4_t vsliq_n_s32 (int32x4_t, int32x4_t, const int)
26188      _Form of expected instruction(s):_ `vsli.32 Q0, Q0, #0'
26190    * int16x8_t vsliq_n_s16 (int16x8_t, int16x8_t, const int)
26191      _Form of expected instruction(s):_ `vsli.16 Q0, Q0, #0'
26193    * int8x16_t vsliq_n_s8 (int8x16_t, int8x16_t, const int)
26194      _Form of expected instruction(s):_ `vsli.8 Q0, Q0, #0'
26196    * uint64x2_t vsliq_n_u64 (uint64x2_t, uint64x2_t, const int)
26197      _Form of expected instruction(s):_ `vsli.64 Q0, Q0, #0'
26199    * int64x2_t vsliq_n_s64 (int64x2_t, int64x2_t, const int)
26200      _Form of expected instruction(s):_ `vsli.64 Q0, Q0, #0'
26202    * poly16x8_t vsliq_n_p16 (poly16x8_t, poly16x8_t, const int)
26203      _Form of expected instruction(s):_ `vsli.16 Q0, Q0, #0'
26205    * poly8x16_t vsliq_n_p8 (poly8x16_t, poly8x16_t, const int)
26206      _Form of expected instruction(s):_ `vsli.8 Q0, Q0, #0'
26208 5.50.3.31 Absolute value
26209 ........................
26211    * float32x2_t vabs_f32 (float32x2_t)
26212      _Form of expected instruction(s):_ `vabs.f32 D0, D0'
26214    * int32x2_t vabs_s32 (int32x2_t)
26215      _Form of expected instruction(s):_ `vabs.s32 D0, D0'
26217    * int16x4_t vabs_s16 (int16x4_t)
26218      _Form of expected instruction(s):_ `vabs.s16 D0, D0'
26220    * int8x8_t vabs_s8 (int8x8_t)
26221      _Form of expected instruction(s):_ `vabs.s8 D0, D0'
26223    * float32x4_t vabsq_f32 (float32x4_t)
26224      _Form of expected instruction(s):_ `vabs.f32 Q0, Q0'
26226    * int32x4_t vabsq_s32 (int32x4_t)
26227      _Form of expected instruction(s):_ `vabs.s32 Q0, Q0'
26229    * int16x8_t vabsq_s16 (int16x8_t)
26230      _Form of expected instruction(s):_ `vabs.s16 Q0, Q0'
26232    * int8x16_t vabsq_s8 (int8x16_t)
26233      _Form of expected instruction(s):_ `vabs.s8 Q0, Q0'
26235    * int32x2_t vqabs_s32 (int32x2_t)
26236      _Form of expected instruction(s):_ `vqabs.s32 D0, D0'
26238    * int16x4_t vqabs_s16 (int16x4_t)
26239      _Form of expected instruction(s):_ `vqabs.s16 D0, D0'
26241    * int8x8_t vqabs_s8 (int8x8_t)
26242      _Form of expected instruction(s):_ `vqabs.s8 D0, D0'
26244    * int32x4_t vqabsq_s32 (int32x4_t)
26245      _Form of expected instruction(s):_ `vqabs.s32 Q0, Q0'
26247    * int16x8_t vqabsq_s16 (int16x8_t)
26248      _Form of expected instruction(s):_ `vqabs.s16 Q0, Q0'
26250    * int8x16_t vqabsq_s8 (int8x16_t)
26251      _Form of expected instruction(s):_ `vqabs.s8 Q0, Q0'
26253 5.50.3.32 Negation
26254 ..................
26256    * float32x2_t vneg_f32 (float32x2_t)
26257      _Form of expected instruction(s):_ `vneg.f32 D0, D0'
26259    * int32x2_t vneg_s32 (int32x2_t)
26260      _Form of expected instruction(s):_ `vneg.s32 D0, D0'
26262    * int16x4_t vneg_s16 (int16x4_t)
26263      _Form of expected instruction(s):_ `vneg.s16 D0, D0'
26265    * int8x8_t vneg_s8 (int8x8_t)
26266      _Form of expected instruction(s):_ `vneg.s8 D0, D0'
26268    * float32x4_t vnegq_f32 (float32x4_t)
26269      _Form of expected instruction(s):_ `vneg.f32 Q0, Q0'
26271    * int32x4_t vnegq_s32 (int32x4_t)
26272      _Form of expected instruction(s):_ `vneg.s32 Q0, Q0'
26274    * int16x8_t vnegq_s16 (int16x8_t)
26275      _Form of expected instruction(s):_ `vneg.s16 Q0, Q0'
26277    * int8x16_t vnegq_s8 (int8x16_t)
26278      _Form of expected instruction(s):_ `vneg.s8 Q0, Q0'
26280    * int32x2_t vqneg_s32 (int32x2_t)
26281      _Form of expected instruction(s):_ `vqneg.s32 D0, D0'
26283    * int16x4_t vqneg_s16 (int16x4_t)
26284      _Form of expected instruction(s):_ `vqneg.s16 D0, D0'
26286    * int8x8_t vqneg_s8 (int8x8_t)
26287      _Form of expected instruction(s):_ `vqneg.s8 D0, D0'
26289    * int32x4_t vqnegq_s32 (int32x4_t)
26290      _Form of expected instruction(s):_ `vqneg.s32 Q0, Q0'
26292    * int16x8_t vqnegq_s16 (int16x8_t)
26293      _Form of expected instruction(s):_ `vqneg.s16 Q0, Q0'
26295    * int8x16_t vqnegq_s8 (int8x16_t)
26296      _Form of expected instruction(s):_ `vqneg.s8 Q0, Q0'
26298 5.50.3.33 Bitwise not
26299 .....................
26301    * uint32x2_t vmvn_u32 (uint32x2_t)
26302      _Form of expected instruction(s):_ `vmvn D0, D0'
26304    * uint16x4_t vmvn_u16 (uint16x4_t)
26305      _Form of expected instruction(s):_ `vmvn D0, D0'
26307    * uint8x8_t vmvn_u8 (uint8x8_t)
26308      _Form of expected instruction(s):_ `vmvn D0, D0'
26310    * int32x2_t vmvn_s32 (int32x2_t)
26311      _Form of expected instruction(s):_ `vmvn D0, D0'
26313    * int16x4_t vmvn_s16 (int16x4_t)
26314      _Form of expected instruction(s):_ `vmvn D0, D0'
26316    * int8x8_t vmvn_s8 (int8x8_t)
26317      _Form of expected instruction(s):_ `vmvn D0, D0'
26319    * poly8x8_t vmvn_p8 (poly8x8_t)
26320      _Form of expected instruction(s):_ `vmvn D0, D0'
26322    * uint32x4_t vmvnq_u32 (uint32x4_t)
26323      _Form of expected instruction(s):_ `vmvn Q0, Q0'
26325    * uint16x8_t vmvnq_u16 (uint16x8_t)
26326      _Form of expected instruction(s):_ `vmvn Q0, Q0'
26328    * uint8x16_t vmvnq_u8 (uint8x16_t)
26329      _Form of expected instruction(s):_ `vmvn Q0, Q0'
26331    * int32x4_t vmvnq_s32 (int32x4_t)
26332      _Form of expected instruction(s):_ `vmvn Q0, Q0'
26334    * int16x8_t vmvnq_s16 (int16x8_t)
26335      _Form of expected instruction(s):_ `vmvn Q0, Q0'
26337    * int8x16_t vmvnq_s8 (int8x16_t)
26338      _Form of expected instruction(s):_ `vmvn Q0, Q0'
26340    * poly8x16_t vmvnq_p8 (poly8x16_t)
26341      _Form of expected instruction(s):_ `vmvn Q0, Q0'
26343 5.50.3.34 Count leading sign bits
26344 .................................
26346    * int32x2_t vcls_s32 (int32x2_t)
26347      _Form of expected instruction(s):_ `vcls.s32 D0, D0'
26349    * int16x4_t vcls_s16 (int16x4_t)
26350      _Form of expected instruction(s):_ `vcls.s16 D0, D0'
26352    * int8x8_t vcls_s8 (int8x8_t)
26353      _Form of expected instruction(s):_ `vcls.s8 D0, D0'
26355    * int32x4_t vclsq_s32 (int32x4_t)
26356      _Form of expected instruction(s):_ `vcls.s32 Q0, Q0'
26358    * int16x8_t vclsq_s16 (int16x8_t)
26359      _Form of expected instruction(s):_ `vcls.s16 Q0, Q0'
26361    * int8x16_t vclsq_s8 (int8x16_t)
26362      _Form of expected instruction(s):_ `vcls.s8 Q0, Q0'
26364 5.50.3.35 Count leading zeros
26365 .............................
26367    * uint32x2_t vclz_u32 (uint32x2_t)
26368      _Form of expected instruction(s):_ `vclz.i32 D0, D0'
26370    * uint16x4_t vclz_u16 (uint16x4_t)
26371      _Form of expected instruction(s):_ `vclz.i16 D0, D0'
26373    * uint8x8_t vclz_u8 (uint8x8_t)
26374      _Form of expected instruction(s):_ `vclz.i8 D0, D0'
26376    * int32x2_t vclz_s32 (int32x2_t)
26377      _Form of expected instruction(s):_ `vclz.i32 D0, D0'
26379    * int16x4_t vclz_s16 (int16x4_t)
26380      _Form of expected instruction(s):_ `vclz.i16 D0, D0'
26382    * int8x8_t vclz_s8 (int8x8_t)
26383      _Form of expected instruction(s):_ `vclz.i8 D0, D0'
26385    * uint32x4_t vclzq_u32 (uint32x4_t)
26386      _Form of expected instruction(s):_ `vclz.i32 Q0, Q0'
26388    * uint16x8_t vclzq_u16 (uint16x8_t)
26389      _Form of expected instruction(s):_ `vclz.i16 Q0, Q0'
26391    * uint8x16_t vclzq_u8 (uint8x16_t)
26392      _Form of expected instruction(s):_ `vclz.i8 Q0, Q0'
26394    * int32x4_t vclzq_s32 (int32x4_t)
26395      _Form of expected instruction(s):_ `vclz.i32 Q0, Q0'
26397    * int16x8_t vclzq_s16 (int16x8_t)
26398      _Form of expected instruction(s):_ `vclz.i16 Q0, Q0'
26400    * int8x16_t vclzq_s8 (int8x16_t)
26401      _Form of expected instruction(s):_ `vclz.i8 Q0, Q0'
26403 5.50.3.36 Count number of set bits
26404 ..................................
26406    * uint8x8_t vcnt_u8 (uint8x8_t)
26407      _Form of expected instruction(s):_ `vcnt.8 D0, D0'
26409    * int8x8_t vcnt_s8 (int8x8_t)
26410      _Form of expected instruction(s):_ `vcnt.8 D0, D0'
26412    * poly8x8_t vcnt_p8 (poly8x8_t)
26413      _Form of expected instruction(s):_ `vcnt.8 D0, D0'
26415    * uint8x16_t vcntq_u8 (uint8x16_t)
26416      _Form of expected instruction(s):_ `vcnt.8 Q0, Q0'
26418    * int8x16_t vcntq_s8 (int8x16_t)
26419      _Form of expected instruction(s):_ `vcnt.8 Q0, Q0'
26421    * poly8x16_t vcntq_p8 (poly8x16_t)
26422      _Form of expected instruction(s):_ `vcnt.8 Q0, Q0'
26424 5.50.3.37 Reciprocal estimate
26425 .............................
26427    * float32x2_t vrecpe_f32 (float32x2_t)
26428      _Form of expected instruction(s):_ `vrecpe.f32 D0, D0'
26430    * uint32x2_t vrecpe_u32 (uint32x2_t)
26431      _Form of expected instruction(s):_ `vrecpe.u32 D0, D0'
26433    * float32x4_t vrecpeq_f32 (float32x4_t)
26434      _Form of expected instruction(s):_ `vrecpe.f32 Q0, Q0'
26436    * uint32x4_t vrecpeq_u32 (uint32x4_t)
26437      _Form of expected instruction(s):_ `vrecpe.u32 Q0, Q0'
26439 5.50.3.38 Reciprocal square-root estimate
26440 .........................................
26442    * float32x2_t vrsqrte_f32 (float32x2_t)
26443      _Form of expected instruction(s):_ `vrsqrte.f32 D0, D0'
26445    * uint32x2_t vrsqrte_u32 (uint32x2_t)
26446      _Form of expected instruction(s):_ `vrsqrte.u32 D0, D0'
26448    * float32x4_t vrsqrteq_f32 (float32x4_t)
26449      _Form of expected instruction(s):_ `vrsqrte.f32 Q0, Q0'
26451    * uint32x4_t vrsqrteq_u32 (uint32x4_t)
26452      _Form of expected instruction(s):_ `vrsqrte.u32 Q0, Q0'
26454 5.50.3.39 Get lanes from a vector
26455 .................................
26457    * uint32_t vget_lane_u32 (uint32x2_t, const int)
26458      _Form of expected instruction(s):_ `vmov.u32 R0, D0[0]'
26460    * uint16_t vget_lane_u16 (uint16x4_t, const int)
26461      _Form of expected instruction(s):_ `vmov.u16 R0, D0[0]'
26463    * uint8_t vget_lane_u8 (uint8x8_t, const int)
26464      _Form of expected instruction(s):_ `vmov.u8 R0, D0[0]'
26466    * int32_t vget_lane_s32 (int32x2_t, const int)
26467      _Form of expected instruction(s):_ `vmov.s32 R0, D0[0]'
26469    * int16_t vget_lane_s16 (int16x4_t, const int)
26470      _Form of expected instruction(s):_ `vmov.s16 R0, D0[0]'
26472    * int8_t vget_lane_s8 (int8x8_t, const int)
26473      _Form of expected instruction(s):_ `vmov.s8 R0, D0[0]'
26475    * float32_t vget_lane_f32 (float32x2_t, const int)
26476      _Form of expected instruction(s):_ `vmov.f32 R0, D0[0]'
26478    * poly16_t vget_lane_p16 (poly16x4_t, const int)
26479      _Form of expected instruction(s):_ `vmov.u16 R0, D0[0]'
26481    * poly8_t vget_lane_p8 (poly8x8_t, const int)
26482      _Form of expected instruction(s):_ `vmov.u8 R0, D0[0]'
26484    * uint64_t vget_lane_u64 (uint64x1_t, const int)
26485      _Form of expected instruction(s):_ `vmov R0, R0, D0'
26487    * int64_t vget_lane_s64 (int64x1_t, const int)
26488      _Form of expected instruction(s):_ `vmov R0, R0, D0'
26490    * uint32_t vgetq_lane_u32 (uint32x4_t, const int)
26491      _Form of expected instruction(s):_ `vmov.u32 R0, D0[0]'
26493    * uint16_t vgetq_lane_u16 (uint16x8_t, const int)
26494      _Form of expected instruction(s):_ `vmov.u16 R0, D0[0]'
26496    * uint8_t vgetq_lane_u8 (uint8x16_t, const int)
26497      _Form of expected instruction(s):_ `vmov.u8 R0, D0[0]'
26499    * int32_t vgetq_lane_s32 (int32x4_t, const int)
26500      _Form of expected instruction(s):_ `vmov.s32 R0, D0[0]'
26502    * int16_t vgetq_lane_s16 (int16x8_t, const int)
26503      _Form of expected instruction(s):_ `vmov.s16 R0, D0[0]'
26505    * int8_t vgetq_lane_s8 (int8x16_t, const int)
26506      _Form of expected instruction(s):_ `vmov.s8 R0, D0[0]'
26508    * float32_t vgetq_lane_f32 (float32x4_t, const int)
26509      _Form of expected instruction(s):_ `vmov.f32 R0, D0[0]'
26511    * poly16_t vgetq_lane_p16 (poly16x8_t, const int)
26512      _Form of expected instruction(s):_ `vmov.u16 R0, D0[0]'
26514    * poly8_t vgetq_lane_p8 (poly8x16_t, const int)
26515      _Form of expected instruction(s):_ `vmov.u8 R0, D0[0]'
26517    * uint64_t vgetq_lane_u64 (uint64x2_t, const int)
26518      _Form of expected instruction(s):_ `vmov R0, R0, D0'
26520    * int64_t vgetq_lane_s64 (int64x2_t, const int)
26521      _Form of expected instruction(s):_ `vmov R0, R0, D0'
26523 5.50.3.40 Set lanes in a vector
26524 ...............................
26526    * uint32x2_t vset_lane_u32 (uint32_t, uint32x2_t, const int)
26527      _Form of expected instruction(s):_ `vmov.32 D0[0], R0'
26529    * uint16x4_t vset_lane_u16 (uint16_t, uint16x4_t, const int)
26530      _Form of expected instruction(s):_ `vmov.16 D0[0], R0'
26532    * uint8x8_t vset_lane_u8 (uint8_t, uint8x8_t, const int)
26533      _Form of expected instruction(s):_ `vmov.8 D0[0], R0'
26535    * int32x2_t vset_lane_s32 (int32_t, int32x2_t, const int)
26536      _Form of expected instruction(s):_ `vmov.32 D0[0], R0'
26538    * int16x4_t vset_lane_s16 (int16_t, int16x4_t, const int)
26539      _Form of expected instruction(s):_ `vmov.16 D0[0], R0'
26541    * int8x8_t vset_lane_s8 (int8_t, int8x8_t, const int)
26542      _Form of expected instruction(s):_ `vmov.8 D0[0], R0'
26544    * float32x2_t vset_lane_f32 (float32_t, float32x2_t, const int)
26545      _Form of expected instruction(s):_ `vmov.32 D0[0], R0'
26547    * poly16x4_t vset_lane_p16 (poly16_t, poly16x4_t, const int)
26548      _Form of expected instruction(s):_ `vmov.16 D0[0], R0'
26550    * poly8x8_t vset_lane_p8 (poly8_t, poly8x8_t, const int)
26551      _Form of expected instruction(s):_ `vmov.8 D0[0], R0'
26553    * uint64x1_t vset_lane_u64 (uint64_t, uint64x1_t, const int)
26554      _Form of expected instruction(s):_ `vmov D0, R0, R0'
26556    * int64x1_t vset_lane_s64 (int64_t, int64x1_t, const int)
26557      _Form of expected instruction(s):_ `vmov D0, R0, R0'
26559    * uint32x4_t vsetq_lane_u32 (uint32_t, uint32x4_t, const int)
26560      _Form of expected instruction(s):_ `vmov.32 D0[0], R0'
26562    * uint16x8_t vsetq_lane_u16 (uint16_t, uint16x8_t, const int)
26563      _Form of expected instruction(s):_ `vmov.16 D0[0], R0'
26565    * uint8x16_t vsetq_lane_u8 (uint8_t, uint8x16_t, const int)
26566      _Form of expected instruction(s):_ `vmov.8 D0[0], R0'
26568    * int32x4_t vsetq_lane_s32 (int32_t, int32x4_t, const int)
26569      _Form of expected instruction(s):_ `vmov.32 D0[0], R0'
26571    * int16x8_t vsetq_lane_s16 (int16_t, int16x8_t, const int)
26572      _Form of expected instruction(s):_ `vmov.16 D0[0], R0'
26574    * int8x16_t vsetq_lane_s8 (int8_t, int8x16_t, const int)
26575      _Form of expected instruction(s):_ `vmov.8 D0[0], R0'
26577    * float32x4_t vsetq_lane_f32 (float32_t, float32x4_t, const int)
26578      _Form of expected instruction(s):_ `vmov.32 D0[0], R0'
26580    * poly16x8_t vsetq_lane_p16 (poly16_t, poly16x8_t, const int)
26581      _Form of expected instruction(s):_ `vmov.16 D0[0], R0'
26583    * poly8x16_t vsetq_lane_p8 (poly8_t, poly8x16_t, const int)
26584      _Form of expected instruction(s):_ `vmov.8 D0[0], R0'
26586    * uint64x2_t vsetq_lane_u64 (uint64_t, uint64x2_t, const int)
26587      _Form of expected instruction(s):_ `vmov D0, R0, R0'
26589    * int64x2_t vsetq_lane_s64 (int64_t, int64x2_t, const int)
26590      _Form of expected instruction(s):_ `vmov D0, R0, R0'
26592 5.50.3.41 Create vector from literal bit pattern
26593 ................................................
26595    * uint32x2_t vcreate_u32 (uint64_t)
26597    * uint16x4_t vcreate_u16 (uint64_t)
26599    * uint8x8_t vcreate_u8 (uint64_t)
26601    * int32x2_t vcreate_s32 (uint64_t)
26603    * int16x4_t vcreate_s16 (uint64_t)
26605    * int8x8_t vcreate_s8 (uint64_t)
26607    * uint64x1_t vcreate_u64 (uint64_t)
26609    * int64x1_t vcreate_s64 (uint64_t)
26611    * float32x2_t vcreate_f32 (uint64_t)
26613    * poly16x4_t vcreate_p16 (uint64_t)
26615    * poly8x8_t vcreate_p8 (uint64_t)
26617 5.50.3.42 Set all lanes to the same value
26618 .........................................
26620    * uint32x2_t vdup_n_u32 (uint32_t)
26621      _Form of expected instruction(s):_ `vdup.32 D0, R0'
26623    * uint16x4_t vdup_n_u16 (uint16_t)
26624      _Form of expected instruction(s):_ `vdup.16 D0, R0'
26626    * uint8x8_t vdup_n_u8 (uint8_t)
26627      _Form of expected instruction(s):_ `vdup.8 D0, R0'
26629    * int32x2_t vdup_n_s32 (int32_t)
26630      _Form of expected instruction(s):_ `vdup.32 D0, R0'
26632    * int16x4_t vdup_n_s16 (int16_t)
26633      _Form of expected instruction(s):_ `vdup.16 D0, R0'
26635    * int8x8_t vdup_n_s8 (int8_t)
26636      _Form of expected instruction(s):_ `vdup.8 D0, R0'
26638    * float32x2_t vdup_n_f32 (float32_t)
26639      _Form of expected instruction(s):_ `vdup.32 D0, R0'
26641    * poly16x4_t vdup_n_p16 (poly16_t)
26642      _Form of expected instruction(s):_ `vdup.16 D0, R0'
26644    * poly8x8_t vdup_n_p8 (poly8_t)
26645      _Form of expected instruction(s):_ `vdup.8 D0, R0'
26647    * uint64x1_t vdup_n_u64 (uint64_t)
26648      _Form of expected instruction(s):_ `vmov D0, R0, R0'
26650    * int64x1_t vdup_n_s64 (int64_t)
26651      _Form of expected instruction(s):_ `vmov D0, R0, R0'
26653    * uint32x4_t vdupq_n_u32 (uint32_t)
26654      _Form of expected instruction(s):_ `vdup.32 Q0, R0'
26656    * uint16x8_t vdupq_n_u16 (uint16_t)
26657      _Form of expected instruction(s):_ `vdup.16 Q0, R0'
26659    * uint8x16_t vdupq_n_u8 (uint8_t)
26660      _Form of expected instruction(s):_ `vdup.8 Q0, R0'
26662    * int32x4_t vdupq_n_s32 (int32_t)
26663      _Form of expected instruction(s):_ `vdup.32 Q0, R0'
26665    * int16x8_t vdupq_n_s16 (int16_t)
26666      _Form of expected instruction(s):_ `vdup.16 Q0, R0'
26668    * int8x16_t vdupq_n_s8 (int8_t)
26669      _Form of expected instruction(s):_ `vdup.8 Q0, R0'
26671    * float32x4_t vdupq_n_f32 (float32_t)
26672      _Form of expected instruction(s):_ `vdup.32 Q0, R0'
26674    * poly16x8_t vdupq_n_p16 (poly16_t)
26675      _Form of expected instruction(s):_ `vdup.16 Q0, R0'
26677    * poly8x16_t vdupq_n_p8 (poly8_t)
26678      _Form of expected instruction(s):_ `vdup.8 Q0, R0'
26680    * uint64x2_t vdupq_n_u64 (uint64_t)
26681      _Form of expected instruction(s):_ `vmov D0, R0, R0'
26683    * int64x2_t vdupq_n_s64 (int64_t)
26684      _Form of expected instruction(s):_ `vmov D0, R0, R0'
26686    * uint32x2_t vmov_n_u32 (uint32_t)
26687      _Form of expected instruction(s):_ `vdup.32 D0, R0'
26689    * uint16x4_t vmov_n_u16 (uint16_t)
26690      _Form of expected instruction(s):_ `vdup.16 D0, R0'
26692    * uint8x8_t vmov_n_u8 (uint8_t)
26693      _Form of expected instruction(s):_ `vdup.8 D0, R0'
26695    * int32x2_t vmov_n_s32 (int32_t)
26696      _Form of expected instruction(s):_ `vdup.32 D0, R0'
26698    * int16x4_t vmov_n_s16 (int16_t)
26699      _Form of expected instruction(s):_ `vdup.16 D0, R0'
26701    * int8x8_t vmov_n_s8 (int8_t)
26702      _Form of expected instruction(s):_ `vdup.8 D0, R0'
26704    * float32x2_t vmov_n_f32 (float32_t)
26705      _Form of expected instruction(s):_ `vdup.32 D0, R0'
26707    * poly16x4_t vmov_n_p16 (poly16_t)
26708      _Form of expected instruction(s):_ `vdup.16 D0, R0'
26710    * poly8x8_t vmov_n_p8 (poly8_t)
26711      _Form of expected instruction(s):_ `vdup.8 D0, R0'
26713    * uint64x1_t vmov_n_u64 (uint64_t)
26714      _Form of expected instruction(s):_ `vmov D0, R0, R0'
26716    * int64x1_t vmov_n_s64 (int64_t)
26717      _Form of expected instruction(s):_ `vmov D0, R0, R0'
26719    * uint32x4_t vmovq_n_u32 (uint32_t)
26720      _Form of expected instruction(s):_ `vdup.32 Q0, R0'
26722    * uint16x8_t vmovq_n_u16 (uint16_t)
26723      _Form of expected instruction(s):_ `vdup.16 Q0, R0'
26725    * uint8x16_t vmovq_n_u8 (uint8_t)
26726      _Form of expected instruction(s):_ `vdup.8 Q0, R0'
26728    * int32x4_t vmovq_n_s32 (int32_t)
26729      _Form of expected instruction(s):_ `vdup.32 Q0, R0'
26731    * int16x8_t vmovq_n_s16 (int16_t)
26732      _Form of expected instruction(s):_ `vdup.16 Q0, R0'
26734    * int8x16_t vmovq_n_s8 (int8_t)
26735      _Form of expected instruction(s):_ `vdup.8 Q0, R0'
26737    * float32x4_t vmovq_n_f32 (float32_t)
26738      _Form of expected instruction(s):_ `vdup.32 Q0, R0'
26740    * poly16x8_t vmovq_n_p16 (poly16_t)
26741      _Form of expected instruction(s):_ `vdup.16 Q0, R0'
26743    * poly8x16_t vmovq_n_p8 (poly8_t)
26744      _Form of expected instruction(s):_ `vdup.8 Q0, R0'
26746    * uint64x2_t vmovq_n_u64 (uint64_t)
26747      _Form of expected instruction(s):_ `vmov D0, R0, R0'
26749    * int64x2_t vmovq_n_s64 (int64_t)
26750      _Form of expected instruction(s):_ `vmov D0, R0, R0'
26752    * uint32x2_t vdup_lane_u32 (uint32x2_t, const int)
26753      _Form of expected instruction(s):_ `vdup.32 D0, D0[0]'
26755    * uint16x4_t vdup_lane_u16 (uint16x4_t, const int)
26756      _Form of expected instruction(s):_ `vdup.16 D0, D0[0]'
26758    * uint8x8_t vdup_lane_u8 (uint8x8_t, const int)
26759      _Form of expected instruction(s):_ `vdup.8 D0, D0[0]'
26761    * int32x2_t vdup_lane_s32 (int32x2_t, const int)
26762      _Form of expected instruction(s):_ `vdup.32 D0, D0[0]'
26764    * int16x4_t vdup_lane_s16 (int16x4_t, const int)
26765      _Form of expected instruction(s):_ `vdup.16 D0, D0[0]'
26767    * int8x8_t vdup_lane_s8 (int8x8_t, const int)
26768      _Form of expected instruction(s):_ `vdup.8 D0, D0[0]'
26770    * float32x2_t vdup_lane_f32 (float32x2_t, const int)
26771      _Form of expected instruction(s):_ `vdup.32 D0, D0[0]'
26773    * poly16x4_t vdup_lane_p16 (poly16x4_t, const int)
26774      _Form of expected instruction(s):_ `vdup.16 D0, D0[0]'
26776    * poly8x8_t vdup_lane_p8 (poly8x8_t, const int)
26777      _Form of expected instruction(s):_ `vdup.8 D0, D0[0]'
26779    * uint64x1_t vdup_lane_u64 (uint64x1_t, const int)
26781    * int64x1_t vdup_lane_s64 (int64x1_t, const int)
26783    * uint32x4_t vdupq_lane_u32 (uint32x2_t, const int)
26784      _Form of expected instruction(s):_ `vdup.32 Q0, D0[0]'
26786    * uint16x8_t vdupq_lane_u16 (uint16x4_t, const int)
26787      _Form of expected instruction(s):_ `vdup.16 Q0, D0[0]'
26789    * uint8x16_t vdupq_lane_u8 (uint8x8_t, const int)
26790      _Form of expected instruction(s):_ `vdup.8 Q0, D0[0]'
26792    * int32x4_t vdupq_lane_s32 (int32x2_t, const int)
26793      _Form of expected instruction(s):_ `vdup.32 Q0, D0[0]'
26795    * int16x8_t vdupq_lane_s16 (int16x4_t, const int)
26796      _Form of expected instruction(s):_ `vdup.16 Q0, D0[0]'
26798    * int8x16_t vdupq_lane_s8 (int8x8_t, const int)
26799      _Form of expected instruction(s):_ `vdup.8 Q0, D0[0]'
26801    * float32x4_t vdupq_lane_f32 (float32x2_t, const int)
26802      _Form of expected instruction(s):_ `vdup.32 Q0, D0[0]'
26804    * poly16x8_t vdupq_lane_p16 (poly16x4_t, const int)
26805      _Form of expected instruction(s):_ `vdup.16 Q0, D0[0]'
26807    * poly8x16_t vdupq_lane_p8 (poly8x8_t, const int)
26808      _Form of expected instruction(s):_ `vdup.8 Q0, D0[0]'
26810    * uint64x2_t vdupq_lane_u64 (uint64x1_t, const int)
26812    * int64x2_t vdupq_lane_s64 (int64x1_t, const int)
26814 5.50.3.43 Combining vectors
26815 ...........................
26817    * uint32x4_t vcombine_u32 (uint32x2_t, uint32x2_t)
26819    * uint16x8_t vcombine_u16 (uint16x4_t, uint16x4_t)
26821    * uint8x16_t vcombine_u8 (uint8x8_t, uint8x8_t)
26823    * int32x4_t vcombine_s32 (int32x2_t, int32x2_t)
26825    * int16x8_t vcombine_s16 (int16x4_t, int16x4_t)
26827    * int8x16_t vcombine_s8 (int8x8_t, int8x8_t)
26829    * uint64x2_t vcombine_u64 (uint64x1_t, uint64x1_t)
26831    * int64x2_t vcombine_s64 (int64x1_t, int64x1_t)
26833    * float32x4_t vcombine_f32 (float32x2_t, float32x2_t)
26835    * poly16x8_t vcombine_p16 (poly16x4_t, poly16x4_t)
26837    * poly8x16_t vcombine_p8 (poly8x8_t, poly8x8_t)
26839 5.50.3.44 Splitting vectors
26840 ...........................
26842    * uint32x2_t vget_high_u32 (uint32x4_t)
26844    * uint16x4_t vget_high_u16 (uint16x8_t)
26846    * uint8x8_t vget_high_u8 (uint8x16_t)
26848    * int32x2_t vget_high_s32 (int32x4_t)
26850    * int16x4_t vget_high_s16 (int16x8_t)
26852    * int8x8_t vget_high_s8 (int8x16_t)
26854    * uint64x1_t vget_high_u64 (uint64x2_t)
26856    * int64x1_t vget_high_s64 (int64x2_t)
26858    * float32x2_t vget_high_f32 (float32x4_t)
26860    * poly16x4_t vget_high_p16 (poly16x8_t)
26862    * poly8x8_t vget_high_p8 (poly8x16_t)
26864    * uint32x2_t vget_low_u32 (uint32x4_t)
26865      _Form of expected instruction(s):_ `vmov D0, D0'
26867    * uint16x4_t vget_low_u16 (uint16x8_t)
26868      _Form of expected instruction(s):_ `vmov D0, D0'
26870    * uint8x8_t vget_low_u8 (uint8x16_t)
26871      _Form of expected instruction(s):_ `vmov D0, D0'
26873    * int32x2_t vget_low_s32 (int32x4_t)
26874      _Form of expected instruction(s):_ `vmov D0, D0'
26876    * int16x4_t vget_low_s16 (int16x8_t)
26877      _Form of expected instruction(s):_ `vmov D0, D0'
26879    * int8x8_t vget_low_s8 (int8x16_t)
26880      _Form of expected instruction(s):_ `vmov D0, D0'
26882    * uint64x1_t vget_low_u64 (uint64x2_t)
26883      _Form of expected instruction(s):_ `vmov D0, D0'
26885    * int64x1_t vget_low_s64 (int64x2_t)
26886      _Form of expected instruction(s):_ `vmov D0, D0'
26888    * float32x2_t vget_low_f32 (float32x4_t)
26889      _Form of expected instruction(s):_ `vmov D0, D0'
26891    * poly16x4_t vget_low_p16 (poly16x8_t)
26892      _Form of expected instruction(s):_ `vmov D0, D0'
26894    * poly8x8_t vget_low_p8 (poly8x16_t)
26895      _Form of expected instruction(s):_ `vmov D0, D0'
26897 5.50.3.45 Conversions
26898 .....................
26900    * float32x2_t vcvt_f32_u32 (uint32x2_t)
26901      _Form of expected instruction(s):_ `vcvt.f32.u32 D0, D0'
26903    * float32x2_t vcvt_f32_s32 (int32x2_t)
26904      _Form of expected instruction(s):_ `vcvt.f32.s32 D0, D0'
26906    * uint32x2_t vcvt_u32_f32 (float32x2_t)
26907      _Form of expected instruction(s):_ `vcvt.u32.f32 D0, D0'
26909    * int32x2_t vcvt_s32_f32 (float32x2_t)
26910      _Form of expected instruction(s):_ `vcvt.s32.f32 D0, D0'
26912    * float32x4_t vcvtq_f32_u32 (uint32x4_t)
26913      _Form of expected instruction(s):_ `vcvt.f32.u32 Q0, Q0'
26915    * float32x4_t vcvtq_f32_s32 (int32x4_t)
26916      _Form of expected instruction(s):_ `vcvt.f32.s32 Q0, Q0'
26918    * uint32x4_t vcvtq_u32_f32 (float32x4_t)
26919      _Form of expected instruction(s):_ `vcvt.u32.f32 Q0, Q0'
26921    * int32x4_t vcvtq_s32_f32 (float32x4_t)
26922      _Form of expected instruction(s):_ `vcvt.s32.f32 Q0, Q0'
26924    * float32x2_t vcvt_n_f32_u32 (uint32x2_t, const int)
26925      _Form of expected instruction(s):_ `vcvt.f32.u32 D0, D0, #0'
26927    * float32x2_t vcvt_n_f32_s32 (int32x2_t, const int)
26928      _Form of expected instruction(s):_ `vcvt.f32.s32 D0, D0, #0'
26930    * uint32x2_t vcvt_n_u32_f32 (float32x2_t, const int)
26931      _Form of expected instruction(s):_ `vcvt.u32.f32 D0, D0, #0'
26933    * int32x2_t vcvt_n_s32_f32 (float32x2_t, const int)
26934      _Form of expected instruction(s):_ `vcvt.s32.f32 D0, D0, #0'
26936    * float32x4_t vcvtq_n_f32_u32 (uint32x4_t, const int)
26937      _Form of expected instruction(s):_ `vcvt.f32.u32 Q0, Q0, #0'
26939    * float32x4_t vcvtq_n_f32_s32 (int32x4_t, const int)
26940      _Form of expected instruction(s):_ `vcvt.f32.s32 Q0, Q0, #0'
26942    * uint32x4_t vcvtq_n_u32_f32 (float32x4_t, const int)
26943      _Form of expected instruction(s):_ `vcvt.u32.f32 Q0, Q0, #0'
26945    * int32x4_t vcvtq_n_s32_f32 (float32x4_t, const int)
26946      _Form of expected instruction(s):_ `vcvt.s32.f32 Q0, Q0, #0'
26948 5.50.3.46 Move, single_opcode narrowing
26949 .......................................
26951    * uint32x2_t vmovn_u64 (uint64x2_t)
26952      _Form of expected instruction(s):_ `vmovn.i64 D0, Q0'
26954    * uint16x4_t vmovn_u32 (uint32x4_t)
26955      _Form of expected instruction(s):_ `vmovn.i32 D0, Q0'
26957    * uint8x8_t vmovn_u16 (uint16x8_t)
26958      _Form of expected instruction(s):_ `vmovn.i16 D0, Q0'
26960    * int32x2_t vmovn_s64 (int64x2_t)
26961      _Form of expected instruction(s):_ `vmovn.i64 D0, Q0'
26963    * int16x4_t vmovn_s32 (int32x4_t)
26964      _Form of expected instruction(s):_ `vmovn.i32 D0, Q0'
26966    * int8x8_t vmovn_s16 (int16x8_t)
26967      _Form of expected instruction(s):_ `vmovn.i16 D0, Q0'
26969    * uint32x2_t vqmovn_u64 (uint64x2_t)
26970      _Form of expected instruction(s):_ `vqmovn.u64 D0, Q0'
26972    * uint16x4_t vqmovn_u32 (uint32x4_t)
26973      _Form of expected instruction(s):_ `vqmovn.u32 D0, Q0'
26975    * uint8x8_t vqmovn_u16 (uint16x8_t)
26976      _Form of expected instruction(s):_ `vqmovn.u16 D0, Q0'
26978    * int32x2_t vqmovn_s64 (int64x2_t)
26979      _Form of expected instruction(s):_ `vqmovn.s64 D0, Q0'
26981    * int16x4_t vqmovn_s32 (int32x4_t)
26982      _Form of expected instruction(s):_ `vqmovn.s32 D0, Q0'
26984    * int8x8_t vqmovn_s16 (int16x8_t)
26985      _Form of expected instruction(s):_ `vqmovn.s16 D0, Q0'
26987    * uint32x2_t vqmovun_s64 (int64x2_t)
26988      _Form of expected instruction(s):_ `vqmovun.s64 D0, Q0'
26990    * uint16x4_t vqmovun_s32 (int32x4_t)
26991      _Form of expected instruction(s):_ `vqmovun.s32 D0, Q0'
26993    * uint8x8_t vqmovun_s16 (int16x8_t)
26994      _Form of expected instruction(s):_ `vqmovun.s16 D0, Q0'
26996 5.50.3.47 Move, single_opcode long
26997 ..................................
26999    * uint64x2_t vmovl_u32 (uint32x2_t)
27000      _Form of expected instruction(s):_ `vmovl.u32 Q0, D0'
27002    * uint32x4_t vmovl_u16 (uint16x4_t)
27003      _Form of expected instruction(s):_ `vmovl.u16 Q0, D0'
27005    * uint16x8_t vmovl_u8 (uint8x8_t)
27006      _Form of expected instruction(s):_ `vmovl.u8 Q0, D0'
27008    * int64x2_t vmovl_s32 (int32x2_t)
27009      _Form of expected instruction(s):_ `vmovl.s32 Q0, D0'
27011    * int32x4_t vmovl_s16 (int16x4_t)
27012      _Form of expected instruction(s):_ `vmovl.s16 Q0, D0'
27014    * int16x8_t vmovl_s8 (int8x8_t)
27015      _Form of expected instruction(s):_ `vmovl.s8 Q0, D0'
27017 5.50.3.48 Table lookup
27018 ......................
27020    * poly8x8_t vtbl1_p8 (poly8x8_t, uint8x8_t)
27021      _Form of expected instruction(s):_ `vtbl.8 D0, {D0}, D0'
27023    * int8x8_t vtbl1_s8 (int8x8_t, int8x8_t)
27024      _Form of expected instruction(s):_ `vtbl.8 D0, {D0}, D0'
27026    * uint8x8_t vtbl1_u8 (uint8x8_t, uint8x8_t)
27027      _Form of expected instruction(s):_ `vtbl.8 D0, {D0}, D0'
27029    * poly8x8_t vtbl2_p8 (poly8x8x2_t, uint8x8_t)
27030      _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1}, D0'
27032    * int8x8_t vtbl2_s8 (int8x8x2_t, int8x8_t)
27033      _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1}, D0'
27035    * uint8x8_t vtbl2_u8 (uint8x8x2_t, uint8x8_t)
27036      _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1}, D0'
27038    * poly8x8_t vtbl3_p8 (poly8x8x3_t, uint8x8_t)
27039      _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1, D2}, D0'
27041    * int8x8_t vtbl3_s8 (int8x8x3_t, int8x8_t)
27042      _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1, D2}, D0'
27044    * uint8x8_t vtbl3_u8 (uint8x8x3_t, uint8x8_t)
27045      _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1, D2}, D0'
27047    * poly8x8_t vtbl4_p8 (poly8x8x4_t, uint8x8_t)
27048      _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1, D2, D3},
27049      D0'
27051    * int8x8_t vtbl4_s8 (int8x8x4_t, int8x8_t)
27052      _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1, D2, D3},
27053      D0'
27055    * uint8x8_t vtbl4_u8 (uint8x8x4_t, uint8x8_t)
27056      _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1, D2, D3},
27057      D0'
27059 5.50.3.49 Extended table lookup
27060 ...............................
27062    * poly8x8_t vtbx1_p8 (poly8x8_t, poly8x8_t, uint8x8_t)
27063      _Form of expected instruction(s):_ `vtbx.8 D0, {D0}, D0'
27065    * int8x8_t vtbx1_s8 (int8x8_t, int8x8_t, int8x8_t)
27066      _Form of expected instruction(s):_ `vtbx.8 D0, {D0}, D0'
27068    * uint8x8_t vtbx1_u8 (uint8x8_t, uint8x8_t, uint8x8_t)
27069      _Form of expected instruction(s):_ `vtbx.8 D0, {D0}, D0'
27071    * poly8x8_t vtbx2_p8 (poly8x8_t, poly8x8x2_t, uint8x8_t)
27072      _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1}, D0'
27074    * int8x8_t vtbx2_s8 (int8x8_t, int8x8x2_t, int8x8_t)
27075      _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1}, D0'
27077    * uint8x8_t vtbx2_u8 (uint8x8_t, uint8x8x2_t, uint8x8_t)
27078      _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1}, D0'
27080    * poly8x8_t vtbx3_p8 (poly8x8_t, poly8x8x3_t, uint8x8_t)
27081      _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1, D2}, D0'
27083    * int8x8_t vtbx3_s8 (int8x8_t, int8x8x3_t, int8x8_t)
27084      _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1, D2}, D0'
27086    * uint8x8_t vtbx3_u8 (uint8x8_t, uint8x8x3_t, uint8x8_t)
27087      _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1, D2}, D0'
27089    * poly8x8_t vtbx4_p8 (poly8x8_t, poly8x8x4_t, uint8x8_t)
27090      _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1, D2, D3},
27091      D0'
27093    * int8x8_t vtbx4_s8 (int8x8_t, int8x8x4_t, int8x8_t)
27094      _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1, D2, D3},
27095      D0'
27097    * uint8x8_t vtbx4_u8 (uint8x8_t, uint8x8x4_t, uint8x8_t)
27098      _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1, D2, D3},
27099      D0'
27101 5.50.3.50 Multiply, lane
27102 ........................
27104    * float32x2_t vmul_lane_f32 (float32x2_t, float32x2_t, const int)
27105      _Form of expected instruction(s):_ `vmul.f32 D0, D0, D0[0]'
27107    * uint32x2_t vmul_lane_u32 (uint32x2_t, uint32x2_t, const int)
27108      _Form of expected instruction(s):_ `vmul.i32 D0, D0, D0[0]'
27110    * uint16x4_t vmul_lane_u16 (uint16x4_t, uint16x4_t, const int)
27111      _Form of expected instruction(s):_ `vmul.i16 D0, D0, D0[0]'
27113    * int32x2_t vmul_lane_s32 (int32x2_t, int32x2_t, const int)
27114      _Form of expected instruction(s):_ `vmul.i32 D0, D0, D0[0]'
27116    * int16x4_t vmul_lane_s16 (int16x4_t, int16x4_t, const int)
27117      _Form of expected instruction(s):_ `vmul.i16 D0, D0, D0[0]'
27119    * float32x4_t vmulq_lane_f32 (float32x4_t, float32x2_t, const int)
27120      _Form of expected instruction(s):_ `vmul.f32 Q0, Q0, D0[0]'
27122    * uint32x4_t vmulq_lane_u32 (uint32x4_t, uint32x2_t, const int)
27123      _Form of expected instruction(s):_ `vmul.i32 Q0, Q0, D0[0]'
27125    * uint16x8_t vmulq_lane_u16 (uint16x8_t, uint16x4_t, const int)
27126      _Form of expected instruction(s):_ `vmul.i16 Q0, Q0, D0[0]'
27128    * int32x4_t vmulq_lane_s32 (int32x4_t, int32x2_t, const int)
27129      _Form of expected instruction(s):_ `vmul.i32 Q0, Q0, D0[0]'
27131    * int16x8_t vmulq_lane_s16 (int16x8_t, int16x4_t, const int)
27132      _Form of expected instruction(s):_ `vmul.i16 Q0, Q0, D0[0]'
27134 5.50.3.51 Long multiply, lane
27135 .............................
27137    * uint64x2_t vmull_lane_u32 (uint32x2_t, uint32x2_t, const int)
27138      _Form of expected instruction(s):_ `vmull.u32 Q0, D0, D0[0]'
27140    * uint32x4_t vmull_lane_u16 (uint16x4_t, uint16x4_t, const int)
27141      _Form of expected instruction(s):_ `vmull.u16 Q0, D0, D0[0]'
27143    * int64x2_t vmull_lane_s32 (int32x2_t, int32x2_t, const int)
27144      _Form of expected instruction(s):_ `vmull.s32 Q0, D0, D0[0]'
27146    * int32x4_t vmull_lane_s16 (int16x4_t, int16x4_t, const int)
27147      _Form of expected instruction(s):_ `vmull.s16 Q0, D0, D0[0]'
27149 5.50.3.52 Saturating doubling long multiply, lane
27150 .................................................
27152    * int64x2_t vqdmull_lane_s32 (int32x2_t, int32x2_t, const int)
27153      _Form of expected instruction(s):_ `vqdmull.s32 Q0, D0, D0[0]'
27155    * int32x4_t vqdmull_lane_s16 (int16x4_t, int16x4_t, const int)
27156      _Form of expected instruction(s):_ `vqdmull.s16 Q0, D0, D0[0]'
27158 5.50.3.53 Saturating doubling multiply high, lane
27159 .................................................
27161    * int32x4_t vqdmulhq_lane_s32 (int32x4_t, int32x2_t, const int)
27162      _Form of expected instruction(s):_ `vqdmulh.s32 Q0, Q0, D0[0]'
27164    * int16x8_t vqdmulhq_lane_s16 (int16x8_t, int16x4_t, const int)
27165      _Form of expected instruction(s):_ `vqdmulh.s16 Q0, Q0, D0[0]'
27167    * int32x2_t vqdmulh_lane_s32 (int32x2_t, int32x2_t, const int)
27168      _Form of expected instruction(s):_ `vqdmulh.s32 D0, D0, D0[0]'
27170    * int16x4_t vqdmulh_lane_s16 (int16x4_t, int16x4_t, const int)
27171      _Form of expected instruction(s):_ `vqdmulh.s16 D0, D0, D0[0]'
27173    * int32x4_t vqrdmulhq_lane_s32 (int32x4_t, int32x2_t, const int)
27174      _Form of expected instruction(s):_ `vqrdmulh.s32 Q0, Q0, D0[0]'
27176    * int16x8_t vqrdmulhq_lane_s16 (int16x8_t, int16x4_t, const int)
27177      _Form of expected instruction(s):_ `vqrdmulh.s16 Q0, Q0, D0[0]'
27179    * int32x2_t vqrdmulh_lane_s32 (int32x2_t, int32x2_t, const int)
27180      _Form of expected instruction(s):_ `vqrdmulh.s32 D0, D0, D0[0]'
27182    * int16x4_t vqrdmulh_lane_s16 (int16x4_t, int16x4_t, const int)
27183      _Form of expected instruction(s):_ `vqrdmulh.s16 D0, D0, D0[0]'
27185 5.50.3.54 Multiply-accumulate, lane
27186 ...................................
27188    * float32x2_t vmla_lane_f32 (float32x2_t, float32x2_t, float32x2_t,
27189      const int)
27190      _Form of expected instruction(s):_ `vmla.f32 D0, D0, D0[0]'
27192    * uint32x2_t vmla_lane_u32 (uint32x2_t, uint32x2_t, uint32x2_t,
27193      const int)
27194      _Form of expected instruction(s):_ `vmla.i32 D0, D0, D0[0]'
27196    * uint16x4_t vmla_lane_u16 (uint16x4_t, uint16x4_t, uint16x4_t,
27197      const int)
27198      _Form of expected instruction(s):_ `vmla.i16 D0, D0, D0[0]'
27200    * int32x2_t vmla_lane_s32 (int32x2_t, int32x2_t, int32x2_t, const
27201      int)
27202      _Form of expected instruction(s):_ `vmla.i32 D0, D0, D0[0]'
27204    * int16x4_t vmla_lane_s16 (int16x4_t, int16x4_t, int16x4_t, const
27205      int)
27206      _Form of expected instruction(s):_ `vmla.i16 D0, D0, D0[0]'
27208    * float32x4_t vmlaq_lane_f32 (float32x4_t, float32x4_t, float32x2_t,
27209      const int)
27210      _Form of expected instruction(s):_ `vmla.f32 Q0, Q0, D0[0]'
27212    * uint32x4_t vmlaq_lane_u32 (uint32x4_t, uint32x4_t, uint32x2_t,
27213      const int)
27214      _Form of expected instruction(s):_ `vmla.i32 Q0, Q0, D0[0]'
27216    * uint16x8_t vmlaq_lane_u16 (uint16x8_t, uint16x8_t, uint16x4_t,
27217      const int)
27218      _Form of expected instruction(s):_ `vmla.i16 Q0, Q0, D0[0]'
27220    * int32x4_t vmlaq_lane_s32 (int32x4_t, int32x4_t, int32x2_t, const
27221      int)
27222      _Form of expected instruction(s):_ `vmla.i32 Q0, Q0, D0[0]'
27224    * int16x8_t vmlaq_lane_s16 (int16x8_t, int16x8_t, int16x4_t, const
27225      int)
27226      _Form of expected instruction(s):_ `vmla.i16 Q0, Q0, D0[0]'
27228    * uint64x2_t vmlal_lane_u32 (uint64x2_t, uint32x2_t, uint32x2_t,
27229      const int)
27230      _Form of expected instruction(s):_ `vmlal.u32 Q0, D0, D0[0]'
27232    * uint32x4_t vmlal_lane_u16 (uint32x4_t, uint16x4_t, uint16x4_t,
27233      const int)
27234      _Form of expected instruction(s):_ `vmlal.u16 Q0, D0, D0[0]'
27236    * int64x2_t vmlal_lane_s32 (int64x2_t, int32x2_t, int32x2_t, const
27237      int)
27238      _Form of expected instruction(s):_ `vmlal.s32 Q0, D0, D0[0]'
27240    * int32x4_t vmlal_lane_s16 (int32x4_t, int16x4_t, int16x4_t, const
27241      int)
27242      _Form of expected instruction(s):_ `vmlal.s16 Q0, D0, D0[0]'
27244    * int64x2_t vqdmlal_lane_s32 (int64x2_t, int32x2_t, int32x2_t, const
27245      int)
27246      _Form of expected instruction(s):_ `vqdmlal.s32 Q0, D0, D0[0]'
27248    * int32x4_t vqdmlal_lane_s16 (int32x4_t, int16x4_t, int16x4_t, const
27249      int)
27250      _Form of expected instruction(s):_ `vqdmlal.s16 Q0, D0, D0[0]'
27252 5.50.3.55 Multiply-subtract, lane
27253 .................................
27255    * float32x2_t vmls_lane_f32 (float32x2_t, float32x2_t, float32x2_t,
27256      const int)
27257      _Form of expected instruction(s):_ `vmls.f32 D0, D0, D0[0]'
27259    * uint32x2_t vmls_lane_u32 (uint32x2_t, uint32x2_t, uint32x2_t,
27260      const int)
27261      _Form of expected instruction(s):_ `vmls.i32 D0, D0, D0[0]'
27263    * uint16x4_t vmls_lane_u16 (uint16x4_t, uint16x4_t, uint16x4_t,
27264      const int)
27265      _Form of expected instruction(s):_ `vmls.i16 D0, D0, D0[0]'
27267    * int32x2_t vmls_lane_s32 (int32x2_t, int32x2_t, int32x2_t, const
27268      int)
27269      _Form of expected instruction(s):_ `vmls.i32 D0, D0, D0[0]'
27271    * int16x4_t vmls_lane_s16 (int16x4_t, int16x4_t, int16x4_t, const
27272      int)
27273      _Form of expected instruction(s):_ `vmls.i16 D0, D0, D0[0]'
27275    * float32x4_t vmlsq_lane_f32 (float32x4_t, float32x4_t, float32x2_t,
27276      const int)
27277      _Form of expected instruction(s):_ `vmls.f32 Q0, Q0, D0[0]'
27279    * uint32x4_t vmlsq_lane_u32 (uint32x4_t, uint32x4_t, uint32x2_t,
27280      const int)
27281      _Form of expected instruction(s):_ `vmls.i32 Q0, Q0, D0[0]'
27283    * uint16x8_t vmlsq_lane_u16 (uint16x8_t, uint16x8_t, uint16x4_t,
27284      const int)
27285      _Form of expected instruction(s):_ `vmls.i16 Q0, Q0, D0[0]'
27287    * int32x4_t vmlsq_lane_s32 (int32x4_t, int32x4_t, int32x2_t, const
27288      int)
27289      _Form of expected instruction(s):_ `vmls.i32 Q0, Q0, D0[0]'
27291    * int16x8_t vmlsq_lane_s16 (int16x8_t, int16x8_t, int16x4_t, const
27292      int)
27293      _Form of expected instruction(s):_ `vmls.i16 Q0, Q0, D0[0]'
27295    * uint64x2_t vmlsl_lane_u32 (uint64x2_t, uint32x2_t, uint32x2_t,
27296      const int)
27297      _Form of expected instruction(s):_ `vmlsl.u32 Q0, D0, D0[0]'
27299    * uint32x4_t vmlsl_lane_u16 (uint32x4_t, uint16x4_t, uint16x4_t,
27300      const int)
27301      _Form of expected instruction(s):_ `vmlsl.u16 Q0, D0, D0[0]'
27303    * int64x2_t vmlsl_lane_s32 (int64x2_t, int32x2_t, int32x2_t, const
27304      int)
27305      _Form of expected instruction(s):_ `vmlsl.s32 Q0, D0, D0[0]'
27307    * int32x4_t vmlsl_lane_s16 (int32x4_t, int16x4_t, int16x4_t, const
27308      int)
27309      _Form of expected instruction(s):_ `vmlsl.s16 Q0, D0, D0[0]'
27311    * int64x2_t vqdmlsl_lane_s32 (int64x2_t, int32x2_t, int32x2_t, const
27312      int)
27313      _Form of expected instruction(s):_ `vqdmlsl.s32 Q0, D0, D0[0]'
27315    * int32x4_t vqdmlsl_lane_s16 (int32x4_t, int16x4_t, int16x4_t, const
27316      int)
27317      _Form of expected instruction(s):_ `vqdmlsl.s16 Q0, D0, D0[0]'
27319 5.50.3.56 Vector multiply by scalar
27320 ...................................
27322    * float32x2_t vmul_n_f32 (float32x2_t, float32_t)
27323      _Form of expected instruction(s):_ `vmul.f32 D0, D0, D0[0]'
27325    * uint32x2_t vmul_n_u32 (uint32x2_t, uint32_t)
27326      _Form of expected instruction(s):_ `vmul.i32 D0, D0, D0[0]'
27328    * uint16x4_t vmul_n_u16 (uint16x4_t, uint16_t)
27329      _Form of expected instruction(s):_ `vmul.i16 D0, D0, D0[0]'
27331    * int32x2_t vmul_n_s32 (int32x2_t, int32_t)
27332      _Form of expected instruction(s):_ `vmul.i32 D0, D0, D0[0]'
27334    * int16x4_t vmul_n_s16 (int16x4_t, int16_t)
27335      _Form of expected instruction(s):_ `vmul.i16 D0, D0, D0[0]'
27337    * float32x4_t vmulq_n_f32 (float32x4_t, float32_t)
27338      _Form of expected instruction(s):_ `vmul.f32 Q0, Q0, D0[0]'
27340    * uint32x4_t vmulq_n_u32 (uint32x4_t, uint32_t)
27341      _Form of expected instruction(s):_ `vmul.i32 Q0, Q0, D0[0]'
27343    * uint16x8_t vmulq_n_u16 (uint16x8_t, uint16_t)
27344      _Form of expected instruction(s):_ `vmul.i16 Q0, Q0, D0[0]'
27346    * int32x4_t vmulq_n_s32 (int32x4_t, int32_t)
27347      _Form of expected instruction(s):_ `vmul.i32 Q0, Q0, D0[0]'
27349    * int16x8_t vmulq_n_s16 (int16x8_t, int16_t)
27350      _Form of expected instruction(s):_ `vmul.i16 Q0, Q0, D0[0]'
27352 5.50.3.57 Vector long multiply by scalar
27353 ........................................
27355    * uint64x2_t vmull_n_u32 (uint32x2_t, uint32_t)
27356      _Form of expected instruction(s):_ `vmull.u32 Q0, D0, D0[0]'
27358    * uint32x4_t vmull_n_u16 (uint16x4_t, uint16_t)
27359      _Form of expected instruction(s):_ `vmull.u16 Q0, D0, D0[0]'
27361    * int64x2_t vmull_n_s32 (int32x2_t, int32_t)
27362      _Form of expected instruction(s):_ `vmull.s32 Q0, D0, D0[0]'
27364    * int32x4_t vmull_n_s16 (int16x4_t, int16_t)
27365      _Form of expected instruction(s):_ `vmull.s16 Q0, D0, D0[0]'
27367 5.50.3.58 Vector saturating doubling long multiply by scalar
27368 ............................................................
27370    * int64x2_t vqdmull_n_s32 (int32x2_t, int32_t)
27371      _Form of expected instruction(s):_ `vqdmull.s32 Q0, D0, D0[0]'
27373    * int32x4_t vqdmull_n_s16 (int16x4_t, int16_t)
27374      _Form of expected instruction(s):_ `vqdmull.s16 Q0, D0, D0[0]'
27376 5.50.3.59 Vector saturating doubling multiply high by scalar
27377 ............................................................
27379    * int32x4_t vqdmulhq_n_s32 (int32x4_t, int32_t)
27380      _Form of expected instruction(s):_ `vqdmulh.s32 Q0, Q0, D0[0]'
27382    * int16x8_t vqdmulhq_n_s16 (int16x8_t, int16_t)
27383      _Form of expected instruction(s):_ `vqdmulh.s16 Q0, Q0, D0[0]'
27385    * int32x2_t vqdmulh_n_s32 (int32x2_t, int32_t)
27386      _Form of expected instruction(s):_ `vqdmulh.s32 D0, D0, D0[0]'
27388    * int16x4_t vqdmulh_n_s16 (int16x4_t, int16_t)
27389      _Form of expected instruction(s):_ `vqdmulh.s16 D0, D0, D0[0]'
27391    * int32x4_t vqrdmulhq_n_s32 (int32x4_t, int32_t)
27392      _Form of expected instruction(s):_ `vqrdmulh.s32 Q0, Q0, D0[0]'
27394    * int16x8_t vqrdmulhq_n_s16 (int16x8_t, int16_t)
27395      _Form of expected instruction(s):_ `vqrdmulh.s16 Q0, Q0, D0[0]'
27397    * int32x2_t vqrdmulh_n_s32 (int32x2_t, int32_t)
27398      _Form of expected instruction(s):_ `vqrdmulh.s32 D0, D0, D0[0]'
27400    * int16x4_t vqrdmulh_n_s16 (int16x4_t, int16_t)
27401      _Form of expected instruction(s):_ `vqrdmulh.s16 D0, D0, D0[0]'
27403 5.50.3.60 Vector multiply-accumulate by scalar
27404 ..............................................
27406    * float32x2_t vmla_n_f32 (float32x2_t, float32x2_t, float32_t)
27407      _Form of expected instruction(s):_ `vmla.f32 D0, D0, D0[0]'
27409    * uint32x2_t vmla_n_u32 (uint32x2_t, uint32x2_t, uint32_t)
27410      _Form of expected instruction(s):_ `vmla.i32 D0, D0, D0[0]'
27412    * uint16x4_t vmla_n_u16 (uint16x4_t, uint16x4_t, uint16_t)
27413      _Form of expected instruction(s):_ `vmla.i16 D0, D0, D0[0]'
27415    * int32x2_t vmla_n_s32 (int32x2_t, int32x2_t, int32_t)
27416      _Form of expected instruction(s):_ `vmla.i32 D0, D0, D0[0]'
27418    * int16x4_t vmla_n_s16 (int16x4_t, int16x4_t, int16_t)
27419      _Form of expected instruction(s):_ `vmla.i16 D0, D0, D0[0]'
27421    * float32x4_t vmlaq_n_f32 (float32x4_t, float32x4_t, float32_t)
27422      _Form of expected instruction(s):_ `vmla.f32 Q0, Q0, D0[0]'
27424    * uint32x4_t vmlaq_n_u32 (uint32x4_t, uint32x4_t, uint32_t)
27425      _Form of expected instruction(s):_ `vmla.i32 Q0, Q0, D0[0]'
27427    * uint16x8_t vmlaq_n_u16 (uint16x8_t, uint16x8_t, uint16_t)
27428      _Form of expected instruction(s):_ `vmla.i16 Q0, Q0, D0[0]'
27430    * int32x4_t vmlaq_n_s32 (int32x4_t, int32x4_t, int32_t)
27431      _Form of expected instruction(s):_ `vmla.i32 Q0, Q0, D0[0]'
27433    * int16x8_t vmlaq_n_s16 (int16x8_t, int16x8_t, int16_t)
27434      _Form of expected instruction(s):_ `vmla.i16 Q0, Q0, D0[0]'
27436    * uint64x2_t vmlal_n_u32 (uint64x2_t, uint32x2_t, uint32_t)
27437      _Form of expected instruction(s):_ `vmlal.u32 Q0, D0, D0[0]'
27439    * uint32x4_t vmlal_n_u16 (uint32x4_t, uint16x4_t, uint16_t)
27440      _Form of expected instruction(s):_ `vmlal.u16 Q0, D0, D0[0]'
27442    * int64x2_t vmlal_n_s32 (int64x2_t, int32x2_t, int32_t)
27443      _Form of expected instruction(s):_ `vmlal.s32 Q0, D0, D0[0]'
27445    * int32x4_t vmlal_n_s16 (int32x4_t, int16x4_t, int16_t)
27446      _Form of expected instruction(s):_ `vmlal.s16 Q0, D0, D0[0]'
27448    * int64x2_t vqdmlal_n_s32 (int64x2_t, int32x2_t, int32_t)
27449      _Form of expected instruction(s):_ `vqdmlal.s32 Q0, D0, D0[0]'
27451    * int32x4_t vqdmlal_n_s16 (int32x4_t, int16x4_t, int16_t)
27452      _Form of expected instruction(s):_ `vqdmlal.s16 Q0, D0, D0[0]'
27454 5.50.3.61 Vector multiply-subtract by scalar
27455 ............................................
27457    * float32x2_t vmls_n_f32 (float32x2_t, float32x2_t, float32_t)
27458      _Form of expected instruction(s):_ `vmls.f32 D0, D0, D0[0]'
27460    * uint32x2_t vmls_n_u32 (uint32x2_t, uint32x2_t, uint32_t)
27461      _Form of expected instruction(s):_ `vmls.i32 D0, D0, D0[0]'
27463    * uint16x4_t vmls_n_u16 (uint16x4_t, uint16x4_t, uint16_t)
27464      _Form of expected instruction(s):_ `vmls.i16 D0, D0, D0[0]'
27466    * int32x2_t vmls_n_s32 (int32x2_t, int32x2_t, int32_t)
27467      _Form of expected instruction(s):_ `vmls.i32 D0, D0, D0[0]'
27469    * int16x4_t vmls_n_s16 (int16x4_t, int16x4_t, int16_t)
27470      _Form of expected instruction(s):_ `vmls.i16 D0, D0, D0[0]'
27472    * float32x4_t vmlsq_n_f32 (float32x4_t, float32x4_t, float32_t)
27473      _Form of expected instruction(s):_ `vmls.f32 Q0, Q0, D0[0]'
27475    * uint32x4_t vmlsq_n_u32 (uint32x4_t, uint32x4_t, uint32_t)
27476      _Form of expected instruction(s):_ `vmls.i32 Q0, Q0, D0[0]'
27478    * uint16x8_t vmlsq_n_u16 (uint16x8_t, uint16x8_t, uint16_t)
27479      _Form of expected instruction(s):_ `vmls.i16 Q0, Q0, D0[0]'
27481    * int32x4_t vmlsq_n_s32 (int32x4_t, int32x4_t, int32_t)
27482      _Form of expected instruction(s):_ `vmls.i32 Q0, Q0, D0[0]'
27484    * int16x8_t vmlsq_n_s16 (int16x8_t, int16x8_t, int16_t)
27485      _Form of expected instruction(s):_ `vmls.i16 Q0, Q0, D0[0]'
27487    * uint64x2_t vmlsl_n_u32 (uint64x2_t, uint32x2_t, uint32_t)
27488      _Form of expected instruction(s):_ `vmlsl.u32 Q0, D0, D0[0]'
27490    * uint32x4_t vmlsl_n_u16 (uint32x4_t, uint16x4_t, uint16_t)
27491      _Form of expected instruction(s):_ `vmlsl.u16 Q0, D0, D0[0]'
27493    * int64x2_t vmlsl_n_s32 (int64x2_t, int32x2_t, int32_t)
27494      _Form of expected instruction(s):_ `vmlsl.s32 Q0, D0, D0[0]'
27496    * int32x4_t vmlsl_n_s16 (int32x4_t, int16x4_t, int16_t)
27497      _Form of expected instruction(s):_ `vmlsl.s16 Q0, D0, D0[0]'
27499    * int64x2_t vqdmlsl_n_s32 (int64x2_t, int32x2_t, int32_t)
27500      _Form of expected instruction(s):_ `vqdmlsl.s32 Q0, D0, D0[0]'
27502    * int32x4_t vqdmlsl_n_s16 (int32x4_t, int16x4_t, int16_t)
27503      _Form of expected instruction(s):_ `vqdmlsl.s16 Q0, D0, D0[0]'
27505 5.50.3.62 Vector extract
27506 ........................
27508    * uint32x2_t vext_u32 (uint32x2_t, uint32x2_t, const int)
27509      _Form of expected instruction(s):_ `vext.32 D0, D0, D0, #0'
27511    * uint16x4_t vext_u16 (uint16x4_t, uint16x4_t, const int)
27512      _Form of expected instruction(s):_ `vext.16 D0, D0, D0, #0'
27514    * uint8x8_t vext_u8 (uint8x8_t, uint8x8_t, const int)
27515      _Form of expected instruction(s):_ `vext.8 D0, D0, D0, #0'
27517    * int32x2_t vext_s32 (int32x2_t, int32x2_t, const int)
27518      _Form of expected instruction(s):_ `vext.32 D0, D0, D0, #0'
27520    * int16x4_t vext_s16 (int16x4_t, int16x4_t, const int)
27521      _Form of expected instruction(s):_ `vext.16 D0, D0, D0, #0'
27523    * int8x8_t vext_s8 (int8x8_t, int8x8_t, const int)
27524      _Form of expected instruction(s):_ `vext.8 D0, D0, D0, #0'
27526    * uint64x1_t vext_u64 (uint64x1_t, uint64x1_t, const int)
27527      _Form of expected instruction(s):_ `vext.64 D0, D0, D0, #0'
27529    * int64x1_t vext_s64 (int64x1_t, int64x1_t, const int)
27530      _Form of expected instruction(s):_ `vext.64 D0, D0, D0, #0'
27532    * float32x2_t vext_f32 (float32x2_t, float32x2_t, const int)
27533      _Form of expected instruction(s):_ `vext.32 D0, D0, D0, #0'
27535    * poly16x4_t vext_p16 (poly16x4_t, poly16x4_t, const int)
27536      _Form of expected instruction(s):_ `vext.16 D0, D0, D0, #0'
27538    * poly8x8_t vext_p8 (poly8x8_t, poly8x8_t, const int)
27539      _Form of expected instruction(s):_ `vext.8 D0, D0, D0, #0'
27541    * uint32x4_t vextq_u32 (uint32x4_t, uint32x4_t, const int)
27542      _Form of expected instruction(s):_ `vext.32 Q0, Q0, Q0, #0'
27544    * uint16x8_t vextq_u16 (uint16x8_t, uint16x8_t, const int)
27545      _Form of expected instruction(s):_ `vext.16 Q0, Q0, Q0, #0'
27547    * uint8x16_t vextq_u8 (uint8x16_t, uint8x16_t, const int)
27548      _Form of expected instruction(s):_ `vext.8 Q0, Q0, Q0, #0'
27550    * int32x4_t vextq_s32 (int32x4_t, int32x4_t, const int)
27551      _Form of expected instruction(s):_ `vext.32 Q0, Q0, Q0, #0'
27553    * int16x8_t vextq_s16 (int16x8_t, int16x8_t, const int)
27554      _Form of expected instruction(s):_ `vext.16 Q0, Q0, Q0, #0'
27556    * int8x16_t vextq_s8 (int8x16_t, int8x16_t, const int)
27557      _Form of expected instruction(s):_ `vext.8 Q0, Q0, Q0, #0'
27559    * uint64x2_t vextq_u64 (uint64x2_t, uint64x2_t, const int)
27560      _Form of expected instruction(s):_ `vext.64 Q0, Q0, Q0, #0'
27562    * int64x2_t vextq_s64 (int64x2_t, int64x2_t, const int)
27563      _Form of expected instruction(s):_ `vext.64 Q0, Q0, Q0, #0'
27565    * float32x4_t vextq_f32 (float32x4_t, float32x4_t, const int)
27566      _Form of expected instruction(s):_ `vext.32 Q0, Q0, Q0, #0'
27568    * poly16x8_t vextq_p16 (poly16x8_t, poly16x8_t, const int)
27569      _Form of expected instruction(s):_ `vext.16 Q0, Q0, Q0, #0'
27571    * poly8x16_t vextq_p8 (poly8x16_t, poly8x16_t, const int)
27572      _Form of expected instruction(s):_ `vext.8 Q0, Q0, Q0, #0'
27574 5.50.3.63 Reverse elements
27575 ..........................
27577    * uint32x2_t vrev64_u32 (uint32x2_t)
27578      _Form of expected instruction(s):_ `vrev64.32 D0, D0'
27580    * uint16x4_t vrev64_u16 (uint16x4_t)
27581      _Form of expected instruction(s):_ `vrev64.16 D0, D0'
27583    * uint8x8_t vrev64_u8 (uint8x8_t)
27584      _Form of expected instruction(s):_ `vrev64.8 D0, D0'
27586    * int32x2_t vrev64_s32 (int32x2_t)
27587      _Form of expected instruction(s):_ `vrev64.32 D0, D0'
27589    * int16x4_t vrev64_s16 (int16x4_t)
27590      _Form of expected instruction(s):_ `vrev64.16 D0, D0'
27592    * int8x8_t vrev64_s8 (int8x8_t)
27593      _Form of expected instruction(s):_ `vrev64.8 D0, D0'
27595    * float32x2_t vrev64_f32 (float32x2_t)
27596      _Form of expected instruction(s):_ `vrev64.32 D0, D0'
27598    * poly16x4_t vrev64_p16 (poly16x4_t)
27599      _Form of expected instruction(s):_ `vrev64.16 D0, D0'
27601    * poly8x8_t vrev64_p8 (poly8x8_t)
27602      _Form of expected instruction(s):_ `vrev64.8 D0, D0'
27604    * uint32x4_t vrev64q_u32 (uint32x4_t)
27605      _Form of expected instruction(s):_ `vrev64.32 Q0, Q0'
27607    * uint16x8_t vrev64q_u16 (uint16x8_t)
27608      _Form of expected instruction(s):_ `vrev64.16 Q0, Q0'
27610    * uint8x16_t vrev64q_u8 (uint8x16_t)
27611      _Form of expected instruction(s):_ `vrev64.8 Q0, Q0'
27613    * int32x4_t vrev64q_s32 (int32x4_t)
27614      _Form of expected instruction(s):_ `vrev64.32 Q0, Q0'
27616    * int16x8_t vrev64q_s16 (int16x8_t)
27617      _Form of expected instruction(s):_ `vrev64.16 Q0, Q0'
27619    * int8x16_t vrev64q_s8 (int8x16_t)
27620      _Form of expected instruction(s):_ `vrev64.8 Q0, Q0'
27622    * float32x4_t vrev64q_f32 (float32x4_t)
27623      _Form of expected instruction(s):_ `vrev64.32 Q0, Q0'
27625    * poly16x8_t vrev64q_p16 (poly16x8_t)
27626      _Form of expected instruction(s):_ `vrev64.16 Q0, Q0'
27628    * poly8x16_t vrev64q_p8 (poly8x16_t)
27629      _Form of expected instruction(s):_ `vrev64.8 Q0, Q0'
27631    * uint16x4_t vrev32_u16 (uint16x4_t)
27632      _Form of expected instruction(s):_ `vrev32.16 D0, D0'
27634    * int16x4_t vrev32_s16 (int16x4_t)
27635      _Form of expected instruction(s):_ `vrev32.16 D0, D0'
27637    * uint8x8_t vrev32_u8 (uint8x8_t)
27638      _Form of expected instruction(s):_ `vrev32.8 D0, D0'
27640    * int8x8_t vrev32_s8 (int8x8_t)
27641      _Form of expected instruction(s):_ `vrev32.8 D0, D0'
27643    * poly16x4_t vrev32_p16 (poly16x4_t)
27644      _Form of expected instruction(s):_ `vrev32.16 D0, D0'
27646    * poly8x8_t vrev32_p8 (poly8x8_t)
27647      _Form of expected instruction(s):_ `vrev32.8 D0, D0'
27649    * uint16x8_t vrev32q_u16 (uint16x8_t)
27650      _Form of expected instruction(s):_ `vrev32.16 Q0, Q0'
27652    * int16x8_t vrev32q_s16 (int16x8_t)
27653      _Form of expected instruction(s):_ `vrev32.16 Q0, Q0'
27655    * uint8x16_t vrev32q_u8 (uint8x16_t)
27656      _Form of expected instruction(s):_ `vrev32.8 Q0, Q0'
27658    * int8x16_t vrev32q_s8 (int8x16_t)
27659      _Form of expected instruction(s):_ `vrev32.8 Q0, Q0'
27661    * poly16x8_t vrev32q_p16 (poly16x8_t)
27662      _Form of expected instruction(s):_ `vrev32.16 Q0, Q0'
27664    * poly8x16_t vrev32q_p8 (poly8x16_t)
27665      _Form of expected instruction(s):_ `vrev32.8 Q0, Q0'
27667    * uint8x8_t vrev16_u8 (uint8x8_t)
27668      _Form of expected instruction(s):_ `vrev16.8 D0, D0'
27670    * int8x8_t vrev16_s8 (int8x8_t)
27671      _Form of expected instruction(s):_ `vrev16.8 D0, D0'
27673    * poly8x8_t vrev16_p8 (poly8x8_t)
27674      _Form of expected instruction(s):_ `vrev16.8 D0, D0'
27676    * uint8x16_t vrev16q_u8 (uint8x16_t)
27677      _Form of expected instruction(s):_ `vrev16.8 Q0, Q0'
27679    * int8x16_t vrev16q_s8 (int8x16_t)
27680      _Form of expected instruction(s):_ `vrev16.8 Q0, Q0'
27682    * poly8x16_t vrev16q_p8 (poly8x16_t)
27683      _Form of expected instruction(s):_ `vrev16.8 Q0, Q0'
27685 5.50.3.64 Bit selection
27686 .......................
27688    * uint32x2_t vbsl_u32 (uint32x2_t, uint32x2_t, uint32x2_t)
27689      _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit
27690      D0, D0, D0' _or_ `vbif D0, D0, D0'
27692    * uint16x4_t vbsl_u16 (uint16x4_t, uint16x4_t, uint16x4_t)
27693      _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit
27694      D0, D0, D0' _or_ `vbif D0, D0, D0'
27696    * uint8x8_t vbsl_u8 (uint8x8_t, uint8x8_t, uint8x8_t)
27697      _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit
27698      D0, D0, D0' _or_ `vbif D0, D0, D0'
27700    * int32x2_t vbsl_s32 (uint32x2_t, int32x2_t, int32x2_t)
27701      _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit
27702      D0, D0, D0' _or_ `vbif D0, D0, D0'
27704    * int16x4_t vbsl_s16 (uint16x4_t, int16x4_t, int16x4_t)
27705      _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit
27706      D0, D0, D0' _or_ `vbif D0, D0, D0'
27708    * int8x8_t vbsl_s8 (uint8x8_t, int8x8_t, int8x8_t)
27709      _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit
27710      D0, D0, D0' _or_ `vbif D0, D0, D0'
27712    * uint64x1_t vbsl_u64 (uint64x1_t, uint64x1_t, uint64x1_t)
27713      _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit
27714      D0, D0, D0' _or_ `vbif D0, D0, D0'
27716    * int64x1_t vbsl_s64 (uint64x1_t, int64x1_t, int64x1_t)
27717      _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit
27718      D0, D0, D0' _or_ `vbif D0, D0, D0'
27720    * float32x2_t vbsl_f32 (uint32x2_t, float32x2_t, float32x2_t)
27721      _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit
27722      D0, D0, D0' _or_ `vbif D0, D0, D0'
27724    * poly16x4_t vbsl_p16 (uint16x4_t, poly16x4_t, poly16x4_t)
27725      _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit
27726      D0, D0, D0' _or_ `vbif D0, D0, D0'
27728    * poly8x8_t vbsl_p8 (uint8x8_t, poly8x8_t, poly8x8_t)
27729      _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit
27730      D0, D0, D0' _or_ `vbif D0, D0, D0'
27732    * uint32x4_t vbslq_u32 (uint32x4_t, uint32x4_t, uint32x4_t)
27733      _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit
27734      Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0'
27736    * uint16x8_t vbslq_u16 (uint16x8_t, uint16x8_t, uint16x8_t)
27737      _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit
27738      Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0'
27740    * uint8x16_t vbslq_u8 (uint8x16_t, uint8x16_t, uint8x16_t)
27741      _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit
27742      Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0'
27744    * int32x4_t vbslq_s32 (uint32x4_t, int32x4_t, int32x4_t)
27745      _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit
27746      Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0'
27748    * int16x8_t vbslq_s16 (uint16x8_t, int16x8_t, int16x8_t)
27749      _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit
27750      Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0'
27752    * int8x16_t vbslq_s8 (uint8x16_t, int8x16_t, int8x16_t)
27753      _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit
27754      Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0'
27756    * uint64x2_t vbslq_u64 (uint64x2_t, uint64x2_t, uint64x2_t)
27757      _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit
27758      Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0'
27760    * int64x2_t vbslq_s64 (uint64x2_t, int64x2_t, int64x2_t)
27761      _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit
27762      Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0'
27764    * float32x4_t vbslq_f32 (uint32x4_t, float32x4_t, float32x4_t)
27765      _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit
27766      Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0'
27768    * poly16x8_t vbslq_p16 (uint16x8_t, poly16x8_t, poly16x8_t)
27769      _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit
27770      Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0'
27772    * poly8x16_t vbslq_p8 (uint8x16_t, poly8x16_t, poly8x16_t)
27773      _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit
27774      Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0'
27776 5.50.3.65 Transpose elements
27777 ............................
27779    * uint32x2x2_t vtrn_u32 (uint32x2_t, uint32x2_t)
27780      _Form of expected instruction(s):_ `vtrn.32 D0, D1'
27782    * uint16x4x2_t vtrn_u16 (uint16x4_t, uint16x4_t)
27783      _Form of expected instruction(s):_ `vtrn.16 D0, D1'
27785    * uint8x8x2_t vtrn_u8 (uint8x8_t, uint8x8_t)
27786      _Form of expected instruction(s):_ `vtrn.8 D0, D1'
27788    * int32x2x2_t vtrn_s32 (int32x2_t, int32x2_t)
27789      _Form of expected instruction(s):_ `vtrn.32 D0, D1'
27791    * int16x4x2_t vtrn_s16 (int16x4_t, int16x4_t)
27792      _Form of expected instruction(s):_ `vtrn.16 D0, D1'
27794    * int8x8x2_t vtrn_s8 (int8x8_t, int8x8_t)
27795      _Form of expected instruction(s):_ `vtrn.8 D0, D1'
27797    * float32x2x2_t vtrn_f32 (float32x2_t, float32x2_t)
27798      _Form of expected instruction(s):_ `vtrn.32 D0, D1'
27800    * poly16x4x2_t vtrn_p16 (poly16x4_t, poly16x4_t)
27801      _Form of expected instruction(s):_ `vtrn.16 D0, D1'
27803    * poly8x8x2_t vtrn_p8 (poly8x8_t, poly8x8_t)
27804      _Form of expected instruction(s):_ `vtrn.8 D0, D1'
27806    * uint32x4x2_t vtrnq_u32 (uint32x4_t, uint32x4_t)
27807      _Form of expected instruction(s):_ `vtrn.32 Q0, Q1'
27809    * uint16x8x2_t vtrnq_u16 (uint16x8_t, uint16x8_t)
27810      _Form of expected instruction(s):_ `vtrn.16 Q0, Q1'
27812    * uint8x16x2_t vtrnq_u8 (uint8x16_t, uint8x16_t)
27813      _Form of expected instruction(s):_ `vtrn.8 Q0, Q1'
27815    * int32x4x2_t vtrnq_s32 (int32x4_t, int32x4_t)
27816      _Form of expected instruction(s):_ `vtrn.32 Q0, Q1'
27818    * int16x8x2_t vtrnq_s16 (int16x8_t, int16x8_t)
27819      _Form of expected instruction(s):_ `vtrn.16 Q0, Q1'
27821    * int8x16x2_t vtrnq_s8 (int8x16_t, int8x16_t)
27822      _Form of expected instruction(s):_ `vtrn.8 Q0, Q1'
27824    * float32x4x2_t vtrnq_f32 (float32x4_t, float32x4_t)
27825      _Form of expected instruction(s):_ `vtrn.32 Q0, Q1'
27827    * poly16x8x2_t vtrnq_p16 (poly16x8_t, poly16x8_t)
27828      _Form of expected instruction(s):_ `vtrn.16 Q0, Q1'
27830    * poly8x16x2_t vtrnq_p8 (poly8x16_t, poly8x16_t)
27831      _Form of expected instruction(s):_ `vtrn.8 Q0, Q1'
27833 5.50.3.66 Zip elements
27834 ......................
27836    * uint32x2x2_t vzip_u32 (uint32x2_t, uint32x2_t)
27837      _Form of expected instruction(s):_ `vzip.32 D0, D1'
27839    * uint16x4x2_t vzip_u16 (uint16x4_t, uint16x4_t)
27840      _Form of expected instruction(s):_ `vzip.16 D0, D1'
27842    * uint8x8x2_t vzip_u8 (uint8x8_t, uint8x8_t)
27843      _Form of expected instruction(s):_ `vzip.8 D0, D1'
27845    * int32x2x2_t vzip_s32 (int32x2_t, int32x2_t)
27846      _Form of expected instruction(s):_ `vzip.32 D0, D1'
27848    * int16x4x2_t vzip_s16 (int16x4_t, int16x4_t)
27849      _Form of expected instruction(s):_ `vzip.16 D0, D1'
27851    * int8x8x2_t vzip_s8 (int8x8_t, int8x8_t)
27852      _Form of expected instruction(s):_ `vzip.8 D0, D1'
27854    * float32x2x2_t vzip_f32 (float32x2_t, float32x2_t)
27855      _Form of expected instruction(s):_ `vzip.32 D0, D1'
27857    * poly16x4x2_t vzip_p16 (poly16x4_t, poly16x4_t)
27858      _Form of expected instruction(s):_ `vzip.16 D0, D1'
27860    * poly8x8x2_t vzip_p8 (poly8x8_t, poly8x8_t)
27861      _Form of expected instruction(s):_ `vzip.8 D0, D1'
27863    * uint32x4x2_t vzipq_u32 (uint32x4_t, uint32x4_t)
27864      _Form of expected instruction(s):_ `vzip.32 Q0, Q1'
27866    * uint16x8x2_t vzipq_u16 (uint16x8_t, uint16x8_t)
27867      _Form of expected instruction(s):_ `vzip.16 Q0, Q1'
27869    * uint8x16x2_t vzipq_u8 (uint8x16_t, uint8x16_t)
27870      _Form of expected instruction(s):_ `vzip.8 Q0, Q1'
27872    * int32x4x2_t vzipq_s32 (int32x4_t, int32x4_t)
27873      _Form of expected instruction(s):_ `vzip.32 Q0, Q1'
27875    * int16x8x2_t vzipq_s16 (int16x8_t, int16x8_t)
27876      _Form of expected instruction(s):_ `vzip.16 Q0, Q1'
27878    * int8x16x2_t vzipq_s8 (int8x16_t, int8x16_t)
27879      _Form of expected instruction(s):_ `vzip.8 Q0, Q1'
27881    * float32x4x2_t vzipq_f32 (float32x4_t, float32x4_t)
27882      _Form of expected instruction(s):_ `vzip.32 Q0, Q1'
27884    * poly16x8x2_t vzipq_p16 (poly16x8_t, poly16x8_t)
27885      _Form of expected instruction(s):_ `vzip.16 Q0, Q1'
27887    * poly8x16x2_t vzipq_p8 (poly8x16_t, poly8x16_t)
27888      _Form of expected instruction(s):_ `vzip.8 Q0, Q1'
27890 5.50.3.67 Unzip elements
27891 ........................
27893    * uint32x2x2_t vuzp_u32 (uint32x2_t, uint32x2_t)
27894      _Form of expected instruction(s):_ `vuzp.32 D0, D1'
27896    * uint16x4x2_t vuzp_u16 (uint16x4_t, uint16x4_t)
27897      _Form of expected instruction(s):_ `vuzp.16 D0, D1'
27899    * uint8x8x2_t vuzp_u8 (uint8x8_t, uint8x8_t)
27900      _Form of expected instruction(s):_ `vuzp.8 D0, D1'
27902    * int32x2x2_t vuzp_s32 (int32x2_t, int32x2_t)
27903      _Form of expected instruction(s):_ `vuzp.32 D0, D1'
27905    * int16x4x2_t vuzp_s16 (int16x4_t, int16x4_t)
27906      _Form of expected instruction(s):_ `vuzp.16 D0, D1'
27908    * int8x8x2_t vuzp_s8 (int8x8_t, int8x8_t)
27909      _Form of expected instruction(s):_ `vuzp.8 D0, D1'
27911    * float32x2x2_t vuzp_f32 (float32x2_t, float32x2_t)
27912      _Form of expected instruction(s):_ `vuzp.32 D0, D1'
27914    * poly16x4x2_t vuzp_p16 (poly16x4_t, poly16x4_t)
27915      _Form of expected instruction(s):_ `vuzp.16 D0, D1'
27917    * poly8x8x2_t vuzp_p8 (poly8x8_t, poly8x8_t)
27918      _Form of expected instruction(s):_ `vuzp.8 D0, D1'
27920    * uint32x4x2_t vuzpq_u32 (uint32x4_t, uint32x4_t)
27921      _Form of expected instruction(s):_ `vuzp.32 Q0, Q1'
27923    * uint16x8x2_t vuzpq_u16 (uint16x8_t, uint16x8_t)
27924      _Form of expected instruction(s):_ `vuzp.16 Q0, Q1'
27926    * uint8x16x2_t vuzpq_u8 (uint8x16_t, uint8x16_t)
27927      _Form of expected instruction(s):_ `vuzp.8 Q0, Q1'
27929    * int32x4x2_t vuzpq_s32 (int32x4_t, int32x4_t)
27930      _Form of expected instruction(s):_ `vuzp.32 Q0, Q1'
27932    * int16x8x2_t vuzpq_s16 (int16x8_t, int16x8_t)
27933      _Form of expected instruction(s):_ `vuzp.16 Q0, Q1'
27935    * int8x16x2_t vuzpq_s8 (int8x16_t, int8x16_t)
27936      _Form of expected instruction(s):_ `vuzp.8 Q0, Q1'
27938    * float32x4x2_t vuzpq_f32 (float32x4_t, float32x4_t)
27939      _Form of expected instruction(s):_ `vuzp.32 Q0, Q1'
27941    * poly16x8x2_t vuzpq_p16 (poly16x8_t, poly16x8_t)
27942      _Form of expected instruction(s):_ `vuzp.16 Q0, Q1'
27944    * poly8x16x2_t vuzpq_p8 (poly8x16_t, poly8x16_t)
27945      _Form of expected instruction(s):_ `vuzp.8 Q0, Q1'
27947 5.50.3.68 Element/structure loads, VLD1 variants
27948 ................................................
27950    * uint32x2_t vld1_u32 (const uint32_t *)
27951      _Form of expected instruction(s):_ `vld1.32 {D0}, [R0]'
27953    * uint16x4_t vld1_u16 (const uint16_t *)
27954      _Form of expected instruction(s):_ `vld1.16 {D0}, [R0]'
27956    * uint8x8_t vld1_u8 (const uint8_t *)
27957      _Form of expected instruction(s):_ `vld1.8 {D0}, [R0]'
27959    * int32x2_t vld1_s32 (const int32_t *)
27960      _Form of expected instruction(s):_ `vld1.32 {D0}, [R0]'
27962    * int16x4_t vld1_s16 (const int16_t *)
27963      _Form of expected instruction(s):_ `vld1.16 {D0}, [R0]'
27965    * int8x8_t vld1_s8 (const int8_t *)
27966      _Form of expected instruction(s):_ `vld1.8 {D0}, [R0]'
27968    * uint64x1_t vld1_u64 (const uint64_t *)
27969      _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]'
27971    * int64x1_t vld1_s64 (const int64_t *)
27972      _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]'
27974    * float32x2_t vld1_f32 (const float32_t *)
27975      _Form of expected instruction(s):_ `vld1.32 {D0}, [R0]'
27977    * poly16x4_t vld1_p16 (const poly16_t *)
27978      _Form of expected instruction(s):_ `vld1.16 {D0}, [R0]'
27980    * poly8x8_t vld1_p8 (const poly8_t *)
27981      _Form of expected instruction(s):_ `vld1.8 {D0}, [R0]'
27983    * uint32x4_t vld1q_u32 (const uint32_t *)
27984      _Form of expected instruction(s):_ `vld1.32 {D0, D1}, [R0]'
27986    * uint16x8_t vld1q_u16 (const uint16_t *)
27987      _Form of expected instruction(s):_ `vld1.16 {D0, D1}, [R0]'
27989    * uint8x16_t vld1q_u8 (const uint8_t *)
27990      _Form of expected instruction(s):_ `vld1.8 {D0, D1}, [R0]'
27992    * int32x4_t vld1q_s32 (const int32_t *)
27993      _Form of expected instruction(s):_ `vld1.32 {D0, D1}, [R0]'
27995    * int16x8_t vld1q_s16 (const int16_t *)
27996      _Form of expected instruction(s):_ `vld1.16 {D0, D1}, [R0]'
27998    * int8x16_t vld1q_s8 (const int8_t *)
27999      _Form of expected instruction(s):_ `vld1.8 {D0, D1}, [R0]'
28001    * uint64x2_t vld1q_u64 (const uint64_t *)
28002      _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]'
28004    * int64x2_t vld1q_s64 (const int64_t *)
28005      _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]'
28007    * float32x4_t vld1q_f32 (const float32_t *)
28008      _Form of expected instruction(s):_ `vld1.32 {D0, D1}, [R0]'
28010    * poly16x8_t vld1q_p16 (const poly16_t *)
28011      _Form of expected instruction(s):_ `vld1.16 {D0, D1}, [R0]'
28013    * poly8x16_t vld1q_p8 (const poly8_t *)
28014      _Form of expected instruction(s):_ `vld1.8 {D0, D1}, [R0]'
28016    * uint32x2_t vld1_lane_u32 (const uint32_t *, uint32x2_t, const int)
28017      _Form of expected instruction(s):_ `vld1.32 {D0[0]}, [R0]'
28019    * uint16x4_t vld1_lane_u16 (const uint16_t *, uint16x4_t, const int)
28020      _Form of expected instruction(s):_ `vld1.16 {D0[0]}, [R0]'
28022    * uint8x8_t vld1_lane_u8 (const uint8_t *, uint8x8_t, const int)
28023      _Form of expected instruction(s):_ `vld1.8 {D0[0]}, [R0]'
28025    * int32x2_t vld1_lane_s32 (const int32_t *, int32x2_t, const int)
28026      _Form of expected instruction(s):_ `vld1.32 {D0[0]}, [R0]'
28028    * int16x4_t vld1_lane_s16 (const int16_t *, int16x4_t, const int)
28029      _Form of expected instruction(s):_ `vld1.16 {D0[0]}, [R0]'
28031    * int8x8_t vld1_lane_s8 (const int8_t *, int8x8_t, const int)
28032      _Form of expected instruction(s):_ `vld1.8 {D0[0]}, [R0]'
28034    * float32x2_t vld1_lane_f32 (const float32_t *, float32x2_t, const
28035      int)
28036      _Form of expected instruction(s):_ `vld1.32 {D0[0]}, [R0]'
28038    * poly16x4_t vld1_lane_p16 (const poly16_t *, poly16x4_t, const int)
28039      _Form of expected instruction(s):_ `vld1.16 {D0[0]}, [R0]'
28041    * poly8x8_t vld1_lane_p8 (const poly8_t *, poly8x8_t, const int)
28042      _Form of expected instruction(s):_ `vld1.8 {D0[0]}, [R0]'
28044    * uint64x1_t vld1_lane_u64 (const uint64_t *, uint64x1_t, const int)
28045      _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]'
28047    * int64x1_t vld1_lane_s64 (const int64_t *, int64x1_t, const int)
28048      _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]'
28050    * uint32x4_t vld1q_lane_u32 (const uint32_t *, uint32x4_t, const int)
28051      _Form of expected instruction(s):_ `vld1.32 {D0[0]}, [R0]'
28053    * uint16x8_t vld1q_lane_u16 (const uint16_t *, uint16x8_t, const int)
28054      _Form of expected instruction(s):_ `vld1.16 {D0[0]}, [R0]'
28056    * uint8x16_t vld1q_lane_u8 (const uint8_t *, uint8x16_t, const int)
28057      _Form of expected instruction(s):_ `vld1.8 {D0[0]}, [R0]'
28059    * int32x4_t vld1q_lane_s32 (const int32_t *, int32x4_t, const int)
28060      _Form of expected instruction(s):_ `vld1.32 {D0[0]}, [R0]'
28062    * int16x8_t vld1q_lane_s16 (const int16_t *, int16x8_t, const int)
28063      _Form of expected instruction(s):_ `vld1.16 {D0[0]}, [R0]'
28065    * int8x16_t vld1q_lane_s8 (const int8_t *, int8x16_t, const int)
28066      _Form of expected instruction(s):_ `vld1.8 {D0[0]}, [R0]'
28068    * float32x4_t vld1q_lane_f32 (const float32_t *, float32x4_t, const
28069      int)
28070      _Form of expected instruction(s):_ `vld1.32 {D0[0]}, [R0]'
28072    * poly16x8_t vld1q_lane_p16 (const poly16_t *, poly16x8_t, const int)
28073      _Form of expected instruction(s):_ `vld1.16 {D0[0]}, [R0]'
28075    * poly8x16_t vld1q_lane_p8 (const poly8_t *, poly8x16_t, const int)
28076      _Form of expected instruction(s):_ `vld1.8 {D0[0]}, [R0]'
28078    * uint64x2_t vld1q_lane_u64 (const uint64_t *, uint64x2_t, const int)
28079      _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]'
28081    * int64x2_t vld1q_lane_s64 (const int64_t *, int64x2_t, const int)
28082      _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]'
28084    * uint32x2_t vld1_dup_u32 (const uint32_t *)
28085      _Form of expected instruction(s):_ `vld1.32 {D0[]}, [R0]'
28087    * uint16x4_t vld1_dup_u16 (const uint16_t *)
28088      _Form of expected instruction(s):_ `vld1.16 {D0[]}, [R0]'
28090    * uint8x8_t vld1_dup_u8 (const uint8_t *)
28091      _Form of expected instruction(s):_ `vld1.8 {D0[]}, [R0]'
28093    * int32x2_t vld1_dup_s32 (const int32_t *)
28094      _Form of expected instruction(s):_ `vld1.32 {D0[]}, [R0]'
28096    * int16x4_t vld1_dup_s16 (const int16_t *)
28097      _Form of expected instruction(s):_ `vld1.16 {D0[]}, [R0]'
28099    * int8x8_t vld1_dup_s8 (const int8_t *)
28100      _Form of expected instruction(s):_ `vld1.8 {D0[]}, [R0]'
28102    * float32x2_t vld1_dup_f32 (const float32_t *)
28103      _Form of expected instruction(s):_ `vld1.32 {D0[]}, [R0]'
28105    * poly16x4_t vld1_dup_p16 (const poly16_t *)
28106      _Form of expected instruction(s):_ `vld1.16 {D0[]}, [R0]'
28108    * poly8x8_t vld1_dup_p8 (const poly8_t *)
28109      _Form of expected instruction(s):_ `vld1.8 {D0[]}, [R0]'
28111    * uint64x1_t vld1_dup_u64 (const uint64_t *)
28112      _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]'
28114    * int64x1_t vld1_dup_s64 (const int64_t *)
28115      _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]'
28117    * uint32x4_t vld1q_dup_u32 (const uint32_t *)
28118      _Form of expected instruction(s):_ `vld1.32 {D0[], D1[]}, [R0]'
28120    * uint16x8_t vld1q_dup_u16 (const uint16_t *)
28121      _Form of expected instruction(s):_ `vld1.16 {D0[], D1[]}, [R0]'
28123    * uint8x16_t vld1q_dup_u8 (const uint8_t *)
28124      _Form of expected instruction(s):_ `vld1.8 {D0[], D1[]}, [R0]'
28126    * int32x4_t vld1q_dup_s32 (const int32_t *)
28127      _Form of expected instruction(s):_ `vld1.32 {D0[], D1[]}, [R0]'
28129    * int16x8_t vld1q_dup_s16 (const int16_t *)
28130      _Form of expected instruction(s):_ `vld1.16 {D0[], D1[]}, [R0]'
28132    * int8x16_t vld1q_dup_s8 (const int8_t *)
28133      _Form of expected instruction(s):_ `vld1.8 {D0[], D1[]}, [R0]'
28135    * float32x4_t vld1q_dup_f32 (const float32_t *)
28136      _Form of expected instruction(s):_ `vld1.32 {D0[], D1[]}, [R0]'
28138    * poly16x8_t vld1q_dup_p16 (const poly16_t *)
28139      _Form of expected instruction(s):_ `vld1.16 {D0[], D1[]}, [R0]'
28141    * poly8x16_t vld1q_dup_p8 (const poly8_t *)
28142      _Form of expected instruction(s):_ `vld1.8 {D0[], D1[]}, [R0]'
28144    * uint64x2_t vld1q_dup_u64 (const uint64_t *)
28145      _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]'
28147    * int64x2_t vld1q_dup_s64 (const int64_t *)
28148      _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]'
28150 5.50.3.69 Element/structure stores, VST1 variants
28151 .................................................
28153    * void vst1_u32 (uint32_t *, uint32x2_t)
28154      _Form of expected instruction(s):_ `vst1.32 {D0}, [R0]'
28156    * void vst1_u16 (uint16_t *, uint16x4_t)
28157      _Form of expected instruction(s):_ `vst1.16 {D0}, [R0]'
28159    * void vst1_u8 (uint8_t *, uint8x8_t)
28160      _Form of expected instruction(s):_ `vst1.8 {D0}, [R0]'
28162    * void vst1_s32 (int32_t *, int32x2_t)
28163      _Form of expected instruction(s):_ `vst1.32 {D0}, [R0]'
28165    * void vst1_s16 (int16_t *, int16x4_t)
28166      _Form of expected instruction(s):_ `vst1.16 {D0}, [R0]'
28168    * void vst1_s8 (int8_t *, int8x8_t)
28169      _Form of expected instruction(s):_ `vst1.8 {D0}, [R0]'
28171    * void vst1_u64 (uint64_t *, uint64x1_t)
28172      _Form of expected instruction(s):_ `vst1.64 {D0}, [R0]'
28174    * void vst1_s64 (int64_t *, int64x1_t)
28175      _Form of expected instruction(s):_ `vst1.64 {D0}, [R0]'
28177    * void vst1_f32 (float32_t *, float32x2_t)
28178      _Form of expected instruction(s):_ `vst1.32 {D0}, [R0]'
28180    * void vst1_p16 (poly16_t *, poly16x4_t)
28181      _Form of expected instruction(s):_ `vst1.16 {D0}, [R0]'
28183    * void vst1_p8 (poly8_t *, poly8x8_t)
28184      _Form of expected instruction(s):_ `vst1.8 {D0}, [R0]'
28186    * void vst1q_u32 (uint32_t *, uint32x4_t)
28187      _Form of expected instruction(s):_ `vst1.32 {D0, D1}, [R0]'
28189    * void vst1q_u16 (uint16_t *, uint16x8_t)
28190      _Form of expected instruction(s):_ `vst1.16 {D0, D1}, [R0]'
28192    * void vst1q_u8 (uint8_t *, uint8x16_t)
28193      _Form of expected instruction(s):_ `vst1.8 {D0, D1}, [R0]'
28195    * void vst1q_s32 (int32_t *, int32x4_t)
28196      _Form of expected instruction(s):_ `vst1.32 {D0, D1}, [R0]'
28198    * void vst1q_s16 (int16_t *, int16x8_t)
28199      _Form of expected instruction(s):_ `vst1.16 {D0, D1}, [R0]'
28201    * void vst1q_s8 (int8_t *, int8x16_t)
28202      _Form of expected instruction(s):_ `vst1.8 {D0, D1}, [R0]'
28204    * void vst1q_u64 (uint64_t *, uint64x2_t)
28205      _Form of expected instruction(s):_ `vst1.64 {D0, D1}, [R0]'
28207    * void vst1q_s64 (int64_t *, int64x2_t)
28208      _Form of expected instruction(s):_ `vst1.64 {D0, D1}, [R0]'
28210    * void vst1q_f32 (float32_t *, float32x4_t)
28211      _Form of expected instruction(s):_ `vst1.32 {D0, D1}, [R0]'
28213    * void vst1q_p16 (poly16_t *, poly16x8_t)
28214      _Form of expected instruction(s):_ `vst1.16 {D0, D1}, [R0]'
28216    * void vst1q_p8 (poly8_t *, poly8x16_t)
28217      _Form of expected instruction(s):_ `vst1.8 {D0, D1}, [R0]'
28219    * void vst1_lane_u32 (uint32_t *, uint32x2_t, const int)
28220      _Form of expected instruction(s):_ `vst1.32 {D0[0]}, [R0]'
28222    * void vst1_lane_u16 (uint16_t *, uint16x4_t, const int)
28223      _Form of expected instruction(s):_ `vst1.16 {D0[0]}, [R0]'
28225    * void vst1_lane_u8 (uint8_t *, uint8x8_t, const int)
28226      _Form of expected instruction(s):_ `vst1.8 {D0[0]}, [R0]'
28228    * void vst1_lane_s32 (int32_t *, int32x2_t, const int)
28229      _Form of expected instruction(s):_ `vst1.32 {D0[0]}, [R0]'
28231    * void vst1_lane_s16 (int16_t *, int16x4_t, const int)
28232      _Form of expected instruction(s):_ `vst1.16 {D0[0]}, [R0]'
28234    * void vst1_lane_s8 (int8_t *, int8x8_t, const int)
28235      _Form of expected instruction(s):_ `vst1.8 {D0[0]}, [R0]'
28237    * void vst1_lane_f32 (float32_t *, float32x2_t, const int)
28238      _Form of expected instruction(s):_ `vst1.32 {D0[0]}, [R0]'
28240    * void vst1_lane_p16 (poly16_t *, poly16x4_t, const int)
28241      _Form of expected instruction(s):_ `vst1.16 {D0[0]}, [R0]'
28243    * void vst1_lane_p8 (poly8_t *, poly8x8_t, const int)
28244      _Form of expected instruction(s):_ `vst1.8 {D0[0]}, [R0]'
28246    * void vst1_lane_s64 (int64_t *, int64x1_t, const int)
28247      _Form of expected instruction(s):_ `vst1.64 {D0}, [R0]'
28249    * void vst1_lane_u64 (uint64_t *, uint64x1_t, const int)
28250      _Form of expected instruction(s):_ `vst1.64 {D0}, [R0]'
28252    * void vst1q_lane_u32 (uint32_t *, uint32x4_t, const int)
28253      _Form of expected instruction(s):_ `vst1.32 {D0[0]}, [R0]'
28255    * void vst1q_lane_u16 (uint16_t *, uint16x8_t, const int)
28256      _Form of expected instruction(s):_ `vst1.16 {D0[0]}, [R0]'
28258    * void vst1q_lane_u8 (uint8_t *, uint8x16_t, const int)
28259      _Form of expected instruction(s):_ `vst1.8 {D0[0]}, [R0]'
28261    * void vst1q_lane_s32 (int32_t *, int32x4_t, const int)
28262      _Form of expected instruction(s):_ `vst1.32 {D0[0]}, [R0]'
28264    * void vst1q_lane_s16 (int16_t *, int16x8_t, const int)
28265      _Form of expected instruction(s):_ `vst1.16 {D0[0]}, [R0]'
28267    * void vst1q_lane_s8 (int8_t *, int8x16_t, const int)
28268      _Form of expected instruction(s):_ `vst1.8 {D0[0]}, [R0]'
28270    * void vst1q_lane_f32 (float32_t *, float32x4_t, const int)
28271      _Form of expected instruction(s):_ `vst1.32 {D0[0]}, [R0]'
28273    * void vst1q_lane_p16 (poly16_t *, poly16x8_t, const int)
28274      _Form of expected instruction(s):_ `vst1.16 {D0[0]}, [R0]'
28276    * void vst1q_lane_p8 (poly8_t *, poly8x16_t, const int)
28277      _Form of expected instruction(s):_ `vst1.8 {D0[0]}, [R0]'
28279    * void vst1q_lane_s64 (int64_t *, int64x2_t, const int)
28280      _Form of expected instruction(s):_ `vst1.64 {D0}, [R0]'
28282    * void vst1q_lane_u64 (uint64_t *, uint64x2_t, const int)
28283      _Form of expected instruction(s):_ `vst1.64 {D0}, [R0]'
28285 5.50.3.70 Element/structure loads, VLD2 variants
28286 ................................................
28288    * uint32x2x2_t vld2_u32 (const uint32_t *)
28289      _Form of expected instruction(s):_ `vld2.32 {D0, D1}, [R0]'
28291    * uint16x4x2_t vld2_u16 (const uint16_t *)
28292      _Form of expected instruction(s):_ `vld2.16 {D0, D1}, [R0]'
28294    * uint8x8x2_t vld2_u8 (const uint8_t *)
28295      _Form of expected instruction(s):_ `vld2.8 {D0, D1}, [R0]'
28297    * int32x2x2_t vld2_s32 (const int32_t *)
28298      _Form of expected instruction(s):_ `vld2.32 {D0, D1}, [R0]'
28300    * int16x4x2_t vld2_s16 (const int16_t *)
28301      _Form of expected instruction(s):_ `vld2.16 {D0, D1}, [R0]'
28303    * int8x8x2_t vld2_s8 (const int8_t *)
28304      _Form of expected instruction(s):_ `vld2.8 {D0, D1}, [R0]'
28306    * float32x2x2_t vld2_f32 (const float32_t *)
28307      _Form of expected instruction(s):_ `vld2.32 {D0, D1}, [R0]'
28309    * poly16x4x2_t vld2_p16 (const poly16_t *)
28310      _Form of expected instruction(s):_ `vld2.16 {D0, D1}, [R0]'
28312    * poly8x8x2_t vld2_p8 (const poly8_t *)
28313      _Form of expected instruction(s):_ `vld2.8 {D0, D1}, [R0]'
28315    * uint64x1x2_t vld2_u64 (const uint64_t *)
28316      _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]'
28318    * int64x1x2_t vld2_s64 (const int64_t *)
28319      _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]'
28321    * uint32x4x2_t vld2q_u32 (const uint32_t *)
28322      _Form of expected instruction(s):_ `vld2.32 {D0, D1}, [R0]'
28324    * uint16x8x2_t vld2q_u16 (const uint16_t *)
28325      _Form of expected instruction(s):_ `vld2.16 {D0, D1}, [R0]'
28327    * uint8x16x2_t vld2q_u8 (const uint8_t *)
28328      _Form of expected instruction(s):_ `vld2.8 {D0, D1}, [R0]'
28330    * int32x4x2_t vld2q_s32 (const int32_t *)
28331      _Form of expected instruction(s):_ `vld2.32 {D0, D1}, [R0]'
28333    * int16x8x2_t vld2q_s16 (const int16_t *)
28334      _Form of expected instruction(s):_ `vld2.16 {D0, D1}, [R0]'
28336    * int8x16x2_t vld2q_s8 (const int8_t *)
28337      _Form of expected instruction(s):_ `vld2.8 {D0, D1}, [R0]'
28339    * float32x4x2_t vld2q_f32 (const float32_t *)
28340      _Form of expected instruction(s):_ `vld2.32 {D0, D1}, [R0]'
28342    * poly16x8x2_t vld2q_p16 (const poly16_t *)
28343      _Form of expected instruction(s):_ `vld2.16 {D0, D1}, [R0]'
28345    * poly8x16x2_t vld2q_p8 (const poly8_t *)
28346      _Form of expected instruction(s):_ `vld2.8 {D0, D1}, [R0]'
28348    * uint32x2x2_t vld2_lane_u32 (const uint32_t *, uint32x2x2_t, const
28349      int)
28350      _Form of expected instruction(s):_ `vld2.32 {D0[0], D1[0]}, [R0]'
28352    * uint16x4x2_t vld2_lane_u16 (const uint16_t *, uint16x4x2_t, const
28353      int)
28354      _Form of expected instruction(s):_ `vld2.16 {D0[0], D1[0]}, [R0]'
28356    * uint8x8x2_t vld2_lane_u8 (const uint8_t *, uint8x8x2_t, const int)
28357      _Form of expected instruction(s):_ `vld2.8 {D0[0], D1[0]}, [R0]'
28359    * int32x2x2_t vld2_lane_s32 (const int32_t *, int32x2x2_t, const int)
28360      _Form of expected instruction(s):_ `vld2.32 {D0[0], D1[0]}, [R0]'
28362    * int16x4x2_t vld2_lane_s16 (const int16_t *, int16x4x2_t, const int)
28363      _Form of expected instruction(s):_ `vld2.16 {D0[0], D1[0]}, [R0]'
28365    * int8x8x2_t vld2_lane_s8 (const int8_t *, int8x8x2_t, const int)
28366      _Form of expected instruction(s):_ `vld2.8 {D0[0], D1[0]}, [R0]'
28368    * float32x2x2_t vld2_lane_f32 (const float32_t *, float32x2x2_t,
28369      const int)
28370      _Form of expected instruction(s):_ `vld2.32 {D0[0], D1[0]}, [R0]'
28372    * poly16x4x2_t vld2_lane_p16 (const poly16_t *, poly16x4x2_t, const
28373      int)
28374      _Form of expected instruction(s):_ `vld2.16 {D0[0], D1[0]}, [R0]'
28376    * poly8x8x2_t vld2_lane_p8 (const poly8_t *, poly8x8x2_t, const int)
28377      _Form of expected instruction(s):_ `vld2.8 {D0[0], D1[0]}, [R0]'
28379    * int32x4x2_t vld2q_lane_s32 (const int32_t *, int32x4x2_t, const
28380      int)
28381      _Form of expected instruction(s):_ `vld2.32 {D0[0], D1[0]}, [R0]'
28383    * int16x8x2_t vld2q_lane_s16 (const int16_t *, int16x8x2_t, const
28384      int)
28385      _Form of expected instruction(s):_ `vld2.16 {D0[0], D1[0]}, [R0]'
28387    * uint32x4x2_t vld2q_lane_u32 (const uint32_t *, uint32x4x2_t, const
28388      int)
28389      _Form of expected instruction(s):_ `vld2.32 {D0[0], D1[0]}, [R0]'
28391    * uint16x8x2_t vld2q_lane_u16 (const uint16_t *, uint16x8x2_t, const
28392      int)
28393      _Form of expected instruction(s):_ `vld2.16 {D0[0], D1[0]}, [R0]'
28395    * float32x4x2_t vld2q_lane_f32 (const float32_t *, float32x4x2_t,
28396      const int)
28397      _Form of expected instruction(s):_ `vld2.32 {D0[0], D1[0]}, [R0]'
28399    * poly16x8x2_t vld2q_lane_p16 (const poly16_t *, poly16x8x2_t, const
28400      int)
28401      _Form of expected instruction(s):_ `vld2.16 {D0[0], D1[0]}, [R0]'
28403    * uint32x2x2_t vld2_dup_u32 (const uint32_t *)
28404      _Form of expected instruction(s):_ `vld2.32 {D0[], D1[]}, [R0]'
28406    * uint16x4x2_t vld2_dup_u16 (const uint16_t *)
28407      _Form of expected instruction(s):_ `vld2.16 {D0[], D1[]}, [R0]'
28409    * uint8x8x2_t vld2_dup_u8 (const uint8_t *)
28410      _Form of expected instruction(s):_ `vld2.8 {D0[], D1[]}, [R0]'
28412    * int32x2x2_t vld2_dup_s32 (const int32_t *)
28413      _Form of expected instruction(s):_ `vld2.32 {D0[], D1[]}, [R0]'
28415    * int16x4x2_t vld2_dup_s16 (const int16_t *)
28416      _Form of expected instruction(s):_ `vld2.16 {D0[], D1[]}, [R0]'
28418    * int8x8x2_t vld2_dup_s8 (const int8_t *)
28419      _Form of expected instruction(s):_ `vld2.8 {D0[], D1[]}, [R0]'
28421    * float32x2x2_t vld2_dup_f32 (const float32_t *)
28422      _Form of expected instruction(s):_ `vld2.32 {D0[], D1[]}, [R0]'
28424    * poly16x4x2_t vld2_dup_p16 (const poly16_t *)
28425      _Form of expected instruction(s):_ `vld2.16 {D0[], D1[]}, [R0]'
28427    * poly8x8x2_t vld2_dup_p8 (const poly8_t *)
28428      _Form of expected instruction(s):_ `vld2.8 {D0[], D1[]}, [R0]'
28430    * uint64x1x2_t vld2_dup_u64 (const uint64_t *)
28431      _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]'
28433    * int64x1x2_t vld2_dup_s64 (const int64_t *)
28434      _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]'
28436 5.50.3.71 Element/structure stores, VST2 variants
28437 .................................................
28439    * void vst2_u32 (uint32_t *, uint32x2x2_t)
28440      _Form of expected instruction(s):_ `vst2.32 {D0, D1}, [R0]'
28442    * void vst2_u16 (uint16_t *, uint16x4x2_t)
28443      _Form of expected instruction(s):_ `vst2.16 {D0, D1}, [R0]'
28445    * void vst2_u8 (uint8_t *, uint8x8x2_t)
28446      _Form of expected instruction(s):_ `vst2.8 {D0, D1}, [R0]'
28448    * void vst2_s32 (int32_t *, int32x2x2_t)
28449      _Form of expected instruction(s):_ `vst2.32 {D0, D1}, [R0]'
28451    * void vst2_s16 (int16_t *, int16x4x2_t)
28452      _Form of expected instruction(s):_ `vst2.16 {D0, D1}, [R0]'
28454    * void vst2_s8 (int8_t *, int8x8x2_t)
28455      _Form of expected instruction(s):_ `vst2.8 {D0, D1}, [R0]'
28457    * void vst2_f32 (float32_t *, float32x2x2_t)
28458      _Form of expected instruction(s):_ `vst2.32 {D0, D1}, [R0]'
28460    * void vst2_p16 (poly16_t *, poly16x4x2_t)
28461      _Form of expected instruction(s):_ `vst2.16 {D0, D1}, [R0]'
28463    * void vst2_p8 (poly8_t *, poly8x8x2_t)
28464      _Form of expected instruction(s):_ `vst2.8 {D0, D1}, [R0]'
28466    * void vst2_u64 (uint64_t *, uint64x1x2_t)
28467      _Form of expected instruction(s):_ `vst1.64 {D0, D1}, [R0]'
28469    * void vst2_s64 (int64_t *, int64x1x2_t)
28470      _Form of expected instruction(s):_ `vst1.64 {D0, D1}, [R0]'
28472    * void vst2q_u32 (uint32_t *, uint32x4x2_t)
28473      _Form of expected instruction(s):_ `vst2.32 {D0, D1}, [R0]'
28475    * void vst2q_u16 (uint16_t *, uint16x8x2_t)
28476      _Form of expected instruction(s):_ `vst2.16 {D0, D1}, [R0]'
28478    * void vst2q_u8 (uint8_t *, uint8x16x2_t)
28479      _Form of expected instruction(s):_ `vst2.8 {D0, D1}, [R0]'
28481    * void vst2q_s32 (int32_t *, int32x4x2_t)
28482      _Form of expected instruction(s):_ `vst2.32 {D0, D1}, [R0]'
28484    * void vst2q_s16 (int16_t *, int16x8x2_t)
28485      _Form of expected instruction(s):_ `vst2.16 {D0, D1}, [R0]'
28487    * void vst2q_s8 (int8_t *, int8x16x2_t)
28488      _Form of expected instruction(s):_ `vst2.8 {D0, D1}, [R0]'
28490    * void vst2q_f32 (float32_t *, float32x4x2_t)
28491      _Form of expected instruction(s):_ `vst2.32 {D0, D1}, [R0]'
28493    * void vst2q_p16 (poly16_t *, poly16x8x2_t)
28494      _Form of expected instruction(s):_ `vst2.16 {D0, D1}, [R0]'
28496    * void vst2q_p8 (poly8_t *, poly8x16x2_t)
28497      _Form of expected instruction(s):_ `vst2.8 {D0, D1}, [R0]'
28499    * void vst2_lane_u32 (uint32_t *, uint32x2x2_t, const int)
28500      _Form of expected instruction(s):_ `vst2.32 {D0[0], D1[0]}, [R0]'
28502    * void vst2_lane_u16 (uint16_t *, uint16x4x2_t, const int)
28503      _Form of expected instruction(s):_ `vst2.16 {D0[0], D1[0]}, [R0]'
28505    * void vst2_lane_u8 (uint8_t *, uint8x8x2_t, const int)
28506      _Form of expected instruction(s):_ `vst2.8 {D0[0], D1[0]}, [R0]'
28508    * void vst2_lane_s32 (int32_t *, int32x2x2_t, const int)
28509      _Form of expected instruction(s):_ `vst2.32 {D0[0], D1[0]}, [R0]'
28511    * void vst2_lane_s16 (int16_t *, int16x4x2_t, const int)
28512      _Form of expected instruction(s):_ `vst2.16 {D0[0], D1[0]}, [R0]'
28514    * void vst2_lane_s8 (int8_t *, int8x8x2_t, const int)
28515      _Form of expected instruction(s):_ `vst2.8 {D0[0], D1[0]}, [R0]'
28517    * void vst2_lane_f32 (float32_t *, float32x2x2_t, const int)
28518      _Form of expected instruction(s):_ `vst2.32 {D0[0], D1[0]}, [R0]'
28520    * void vst2_lane_p16 (poly16_t *, poly16x4x2_t, const int)
28521      _Form of expected instruction(s):_ `vst2.16 {D0[0], D1[0]}, [R0]'
28523    * void vst2_lane_p8 (poly8_t *, poly8x8x2_t, const int)
28524      _Form of expected instruction(s):_ `vst2.8 {D0[0], D1[0]}, [R0]'
28526    * void vst2q_lane_s32 (int32_t *, int32x4x2_t, const int)
28527      _Form of expected instruction(s):_ `vst2.32 {D0[0], D1[0]}, [R0]'
28529    * void vst2q_lane_s16 (int16_t *, int16x8x2_t, const int)
28530      _Form of expected instruction(s):_ `vst2.16 {D0[0], D1[0]}, [R0]'
28532    * void vst2q_lane_u32 (uint32_t *, uint32x4x2_t, const int)
28533      _Form of expected instruction(s):_ `vst2.32 {D0[0], D1[0]}, [R0]'
28535    * void vst2q_lane_u16 (uint16_t *, uint16x8x2_t, const int)
28536      _Form of expected instruction(s):_ `vst2.16 {D0[0], D1[0]}, [R0]'
28538    * void vst2q_lane_f32 (float32_t *, float32x4x2_t, const int)
28539      _Form of expected instruction(s):_ `vst2.32 {D0[0], D1[0]}, [R0]'
28541    * void vst2q_lane_p16 (poly16_t *, poly16x8x2_t, const int)
28542      _Form of expected instruction(s):_ `vst2.16 {D0[0], D1[0]}, [R0]'
28544 5.50.3.72 Element/structure loads, VLD3 variants
28545 ................................................
28547    * uint32x2x3_t vld3_u32 (const uint32_t *)
28548      _Form of expected instruction(s):_ `vld3.32 {D0, D1, D2}, [R0]'
28550    * uint16x4x3_t vld3_u16 (const uint16_t *)
28551      _Form of expected instruction(s):_ `vld3.16 {D0, D1, D2}, [R0]'
28553    * uint8x8x3_t vld3_u8 (const uint8_t *)
28554      _Form of expected instruction(s):_ `vld3.8 {D0, D1, D2}, [R0]'
28556    * int32x2x3_t vld3_s32 (const int32_t *)
28557      _Form of expected instruction(s):_ `vld3.32 {D0, D1, D2}, [R0]'
28559    * int16x4x3_t vld3_s16 (const int16_t *)
28560      _Form of expected instruction(s):_ `vld3.16 {D0, D1, D2}, [R0]'
28562    * int8x8x3_t vld3_s8 (const int8_t *)
28563      _Form of expected instruction(s):_ `vld3.8 {D0, D1, D2}, [R0]'
28565    * float32x2x3_t vld3_f32 (const float32_t *)
28566      _Form of expected instruction(s):_ `vld3.32 {D0, D1, D2}, [R0]'
28568    * poly16x4x3_t vld3_p16 (const poly16_t *)
28569      _Form of expected instruction(s):_ `vld3.16 {D0, D1, D2}, [R0]'
28571    * poly8x8x3_t vld3_p8 (const poly8_t *)
28572      _Form of expected instruction(s):_ `vld3.8 {D0, D1, D2}, [R0]'
28574    * uint64x1x3_t vld3_u64 (const uint64_t *)
28575      _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2}, [R0]'
28577    * int64x1x3_t vld3_s64 (const int64_t *)
28578      _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2}, [R0]'
28580    * uint32x4x3_t vld3q_u32 (const uint32_t *)
28581      _Form of expected instruction(s):_ `vld3.32 {D0, D1, D2}, [R0]'
28583    * uint16x8x3_t vld3q_u16 (const uint16_t *)
28584      _Form of expected instruction(s):_ `vld3.16 {D0, D1, D2}, [R0]'
28586    * uint8x16x3_t vld3q_u8 (const uint8_t *)
28587      _Form of expected instruction(s):_ `vld3.8 {D0, D1, D2}, [R0]'
28589    * int32x4x3_t vld3q_s32 (const int32_t *)
28590      _Form of expected instruction(s):_ `vld3.32 {D0, D1, D2}, [R0]'
28592    * int16x8x3_t vld3q_s16 (const int16_t *)
28593      _Form of expected instruction(s):_ `vld3.16 {D0, D1, D2}, [R0]'
28595    * int8x16x3_t vld3q_s8 (const int8_t *)
28596      _Form of expected instruction(s):_ `vld3.8 {D0, D1, D2}, [R0]'
28598    * float32x4x3_t vld3q_f32 (const float32_t *)
28599      _Form of expected instruction(s):_ `vld3.32 {D0, D1, D2}, [R0]'
28601    * poly16x8x3_t vld3q_p16 (const poly16_t *)
28602      _Form of expected instruction(s):_ `vld3.16 {D0, D1, D2}, [R0]'
28604    * poly8x16x3_t vld3q_p8 (const poly8_t *)
28605      _Form of expected instruction(s):_ `vld3.8 {D0, D1, D2}, [R0]'
28607    * uint32x2x3_t vld3_lane_u32 (const uint32_t *, uint32x2x3_t, const
28608      int)
28609      _Form of expected instruction(s):_ `vld3.32 {D0[0], D1[0], D2[0]},
28610      [R0]'
28612    * uint16x4x3_t vld3_lane_u16 (const uint16_t *, uint16x4x3_t, const
28613      int)
28614      _Form of expected instruction(s):_ `vld3.16 {D0[0], D1[0], D2[0]},
28615      [R0]'
28617    * uint8x8x3_t vld3_lane_u8 (const uint8_t *, uint8x8x3_t, const int)
28618      _Form of expected instruction(s):_ `vld3.8 {D0[0], D1[0], D2[0]},
28619      [R0]'
28621    * int32x2x3_t vld3_lane_s32 (const int32_t *, int32x2x3_t, const int)
28622      _Form of expected instruction(s):_ `vld3.32 {D0[0], D1[0], D2[0]},
28623      [R0]'
28625    * int16x4x3_t vld3_lane_s16 (const int16_t *, int16x4x3_t, const int)
28626      _Form of expected instruction(s):_ `vld3.16 {D0[0], D1[0], D2[0]},
28627      [R0]'
28629    * int8x8x3_t vld3_lane_s8 (const int8_t *, int8x8x3_t, const int)
28630      _Form of expected instruction(s):_ `vld3.8 {D0[0], D1[0], D2[0]},
28631      [R0]'
28633    * float32x2x3_t vld3_lane_f32 (const float32_t *, float32x2x3_t,
28634      const int)
28635      _Form of expected instruction(s):_ `vld3.32 {D0[0], D1[0], D2[0]},
28636      [R0]'
28638    * poly16x4x3_t vld3_lane_p16 (const poly16_t *, poly16x4x3_t, const
28639      int)
28640      _Form of expected instruction(s):_ `vld3.16 {D0[0], D1[0], D2[0]},
28641      [R0]'
28643    * poly8x8x3_t vld3_lane_p8 (const poly8_t *, poly8x8x3_t, const int)
28644      _Form of expected instruction(s):_ `vld3.8 {D0[0], D1[0], D2[0]},
28645      [R0]'
28647    * int32x4x3_t vld3q_lane_s32 (const int32_t *, int32x4x3_t, const
28648      int)
28649      _Form of expected instruction(s):_ `vld3.32 {D0[0], D1[0], D2[0]},
28650      [R0]'
28652    * int16x8x3_t vld3q_lane_s16 (const int16_t *, int16x8x3_t, const
28653      int)
28654      _Form of expected instruction(s):_ `vld3.16 {D0[0], D1[0], D2[0]},
28655      [R0]'
28657    * uint32x4x3_t vld3q_lane_u32 (const uint32_t *, uint32x4x3_t, const
28658      int)
28659      _Form of expected instruction(s):_ `vld3.32 {D0[0], D1[0], D2[0]},
28660      [R0]'
28662    * uint16x8x3_t vld3q_lane_u16 (const uint16_t *, uint16x8x3_t, const
28663      int)
28664      _Form of expected instruction(s):_ `vld3.16 {D0[0], D1[0], D2[0]},
28665      [R0]'
28667    * float32x4x3_t vld3q_lane_f32 (const float32_t *, float32x4x3_t,
28668      const int)
28669      _Form of expected instruction(s):_ `vld3.32 {D0[0], D1[0], D2[0]},
28670      [R0]'
28672    * poly16x8x3_t vld3q_lane_p16 (const poly16_t *, poly16x8x3_t, const
28673      int)
28674      _Form of expected instruction(s):_ `vld3.16 {D0[0], D1[0], D2[0]},
28675      [R0]'
28677    * uint32x2x3_t vld3_dup_u32 (const uint32_t *)
28678      _Form of expected instruction(s):_ `vld3.32 {D0[], D1[], D2[]},
28679      [R0]'
28681    * uint16x4x3_t vld3_dup_u16 (const uint16_t *)
28682      _Form of expected instruction(s):_ `vld3.16 {D0[], D1[], D2[]},
28683      [R0]'
28685    * uint8x8x3_t vld3_dup_u8 (const uint8_t *)
28686      _Form of expected instruction(s):_ `vld3.8 {D0[], D1[], D2[]},
28687      [R0]'
28689    * int32x2x3_t vld3_dup_s32 (const int32_t *)
28690      _Form of expected instruction(s):_ `vld3.32 {D0[], D1[], D2[]},
28691      [R0]'
28693    * int16x4x3_t vld3_dup_s16 (const int16_t *)
28694      _Form of expected instruction(s):_ `vld3.16 {D0[], D1[], D2[]},
28695      [R0]'
28697    * int8x8x3_t vld3_dup_s8 (const int8_t *)
28698      _Form of expected instruction(s):_ `vld3.8 {D0[], D1[], D2[]},
28699      [R0]'
28701    * float32x2x3_t vld3_dup_f32 (const float32_t *)
28702      _Form of expected instruction(s):_ `vld3.32 {D0[], D1[], D2[]},
28703      [R0]'
28705    * poly16x4x3_t vld3_dup_p16 (const poly16_t *)
28706      _Form of expected instruction(s):_ `vld3.16 {D0[], D1[], D2[]},
28707      [R0]'
28709    * poly8x8x3_t vld3_dup_p8 (const poly8_t *)
28710      _Form of expected instruction(s):_ `vld3.8 {D0[], D1[], D2[]},
28711      [R0]'
28713    * uint64x1x3_t vld3_dup_u64 (const uint64_t *)
28714      _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2}, [R0]'
28716    * int64x1x3_t vld3_dup_s64 (const int64_t *)
28717      _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2}, [R0]'
28719 5.50.3.73 Element/structure stores, VST3 variants
28720 .................................................
28722    * void vst3_u32 (uint32_t *, uint32x2x3_t)
28723      _Form of expected instruction(s):_ `vst3.32 {D0, D1, D2, D3}, [R0]'
28725    * void vst3_u16 (uint16_t *, uint16x4x3_t)
28726      _Form of expected instruction(s):_ `vst3.16 {D0, D1, D2, D3}, [R0]'
28728    * void vst3_u8 (uint8_t *, uint8x8x3_t)
28729      _Form of expected instruction(s):_ `vst3.8 {D0, D1, D2, D3}, [R0]'
28731    * void vst3_s32 (int32_t *, int32x2x3_t)
28732      _Form of expected instruction(s):_ `vst3.32 {D0, D1, D2, D3}, [R0]'
28734    * void vst3_s16 (int16_t *, int16x4x3_t)
28735      _Form of expected instruction(s):_ `vst3.16 {D0, D1, D2, D3}, [R0]'
28737    * void vst3_s8 (int8_t *, int8x8x3_t)
28738      _Form of expected instruction(s):_ `vst3.8 {D0, D1, D2, D3}, [R0]'
28740    * void vst3_f32 (float32_t *, float32x2x3_t)
28741      _Form of expected instruction(s):_ `vst3.32 {D0, D1, D2, D3}, [R0]'
28743    * void vst3_p16 (poly16_t *, poly16x4x3_t)
28744      _Form of expected instruction(s):_ `vst3.16 {D0, D1, D2, D3}, [R0]'
28746    * void vst3_p8 (poly8_t *, poly8x8x3_t)
28747      _Form of expected instruction(s):_ `vst3.8 {D0, D1, D2, D3}, [R0]'
28749    * void vst3_u64 (uint64_t *, uint64x1x3_t)
28750      _Form of expected instruction(s):_ `vst1.64 {D0, D1, D2, D3}, [R0]'
28752    * void vst3_s64 (int64_t *, int64x1x3_t)
28753      _Form of expected instruction(s):_ `vst1.64 {D0, D1, D2, D3}, [R0]'
28755    * void vst3q_u32 (uint32_t *, uint32x4x3_t)
28756      _Form of expected instruction(s):_ `vst3.32 {D0, D1, D2}, [R0]'
28758    * void vst3q_u16 (uint16_t *, uint16x8x3_t)
28759      _Form of expected instruction(s):_ `vst3.16 {D0, D1, D2}, [R0]'
28761    * void vst3q_u8 (uint8_t *, uint8x16x3_t)
28762      _Form of expected instruction(s):_ `vst3.8 {D0, D1, D2}, [R0]'
28764    * void vst3q_s32 (int32_t *, int32x4x3_t)
28765      _Form of expected instruction(s):_ `vst3.32 {D0, D1, D2}, [R0]'
28767    * void vst3q_s16 (int16_t *, int16x8x3_t)
28768      _Form of expected instruction(s):_ `vst3.16 {D0, D1, D2}, [R0]'
28770    * void vst3q_s8 (int8_t *, int8x16x3_t)
28771      _Form of expected instruction(s):_ `vst3.8 {D0, D1, D2}, [R0]'
28773    * void vst3q_f32 (float32_t *, float32x4x3_t)
28774      _Form of expected instruction(s):_ `vst3.32 {D0, D1, D2}, [R0]'
28776    * void vst3q_p16 (poly16_t *, poly16x8x3_t)
28777      _Form of expected instruction(s):_ `vst3.16 {D0, D1, D2}, [R0]'
28779    * void vst3q_p8 (poly8_t *, poly8x16x3_t)
28780      _Form of expected instruction(s):_ `vst3.8 {D0, D1, D2}, [R0]'
28782    * void vst3_lane_u32 (uint32_t *, uint32x2x3_t, const int)
28783      _Form of expected instruction(s):_ `vst3.32 {D0[0], D1[0], D2[0]},
28784      [R0]'
28786    * void vst3_lane_u16 (uint16_t *, uint16x4x3_t, const int)
28787      _Form of expected instruction(s):_ `vst3.16 {D0[0], D1[0], D2[0]},
28788      [R0]'
28790    * void vst3_lane_u8 (uint8_t *, uint8x8x3_t, const int)
28791      _Form of expected instruction(s):_ `vst3.8 {D0[0], D1[0], D2[0]},
28792      [R0]'
28794    * void vst3_lane_s32 (int32_t *, int32x2x3_t, const int)
28795      _Form of expected instruction(s):_ `vst3.32 {D0[0], D1[0], D2[0]},
28796      [R0]'
28798    * void vst3_lane_s16 (int16_t *, int16x4x3_t, const int)
28799      _Form of expected instruction(s):_ `vst3.16 {D0[0], D1[0], D2[0]},
28800      [R0]'
28802    * void vst3_lane_s8 (int8_t *, int8x8x3_t, const int)
28803      _Form of expected instruction(s):_ `vst3.8 {D0[0], D1[0], D2[0]},
28804      [R0]'
28806    * void vst3_lane_f32 (float32_t *, float32x2x3_t, const int)
28807      _Form of expected instruction(s):_ `vst3.32 {D0[0], D1[0], D2[0]},
28808      [R0]'
28810    * void vst3_lane_p16 (poly16_t *, poly16x4x3_t, const int)
28811      _Form of expected instruction(s):_ `vst3.16 {D0[0], D1[0], D2[0]},
28812      [R0]'
28814    * void vst3_lane_p8 (poly8_t *, poly8x8x3_t, const int)
28815      _Form of expected instruction(s):_ `vst3.8 {D0[0], D1[0], D2[0]},
28816      [R0]'
28818    * void vst3q_lane_s32 (int32_t *, int32x4x3_t, const int)
28819      _Form of expected instruction(s):_ `vst3.32 {D0[0], D1[0], D2[0]},
28820      [R0]'
28822    * void vst3q_lane_s16 (int16_t *, int16x8x3_t, const int)
28823      _Form of expected instruction(s):_ `vst3.16 {D0[0], D1[0], D2[0]},
28824      [R0]'
28826    * void vst3q_lane_u32 (uint32_t *, uint32x4x3_t, const int)
28827      _Form of expected instruction(s):_ `vst3.32 {D0[0], D1[0], D2[0]},
28828      [R0]'
28830    * void vst3q_lane_u16 (uint16_t *, uint16x8x3_t, const int)
28831      _Form of expected instruction(s):_ `vst3.16 {D0[0], D1[0], D2[0]},
28832      [R0]'
28834    * void vst3q_lane_f32 (float32_t *, float32x4x3_t, const int)
28835      _Form of expected instruction(s):_ `vst3.32 {D0[0], D1[0], D2[0]},
28836      [R0]'
28838    * void vst3q_lane_p16 (poly16_t *, poly16x8x3_t, const int)
28839      _Form of expected instruction(s):_ `vst3.16 {D0[0], D1[0], D2[0]},
28840      [R0]'
28842 5.50.3.74 Element/structure loads, VLD4 variants
28843 ................................................
28845    * uint32x2x4_t vld4_u32 (const uint32_t *)
28846      _Form of expected instruction(s):_ `vld4.32 {D0, D1, D2, D3}, [R0]'
28848    * uint16x4x4_t vld4_u16 (const uint16_t *)
28849      _Form of expected instruction(s):_ `vld4.16 {D0, D1, D2, D3}, [R0]'
28851    * uint8x8x4_t vld4_u8 (const uint8_t *)
28852      _Form of expected instruction(s):_ `vld4.8 {D0, D1, D2, D3}, [R0]'
28854    * int32x2x4_t vld4_s32 (const int32_t *)
28855      _Form of expected instruction(s):_ `vld4.32 {D0, D1, D2, D3}, [R0]'
28857    * int16x4x4_t vld4_s16 (const int16_t *)
28858      _Form of expected instruction(s):_ `vld4.16 {D0, D1, D2, D3}, [R0]'
28860    * int8x8x4_t vld4_s8 (const int8_t *)
28861      _Form of expected instruction(s):_ `vld4.8 {D0, D1, D2, D3}, [R0]'
28863    * float32x2x4_t vld4_f32 (const float32_t *)
28864      _Form of expected instruction(s):_ `vld4.32 {D0, D1, D2, D3}, [R0]'
28866    * poly16x4x4_t vld4_p16 (const poly16_t *)
28867      _Form of expected instruction(s):_ `vld4.16 {D0, D1, D2, D3}, [R0]'
28869    * poly8x8x4_t vld4_p8 (const poly8_t *)
28870      _Form of expected instruction(s):_ `vld4.8 {D0, D1, D2, D3}, [R0]'
28872    * uint64x1x4_t vld4_u64 (const uint64_t *)
28873      _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2, D3}, [R0]'
28875    * int64x1x4_t vld4_s64 (const int64_t *)
28876      _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2, D3}, [R0]'
28878    * uint32x4x4_t vld4q_u32 (const uint32_t *)
28879      _Form of expected instruction(s):_ `vld4.32 {D0, D1, D2, D3}, [R0]'
28881    * uint16x8x4_t vld4q_u16 (const uint16_t *)
28882      _Form of expected instruction(s):_ `vld4.16 {D0, D1, D2, D3}, [R0]'
28884    * uint8x16x4_t vld4q_u8 (const uint8_t *)
28885      _Form of expected instruction(s):_ `vld4.8 {D0, D1, D2, D3}, [R0]'
28887    * int32x4x4_t vld4q_s32 (const int32_t *)
28888      _Form of expected instruction(s):_ `vld4.32 {D0, D1, D2, D3}, [R0]'
28890    * int16x8x4_t vld4q_s16 (const int16_t *)
28891      _Form of expected instruction(s):_ `vld4.16 {D0, D1, D2, D3}, [R0]'
28893    * int8x16x4_t vld4q_s8 (const int8_t *)
28894      _Form of expected instruction(s):_ `vld4.8 {D0, D1, D2, D3}, [R0]'
28896    * float32x4x4_t vld4q_f32 (const float32_t *)
28897      _Form of expected instruction(s):_ `vld4.32 {D0, D1, D2, D3}, [R0]'
28899    * poly16x8x4_t vld4q_p16 (const poly16_t *)
28900      _Form of expected instruction(s):_ `vld4.16 {D0, D1, D2, D3}, [R0]'
28902    * poly8x16x4_t vld4q_p8 (const poly8_t *)
28903      _Form of expected instruction(s):_ `vld4.8 {D0, D1, D2, D3}, [R0]'
28905    * uint32x2x4_t vld4_lane_u32 (const uint32_t *, uint32x2x4_t, const
28906      int)
28907      _Form of expected instruction(s):_ `vld4.32 {D0[0], D1[0], D2[0],
28908      D3[0]}, [R0]'
28910    * uint16x4x4_t vld4_lane_u16 (const uint16_t *, uint16x4x4_t, const
28911      int)
28912      _Form of expected instruction(s):_ `vld4.16 {D0[0], D1[0], D2[0],
28913      D3[0]}, [R0]'
28915    * uint8x8x4_t vld4_lane_u8 (const uint8_t *, uint8x8x4_t, const int)
28916      _Form of expected instruction(s):_ `vld4.8 {D0[0], D1[0], D2[0],
28917      D3[0]}, [R0]'
28919    * int32x2x4_t vld4_lane_s32 (const int32_t *, int32x2x4_t, const int)
28920      _Form of expected instruction(s):_ `vld4.32 {D0[0], D1[0], D2[0],
28921      D3[0]}, [R0]'
28923    * int16x4x4_t vld4_lane_s16 (const int16_t *, int16x4x4_t, const int)
28924      _Form of expected instruction(s):_ `vld4.16 {D0[0], D1[0], D2[0],
28925      D3[0]}, [R0]'
28927    * int8x8x4_t vld4_lane_s8 (const int8_t *, int8x8x4_t, const int)
28928      _Form of expected instruction(s):_ `vld4.8 {D0[0], D1[0], D2[0],
28929      D3[0]}, [R0]'
28931    * float32x2x4_t vld4_lane_f32 (const float32_t *, float32x2x4_t,
28932      const int)
28933      _Form of expected instruction(s):_ `vld4.32 {D0[0], D1[0], D2[0],
28934      D3[0]}, [R0]'
28936    * poly16x4x4_t vld4_lane_p16 (const poly16_t *, poly16x4x4_t, const
28937      int)
28938      _Form of expected instruction(s):_ `vld4.16 {D0[0], D1[0], D2[0],
28939      D3[0]}, [R0]'
28941    * poly8x8x4_t vld4_lane_p8 (const poly8_t *, poly8x8x4_t, const int)
28942      _Form of expected instruction(s):_ `vld4.8 {D0[0], D1[0], D2[0],
28943      D3[0]}, [R0]'
28945    * int32x4x4_t vld4q_lane_s32 (const int32_t *, int32x4x4_t, const
28946      int)
28947      _Form of expected instruction(s):_ `vld4.32 {D0[0], D1[0], D2[0],
28948      D3[0]}, [R0]'
28950    * int16x8x4_t vld4q_lane_s16 (const int16_t *, int16x8x4_t, const
28951      int)
28952      _Form of expected instruction(s):_ `vld4.16 {D0[0], D1[0], D2[0],
28953      D3[0]}, [R0]'
28955    * uint32x4x4_t vld4q_lane_u32 (const uint32_t *, uint32x4x4_t, const
28956      int)
28957      _Form of expected instruction(s):_ `vld4.32 {D0[0], D1[0], D2[0],
28958      D3[0]}, [R0]'
28960    * uint16x8x4_t vld4q_lane_u16 (const uint16_t *, uint16x8x4_t, const
28961      int)
28962      _Form of expected instruction(s):_ `vld4.16 {D0[0], D1[0], D2[0],
28963      D3[0]}, [R0]'
28965    * float32x4x4_t vld4q_lane_f32 (const float32_t *, float32x4x4_t,
28966      const int)
28967      _Form of expected instruction(s):_ `vld4.32 {D0[0], D1[0], D2[0],
28968      D3[0]}, [R0]'
28970    * poly16x8x4_t vld4q_lane_p16 (const poly16_t *, poly16x8x4_t, const
28971      int)
28972      _Form of expected instruction(s):_ `vld4.16 {D0[0], D1[0], D2[0],
28973      D3[0]}, [R0]'
28975    * uint32x2x4_t vld4_dup_u32 (const uint32_t *)
28976      _Form of expected instruction(s):_ `vld4.32 {D0[], D1[], D2[],
28977      D3[]}, [R0]'
28979    * uint16x4x4_t vld4_dup_u16 (const uint16_t *)
28980      _Form of expected instruction(s):_ `vld4.16 {D0[], D1[], D2[],
28981      D3[]}, [R0]'
28983    * uint8x8x4_t vld4_dup_u8 (const uint8_t *)
28984      _Form of expected instruction(s):_ `vld4.8 {D0[], D1[], D2[],
28985      D3[]}, [R0]'
28987    * int32x2x4_t vld4_dup_s32 (const int32_t *)
28988      _Form of expected instruction(s):_ `vld4.32 {D0[], D1[], D2[],
28989      D3[]}, [R0]'
28991    * int16x4x4_t vld4_dup_s16 (const int16_t *)
28992      _Form of expected instruction(s):_ `vld4.16 {D0[], D1[], D2[],
28993      D3[]}, [R0]'
28995    * int8x8x4_t vld4_dup_s8 (const int8_t *)
28996      _Form of expected instruction(s):_ `vld4.8 {D0[], D1[], D2[],
28997      D3[]}, [R0]'
28999    * float32x2x4_t vld4_dup_f32 (const float32_t *)
29000      _Form of expected instruction(s):_ `vld4.32 {D0[], D1[], D2[],
29001      D3[]}, [R0]'
29003    * poly16x4x4_t vld4_dup_p16 (const poly16_t *)
29004      _Form of expected instruction(s):_ `vld4.16 {D0[], D1[], D2[],
29005      D3[]}, [R0]'
29007    * poly8x8x4_t vld4_dup_p8 (const poly8_t *)
29008      _Form of expected instruction(s):_ `vld4.8 {D0[], D1[], D2[],
29009      D3[]}, [R0]'
29011    * uint64x1x4_t vld4_dup_u64 (const uint64_t *)
29012      _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2, D3}, [R0]'
29014    * int64x1x4_t vld4_dup_s64 (const int64_t *)
29015      _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2, D3}, [R0]'
29017 5.50.3.75 Element/structure stores, VST4 variants
29018 .................................................
29020    * void vst4_u32 (uint32_t *, uint32x2x4_t)
29021      _Form of expected instruction(s):_ `vst4.32 {D0, D1, D2, D3}, [R0]'
29023    * void vst4_u16 (uint16_t *, uint16x4x4_t)
29024      _Form of expected instruction(s):_ `vst4.16 {D0, D1, D2, D3}, [R0]'
29026    * void vst4_u8 (uint8_t *, uint8x8x4_t)
29027      _Form of expected instruction(s):_ `vst4.8 {D0, D1, D2, D3}, [R0]'
29029    * void vst4_s32 (int32_t *, int32x2x4_t)
29030      _Form of expected instruction(s):_ `vst4.32 {D0, D1, D2, D3}, [R0]'
29032    * void vst4_s16 (int16_t *, int16x4x4_t)
29033      _Form of expected instruction(s):_ `vst4.16 {D0, D1, D2, D3}, [R0]'
29035    * void vst4_s8 (int8_t *, int8x8x4_t)
29036      _Form of expected instruction(s):_ `vst4.8 {D0, D1, D2, D3}, [R0]'
29038    * void vst4_f32 (float32_t *, float32x2x4_t)
29039      _Form of expected instruction(s):_ `vst4.32 {D0, D1, D2, D3}, [R0]'
29041    * void vst4_p16 (poly16_t *, poly16x4x4_t)
29042      _Form of expected instruction(s):_ `vst4.16 {D0, D1, D2, D3}, [R0]'
29044    * void vst4_p8 (poly8_t *, poly8x8x4_t)
29045      _Form of expected instruction(s):_ `vst4.8 {D0, D1, D2, D3}, [R0]'
29047    * void vst4_u64 (uint64_t *, uint64x1x4_t)
29048      _Form of expected instruction(s):_ `vst1.64 {D0, D1, D2, D3}, [R0]'
29050    * void vst4_s64 (int64_t *, int64x1x4_t)
29051      _Form of expected instruction(s):_ `vst1.64 {D0, D1, D2, D3}, [R0]'
29053    * void vst4q_u32 (uint32_t *, uint32x4x4_t)
29054      _Form of expected instruction(s):_ `vst4.32 {D0, D1, D2, D3}, [R0]'
29056    * void vst4q_u16 (uint16_t *, uint16x8x4_t)
29057      _Form of expected instruction(s):_ `vst4.16 {D0, D1, D2, D3}, [R0]'
29059    * void vst4q_u8 (uint8_t *, uint8x16x4_t)
29060      _Form of expected instruction(s):_ `vst4.8 {D0, D1, D2, D3}, [R0]'
29062    * void vst4q_s32 (int32_t *, int32x4x4_t)
29063      _Form of expected instruction(s):_ `vst4.32 {D0, D1, D2, D3}, [R0]'
29065    * void vst4q_s16 (int16_t *, int16x8x4_t)
29066      _Form of expected instruction(s):_ `vst4.16 {D0, D1, D2, D3}, [R0]'
29068    * void vst4q_s8 (int8_t *, int8x16x4_t)
29069      _Form of expected instruction(s):_ `vst4.8 {D0, D1, D2, D3}, [R0]'
29071    * void vst4q_f32 (float32_t *, float32x4x4_t)
29072      _Form of expected instruction(s):_ `vst4.32 {D0, D1, D2, D3}, [R0]'
29074    * void vst4q_p16 (poly16_t *, poly16x8x4_t)
29075      _Form of expected instruction(s):_ `vst4.16 {D0, D1, D2, D3}, [R0]'
29077    * void vst4q_p8 (poly8_t *, poly8x16x4_t)
29078      _Form of expected instruction(s):_ `vst4.8 {D0, D1, D2, D3}, [R0]'
29080    * void vst4_lane_u32 (uint32_t *, uint32x2x4_t, const int)
29081      _Form of expected instruction(s):_ `vst4.32 {D0[0], D1[0], D2[0],
29082      D3[0]}, [R0]'
29084    * void vst4_lane_u16 (uint16_t *, uint16x4x4_t, const int)
29085      _Form of expected instruction(s):_ `vst4.16 {D0[0], D1[0], D2[0],
29086      D3[0]}, [R0]'
29088    * void vst4_lane_u8 (uint8_t *, uint8x8x4_t, const int)
29089      _Form of expected instruction(s):_ `vst4.8 {D0[0], D1[0], D2[0],
29090      D3[0]}, [R0]'
29092    * void vst4_lane_s32 (int32_t *, int32x2x4_t, const int)
29093      _Form of expected instruction(s):_ `vst4.32 {D0[0], D1[0], D2[0],
29094      D3[0]}, [R0]'
29096    * void vst4_lane_s16 (int16_t *, int16x4x4_t, const int)
29097      _Form of expected instruction(s):_ `vst4.16 {D0[0], D1[0], D2[0],
29098      D3[0]}, [R0]'
29100    * void vst4_lane_s8 (int8_t *, int8x8x4_t, const int)
29101      _Form of expected instruction(s):_ `vst4.8 {D0[0], D1[0], D2[0],
29102      D3[0]}, [R0]'
29104    * void vst4_lane_f32 (float32_t *, float32x2x4_t, const int)
29105      _Form of expected instruction(s):_ `vst4.32 {D0[0], D1[0], D2[0],
29106      D3[0]}, [R0]'
29108    * void vst4_lane_p16 (poly16_t *, poly16x4x4_t, const int)
29109      _Form of expected instruction(s):_ `vst4.16 {D0[0], D1[0], D2[0],
29110      D3[0]}, [R0]'
29112    * void vst4_lane_p8 (poly8_t *, poly8x8x4_t, const int)
29113      _Form of expected instruction(s):_ `vst4.8 {D0[0], D1[0], D2[0],
29114      D3[0]}, [R0]'
29116    * void vst4q_lane_s32 (int32_t *, int32x4x4_t, const int)
29117      _Form of expected instruction(s):_ `vst4.32 {D0[0], D1[0], D2[0],
29118      D3[0]}, [R0]'
29120    * void vst4q_lane_s16 (int16_t *, int16x8x4_t, const int)
29121      _Form of expected instruction(s):_ `vst4.16 {D0[0], D1[0], D2[0],
29122      D3[0]}, [R0]'
29124    * void vst4q_lane_u32 (uint32_t *, uint32x4x4_t, const int)
29125      _Form of expected instruction(s):_ `vst4.32 {D0[0], D1[0], D2[0],
29126      D3[0]}, [R0]'
29128    * void vst4q_lane_u16 (uint16_t *, uint16x8x4_t, const int)
29129      _Form of expected instruction(s):_ `vst4.16 {D0[0], D1[0], D2[0],
29130      D3[0]}, [R0]'
29132    * void vst4q_lane_f32 (float32_t *, float32x4x4_t, const int)
29133      _Form of expected instruction(s):_ `vst4.32 {D0[0], D1[0], D2[0],
29134      D3[0]}, [R0]'
29136    * void vst4q_lane_p16 (poly16_t *, poly16x8x4_t, const int)
29137      _Form of expected instruction(s):_ `vst4.16 {D0[0], D1[0], D2[0],
29138      D3[0]}, [R0]'
29140 5.50.3.76 Logical operations (AND)
29141 ..................................
29143    * uint32x2_t vand_u32 (uint32x2_t, uint32x2_t)
29144      _Form of expected instruction(s):_ `vand D0, D0, D0'
29146    * uint16x4_t vand_u16 (uint16x4_t, uint16x4_t)
29147      _Form of expected instruction(s):_ `vand D0, D0, D0'
29149    * uint8x8_t vand_u8 (uint8x8_t, uint8x8_t)
29150      _Form of expected instruction(s):_ `vand D0, D0, D0'
29152    * int32x2_t vand_s32 (int32x2_t, int32x2_t)
29153      _Form of expected instruction(s):_ `vand D0, D0, D0'
29155    * int16x4_t vand_s16 (int16x4_t, int16x4_t)
29156      _Form of expected instruction(s):_ `vand D0, D0, D0'
29158    * int8x8_t vand_s8 (int8x8_t, int8x8_t)
29159      _Form of expected instruction(s):_ `vand D0, D0, D0'
29161    * uint64x1_t vand_u64 (uint64x1_t, uint64x1_t)
29162      _Form of expected instruction(s):_ `vand D0, D0, D0'
29164    * int64x1_t vand_s64 (int64x1_t, int64x1_t)
29165      _Form of expected instruction(s):_ `vand D0, D0, D0'
29167    * uint32x4_t vandq_u32 (uint32x4_t, uint32x4_t)
29168      _Form of expected instruction(s):_ `vand Q0, Q0, Q0'
29170    * uint16x8_t vandq_u16 (uint16x8_t, uint16x8_t)
29171      _Form of expected instruction(s):_ `vand Q0, Q0, Q0'
29173    * uint8x16_t vandq_u8 (uint8x16_t, uint8x16_t)
29174      _Form of expected instruction(s):_ `vand Q0, Q0, Q0'
29176    * int32x4_t vandq_s32 (int32x4_t, int32x4_t)
29177      _Form of expected instruction(s):_ `vand Q0, Q0, Q0'
29179    * int16x8_t vandq_s16 (int16x8_t, int16x8_t)
29180      _Form of expected instruction(s):_ `vand Q0, Q0, Q0'
29182    * int8x16_t vandq_s8 (int8x16_t, int8x16_t)
29183      _Form of expected instruction(s):_ `vand Q0, Q0, Q0'
29185    * uint64x2_t vandq_u64 (uint64x2_t, uint64x2_t)
29186      _Form of expected instruction(s):_ `vand Q0, Q0, Q0'
29188    * int64x2_t vandq_s64 (int64x2_t, int64x2_t)
29189      _Form of expected instruction(s):_ `vand Q0, Q0, Q0'
29191 5.50.3.77 Logical operations (OR)
29192 .................................
29194    * uint32x2_t vorr_u32 (uint32x2_t, uint32x2_t)
29195      _Form of expected instruction(s):_ `vorr D0, D0, D0'
29197    * uint16x4_t vorr_u16 (uint16x4_t, uint16x4_t)
29198      _Form of expected instruction(s):_ `vorr D0, D0, D0'
29200    * uint8x8_t vorr_u8 (uint8x8_t, uint8x8_t)
29201      _Form of expected instruction(s):_ `vorr D0, D0, D0'
29203    * int32x2_t vorr_s32 (int32x2_t, int32x2_t)
29204      _Form of expected instruction(s):_ `vorr D0, D0, D0'
29206    * int16x4_t vorr_s16 (int16x4_t, int16x4_t)
29207      _Form of expected instruction(s):_ `vorr D0, D0, D0'
29209    * int8x8_t vorr_s8 (int8x8_t, int8x8_t)
29210      _Form of expected instruction(s):_ `vorr D0, D0, D0'
29212    * uint64x1_t vorr_u64 (uint64x1_t, uint64x1_t)
29213      _Form of expected instruction(s):_ `vorr D0, D0, D0'
29215    * int64x1_t vorr_s64 (int64x1_t, int64x1_t)
29216      _Form of expected instruction(s):_ `vorr D0, D0, D0'
29218    * uint32x4_t vorrq_u32 (uint32x4_t, uint32x4_t)
29219      _Form of expected instruction(s):_ `vorr Q0, Q0, Q0'
29221    * uint16x8_t vorrq_u16 (uint16x8_t, uint16x8_t)
29222      _Form of expected instruction(s):_ `vorr Q0, Q0, Q0'
29224    * uint8x16_t vorrq_u8 (uint8x16_t, uint8x16_t)
29225      _Form of expected instruction(s):_ `vorr Q0, Q0, Q0'
29227    * int32x4_t vorrq_s32 (int32x4_t, int32x4_t)
29228      _Form of expected instruction(s):_ `vorr Q0, Q0, Q0'
29230    * int16x8_t vorrq_s16 (int16x8_t, int16x8_t)
29231      _Form of expected instruction(s):_ `vorr Q0, Q0, Q0'
29233    * int8x16_t vorrq_s8 (int8x16_t, int8x16_t)
29234      _Form of expected instruction(s):_ `vorr Q0, Q0, Q0'
29236    * uint64x2_t vorrq_u64 (uint64x2_t, uint64x2_t)
29237      _Form of expected instruction(s):_ `vorr Q0, Q0, Q0'
29239    * int64x2_t vorrq_s64 (int64x2_t, int64x2_t)
29240      _Form of expected instruction(s):_ `vorr Q0, Q0, Q0'
29242 5.50.3.78 Logical operations (exclusive OR)
29243 ...........................................
29245    * uint32x2_t veor_u32 (uint32x2_t, uint32x2_t)
29246      _Form of expected instruction(s):_ `veor D0, D0, D0'
29248    * uint16x4_t veor_u16 (uint16x4_t, uint16x4_t)
29249      _Form of expected instruction(s):_ `veor D0, D0, D0'
29251    * uint8x8_t veor_u8 (uint8x8_t, uint8x8_t)
29252      _Form of expected instruction(s):_ `veor D0, D0, D0'
29254    * int32x2_t veor_s32 (int32x2_t, int32x2_t)
29255      _Form of expected instruction(s):_ `veor D0, D0, D0'
29257    * int16x4_t veor_s16 (int16x4_t, int16x4_t)
29258      _Form of expected instruction(s):_ `veor D0, D0, D0'
29260    * int8x8_t veor_s8 (int8x8_t, int8x8_t)
29261      _Form of expected instruction(s):_ `veor D0, D0, D0'
29263    * uint64x1_t veor_u64 (uint64x1_t, uint64x1_t)
29264      _Form of expected instruction(s):_ `veor D0, D0, D0'
29266    * int64x1_t veor_s64 (int64x1_t, int64x1_t)
29267      _Form of expected instruction(s):_ `veor D0, D0, D0'
29269    * uint32x4_t veorq_u32 (uint32x4_t, uint32x4_t)
29270      _Form of expected instruction(s):_ `veor Q0, Q0, Q0'
29272    * uint16x8_t veorq_u16 (uint16x8_t, uint16x8_t)
29273      _Form of expected instruction(s):_ `veor Q0, Q0, Q0'
29275    * uint8x16_t veorq_u8 (uint8x16_t, uint8x16_t)
29276      _Form of expected instruction(s):_ `veor Q0, Q0, Q0'
29278    * int32x4_t veorq_s32 (int32x4_t, int32x4_t)
29279      _Form of expected instruction(s):_ `veor Q0, Q0, Q0'
29281    * int16x8_t veorq_s16 (int16x8_t, int16x8_t)
29282      _Form of expected instruction(s):_ `veor Q0, Q0, Q0'
29284    * int8x16_t veorq_s8 (int8x16_t, int8x16_t)
29285      _Form of expected instruction(s):_ `veor Q0, Q0, Q0'
29287    * uint64x2_t veorq_u64 (uint64x2_t, uint64x2_t)
29288      _Form of expected instruction(s):_ `veor Q0, Q0, Q0'
29290    * int64x2_t veorq_s64 (int64x2_t, int64x2_t)
29291      _Form of expected instruction(s):_ `veor Q0, Q0, Q0'
29293 5.50.3.79 Logical operations (AND-NOT)
29294 ......................................
29296    * uint32x2_t vbic_u32 (uint32x2_t, uint32x2_t)
29297      _Form of expected instruction(s):_ `vbic D0, D0, D0'
29299    * uint16x4_t vbic_u16 (uint16x4_t, uint16x4_t)
29300      _Form of expected instruction(s):_ `vbic D0, D0, D0'
29302    * uint8x8_t vbic_u8 (uint8x8_t, uint8x8_t)
29303      _Form of expected instruction(s):_ `vbic D0, D0, D0'
29305    * int32x2_t vbic_s32 (int32x2_t, int32x2_t)
29306      _Form of expected instruction(s):_ `vbic D0, D0, D0'
29308    * int16x4_t vbic_s16 (int16x4_t, int16x4_t)
29309      _Form of expected instruction(s):_ `vbic D0, D0, D0'
29311    * int8x8_t vbic_s8 (int8x8_t, int8x8_t)
29312      _Form of expected instruction(s):_ `vbic D0, D0, D0'
29314    * uint64x1_t vbic_u64 (uint64x1_t, uint64x1_t)
29315      _Form of expected instruction(s):_ `vbic D0, D0, D0'
29317    * int64x1_t vbic_s64 (int64x1_t, int64x1_t)
29318      _Form of expected instruction(s):_ `vbic D0, D0, D0'
29320    * uint32x4_t vbicq_u32 (uint32x4_t, uint32x4_t)
29321      _Form of expected instruction(s):_ `vbic Q0, Q0, Q0'
29323    * uint16x8_t vbicq_u16 (uint16x8_t, uint16x8_t)
29324      _Form of expected instruction(s):_ `vbic Q0, Q0, Q0'
29326    * uint8x16_t vbicq_u8 (uint8x16_t, uint8x16_t)
29327      _Form of expected instruction(s):_ `vbic Q0, Q0, Q0'
29329    * int32x4_t vbicq_s32 (int32x4_t, int32x4_t)
29330      _Form of expected instruction(s):_ `vbic Q0, Q0, Q0'
29332    * int16x8_t vbicq_s16 (int16x8_t, int16x8_t)
29333      _Form of expected instruction(s):_ `vbic Q0, Q0, Q0'
29335    * int8x16_t vbicq_s8 (int8x16_t, int8x16_t)
29336      _Form of expected instruction(s):_ `vbic Q0, Q0, Q0'
29338    * uint64x2_t vbicq_u64 (uint64x2_t, uint64x2_t)
29339      _Form of expected instruction(s):_ `vbic Q0, Q0, Q0'
29341    * int64x2_t vbicq_s64 (int64x2_t, int64x2_t)
29342      _Form of expected instruction(s):_ `vbic Q0, Q0, Q0'
29344 5.50.3.80 Logical operations (OR-NOT)
29345 .....................................
29347    * uint32x2_t vorn_u32 (uint32x2_t, uint32x2_t)
29348      _Form of expected instruction(s):_ `vorn D0, D0, D0'
29350    * uint16x4_t vorn_u16 (uint16x4_t, uint16x4_t)
29351      _Form of expected instruction(s):_ `vorn D0, D0, D0'
29353    * uint8x8_t vorn_u8 (uint8x8_t, uint8x8_t)
29354      _Form of expected instruction(s):_ `vorn D0, D0, D0'
29356    * int32x2_t vorn_s32 (int32x2_t, int32x2_t)
29357      _Form of expected instruction(s):_ `vorn D0, D0, D0'
29359    * int16x4_t vorn_s16 (int16x4_t, int16x4_t)
29360      _Form of expected instruction(s):_ `vorn D0, D0, D0'
29362    * int8x8_t vorn_s8 (int8x8_t, int8x8_t)
29363      _Form of expected instruction(s):_ `vorn D0, D0, D0'
29365    * uint64x1_t vorn_u64 (uint64x1_t, uint64x1_t)
29366      _Form of expected instruction(s):_ `vorn D0, D0, D0'
29368    * int64x1_t vorn_s64 (int64x1_t, int64x1_t)
29369      _Form of expected instruction(s):_ `vorn D0, D0, D0'
29371    * uint32x4_t vornq_u32 (uint32x4_t, uint32x4_t)
29372      _Form of expected instruction(s):_ `vorn Q0, Q0, Q0'
29374    * uint16x8_t vornq_u16 (uint16x8_t, uint16x8_t)
29375      _Form of expected instruction(s):_ `vorn Q0, Q0, Q0'
29377    * uint8x16_t vornq_u8 (uint8x16_t, uint8x16_t)
29378      _Form of expected instruction(s):_ `vorn Q0, Q0, Q0'
29380    * int32x4_t vornq_s32 (int32x4_t, int32x4_t)
29381      _Form of expected instruction(s):_ `vorn Q0, Q0, Q0'
29383    * int16x8_t vornq_s16 (int16x8_t, int16x8_t)
29384      _Form of expected instruction(s):_ `vorn Q0, Q0, Q0'
29386    * int8x16_t vornq_s8 (int8x16_t, int8x16_t)
29387      _Form of expected instruction(s):_ `vorn Q0, Q0, Q0'
29389    * uint64x2_t vornq_u64 (uint64x2_t, uint64x2_t)
29390      _Form of expected instruction(s):_ `vorn Q0, Q0, Q0'
29392    * int64x2_t vornq_s64 (int64x2_t, int64x2_t)
29393      _Form of expected instruction(s):_ `vorn Q0, Q0, Q0'
29395 5.50.3.81 Reinterpret casts
29396 ...........................
29398    * poly8x8_t vreinterpret_p8_u32 (uint32x2_t)
29400    * poly8x8_t vreinterpret_p8_u16 (uint16x4_t)
29402    * poly8x8_t vreinterpret_p8_u8 (uint8x8_t)
29404    * poly8x8_t vreinterpret_p8_s32 (int32x2_t)
29406    * poly8x8_t vreinterpret_p8_s16 (int16x4_t)
29408    * poly8x8_t vreinterpret_p8_s8 (int8x8_t)
29410    * poly8x8_t vreinterpret_p8_u64 (uint64x1_t)
29412    * poly8x8_t vreinterpret_p8_s64 (int64x1_t)
29414    * poly8x8_t vreinterpret_p8_f32 (float32x2_t)
29416    * poly8x8_t vreinterpret_p8_p16 (poly16x4_t)
29418    * poly8x16_t vreinterpretq_p8_u32 (uint32x4_t)
29420    * poly8x16_t vreinterpretq_p8_u16 (uint16x8_t)
29422    * poly8x16_t vreinterpretq_p8_u8 (uint8x16_t)
29424    * poly8x16_t vreinterpretq_p8_s32 (int32x4_t)
29426    * poly8x16_t vreinterpretq_p8_s16 (int16x8_t)
29428    * poly8x16_t vreinterpretq_p8_s8 (int8x16_t)
29430    * poly8x16_t vreinterpretq_p8_u64 (uint64x2_t)
29432    * poly8x16_t vreinterpretq_p8_s64 (int64x2_t)
29434    * poly8x16_t vreinterpretq_p8_f32 (float32x4_t)
29436    * poly8x16_t vreinterpretq_p8_p16 (poly16x8_t)
29438    * poly16x4_t vreinterpret_p16_u32 (uint32x2_t)
29440    * poly16x4_t vreinterpret_p16_u16 (uint16x4_t)
29442    * poly16x4_t vreinterpret_p16_u8 (uint8x8_t)
29444    * poly16x4_t vreinterpret_p16_s32 (int32x2_t)
29446    * poly16x4_t vreinterpret_p16_s16 (int16x4_t)
29448    * poly16x4_t vreinterpret_p16_s8 (int8x8_t)
29450    * poly16x4_t vreinterpret_p16_u64 (uint64x1_t)
29452    * poly16x4_t vreinterpret_p16_s64 (int64x1_t)
29454    * poly16x4_t vreinterpret_p16_f32 (float32x2_t)
29456    * poly16x4_t vreinterpret_p16_p8 (poly8x8_t)
29458    * poly16x8_t vreinterpretq_p16_u32 (uint32x4_t)
29460    * poly16x8_t vreinterpretq_p16_u16 (uint16x8_t)
29462    * poly16x8_t vreinterpretq_p16_u8 (uint8x16_t)
29464    * poly16x8_t vreinterpretq_p16_s32 (int32x4_t)
29466    * poly16x8_t vreinterpretq_p16_s16 (int16x8_t)
29468    * poly16x8_t vreinterpretq_p16_s8 (int8x16_t)
29470    * poly16x8_t vreinterpretq_p16_u64 (uint64x2_t)
29472    * poly16x8_t vreinterpretq_p16_s64 (int64x2_t)
29474    * poly16x8_t vreinterpretq_p16_f32 (float32x4_t)
29476    * poly16x8_t vreinterpretq_p16_p8 (poly8x16_t)
29478    * float32x2_t vreinterpret_f32_u32 (uint32x2_t)
29480    * float32x2_t vreinterpret_f32_u16 (uint16x4_t)
29482    * float32x2_t vreinterpret_f32_u8 (uint8x8_t)
29484    * float32x2_t vreinterpret_f32_s32 (int32x2_t)
29486    * float32x2_t vreinterpret_f32_s16 (int16x4_t)
29488    * float32x2_t vreinterpret_f32_s8 (int8x8_t)
29490    * float32x2_t vreinterpret_f32_u64 (uint64x1_t)
29492    * float32x2_t vreinterpret_f32_s64 (int64x1_t)
29494    * float32x2_t vreinterpret_f32_p16 (poly16x4_t)
29496    * float32x2_t vreinterpret_f32_p8 (poly8x8_t)
29498    * float32x4_t vreinterpretq_f32_u32 (uint32x4_t)
29500    * float32x4_t vreinterpretq_f32_u16 (uint16x8_t)
29502    * float32x4_t vreinterpretq_f32_u8 (uint8x16_t)
29504    * float32x4_t vreinterpretq_f32_s32 (int32x4_t)
29506    * float32x4_t vreinterpretq_f32_s16 (int16x8_t)
29508    * float32x4_t vreinterpretq_f32_s8 (int8x16_t)
29510    * float32x4_t vreinterpretq_f32_u64 (uint64x2_t)
29512    * float32x4_t vreinterpretq_f32_s64 (int64x2_t)
29514    * float32x4_t vreinterpretq_f32_p16 (poly16x8_t)
29516    * float32x4_t vreinterpretq_f32_p8 (poly8x16_t)
29518    * int64x1_t vreinterpret_s64_u32 (uint32x2_t)
29520    * int64x1_t vreinterpret_s64_u16 (uint16x4_t)
29522    * int64x1_t vreinterpret_s64_u8 (uint8x8_t)
29524    * int64x1_t vreinterpret_s64_s32 (int32x2_t)
29526    * int64x1_t vreinterpret_s64_s16 (int16x4_t)
29528    * int64x1_t vreinterpret_s64_s8 (int8x8_t)
29530    * int64x1_t vreinterpret_s64_u64 (uint64x1_t)
29532    * int64x1_t vreinterpret_s64_f32 (float32x2_t)
29534    * int64x1_t vreinterpret_s64_p16 (poly16x4_t)
29536    * int64x1_t vreinterpret_s64_p8 (poly8x8_t)
29538    * int64x2_t vreinterpretq_s64_u32 (uint32x4_t)
29540    * int64x2_t vreinterpretq_s64_u16 (uint16x8_t)
29542    * int64x2_t vreinterpretq_s64_u8 (uint8x16_t)
29544    * int64x2_t vreinterpretq_s64_s32 (int32x4_t)
29546    * int64x2_t vreinterpretq_s64_s16 (int16x8_t)
29548    * int64x2_t vreinterpretq_s64_s8 (int8x16_t)
29550    * int64x2_t vreinterpretq_s64_u64 (uint64x2_t)
29552    * int64x2_t vreinterpretq_s64_f32 (float32x4_t)
29554    * int64x2_t vreinterpretq_s64_p16 (poly16x8_t)
29556    * int64x2_t vreinterpretq_s64_p8 (poly8x16_t)
29558    * uint64x1_t vreinterpret_u64_u32 (uint32x2_t)
29560    * uint64x1_t vreinterpret_u64_u16 (uint16x4_t)
29562    * uint64x1_t vreinterpret_u64_u8 (uint8x8_t)
29564    * uint64x1_t vreinterpret_u64_s32 (int32x2_t)
29566    * uint64x1_t vreinterpret_u64_s16 (int16x4_t)
29568    * uint64x1_t vreinterpret_u64_s8 (int8x8_t)
29570    * uint64x1_t vreinterpret_u64_s64 (int64x1_t)
29572    * uint64x1_t vreinterpret_u64_f32 (float32x2_t)
29574    * uint64x1_t vreinterpret_u64_p16 (poly16x4_t)
29576    * uint64x1_t vreinterpret_u64_p8 (poly8x8_t)
29578    * uint64x2_t vreinterpretq_u64_u32 (uint32x4_t)
29580    * uint64x2_t vreinterpretq_u64_u16 (uint16x8_t)
29582    * uint64x2_t vreinterpretq_u64_u8 (uint8x16_t)
29584    * uint64x2_t vreinterpretq_u64_s32 (int32x4_t)
29586    * uint64x2_t vreinterpretq_u64_s16 (int16x8_t)
29588    * uint64x2_t vreinterpretq_u64_s8 (int8x16_t)
29590    * uint64x2_t vreinterpretq_u64_s64 (int64x2_t)
29592    * uint64x2_t vreinterpretq_u64_f32 (float32x4_t)
29594    * uint64x2_t vreinterpretq_u64_p16 (poly16x8_t)
29596    * uint64x2_t vreinterpretq_u64_p8 (poly8x16_t)
29598    * int8x8_t vreinterpret_s8_u32 (uint32x2_t)
29600    * int8x8_t vreinterpret_s8_u16 (uint16x4_t)
29602    * int8x8_t vreinterpret_s8_u8 (uint8x8_t)
29604    * int8x8_t vreinterpret_s8_s32 (int32x2_t)
29606    * int8x8_t vreinterpret_s8_s16 (int16x4_t)
29608    * int8x8_t vreinterpret_s8_u64 (uint64x1_t)
29610    * int8x8_t vreinterpret_s8_s64 (int64x1_t)
29612    * int8x8_t vreinterpret_s8_f32 (float32x2_t)
29614    * int8x8_t vreinterpret_s8_p16 (poly16x4_t)
29616    * int8x8_t vreinterpret_s8_p8 (poly8x8_t)
29618    * int8x16_t vreinterpretq_s8_u32 (uint32x4_t)
29620    * int8x16_t vreinterpretq_s8_u16 (uint16x8_t)
29622    * int8x16_t vreinterpretq_s8_u8 (uint8x16_t)
29624    * int8x16_t vreinterpretq_s8_s32 (int32x4_t)
29626    * int8x16_t vreinterpretq_s8_s16 (int16x8_t)
29628    * int8x16_t vreinterpretq_s8_u64 (uint64x2_t)
29630    * int8x16_t vreinterpretq_s8_s64 (int64x2_t)
29632    * int8x16_t vreinterpretq_s8_f32 (float32x4_t)
29634    * int8x16_t vreinterpretq_s8_p16 (poly16x8_t)
29636    * int8x16_t vreinterpretq_s8_p8 (poly8x16_t)
29638    * int16x4_t vreinterpret_s16_u32 (uint32x2_t)
29640    * int16x4_t vreinterpret_s16_u16 (uint16x4_t)
29642    * int16x4_t vreinterpret_s16_u8 (uint8x8_t)
29644    * int16x4_t vreinterpret_s16_s32 (int32x2_t)
29646    * int16x4_t vreinterpret_s16_s8 (int8x8_t)
29648    * int16x4_t vreinterpret_s16_u64 (uint64x1_t)
29650    * int16x4_t vreinterpret_s16_s64 (int64x1_t)
29652    * int16x4_t vreinterpret_s16_f32 (float32x2_t)
29654    * int16x4_t vreinterpret_s16_p16 (poly16x4_t)
29656    * int16x4_t vreinterpret_s16_p8 (poly8x8_t)
29658    * int16x8_t vreinterpretq_s16_u32 (uint32x4_t)
29660    * int16x8_t vreinterpretq_s16_u16 (uint16x8_t)
29662    * int16x8_t vreinterpretq_s16_u8 (uint8x16_t)
29664    * int16x8_t vreinterpretq_s16_s32 (int32x4_t)
29666    * int16x8_t vreinterpretq_s16_s8 (int8x16_t)
29668    * int16x8_t vreinterpretq_s16_u64 (uint64x2_t)
29670    * int16x8_t vreinterpretq_s16_s64 (int64x2_t)
29672    * int16x8_t vreinterpretq_s16_f32 (float32x4_t)
29674    * int16x8_t vreinterpretq_s16_p16 (poly16x8_t)
29676    * int16x8_t vreinterpretq_s16_p8 (poly8x16_t)
29678    * int32x2_t vreinterpret_s32_u32 (uint32x2_t)
29680    * int32x2_t vreinterpret_s32_u16 (uint16x4_t)
29682    * int32x2_t vreinterpret_s32_u8 (uint8x8_t)
29684    * int32x2_t vreinterpret_s32_s16 (int16x4_t)
29686    * int32x2_t vreinterpret_s32_s8 (int8x8_t)
29688    * int32x2_t vreinterpret_s32_u64 (uint64x1_t)
29690    * int32x2_t vreinterpret_s32_s64 (int64x1_t)
29692    * int32x2_t vreinterpret_s32_f32 (float32x2_t)
29694    * int32x2_t vreinterpret_s32_p16 (poly16x4_t)
29696    * int32x2_t vreinterpret_s32_p8 (poly8x8_t)
29698    * int32x4_t vreinterpretq_s32_u32 (uint32x4_t)
29700    * int32x4_t vreinterpretq_s32_u16 (uint16x8_t)
29702    * int32x4_t vreinterpretq_s32_u8 (uint8x16_t)
29704    * int32x4_t vreinterpretq_s32_s16 (int16x8_t)
29706    * int32x4_t vreinterpretq_s32_s8 (int8x16_t)
29708    * int32x4_t vreinterpretq_s32_u64 (uint64x2_t)
29710    * int32x4_t vreinterpretq_s32_s64 (int64x2_t)
29712    * int32x4_t vreinterpretq_s32_f32 (float32x4_t)
29714    * int32x4_t vreinterpretq_s32_p16 (poly16x8_t)
29716    * int32x4_t vreinterpretq_s32_p8 (poly8x16_t)
29718    * uint8x8_t vreinterpret_u8_u32 (uint32x2_t)
29720    * uint8x8_t vreinterpret_u8_u16 (uint16x4_t)
29722    * uint8x8_t vreinterpret_u8_s32 (int32x2_t)
29724    * uint8x8_t vreinterpret_u8_s16 (int16x4_t)
29726    * uint8x8_t vreinterpret_u8_s8 (int8x8_t)
29728    * uint8x8_t vreinterpret_u8_u64 (uint64x1_t)
29730    * uint8x8_t vreinterpret_u8_s64 (int64x1_t)
29732    * uint8x8_t vreinterpret_u8_f32 (float32x2_t)
29734    * uint8x8_t vreinterpret_u8_p16 (poly16x4_t)
29736    * uint8x8_t vreinterpret_u8_p8 (poly8x8_t)
29738    * uint8x16_t vreinterpretq_u8_u32 (uint32x4_t)
29740    * uint8x16_t vreinterpretq_u8_u16 (uint16x8_t)
29742    * uint8x16_t vreinterpretq_u8_s32 (int32x4_t)
29744    * uint8x16_t vreinterpretq_u8_s16 (int16x8_t)
29746    * uint8x16_t vreinterpretq_u8_s8 (int8x16_t)
29748    * uint8x16_t vreinterpretq_u8_u64 (uint64x2_t)
29750    * uint8x16_t vreinterpretq_u8_s64 (int64x2_t)
29752    * uint8x16_t vreinterpretq_u8_f32 (float32x4_t)
29754    * uint8x16_t vreinterpretq_u8_p16 (poly16x8_t)
29756    * uint8x16_t vreinterpretq_u8_p8 (poly8x16_t)
29758    * uint16x4_t vreinterpret_u16_u32 (uint32x2_t)
29760    * uint16x4_t vreinterpret_u16_u8 (uint8x8_t)
29762    * uint16x4_t vreinterpret_u16_s32 (int32x2_t)
29764    * uint16x4_t vreinterpret_u16_s16 (int16x4_t)
29766    * uint16x4_t vreinterpret_u16_s8 (int8x8_t)
29768    * uint16x4_t vreinterpret_u16_u64 (uint64x1_t)
29770    * uint16x4_t vreinterpret_u16_s64 (int64x1_t)
29772    * uint16x4_t vreinterpret_u16_f32 (float32x2_t)
29774    * uint16x4_t vreinterpret_u16_p16 (poly16x4_t)
29776    * uint16x4_t vreinterpret_u16_p8 (poly8x8_t)
29778    * uint16x8_t vreinterpretq_u16_u32 (uint32x4_t)
29780    * uint16x8_t vreinterpretq_u16_u8 (uint8x16_t)
29782    * uint16x8_t vreinterpretq_u16_s32 (int32x4_t)
29784    * uint16x8_t vreinterpretq_u16_s16 (int16x8_t)
29786    * uint16x8_t vreinterpretq_u16_s8 (int8x16_t)
29788    * uint16x8_t vreinterpretq_u16_u64 (uint64x2_t)
29790    * uint16x8_t vreinterpretq_u16_s64 (int64x2_t)
29792    * uint16x8_t vreinterpretq_u16_f32 (float32x4_t)
29794    * uint16x8_t vreinterpretq_u16_p16 (poly16x8_t)
29796    * uint16x8_t vreinterpretq_u16_p8 (poly8x16_t)
29798    * uint32x2_t vreinterpret_u32_u16 (uint16x4_t)
29800    * uint32x2_t vreinterpret_u32_u8 (uint8x8_t)
29802    * uint32x2_t vreinterpret_u32_s32 (int32x2_t)
29804    * uint32x2_t vreinterpret_u32_s16 (int16x4_t)
29806    * uint32x2_t vreinterpret_u32_s8 (int8x8_t)
29808    * uint32x2_t vreinterpret_u32_u64 (uint64x1_t)
29810    * uint32x2_t vreinterpret_u32_s64 (int64x1_t)
29812    * uint32x2_t vreinterpret_u32_f32 (float32x2_t)
29814    * uint32x2_t vreinterpret_u32_p16 (poly16x4_t)
29816    * uint32x2_t vreinterpret_u32_p8 (poly8x8_t)
29818    * uint32x4_t vreinterpretq_u32_u16 (uint16x8_t)
29820    * uint32x4_t vreinterpretq_u32_u8 (uint8x16_t)
29822    * uint32x4_t vreinterpretq_u32_s32 (int32x4_t)
29824    * uint32x4_t vreinterpretq_u32_s16 (int16x8_t)
29826    * uint32x4_t vreinterpretq_u32_s8 (int8x16_t)
29828    * uint32x4_t vreinterpretq_u32_u64 (uint64x2_t)
29830    * uint32x4_t vreinterpretq_u32_s64 (int64x2_t)
29832    * uint32x4_t vreinterpretq_u32_f32 (float32x4_t)
29834    * uint32x4_t vreinterpretq_u32_p16 (poly16x8_t)
29836    * uint32x4_t vreinterpretq_u32_p8 (poly8x16_t)
29838 \x1f
29839 File: gcc.info,  Node: Blackfin Built-in Functions,  Next: FR-V Built-in Functions,  Prev: ARM NEON Intrinsics,  Up: Target Builtins
29841 5.50.4 Blackfin Built-in Functions
29842 ----------------------------------
29844 Currently, there are two Blackfin-specific built-in functions.  These
29845 are used for generating `CSYNC' and `SSYNC' machine insns without using
29846 inline assembly; by using these built-in functions the compiler can
29847 automatically add workarounds for hardware errata involving these
29848 instructions.  These functions are named as follows:
29850      void __builtin_bfin_csync (void)
29851      void __builtin_bfin_ssync (void)
29853 \x1f
29854 File: gcc.info,  Node: FR-V Built-in Functions,  Next: X86 Built-in Functions,  Prev: Blackfin Built-in Functions,  Up: Target Builtins
29856 5.50.5 FR-V Built-in Functions
29857 ------------------------------
29859 GCC provides many FR-V-specific built-in functions.  In general, these
29860 functions are intended to be compatible with those described by `FR-V
29861 Family, Softune C/C++ Compiler Manual (V6), Fujitsu Semiconductor'.
29862 The two exceptions are `__MDUNPACKH' and `__MBTOHE', the gcc forms of
29863 which pass 128-bit values by pointer rather than by value.
29865  Most of the functions are named after specific FR-V instructions.
29866 Such functions are said to be "directly mapped" and are summarized here
29867 in tabular form.
29869 * Menu:
29871 * Argument Types::
29872 * Directly-mapped Integer Functions::
29873 * Directly-mapped Media Functions::
29874 * Raw read/write Functions::
29875 * Other Built-in Functions::
29877 \x1f
29878 File: gcc.info,  Node: Argument Types,  Next: Directly-mapped Integer Functions,  Up: FR-V Built-in Functions
29880 5.50.5.1 Argument Types
29881 .......................
29883 The arguments to the built-in functions can be divided into three
29884 groups: register numbers, compile-time constants and run-time values.
29885 In order to make this classification clear at a glance, the arguments
29886 and return values are given the following pseudo types:
29888 Pseudo type    Real C type            Constant?   Description
29889 `uh'           `unsigned short'       No          an unsigned halfword
29890 `uw1'          `unsigned int'         No          an unsigned word
29891 `sw1'          `int'                  No          a signed word
29892 `uw2'          `unsigned long long'   No          an unsigned doubleword
29893 `sw2'          `long long'            No          a signed doubleword
29894 `const'        `int'                  Yes         an integer constant
29895 `acc'          `int'                  Yes         an ACC register number
29896 `iacc'         `int'                  Yes         an IACC register number
29898  These pseudo types are not defined by GCC, they are simply a notational
29899 convenience used in this manual.
29901  Arguments of type `uh', `uw1', `sw1', `uw2' and `sw2' are evaluated at
29902 run time.  They correspond to register operands in the underlying FR-V
29903 instructions.
29905  `const' arguments represent immediate operands in the underlying FR-V
29906 instructions.  They must be compile-time constants.
29908  `acc' arguments are evaluated at compile time and specify the number
29909 of an accumulator register.  For example, an `acc' argument of 2 will
29910 select the ACC2 register.
29912  `iacc' arguments are similar to `acc' arguments but specify the number
29913 of an IACC register.  See *note Other Built-in Functions:: for more
29914 details.
29916 \x1f
29917 File: gcc.info,  Node: Directly-mapped Integer Functions,  Next: Directly-mapped Media Functions,  Prev: Argument Types,  Up: FR-V Built-in Functions
29919 5.50.5.2 Directly-mapped Integer Functions
29920 ..........................................
29922 The functions listed below map directly to FR-V I-type instructions.
29924 Function prototype               Example usage           Assembly output
29925 `sw1 __ADDSS (sw1, sw1)'         `C = __ADDSS (A, B)'    `ADDSS A,B,C'
29926 `sw1 __SCAN (sw1, sw1)'          `C = __SCAN (A, B)'     `SCAN A,B,C'
29927 `sw1 __SCUTSS (sw1)'             `B = __SCUTSS (A)'      `SCUTSS A,B'
29928 `sw1 __SLASS (sw1, sw1)'         `C = __SLASS (A, B)'    `SLASS A,B,C'
29929 `void __SMASS (sw1, sw1)'        `__SMASS (A, B)'        `SMASS A,B'
29930 `void __SMSSS (sw1, sw1)'        `__SMSSS (A, B)'        `SMSSS A,B'
29931 `void __SMU (sw1, sw1)'          `__SMU (A, B)'          `SMU A,B'
29932 `sw2 __SMUL (sw1, sw1)'          `C = __SMUL (A, B)'     `SMUL A,B,C'
29933 `sw1 __SUBSS (sw1, sw1)'         `C = __SUBSS (A, B)'    `SUBSS A,B,C'
29934 `uw2 __UMUL (uw1, uw1)'          `C = __UMUL (A, B)'     `UMUL A,B,C'
29936 \x1f
29937 File: gcc.info,  Node: Directly-mapped Media Functions,  Next: Raw read/write Functions,  Prev: Directly-mapped Integer Functions,  Up: FR-V Built-in Functions
29939 5.50.5.3 Directly-mapped Media Functions
29940 ........................................
29942 The functions listed below map directly to FR-V M-type instructions.
29944 Function prototype               Example usage           Assembly output
29945 `uw1 __MABSHS (sw1)'             `B = __MABSHS (A)'      `MABSHS A,B'
29946 `void __MADDACCS (acc, acc)'     `__MADDACCS (B, A)'     `MADDACCS A,B'
29947 `sw1 __MADDHSS (sw1, sw1)'       `C = __MADDHSS (A, B)'  `MADDHSS A,B,C'
29948 `uw1 __MADDHUS (uw1, uw1)'       `C = __MADDHUS (A, B)'  `MADDHUS A,B,C'
29949 `uw1 __MAND (uw1, uw1)'          `C = __MAND (A, B)'     `MAND A,B,C'
29950 `void __MASACCS (acc, acc)'      `__MASACCS (B, A)'      `MASACCS A,B'
29951 `uw1 __MAVEH (uw1, uw1)'         `C = __MAVEH (A, B)'    `MAVEH A,B,C'
29952 `uw2 __MBTOH (uw1)'              `B = __MBTOH (A)'       `MBTOH A,B'
29953 `void __MBTOHE (uw1 *, uw1)'     `__MBTOHE (&B, A)'      `MBTOHE A,B'
29954 `void __MCLRACC (acc)'           `__MCLRACC (A)'         `MCLRACC A'
29955 `void __MCLRACCA (void)'         `__MCLRACCA ()'         `MCLRACCA'
29956 `uw1 __Mcop1 (uw1, uw1)'         `C = __Mcop1 (A, B)'    `Mcop1 A,B,C'
29957 `uw1 __Mcop2 (uw1, uw1)'         `C = __Mcop2 (A, B)'    `Mcop2 A,B,C'
29958 `uw1 __MCPLHI (uw2, const)'      `C = __MCPLHI (A, B)'   `MCPLHI A,#B,C'
29959 `uw1 __MCPLI (uw2, const)'       `C = __MCPLI (A, B)'    `MCPLI A,#B,C'
29960 `void __MCPXIS (acc, sw1, sw1)'  `__MCPXIS (C, A, B)'    `MCPXIS A,B,C'
29961 `void __MCPXIU (acc, uw1, uw1)'  `__MCPXIU (C, A, B)'    `MCPXIU A,B,C'
29962 `void __MCPXRS (acc, sw1, sw1)'  `__MCPXRS (C, A, B)'    `MCPXRS A,B,C'
29963 `void __MCPXRU (acc, uw1, uw1)'  `__MCPXRU (C, A, B)'    `MCPXRU A,B,C'
29964 `uw1 __MCUT (acc, uw1)'          `C = __MCUT (A, B)'     `MCUT A,B,C'
29965 `uw1 __MCUTSS (acc, sw1)'        `C = __MCUTSS (A, B)'   `MCUTSS A,B,C'
29966 `void __MDADDACCS (acc, acc)'    `__MDADDACCS (B, A)'    `MDADDACCS A,B'
29967 `void __MDASACCS (acc, acc)'     `__MDASACCS (B, A)'     `MDASACCS A,B'
29968 `uw2 __MDCUTSSI (acc, const)'    `C = __MDCUTSSI (A, B)' `MDCUTSSI A,#B,C'
29969 `uw2 __MDPACKH (uw2, uw2)'       `C = __MDPACKH (A, B)'  `MDPACKH A,B,C'
29970 `uw2 __MDROTLI (uw2, const)'     `C = __MDROTLI (A, B)'  `MDROTLI A,#B,C'
29971 `void __MDSUBACCS (acc, acc)'    `__MDSUBACCS (B, A)'    `MDSUBACCS A,B'
29972 `void __MDUNPACKH (uw1 *, uw2)'  `__MDUNPACKH (&B, A)'   `MDUNPACKH A,B'
29973 `uw2 __MEXPDHD (uw1, const)'     `C = __MEXPDHD (A, B)'  `MEXPDHD A,#B,C'
29974 `uw1 __MEXPDHW (uw1, const)'     `C = __MEXPDHW (A, B)'  `MEXPDHW A,#B,C'
29975 `uw1 __MHDSETH (uw1, const)'     `C = __MHDSETH (A, B)'  `MHDSETH A,#B,C'
29976 `sw1 __MHDSETS (const)'          `B = __MHDSETS (A)'     `MHDSETS #A,B'
29977 `uw1 __MHSETHIH (uw1, const)'    `B = __MHSETHIH (B, A)' `MHSETHIH #A,B'
29978 `sw1 __MHSETHIS (sw1, const)'    `B = __MHSETHIS (B, A)' `MHSETHIS #A,B'
29979 `uw1 __MHSETLOH (uw1, const)'    `B = __MHSETLOH (B, A)' `MHSETLOH #A,B'
29980 `sw1 __MHSETLOS (sw1, const)'    `B = __MHSETLOS (B, A)' `MHSETLOS #A,B'
29981 `uw1 __MHTOB (uw2)'              `B = __MHTOB (A)'       `MHTOB A,B'
29982 `void __MMACHS (acc, sw1, sw1)'  `__MMACHS (C, A, B)'    `MMACHS A,B,C'
29983 `void __MMACHU (acc, uw1, uw1)'  `__MMACHU (C, A, B)'    `MMACHU A,B,C'
29984 `void __MMRDHS (acc, sw1, sw1)'  `__MMRDHS (C, A, B)'    `MMRDHS A,B,C'
29985 `void __MMRDHU (acc, uw1, uw1)'  `__MMRDHU (C, A, B)'    `MMRDHU A,B,C'
29986 `void __MMULHS (acc, sw1, sw1)'  `__MMULHS (C, A, B)'    `MMULHS A,B,C'
29987 `void __MMULHU (acc, uw1, uw1)'  `__MMULHU (C, A, B)'    `MMULHU A,B,C'
29988 `void __MMULXHS (acc, sw1, sw1)' `__MMULXHS (C, A, B)'   `MMULXHS A,B,C'
29989 `void __MMULXHU (acc, uw1, uw1)' `__MMULXHU (C, A, B)'   `MMULXHU A,B,C'
29990 `uw1 __MNOT (uw1)'               `B = __MNOT (A)'        `MNOT A,B'
29991 `uw1 __MOR (uw1, uw1)'           `C = __MOR (A, B)'      `MOR A,B,C'
29992 `uw1 __MPACKH (uh, uh)'          `C = __MPACKH (A, B)'   `MPACKH A,B,C'
29993 `sw2 __MQADDHSS (sw2, sw2)'      `C = __MQADDHSS (A, B)' `MQADDHSS A,B,C'
29994 `uw2 __MQADDHUS (uw2, uw2)'      `C = __MQADDHUS (A, B)' `MQADDHUS A,B,C'
29995 `void __MQCPXIS (acc, sw2, sw2)' `__MQCPXIS (C, A, B)'   `MQCPXIS A,B,C'
29996 `void __MQCPXIU (acc, uw2, uw2)' `__MQCPXIU (C, A, B)'   `MQCPXIU A,B,C'
29997 `void __MQCPXRS (acc, sw2, sw2)' `__MQCPXRS (C, A, B)'   `MQCPXRS A,B,C'
29998 `void __MQCPXRU (acc, uw2, uw2)' `__MQCPXRU (C, A, B)'   `MQCPXRU A,B,C'
29999 `sw2 __MQLCLRHS (sw2, sw2)'      `C = __MQLCLRHS (A, B)' `MQLCLRHS A,B,C'
30000 `sw2 __MQLMTHS (sw2, sw2)'       `C = __MQLMTHS (A, B)'  `MQLMTHS A,B,C'
30001 `void __MQMACHS (acc, sw2, sw2)' `__MQMACHS (C, A, B)'   `MQMACHS A,B,C'
30002 `void __MQMACHU (acc, uw2, uw2)' `__MQMACHU (C, A, B)'   `MQMACHU A,B,C'
30003 `void __MQMACXHS (acc, sw2,      `__MQMACXHS (C, A, B)'  `MQMACXHS A,B,C'
30004 sw2)'                                                    
30005 `void __MQMULHS (acc, sw2, sw2)' `__MQMULHS (C, A, B)'   `MQMULHS A,B,C'
30006 `void __MQMULHU (acc, uw2, uw2)' `__MQMULHU (C, A, B)'   `MQMULHU A,B,C'
30007 `void __MQMULXHS (acc, sw2,      `__MQMULXHS (C, A, B)'  `MQMULXHS A,B,C'
30008 sw2)'                                                    
30009 `void __MQMULXHU (acc, uw2,      `__MQMULXHU (C, A, B)'  `MQMULXHU A,B,C'
30010 uw2)'                                                    
30011 `sw2 __MQSATHS (sw2, sw2)'       `C = __MQSATHS (A, B)'  `MQSATHS A,B,C'
30012 `uw2 __MQSLLHI (uw2, int)'       `C = __MQSLLHI (A, B)'  `MQSLLHI A,B,C'
30013 `sw2 __MQSRAHI (sw2, int)'       `C = __MQSRAHI (A, B)'  `MQSRAHI A,B,C'
30014 `sw2 __MQSUBHSS (sw2, sw2)'      `C = __MQSUBHSS (A, B)' `MQSUBHSS A,B,C'
30015 `uw2 __MQSUBHUS (uw2, uw2)'      `C = __MQSUBHUS (A, B)' `MQSUBHUS A,B,C'
30016 `void __MQXMACHS (acc, sw2,      `__MQXMACHS (C, A, B)'  `MQXMACHS A,B,C'
30017 sw2)'                                                    
30018 `void __MQXMACXHS (acc, sw2,     `__MQXMACXHS (C, A, B)' `MQXMACXHS A,B,C'
30019 sw2)'                                                    
30020 `uw1 __MRDACC (acc)'             `B = __MRDACC (A)'      `MRDACC A,B'
30021 `uw1 __MRDACCG (acc)'            `B = __MRDACCG (A)'     `MRDACCG A,B'
30022 `uw1 __MROTLI (uw1, const)'      `C = __MROTLI (A, B)'   `MROTLI A,#B,C'
30023 `uw1 __MROTRI (uw1, const)'      `C = __MROTRI (A, B)'   `MROTRI A,#B,C'
30024 `sw1 __MSATHS (sw1, sw1)'        `C = __MSATHS (A, B)'   `MSATHS A,B,C'
30025 `uw1 __MSATHU (uw1, uw1)'        `C = __MSATHU (A, B)'   `MSATHU A,B,C'
30026 `uw1 __MSLLHI (uw1, const)'      `C = __MSLLHI (A, B)'   `MSLLHI A,#B,C'
30027 `sw1 __MSRAHI (sw1, const)'      `C = __MSRAHI (A, B)'   `MSRAHI A,#B,C'
30028 `uw1 __MSRLHI (uw1, const)'      `C = __MSRLHI (A, B)'   `MSRLHI A,#B,C'
30029 `void __MSUBACCS (acc, acc)'     `__MSUBACCS (B, A)'     `MSUBACCS A,B'
30030 `sw1 __MSUBHSS (sw1, sw1)'       `C = __MSUBHSS (A, B)'  `MSUBHSS A,B,C'
30031 `uw1 __MSUBHUS (uw1, uw1)'       `C = __MSUBHUS (A, B)'  `MSUBHUS A,B,C'
30032 `void __MTRAP (void)'            `__MTRAP ()'            `MTRAP'
30033 `uw2 __MUNPACKH (uw1)'           `B = __MUNPACKH (A)'    `MUNPACKH A,B'
30034 `uw1 __MWCUT (uw2, uw1)'         `C = __MWCUT (A, B)'    `MWCUT A,B,C'
30035 `void __MWTACC (acc, uw1)'       `__MWTACC (B, A)'       `MWTACC A,B'
30036 `void __MWTACCG (acc, uw1)'      `__MWTACCG (B, A)'      `MWTACCG A,B'
30037 `uw1 __MXOR (uw1, uw1)'          `C = __MXOR (A, B)'     `MXOR A,B,C'
30039 \x1f
30040 File: gcc.info,  Node: Raw read/write Functions,  Next: Other Built-in Functions,  Prev: Directly-mapped Media Functions,  Up: FR-V Built-in Functions
30042 5.50.5.4 Raw read/write Functions
30043 .................................
30045 This sections describes built-in functions related to read and write
30046 instructions to access memory.  These functions generate `membar'
30047 instructions to flush the I/O load and stores where appropriate, as
30048 described in Fujitsu's manual described above.
30050 `unsigned char __builtin_read8 (void *DATA)'
30052 `unsigned short __builtin_read16 (void *DATA)'
30054 `unsigned long __builtin_read32 (void *DATA)'
30056 `unsigned long long __builtin_read64 (void *DATA)'
30058 `void __builtin_write8 (void *DATA, unsigned char DATUM)'
30060 `void __builtin_write16 (void *DATA, unsigned short DATUM)'
30062 `void __builtin_write32 (void *DATA, unsigned long DATUM)'
30064 `void __builtin_write64 (void *DATA, unsigned long long DATUM)'
30066 \x1f
30067 File: gcc.info,  Node: Other Built-in Functions,  Prev: Raw read/write Functions,  Up: FR-V Built-in Functions
30069 5.50.5.5 Other Built-in Functions
30070 .................................
30072 This section describes built-in functions that are not named after a
30073 specific FR-V instruction.
30075 `sw2 __IACCreadll (iacc REG)'
30076      Return the full 64-bit value of IACC0.  The REG argument is
30077      reserved for future expansion and must be 0.
30079 `sw1 __IACCreadl (iacc REG)'
30080      Return the value of IACC0H if REG is 0 and IACC0L if REG is 1.
30081      Other values of REG are rejected as invalid.
30083 `void __IACCsetll (iacc REG, sw2 X)'
30084      Set the full 64-bit value of IACC0 to X.  The REG argument is
30085      reserved for future expansion and must be 0.
30087 `void __IACCsetl (iacc REG, sw1 X)'
30088      Set IACC0H to X if REG is 0 and IACC0L to X if REG is 1.  Other
30089      values of REG are rejected as invalid.
30091 `void __data_prefetch0 (const void *X)'
30092      Use the `dcpl' instruction to load the contents of address X into
30093      the data cache.
30095 `void __data_prefetch (const void *X)'
30096      Use the `nldub' instruction to load the contents of address X into
30097      the data cache.  The instruction will be issued in slot I1.
30099 \x1f
30100 File: gcc.info,  Node: X86 Built-in Functions,  Next: MIPS DSP Built-in Functions,  Prev: FR-V Built-in Functions,  Up: Target Builtins
30102 5.50.6 X86 Built-in Functions
30103 -----------------------------
30105 These built-in functions are available for the i386 and x86-64 family
30106 of computers, depending on the command-line switches used.
30108  Note that, if you specify command-line switches such as `-msse', the
30109 compiler could use the extended instruction sets even if the built-ins
30110 are not used explicitly in the program.  For this reason, applications
30111 which perform runtime CPU detection must compile separate files for each
30112 supported architecture, using the appropriate flags.  In particular,
30113 the file containing the CPU detection code should be compiled without
30114 these options.
30116  The following machine modes are available for use with MMX built-in
30117 functions (*note Vector Extensions::): `V2SI' for a vector of two
30118 32-bit integers, `V4HI' for a vector of four 16-bit integers, and
30119 `V8QI' for a vector of eight 8-bit integers.  Some of the built-in
30120 functions operate on MMX registers as a whole 64-bit entity, these use
30121 `V1DI' as their mode.
30123  If 3Dnow extensions are enabled, `V2SF' is used as a mode for a vector
30124 of two 32-bit floating point values.
30126  If SSE extensions are enabled, `V4SF' is used for a vector of four
30127 32-bit floating point values.  Some instructions use a vector of four
30128 32-bit integers, these use `V4SI'.  Finally, some instructions operate
30129 on an entire vector register, interpreting it as a 128-bit integer,
30130 these use mode `TI'.
30132  In 64-bit mode, the x86-64 family of processors uses additional
30133 built-in functions for efficient use of `TF' (`__float128') 128-bit
30134 floating point and `TC' 128-bit complex floating point values.
30136  The following floating point built-in functions are available in 64-bit
30137 mode.  All of them implement the function that is part of the name.
30139      __float128 __builtin_fabsq (__float128)
30140      __float128 __builtin_copysignq (__float128, __float128)
30142  The following floating point built-in functions are made available in
30143 the 64-bit mode.
30145 `__float128 __builtin_infq (void)'
30146      Similar to `__builtin_inf', except the return type is `__float128'.
30148  The following built-in functions are made available by `-mmmx'.  All
30149 of them generate the machine instruction that is part of the name.
30151      v8qi __builtin_ia32_paddb (v8qi, v8qi)
30152      v4hi __builtin_ia32_paddw (v4hi, v4hi)
30153      v2si __builtin_ia32_paddd (v2si, v2si)
30154      v8qi __builtin_ia32_psubb (v8qi, v8qi)
30155      v4hi __builtin_ia32_psubw (v4hi, v4hi)
30156      v2si __builtin_ia32_psubd (v2si, v2si)
30157      v8qi __builtin_ia32_paddsb (v8qi, v8qi)
30158      v4hi __builtin_ia32_paddsw (v4hi, v4hi)
30159      v8qi __builtin_ia32_psubsb (v8qi, v8qi)
30160      v4hi __builtin_ia32_psubsw (v4hi, v4hi)
30161      v8qi __builtin_ia32_paddusb (v8qi, v8qi)
30162      v4hi __builtin_ia32_paddusw (v4hi, v4hi)
30163      v8qi __builtin_ia32_psubusb (v8qi, v8qi)
30164      v4hi __builtin_ia32_psubusw (v4hi, v4hi)
30165      v4hi __builtin_ia32_pmullw (v4hi, v4hi)
30166      v4hi __builtin_ia32_pmulhw (v4hi, v4hi)
30167      di __builtin_ia32_pand (di, di)
30168      di __builtin_ia32_pandn (di,di)
30169      di __builtin_ia32_por (di, di)
30170      di __builtin_ia32_pxor (di, di)
30171      v8qi __builtin_ia32_pcmpeqb (v8qi, v8qi)
30172      v4hi __builtin_ia32_pcmpeqw (v4hi, v4hi)
30173      v2si __builtin_ia32_pcmpeqd (v2si, v2si)
30174      v8qi __builtin_ia32_pcmpgtb (v8qi, v8qi)
30175      v4hi __builtin_ia32_pcmpgtw (v4hi, v4hi)
30176      v2si __builtin_ia32_pcmpgtd (v2si, v2si)
30177      v8qi __builtin_ia32_punpckhbw (v8qi, v8qi)
30178      v4hi __builtin_ia32_punpckhwd (v4hi, v4hi)
30179      v2si __builtin_ia32_punpckhdq (v2si, v2si)
30180      v8qi __builtin_ia32_punpcklbw (v8qi, v8qi)
30181      v4hi __builtin_ia32_punpcklwd (v4hi, v4hi)
30182      v2si __builtin_ia32_punpckldq (v2si, v2si)
30183      v8qi __builtin_ia32_packsswb (v4hi, v4hi)
30184      v4hi __builtin_ia32_packssdw (v2si, v2si)
30185      v8qi __builtin_ia32_packuswb (v4hi, v4hi)
30187      v4hi __builtin_ia32_psllw (v4hi, v4hi)
30188      v2si __builtin_ia32_pslld (v2si, v2si)
30189      v1di __builtin_ia32_psllq (v1di, v1di)
30190      v4hi __builtin_ia32_psrlw (v4hi, v4hi)
30191      v2si __builtin_ia32_psrld (v2si, v2si)
30192      v1di __builtin_ia32_psrlq (v1di, v1di)
30193      v4hi __builtin_ia32_psraw (v4hi, v4hi)
30194      v2si __builtin_ia32_psrad (v2si, v2si)
30195      v4hi __builtin_ia32_psllwi (v4hi, int)
30196      v2si __builtin_ia32_pslldi (v2si, int)
30197      v1di __builtin_ia32_psllqi (v1di, int)
30198      v4hi __builtin_ia32_psrlwi (v4hi, int)
30199      v2si __builtin_ia32_psrldi (v2si, int)
30200      v1di __builtin_ia32_psrlqi (v1di, int)
30201      v4hi __builtin_ia32_psrawi (v4hi, int)
30202      v2si __builtin_ia32_psradi (v2si, int)
30204  The following built-in functions are made available either with
30205 `-msse', or with a combination of `-m3dnow' and `-march=athlon'.  All
30206 of them generate the machine instruction that is part of the name.
30208      v4hi __builtin_ia32_pmulhuw (v4hi, v4hi)
30209      v8qi __builtin_ia32_pavgb (v8qi, v8qi)
30210      v4hi __builtin_ia32_pavgw (v4hi, v4hi)
30211      v1di __builtin_ia32_psadbw (v8qi, v8qi)
30212      v8qi __builtin_ia32_pmaxub (v8qi, v8qi)
30213      v4hi __builtin_ia32_pmaxsw (v4hi, v4hi)
30214      v8qi __builtin_ia32_pminub (v8qi, v8qi)
30215      v4hi __builtin_ia32_pminsw (v4hi, v4hi)
30216      int __builtin_ia32_pextrw (v4hi, int)
30217      v4hi __builtin_ia32_pinsrw (v4hi, int, int)
30218      int __builtin_ia32_pmovmskb (v8qi)
30219      void __builtin_ia32_maskmovq (v8qi, v8qi, char *)
30220      void __builtin_ia32_movntq (di *, di)
30221      void __builtin_ia32_sfence (void)
30223  The following built-in functions are available when `-msse' is used.
30224 All of them generate the machine instruction that is part of the name.
30226      int __builtin_ia32_comieq (v4sf, v4sf)
30227      int __builtin_ia32_comineq (v4sf, v4sf)
30228      int __builtin_ia32_comilt (v4sf, v4sf)
30229      int __builtin_ia32_comile (v4sf, v4sf)
30230      int __builtin_ia32_comigt (v4sf, v4sf)
30231      int __builtin_ia32_comige (v4sf, v4sf)
30232      int __builtin_ia32_ucomieq (v4sf, v4sf)
30233      int __builtin_ia32_ucomineq (v4sf, v4sf)
30234      int __builtin_ia32_ucomilt (v4sf, v4sf)
30235      int __builtin_ia32_ucomile (v4sf, v4sf)
30236      int __builtin_ia32_ucomigt (v4sf, v4sf)
30237      int __builtin_ia32_ucomige (v4sf, v4sf)
30238      v4sf __builtin_ia32_addps (v4sf, v4sf)
30239      v4sf __builtin_ia32_subps (v4sf, v4sf)
30240      v4sf __builtin_ia32_mulps (v4sf, v4sf)
30241      v4sf __builtin_ia32_divps (v4sf, v4sf)
30242      v4sf __builtin_ia32_addss (v4sf, v4sf)
30243      v4sf __builtin_ia32_subss (v4sf, v4sf)
30244      v4sf __builtin_ia32_mulss (v4sf, v4sf)
30245      v4sf __builtin_ia32_divss (v4sf, v4sf)
30246      v4si __builtin_ia32_cmpeqps (v4sf, v4sf)
30247      v4si __builtin_ia32_cmpltps (v4sf, v4sf)
30248      v4si __builtin_ia32_cmpleps (v4sf, v4sf)
30249      v4si __builtin_ia32_cmpgtps (v4sf, v4sf)
30250      v4si __builtin_ia32_cmpgeps (v4sf, v4sf)
30251      v4si __builtin_ia32_cmpunordps (v4sf, v4sf)
30252      v4si __builtin_ia32_cmpneqps (v4sf, v4sf)
30253      v4si __builtin_ia32_cmpnltps (v4sf, v4sf)
30254      v4si __builtin_ia32_cmpnleps (v4sf, v4sf)
30255      v4si __builtin_ia32_cmpngtps (v4sf, v4sf)
30256      v4si __builtin_ia32_cmpngeps (v4sf, v4sf)
30257      v4si __builtin_ia32_cmpordps (v4sf, v4sf)
30258      v4si __builtin_ia32_cmpeqss (v4sf, v4sf)
30259      v4si __builtin_ia32_cmpltss (v4sf, v4sf)
30260      v4si __builtin_ia32_cmpless (v4sf, v4sf)
30261      v4si __builtin_ia32_cmpunordss (v4sf, v4sf)
30262      v4si __builtin_ia32_cmpneqss (v4sf, v4sf)
30263      v4si __builtin_ia32_cmpnlts (v4sf, v4sf)
30264      v4si __builtin_ia32_cmpnless (v4sf, v4sf)
30265      v4si __builtin_ia32_cmpordss (v4sf, v4sf)
30266      v4sf __builtin_ia32_maxps (v4sf, v4sf)
30267      v4sf __builtin_ia32_maxss (v4sf, v4sf)
30268      v4sf __builtin_ia32_minps (v4sf, v4sf)
30269      v4sf __builtin_ia32_minss (v4sf, v4sf)
30270      v4sf __builtin_ia32_andps (v4sf, v4sf)
30271      v4sf __builtin_ia32_andnps (v4sf, v4sf)
30272      v4sf __builtin_ia32_orps (v4sf, v4sf)
30273      v4sf __builtin_ia32_xorps (v4sf, v4sf)
30274      v4sf __builtin_ia32_movss (v4sf, v4sf)
30275      v4sf __builtin_ia32_movhlps (v4sf, v4sf)
30276      v4sf __builtin_ia32_movlhps (v4sf, v4sf)
30277      v4sf __builtin_ia32_unpckhps (v4sf, v4sf)
30278      v4sf __builtin_ia32_unpcklps (v4sf, v4sf)
30279      v4sf __builtin_ia32_cvtpi2ps (v4sf, v2si)
30280      v4sf __builtin_ia32_cvtsi2ss (v4sf, int)
30281      v2si __builtin_ia32_cvtps2pi (v4sf)
30282      int __builtin_ia32_cvtss2si (v4sf)
30283      v2si __builtin_ia32_cvttps2pi (v4sf)
30284      int __builtin_ia32_cvttss2si (v4sf)
30285      v4sf __builtin_ia32_rcpps (v4sf)
30286      v4sf __builtin_ia32_rsqrtps (v4sf)
30287      v4sf __builtin_ia32_sqrtps (v4sf)
30288      v4sf __builtin_ia32_rcpss (v4sf)
30289      v4sf __builtin_ia32_rsqrtss (v4sf)
30290      v4sf __builtin_ia32_sqrtss (v4sf)
30291      v4sf __builtin_ia32_shufps (v4sf, v4sf, int)
30292      void __builtin_ia32_movntps (float *, v4sf)
30293      int __builtin_ia32_movmskps (v4sf)
30295  The following built-in functions are available when `-msse' is used.
30297 `v4sf __builtin_ia32_loadaps (float *)'
30298      Generates the `movaps' machine instruction as a load from memory.
30300 `void __builtin_ia32_storeaps (float *, v4sf)'
30301      Generates the `movaps' machine instruction as a store to memory.
30303 `v4sf __builtin_ia32_loadups (float *)'
30304      Generates the `movups' machine instruction as a load from memory.
30306 `void __builtin_ia32_storeups (float *, v4sf)'
30307      Generates the `movups' machine instruction as a store to memory.
30309 `v4sf __builtin_ia32_loadsss (float *)'
30310      Generates the `movss' machine instruction as a load from memory.
30312 `void __builtin_ia32_storess (float *, v4sf)'
30313      Generates the `movss' machine instruction as a store to memory.
30315 `v4sf __builtin_ia32_loadhps (v4sf, const v2sf *)'
30316      Generates the `movhps' machine instruction as a load from memory.
30318 `v4sf __builtin_ia32_loadlps (v4sf, const v2sf *)'
30319      Generates the `movlps' machine instruction as a load from memory
30321 `void __builtin_ia32_storehps (v2sf *, v4sf)'
30322      Generates the `movhps' machine instruction as a store to memory.
30324 `void __builtin_ia32_storelps (v2sf *, v4sf)'
30325      Generates the `movlps' machine instruction as a store to memory.
30327  The following built-in functions are available when `-msse2' is used.
30328 All of them generate the machine instruction that is part of the name.
30330      int __builtin_ia32_comisdeq (v2df, v2df)
30331      int __builtin_ia32_comisdlt (v2df, v2df)
30332      int __builtin_ia32_comisdle (v2df, v2df)
30333      int __builtin_ia32_comisdgt (v2df, v2df)
30334      int __builtin_ia32_comisdge (v2df, v2df)
30335      int __builtin_ia32_comisdneq (v2df, v2df)
30336      int __builtin_ia32_ucomisdeq (v2df, v2df)
30337      int __builtin_ia32_ucomisdlt (v2df, v2df)
30338      int __builtin_ia32_ucomisdle (v2df, v2df)
30339      int __builtin_ia32_ucomisdgt (v2df, v2df)
30340      int __builtin_ia32_ucomisdge (v2df, v2df)
30341      int __builtin_ia32_ucomisdneq (v2df, v2df)
30342      v2df __builtin_ia32_cmpeqpd (v2df, v2df)
30343      v2df __builtin_ia32_cmpltpd (v2df, v2df)
30344      v2df __builtin_ia32_cmplepd (v2df, v2df)
30345      v2df __builtin_ia32_cmpgtpd (v2df, v2df)
30346      v2df __builtin_ia32_cmpgepd (v2df, v2df)
30347      v2df __builtin_ia32_cmpunordpd (v2df, v2df)
30348      v2df __builtin_ia32_cmpneqpd (v2df, v2df)
30349      v2df __builtin_ia32_cmpnltpd (v2df, v2df)
30350      v2df __builtin_ia32_cmpnlepd (v2df, v2df)
30351      v2df __builtin_ia32_cmpngtpd (v2df, v2df)
30352      v2df __builtin_ia32_cmpngepd (v2df, v2df)
30353      v2df __builtin_ia32_cmpordpd (v2df, v2df)
30354      v2df __builtin_ia32_cmpeqsd (v2df, v2df)
30355      v2df __builtin_ia32_cmpltsd (v2df, v2df)
30356      v2df __builtin_ia32_cmplesd (v2df, v2df)
30357      v2df __builtin_ia32_cmpunordsd (v2df, v2df)
30358      v2df __builtin_ia32_cmpneqsd (v2df, v2df)
30359      v2df __builtin_ia32_cmpnltsd (v2df, v2df)
30360      v2df __builtin_ia32_cmpnlesd (v2df, v2df)
30361      v2df __builtin_ia32_cmpordsd (v2df, v2df)
30362      v2di __builtin_ia32_paddq (v2di, v2di)
30363      v2di __builtin_ia32_psubq (v2di, v2di)
30364      v2df __builtin_ia32_addpd (v2df, v2df)
30365      v2df __builtin_ia32_subpd (v2df, v2df)
30366      v2df __builtin_ia32_mulpd (v2df, v2df)
30367      v2df __builtin_ia32_divpd (v2df, v2df)
30368      v2df __builtin_ia32_addsd (v2df, v2df)
30369      v2df __builtin_ia32_subsd (v2df, v2df)
30370      v2df __builtin_ia32_mulsd (v2df, v2df)
30371      v2df __builtin_ia32_divsd (v2df, v2df)
30372      v2df __builtin_ia32_minpd (v2df, v2df)
30373      v2df __builtin_ia32_maxpd (v2df, v2df)
30374      v2df __builtin_ia32_minsd (v2df, v2df)
30375      v2df __builtin_ia32_maxsd (v2df, v2df)
30376      v2df __builtin_ia32_andpd (v2df, v2df)
30377      v2df __builtin_ia32_andnpd (v2df, v2df)
30378      v2df __builtin_ia32_orpd (v2df, v2df)
30379      v2df __builtin_ia32_xorpd (v2df, v2df)
30380      v2df __builtin_ia32_movsd (v2df, v2df)
30381      v2df __builtin_ia32_unpckhpd (v2df, v2df)
30382      v2df __builtin_ia32_unpcklpd (v2df, v2df)
30383      v16qi __builtin_ia32_paddb128 (v16qi, v16qi)
30384      v8hi __builtin_ia32_paddw128 (v8hi, v8hi)
30385      v4si __builtin_ia32_paddd128 (v4si, v4si)
30386      v2di __builtin_ia32_paddq128 (v2di, v2di)
30387      v16qi __builtin_ia32_psubb128 (v16qi, v16qi)
30388      v8hi __builtin_ia32_psubw128 (v8hi, v8hi)
30389      v4si __builtin_ia32_psubd128 (v4si, v4si)
30390      v2di __builtin_ia32_psubq128 (v2di, v2di)
30391      v8hi __builtin_ia32_pmullw128 (v8hi, v8hi)
30392      v8hi __builtin_ia32_pmulhw128 (v8hi, v8hi)
30393      v2di __builtin_ia32_pand128 (v2di, v2di)
30394      v2di __builtin_ia32_pandn128 (v2di, v2di)
30395      v2di __builtin_ia32_por128 (v2di, v2di)
30396      v2di __builtin_ia32_pxor128 (v2di, v2di)
30397      v16qi __builtin_ia32_pavgb128 (v16qi, v16qi)
30398      v8hi __builtin_ia32_pavgw128 (v8hi, v8hi)
30399      v16qi __builtin_ia32_pcmpeqb128 (v16qi, v16qi)
30400      v8hi __builtin_ia32_pcmpeqw128 (v8hi, v8hi)
30401      v4si __builtin_ia32_pcmpeqd128 (v4si, v4si)
30402      v16qi __builtin_ia32_pcmpgtb128 (v16qi, v16qi)
30403      v8hi __builtin_ia32_pcmpgtw128 (v8hi, v8hi)
30404      v4si __builtin_ia32_pcmpgtd128 (v4si, v4si)
30405      v16qi __builtin_ia32_pmaxub128 (v16qi, v16qi)
30406      v8hi __builtin_ia32_pmaxsw128 (v8hi, v8hi)
30407      v16qi __builtin_ia32_pminub128 (v16qi, v16qi)
30408      v8hi __builtin_ia32_pminsw128 (v8hi, v8hi)
30409      v16qi __builtin_ia32_punpckhbw128 (v16qi, v16qi)
30410      v8hi __builtin_ia32_punpckhwd128 (v8hi, v8hi)
30411      v4si __builtin_ia32_punpckhdq128 (v4si, v4si)
30412      v2di __builtin_ia32_punpckhqdq128 (v2di, v2di)
30413      v16qi __builtin_ia32_punpcklbw128 (v16qi, v16qi)
30414      v8hi __builtin_ia32_punpcklwd128 (v8hi, v8hi)
30415      v4si __builtin_ia32_punpckldq128 (v4si, v4si)
30416      v2di __builtin_ia32_punpcklqdq128 (v2di, v2di)
30417      v16qi __builtin_ia32_packsswb128 (v8hi, v8hi)
30418      v8hi __builtin_ia32_packssdw128 (v4si, v4si)
30419      v16qi __builtin_ia32_packuswb128 (v8hi, v8hi)
30420      v8hi __builtin_ia32_pmulhuw128 (v8hi, v8hi)
30421      void __builtin_ia32_maskmovdqu (v16qi, v16qi)
30422      v2df __builtin_ia32_loadupd (double *)
30423      void __builtin_ia32_storeupd (double *, v2df)
30424      v2df __builtin_ia32_loadhpd (v2df, double const *)
30425      v2df __builtin_ia32_loadlpd (v2df, double const *)
30426      int __builtin_ia32_movmskpd (v2df)
30427      int __builtin_ia32_pmovmskb128 (v16qi)
30428      void __builtin_ia32_movnti (int *, int)
30429      void __builtin_ia32_movntpd (double *, v2df)
30430      void __builtin_ia32_movntdq (v2df *, v2df)
30431      v4si __builtin_ia32_pshufd (v4si, int)
30432      v8hi __builtin_ia32_pshuflw (v8hi, int)
30433      v8hi __builtin_ia32_pshufhw (v8hi, int)
30434      v2di __builtin_ia32_psadbw128 (v16qi, v16qi)
30435      v2df __builtin_ia32_sqrtpd (v2df)
30436      v2df __builtin_ia32_sqrtsd (v2df)
30437      v2df __builtin_ia32_shufpd (v2df, v2df, int)
30438      v2df __builtin_ia32_cvtdq2pd (v4si)
30439      v4sf __builtin_ia32_cvtdq2ps (v4si)
30440      v4si __builtin_ia32_cvtpd2dq (v2df)
30441      v2si __builtin_ia32_cvtpd2pi (v2df)
30442      v4sf __builtin_ia32_cvtpd2ps (v2df)
30443      v4si __builtin_ia32_cvttpd2dq (v2df)
30444      v2si __builtin_ia32_cvttpd2pi (v2df)
30445      v2df __builtin_ia32_cvtpi2pd (v2si)
30446      int __builtin_ia32_cvtsd2si (v2df)
30447      int __builtin_ia32_cvttsd2si (v2df)
30448      long long __builtin_ia32_cvtsd2si64 (v2df)
30449      long long __builtin_ia32_cvttsd2si64 (v2df)
30450      v4si __builtin_ia32_cvtps2dq (v4sf)
30451      v2df __builtin_ia32_cvtps2pd (v4sf)
30452      v4si __builtin_ia32_cvttps2dq (v4sf)
30453      v2df __builtin_ia32_cvtsi2sd (v2df, int)
30454      v2df __builtin_ia32_cvtsi642sd (v2df, long long)
30455      v4sf __builtin_ia32_cvtsd2ss (v4sf, v2df)
30456      v2df __builtin_ia32_cvtss2sd (v2df, v4sf)
30457      void __builtin_ia32_clflush (const void *)
30458      void __builtin_ia32_lfence (void)
30459      void __builtin_ia32_mfence (void)
30460      v16qi __builtin_ia32_loaddqu (const char *)
30461      void __builtin_ia32_storedqu (char *, v16qi)
30462      v1di __builtin_ia32_pmuludq (v2si, v2si)
30463      v2di __builtin_ia32_pmuludq128 (v4si, v4si)
30464      v8hi __builtin_ia32_psllw128 (v8hi, v8hi)
30465      v4si __builtin_ia32_pslld128 (v4si, v4si)
30466      v2di __builtin_ia32_psllq128 (v2di, v2di)
30467      v8hi __builtin_ia32_psrlw128 (v8hi, v8hi)
30468      v4si __builtin_ia32_psrld128 (v4si, v4si)
30469      v2di __builtin_ia32_psrlq128 (v2di, v2di)
30470      v8hi __builtin_ia32_psraw128 (v8hi, v8hi)
30471      v4si __builtin_ia32_psrad128 (v4si, v4si)
30472      v2di __builtin_ia32_pslldqi128 (v2di, int)
30473      v8hi __builtin_ia32_psllwi128 (v8hi, int)
30474      v4si __builtin_ia32_pslldi128 (v4si, int)
30475      v2di __builtin_ia32_psllqi128 (v2di, int)
30476      v2di __builtin_ia32_psrldqi128 (v2di, int)
30477      v8hi __builtin_ia32_psrlwi128 (v8hi, int)
30478      v4si __builtin_ia32_psrldi128 (v4si, int)
30479      v2di __builtin_ia32_psrlqi128 (v2di, int)
30480      v8hi __builtin_ia32_psrawi128 (v8hi, int)
30481      v4si __builtin_ia32_psradi128 (v4si, int)
30482      v4si __builtin_ia32_pmaddwd128 (v8hi, v8hi)
30483      v2di __builtin_ia32_movq128 (v2di)
30485  The following built-in functions are available when `-msse3' is used.
30486 All of them generate the machine instruction that is part of the name.
30488      v2df __builtin_ia32_addsubpd (v2df, v2df)
30489      v4sf __builtin_ia32_addsubps (v4sf, v4sf)
30490      v2df __builtin_ia32_haddpd (v2df, v2df)
30491      v4sf __builtin_ia32_haddps (v4sf, v4sf)
30492      v2df __builtin_ia32_hsubpd (v2df, v2df)
30493      v4sf __builtin_ia32_hsubps (v4sf, v4sf)
30494      v16qi __builtin_ia32_lddqu (char const *)
30495      void __builtin_ia32_monitor (void *, unsigned int, unsigned int)
30496      v2df __builtin_ia32_movddup (v2df)
30497      v4sf __builtin_ia32_movshdup (v4sf)
30498      v4sf __builtin_ia32_movsldup (v4sf)
30499      void __builtin_ia32_mwait (unsigned int, unsigned int)
30501  The following built-in functions are available when `-msse3' is used.
30503 `v2df __builtin_ia32_loadddup (double const *)'
30504      Generates the `movddup' machine instruction as a load from memory.
30506  The following built-in functions are available when `-mssse3' is used.
30507 All of them generate the machine instruction that is part of the name
30508 with MMX registers.
30510      v2si __builtin_ia32_phaddd (v2si, v2si)
30511      v4hi __builtin_ia32_phaddw (v4hi, v4hi)
30512      v4hi __builtin_ia32_phaddsw (v4hi, v4hi)
30513      v2si __builtin_ia32_phsubd (v2si, v2si)
30514      v4hi __builtin_ia32_phsubw (v4hi, v4hi)
30515      v4hi __builtin_ia32_phsubsw (v4hi, v4hi)
30516      v4hi __builtin_ia32_pmaddubsw (v8qi, v8qi)
30517      v4hi __builtin_ia32_pmulhrsw (v4hi, v4hi)
30518      v8qi __builtin_ia32_pshufb (v8qi, v8qi)
30519      v8qi __builtin_ia32_psignb (v8qi, v8qi)
30520      v2si __builtin_ia32_psignd (v2si, v2si)
30521      v4hi __builtin_ia32_psignw (v4hi, v4hi)
30522      v1di __builtin_ia32_palignr (v1di, v1di, int)
30523      v8qi __builtin_ia32_pabsb (v8qi)
30524      v2si __builtin_ia32_pabsd (v2si)
30525      v4hi __builtin_ia32_pabsw (v4hi)
30527  The following built-in functions are available when `-mssse3' is used.
30528 All of them generate the machine instruction that is part of the name
30529 with SSE registers.
30531      v4si __builtin_ia32_phaddd128 (v4si, v4si)
30532      v8hi __builtin_ia32_phaddw128 (v8hi, v8hi)
30533      v8hi __builtin_ia32_phaddsw128 (v8hi, v8hi)
30534      v4si __builtin_ia32_phsubd128 (v4si, v4si)
30535      v8hi __builtin_ia32_phsubw128 (v8hi, v8hi)
30536      v8hi __builtin_ia32_phsubsw128 (v8hi, v8hi)
30537      v8hi __builtin_ia32_pmaddubsw128 (v16qi, v16qi)
30538      v8hi __builtin_ia32_pmulhrsw128 (v8hi, v8hi)
30539      v16qi __builtin_ia32_pshufb128 (v16qi, v16qi)
30540      v16qi __builtin_ia32_psignb128 (v16qi, v16qi)
30541      v4si __builtin_ia32_psignd128 (v4si, v4si)
30542      v8hi __builtin_ia32_psignw128 (v8hi, v8hi)
30543      v2di __builtin_ia32_palignr128 (v2di, v2di, int)
30544      v16qi __builtin_ia32_pabsb128 (v16qi)
30545      v4si __builtin_ia32_pabsd128 (v4si)
30546      v8hi __builtin_ia32_pabsw128 (v8hi)
30548  The following built-in functions are available when `-msse4.1' is
30549 used.  All of them generate the machine instruction that is part of the
30550 name.
30552      v2df __builtin_ia32_blendpd (v2df, v2df, const int)
30553      v4sf __builtin_ia32_blendps (v4sf, v4sf, const int)
30554      v2df __builtin_ia32_blendvpd (v2df, v2df, v2df)
30555      v4sf __builtin_ia32_blendvps (v4sf, v4sf, v4sf)
30556      v2df __builtin_ia32_dppd (v2df, v2df, const int)
30557      v4sf __builtin_ia32_dpps (v4sf, v4sf, const int)
30558      v4sf __builtin_ia32_insertps128 (v4sf, v4sf, const int)
30559      v2di __builtin_ia32_movntdqa (v2di *);
30560      v16qi __builtin_ia32_mpsadbw128 (v16qi, v16qi, const int)
30561      v8hi __builtin_ia32_packusdw128 (v4si, v4si)
30562      v16qi __builtin_ia32_pblendvb128 (v16qi, v16qi, v16qi)
30563      v8hi __builtin_ia32_pblendw128 (v8hi, v8hi, const int)
30564      v2di __builtin_ia32_pcmpeqq (v2di, v2di)
30565      v8hi __builtin_ia32_phminposuw128 (v8hi)
30566      v16qi __builtin_ia32_pmaxsb128 (v16qi, v16qi)
30567      v4si __builtin_ia32_pmaxsd128 (v4si, v4si)
30568      v4si __builtin_ia32_pmaxud128 (v4si, v4si)
30569      v8hi __builtin_ia32_pmaxuw128 (v8hi, v8hi)
30570      v16qi __builtin_ia32_pminsb128 (v16qi, v16qi)
30571      v4si __builtin_ia32_pminsd128 (v4si, v4si)
30572      v4si __builtin_ia32_pminud128 (v4si, v4si)
30573      v8hi __builtin_ia32_pminuw128 (v8hi, v8hi)
30574      v4si __builtin_ia32_pmovsxbd128 (v16qi)
30575      v2di __builtin_ia32_pmovsxbq128 (v16qi)
30576      v8hi __builtin_ia32_pmovsxbw128 (v16qi)
30577      v2di __builtin_ia32_pmovsxdq128 (v4si)
30578      v4si __builtin_ia32_pmovsxwd128 (v8hi)
30579      v2di __builtin_ia32_pmovsxwq128 (v8hi)
30580      v4si __builtin_ia32_pmovzxbd128 (v16qi)
30581      v2di __builtin_ia32_pmovzxbq128 (v16qi)
30582      v8hi __builtin_ia32_pmovzxbw128 (v16qi)
30583      v2di __builtin_ia32_pmovzxdq128 (v4si)
30584      v4si __builtin_ia32_pmovzxwd128 (v8hi)
30585      v2di __builtin_ia32_pmovzxwq128 (v8hi)
30586      v2di __builtin_ia32_pmuldq128 (v4si, v4si)
30587      v4si __builtin_ia32_pmulld128 (v4si, v4si)
30588      int __builtin_ia32_ptestc128 (v2di, v2di)
30589      int __builtin_ia32_ptestnzc128 (v2di, v2di)
30590      int __builtin_ia32_ptestz128 (v2di, v2di)
30591      v2df __builtin_ia32_roundpd (v2df, const int)
30592      v4sf __builtin_ia32_roundps (v4sf, const int)
30593      v2df __builtin_ia32_roundsd (v2df, v2df, const int)
30594      v4sf __builtin_ia32_roundss (v4sf, v4sf, const int)
30596  The following built-in functions are available when `-msse4.1' is used.
30598 `v4sf __builtin_ia32_vec_set_v4sf (v4sf, float, const int)'
30599      Generates the `insertps' machine instruction.
30601 `int __builtin_ia32_vec_ext_v16qi (v16qi, const int)'
30602      Generates the `pextrb' machine instruction.
30604 `v16qi __builtin_ia32_vec_set_v16qi (v16qi, int, const int)'
30605      Generates the `pinsrb' machine instruction.
30607 `v4si __builtin_ia32_vec_set_v4si (v4si, int, const int)'
30608      Generates the `pinsrd' machine instruction.
30610 `v2di __builtin_ia32_vec_set_v2di (v2di, long long, const int)'
30611      Generates the `pinsrq' machine instruction in 64bit mode.
30613  The following built-in functions are changed to generate new SSE4.1
30614 instructions when `-msse4.1' is used.
30616 `float __builtin_ia32_vec_ext_v4sf (v4sf, const int)'
30617      Generates the `extractps' machine instruction.
30619 `int __builtin_ia32_vec_ext_v4si (v4si, const int)'
30620      Generates the `pextrd' machine instruction.
30622 `long long __builtin_ia32_vec_ext_v2di (v2di, const int)'
30623      Generates the `pextrq' machine instruction in 64bit mode.
30625  The following built-in functions are available when `-msse4.2' is
30626 used.  All of them generate the machine instruction that is part of the
30627 name.
30629      v16qi __builtin_ia32_pcmpestrm128 (v16qi, int, v16qi, int, const int)
30630      int __builtin_ia32_pcmpestri128 (v16qi, int, v16qi, int, const int)
30631      int __builtin_ia32_pcmpestria128 (v16qi, int, v16qi, int, const int)
30632      int __builtin_ia32_pcmpestric128 (v16qi, int, v16qi, int, const int)
30633      int __builtin_ia32_pcmpestrio128 (v16qi, int, v16qi, int, const int)
30634      int __builtin_ia32_pcmpestris128 (v16qi, int, v16qi, int, const int)
30635      int __builtin_ia32_pcmpestriz128 (v16qi, int, v16qi, int, const int)
30636      v16qi __builtin_ia32_pcmpistrm128 (v16qi, v16qi, const int)
30637      int __builtin_ia32_pcmpistri128 (v16qi, v16qi, const int)
30638      int __builtin_ia32_pcmpistria128 (v16qi, v16qi, const int)
30639      int __builtin_ia32_pcmpistric128 (v16qi, v16qi, const int)
30640      int __builtin_ia32_pcmpistrio128 (v16qi, v16qi, const int)
30641      int __builtin_ia32_pcmpistris128 (v16qi, v16qi, const int)
30642      int __builtin_ia32_pcmpistriz128 (v16qi, v16qi, const int)
30643      v2di __builtin_ia32_pcmpgtq (v2di, v2di)
30645  The following built-in functions are available when `-msse4.2' is used.
30647 `unsigned int __builtin_ia32_crc32qi (unsigned int, unsigned char)'
30648      Generates the `crc32b' machine instruction.
30650 `unsigned int __builtin_ia32_crc32hi (unsigned int, unsigned short)'
30651      Generates the `crc32w' machine instruction.
30653 `unsigned int __builtin_ia32_crc32si (unsigned int, unsigned int)'
30654      Generates the `crc32l' machine instruction.
30656 `unsigned long long __builtin_ia32_crc32di (unsigned long long, unsigned long long)'
30658  The following built-in functions are changed to generate new SSE4.2
30659 instructions when `-msse4.2' is used.
30661 `int __builtin_popcount (unsigned int)'
30662      Generates the `popcntl' machine instruction.
30664 `int __builtin_popcountl (unsigned long)'
30665      Generates the `popcntl' or `popcntq' machine instruction,
30666      depending on the size of `unsigned long'.
30668 `int __builtin_popcountll (unsigned long long)'
30669      Generates the `popcntq' machine instruction.
30671  The following built-in functions are available when `-mavx' is used.
30672 All of them generate the machine instruction that is part of the name.
30674      v4df __builtin_ia32_addpd256 (v4df,v4df)
30675      v8sf __builtin_ia32_addps256 (v8sf,v8sf)
30676      v4df __builtin_ia32_addsubpd256 (v4df,v4df)
30677      v8sf __builtin_ia32_addsubps256 (v8sf,v8sf)
30678      v4df __builtin_ia32_andnpd256 (v4df,v4df)
30679      v8sf __builtin_ia32_andnps256 (v8sf,v8sf)
30680      v4df __builtin_ia32_andpd256 (v4df,v4df)
30681      v8sf __builtin_ia32_andps256 (v8sf,v8sf)
30682      v4df __builtin_ia32_blendpd256 (v4df,v4df,int)
30683      v8sf __builtin_ia32_blendps256 (v8sf,v8sf,int)
30684      v4df __builtin_ia32_blendvpd256 (v4df,v4df,v4df)
30685      v8sf __builtin_ia32_blendvps256 (v8sf,v8sf,v8sf)
30686      v2df __builtin_ia32_cmppd (v2df,v2df,int)
30687      v4df __builtin_ia32_cmppd256 (v4df,v4df,int)
30688      v4sf __builtin_ia32_cmpps (v4sf,v4sf,int)
30689      v8sf __builtin_ia32_cmpps256 (v8sf,v8sf,int)
30690      v2df __builtin_ia32_cmpsd (v2df,v2df,int)
30691      v4sf __builtin_ia32_cmpss (v4sf,v4sf,int)
30692      v4df __builtin_ia32_cvtdq2pd256 (v4si)
30693      v8sf __builtin_ia32_cvtdq2ps256 (v8si)
30694      v4si __builtin_ia32_cvtpd2dq256 (v4df)
30695      v4sf __builtin_ia32_cvtpd2ps256 (v4df)
30696      v8si __builtin_ia32_cvtps2dq256 (v8sf)
30697      v4df __builtin_ia32_cvtps2pd256 (v4sf)
30698      v4si __builtin_ia32_cvttpd2dq256 (v4df)
30699      v8si __builtin_ia32_cvttps2dq256 (v8sf)
30700      v4df __builtin_ia32_divpd256 (v4df,v4df)
30701      v8sf __builtin_ia32_divps256 (v8sf,v8sf)
30702      v8sf __builtin_ia32_dpps256 (v8sf,v8sf,int)
30703      v4df __builtin_ia32_haddpd256 (v4df,v4df)
30704      v8sf __builtin_ia32_haddps256 (v8sf,v8sf)
30705      v4df __builtin_ia32_hsubpd256 (v4df,v4df)
30706      v8sf __builtin_ia32_hsubps256 (v8sf,v8sf)
30707      v32qi __builtin_ia32_lddqu256 (pcchar)
30708      v32qi __builtin_ia32_loaddqu256 (pcchar)
30709      v4df __builtin_ia32_loadupd256 (pcdouble)
30710      v8sf __builtin_ia32_loadups256 (pcfloat)
30711      v2df __builtin_ia32_maskloadpd (pcv2df,v2df)
30712      v4df __builtin_ia32_maskloadpd256 (pcv4df,v4df)
30713      v4sf __builtin_ia32_maskloadps (pcv4sf,v4sf)
30714      v8sf __builtin_ia32_maskloadps256 (pcv8sf,v8sf)
30715      void __builtin_ia32_maskstorepd (pv2df,v2df,v2df)
30716      void __builtin_ia32_maskstorepd256 (pv4df,v4df,v4df)
30717      void __builtin_ia32_maskstoreps (pv4sf,v4sf,v4sf)
30718      void __builtin_ia32_maskstoreps256 (pv8sf,v8sf,v8sf)
30719      v4df __builtin_ia32_maxpd256 (v4df,v4df)
30720      v8sf __builtin_ia32_maxps256 (v8sf,v8sf)
30721      v4df __builtin_ia32_minpd256 (v4df,v4df)
30722      v8sf __builtin_ia32_minps256 (v8sf,v8sf)
30723      v4df __builtin_ia32_movddup256 (v4df)
30724      int __builtin_ia32_movmskpd256 (v4df)
30725      int __builtin_ia32_movmskps256 (v8sf)
30726      v8sf __builtin_ia32_movshdup256 (v8sf)
30727      v8sf __builtin_ia32_movsldup256 (v8sf)
30728      v4df __builtin_ia32_mulpd256 (v4df,v4df)
30729      v8sf __builtin_ia32_mulps256 (v8sf,v8sf)
30730      v4df __builtin_ia32_orpd256 (v4df,v4df)
30731      v8sf __builtin_ia32_orps256 (v8sf,v8sf)
30732      v2df __builtin_ia32_pd_pd256 (v4df)
30733      v4df __builtin_ia32_pd256_pd (v2df)
30734      v4sf __builtin_ia32_ps_ps256 (v8sf)
30735      v8sf __builtin_ia32_ps256_ps (v4sf)
30736      int __builtin_ia32_ptestc256 (v4di,v4di,ptest)
30737      int __builtin_ia32_ptestnzc256 (v4di,v4di,ptest)
30738      int __builtin_ia32_ptestz256 (v4di,v4di,ptest)
30739      v8sf __builtin_ia32_rcpps256 (v8sf)
30740      v4df __builtin_ia32_roundpd256 (v4df,int)
30741      v8sf __builtin_ia32_roundps256 (v8sf,int)
30742      v8sf __builtin_ia32_rsqrtps_nr256 (v8sf)
30743      v8sf __builtin_ia32_rsqrtps256 (v8sf)
30744      v4df __builtin_ia32_shufpd256 (v4df,v4df,int)
30745      v8sf __builtin_ia32_shufps256 (v8sf,v8sf,int)
30746      v4si __builtin_ia32_si_si256 (v8si)
30747      v8si __builtin_ia32_si256_si (v4si)
30748      v4df __builtin_ia32_sqrtpd256 (v4df)
30749      v8sf __builtin_ia32_sqrtps_nr256 (v8sf)
30750      v8sf __builtin_ia32_sqrtps256 (v8sf)
30751      void __builtin_ia32_storedqu256 (pchar,v32qi)
30752      void __builtin_ia32_storeupd256 (pdouble,v4df)
30753      void __builtin_ia32_storeups256 (pfloat,v8sf)
30754      v4df __builtin_ia32_subpd256 (v4df,v4df)
30755      v8sf __builtin_ia32_subps256 (v8sf,v8sf)
30756      v4df __builtin_ia32_unpckhpd256 (v4df,v4df)
30757      v8sf __builtin_ia32_unpckhps256 (v8sf,v8sf)
30758      v4df __builtin_ia32_unpcklpd256 (v4df,v4df)
30759      v8sf __builtin_ia32_unpcklps256 (v8sf,v8sf)
30760      v4df __builtin_ia32_vbroadcastf128_pd256 (pcv2df)
30761      v8sf __builtin_ia32_vbroadcastf128_ps256 (pcv4sf)
30762      v4df __builtin_ia32_vbroadcastsd256 (pcdouble)
30763      v4sf __builtin_ia32_vbroadcastss (pcfloat)
30764      v8sf __builtin_ia32_vbroadcastss256 (pcfloat)
30765      v2df __builtin_ia32_vextractf128_pd256 (v4df,int)
30766      v4sf __builtin_ia32_vextractf128_ps256 (v8sf,int)
30767      v4si __builtin_ia32_vextractf128_si256 (v8si,int)
30768      v4df __builtin_ia32_vinsertf128_pd256 (v4df,v2df,int)
30769      v8sf __builtin_ia32_vinsertf128_ps256 (v8sf,v4sf,int)
30770      v8si __builtin_ia32_vinsertf128_si256 (v8si,v4si,int)
30771      v4df __builtin_ia32_vperm2f128_pd256 (v4df,v4df,int)
30772      v8sf __builtin_ia32_vperm2f128_ps256 (v8sf,v8sf,int)
30773      v8si __builtin_ia32_vperm2f128_si256 (v8si,v8si,int)
30774      v2df __builtin_ia32_vpermil2pd (v2df,v2df,v2di,int)
30775      v4df __builtin_ia32_vpermil2pd256 (v4df,v4df,v4di,int)
30776      v4sf __builtin_ia32_vpermil2ps (v4sf,v4sf,v4si,int)
30777      v8sf __builtin_ia32_vpermil2ps256 (v8sf,v8sf,v8si,int)
30778      v2df __builtin_ia32_vpermilpd (v2df,int)
30779      v4df __builtin_ia32_vpermilpd256 (v4df,int)
30780      v4sf __builtin_ia32_vpermilps (v4sf,int)
30781      v8sf __builtin_ia32_vpermilps256 (v8sf,int)
30782      v2df __builtin_ia32_vpermilvarpd (v2df,v2di)
30783      v4df __builtin_ia32_vpermilvarpd256 (v4df,v4di)
30784      v4sf __builtin_ia32_vpermilvarps (v4sf,v4si)
30785      v8sf __builtin_ia32_vpermilvarps256 (v8sf,v8si)
30786      int __builtin_ia32_vtestcpd (v2df,v2df,ptest)
30787      int __builtin_ia32_vtestcpd256 (v4df,v4df,ptest)
30788      int __builtin_ia32_vtestcps (v4sf,v4sf,ptest)
30789      int __builtin_ia32_vtestcps256 (v8sf,v8sf,ptest)
30790      int __builtin_ia32_vtestnzcpd (v2df,v2df,ptest)
30791      int __builtin_ia32_vtestnzcpd256 (v4df,v4df,ptest)
30792      int __builtin_ia32_vtestnzcps (v4sf,v4sf,ptest)
30793      int __builtin_ia32_vtestnzcps256 (v8sf,v8sf,ptest)
30794      int __builtin_ia32_vtestzpd (v2df,v2df,ptest)
30795      int __builtin_ia32_vtestzpd256 (v4df,v4df,ptest)
30796      int __builtin_ia32_vtestzps (v4sf,v4sf,ptest)
30797      int __builtin_ia32_vtestzps256 (v8sf,v8sf,ptest)
30798      void __builtin_ia32_vzeroall (void)
30799      void __builtin_ia32_vzeroupper (void)
30800      v4df __builtin_ia32_xorpd256 (v4df,v4df)
30801      v8sf __builtin_ia32_xorps256 (v8sf,v8sf)
30803  The following built-in functions are available when `-maes' is used.
30804 All of them generate the machine instruction that is part of the name.
30806      v2di __builtin_ia32_aesenc128 (v2di, v2di)
30807      v2di __builtin_ia32_aesenclast128 (v2di, v2di)
30808      v2di __builtin_ia32_aesdec128 (v2di, v2di)
30809      v2di __builtin_ia32_aesdeclast128 (v2di, v2di)
30810      v2di __builtin_ia32_aeskeygenassist128 (v2di, const int)
30811      v2di __builtin_ia32_aesimc128 (v2di)
30813  The following built-in function is available when `-mpclmul' is used.
30815 `v2di __builtin_ia32_pclmulqdq128 (v2di, v2di, const int)'
30816      Generates the `pclmulqdq' machine instruction.
30818  The following built-in functions are available when `-msse4a' is used.
30819 All of them generate the machine instruction that is part of the name.
30821      void __builtin_ia32_movntsd (double *, v2df)
30822      void __builtin_ia32_movntss (float *, v4sf)
30823      v2di __builtin_ia32_extrq  (v2di, v16qi)
30824      v2di __builtin_ia32_extrqi (v2di, const unsigned int, const unsigned int)
30825      v2di __builtin_ia32_insertq (v2di, v2di)
30826      v2di __builtin_ia32_insertqi (v2di, v2di, const unsigned int, const unsigned int)
30828  The following built-in functions are available when `-msse5' is used.
30829 All of them generate the machine instruction that is part of the name
30830 with MMX registers.
30832      v2df __builtin_ia32_comeqpd (v2df, v2df)
30833      v2df __builtin_ia32_comeqps (v2df, v2df)
30834      v4sf __builtin_ia32_comeqsd (v4sf, v4sf)
30835      v4sf __builtin_ia32_comeqss (v4sf, v4sf)
30836      v2df __builtin_ia32_comfalsepd (v2df, v2df)
30837      v2df __builtin_ia32_comfalseps (v2df, v2df)
30838      v4sf __builtin_ia32_comfalsesd (v4sf, v4sf)
30839      v4sf __builtin_ia32_comfalsess (v4sf, v4sf)
30840      v2df __builtin_ia32_comgepd (v2df, v2df)
30841      v2df __builtin_ia32_comgeps (v2df, v2df)
30842      v4sf __builtin_ia32_comgesd (v4sf, v4sf)
30843      v4sf __builtin_ia32_comgess (v4sf, v4sf)
30844      v2df __builtin_ia32_comgtpd (v2df, v2df)
30845      v2df __builtin_ia32_comgtps (v2df, v2df)
30846      v4sf __builtin_ia32_comgtsd (v4sf, v4sf)
30847      v4sf __builtin_ia32_comgtss (v4sf, v4sf)
30848      v2df __builtin_ia32_comlepd (v2df, v2df)
30849      v2df __builtin_ia32_comleps (v2df, v2df)
30850      v4sf __builtin_ia32_comlesd (v4sf, v4sf)
30851      v4sf __builtin_ia32_comless (v4sf, v4sf)
30852      v2df __builtin_ia32_comltpd (v2df, v2df)
30853      v2df __builtin_ia32_comltps (v2df, v2df)
30854      v4sf __builtin_ia32_comltsd (v4sf, v4sf)
30855      v4sf __builtin_ia32_comltss (v4sf, v4sf)
30856      v2df __builtin_ia32_comnepd (v2df, v2df)
30857      v2df __builtin_ia32_comneps (v2df, v2df)
30858      v4sf __builtin_ia32_comnesd (v4sf, v4sf)
30859      v4sf __builtin_ia32_comness (v4sf, v4sf)
30860      v2df __builtin_ia32_comordpd (v2df, v2df)
30861      v2df __builtin_ia32_comordps (v2df, v2df)
30862      v4sf __builtin_ia32_comordsd (v4sf, v4sf)
30863      v4sf __builtin_ia32_comordss (v4sf, v4sf)
30864      v2df __builtin_ia32_comtruepd (v2df, v2df)
30865      v2df __builtin_ia32_comtrueps (v2df, v2df)
30866      v4sf __builtin_ia32_comtruesd (v4sf, v4sf)
30867      v4sf __builtin_ia32_comtruess (v4sf, v4sf)
30868      v2df __builtin_ia32_comueqpd (v2df, v2df)
30869      v2df __builtin_ia32_comueqps (v2df, v2df)
30870      v4sf __builtin_ia32_comueqsd (v4sf, v4sf)
30871      v4sf __builtin_ia32_comueqss (v4sf, v4sf)
30872      v2df __builtin_ia32_comugepd (v2df, v2df)
30873      v2df __builtin_ia32_comugeps (v2df, v2df)
30874      v4sf __builtin_ia32_comugesd (v4sf, v4sf)
30875      v4sf __builtin_ia32_comugess (v4sf, v4sf)
30876      v2df __builtin_ia32_comugtpd (v2df, v2df)
30877      v2df __builtin_ia32_comugtps (v2df, v2df)
30878      v4sf __builtin_ia32_comugtsd (v4sf, v4sf)
30879      v4sf __builtin_ia32_comugtss (v4sf, v4sf)
30880      v2df __builtin_ia32_comulepd (v2df, v2df)
30881      v2df __builtin_ia32_comuleps (v2df, v2df)
30882      v4sf __builtin_ia32_comulesd (v4sf, v4sf)
30883      v4sf __builtin_ia32_comuless (v4sf, v4sf)
30884      v2df __builtin_ia32_comultpd (v2df, v2df)
30885      v2df __builtin_ia32_comultps (v2df, v2df)
30886      v4sf __builtin_ia32_comultsd (v4sf, v4sf)
30887      v4sf __builtin_ia32_comultss (v4sf, v4sf)
30888      v2df __builtin_ia32_comunepd (v2df, v2df)
30889      v2df __builtin_ia32_comuneps (v2df, v2df)
30890      v4sf __builtin_ia32_comunesd (v4sf, v4sf)
30891      v4sf __builtin_ia32_comuness (v4sf, v4sf)
30892      v2df __builtin_ia32_comunordpd (v2df, v2df)
30893      v2df __builtin_ia32_comunordps (v2df, v2df)
30894      v4sf __builtin_ia32_comunordsd (v4sf, v4sf)
30895      v4sf __builtin_ia32_comunordss (v4sf, v4sf)
30896      v2df __builtin_ia32_fmaddpd (v2df, v2df, v2df)
30897      v4sf __builtin_ia32_fmaddps (v4sf, v4sf, v4sf)
30898      v2df __builtin_ia32_fmaddsd (v2df, v2df, v2df)
30899      v4sf __builtin_ia32_fmaddss (v4sf, v4sf, v4sf)
30900      v2df __builtin_ia32_fmsubpd (v2df, v2df, v2df)
30901      v4sf __builtin_ia32_fmsubps (v4sf, v4sf, v4sf)
30902      v2df __builtin_ia32_fmsubsd (v2df, v2df, v2df)
30903      v4sf __builtin_ia32_fmsubss (v4sf, v4sf, v4sf)
30904      v2df __builtin_ia32_fnmaddpd (v2df, v2df, v2df)
30905      v4sf __builtin_ia32_fnmaddps (v4sf, v4sf, v4sf)
30906      v2df __builtin_ia32_fnmaddsd (v2df, v2df, v2df)
30907      v4sf __builtin_ia32_fnmaddss (v4sf, v4sf, v4sf)
30908      v2df __builtin_ia32_fnmsubpd (v2df, v2df, v2df)
30909      v4sf __builtin_ia32_fnmsubps (v4sf, v4sf, v4sf)
30910      v2df __builtin_ia32_fnmsubsd (v2df, v2df, v2df)
30911      v4sf __builtin_ia32_fnmsubss (v4sf, v4sf, v4sf)
30912      v2df __builtin_ia32_frczpd (v2df)
30913      v4sf __builtin_ia32_frczps (v4sf)
30914      v2df __builtin_ia32_frczsd (v2df, v2df)
30915      v4sf __builtin_ia32_frczss (v4sf, v4sf)
30916      v2di __builtin_ia32_pcmov (v2di, v2di, v2di)
30917      v2di __builtin_ia32_pcmov_v2di (v2di, v2di, v2di)
30918      v4si __builtin_ia32_pcmov_v4si (v4si, v4si, v4si)
30919      v8hi __builtin_ia32_pcmov_v8hi (v8hi, v8hi, v8hi)
30920      v16qi __builtin_ia32_pcmov_v16qi (v16qi, v16qi, v16qi)
30921      v2df __builtin_ia32_pcmov_v2df (v2df, v2df, v2df)
30922      v4sf __builtin_ia32_pcmov_v4sf (v4sf, v4sf, v4sf)
30923      v16qi __builtin_ia32_pcomeqb (v16qi, v16qi)
30924      v8hi __builtin_ia32_pcomeqw (v8hi, v8hi)
30925      v4si __builtin_ia32_pcomeqd (v4si, v4si)
30926      v2di __builtin_ia32_pcomeqq (v2di, v2di)
30927      v16qi __builtin_ia32_pcomequb (v16qi, v16qi)
30928      v4si __builtin_ia32_pcomequd (v4si, v4si)
30929      v2di __builtin_ia32_pcomequq (v2di, v2di)
30930      v8hi __builtin_ia32_pcomequw (v8hi, v8hi)
30931      v8hi __builtin_ia32_pcomeqw (v8hi, v8hi)
30932      v16qi __builtin_ia32_pcomfalseb (v16qi, v16qi)
30933      v4si __builtin_ia32_pcomfalsed (v4si, v4si)
30934      v2di __builtin_ia32_pcomfalseq (v2di, v2di)
30935      v16qi __builtin_ia32_pcomfalseub (v16qi, v16qi)
30936      v4si __builtin_ia32_pcomfalseud (v4si, v4si)
30937      v2di __builtin_ia32_pcomfalseuq (v2di, v2di)
30938      v8hi __builtin_ia32_pcomfalseuw (v8hi, v8hi)
30939      v8hi __builtin_ia32_pcomfalsew (v8hi, v8hi)
30940      v16qi __builtin_ia32_pcomgeb (v16qi, v16qi)
30941      v4si __builtin_ia32_pcomged (v4si, v4si)
30942      v2di __builtin_ia32_pcomgeq (v2di, v2di)
30943      v16qi __builtin_ia32_pcomgeub (v16qi, v16qi)
30944      v4si __builtin_ia32_pcomgeud (v4si, v4si)
30945      v2di __builtin_ia32_pcomgeuq (v2di, v2di)
30946      v8hi __builtin_ia32_pcomgeuw (v8hi, v8hi)
30947      v8hi __builtin_ia32_pcomgew (v8hi, v8hi)
30948      v16qi __builtin_ia32_pcomgtb (v16qi, v16qi)
30949      v4si __builtin_ia32_pcomgtd (v4si, v4si)
30950      v2di __builtin_ia32_pcomgtq (v2di, v2di)
30951      v16qi __builtin_ia32_pcomgtub (v16qi, v16qi)
30952      v4si __builtin_ia32_pcomgtud (v4si, v4si)
30953      v2di __builtin_ia32_pcomgtuq (v2di, v2di)
30954      v8hi __builtin_ia32_pcomgtuw (v8hi, v8hi)
30955      v8hi __builtin_ia32_pcomgtw (v8hi, v8hi)
30956      v16qi __builtin_ia32_pcomleb (v16qi, v16qi)
30957      v4si __builtin_ia32_pcomled (v4si, v4si)
30958      v2di __builtin_ia32_pcomleq (v2di, v2di)
30959      v16qi __builtin_ia32_pcomleub (v16qi, v16qi)
30960      v4si __builtin_ia32_pcomleud (v4si, v4si)
30961      v2di __builtin_ia32_pcomleuq (v2di, v2di)
30962      v8hi __builtin_ia32_pcomleuw (v8hi, v8hi)
30963      v8hi __builtin_ia32_pcomlew (v8hi, v8hi)
30964      v16qi __builtin_ia32_pcomltb (v16qi, v16qi)
30965      v4si __builtin_ia32_pcomltd (v4si, v4si)
30966      v2di __builtin_ia32_pcomltq (v2di, v2di)
30967      v16qi __builtin_ia32_pcomltub (v16qi, v16qi)
30968      v4si __builtin_ia32_pcomltud (v4si, v4si)
30969      v2di __builtin_ia32_pcomltuq (v2di, v2di)
30970      v8hi __builtin_ia32_pcomltuw (v8hi, v8hi)
30971      v8hi __builtin_ia32_pcomltw (v8hi, v8hi)
30972      v16qi __builtin_ia32_pcomneb (v16qi, v16qi)
30973      v4si __builtin_ia32_pcomned (v4si, v4si)
30974      v2di __builtin_ia32_pcomneq (v2di, v2di)
30975      v16qi __builtin_ia32_pcomneub (v16qi, v16qi)
30976      v4si __builtin_ia32_pcomneud (v4si, v4si)
30977      v2di __builtin_ia32_pcomneuq (v2di, v2di)
30978      v8hi __builtin_ia32_pcomneuw (v8hi, v8hi)
30979      v8hi __builtin_ia32_pcomnew (v8hi, v8hi)
30980      v16qi __builtin_ia32_pcomtrueb (v16qi, v16qi)
30981      v4si __builtin_ia32_pcomtrued (v4si, v4si)
30982      v2di __builtin_ia32_pcomtrueq (v2di, v2di)
30983      v16qi __builtin_ia32_pcomtrueub (v16qi, v16qi)
30984      v4si __builtin_ia32_pcomtrueud (v4si, v4si)
30985      v2di __builtin_ia32_pcomtrueuq (v2di, v2di)
30986      v8hi __builtin_ia32_pcomtrueuw (v8hi, v8hi)
30987      v8hi __builtin_ia32_pcomtruew (v8hi, v8hi)
30988      v4df __builtin_ia32_permpd (v2df, v2df, v16qi)
30989      v4sf __builtin_ia32_permps (v4sf, v4sf, v16qi)
30990      v4si __builtin_ia32_phaddbd (v16qi)
30991      v2di __builtin_ia32_phaddbq (v16qi)
30992      v8hi __builtin_ia32_phaddbw (v16qi)
30993      v2di __builtin_ia32_phadddq (v4si)
30994      v4si __builtin_ia32_phaddubd (v16qi)
30995      v2di __builtin_ia32_phaddubq (v16qi)
30996      v8hi __builtin_ia32_phaddubw (v16qi)
30997      v2di __builtin_ia32_phaddudq (v4si)
30998      v4si __builtin_ia32_phadduwd (v8hi)
30999      v2di __builtin_ia32_phadduwq (v8hi)
31000      v4si __builtin_ia32_phaddwd (v8hi)
31001      v2di __builtin_ia32_phaddwq (v8hi)
31002      v8hi __builtin_ia32_phsubbw (v16qi)
31003      v2di __builtin_ia32_phsubdq (v4si)
31004      v4si __builtin_ia32_phsubwd (v8hi)
31005      v4si __builtin_ia32_pmacsdd (v4si, v4si, v4si)
31006      v2di __builtin_ia32_pmacsdqh (v4si, v4si, v2di)
31007      v2di __builtin_ia32_pmacsdql (v4si, v4si, v2di)
31008      v4si __builtin_ia32_pmacssdd (v4si, v4si, v4si)
31009      v2di __builtin_ia32_pmacssdqh (v4si, v4si, v2di)
31010      v2di __builtin_ia32_pmacssdql (v4si, v4si, v2di)
31011      v4si __builtin_ia32_pmacsswd (v8hi, v8hi, v4si)
31012      v8hi __builtin_ia32_pmacssww (v8hi, v8hi, v8hi)
31013      v4si __builtin_ia32_pmacswd (v8hi, v8hi, v4si)
31014      v8hi __builtin_ia32_pmacsww (v8hi, v8hi, v8hi)
31015      v4si __builtin_ia32_pmadcsswd (v8hi, v8hi, v4si)
31016      v4si __builtin_ia32_pmadcswd (v8hi, v8hi, v4si)
31017      v16qi __builtin_ia32_pperm (v16qi, v16qi, v16qi)
31018      v16qi __builtin_ia32_protb (v16qi, v16qi)
31019      v4si __builtin_ia32_protd (v4si, v4si)
31020      v2di __builtin_ia32_protq (v2di, v2di)
31021      v8hi __builtin_ia32_protw (v8hi, v8hi)
31022      v16qi __builtin_ia32_pshab (v16qi, v16qi)
31023      v4si __builtin_ia32_pshad (v4si, v4si)
31024      v2di __builtin_ia32_pshaq (v2di, v2di)
31025      v8hi __builtin_ia32_pshaw (v8hi, v8hi)
31026      v16qi __builtin_ia32_pshlb (v16qi, v16qi)
31027      v4si __builtin_ia32_pshld (v4si, v4si)
31028      v2di __builtin_ia32_pshlq (v2di, v2di)
31029      v8hi __builtin_ia32_pshlw (v8hi, v8hi)
31031  The following builtin-in functions are available when `-msse5' is
31032 used.  The second argument must be an integer constant and generate the
31033 machine instruction that is part of the name with the `_imm' suffix
31034 removed.
31036      v16qi __builtin_ia32_protb_imm (v16qi, int)
31037      v4si __builtin_ia32_protd_imm (v4si, int)
31038      v2di __builtin_ia32_protq_imm (v2di, int)
31039      v8hi __builtin_ia32_protw_imm (v8hi, int)
31041  The following built-in functions are available when `-m3dnow' is used.
31042 All of them generate the machine instruction that is part of the name.
31044      void __builtin_ia32_femms (void)
31045      v8qi __builtin_ia32_pavgusb (v8qi, v8qi)
31046      v2si __builtin_ia32_pf2id (v2sf)
31047      v2sf __builtin_ia32_pfacc (v2sf, v2sf)
31048      v2sf __builtin_ia32_pfadd (v2sf, v2sf)
31049      v2si __builtin_ia32_pfcmpeq (v2sf, v2sf)
31050      v2si __builtin_ia32_pfcmpge (v2sf, v2sf)
31051      v2si __builtin_ia32_pfcmpgt (v2sf, v2sf)
31052      v2sf __builtin_ia32_pfmax (v2sf, v2sf)
31053      v2sf __builtin_ia32_pfmin (v2sf, v2sf)
31054      v2sf __builtin_ia32_pfmul (v2sf, v2sf)
31055      v2sf __builtin_ia32_pfrcp (v2sf)
31056      v2sf __builtin_ia32_pfrcpit1 (v2sf, v2sf)
31057      v2sf __builtin_ia32_pfrcpit2 (v2sf, v2sf)
31058      v2sf __builtin_ia32_pfrsqrt (v2sf)
31059      v2sf __builtin_ia32_pfrsqrtit1 (v2sf, v2sf)
31060      v2sf __builtin_ia32_pfsub (v2sf, v2sf)
31061      v2sf __builtin_ia32_pfsubr (v2sf, v2sf)
31062      v2sf __builtin_ia32_pi2fd (v2si)
31063      v4hi __builtin_ia32_pmulhrw (v4hi, v4hi)
31065  The following built-in functions are available when both `-m3dnow' and
31066 `-march=athlon' are used.  All of them generate the machine instruction
31067 that is part of the name.
31069      v2si __builtin_ia32_pf2iw (v2sf)
31070      v2sf __builtin_ia32_pfnacc (v2sf, v2sf)
31071      v2sf __builtin_ia32_pfpnacc (v2sf, v2sf)
31072      v2sf __builtin_ia32_pi2fw (v2si)
31073      v2sf __builtin_ia32_pswapdsf (v2sf)
31074      v2si __builtin_ia32_pswapdsi (v2si)
31076 \x1f
31077 File: gcc.info,  Node: MIPS DSP Built-in Functions,  Next: MIPS Paired-Single Support,  Prev: X86 Built-in Functions,  Up: Target Builtins
31079 5.50.7 MIPS DSP Built-in Functions
31080 ----------------------------------
31082 The MIPS DSP Application-Specific Extension (ASE) includes new
31083 instructions that are designed to improve the performance of DSP and
31084 media applications.  It provides instructions that operate on packed
31085 8-bit/16-bit integer data, Q7, Q15 and Q31 fractional data.
31087  GCC supports MIPS DSP operations using both the generic vector
31088 extensions (*note Vector Extensions::) and a collection of
31089 MIPS-specific built-in functions.  Both kinds of support are enabled by
31090 the `-mdsp' command-line option.
31092  Revision 2 of the ASE was introduced in the second half of 2006.  This
31093 revision adds extra instructions to the original ASE, but is otherwise
31094 backwards-compatible with it.  You can select revision 2 using the
31095 command-line option `-mdspr2'; this option implies `-mdsp'.
31097  The SCOUNT and POS bits of the DSP control register are global.  The
31098 WRDSP, EXTPDP, EXTPDPV and MTHLIP instructions modify the SCOUNT and
31099 POS bits.  During optimization, the compiler will not delete these
31100 instructions and it will not delete calls to functions containing these
31101 instructions.
31103  At present, GCC only provides support for operations on 32-bit
31104 vectors.  The vector type associated with 8-bit integer data is usually
31105 called `v4i8', the vector type associated with Q7 is usually called
31106 `v4q7', the vector type associated with 16-bit integer data is usually
31107 called `v2i16', and the vector type associated with Q15 is usually
31108 called `v2q15'.  They can be defined in C as follows:
31110      typedef signed char v4i8 __attribute__ ((vector_size(4)));
31111      typedef signed char v4q7 __attribute__ ((vector_size(4)));
31112      typedef short v2i16 __attribute__ ((vector_size(4)));
31113      typedef short v2q15 __attribute__ ((vector_size(4)));
31115  `v4i8', `v4q7', `v2i16' and `v2q15' values are initialized in the same
31116 way as aggregates.  For example:
31118      v4i8 a = {1, 2, 3, 4};
31119      v4i8 b;
31120      b = (v4i8) {5, 6, 7, 8};
31122      v2q15 c = {0x0fcb, 0x3a75};
31123      v2q15 d;
31124      d = (v2q15) {0.1234 * 0x1.0p15, 0.4567 * 0x1.0p15};
31126  _Note:_ The CPU's endianness determines the order in which values are
31127 packed.  On little-endian targets, the first value is the least
31128 significant and the last value is the most significant.  The opposite
31129 order applies to big-endian targets.  For example, the code above will
31130 set the lowest byte of `a' to `1' on little-endian targets and `4' on
31131 big-endian targets.
31133  _Note:_ Q7, Q15 and Q31 values must be initialized with their integer
31134 representation.  As shown in this example, the integer representation
31135 of a Q7 value can be obtained by multiplying the fractional value by
31136 `0x1.0p7'.  The equivalent for Q15 values is to multiply by `0x1.0p15'.
31137 The equivalent for Q31 values is to multiply by `0x1.0p31'.
31139  The table below lists the `v4i8' and `v2q15' operations for which
31140 hardware support exists.  `a' and `b' are `v4i8' values, and `c' and
31141 `d' are `v2q15' values.
31143 C code                               MIPS instruction
31144 `a + b'                              `addu.qb'
31145 `c + d'                              `addq.ph'
31146 `a - b'                              `subu.qb'
31147 `c - d'                              `subq.ph'
31149  The table below lists the `v2i16' operation for which hardware support
31150 exists for the DSP ASE REV 2.  `e' and `f' are `v2i16' values.
31152 C code                               MIPS instruction
31153 `e * f'                              `mul.ph'
31155  It is easier to describe the DSP built-in functions if we first define
31156 the following types:
31158      typedef int q31;
31159      typedef int i32;
31160      typedef unsigned int ui32;
31161      typedef long long a64;
31163  `q31' and `i32' are actually the same as `int', but we use `q31' to
31164 indicate a Q31 fractional value and `i32' to indicate a 32-bit integer
31165 value.  Similarly, `a64' is the same as `long long', but we use `a64'
31166 to indicate values that will be placed in one of the four DSP
31167 accumulators (`$ac0', `$ac1', `$ac2' or `$ac3').
31169  Also, some built-in functions prefer or require immediate numbers as
31170 parameters, because the corresponding DSP instructions accept both
31171 immediate numbers and register operands, or accept immediate numbers
31172 only.  The immediate parameters are listed as follows.
31174      imm0_3: 0 to 3.
31175      imm0_7: 0 to 7.
31176      imm0_15: 0 to 15.
31177      imm0_31: 0 to 31.
31178      imm0_63: 0 to 63.
31179      imm0_255: 0 to 255.
31180      imm_n32_31: -32 to 31.
31181      imm_n512_511: -512 to 511.
31183  The following built-in functions map directly to a particular MIPS DSP
31184 instruction.  Please refer to the architecture specification for
31185 details on what each instruction does.
31187      v2q15 __builtin_mips_addq_ph (v2q15, v2q15)
31188      v2q15 __builtin_mips_addq_s_ph (v2q15, v2q15)
31189      q31 __builtin_mips_addq_s_w (q31, q31)
31190      v4i8 __builtin_mips_addu_qb (v4i8, v4i8)
31191      v4i8 __builtin_mips_addu_s_qb (v4i8, v4i8)
31192      v2q15 __builtin_mips_subq_ph (v2q15, v2q15)
31193      v2q15 __builtin_mips_subq_s_ph (v2q15, v2q15)
31194      q31 __builtin_mips_subq_s_w (q31, q31)
31195      v4i8 __builtin_mips_subu_qb (v4i8, v4i8)
31196      v4i8 __builtin_mips_subu_s_qb (v4i8, v4i8)
31197      i32 __builtin_mips_addsc (i32, i32)
31198      i32 __builtin_mips_addwc (i32, i32)
31199      i32 __builtin_mips_modsub (i32, i32)
31200      i32 __builtin_mips_raddu_w_qb (v4i8)
31201      v2q15 __builtin_mips_absq_s_ph (v2q15)
31202      q31 __builtin_mips_absq_s_w (q31)
31203      v4i8 __builtin_mips_precrq_qb_ph (v2q15, v2q15)
31204      v2q15 __builtin_mips_precrq_ph_w (q31, q31)
31205      v2q15 __builtin_mips_precrq_rs_ph_w (q31, q31)
31206      v4i8 __builtin_mips_precrqu_s_qb_ph (v2q15, v2q15)
31207      q31 __builtin_mips_preceq_w_phl (v2q15)
31208      q31 __builtin_mips_preceq_w_phr (v2q15)
31209      v2q15 __builtin_mips_precequ_ph_qbl (v4i8)
31210      v2q15 __builtin_mips_precequ_ph_qbr (v4i8)
31211      v2q15 __builtin_mips_precequ_ph_qbla (v4i8)
31212      v2q15 __builtin_mips_precequ_ph_qbra (v4i8)
31213      v2q15 __builtin_mips_preceu_ph_qbl (v4i8)
31214      v2q15 __builtin_mips_preceu_ph_qbr (v4i8)
31215      v2q15 __builtin_mips_preceu_ph_qbla (v4i8)
31216      v2q15 __builtin_mips_preceu_ph_qbra (v4i8)
31217      v4i8 __builtin_mips_shll_qb (v4i8, imm0_7)
31218      v4i8 __builtin_mips_shll_qb (v4i8, i32)
31219      v2q15 __builtin_mips_shll_ph (v2q15, imm0_15)
31220      v2q15 __builtin_mips_shll_ph (v2q15, i32)
31221      v2q15 __builtin_mips_shll_s_ph (v2q15, imm0_15)
31222      v2q15 __builtin_mips_shll_s_ph (v2q15, i32)
31223      q31 __builtin_mips_shll_s_w (q31, imm0_31)
31224      q31 __builtin_mips_shll_s_w (q31, i32)
31225      v4i8 __builtin_mips_shrl_qb (v4i8, imm0_7)
31226      v4i8 __builtin_mips_shrl_qb (v4i8, i32)
31227      v2q15 __builtin_mips_shra_ph (v2q15, imm0_15)
31228      v2q15 __builtin_mips_shra_ph (v2q15, i32)
31229      v2q15 __builtin_mips_shra_r_ph (v2q15, imm0_15)
31230      v2q15 __builtin_mips_shra_r_ph (v2q15, i32)
31231      q31 __builtin_mips_shra_r_w (q31, imm0_31)
31232      q31 __builtin_mips_shra_r_w (q31, i32)
31233      v2q15 __builtin_mips_muleu_s_ph_qbl (v4i8, v2q15)
31234      v2q15 __builtin_mips_muleu_s_ph_qbr (v4i8, v2q15)
31235      v2q15 __builtin_mips_mulq_rs_ph (v2q15, v2q15)
31236      q31 __builtin_mips_muleq_s_w_phl (v2q15, v2q15)
31237      q31 __builtin_mips_muleq_s_w_phr (v2q15, v2q15)
31238      a64 __builtin_mips_dpau_h_qbl (a64, v4i8, v4i8)
31239      a64 __builtin_mips_dpau_h_qbr (a64, v4i8, v4i8)
31240      a64 __builtin_mips_dpsu_h_qbl (a64, v4i8, v4i8)
31241      a64 __builtin_mips_dpsu_h_qbr (a64, v4i8, v4i8)
31242      a64 __builtin_mips_dpaq_s_w_ph (a64, v2q15, v2q15)
31243      a64 __builtin_mips_dpaq_sa_l_w (a64, q31, q31)
31244      a64 __builtin_mips_dpsq_s_w_ph (a64, v2q15, v2q15)
31245      a64 __builtin_mips_dpsq_sa_l_w (a64, q31, q31)
31246      a64 __builtin_mips_mulsaq_s_w_ph (a64, v2q15, v2q15)
31247      a64 __builtin_mips_maq_s_w_phl (a64, v2q15, v2q15)
31248      a64 __builtin_mips_maq_s_w_phr (a64, v2q15, v2q15)
31249      a64 __builtin_mips_maq_sa_w_phl (a64, v2q15, v2q15)
31250      a64 __builtin_mips_maq_sa_w_phr (a64, v2q15, v2q15)
31251      i32 __builtin_mips_bitrev (i32)
31252      i32 __builtin_mips_insv (i32, i32)
31253      v4i8 __builtin_mips_repl_qb (imm0_255)
31254      v4i8 __builtin_mips_repl_qb (i32)
31255      v2q15 __builtin_mips_repl_ph (imm_n512_511)
31256      v2q15 __builtin_mips_repl_ph (i32)
31257      void __builtin_mips_cmpu_eq_qb (v4i8, v4i8)
31258      void __builtin_mips_cmpu_lt_qb (v4i8, v4i8)
31259      void __builtin_mips_cmpu_le_qb (v4i8, v4i8)
31260      i32 __builtin_mips_cmpgu_eq_qb (v4i8, v4i8)
31261      i32 __builtin_mips_cmpgu_lt_qb (v4i8, v4i8)
31262      i32 __builtin_mips_cmpgu_le_qb (v4i8, v4i8)
31263      void __builtin_mips_cmp_eq_ph (v2q15, v2q15)
31264      void __builtin_mips_cmp_lt_ph (v2q15, v2q15)
31265      void __builtin_mips_cmp_le_ph (v2q15, v2q15)
31266      v4i8 __builtin_mips_pick_qb (v4i8, v4i8)
31267      v2q15 __builtin_mips_pick_ph (v2q15, v2q15)
31268      v2q15 __builtin_mips_packrl_ph (v2q15, v2q15)
31269      i32 __builtin_mips_extr_w (a64, imm0_31)
31270      i32 __builtin_mips_extr_w (a64, i32)
31271      i32 __builtin_mips_extr_r_w (a64, imm0_31)
31272      i32 __builtin_mips_extr_s_h (a64, i32)
31273      i32 __builtin_mips_extr_rs_w (a64, imm0_31)
31274      i32 __builtin_mips_extr_rs_w (a64, i32)
31275      i32 __builtin_mips_extr_s_h (a64, imm0_31)
31276      i32 __builtin_mips_extr_r_w (a64, i32)
31277      i32 __builtin_mips_extp (a64, imm0_31)
31278      i32 __builtin_mips_extp (a64, i32)
31279      i32 __builtin_mips_extpdp (a64, imm0_31)
31280      i32 __builtin_mips_extpdp (a64, i32)
31281      a64 __builtin_mips_shilo (a64, imm_n32_31)
31282      a64 __builtin_mips_shilo (a64, i32)
31283      a64 __builtin_mips_mthlip (a64, i32)
31284      void __builtin_mips_wrdsp (i32, imm0_63)
31285      i32 __builtin_mips_rddsp (imm0_63)
31286      i32 __builtin_mips_lbux (void *, i32)
31287      i32 __builtin_mips_lhx (void *, i32)
31288      i32 __builtin_mips_lwx (void *, i32)
31289      i32 __builtin_mips_bposge32 (void)
31291  The following built-in functions map directly to a particular MIPS DSP
31292 REV 2 instruction.  Please refer to the architecture specification for
31293 details on what each instruction does.
31295      v4q7 __builtin_mips_absq_s_qb (v4q7);
31296      v2i16 __builtin_mips_addu_ph (v2i16, v2i16);
31297      v2i16 __builtin_mips_addu_s_ph (v2i16, v2i16);
31298      v4i8 __builtin_mips_adduh_qb (v4i8, v4i8);
31299      v4i8 __builtin_mips_adduh_r_qb (v4i8, v4i8);
31300      i32 __builtin_mips_append (i32, i32, imm0_31);
31301      i32 __builtin_mips_balign (i32, i32, imm0_3);
31302      i32 __builtin_mips_cmpgdu_eq_qb (v4i8, v4i8);
31303      i32 __builtin_mips_cmpgdu_lt_qb (v4i8, v4i8);
31304      i32 __builtin_mips_cmpgdu_le_qb (v4i8, v4i8);
31305      a64 __builtin_mips_dpa_w_ph (a64, v2i16, v2i16);
31306      a64 __builtin_mips_dps_w_ph (a64, v2i16, v2i16);
31307      a64 __builtin_mips_madd (a64, i32, i32);
31308      a64 __builtin_mips_maddu (a64, ui32, ui32);
31309      a64 __builtin_mips_msub (a64, i32, i32);
31310      a64 __builtin_mips_msubu (a64, ui32, ui32);
31311      v2i16 __builtin_mips_mul_ph (v2i16, v2i16);
31312      v2i16 __builtin_mips_mul_s_ph (v2i16, v2i16);
31313      q31 __builtin_mips_mulq_rs_w (q31, q31);
31314      v2q15 __builtin_mips_mulq_s_ph (v2q15, v2q15);
31315      q31 __builtin_mips_mulq_s_w (q31, q31);
31316      a64 __builtin_mips_mulsa_w_ph (a64, v2i16, v2i16);
31317      a64 __builtin_mips_mult (i32, i32);
31318      a64 __builtin_mips_multu (ui32, ui32);
31319      v4i8 __builtin_mips_precr_qb_ph (v2i16, v2i16);
31320      v2i16 __builtin_mips_precr_sra_ph_w (i32, i32, imm0_31);
31321      v2i16 __builtin_mips_precr_sra_r_ph_w (i32, i32, imm0_31);
31322      i32 __builtin_mips_prepend (i32, i32, imm0_31);
31323      v4i8 __builtin_mips_shra_qb (v4i8, imm0_7);
31324      v4i8 __builtin_mips_shra_r_qb (v4i8, imm0_7);
31325      v4i8 __builtin_mips_shra_qb (v4i8, i32);
31326      v4i8 __builtin_mips_shra_r_qb (v4i8, i32);
31327      v2i16 __builtin_mips_shrl_ph (v2i16, imm0_15);
31328      v2i16 __builtin_mips_shrl_ph (v2i16, i32);
31329      v2i16 __builtin_mips_subu_ph (v2i16, v2i16);
31330      v2i16 __builtin_mips_subu_s_ph (v2i16, v2i16);
31331      v4i8 __builtin_mips_subuh_qb (v4i8, v4i8);
31332      v4i8 __builtin_mips_subuh_r_qb (v4i8, v4i8);
31333      v2q15 __builtin_mips_addqh_ph (v2q15, v2q15);
31334      v2q15 __builtin_mips_addqh_r_ph (v2q15, v2q15);
31335      q31 __builtin_mips_addqh_w (q31, q31);
31336      q31 __builtin_mips_addqh_r_w (q31, q31);
31337      v2q15 __builtin_mips_subqh_ph (v2q15, v2q15);
31338      v2q15 __builtin_mips_subqh_r_ph (v2q15, v2q15);
31339      q31 __builtin_mips_subqh_w (q31, q31);
31340      q31 __builtin_mips_subqh_r_w (q31, q31);
31341      a64 __builtin_mips_dpax_w_ph (a64, v2i16, v2i16);
31342      a64 __builtin_mips_dpsx_w_ph (a64, v2i16, v2i16);
31343      a64 __builtin_mips_dpaqx_s_w_ph (a64, v2q15, v2q15);
31344      a64 __builtin_mips_dpaqx_sa_w_ph (a64, v2q15, v2q15);
31345      a64 __builtin_mips_dpsqx_s_w_ph (a64, v2q15, v2q15);
31346      a64 __builtin_mips_dpsqx_sa_w_ph (a64, v2q15, v2q15);
31348 \x1f
31349 File: gcc.info,  Node: MIPS Paired-Single Support,  Next: MIPS Loongson Built-in Functions,  Prev: MIPS DSP Built-in Functions,  Up: Target Builtins
31351 5.50.8 MIPS Paired-Single Support
31352 ---------------------------------
31354 The MIPS64 architecture includes a number of instructions that operate
31355 on pairs of single-precision floating-point values.  Each pair is
31356 packed into a 64-bit floating-point register, with one element being
31357 designated the "upper half" and the other being designated the "lower
31358 half".
31360  GCC supports paired-single operations using both the generic vector
31361 extensions (*note Vector Extensions::) and a collection of
31362 MIPS-specific built-in functions.  Both kinds of support are enabled by
31363 the `-mpaired-single' command-line option.
31365  The vector type associated with paired-single values is usually called
31366 `v2sf'.  It can be defined in C as follows:
31368      typedef float v2sf __attribute__ ((vector_size (8)));
31370  `v2sf' values are initialized in the same way as aggregates.  For
31371 example:
31373      v2sf a = {1.5, 9.1};
31374      v2sf b;
31375      float e, f;
31376      b = (v2sf) {e, f};
31378  _Note:_ The CPU's endianness determines which value is stored in the
31379 upper half of a register and which value is stored in the lower half.
31380 On little-endian targets, the first value is the lower one and the
31381 second value is the upper one.  The opposite order applies to
31382 big-endian targets.  For example, the code above will set the lower
31383 half of `a' to `1.5' on little-endian targets and `9.1' on big-endian
31384 targets.
31386 \x1f
31387 File: gcc.info,  Node: MIPS Loongson Built-in Functions,  Next: Other MIPS Built-in Functions,  Prev: MIPS Paired-Single Support,  Up: Target Builtins
31389 5.50.9 MIPS Loongson Built-in Functions
31390 ---------------------------------------
31392 GCC provides intrinsics to access the SIMD instructions provided by the
31393 ST Microelectronics Loongson-2E and -2F processors.  These intrinsics,
31394 available after inclusion of the `loongson.h' header file, operate on
31395 the following 64-bit vector types:
31397    * `uint8x8_t', a vector of eight unsigned 8-bit integers;
31399    * `uint16x4_t', a vector of four unsigned 16-bit integers;
31401    * `uint32x2_t', a vector of two unsigned 32-bit integers;
31403    * `int8x8_t', a vector of eight signed 8-bit integers;
31405    * `int16x4_t', a vector of four signed 16-bit integers;
31407    * `int32x2_t', a vector of two signed 32-bit integers.
31409  The intrinsics provided are listed below; each is named after the
31410 machine instruction to which it corresponds, with suffixes added as
31411 appropriate to distinguish intrinsics that expand to the same machine
31412 instruction yet have different argument types.  Refer to the
31413 architecture documentation for a description of the functionality of
31414 each instruction.
31416      int16x4_t packsswh (int32x2_t s, int32x2_t t);
31417      int8x8_t packsshb (int16x4_t s, int16x4_t t);
31418      uint8x8_t packushb (uint16x4_t s, uint16x4_t t);
31419      uint32x2_t paddw_u (uint32x2_t s, uint32x2_t t);
31420      uint16x4_t paddh_u (uint16x4_t s, uint16x4_t t);
31421      uint8x8_t paddb_u (uint8x8_t s, uint8x8_t t);
31422      int32x2_t paddw_s (int32x2_t s, int32x2_t t);
31423      int16x4_t paddh_s (int16x4_t s, int16x4_t t);
31424      int8x8_t paddb_s (int8x8_t s, int8x8_t t);
31425      uint64_t paddd_u (uint64_t s, uint64_t t);
31426      int64_t paddd_s (int64_t s, int64_t t);
31427      int16x4_t paddsh (int16x4_t s, int16x4_t t);
31428      int8x8_t paddsb (int8x8_t s, int8x8_t t);
31429      uint16x4_t paddush (uint16x4_t s, uint16x4_t t);
31430      uint8x8_t paddusb (uint8x8_t s, uint8x8_t t);
31431      uint64_t pandn_ud (uint64_t s, uint64_t t);
31432      uint32x2_t pandn_uw (uint32x2_t s, uint32x2_t t);
31433      uint16x4_t pandn_uh (uint16x4_t s, uint16x4_t t);
31434      uint8x8_t pandn_ub (uint8x8_t s, uint8x8_t t);
31435      int64_t pandn_sd (int64_t s, int64_t t);
31436      int32x2_t pandn_sw (int32x2_t s, int32x2_t t);
31437      int16x4_t pandn_sh (int16x4_t s, int16x4_t t);
31438      int8x8_t pandn_sb (int8x8_t s, int8x8_t t);
31439      uint16x4_t pavgh (uint16x4_t s, uint16x4_t t);
31440      uint8x8_t pavgb (uint8x8_t s, uint8x8_t t);
31441      uint32x2_t pcmpeqw_u (uint32x2_t s, uint32x2_t t);
31442      uint16x4_t pcmpeqh_u (uint16x4_t s, uint16x4_t t);
31443      uint8x8_t pcmpeqb_u (uint8x8_t s, uint8x8_t t);
31444      int32x2_t pcmpeqw_s (int32x2_t s, int32x2_t t);
31445      int16x4_t pcmpeqh_s (int16x4_t s, int16x4_t t);
31446      int8x8_t pcmpeqb_s (int8x8_t s, int8x8_t t);
31447      uint32x2_t pcmpgtw_u (uint32x2_t s, uint32x2_t t);
31448      uint16x4_t pcmpgth_u (uint16x4_t s, uint16x4_t t);
31449      uint8x8_t pcmpgtb_u (uint8x8_t s, uint8x8_t t);
31450      int32x2_t pcmpgtw_s (int32x2_t s, int32x2_t t);
31451      int16x4_t pcmpgth_s (int16x4_t s, int16x4_t t);
31452      int8x8_t pcmpgtb_s (int8x8_t s, int8x8_t t);
31453      uint16x4_t pextrh_u (uint16x4_t s, int field);
31454      int16x4_t pextrh_s (int16x4_t s, int field);
31455      uint16x4_t pinsrh_0_u (uint16x4_t s, uint16x4_t t);
31456      uint16x4_t pinsrh_1_u (uint16x4_t s, uint16x4_t t);
31457      uint16x4_t pinsrh_2_u (uint16x4_t s, uint16x4_t t);
31458      uint16x4_t pinsrh_3_u (uint16x4_t s, uint16x4_t t);
31459      int16x4_t pinsrh_0_s (int16x4_t s, int16x4_t t);
31460      int16x4_t pinsrh_1_s (int16x4_t s, int16x4_t t);
31461      int16x4_t pinsrh_2_s (int16x4_t s, int16x4_t t);
31462      int16x4_t pinsrh_3_s (int16x4_t s, int16x4_t t);
31463      int32x2_t pmaddhw (int16x4_t s, int16x4_t t);
31464      int16x4_t pmaxsh (int16x4_t s, int16x4_t t);
31465      uint8x8_t pmaxub (uint8x8_t s, uint8x8_t t);
31466      int16x4_t pminsh (int16x4_t s, int16x4_t t);
31467      uint8x8_t pminub (uint8x8_t s, uint8x8_t t);
31468      uint8x8_t pmovmskb_u (uint8x8_t s);
31469      int8x8_t pmovmskb_s (int8x8_t s);
31470      uint16x4_t pmulhuh (uint16x4_t s, uint16x4_t t);
31471      int16x4_t pmulhh (int16x4_t s, int16x4_t t);
31472      int16x4_t pmullh (int16x4_t s, int16x4_t t);
31473      int64_t pmuluw (uint32x2_t s, uint32x2_t t);
31474      uint8x8_t pasubub (uint8x8_t s, uint8x8_t t);
31475      uint16x4_t biadd (uint8x8_t s);
31476      uint16x4_t psadbh (uint8x8_t s, uint8x8_t t);
31477      uint16x4_t pshufh_u (uint16x4_t dest, uint16x4_t s, uint8_t order);
31478      int16x4_t pshufh_s (int16x4_t dest, int16x4_t s, uint8_t order);
31479      uint16x4_t psllh_u (uint16x4_t s, uint8_t amount);
31480      int16x4_t psllh_s (int16x4_t s, uint8_t amount);
31481      uint32x2_t psllw_u (uint32x2_t s, uint8_t amount);
31482      int32x2_t psllw_s (int32x2_t s, uint8_t amount);
31483      uint16x4_t psrlh_u (uint16x4_t s, uint8_t amount);
31484      int16x4_t psrlh_s (int16x4_t s, uint8_t amount);
31485      uint32x2_t psrlw_u (uint32x2_t s, uint8_t amount);
31486      int32x2_t psrlw_s (int32x2_t s, uint8_t amount);
31487      uint16x4_t psrah_u (uint16x4_t s, uint8_t amount);
31488      int16x4_t psrah_s (int16x4_t s, uint8_t amount);
31489      uint32x2_t psraw_u (uint32x2_t s, uint8_t amount);
31490      int32x2_t psraw_s (int32x2_t s, uint8_t amount);
31491      uint32x2_t psubw_u (uint32x2_t s, uint32x2_t t);
31492      uint16x4_t psubh_u (uint16x4_t s, uint16x4_t t);
31493      uint8x8_t psubb_u (uint8x8_t s, uint8x8_t t);
31494      int32x2_t psubw_s (int32x2_t s, int32x2_t t);
31495      int16x4_t psubh_s (int16x4_t s, int16x4_t t);
31496      int8x8_t psubb_s (int8x8_t s, int8x8_t t);
31497      uint64_t psubd_u (uint64_t s, uint64_t t);
31498      int64_t psubd_s (int64_t s, int64_t t);
31499      int16x4_t psubsh (int16x4_t s, int16x4_t t);
31500      int8x8_t psubsb (int8x8_t s, int8x8_t t);
31501      uint16x4_t psubush (uint16x4_t s, uint16x4_t t);
31502      uint8x8_t psubusb (uint8x8_t s, uint8x8_t t);
31503      uint32x2_t punpckhwd_u (uint32x2_t s, uint32x2_t t);
31504      uint16x4_t punpckhhw_u (uint16x4_t s, uint16x4_t t);
31505      uint8x8_t punpckhbh_u (uint8x8_t s, uint8x8_t t);
31506      int32x2_t punpckhwd_s (int32x2_t s, int32x2_t t);
31507      int16x4_t punpckhhw_s (int16x4_t s, int16x4_t t);
31508      int8x8_t punpckhbh_s (int8x8_t s, int8x8_t t);
31509      uint32x2_t punpcklwd_u (uint32x2_t s, uint32x2_t t);
31510      uint16x4_t punpcklhw_u (uint16x4_t s, uint16x4_t t);
31511      uint8x8_t punpcklbh_u (uint8x8_t s, uint8x8_t t);
31512      int32x2_t punpcklwd_s (int32x2_t s, int32x2_t t);
31513      int16x4_t punpcklhw_s (int16x4_t s, int16x4_t t);
31514      int8x8_t punpcklbh_s (int8x8_t s, int8x8_t t);
31516 * Menu:
31518 * Paired-Single Arithmetic::
31519 * Paired-Single Built-in Functions::
31520 * MIPS-3D Built-in Functions::
31522 \x1f
31523 File: gcc.info,  Node: Paired-Single Arithmetic,  Next: Paired-Single Built-in Functions,  Up: MIPS Loongson Built-in Functions
31525 5.50.9.1 Paired-Single Arithmetic
31526 .................................
31528 The table below lists the `v2sf' operations for which hardware support
31529 exists.  `a', `b' and `c' are `v2sf' values and `x' is an integral
31530 value.
31532 C code                               MIPS instruction
31533 `a + b'                              `add.ps'
31534 `a - b'                              `sub.ps'
31535 `-a'                                 `neg.ps'
31536 `a * b'                              `mul.ps'
31537 `a * b + c'                          `madd.ps'
31538 `a * b - c'                          `msub.ps'
31539 `-(a * b + c)'                       `nmadd.ps'
31540 `-(a * b - c)'                       `nmsub.ps'
31541 `x ? a : b'                          `movn.ps'/`movz.ps'
31543  Note that the multiply-accumulate instructions can be disabled using
31544 the command-line option `-mno-fused-madd'.
31546 \x1f
31547 File: gcc.info,  Node: Paired-Single Built-in Functions,  Next: MIPS-3D Built-in Functions,  Prev: Paired-Single Arithmetic,  Up: MIPS Loongson Built-in Functions
31549 5.50.9.2 Paired-Single Built-in Functions
31550 .........................................
31552 The following paired-single functions map directly to a particular MIPS
31553 instruction.  Please refer to the architecture specification for
31554 details on what each instruction does.
31556 `v2sf __builtin_mips_pll_ps (v2sf, v2sf)'
31557      Pair lower lower (`pll.ps').
31559 `v2sf __builtin_mips_pul_ps (v2sf, v2sf)'
31560      Pair upper lower (`pul.ps').
31562 `v2sf __builtin_mips_plu_ps (v2sf, v2sf)'
31563      Pair lower upper (`plu.ps').
31565 `v2sf __builtin_mips_puu_ps (v2sf, v2sf)'
31566      Pair upper upper (`puu.ps').
31568 `v2sf __builtin_mips_cvt_ps_s (float, float)'
31569      Convert pair to paired single (`cvt.ps.s').
31571 `float __builtin_mips_cvt_s_pl (v2sf)'
31572      Convert pair lower to single (`cvt.s.pl').
31574 `float __builtin_mips_cvt_s_pu (v2sf)'
31575      Convert pair upper to single (`cvt.s.pu').
31577 `v2sf __builtin_mips_abs_ps (v2sf)'
31578      Absolute value (`abs.ps').
31580 `v2sf __builtin_mips_alnv_ps (v2sf, v2sf, int)'
31581      Align variable (`alnv.ps').
31583      _Note:_ The value of the third parameter must be 0 or 4 modulo 8,
31584      otherwise the result will be unpredictable.  Please read the
31585      instruction description for details.
31587  The following multi-instruction functions are also available.  In each
31588 case, COND can be any of the 16 floating-point conditions: `f', `un',
31589 `eq', `ueq', `olt', `ult', `ole', `ule', `sf', `ngle', `seq', `ngl',
31590 `lt', `nge', `le' or `ngt'.
31592 `v2sf __builtin_mips_movt_c_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)'
31593 `v2sf __builtin_mips_movf_c_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)'
31594      Conditional move based on floating point comparison (`c.COND.ps',
31595      `movt.ps'/`movf.ps').
31597      The `movt' functions return the value X computed by:
31599           c.COND.ps CC,A,B
31600           mov.ps X,C
31601           movt.ps X,D,CC
31603      The `movf' functions are similar but use `movf.ps' instead of
31604      `movt.ps'.
31606 `int __builtin_mips_upper_c_COND_ps (v2sf A, v2sf B)'
31607 `int __builtin_mips_lower_c_COND_ps (v2sf A, v2sf B)'
31608      Comparison of two paired-single values (`c.COND.ps',
31609      `bc1t'/`bc1f').
31611      These functions compare A and B using `c.COND.ps' and return
31612      either the upper or lower half of the result.  For example:
31614           v2sf a, b;
31615           if (__builtin_mips_upper_c_eq_ps (a, b))
31616             upper_halves_are_equal ();
31617           else
31618             upper_halves_are_unequal ();
31620           if (__builtin_mips_lower_c_eq_ps (a, b))
31621             lower_halves_are_equal ();
31622           else
31623             lower_halves_are_unequal ();
31625 \x1f
31626 File: gcc.info,  Node: MIPS-3D Built-in Functions,  Prev: Paired-Single Built-in Functions,  Up: MIPS Loongson Built-in Functions
31628 5.50.9.3 MIPS-3D Built-in Functions
31629 ...................................
31631 The MIPS-3D Application-Specific Extension (ASE) includes additional
31632 paired-single instructions that are designed to improve the performance
31633 of 3D graphics operations.  Support for these instructions is controlled
31634 by the `-mips3d' command-line option.
31636  The functions listed below map directly to a particular MIPS-3D
31637 instruction.  Please refer to the architecture specification for more
31638 details on what each instruction does.
31640 `v2sf __builtin_mips_addr_ps (v2sf, v2sf)'
31641      Reduction add (`addr.ps').
31643 `v2sf __builtin_mips_mulr_ps (v2sf, v2sf)'
31644      Reduction multiply (`mulr.ps').
31646 `v2sf __builtin_mips_cvt_pw_ps (v2sf)'
31647      Convert paired single to paired word (`cvt.pw.ps').
31649 `v2sf __builtin_mips_cvt_ps_pw (v2sf)'
31650      Convert paired word to paired single (`cvt.ps.pw').
31652 `float __builtin_mips_recip1_s (float)'
31653 `double __builtin_mips_recip1_d (double)'
31654 `v2sf __builtin_mips_recip1_ps (v2sf)'
31655      Reduced precision reciprocal (sequence step 1) (`recip1.FMT').
31657 `float __builtin_mips_recip2_s (float, float)'
31658 `double __builtin_mips_recip2_d (double, double)'
31659 `v2sf __builtin_mips_recip2_ps (v2sf, v2sf)'
31660      Reduced precision reciprocal (sequence step 2) (`recip2.FMT').
31662 `float __builtin_mips_rsqrt1_s (float)'
31663 `double __builtin_mips_rsqrt1_d (double)'
31664 `v2sf __builtin_mips_rsqrt1_ps (v2sf)'
31665      Reduced precision reciprocal square root (sequence step 1)
31666      (`rsqrt1.FMT').
31668 `float __builtin_mips_rsqrt2_s (float, float)'
31669 `double __builtin_mips_rsqrt2_d (double, double)'
31670 `v2sf __builtin_mips_rsqrt2_ps (v2sf, v2sf)'
31671      Reduced precision reciprocal square root (sequence step 2)
31672      (`rsqrt2.FMT').
31674  The following multi-instruction functions are also available.  In each
31675 case, COND can be any of the 16 floating-point conditions: `f', `un',
31676 `eq', `ueq', `olt', `ult', `ole', `ule', `sf', `ngle', `seq', `ngl',
31677 `lt', `nge', `le' or `ngt'.
31679 `int __builtin_mips_cabs_COND_s (float A, float B)'
31680 `int __builtin_mips_cabs_COND_d (double A, double B)'
31681      Absolute comparison of two scalar values (`cabs.COND.FMT',
31682      `bc1t'/`bc1f').
31684      These functions compare A and B using `cabs.COND.s' or
31685      `cabs.COND.d' and return the result as a boolean value.  For
31686      example:
31688           float a, b;
31689           if (__builtin_mips_cabs_eq_s (a, b))
31690             true ();
31691           else
31692             false ();
31694 `int __builtin_mips_upper_cabs_COND_ps (v2sf A, v2sf B)'
31695 `int __builtin_mips_lower_cabs_COND_ps (v2sf A, v2sf B)'
31696      Absolute comparison of two paired-single values (`cabs.COND.ps',
31697      `bc1t'/`bc1f').
31699      These functions compare A and B using `cabs.COND.ps' and return
31700      either the upper or lower half of the result.  For example:
31702           v2sf a, b;
31703           if (__builtin_mips_upper_cabs_eq_ps (a, b))
31704             upper_halves_are_equal ();
31705           else
31706             upper_halves_are_unequal ();
31708           if (__builtin_mips_lower_cabs_eq_ps (a, b))
31709             lower_halves_are_equal ();
31710           else
31711             lower_halves_are_unequal ();
31713 `v2sf __builtin_mips_movt_cabs_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)'
31714 `v2sf __builtin_mips_movf_cabs_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)'
31715      Conditional move based on absolute comparison (`cabs.COND.ps',
31716      `movt.ps'/`movf.ps').
31718      The `movt' functions return the value X computed by:
31720           cabs.COND.ps CC,A,B
31721           mov.ps X,C
31722           movt.ps X,D,CC
31724      The `movf' functions are similar but use `movf.ps' instead of
31725      `movt.ps'.
31727 `int __builtin_mips_any_c_COND_ps (v2sf A, v2sf B)'
31728 `int __builtin_mips_all_c_COND_ps (v2sf A, v2sf B)'
31729 `int __builtin_mips_any_cabs_COND_ps (v2sf A, v2sf B)'
31730 `int __builtin_mips_all_cabs_COND_ps (v2sf A, v2sf B)'
31731      Comparison of two paired-single values (`c.COND.ps'/`cabs.COND.ps',
31732      `bc1any2t'/`bc1any2f').
31734      These functions compare A and B using `c.COND.ps' or
31735      `cabs.COND.ps'.  The `any' forms return true if either result is
31736      true and the `all' forms return true if both results are true.
31737      For example:
31739           v2sf a, b;
31740           if (__builtin_mips_any_c_eq_ps (a, b))
31741             one_is_true ();
31742           else
31743             both_are_false ();
31745           if (__builtin_mips_all_c_eq_ps (a, b))
31746             both_are_true ();
31747           else
31748             one_is_false ();
31750 `int __builtin_mips_any_c_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)'
31751 `int __builtin_mips_all_c_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)'
31752 `int __builtin_mips_any_cabs_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)'
31753 `int __builtin_mips_all_cabs_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)'
31754      Comparison of four paired-single values
31755      (`c.COND.ps'/`cabs.COND.ps', `bc1any4t'/`bc1any4f').
31757      These functions use `c.COND.ps' or `cabs.COND.ps' to compare A
31758      with B and to compare C with D.  The `any' forms return true if
31759      any of the four results are true and the `all' forms return true
31760      if all four results are true.  For example:
31762           v2sf a, b, c, d;
31763           if (__builtin_mips_any_c_eq_4s (a, b, c, d))
31764             some_are_true ();
31765           else
31766             all_are_false ();
31768           if (__builtin_mips_all_c_eq_4s (a, b, c, d))
31769             all_are_true ();
31770           else
31771             some_are_false ();
31773 \x1f
31774 File: gcc.info,  Node: picoChip Built-in Functions,  Next: PowerPC AltiVec Built-in Functions,  Prev: Other MIPS Built-in Functions,  Up: Target Builtins
31776 5.50.10 picoChip Built-in Functions
31777 -----------------------------------
31779 GCC provides an interface to selected machine instructions from the
31780 picoChip instruction set.
31782 `int __builtin_sbc (int VALUE)'
31783      Sign bit count.  Return the number of consecutive bits in VALUE
31784      which have the same value as the sign-bit.  The result is the
31785      number of leading sign bits minus one, giving the number of
31786      redundant sign bits in VALUE.
31788 `int __builtin_byteswap (int VALUE)'
31789      Byte swap.  Return the result of swapping the upper and lower
31790      bytes of VALUE.
31792 `int __builtin_brev (int VALUE)'
31793      Bit reversal.  Return the result of reversing the bits in VALUE.
31794      Bit 15 is swapped with bit 0, bit 14 is swapped with bit 1, and so
31795      on.
31797 `int __builtin_adds (int X, int Y)'
31798      Saturating addition.  Return the result of adding X and Y, storing
31799      the value 32767 if the result overflows.
31801 `int __builtin_subs (int X, int Y)'
31802      Saturating subtraction.  Return the result of subtracting Y from
31803      X, storing the value -32768 if the result overflows.
31805 `void __builtin_halt (void)'
31806      Halt.  The processor will stop execution.  This built-in is useful
31807      for implementing assertions.
31810 \x1f
31811 File: gcc.info,  Node: Other MIPS Built-in Functions,  Next: picoChip Built-in Functions,  Prev: MIPS Loongson Built-in Functions,  Up: Target Builtins
31813 5.50.11 Other MIPS Built-in Functions
31814 -------------------------------------
31816 GCC provides other MIPS-specific built-in functions:
31818 `void __builtin_mips_cache (int OP, const volatile void *ADDR)'
31819      Insert a `cache' instruction with operands OP and ADDR.  GCC
31820      defines the preprocessor macro `___GCC_HAVE_BUILTIN_MIPS_CACHE'
31821      when this function is available.
31823 \x1f
31824 File: gcc.info,  Node: PowerPC AltiVec Built-in Functions,  Next: SPARC VIS Built-in Functions,  Prev: picoChip Built-in Functions,  Up: Target Builtins
31826 5.50.12 PowerPC AltiVec Built-in Functions
31827 ------------------------------------------
31829 GCC provides an interface for the PowerPC family of processors to access
31830 the AltiVec operations described in Motorola's AltiVec Programming
31831 Interface Manual.  The interface is made available by including
31832 `<altivec.h>' and using `-maltivec' and `-mabi=altivec'.  The interface
31833 supports the following vector types.
31835      vector unsigned char
31836      vector signed char
31837      vector bool char
31839      vector unsigned short
31840      vector signed short
31841      vector bool short
31842      vector pixel
31844      vector unsigned int
31845      vector signed int
31846      vector bool int
31847      vector float
31849  GCC's implementation of the high-level language interface available
31850 from C and C++ code differs from Motorola's documentation in several
31851 ways.
31853    * A vector constant is a list of constant expressions within curly
31854      braces.
31856    * A vector initializer requires no cast if the vector constant is of
31857      the same type as the variable it is initializing.
31859    * If `signed' or `unsigned' is omitted, the signedness of the vector
31860      type is the default signedness of the base type.  The default
31861      varies depending on the operating system, so a portable program
31862      should always specify the signedness.
31864    * Compiling with `-maltivec' adds keywords `__vector', `vector',
31865      `__pixel', `pixel', `__bool' and `bool'.  When compiling ISO C,
31866      the context-sensitive substitution of the keywords `vector',
31867      `pixel' and `bool' is disabled.  To use them, you must include
31868      `<altivec.h>' instead.
31870    * GCC allows using a `typedef' name as the type specifier for a
31871      vector type.
31873    * For C, overloaded functions are implemented with macros so the
31874      following does not work:
31876             vec_add ((vector signed int){1, 2, 3, 4}, foo);
31878      Since `vec_add' is a macro, the vector constant in the example is
31879      treated as four separate arguments.  Wrap the entire argument in
31880      parentheses for this to work.
31882  _Note:_ Only the `<altivec.h>' interface is supported.  Internally,
31883 GCC uses built-in functions to achieve the functionality in the
31884 aforementioned header file, but they are not supported and are subject
31885 to change without notice.
31887  The following interfaces are supported for the generic and specific
31888 AltiVec operations and the AltiVec predicates.  In cases where there is
31889 a direct mapping between generic and specific operations, only the
31890 generic names are shown here, although the specific operations can also
31891 be used.
31893  Arguments that are documented as `const int' require literal integral
31894 values within the range required for that operation.
31896      vector signed char vec_abs (vector signed char);
31897      vector signed short vec_abs (vector signed short);
31898      vector signed int vec_abs (vector signed int);
31899      vector float vec_abs (vector float);
31901      vector signed char vec_abss (vector signed char);
31902      vector signed short vec_abss (vector signed short);
31903      vector signed int vec_abss (vector signed int);
31905      vector signed char vec_add (vector bool char, vector signed char);
31906      vector signed char vec_add (vector signed char, vector bool char);
31907      vector signed char vec_add (vector signed char, vector signed char);
31908      vector unsigned char vec_add (vector bool char, vector unsigned char);
31909      vector unsigned char vec_add (vector unsigned char, vector bool char);
31910      vector unsigned char vec_add (vector unsigned char,
31911                                    vector unsigned char);
31912      vector signed short vec_add (vector bool short, vector signed short);
31913      vector signed short vec_add (vector signed short, vector bool short);
31914      vector signed short vec_add (vector signed short, vector signed short);
31915      vector unsigned short vec_add (vector bool short,
31916                                     vector unsigned short);
31917      vector unsigned short vec_add (vector unsigned short,
31918                                     vector bool short);
31919      vector unsigned short vec_add (vector unsigned short,
31920                                     vector unsigned short);
31921      vector signed int vec_add (vector bool int, vector signed int);
31922      vector signed int vec_add (vector signed int, vector bool int);
31923      vector signed int vec_add (vector signed int, vector signed int);
31924      vector unsigned int vec_add (vector bool int, vector unsigned int);
31925      vector unsigned int vec_add (vector unsigned int, vector bool int);
31926      vector unsigned int vec_add (vector unsigned int, vector unsigned int);
31927      vector float vec_add (vector float, vector float);
31929      vector float vec_vaddfp (vector float, vector float);
31931      vector signed int vec_vadduwm (vector bool int, vector signed int);
31932      vector signed int vec_vadduwm (vector signed int, vector bool int);
31933      vector signed int vec_vadduwm (vector signed int, vector signed int);
31934      vector unsigned int vec_vadduwm (vector bool int, vector unsigned int);
31935      vector unsigned int vec_vadduwm (vector unsigned int, vector bool int);
31936      vector unsigned int vec_vadduwm (vector unsigned int,
31937                                       vector unsigned int);
31939      vector signed short vec_vadduhm (vector bool short,
31940                                       vector signed short);
31941      vector signed short vec_vadduhm (vector signed short,
31942                                       vector bool short);
31943      vector signed short vec_vadduhm (vector signed short,
31944                                       vector signed short);
31945      vector unsigned short vec_vadduhm (vector bool short,
31946                                         vector unsigned short);
31947      vector unsigned short vec_vadduhm (vector unsigned short,
31948                                         vector bool short);
31949      vector unsigned short vec_vadduhm (vector unsigned short,
31950                                         vector unsigned short);
31952      vector signed char vec_vaddubm (vector bool char, vector signed char);
31953      vector signed char vec_vaddubm (vector signed char, vector bool char);
31954      vector signed char vec_vaddubm (vector signed char, vector signed char);
31955      vector unsigned char vec_vaddubm (vector bool char,
31956                                        vector unsigned char);
31957      vector unsigned char vec_vaddubm (vector unsigned char,
31958                                        vector bool char);
31959      vector unsigned char vec_vaddubm (vector unsigned char,
31960                                        vector unsigned char);
31962      vector unsigned int vec_addc (vector unsigned int, vector unsigned int);
31964      vector unsigned char vec_adds (vector bool char, vector unsigned char);
31965      vector unsigned char vec_adds (vector unsigned char, vector bool char);
31966      vector unsigned char vec_adds (vector unsigned char,
31967                                     vector unsigned char);
31968      vector signed char vec_adds (vector bool char, vector signed char);
31969      vector signed char vec_adds (vector signed char, vector bool char);
31970      vector signed char vec_adds (vector signed char, vector signed char);
31971      vector unsigned short vec_adds (vector bool short,
31972                                      vector unsigned short);
31973      vector unsigned short vec_adds (vector unsigned short,
31974                                      vector bool short);
31975      vector unsigned short vec_adds (vector unsigned short,
31976                                      vector unsigned short);
31977      vector signed short vec_adds (vector bool short, vector signed short);
31978      vector signed short vec_adds (vector signed short, vector bool short);
31979      vector signed short vec_adds (vector signed short, vector signed short);
31980      vector unsigned int vec_adds (vector bool int, vector unsigned int);
31981      vector unsigned int vec_adds (vector unsigned int, vector bool int);
31982      vector unsigned int vec_adds (vector unsigned int, vector unsigned int);
31983      vector signed int vec_adds (vector bool int, vector signed int);
31984      vector signed int vec_adds (vector signed int, vector bool int);
31985      vector signed int vec_adds (vector signed int, vector signed int);
31987      vector signed int vec_vaddsws (vector bool int, vector signed int);
31988      vector signed int vec_vaddsws (vector signed int, vector bool int);
31989      vector signed int vec_vaddsws (vector signed int, vector signed int);
31991      vector unsigned int vec_vadduws (vector bool int, vector unsigned int);
31992      vector unsigned int vec_vadduws (vector unsigned int, vector bool int);
31993      vector unsigned int vec_vadduws (vector unsigned int,
31994                                       vector unsigned int);
31996      vector signed short vec_vaddshs (vector bool short,
31997                                       vector signed short);
31998      vector signed short vec_vaddshs (vector signed short,
31999                                       vector bool short);
32000      vector signed short vec_vaddshs (vector signed short,
32001                                       vector signed short);
32003      vector unsigned short vec_vadduhs (vector bool short,
32004                                         vector unsigned short);
32005      vector unsigned short vec_vadduhs (vector unsigned short,
32006                                         vector bool short);
32007      vector unsigned short vec_vadduhs (vector unsigned short,
32008                                         vector unsigned short);
32010      vector signed char vec_vaddsbs (vector bool char, vector signed char);
32011      vector signed char vec_vaddsbs (vector signed char, vector bool char);
32012      vector signed char vec_vaddsbs (vector signed char, vector signed char);
32014      vector unsigned char vec_vaddubs (vector bool char,
32015                                        vector unsigned char);
32016      vector unsigned char vec_vaddubs (vector unsigned char,
32017                                        vector bool char);
32018      vector unsigned char vec_vaddubs (vector unsigned char,
32019                                        vector unsigned char);
32021      vector float vec_and (vector float, vector float);
32022      vector float vec_and (vector float, vector bool int);
32023      vector float vec_and (vector bool int, vector float);
32024      vector bool int vec_and (vector bool int, vector bool int);
32025      vector signed int vec_and (vector bool int, vector signed int);
32026      vector signed int vec_and (vector signed int, vector bool int);
32027      vector signed int vec_and (vector signed int, vector signed int);
32028      vector unsigned int vec_and (vector bool int, vector unsigned int);
32029      vector unsigned int vec_and (vector unsigned int, vector bool int);
32030      vector unsigned int vec_and (vector unsigned int, vector unsigned int);
32031      vector bool short vec_and (vector bool short, vector bool short);
32032      vector signed short vec_and (vector bool short, vector signed short);
32033      vector signed short vec_and (vector signed short, vector bool short);
32034      vector signed short vec_and (vector signed short, vector signed short);
32035      vector unsigned short vec_and (vector bool short,
32036                                     vector unsigned short);
32037      vector unsigned short vec_and (vector unsigned short,
32038                                     vector bool short);
32039      vector unsigned short vec_and (vector unsigned short,
32040                                     vector unsigned short);
32041      vector signed char vec_and (vector bool char, vector signed char);
32042      vector bool char vec_and (vector bool char, vector bool char);
32043      vector signed char vec_and (vector signed char, vector bool char);
32044      vector signed char vec_and (vector signed char, vector signed char);
32045      vector unsigned char vec_and (vector bool char, vector unsigned char);
32046      vector unsigned char vec_and (vector unsigned char, vector bool char);
32047      vector unsigned char vec_and (vector unsigned char,
32048                                    vector unsigned char);
32050      vector float vec_andc (vector float, vector float);
32051      vector float vec_andc (vector float, vector bool int);
32052      vector float vec_andc (vector bool int, vector float);
32053      vector bool int vec_andc (vector bool int, vector bool int);
32054      vector signed int vec_andc (vector bool int, vector signed int);
32055      vector signed int vec_andc (vector signed int, vector bool int);
32056      vector signed int vec_andc (vector signed int, vector signed int);
32057      vector unsigned int vec_andc (vector bool int, vector unsigned int);
32058      vector unsigned int vec_andc (vector unsigned int, vector bool int);
32059      vector unsigned int vec_andc (vector unsigned int, vector unsigned int);
32060      vector bool short vec_andc (vector bool short, vector bool short);
32061      vector signed short vec_andc (vector bool short, vector signed short);
32062      vector signed short vec_andc (vector signed short, vector bool short);
32063      vector signed short vec_andc (vector signed short, vector signed short);
32064      vector unsigned short vec_andc (vector bool short,
32065                                      vector unsigned short);
32066      vector unsigned short vec_andc (vector unsigned short,
32067                                      vector bool short);
32068      vector unsigned short vec_andc (vector unsigned short,
32069                                      vector unsigned short);
32070      vector signed char vec_andc (vector bool char, vector signed char);
32071      vector bool char vec_andc (vector bool char, vector bool char);
32072      vector signed char vec_andc (vector signed char, vector bool char);
32073      vector signed char vec_andc (vector signed char, vector signed char);
32074      vector unsigned char vec_andc (vector bool char, vector unsigned char);
32075      vector unsigned char vec_andc (vector unsigned char, vector bool char);
32076      vector unsigned char vec_andc (vector unsigned char,
32077                                     vector unsigned char);
32079      vector unsigned char vec_avg (vector unsigned char,
32080                                    vector unsigned char);
32081      vector signed char vec_avg (vector signed char, vector signed char);
32082      vector unsigned short vec_avg (vector unsigned short,
32083                                     vector unsigned short);
32084      vector signed short vec_avg (vector signed short, vector signed short);
32085      vector unsigned int vec_avg (vector unsigned int, vector unsigned int);
32086      vector signed int vec_avg (vector signed int, vector signed int);
32088      vector signed int vec_vavgsw (vector signed int, vector signed int);
32090      vector unsigned int vec_vavguw (vector unsigned int,
32091                                      vector unsigned int);
32093      vector signed short vec_vavgsh (vector signed short,
32094                                      vector signed short);
32096      vector unsigned short vec_vavguh (vector unsigned short,
32097                                        vector unsigned short);
32099      vector signed char vec_vavgsb (vector signed char, vector signed char);
32101      vector unsigned char vec_vavgub (vector unsigned char,
32102                                       vector unsigned char);
32104      vector float vec_ceil (vector float);
32106      vector signed int vec_cmpb (vector float, vector float);
32108      vector bool char vec_cmpeq (vector signed char, vector signed char);
32109      vector bool char vec_cmpeq (vector unsigned char, vector unsigned char);
32110      vector bool short vec_cmpeq (vector signed short, vector signed short);
32111      vector bool short vec_cmpeq (vector unsigned short,
32112                                   vector unsigned short);
32113      vector bool int vec_cmpeq (vector signed int, vector signed int);
32114      vector bool int vec_cmpeq (vector unsigned int, vector unsigned int);
32115      vector bool int vec_cmpeq (vector float, vector float);
32117      vector bool int vec_vcmpeqfp (vector float, vector float);
32119      vector bool int vec_vcmpequw (vector signed int, vector signed int);
32120      vector bool int vec_vcmpequw (vector unsigned int, vector unsigned int);
32122      vector bool short vec_vcmpequh (vector signed short,
32123                                      vector signed short);
32124      vector bool short vec_vcmpequh (vector unsigned short,
32125                                      vector unsigned short);
32127      vector bool char vec_vcmpequb (vector signed char, vector signed char);
32128      vector bool char vec_vcmpequb (vector unsigned char,
32129                                     vector unsigned char);
32131      vector bool int vec_cmpge (vector float, vector float);
32133      vector bool char vec_cmpgt (vector unsigned char, vector unsigned char);
32134      vector bool char vec_cmpgt (vector signed char, vector signed char);
32135      vector bool short vec_cmpgt (vector unsigned short,
32136                                   vector unsigned short);
32137      vector bool short vec_cmpgt (vector signed short, vector signed short);
32138      vector bool int vec_cmpgt (vector unsigned int, vector unsigned int);
32139      vector bool int vec_cmpgt (vector signed int, vector signed int);
32140      vector bool int vec_cmpgt (vector float, vector float);
32142      vector bool int vec_vcmpgtfp (vector float, vector float);
32144      vector bool int vec_vcmpgtsw (vector signed int, vector signed int);
32146      vector bool int vec_vcmpgtuw (vector unsigned int, vector unsigned int);
32148      vector bool short vec_vcmpgtsh (vector signed short,
32149                                      vector signed short);
32151      vector bool short vec_vcmpgtuh (vector unsigned short,
32152                                      vector unsigned short);
32154      vector bool char vec_vcmpgtsb (vector signed char, vector signed char);
32156      vector bool char vec_vcmpgtub (vector unsigned char,
32157                                     vector unsigned char);
32159      vector bool int vec_cmple (vector float, vector float);
32161      vector bool char vec_cmplt (vector unsigned char, vector unsigned char);
32162      vector bool char vec_cmplt (vector signed char, vector signed char);
32163      vector bool short vec_cmplt (vector unsigned short,
32164                                   vector unsigned short);
32165      vector bool short vec_cmplt (vector signed short, vector signed short);
32166      vector bool int vec_cmplt (vector unsigned int, vector unsigned int);
32167      vector bool int vec_cmplt (vector signed int, vector signed int);
32168      vector bool int vec_cmplt (vector float, vector float);
32170      vector float vec_ctf (vector unsigned int, const int);
32171      vector float vec_ctf (vector signed int, const int);
32173      vector float vec_vcfsx (vector signed int, const int);
32175      vector float vec_vcfux (vector unsigned int, const int);
32177      vector signed int vec_cts (vector float, const int);
32179      vector unsigned int vec_ctu (vector float, const int);
32181      void vec_dss (const int);
32183      void vec_dssall (void);
32185      void vec_dst (const vector unsigned char *, int, const int);
32186      void vec_dst (const vector signed char *, int, const int);
32187      void vec_dst (const vector bool char *, int, const int);
32188      void vec_dst (const vector unsigned short *, int, const int);
32189      void vec_dst (const vector signed short *, int, const int);
32190      void vec_dst (const vector bool short *, int, const int);
32191      void vec_dst (const vector pixel *, int, const int);
32192      void vec_dst (const vector unsigned int *, int, const int);
32193      void vec_dst (const vector signed int *, int, const int);
32194      void vec_dst (const vector bool int *, int, const int);
32195      void vec_dst (const vector float *, int, const int);
32196      void vec_dst (const unsigned char *, int, const int);
32197      void vec_dst (const signed char *, int, const int);
32198      void vec_dst (const unsigned short *, int, const int);
32199      void vec_dst (const short *, int, const int);
32200      void vec_dst (const unsigned int *, int, const int);
32201      void vec_dst (const int *, int, const int);
32202      void vec_dst (const unsigned long *, int, const int);
32203      void vec_dst (const long *, int, const int);
32204      void vec_dst (const float *, int, const int);
32206      void vec_dstst (const vector unsigned char *, int, const int);
32207      void vec_dstst (const vector signed char *, int, const int);
32208      void vec_dstst (const vector bool char *, int, const int);
32209      void vec_dstst (const vector unsigned short *, int, const int);
32210      void vec_dstst (const vector signed short *, int, const int);
32211      void vec_dstst (const vector bool short *, int, const int);
32212      void vec_dstst (const vector pixel *, int, const int);
32213      void vec_dstst (const vector unsigned int *, int, const int);
32214      void vec_dstst (const vector signed int *, int, const int);
32215      void vec_dstst (const vector bool int *, int, const int);
32216      void vec_dstst (const vector float *, int, const int);
32217      void vec_dstst (const unsigned char *, int, const int);
32218      void vec_dstst (const signed char *, int, const int);
32219      void vec_dstst (const unsigned short *, int, const int);
32220      void vec_dstst (const short *, int, const int);
32221      void vec_dstst (const unsigned int *, int, const int);
32222      void vec_dstst (const int *, int, const int);
32223      void vec_dstst (const unsigned long *, int, const int);
32224      void vec_dstst (const long *, int, const int);
32225      void vec_dstst (const float *, int, const int);
32227      void vec_dststt (const vector unsigned char *, int, const int);
32228      void vec_dststt (const vector signed char *, int, const int);
32229      void vec_dststt (const vector bool char *, int, const int);
32230      void vec_dststt (const vector unsigned short *, int, const int);
32231      void vec_dststt (const vector signed short *, int, const int);
32232      void vec_dststt (const vector bool short *, int, const int);
32233      void vec_dststt (const vector pixel *, int, const int);
32234      void vec_dststt (const vector unsigned int *, int, const int);
32235      void vec_dststt (const vector signed int *, int, const int);
32236      void vec_dststt (const vector bool int *, int, const int);
32237      void vec_dststt (const vector float *, int, const int);
32238      void vec_dststt (const unsigned char *, int, const int);
32239      void vec_dststt (const signed char *, int, const int);
32240      void vec_dststt (const unsigned short *, int, const int);
32241      void vec_dststt (const short *, int, const int);
32242      void vec_dststt (const unsigned int *, int, const int);
32243      void vec_dststt (const int *, int, const int);
32244      void vec_dststt (const unsigned long *, int, const int);
32245      void vec_dststt (const long *, int, const int);
32246      void vec_dststt (const float *, int, const int);
32248      void vec_dstt (const vector unsigned char *, int, const int);
32249      void vec_dstt (const vector signed char *, int, const int);
32250      void vec_dstt (const vector bool char *, int, const int);
32251      void vec_dstt (const vector unsigned short *, int, const int);
32252      void vec_dstt (const vector signed short *, int, const int);
32253      void vec_dstt (const vector bool short *, int, const int);
32254      void vec_dstt (const vector pixel *, int, const int);
32255      void vec_dstt (const vector unsigned int *, int, const int);
32256      void vec_dstt (const vector signed int *, int, const int);
32257      void vec_dstt (const vector bool int *, int, const int);
32258      void vec_dstt (const vector float *, int, const int);
32259      void vec_dstt (const unsigned char *, int, const int);
32260      void vec_dstt (const signed char *, int, const int);
32261      void vec_dstt (const unsigned short *, int, const int);
32262      void vec_dstt (const short *, int, const int);
32263      void vec_dstt (const unsigned int *, int, const int);
32264      void vec_dstt (const int *, int, const int);
32265      void vec_dstt (const unsigned long *, int, const int);
32266      void vec_dstt (const long *, int, const int);
32267      void vec_dstt (const float *, int, const int);
32269      vector float vec_expte (vector float);
32271      vector float vec_floor (vector float);
32273      vector float vec_ld (int, const vector float *);
32274      vector float vec_ld (int, const float *);
32275      vector bool int vec_ld (int, const vector bool int *);
32276      vector signed int vec_ld (int, const vector signed int *);
32277      vector signed int vec_ld (int, const int *);
32278      vector signed int vec_ld (int, const long *);
32279      vector unsigned int vec_ld (int, const vector unsigned int *);
32280      vector unsigned int vec_ld (int, const unsigned int *);
32281      vector unsigned int vec_ld (int, const unsigned long *);
32282      vector bool short vec_ld (int, const vector bool short *);
32283      vector pixel vec_ld (int, const vector pixel *);
32284      vector signed short vec_ld (int, const vector signed short *);
32285      vector signed short vec_ld (int, const short *);
32286      vector unsigned short vec_ld (int, const vector unsigned short *);
32287      vector unsigned short vec_ld (int, const unsigned short *);
32288      vector bool char vec_ld (int, const vector bool char *);
32289      vector signed char vec_ld (int, const vector signed char *);
32290      vector signed char vec_ld (int, const signed char *);
32291      vector unsigned char vec_ld (int, const vector unsigned char *);
32292      vector unsigned char vec_ld (int, const unsigned char *);
32294      vector signed char vec_lde (int, const signed char *);
32295      vector unsigned char vec_lde (int, const unsigned char *);
32296      vector signed short vec_lde (int, const short *);
32297      vector unsigned short vec_lde (int, const unsigned short *);
32298      vector float vec_lde (int, const float *);
32299      vector signed int vec_lde (int, const int *);
32300      vector unsigned int vec_lde (int, const unsigned int *);
32301      vector signed int vec_lde (int, const long *);
32302      vector unsigned int vec_lde (int, const unsigned long *);
32304      vector float vec_lvewx (int, float *);
32305      vector signed int vec_lvewx (int, int *);
32306      vector unsigned int vec_lvewx (int, unsigned int *);
32307      vector signed int vec_lvewx (int, long *);
32308      vector unsigned int vec_lvewx (int, unsigned long *);
32310      vector signed short vec_lvehx (int, short *);
32311      vector unsigned short vec_lvehx (int, unsigned short *);
32313      vector signed char vec_lvebx (int, char *);
32314      vector unsigned char vec_lvebx (int, unsigned char *);
32316      vector float vec_ldl (int, const vector float *);
32317      vector float vec_ldl (int, const float *);
32318      vector bool int vec_ldl (int, const vector bool int *);
32319      vector signed int vec_ldl (int, const vector signed int *);
32320      vector signed int vec_ldl (int, const int *);
32321      vector signed int vec_ldl (int, const long *);
32322      vector unsigned int vec_ldl (int, const vector unsigned int *);
32323      vector unsigned int vec_ldl (int, const unsigned int *);
32324      vector unsigned int vec_ldl (int, const unsigned long *);
32325      vector bool short vec_ldl (int, const vector bool short *);
32326      vector pixel vec_ldl (int, const vector pixel *);
32327      vector signed short vec_ldl (int, const vector signed short *);
32328      vector signed short vec_ldl (int, const short *);
32329      vector unsigned short vec_ldl (int, const vector unsigned short *);
32330      vector unsigned short vec_ldl (int, const unsigned short *);
32331      vector bool char vec_ldl (int, const vector bool char *);
32332      vector signed char vec_ldl (int, const vector signed char *);
32333      vector signed char vec_ldl (int, const signed char *);
32334      vector unsigned char vec_ldl (int, const vector unsigned char *);
32335      vector unsigned char vec_ldl (int, const unsigned char *);
32337      vector float vec_loge (vector float);
32339      vector unsigned char vec_lvsl (int, const volatile unsigned char *);
32340      vector unsigned char vec_lvsl (int, const volatile signed char *);
32341      vector unsigned char vec_lvsl (int, const volatile unsigned short *);
32342      vector unsigned char vec_lvsl (int, const volatile short *);
32343      vector unsigned char vec_lvsl (int, const volatile unsigned int *);
32344      vector unsigned char vec_lvsl (int, const volatile int *);
32345      vector unsigned char vec_lvsl (int, const volatile unsigned long *);
32346      vector unsigned char vec_lvsl (int, const volatile long *);
32347      vector unsigned char vec_lvsl (int, const volatile float *);
32349      vector unsigned char vec_lvsr (int, const volatile unsigned char *);
32350      vector unsigned char vec_lvsr (int, const volatile signed char *);
32351      vector unsigned char vec_lvsr (int, const volatile unsigned short *);
32352      vector unsigned char vec_lvsr (int, const volatile short *);
32353      vector unsigned char vec_lvsr (int, const volatile unsigned int *);
32354      vector unsigned char vec_lvsr (int, const volatile int *);
32355      vector unsigned char vec_lvsr (int, const volatile unsigned long *);
32356      vector unsigned char vec_lvsr (int, const volatile long *);
32357      vector unsigned char vec_lvsr (int, const volatile float *);
32359      vector float vec_madd (vector float, vector float, vector float);
32361      vector signed short vec_madds (vector signed short,
32362                                     vector signed short,
32363                                     vector signed short);
32365      vector unsigned char vec_max (vector bool char, vector unsigned char);
32366      vector unsigned char vec_max (vector unsigned char, vector bool char);
32367      vector unsigned char vec_max (vector unsigned char,
32368                                    vector unsigned char);
32369      vector signed char vec_max (vector bool char, vector signed char);
32370      vector signed char vec_max (vector signed char, vector bool char);
32371      vector signed char vec_max (vector signed char, vector signed char);
32372      vector unsigned short vec_max (vector bool short,
32373                                     vector unsigned short);
32374      vector unsigned short vec_max (vector unsigned short,
32375                                     vector bool short);
32376      vector unsigned short vec_max (vector unsigned short,
32377                                     vector unsigned short);
32378      vector signed short vec_max (vector bool short, vector signed short);
32379      vector signed short vec_max (vector signed short, vector bool short);
32380      vector signed short vec_max (vector signed short, vector signed short);
32381      vector unsigned int vec_max (vector bool int, vector unsigned int);
32382      vector unsigned int vec_max (vector unsigned int, vector bool int);
32383      vector unsigned int vec_max (vector unsigned int, vector unsigned int);
32384      vector signed int vec_max (vector bool int, vector signed int);
32385      vector signed int vec_max (vector signed int, vector bool int);
32386      vector signed int vec_max (vector signed int, vector signed int);
32387      vector float vec_max (vector float, vector float);
32389      vector float vec_vmaxfp (vector float, vector float);
32391      vector signed int vec_vmaxsw (vector bool int, vector signed int);
32392      vector signed int vec_vmaxsw (vector signed int, vector bool int);
32393      vector signed int vec_vmaxsw (vector signed int, vector signed int);
32395      vector unsigned int vec_vmaxuw (vector bool int, vector unsigned int);
32396      vector unsigned int vec_vmaxuw (vector unsigned int, vector bool int);
32397      vector unsigned int vec_vmaxuw (vector unsigned int,
32398                                      vector unsigned int);
32400      vector signed short vec_vmaxsh (vector bool short, vector signed short);
32401      vector signed short vec_vmaxsh (vector signed short, vector bool short);
32402      vector signed short vec_vmaxsh (vector signed short,
32403                                      vector signed short);
32405      vector unsigned short vec_vmaxuh (vector bool short,
32406                                        vector unsigned short);
32407      vector unsigned short vec_vmaxuh (vector unsigned short,
32408                                        vector bool short);
32409      vector unsigned short vec_vmaxuh (vector unsigned short,
32410                                        vector unsigned short);
32412      vector signed char vec_vmaxsb (vector bool char, vector signed char);
32413      vector signed char vec_vmaxsb (vector signed char, vector bool char);
32414      vector signed char vec_vmaxsb (vector signed char, vector signed char);
32416      vector unsigned char vec_vmaxub (vector bool char,
32417                                       vector unsigned char);
32418      vector unsigned char vec_vmaxub (vector unsigned char,
32419                                       vector bool char);
32420      vector unsigned char vec_vmaxub (vector unsigned char,
32421                                       vector unsigned char);
32423      vector bool char vec_mergeh (vector bool char, vector bool char);
32424      vector signed char vec_mergeh (vector signed char, vector signed char);
32425      vector unsigned char vec_mergeh (vector unsigned char,
32426                                       vector unsigned char);
32427      vector bool short vec_mergeh (vector bool short, vector bool short);
32428      vector pixel vec_mergeh (vector pixel, vector pixel);
32429      vector signed short vec_mergeh (vector signed short,
32430                                      vector signed short);
32431      vector unsigned short vec_mergeh (vector unsigned short,
32432                                        vector unsigned short);
32433      vector float vec_mergeh (vector float, vector float);
32434      vector bool int vec_mergeh (vector bool int, vector bool int);
32435      vector signed int vec_mergeh (vector signed int, vector signed int);
32436      vector unsigned int vec_mergeh (vector unsigned int,
32437                                      vector unsigned int);
32439      vector float vec_vmrghw (vector float, vector float);
32440      vector bool int vec_vmrghw (vector bool int, vector bool int);
32441      vector signed int vec_vmrghw (vector signed int, vector signed int);
32442      vector unsigned int vec_vmrghw (vector unsigned int,
32443                                      vector unsigned int);
32445      vector bool short vec_vmrghh (vector bool short, vector bool short);
32446      vector signed short vec_vmrghh (vector signed short,
32447                                      vector signed short);
32448      vector unsigned short vec_vmrghh (vector unsigned short,
32449                                        vector unsigned short);
32450      vector pixel vec_vmrghh (vector pixel, vector pixel);
32452      vector bool char vec_vmrghb (vector bool char, vector bool char);
32453      vector signed char vec_vmrghb (vector signed char, vector signed char);
32454      vector unsigned char vec_vmrghb (vector unsigned char,
32455                                       vector unsigned char);
32457      vector bool char vec_mergel (vector bool char, vector bool char);
32458      vector signed char vec_mergel (vector signed char, vector signed char);
32459      vector unsigned char vec_mergel (vector unsigned char,
32460                                       vector unsigned char);
32461      vector bool short vec_mergel (vector bool short, vector bool short);
32462      vector pixel vec_mergel (vector pixel, vector pixel);
32463      vector signed short vec_mergel (vector signed short,
32464                                      vector signed short);
32465      vector unsigned short vec_mergel (vector unsigned short,
32466                                        vector unsigned short);
32467      vector float vec_mergel (vector float, vector float);
32468      vector bool int vec_mergel (vector bool int, vector bool int);
32469      vector signed int vec_mergel (vector signed int, vector signed int);
32470      vector unsigned int vec_mergel (vector unsigned int,
32471                                      vector unsigned int);
32473      vector float vec_vmrglw (vector float, vector float);
32474      vector signed int vec_vmrglw (vector signed int, vector signed int);
32475      vector unsigned int vec_vmrglw (vector unsigned int,
32476                                      vector unsigned int);
32477      vector bool int vec_vmrglw (vector bool int, vector bool int);
32479      vector bool short vec_vmrglh (vector bool short, vector bool short);
32480      vector signed short vec_vmrglh (vector signed short,
32481                                      vector signed short);
32482      vector unsigned short vec_vmrglh (vector unsigned short,
32483                                        vector unsigned short);
32484      vector pixel vec_vmrglh (vector pixel, vector pixel);
32486      vector bool char vec_vmrglb (vector bool char, vector bool char);
32487      vector signed char vec_vmrglb (vector signed char, vector signed char);
32488      vector unsigned char vec_vmrglb (vector unsigned char,
32489                                       vector unsigned char);
32491      vector unsigned short vec_mfvscr (void);
32493      vector unsigned char vec_min (vector bool char, vector unsigned char);
32494      vector unsigned char vec_min (vector unsigned char, vector bool char);
32495      vector unsigned char vec_min (vector unsigned char,
32496                                    vector unsigned char);
32497      vector signed char vec_min (vector bool char, vector signed char);
32498      vector signed char vec_min (vector signed char, vector bool char);
32499      vector signed char vec_min (vector signed char, vector signed char);
32500      vector unsigned short vec_min (vector bool short,
32501                                     vector unsigned short);
32502      vector unsigned short vec_min (vector unsigned short,
32503                                     vector bool short);
32504      vector unsigned short vec_min (vector unsigned short,
32505                                     vector unsigned short);
32506      vector signed short vec_min (vector bool short, vector signed short);
32507      vector signed short vec_min (vector signed short, vector bool short);
32508      vector signed short vec_min (vector signed short, vector signed short);
32509      vector unsigned int vec_min (vector bool int, vector unsigned int);
32510      vector unsigned int vec_min (vector unsigned int, vector bool int);
32511      vector unsigned int vec_min (vector unsigned int, vector unsigned int);
32512      vector signed int vec_min (vector bool int, vector signed int);
32513      vector signed int vec_min (vector signed int, vector bool int);
32514      vector signed int vec_min (vector signed int, vector signed int);
32515      vector float vec_min (vector float, vector float);
32517      vector float vec_vminfp (vector float, vector float);
32519      vector signed int vec_vminsw (vector bool int, vector signed int);
32520      vector signed int vec_vminsw (vector signed int, vector bool int);
32521      vector signed int vec_vminsw (vector signed int, vector signed int);
32523      vector unsigned int vec_vminuw (vector bool int, vector unsigned int);
32524      vector unsigned int vec_vminuw (vector unsigned int, vector bool int);
32525      vector unsigned int vec_vminuw (vector unsigned int,
32526                                      vector unsigned int);
32528      vector signed short vec_vminsh (vector bool short, vector signed short);
32529      vector signed short vec_vminsh (vector signed short, vector bool short);
32530      vector signed short vec_vminsh (vector signed short,
32531                                      vector signed short);
32533      vector unsigned short vec_vminuh (vector bool short,
32534                                        vector unsigned short);
32535      vector unsigned short vec_vminuh (vector unsigned short,
32536                                        vector bool short);
32537      vector unsigned short vec_vminuh (vector unsigned short,
32538                                        vector unsigned short);
32540      vector signed char vec_vminsb (vector bool char, vector signed char);
32541      vector signed char vec_vminsb (vector signed char, vector bool char);
32542      vector signed char vec_vminsb (vector signed char, vector signed char);
32544      vector unsigned char vec_vminub (vector bool char,
32545                                       vector unsigned char);
32546      vector unsigned char vec_vminub (vector unsigned char,
32547                                       vector bool char);
32548      vector unsigned char vec_vminub (vector unsigned char,
32549                                       vector unsigned char);
32551      vector signed short vec_mladd (vector signed short,
32552                                     vector signed short,
32553                                     vector signed short);
32554      vector signed short vec_mladd (vector signed short,
32555                                     vector unsigned short,
32556                                     vector unsigned short);
32557      vector signed short vec_mladd (vector unsigned short,
32558                                     vector signed short,
32559                                     vector signed short);
32560      vector unsigned short vec_mladd (vector unsigned short,
32561                                       vector unsigned short,
32562                                       vector unsigned short);
32564      vector signed short vec_mradds (vector signed short,
32565                                      vector signed short,
32566                                      vector signed short);
32568      vector unsigned int vec_msum (vector unsigned char,
32569                                    vector unsigned char,
32570                                    vector unsigned int);
32571      vector signed int vec_msum (vector signed char,
32572                                  vector unsigned char,
32573                                  vector signed int);
32574      vector unsigned int vec_msum (vector unsigned short,
32575                                    vector unsigned short,
32576                                    vector unsigned int);
32577      vector signed int vec_msum (vector signed short,
32578                                  vector signed short,
32579                                  vector signed int);
32581      vector signed int vec_vmsumshm (vector signed short,
32582                                      vector signed short,
32583                                      vector signed int);
32585      vector unsigned int vec_vmsumuhm (vector unsigned short,
32586                                        vector unsigned short,
32587                                        vector unsigned int);
32589      vector signed int vec_vmsummbm (vector signed char,
32590                                      vector unsigned char,
32591                                      vector signed int);
32593      vector unsigned int vec_vmsumubm (vector unsigned char,
32594                                        vector unsigned char,
32595                                        vector unsigned int);
32597      vector unsigned int vec_msums (vector unsigned short,
32598                                     vector unsigned short,
32599                                     vector unsigned int);
32600      vector signed int vec_msums (vector signed short,
32601                                   vector signed short,
32602                                   vector signed int);
32604      vector signed int vec_vmsumshs (vector signed short,
32605                                      vector signed short,
32606                                      vector signed int);
32608      vector unsigned int vec_vmsumuhs (vector unsigned short,
32609                                        vector unsigned short,
32610                                        vector unsigned int);
32612      void vec_mtvscr (vector signed int);
32613      void vec_mtvscr (vector unsigned int);
32614      void vec_mtvscr (vector bool int);
32615      void vec_mtvscr (vector signed short);
32616      void vec_mtvscr (vector unsigned short);
32617      void vec_mtvscr (vector bool short);
32618      void vec_mtvscr (vector pixel);
32619      void vec_mtvscr (vector signed char);
32620      void vec_mtvscr (vector unsigned char);
32621      void vec_mtvscr (vector bool char);
32623      vector unsigned short vec_mule (vector unsigned char,
32624                                      vector unsigned char);
32625      vector signed short vec_mule (vector signed char,
32626                                    vector signed char);
32627      vector unsigned int vec_mule (vector unsigned short,
32628                                    vector unsigned short);
32629      vector signed int vec_mule (vector signed short, vector signed short);
32631      vector signed int vec_vmulesh (vector signed short,
32632                                     vector signed short);
32634      vector unsigned int vec_vmuleuh (vector unsigned short,
32635                                       vector unsigned short);
32637      vector signed short vec_vmulesb (vector signed char,
32638                                       vector signed char);
32640      vector unsigned short vec_vmuleub (vector unsigned char,
32641                                        vector unsigned char);
32643      vector unsigned short vec_mulo (vector unsigned char,
32644                                      vector unsigned char);
32645      vector signed short vec_mulo (vector signed char, vector signed char);
32646      vector unsigned int vec_mulo (vector unsigned short,
32647                                    vector unsigned short);
32648      vector signed int vec_mulo (vector signed short, vector signed short);
32650      vector signed int vec_vmulosh (vector signed short,
32651                                     vector signed short);
32653      vector unsigned int vec_vmulouh (vector unsigned short,
32654                                       vector unsigned short);
32656      vector signed short vec_vmulosb (vector signed char,
32657                                       vector signed char);
32659      vector unsigned short vec_vmuloub (vector unsigned char,
32660                                         vector unsigned char);
32662      vector float vec_nmsub (vector float, vector float, vector float);
32664      vector float vec_nor (vector float, vector float);
32665      vector signed int vec_nor (vector signed int, vector signed int);
32666      vector unsigned int vec_nor (vector unsigned int, vector unsigned int);
32667      vector bool int vec_nor (vector bool int, vector bool int);
32668      vector signed short vec_nor (vector signed short, vector signed short);
32669      vector unsigned short vec_nor (vector unsigned short,
32670                                     vector unsigned short);
32671      vector bool short vec_nor (vector bool short, vector bool short);
32672      vector signed char vec_nor (vector signed char, vector signed char);
32673      vector unsigned char vec_nor (vector unsigned char,
32674                                    vector unsigned char);
32675      vector bool char vec_nor (vector bool char, vector bool char);
32677      vector float vec_or (vector float, vector float);
32678      vector float vec_or (vector float, vector bool int);
32679      vector float vec_or (vector bool int, vector float);
32680      vector bool int vec_or (vector bool int, vector bool int);
32681      vector signed int vec_or (vector bool int, vector signed int);
32682      vector signed int vec_or (vector signed int, vector bool int);
32683      vector signed int vec_or (vector signed int, vector signed int);
32684      vector unsigned int vec_or (vector bool int, vector unsigned int);
32685      vector unsigned int vec_or (vector unsigned int, vector bool int);
32686      vector unsigned int vec_or (vector unsigned int, vector unsigned int);
32687      vector bool short vec_or (vector bool short, vector bool short);
32688      vector signed short vec_or (vector bool short, vector signed short);
32689      vector signed short vec_or (vector signed short, vector bool short);
32690      vector signed short vec_or (vector signed short, vector signed short);
32691      vector unsigned short vec_or (vector bool short, vector unsigned short);
32692      vector unsigned short vec_or (vector unsigned short, vector bool short);
32693      vector unsigned short vec_or (vector unsigned short,
32694                                    vector unsigned short);
32695      vector signed char vec_or (vector bool char, vector signed char);
32696      vector bool char vec_or (vector bool char, vector bool char);
32697      vector signed char vec_or (vector signed char, vector bool char);
32698      vector signed char vec_or (vector signed char, vector signed char);
32699      vector unsigned char vec_or (vector bool char, vector unsigned char);
32700      vector unsigned char vec_or (vector unsigned char, vector bool char);
32701      vector unsigned char vec_or (vector unsigned char,
32702                                   vector unsigned char);
32704      vector signed char vec_pack (vector signed short, vector signed short);
32705      vector unsigned char vec_pack (vector unsigned short,
32706                                     vector unsigned short);
32707      vector bool char vec_pack (vector bool short, vector bool short);
32708      vector signed short vec_pack (vector signed int, vector signed int);
32709      vector unsigned short vec_pack (vector unsigned int,
32710                                      vector unsigned int);
32711      vector bool short vec_pack (vector bool int, vector bool int);
32713      vector bool short vec_vpkuwum (vector bool int, vector bool int);
32714      vector signed short vec_vpkuwum (vector signed int, vector signed int);
32715      vector unsigned short vec_vpkuwum (vector unsigned int,
32716                                         vector unsigned int);
32718      vector bool char vec_vpkuhum (vector bool short, vector bool short);
32719      vector signed char vec_vpkuhum (vector signed short,
32720                                      vector signed short);
32721      vector unsigned char vec_vpkuhum (vector unsigned short,
32722                                        vector unsigned short);
32724      vector pixel vec_packpx (vector unsigned int, vector unsigned int);
32726      vector unsigned char vec_packs (vector unsigned short,
32727                                      vector unsigned short);
32728      vector signed char vec_packs (vector signed short, vector signed short);
32729      vector unsigned short vec_packs (vector unsigned int,
32730                                       vector unsigned int);
32731      vector signed short vec_packs (vector signed int, vector signed int);
32733      vector signed short vec_vpkswss (vector signed int, vector signed int);
32735      vector unsigned short vec_vpkuwus (vector unsigned int,
32736                                         vector unsigned int);
32738      vector signed char vec_vpkshss (vector signed short,
32739                                      vector signed short);
32741      vector unsigned char vec_vpkuhus (vector unsigned short,
32742                                        vector unsigned short);
32744      vector unsigned char vec_packsu (vector unsigned short,
32745                                       vector unsigned short);
32746      vector unsigned char vec_packsu (vector signed short,
32747                                       vector signed short);
32748      vector unsigned short vec_packsu (vector unsigned int,
32749                                        vector unsigned int);
32750      vector unsigned short vec_packsu (vector signed int, vector signed int);
32752      vector unsigned short vec_vpkswus (vector signed int,
32753                                         vector signed int);
32755      vector unsigned char vec_vpkshus (vector signed short,
32756                                        vector signed short);
32758      vector float vec_perm (vector float,
32759                             vector float,
32760                             vector unsigned char);
32761      vector signed int vec_perm (vector signed int,
32762                                  vector signed int,
32763                                  vector unsigned char);
32764      vector unsigned int vec_perm (vector unsigned int,
32765                                    vector unsigned int,
32766                                    vector unsigned char);
32767      vector bool int vec_perm (vector bool int,
32768                                vector bool int,
32769                                vector unsigned char);
32770      vector signed short vec_perm (vector signed short,
32771                                    vector signed short,
32772                                    vector unsigned char);
32773      vector unsigned short vec_perm (vector unsigned short,
32774                                      vector unsigned short,
32775                                      vector unsigned char);
32776      vector bool short vec_perm (vector bool short,
32777                                  vector bool short,
32778                                  vector unsigned char);
32779      vector pixel vec_perm (vector pixel,
32780                             vector pixel,
32781                             vector unsigned char);
32782      vector signed char vec_perm (vector signed char,
32783                                   vector signed char,
32784                                   vector unsigned char);
32785      vector unsigned char vec_perm (vector unsigned char,
32786                                     vector unsigned char,
32787                                     vector unsigned char);
32788      vector bool char vec_perm (vector bool char,
32789                                 vector bool char,
32790                                 vector unsigned char);
32792      vector float vec_re (vector float);
32794      vector signed char vec_rl (vector signed char,
32795                                 vector unsigned char);
32796      vector unsigned char vec_rl (vector unsigned char,
32797                                   vector unsigned char);
32798      vector signed short vec_rl (vector signed short, vector unsigned short);
32799      vector unsigned short vec_rl (vector unsigned short,
32800                                    vector unsigned short);
32801      vector signed int vec_rl (vector signed int, vector unsigned int);
32802      vector unsigned int vec_rl (vector unsigned int, vector unsigned int);
32804      vector signed int vec_vrlw (vector signed int, vector unsigned int);
32805      vector unsigned int vec_vrlw (vector unsigned int, vector unsigned int);
32807      vector signed short vec_vrlh (vector signed short,
32808                                    vector unsigned short);
32809      vector unsigned short vec_vrlh (vector unsigned short,
32810                                      vector unsigned short);
32812      vector signed char vec_vrlb (vector signed char, vector unsigned char);
32813      vector unsigned char vec_vrlb (vector unsigned char,
32814                                     vector unsigned char);
32816      vector float vec_round (vector float);
32818      vector float vec_rsqrte (vector float);
32820      vector float vec_sel (vector float, vector float, vector bool int);
32821      vector float vec_sel (vector float, vector float, vector unsigned int);
32822      vector signed int vec_sel (vector signed int,
32823                                 vector signed int,
32824                                 vector bool int);
32825      vector signed int vec_sel (vector signed int,
32826                                 vector signed int,
32827                                 vector unsigned int);
32828      vector unsigned int vec_sel (vector unsigned int,
32829                                   vector unsigned int,
32830                                   vector bool int);
32831      vector unsigned int vec_sel (vector unsigned int,
32832                                   vector unsigned int,
32833                                   vector unsigned int);
32834      vector bool int vec_sel (vector bool int,
32835                               vector bool int,
32836                               vector bool int);
32837      vector bool int vec_sel (vector bool int,
32838                               vector bool int,
32839                               vector unsigned int);
32840      vector signed short vec_sel (vector signed short,
32841                                   vector signed short,
32842                                   vector bool short);
32843      vector signed short vec_sel (vector signed short,
32844                                   vector signed short,
32845                                   vector unsigned short);
32846      vector unsigned short vec_sel (vector unsigned short,
32847                                     vector unsigned short,
32848                                     vector bool short);
32849      vector unsigned short vec_sel (vector unsigned short,
32850                                     vector unsigned short,
32851                                     vector unsigned short);
32852      vector bool short vec_sel (vector bool short,
32853                                 vector bool short,
32854                                 vector bool short);
32855      vector bool short vec_sel (vector bool short,
32856                                 vector bool short,
32857                                 vector unsigned short);
32858      vector signed char vec_sel (vector signed char,
32859                                  vector signed char,
32860                                  vector bool char);
32861      vector signed char vec_sel (vector signed char,
32862                                  vector signed char,
32863                                  vector unsigned char);
32864      vector unsigned char vec_sel (vector unsigned char,
32865                                    vector unsigned char,
32866                                    vector bool char);
32867      vector unsigned char vec_sel (vector unsigned char,
32868                                    vector unsigned char,
32869                                    vector unsigned char);
32870      vector bool char vec_sel (vector bool char,
32871                                vector bool char,
32872                                vector bool char);
32873      vector bool char vec_sel (vector bool char,
32874                                vector bool char,
32875                                vector unsigned char);
32877      vector signed char vec_sl (vector signed char,
32878                                 vector unsigned char);
32879      vector unsigned char vec_sl (vector unsigned char,
32880                                   vector unsigned char);
32881      vector signed short vec_sl (vector signed short, vector unsigned short);
32882      vector unsigned short vec_sl (vector unsigned short,
32883                                    vector unsigned short);
32884      vector signed int vec_sl (vector signed int, vector unsigned int);
32885      vector unsigned int vec_sl (vector unsigned int, vector unsigned int);
32887      vector signed int vec_vslw (vector signed int, vector unsigned int);
32888      vector unsigned int vec_vslw (vector unsigned int, vector unsigned int);
32890      vector signed short vec_vslh (vector signed short,
32891                                    vector unsigned short);
32892      vector unsigned short vec_vslh (vector unsigned short,
32893                                      vector unsigned short);
32895      vector signed char vec_vslb (vector signed char, vector unsigned char);
32896      vector unsigned char vec_vslb (vector unsigned char,
32897                                     vector unsigned char);
32899      vector float vec_sld (vector float, vector float, const int);
32900      vector signed int vec_sld (vector signed int,
32901                                 vector signed int,
32902                                 const int);
32903      vector unsigned int vec_sld (vector unsigned int,
32904                                   vector unsigned int,
32905                                   const int);
32906      vector bool int vec_sld (vector bool int,
32907                               vector bool int,
32908                               const int);
32909      vector signed short vec_sld (vector signed short,
32910                                   vector signed short,
32911                                   const int);
32912      vector unsigned short vec_sld (vector unsigned short,
32913                                     vector unsigned short,
32914                                     const int);
32915      vector bool short vec_sld (vector bool short,
32916                                 vector bool short,
32917                                 const int);
32918      vector pixel vec_sld (vector pixel,
32919                            vector pixel,
32920                            const int);
32921      vector signed char vec_sld (vector signed char,
32922                                  vector signed char,
32923                                  const int);
32924      vector unsigned char vec_sld (vector unsigned char,
32925                                    vector unsigned char,
32926                                    const int);
32927      vector bool char vec_sld (vector bool char,
32928                                vector bool char,
32929                                const int);
32931      vector signed int vec_sll (vector signed int,
32932                                 vector unsigned int);
32933      vector signed int vec_sll (vector signed int,
32934                                 vector unsigned short);
32935      vector signed int vec_sll (vector signed int,
32936                                 vector unsigned char);
32937      vector unsigned int vec_sll (vector unsigned int,
32938                                   vector unsigned int);
32939      vector unsigned int vec_sll (vector unsigned int,
32940                                   vector unsigned short);
32941      vector unsigned int vec_sll (vector unsigned int,
32942                                   vector unsigned char);
32943      vector bool int vec_sll (vector bool int,
32944                               vector unsigned int);
32945      vector bool int vec_sll (vector bool int,
32946                               vector unsigned short);
32947      vector bool int vec_sll (vector bool int,
32948                               vector unsigned char);
32949      vector signed short vec_sll (vector signed short,
32950                                   vector unsigned int);
32951      vector signed short vec_sll (vector signed short,
32952                                   vector unsigned short);
32953      vector signed short vec_sll (vector signed short,
32954                                   vector unsigned char);
32955      vector unsigned short vec_sll (vector unsigned short,
32956                                     vector unsigned int);
32957      vector unsigned short vec_sll (vector unsigned short,
32958                                     vector unsigned short);
32959      vector unsigned short vec_sll (vector unsigned short,
32960                                     vector unsigned char);
32961      vector bool short vec_sll (vector bool short, vector unsigned int);
32962      vector bool short vec_sll (vector bool short, vector unsigned short);
32963      vector bool short vec_sll (vector bool short, vector unsigned char);
32964      vector pixel vec_sll (vector pixel, vector unsigned int);
32965      vector pixel vec_sll (vector pixel, vector unsigned short);
32966      vector pixel vec_sll (vector pixel, vector unsigned char);
32967      vector signed char vec_sll (vector signed char, vector unsigned int);
32968      vector signed char vec_sll (vector signed char, vector unsigned short);
32969      vector signed char vec_sll (vector signed char, vector unsigned char);
32970      vector unsigned char vec_sll (vector unsigned char,
32971                                    vector unsigned int);
32972      vector unsigned char vec_sll (vector unsigned char,
32973                                    vector unsigned short);
32974      vector unsigned char vec_sll (vector unsigned char,
32975                                    vector unsigned char);
32976      vector bool char vec_sll (vector bool char, vector unsigned int);
32977      vector bool char vec_sll (vector bool char, vector unsigned short);
32978      vector bool char vec_sll (vector bool char, vector unsigned char);
32980      vector float vec_slo (vector float, vector signed char);
32981      vector float vec_slo (vector float, vector unsigned char);
32982      vector signed int vec_slo (vector signed int, vector signed char);
32983      vector signed int vec_slo (vector signed int, vector unsigned char);
32984      vector unsigned int vec_slo (vector unsigned int, vector signed char);
32985      vector unsigned int vec_slo (vector unsigned int, vector unsigned char);
32986      vector signed short vec_slo (vector signed short, vector signed char);
32987      vector signed short vec_slo (vector signed short, vector unsigned char);
32988      vector unsigned short vec_slo (vector unsigned short,
32989                                     vector signed char);
32990      vector unsigned short vec_slo (vector unsigned short,
32991                                     vector unsigned char);
32992      vector pixel vec_slo (vector pixel, vector signed char);
32993      vector pixel vec_slo (vector pixel, vector unsigned char);
32994      vector signed char vec_slo (vector signed char, vector signed char);
32995      vector signed char vec_slo (vector signed char, vector unsigned char);
32996      vector unsigned char vec_slo (vector unsigned char, vector signed char);
32997      vector unsigned char vec_slo (vector unsigned char,
32998                                    vector unsigned char);
33000      vector signed char vec_splat (vector signed char, const int);
33001      vector unsigned char vec_splat (vector unsigned char, const int);
33002      vector bool char vec_splat (vector bool char, const int);
33003      vector signed short vec_splat (vector signed short, const int);
33004      vector unsigned short vec_splat (vector unsigned short, const int);
33005      vector bool short vec_splat (vector bool short, const int);
33006      vector pixel vec_splat (vector pixel, const int);
33007      vector float vec_splat (vector float, const int);
33008      vector signed int vec_splat (vector signed int, const int);
33009      vector unsigned int vec_splat (vector unsigned int, const int);
33010      vector bool int vec_splat (vector bool int, const int);
33012      vector float vec_vspltw (vector float, const int);
33013      vector signed int vec_vspltw (vector signed int, const int);
33014      vector unsigned int vec_vspltw (vector unsigned int, const int);
33015      vector bool int vec_vspltw (vector bool int, const int);
33017      vector bool short vec_vsplth (vector bool short, const int);
33018      vector signed short vec_vsplth (vector signed short, const int);
33019      vector unsigned short vec_vsplth (vector unsigned short, const int);
33020      vector pixel vec_vsplth (vector pixel, const int);
33022      vector signed char vec_vspltb (vector signed char, const int);
33023      vector unsigned char vec_vspltb (vector unsigned char, const int);
33024      vector bool char vec_vspltb (vector bool char, const int);
33026      vector signed char vec_splat_s8 (const int);
33028      vector signed short vec_splat_s16 (const int);
33030      vector signed int vec_splat_s32 (const int);
33032      vector unsigned char vec_splat_u8 (const int);
33034      vector unsigned short vec_splat_u16 (const int);
33036      vector unsigned int vec_splat_u32 (const int);
33038      vector signed char vec_sr (vector signed char, vector unsigned char);
33039      vector unsigned char vec_sr (vector unsigned char,
33040                                   vector unsigned char);
33041      vector signed short vec_sr (vector signed short,
33042                                  vector unsigned short);
33043      vector unsigned short vec_sr (vector unsigned short,
33044                                    vector unsigned short);
33045      vector signed int vec_sr (vector signed int, vector unsigned int);
33046      vector unsigned int vec_sr (vector unsigned int, vector unsigned int);
33048      vector signed int vec_vsrw (vector signed int, vector unsigned int);
33049      vector unsigned int vec_vsrw (vector unsigned int, vector unsigned int);
33051      vector signed short vec_vsrh (vector signed short,
33052                                    vector unsigned short);
33053      vector unsigned short vec_vsrh (vector unsigned short,
33054                                      vector unsigned short);
33056      vector signed char vec_vsrb (vector signed char, vector unsigned char);
33057      vector unsigned char vec_vsrb (vector unsigned char,
33058                                     vector unsigned char);
33060      vector signed char vec_sra (vector signed char, vector unsigned char);
33061      vector unsigned char vec_sra (vector unsigned char,
33062                                    vector unsigned char);
33063      vector signed short vec_sra (vector signed short,
33064                                   vector unsigned short);
33065      vector unsigned short vec_sra (vector unsigned short,
33066                                     vector unsigned short);
33067      vector signed int vec_sra (vector signed int, vector unsigned int);
33068      vector unsigned int vec_sra (vector unsigned int, vector unsigned int);
33070      vector signed int vec_vsraw (vector signed int, vector unsigned int);
33071      vector unsigned int vec_vsraw (vector unsigned int,
33072                                     vector unsigned int);
33074      vector signed short vec_vsrah (vector signed short,
33075                                     vector unsigned short);
33076      vector unsigned short vec_vsrah (vector unsigned short,
33077                                       vector unsigned short);
33079      vector signed char vec_vsrab (vector signed char, vector unsigned char);
33080      vector unsigned char vec_vsrab (vector unsigned char,
33081                                      vector unsigned char);
33083      vector signed int vec_srl (vector signed int, vector unsigned int);
33084      vector signed int vec_srl (vector signed int, vector unsigned short);
33085      vector signed int vec_srl (vector signed int, vector unsigned char);
33086      vector unsigned int vec_srl (vector unsigned int, vector unsigned int);
33087      vector unsigned int vec_srl (vector unsigned int,
33088                                   vector unsigned short);
33089      vector unsigned int vec_srl (vector unsigned int, vector unsigned char);
33090      vector bool int vec_srl (vector bool int, vector unsigned int);
33091      vector bool int vec_srl (vector bool int, vector unsigned short);
33092      vector bool int vec_srl (vector bool int, vector unsigned char);
33093      vector signed short vec_srl (vector signed short, vector unsigned int);
33094      vector signed short vec_srl (vector signed short,
33095                                   vector unsigned short);
33096      vector signed short vec_srl (vector signed short, vector unsigned char);
33097      vector unsigned short vec_srl (vector unsigned short,
33098                                     vector unsigned int);
33099      vector unsigned short vec_srl (vector unsigned short,
33100                                     vector unsigned short);
33101      vector unsigned short vec_srl (vector unsigned short,
33102                                     vector unsigned char);
33103      vector bool short vec_srl (vector bool short, vector unsigned int);
33104      vector bool short vec_srl (vector bool short, vector unsigned short);
33105      vector bool short vec_srl (vector bool short, vector unsigned char);
33106      vector pixel vec_srl (vector pixel, vector unsigned int);
33107      vector pixel vec_srl (vector pixel, vector unsigned short);
33108      vector pixel vec_srl (vector pixel, vector unsigned char);
33109      vector signed char vec_srl (vector signed char, vector unsigned int);
33110      vector signed char vec_srl (vector signed char, vector unsigned short);
33111      vector signed char vec_srl (vector signed char, vector unsigned char);
33112      vector unsigned char vec_srl (vector unsigned char,
33113                                    vector unsigned int);
33114      vector unsigned char vec_srl (vector unsigned char,
33115                                    vector unsigned short);
33116      vector unsigned char vec_srl (vector unsigned char,
33117                                    vector unsigned char);
33118      vector bool char vec_srl (vector bool char, vector unsigned int);
33119      vector bool char vec_srl (vector bool char, vector unsigned short);
33120      vector bool char vec_srl (vector bool char, vector unsigned char);
33122      vector float vec_sro (vector float, vector signed char);
33123      vector float vec_sro (vector float, vector unsigned char);
33124      vector signed int vec_sro (vector signed int, vector signed char);
33125      vector signed int vec_sro (vector signed int, vector unsigned char);
33126      vector unsigned int vec_sro (vector unsigned int, vector signed char);
33127      vector unsigned int vec_sro (vector unsigned int, vector unsigned char);
33128      vector signed short vec_sro (vector signed short, vector signed char);
33129      vector signed short vec_sro (vector signed short, vector unsigned char);
33130      vector unsigned short vec_sro (vector unsigned short,
33131                                     vector signed char);
33132      vector unsigned short vec_sro (vector unsigned short,
33133                                     vector unsigned char);
33134      vector pixel vec_sro (vector pixel, vector signed char);
33135      vector pixel vec_sro (vector pixel, vector unsigned char);
33136      vector signed char vec_sro (vector signed char, vector signed char);
33137      vector signed char vec_sro (vector signed char, vector unsigned char);
33138      vector unsigned char vec_sro (vector unsigned char, vector signed char);
33139      vector unsigned char vec_sro (vector unsigned char,
33140                                    vector unsigned char);
33142      void vec_st (vector float, int, vector float *);
33143      void vec_st (vector float, int, float *);
33144      void vec_st (vector signed int, int, vector signed int *);
33145      void vec_st (vector signed int, int, int *);
33146      void vec_st (vector unsigned int, int, vector unsigned int *);
33147      void vec_st (vector unsigned int, int, unsigned int *);
33148      void vec_st (vector bool int, int, vector bool int *);
33149      void vec_st (vector bool int, int, unsigned int *);
33150      void vec_st (vector bool int, int, int *);
33151      void vec_st (vector signed short, int, vector signed short *);
33152      void vec_st (vector signed short, int, short *);
33153      void vec_st (vector unsigned short, int, vector unsigned short *);
33154      void vec_st (vector unsigned short, int, unsigned short *);
33155      void vec_st (vector bool short, int, vector bool short *);
33156      void vec_st (vector bool short, int, unsigned short *);
33157      void vec_st (vector pixel, int, vector pixel *);
33158      void vec_st (vector pixel, int, unsigned short *);
33159      void vec_st (vector pixel, int, short *);
33160      void vec_st (vector bool short, int, short *);
33161      void vec_st (vector signed char, int, vector signed char *);
33162      void vec_st (vector signed char, int, signed char *);
33163      void vec_st (vector unsigned char, int, vector unsigned char *);
33164      void vec_st (vector unsigned char, int, unsigned char *);
33165      void vec_st (vector bool char, int, vector bool char *);
33166      void vec_st (vector bool char, int, unsigned char *);
33167      void vec_st (vector bool char, int, signed char *);
33169      void vec_ste (vector signed char, int, signed char *);
33170      void vec_ste (vector unsigned char, int, unsigned char *);
33171      void vec_ste (vector bool char, int, signed char *);
33172      void vec_ste (vector bool char, int, unsigned char *);
33173      void vec_ste (vector signed short, int, short *);
33174      void vec_ste (vector unsigned short, int, unsigned short *);
33175      void vec_ste (vector bool short, int, short *);
33176      void vec_ste (vector bool short, int, unsigned short *);
33177      void vec_ste (vector pixel, int, short *);
33178      void vec_ste (vector pixel, int, unsigned short *);
33179      void vec_ste (vector float, int, float *);
33180      void vec_ste (vector signed int, int, int *);
33181      void vec_ste (vector unsigned int, int, unsigned int *);
33182      void vec_ste (vector bool int, int, int *);
33183      void vec_ste (vector bool int, int, unsigned int *);
33185      void vec_stvewx (vector float, int, float *);
33186      void vec_stvewx (vector signed int, int, int *);
33187      void vec_stvewx (vector unsigned int, int, unsigned int *);
33188      void vec_stvewx (vector bool int, int, int *);
33189      void vec_stvewx (vector bool int, int, unsigned int *);
33191      void vec_stvehx (vector signed short, int, short *);
33192      void vec_stvehx (vector unsigned short, int, unsigned short *);
33193      void vec_stvehx (vector bool short, int, short *);
33194      void vec_stvehx (vector bool short, int, unsigned short *);
33195      void vec_stvehx (vector pixel, int, short *);
33196      void vec_stvehx (vector pixel, int, unsigned short *);
33198      void vec_stvebx (vector signed char, int, signed char *);
33199      void vec_stvebx (vector unsigned char, int, unsigned char *);
33200      void vec_stvebx (vector bool char, int, signed char *);
33201      void vec_stvebx (vector bool char, int, unsigned char *);
33203      void vec_stl (vector float, int, vector float *);
33204      void vec_stl (vector float, int, float *);
33205      void vec_stl (vector signed int, int, vector signed int *);
33206      void vec_stl (vector signed int, int, int *);
33207      void vec_stl (vector unsigned int, int, vector unsigned int *);
33208      void vec_stl (vector unsigned int, int, unsigned int *);
33209      void vec_stl (vector bool int, int, vector bool int *);
33210      void vec_stl (vector bool int, int, unsigned int *);
33211      void vec_stl (vector bool int, int, int *);
33212      void vec_stl (vector signed short, int, vector signed short *);
33213      void vec_stl (vector signed short, int, short *);
33214      void vec_stl (vector unsigned short, int, vector unsigned short *);
33215      void vec_stl (vector unsigned short, int, unsigned short *);
33216      void vec_stl (vector bool short, int, vector bool short *);
33217      void vec_stl (vector bool short, int, unsigned short *);
33218      void vec_stl (vector bool short, int, short *);
33219      void vec_stl (vector pixel, int, vector pixel *);
33220      void vec_stl (vector pixel, int, unsigned short *);
33221      void vec_stl (vector pixel, int, short *);
33222      void vec_stl (vector signed char, int, vector signed char *);
33223      void vec_stl (vector signed char, int, signed char *);
33224      void vec_stl (vector unsigned char, int, vector unsigned char *);
33225      void vec_stl (vector unsigned char, int, unsigned char *);
33226      void vec_stl (vector bool char, int, vector bool char *);
33227      void vec_stl (vector bool char, int, unsigned char *);
33228      void vec_stl (vector bool char, int, signed char *);
33230      vector signed char vec_sub (vector bool char, vector signed char);
33231      vector signed char vec_sub (vector signed char, vector bool char);
33232      vector signed char vec_sub (vector signed char, vector signed char);
33233      vector unsigned char vec_sub (vector bool char, vector unsigned char);
33234      vector unsigned char vec_sub (vector unsigned char, vector bool char);
33235      vector unsigned char vec_sub (vector unsigned char,
33236                                    vector unsigned char);
33237      vector signed short vec_sub (vector bool short, vector signed short);
33238      vector signed short vec_sub (vector signed short, vector bool short);
33239      vector signed short vec_sub (vector signed short, vector signed short);
33240      vector unsigned short vec_sub (vector bool short,
33241                                     vector unsigned short);
33242      vector unsigned short vec_sub (vector unsigned short,
33243                                     vector bool short);
33244      vector unsigned short vec_sub (vector unsigned short,
33245                                     vector unsigned short);
33246      vector signed int vec_sub (vector bool int, vector signed int);
33247      vector signed int vec_sub (vector signed int, vector bool int);
33248      vector signed int vec_sub (vector signed int, vector signed int);
33249      vector unsigned int vec_sub (vector bool int, vector unsigned int);
33250      vector unsigned int vec_sub (vector unsigned int, vector bool int);
33251      vector unsigned int vec_sub (vector unsigned int, vector unsigned int);
33252      vector float vec_sub (vector float, vector float);
33254      vector float vec_vsubfp (vector float, vector float);
33256      vector signed int vec_vsubuwm (vector bool int, vector signed int);
33257      vector signed int vec_vsubuwm (vector signed int, vector bool int);
33258      vector signed int vec_vsubuwm (vector signed int, vector signed int);
33259      vector unsigned int vec_vsubuwm (vector bool int, vector unsigned int);
33260      vector unsigned int vec_vsubuwm (vector unsigned int, vector bool int);
33261      vector unsigned int vec_vsubuwm (vector unsigned int,
33262                                       vector unsigned int);
33264      vector signed short vec_vsubuhm (vector bool short,
33265                                       vector signed short);
33266      vector signed short vec_vsubuhm (vector signed short,
33267                                       vector bool short);
33268      vector signed short vec_vsubuhm (vector signed short,
33269                                       vector signed short);
33270      vector unsigned short vec_vsubuhm (vector bool short,
33271                                         vector unsigned short);
33272      vector unsigned short vec_vsubuhm (vector unsigned short,
33273                                         vector bool short);
33274      vector unsigned short vec_vsubuhm (vector unsigned short,
33275                                         vector unsigned short);
33277      vector signed char vec_vsububm (vector bool char, vector signed char);
33278      vector signed char vec_vsububm (vector signed char, vector bool char);
33279      vector signed char vec_vsububm (vector signed char, vector signed char);
33280      vector unsigned char vec_vsububm (vector bool char,
33281                                        vector unsigned char);
33282      vector unsigned char vec_vsububm (vector unsigned char,
33283                                        vector bool char);
33284      vector unsigned char vec_vsububm (vector unsigned char,
33285                                        vector unsigned char);
33287      vector unsigned int vec_subc (vector unsigned int, vector unsigned int);
33289      vector unsigned char vec_subs (vector bool char, vector unsigned char);
33290      vector unsigned char vec_subs (vector unsigned char, vector bool char);
33291      vector unsigned char vec_subs (vector unsigned char,
33292                                     vector unsigned char);
33293      vector signed char vec_subs (vector bool char, vector signed char);
33294      vector signed char vec_subs (vector signed char, vector bool char);
33295      vector signed char vec_subs (vector signed char, vector signed char);
33296      vector unsigned short vec_subs (vector bool short,
33297                                      vector unsigned short);
33298      vector unsigned short vec_subs (vector unsigned short,
33299                                      vector bool short);
33300      vector unsigned short vec_subs (vector unsigned short,
33301                                      vector unsigned short);
33302      vector signed short vec_subs (vector bool short, vector signed short);
33303      vector signed short vec_subs (vector signed short, vector bool short);
33304      vector signed short vec_subs (vector signed short, vector signed short);
33305      vector unsigned int vec_subs (vector bool int, vector unsigned int);
33306      vector unsigned int vec_subs (vector unsigned int, vector bool int);
33307      vector unsigned int vec_subs (vector unsigned int, vector unsigned int);
33308      vector signed int vec_subs (vector bool int, vector signed int);
33309      vector signed int vec_subs (vector signed int, vector bool int);
33310      vector signed int vec_subs (vector signed int, vector signed int);
33312      vector signed int vec_vsubsws (vector bool int, vector signed int);
33313      vector signed int vec_vsubsws (vector signed int, vector bool int);
33314      vector signed int vec_vsubsws (vector signed int, vector signed int);
33316      vector unsigned int vec_vsubuws (vector bool int, vector unsigned int);
33317      vector unsigned int vec_vsubuws (vector unsigned int, vector bool int);
33318      vector unsigned int vec_vsubuws (vector unsigned int,
33319                                       vector unsigned int);
33321      vector signed short vec_vsubshs (vector bool short,
33322                                       vector signed short);
33323      vector signed short vec_vsubshs (vector signed short,
33324                                       vector bool short);
33325      vector signed short vec_vsubshs (vector signed short,
33326                                       vector signed short);
33328      vector unsigned short vec_vsubuhs (vector bool short,
33329                                         vector unsigned short);
33330      vector unsigned short vec_vsubuhs (vector unsigned short,
33331                                         vector bool short);
33332      vector unsigned short vec_vsubuhs (vector unsigned short,
33333                                         vector unsigned short);
33335      vector signed char vec_vsubsbs (vector bool char, vector signed char);
33336      vector signed char vec_vsubsbs (vector signed char, vector bool char);
33337      vector signed char vec_vsubsbs (vector signed char, vector signed char);
33339      vector unsigned char vec_vsububs (vector bool char,
33340                                        vector unsigned char);
33341      vector unsigned char vec_vsububs (vector unsigned char,
33342                                        vector bool char);
33343      vector unsigned char vec_vsububs (vector unsigned char,
33344                                        vector unsigned char);
33346      vector unsigned int vec_sum4s (vector unsigned char,
33347                                     vector unsigned int);
33348      vector signed int vec_sum4s (vector signed char, vector signed int);
33349      vector signed int vec_sum4s (vector signed short, vector signed int);
33351      vector signed int vec_vsum4shs (vector signed short, vector signed int);
33353      vector signed int vec_vsum4sbs (vector signed char, vector signed int);
33355      vector unsigned int vec_vsum4ubs (vector unsigned char,
33356                                        vector unsigned int);
33358      vector signed int vec_sum2s (vector signed int, vector signed int);
33360      vector signed int vec_sums (vector signed int, vector signed int);
33362      vector float vec_trunc (vector float);
33364      vector signed short vec_unpackh (vector signed char);
33365      vector bool short vec_unpackh (vector bool char);
33366      vector signed int vec_unpackh (vector signed short);
33367      vector bool int vec_unpackh (vector bool short);
33368      vector unsigned int vec_unpackh (vector pixel);
33370      vector bool int vec_vupkhsh (vector bool short);
33371      vector signed int vec_vupkhsh (vector signed short);
33373      vector unsigned int vec_vupkhpx (vector pixel);
33375      vector bool short vec_vupkhsb (vector bool char);
33376      vector signed short vec_vupkhsb (vector signed char);
33378      vector signed short vec_unpackl (vector signed char);
33379      vector bool short vec_unpackl (vector bool char);
33380      vector unsigned int vec_unpackl (vector pixel);
33381      vector signed int vec_unpackl (vector signed short);
33382      vector bool int vec_unpackl (vector bool short);
33384      vector unsigned int vec_vupklpx (vector pixel);
33386      vector bool int vec_vupklsh (vector bool short);
33387      vector signed int vec_vupklsh (vector signed short);
33389      vector bool short vec_vupklsb (vector bool char);
33390      vector signed short vec_vupklsb (vector signed char);
33392      vector float vec_xor (vector float, vector float);
33393      vector float vec_xor (vector float, vector bool int);
33394      vector float vec_xor (vector bool int, vector float);
33395      vector bool int vec_xor (vector bool int, vector bool int);
33396      vector signed int vec_xor (vector bool int, vector signed int);
33397      vector signed int vec_xor (vector signed int, vector bool int);
33398      vector signed int vec_xor (vector signed int, vector signed int);
33399      vector unsigned int vec_xor (vector bool int, vector unsigned int);
33400      vector unsigned int vec_xor (vector unsigned int, vector bool int);
33401      vector unsigned int vec_xor (vector unsigned int, vector unsigned int);
33402      vector bool short vec_xor (vector bool short, vector bool short);
33403      vector signed short vec_xor (vector bool short, vector signed short);
33404      vector signed short vec_xor (vector signed short, vector bool short);
33405      vector signed short vec_xor (vector signed short, vector signed short);
33406      vector unsigned short vec_xor (vector bool short,
33407                                     vector unsigned short);
33408      vector unsigned short vec_xor (vector unsigned short,
33409                                     vector bool short);
33410      vector unsigned short vec_xor (vector unsigned short,
33411                                     vector unsigned short);
33412      vector signed char vec_xor (vector bool char, vector signed char);
33413      vector bool char vec_xor (vector bool char, vector bool char);
33414      vector signed char vec_xor (vector signed char, vector bool char);
33415      vector signed char vec_xor (vector signed char, vector signed char);
33416      vector unsigned char vec_xor (vector bool char, vector unsigned char);
33417      vector unsigned char vec_xor (vector unsigned char, vector bool char);
33418      vector unsigned char vec_xor (vector unsigned char,
33419                                    vector unsigned char);
33421      int vec_all_eq (vector signed char, vector bool char);
33422      int vec_all_eq (vector signed char, vector signed char);
33423      int vec_all_eq (vector unsigned char, vector bool char);
33424      int vec_all_eq (vector unsigned char, vector unsigned char);
33425      int vec_all_eq (vector bool char, vector bool char);
33426      int vec_all_eq (vector bool char, vector unsigned char);
33427      int vec_all_eq (vector bool char, vector signed char);
33428      int vec_all_eq (vector signed short, vector bool short);
33429      int vec_all_eq (vector signed short, vector signed short);
33430      int vec_all_eq (vector unsigned short, vector bool short);
33431      int vec_all_eq (vector unsigned short, vector unsigned short);
33432      int vec_all_eq (vector bool short, vector bool short);
33433      int vec_all_eq (vector bool short, vector unsigned short);
33434      int vec_all_eq (vector bool short, vector signed short);
33435      int vec_all_eq (vector pixel, vector pixel);
33436      int vec_all_eq (vector signed int, vector bool int);
33437      int vec_all_eq (vector signed int, vector signed int);
33438      int vec_all_eq (vector unsigned int, vector bool int);
33439      int vec_all_eq (vector unsigned int, vector unsigned int);
33440      int vec_all_eq (vector bool int, vector bool int);
33441      int vec_all_eq (vector bool int, vector unsigned int);
33442      int vec_all_eq (vector bool int, vector signed int);
33443      int vec_all_eq (vector float, vector float);
33445      int vec_all_ge (vector bool char, vector unsigned char);
33446      int vec_all_ge (vector unsigned char, vector bool char);
33447      int vec_all_ge (vector unsigned char, vector unsigned char);
33448      int vec_all_ge (vector bool char, vector signed char);
33449      int vec_all_ge (vector signed char, vector bool char);
33450      int vec_all_ge (vector signed char, vector signed char);
33451      int vec_all_ge (vector bool short, vector unsigned short);
33452      int vec_all_ge (vector unsigned short, vector bool short);
33453      int vec_all_ge (vector unsigned short, vector unsigned short);
33454      int vec_all_ge (vector signed short, vector signed short);
33455      int vec_all_ge (vector bool short, vector signed short);
33456      int vec_all_ge (vector signed short, vector bool short);
33457      int vec_all_ge (vector bool int, vector unsigned int);
33458      int vec_all_ge (vector unsigned int, vector bool int);
33459      int vec_all_ge (vector unsigned int, vector unsigned int);
33460      int vec_all_ge (vector bool int, vector signed int);
33461      int vec_all_ge (vector signed int, vector bool int);
33462      int vec_all_ge (vector signed int, vector signed int);
33463      int vec_all_ge (vector float, vector float);
33465      int vec_all_gt (vector bool char, vector unsigned char);
33466      int vec_all_gt (vector unsigned char, vector bool char);
33467      int vec_all_gt (vector unsigned char, vector unsigned char);
33468      int vec_all_gt (vector bool char, vector signed char);
33469      int vec_all_gt (vector signed char, vector bool char);
33470      int vec_all_gt (vector signed char, vector signed char);
33471      int vec_all_gt (vector bool short, vector unsigned short);
33472      int vec_all_gt (vector unsigned short, vector bool short);
33473      int vec_all_gt (vector unsigned short, vector unsigned short);
33474      int vec_all_gt (vector bool short, vector signed short);
33475      int vec_all_gt (vector signed short, vector bool short);
33476      int vec_all_gt (vector signed short, vector signed short);
33477      int vec_all_gt (vector bool int, vector unsigned int);
33478      int vec_all_gt (vector unsigned int, vector bool int);
33479      int vec_all_gt (vector unsigned int, vector unsigned int);
33480      int vec_all_gt (vector bool int, vector signed int);
33481      int vec_all_gt (vector signed int, vector bool int);
33482      int vec_all_gt (vector signed int, vector signed int);
33483      int vec_all_gt (vector float, vector float);
33485      int vec_all_in (vector float, vector float);
33487      int vec_all_le (vector bool char, vector unsigned char);
33488      int vec_all_le (vector unsigned char, vector bool char);
33489      int vec_all_le (vector unsigned char, vector unsigned char);
33490      int vec_all_le (vector bool char, vector signed char);
33491      int vec_all_le (vector signed char, vector bool char);
33492      int vec_all_le (vector signed char, vector signed char);
33493      int vec_all_le (vector bool short, vector unsigned short);
33494      int vec_all_le (vector unsigned short, vector bool short);
33495      int vec_all_le (vector unsigned short, vector unsigned short);
33496      int vec_all_le (vector bool short, vector signed short);
33497      int vec_all_le (vector signed short, vector bool short);
33498      int vec_all_le (vector signed short, vector signed short);
33499      int vec_all_le (vector bool int, vector unsigned int);
33500      int vec_all_le (vector unsigned int, vector bool int);
33501      int vec_all_le (vector unsigned int, vector unsigned int);
33502      int vec_all_le (vector bool int, vector signed int);
33503      int vec_all_le (vector signed int, vector bool int);
33504      int vec_all_le (vector signed int, vector signed int);
33505      int vec_all_le (vector float, vector float);
33507      int vec_all_lt (vector bool char, vector unsigned char);
33508      int vec_all_lt (vector unsigned char, vector bool char);
33509      int vec_all_lt (vector unsigned char, vector unsigned char);
33510      int vec_all_lt (vector bool char, vector signed char);
33511      int vec_all_lt (vector signed char, vector bool char);
33512      int vec_all_lt (vector signed char, vector signed char);
33513      int vec_all_lt (vector bool short, vector unsigned short);
33514      int vec_all_lt (vector unsigned short, vector bool short);
33515      int vec_all_lt (vector unsigned short, vector unsigned short);
33516      int vec_all_lt (vector bool short, vector signed short);
33517      int vec_all_lt (vector signed short, vector bool short);
33518      int vec_all_lt (vector signed short, vector signed short);
33519      int vec_all_lt (vector bool int, vector unsigned int);
33520      int vec_all_lt (vector unsigned int, vector bool int);
33521      int vec_all_lt (vector unsigned int, vector unsigned int);
33522      int vec_all_lt (vector bool int, vector signed int);
33523      int vec_all_lt (vector signed int, vector bool int);
33524      int vec_all_lt (vector signed int, vector signed int);
33525      int vec_all_lt (vector float, vector float);
33527      int vec_all_nan (vector float);
33529      int vec_all_ne (vector signed char, vector bool char);
33530      int vec_all_ne (vector signed char, vector signed char);
33531      int vec_all_ne (vector unsigned char, vector bool char);
33532      int vec_all_ne (vector unsigned char, vector unsigned char);
33533      int vec_all_ne (vector bool char, vector bool char);
33534      int vec_all_ne (vector bool char, vector unsigned char);
33535      int vec_all_ne (vector bool char, vector signed char);
33536      int vec_all_ne (vector signed short, vector bool short);
33537      int vec_all_ne (vector signed short, vector signed short);
33538      int vec_all_ne (vector unsigned short, vector bool short);
33539      int vec_all_ne (vector unsigned short, vector unsigned short);
33540      int vec_all_ne (vector bool short, vector bool short);
33541      int vec_all_ne (vector bool short, vector unsigned short);
33542      int vec_all_ne (vector bool short, vector signed short);
33543      int vec_all_ne (vector pixel, vector pixel);
33544      int vec_all_ne (vector signed int, vector bool int);
33545      int vec_all_ne (vector signed int, vector signed int);
33546      int vec_all_ne (vector unsigned int, vector bool int);
33547      int vec_all_ne (vector unsigned int, vector unsigned int);
33548      int vec_all_ne (vector bool int, vector bool int);
33549      int vec_all_ne (vector bool int, vector unsigned int);
33550      int vec_all_ne (vector bool int, vector signed int);
33551      int vec_all_ne (vector float, vector float);
33553      int vec_all_nge (vector float, vector float);
33555      int vec_all_ngt (vector float, vector float);
33557      int vec_all_nle (vector float, vector float);
33559      int vec_all_nlt (vector float, vector float);
33561      int vec_all_numeric (vector float);
33563      int vec_any_eq (vector signed char, vector bool char);
33564      int vec_any_eq (vector signed char, vector signed char);
33565      int vec_any_eq (vector unsigned char, vector bool char);
33566      int vec_any_eq (vector unsigned char, vector unsigned char);
33567      int vec_any_eq (vector bool char, vector bool char);
33568      int vec_any_eq (vector bool char, vector unsigned char);
33569      int vec_any_eq (vector bool char, vector signed char);
33570      int vec_any_eq (vector signed short, vector bool short);
33571      int vec_any_eq (vector signed short, vector signed short);
33572      int vec_any_eq (vector unsigned short, vector bool short);
33573      int vec_any_eq (vector unsigned short, vector unsigned short);
33574      int vec_any_eq (vector bool short, vector bool short);
33575      int vec_any_eq (vector bool short, vector unsigned short);
33576      int vec_any_eq (vector bool short, vector signed short);
33577      int vec_any_eq (vector pixel, vector pixel);
33578      int vec_any_eq (vector signed int, vector bool int);
33579      int vec_any_eq (vector signed int, vector signed int);
33580      int vec_any_eq (vector unsigned int, vector bool int);
33581      int vec_any_eq (vector unsigned int, vector unsigned int);
33582      int vec_any_eq (vector bool int, vector bool int);
33583      int vec_any_eq (vector bool int, vector unsigned int);
33584      int vec_any_eq (vector bool int, vector signed int);
33585      int vec_any_eq (vector float, vector float);
33587      int vec_any_ge (vector signed char, vector bool char);
33588      int vec_any_ge (vector unsigned char, vector bool char);
33589      int vec_any_ge (vector unsigned char, vector unsigned char);
33590      int vec_any_ge (vector signed char, vector signed char);
33591      int vec_any_ge (vector bool char, vector unsigned char);
33592      int vec_any_ge (vector bool char, vector signed char);
33593      int vec_any_ge (vector unsigned short, vector bool short);
33594      int vec_any_ge (vector unsigned short, vector unsigned short);
33595      int vec_any_ge (vector signed short, vector signed short);
33596      int vec_any_ge (vector signed short, vector bool short);
33597      int vec_any_ge (vector bool short, vector unsigned short);
33598      int vec_any_ge (vector bool short, vector signed short);
33599      int vec_any_ge (vector signed int, vector bool int);
33600      int vec_any_ge (vector unsigned int, vector bool int);
33601      int vec_any_ge (vector unsigned int, vector unsigned int);
33602      int vec_any_ge (vector signed int, vector signed int);
33603      int vec_any_ge (vector bool int, vector unsigned int);
33604      int vec_any_ge (vector bool int, vector signed int);
33605      int vec_any_ge (vector float, vector float);
33607      int vec_any_gt (vector bool char, vector unsigned char);
33608      int vec_any_gt (vector unsigned char, vector bool char);
33609      int vec_any_gt (vector unsigned char, vector unsigned char);
33610      int vec_any_gt (vector bool char, vector signed char);
33611      int vec_any_gt (vector signed char, vector bool char);
33612      int vec_any_gt (vector signed char, vector signed char);
33613      int vec_any_gt (vector bool short, vector unsigned short);
33614      int vec_any_gt (vector unsigned short, vector bool short);
33615      int vec_any_gt (vector unsigned short, vector unsigned short);
33616      int vec_any_gt (vector bool short, vector signed short);
33617      int vec_any_gt (vector signed short, vector bool short);
33618      int vec_any_gt (vector signed short, vector signed short);
33619      int vec_any_gt (vector bool int, vector unsigned int);
33620      int vec_any_gt (vector unsigned int, vector bool int);
33621      int vec_any_gt (vector unsigned int, vector unsigned int);
33622      int vec_any_gt (vector bool int, vector signed int);
33623      int vec_any_gt (vector signed int, vector bool int);
33624      int vec_any_gt (vector signed int, vector signed int);
33625      int vec_any_gt (vector float, vector float);
33627      int vec_any_le (vector bool char, vector unsigned char);
33628      int vec_any_le (vector unsigned char, vector bool char);
33629      int vec_any_le (vector unsigned char, vector unsigned char);
33630      int vec_any_le (vector bool char, vector signed char);
33631      int vec_any_le (vector signed char, vector bool char);
33632      int vec_any_le (vector signed char, vector signed char);
33633      int vec_any_le (vector bool short, vector unsigned short);
33634      int vec_any_le (vector unsigned short, vector bool short);
33635      int vec_any_le (vector unsigned short, vector unsigned short);
33636      int vec_any_le (vector bool short, vector signed short);
33637      int vec_any_le (vector signed short, vector bool short);
33638      int vec_any_le (vector signed short, vector signed short);
33639      int vec_any_le (vector bool int, vector unsigned int);
33640      int vec_any_le (vector unsigned int, vector bool int);
33641      int vec_any_le (vector unsigned int, vector unsigned int);
33642      int vec_any_le (vector bool int, vector signed int);
33643      int vec_any_le (vector signed int, vector bool int);
33644      int vec_any_le (vector signed int, vector signed int);
33645      int vec_any_le (vector float, vector float);
33647      int vec_any_lt (vector bool char, vector unsigned char);
33648      int vec_any_lt (vector unsigned char, vector bool char);
33649      int vec_any_lt (vector unsigned char, vector unsigned char);
33650      int vec_any_lt (vector bool char, vector signed char);
33651      int vec_any_lt (vector signed char, vector bool char);
33652      int vec_any_lt (vector signed char, vector signed char);
33653      int vec_any_lt (vector bool short, vector unsigned short);
33654      int vec_any_lt (vector unsigned short, vector bool short);
33655      int vec_any_lt (vector unsigned short, vector unsigned short);
33656      int vec_any_lt (vector bool short, vector signed short);
33657      int vec_any_lt (vector signed short, vector bool short);
33658      int vec_any_lt (vector signed short, vector signed short);
33659      int vec_any_lt (vector bool int, vector unsigned int);
33660      int vec_any_lt (vector unsigned int, vector bool int);
33661      int vec_any_lt (vector unsigned int, vector unsigned int);
33662      int vec_any_lt (vector bool int, vector signed int);
33663      int vec_any_lt (vector signed int, vector bool int);
33664      int vec_any_lt (vector signed int, vector signed int);
33665      int vec_any_lt (vector float, vector float);
33667      int vec_any_nan (vector float);
33669      int vec_any_ne (vector signed char, vector bool char);
33670      int vec_any_ne (vector signed char, vector signed char);
33671      int vec_any_ne (vector unsigned char, vector bool char);
33672      int vec_any_ne (vector unsigned char, vector unsigned char);
33673      int vec_any_ne (vector bool char, vector bool char);
33674      int vec_any_ne (vector bool char, vector unsigned char);
33675      int vec_any_ne (vector bool char, vector signed char);
33676      int vec_any_ne (vector signed short, vector bool short);
33677      int vec_any_ne (vector signed short, vector signed short);
33678      int vec_any_ne (vector unsigned short, vector bool short);
33679      int vec_any_ne (vector unsigned short, vector unsigned short);
33680      int vec_any_ne (vector bool short, vector bool short);
33681      int vec_any_ne (vector bool short, vector unsigned short);
33682      int vec_any_ne (vector bool short, vector signed short);
33683      int vec_any_ne (vector pixel, vector pixel);
33684      int vec_any_ne (vector signed int, vector bool int);
33685      int vec_any_ne (vector signed int, vector signed int);
33686      int vec_any_ne (vector unsigned int, vector bool int);
33687      int vec_any_ne (vector unsigned int, vector unsigned int);
33688      int vec_any_ne (vector bool int, vector bool int);
33689      int vec_any_ne (vector bool int, vector unsigned int);
33690      int vec_any_ne (vector bool int, vector signed int);
33691      int vec_any_ne (vector float, vector float);
33693      int vec_any_nge (vector float, vector float);
33695      int vec_any_ngt (vector float, vector float);
33697      int vec_any_nle (vector float, vector float);
33699      int vec_any_nlt (vector float, vector float);
33701      int vec_any_numeric (vector float);
33703      int vec_any_out (vector float, vector float);
33705 \x1f
33706 File: gcc.info,  Node: SPARC VIS Built-in Functions,  Next: SPU Built-in Functions,  Prev: PowerPC AltiVec Built-in Functions,  Up: Target Builtins
33708 5.50.13 SPARC VIS Built-in Functions
33709 ------------------------------------
33711 GCC supports SIMD operations on the SPARC using both the generic vector
33712 extensions (*note Vector Extensions::) as well as built-in functions for
33713 the SPARC Visual Instruction Set (VIS).  When you use the `-mvis'
33714 switch, the VIS extension is exposed as the following built-in
33715 functions:
33717      typedef int v2si __attribute__ ((vector_size (8)));
33718      typedef short v4hi __attribute__ ((vector_size (8)));
33719      typedef short v2hi __attribute__ ((vector_size (4)));
33720      typedef char v8qi __attribute__ ((vector_size (8)));
33721      typedef char v4qi __attribute__ ((vector_size (4)));
33723      void * __builtin_vis_alignaddr (void *, long);
33724      int64_t __builtin_vis_faligndatadi (int64_t, int64_t);
33725      v2si __builtin_vis_faligndatav2si (v2si, v2si);
33726      v4hi __builtin_vis_faligndatav4hi (v4si, v4si);
33727      v8qi __builtin_vis_faligndatav8qi (v8qi, v8qi);
33729      v4hi __builtin_vis_fexpand (v4qi);
33731      v4hi __builtin_vis_fmul8x16 (v4qi, v4hi);
33732      v4hi __builtin_vis_fmul8x16au (v4qi, v4hi);
33733      v4hi __builtin_vis_fmul8x16al (v4qi, v4hi);
33734      v4hi __builtin_vis_fmul8sux16 (v8qi, v4hi);
33735      v4hi __builtin_vis_fmul8ulx16 (v8qi, v4hi);
33736      v2si __builtin_vis_fmuld8sux16 (v4qi, v2hi);
33737      v2si __builtin_vis_fmuld8ulx16 (v4qi, v2hi);
33739      v4qi __builtin_vis_fpack16 (v4hi);
33740      v8qi __builtin_vis_fpack32 (v2si, v2si);
33741      v2hi __builtin_vis_fpackfix (v2si);
33742      v8qi __builtin_vis_fpmerge (v4qi, v4qi);
33744      int64_t __builtin_vis_pdist (v8qi, v8qi, int64_t);
33746 \x1f
33747 File: gcc.info,  Node: SPU Built-in Functions,  Prev: SPARC VIS Built-in Functions,  Up: Target Builtins
33749 5.50.14 SPU Built-in Functions
33750 ------------------------------
33752 GCC provides extensions for the SPU processor as described in the
33753 Sony/Toshiba/IBM SPU Language Extensions Specification, which can be
33754 found at `http://cell.scei.co.jp/' or
33755 `http://www.ibm.com/developerworks/power/cell/'.  GCC's implementation
33756 differs in several ways.
33758    * The optional extension of specifying vector constants in
33759      parentheses is not supported.
33761    * A vector initializer requires no cast if the vector constant is of
33762      the same type as the variable it is initializing.
33764    * If `signed' or `unsigned' is omitted, the signedness of the vector
33765      type is the default signedness of the base type.  The default
33766      varies depending on the operating system, so a portable program
33767      should always specify the signedness.
33769    * By default, the keyword `__vector' is added. The macro `vector' is
33770      defined in `<spu_intrinsics.h>' and can be undefined.
33772    * GCC allows using a `typedef' name as the type specifier for a
33773      vector type.
33775    * For C, overloaded functions are implemented with macros so the
33776      following does not work:
33778             spu_add ((vector signed int){1, 2, 3, 4}, foo);
33780      Since `spu_add' is a macro, the vector constant in the example is
33781      treated as four separate arguments.  Wrap the entire argument in
33782      parentheses for this to work.
33784    * The extended version of `__builtin_expect' is not supported.
33787  _Note:_ Only the interface described in the aforementioned
33788 specification is supported. Internally, GCC uses built-in functions to
33789 implement the required functionality, but these are not supported and
33790 are subject to change without notice.
33792 \x1f
33793 File: gcc.info,  Node: Target Format Checks,  Next: Pragmas,  Prev: Target Builtins,  Up: C Extensions
33795 5.51 Format Checks Specific to Particular Target Machines
33796 =========================================================
33798 For some target machines, GCC supports additional options to the format
33799 attribute (*note Declaring Attributes of Functions: Function
33800 Attributes.).
33802 * Menu:
33804 * Solaris Format Checks::
33806 \x1f
33807 File: gcc.info,  Node: Solaris Format Checks,  Up: Target Format Checks
33809 5.51.1 Solaris Format Checks
33810 ----------------------------
33812 Solaris targets support the `cmn_err' (or `__cmn_err__') format check.
33813 `cmn_err' accepts a subset of the standard `printf' conversions, and
33814 the two-argument `%b' conversion for displaying bit-fields.  See the
33815 Solaris man page for `cmn_err' for more information.
33817 \x1f
33818 File: gcc.info,  Node: Pragmas,  Next: Unnamed Fields,  Prev: Target Format Checks,  Up: C Extensions
33820 5.52 Pragmas Accepted by GCC
33821 ============================
33823 GCC supports several types of pragmas, primarily in order to compile
33824 code originally written for other compilers.  Note that in general we
33825 do not recommend the use of pragmas; *Note Function Attributes::, for
33826 further explanation.
33828 * Menu:
33830 * ARM Pragmas::
33831 * M32C Pragmas::
33832 * RS/6000 and PowerPC Pragmas::
33833 * Darwin Pragmas::
33834 * Solaris Pragmas::
33835 * Symbol-Renaming Pragmas::
33836 * Structure-Packing Pragmas::
33837 * Weak Pragmas::
33838 * Diagnostic Pragmas::
33839 * Visibility Pragmas::
33840 * Push/Pop Macro Pragmas::
33841 * Function Specific Option Pragmas::
33843 \x1f
33844 File: gcc.info,  Node: ARM Pragmas,  Next: M32C Pragmas,  Up: Pragmas
33846 5.52.1 ARM Pragmas
33847 ------------------
33849 The ARM target defines pragmas for controlling the default addition of
33850 `long_call' and `short_call' attributes to functions.  *Note Function
33851 Attributes::, for information about the effects of these attributes.
33853 `long_calls'
33854      Set all subsequent functions to have the `long_call' attribute.
33856 `no_long_calls'
33857      Set all subsequent functions to have the `short_call' attribute.
33859 `long_calls_off'
33860      Do not affect the `long_call' or `short_call' attributes of
33861      subsequent functions.
33863 \x1f
33864 File: gcc.info,  Node: M32C Pragmas,  Next: RS/6000 and PowerPC Pragmas,  Prev: ARM Pragmas,  Up: Pragmas
33866 5.52.2 M32C Pragmas
33867 -------------------
33869 `memregs NUMBER'
33870      Overrides the command line option `-memregs=' for the current
33871      file.  Use with care!  This pragma must be before any function in
33872      the file, and mixing different memregs values in different objects
33873      may make them incompatible.  This pragma is useful when a
33874      performance-critical function uses a memreg for temporary values,
33875      as it may allow you to reduce the number of memregs used.
33878 \x1f
33879 File: gcc.info,  Node: RS/6000 and PowerPC Pragmas,  Next: Darwin Pragmas,  Prev: M32C Pragmas,  Up: Pragmas
33881 5.52.3 RS/6000 and PowerPC Pragmas
33882 ----------------------------------
33884 The RS/6000 and PowerPC targets define one pragma for controlling
33885 whether or not the `longcall' attribute is added to function
33886 declarations by default.  This pragma overrides the `-mlongcall'
33887 option, but not the `longcall' and `shortcall' attributes.  *Note
33888 RS/6000 and PowerPC Options::, for more information about when long
33889 calls are and are not necessary.
33891 `longcall (1)'
33892      Apply the `longcall' attribute to all subsequent function
33893      declarations.
33895 `longcall (0)'
33896      Do not apply the `longcall' attribute to subsequent function
33897      declarations.
33899 \x1f
33900 File: gcc.info,  Node: Darwin Pragmas,  Next: Solaris Pragmas,  Prev: RS/6000 and PowerPC Pragmas,  Up: Pragmas
33902 5.52.4 Darwin Pragmas
33903 ---------------------
33905 The following pragmas are available for all architectures running the
33906 Darwin operating system.  These are useful for compatibility with other
33907 Mac OS compilers.
33909 `mark TOKENS...'
33910      This pragma is accepted, but has no effect.
33912 `options align=ALIGNMENT'
33913      This pragma sets the alignment of fields in structures.  The
33914      values of ALIGNMENT may be `mac68k', to emulate m68k alignment, or
33915      `power', to emulate PowerPC alignment.  Uses of this pragma nest
33916      properly; to restore the previous setting, use `reset' for the
33917      ALIGNMENT.
33919 `segment TOKENS...'
33920      This pragma is accepted, but has no effect.
33922 `unused (VAR [, VAR]...)'
33923      This pragma declares variables to be possibly unused.  GCC will not
33924      produce warnings for the listed variables.  The effect is similar
33925      to that of the `unused' attribute, except that this pragma may
33926      appear anywhere within the variables' scopes.
33928 \x1f
33929 File: gcc.info,  Node: Solaris Pragmas,  Next: Symbol-Renaming Pragmas,  Prev: Darwin Pragmas,  Up: Pragmas
33931 5.52.5 Solaris Pragmas
33932 ----------------------
33934 The Solaris target supports `#pragma redefine_extname' (*note
33935 Symbol-Renaming Pragmas::).  It also supports additional `#pragma'
33936 directives for compatibility with the system compiler.
33938 `align ALIGNMENT (VARIABLE [, VARIABLE]...)'
33939      Increase the minimum alignment of each VARIABLE to ALIGNMENT.
33940      This is the same as GCC's `aligned' attribute *note Variable
33941      Attributes::).  Macro expansion occurs on the arguments to this
33942      pragma when compiling C and Objective-C.  It does not currently
33943      occur when compiling C++, but this is a bug which may be fixed in
33944      a future release.
33946 `fini (FUNCTION [, FUNCTION]...)'
33947      This pragma causes each listed FUNCTION to be called after main,
33948      or during shared module unloading, by adding a call to the `.fini'
33949      section.
33951 `init (FUNCTION [, FUNCTION]...)'
33952      This pragma causes each listed FUNCTION to be called during
33953      initialization (before `main') or during shared module loading, by
33954      adding a call to the `.init' section.
33957 \x1f
33958 File: gcc.info,  Node: Symbol-Renaming Pragmas,  Next: Structure-Packing Pragmas,  Prev: Solaris Pragmas,  Up: Pragmas
33960 5.52.6 Symbol-Renaming Pragmas
33961 ------------------------------
33963 For compatibility with the Solaris and Tru64 UNIX system headers, GCC
33964 supports two `#pragma' directives which change the name used in
33965 assembly for a given declaration.  These pragmas are only available on
33966 platforms whose system headers need them.  To get this effect on all
33967 platforms supported by GCC, use the asm labels extension (*note Asm
33968 Labels::).
33970 `redefine_extname OLDNAME NEWNAME'
33971      This pragma gives the C function OLDNAME the assembly symbol
33972      NEWNAME.  The preprocessor macro `__PRAGMA_REDEFINE_EXTNAME' will
33973      be defined if this pragma is available (currently only on Solaris).
33975 `extern_prefix STRING'
33976      This pragma causes all subsequent external function and variable
33977      declarations to have STRING prepended to their assembly symbols.
33978      This effect may be terminated with another `extern_prefix' pragma
33979      whose argument is an empty string.  The preprocessor macro
33980      `__PRAGMA_EXTERN_PREFIX' will be defined if this pragma is
33981      available (currently only on Tru64 UNIX).
33983  These pragmas and the asm labels extension interact in a complicated
33984 manner.  Here are some corner cases you may want to be aware of.
33986   1. Both pragmas silently apply only to declarations with external
33987      linkage.  Asm labels do not have this restriction.
33989   2. In C++, both pragmas silently apply only to declarations with "C"
33990      linkage.  Again, asm labels do not have this restriction.
33992   3. If any of the three ways of changing the assembly name of a
33993      declaration is applied to a declaration whose assembly name has
33994      already been determined (either by a previous use of one of these
33995      features, or because the compiler needed the assembly name in
33996      order to generate code), and the new name is different, a warning
33997      issues and the name does not change.
33999   4. The OLDNAME used by `#pragma redefine_extname' is always the
34000      C-language name.
34002   5. If `#pragma extern_prefix' is in effect, and a declaration occurs
34003      with an asm label attached, the prefix is silently ignored for
34004      that declaration.
34006   6. If `#pragma extern_prefix' and `#pragma redefine_extname' apply to
34007      the same declaration, whichever triggered first wins, and a
34008      warning issues if they contradict each other.  (We would like to
34009      have `#pragma redefine_extname' always win, for consistency with
34010      asm labels, but if `#pragma extern_prefix' triggers first we have
34011      no way of knowing that that happened.)
34013 \x1f
34014 File: gcc.info,  Node: Structure-Packing Pragmas,  Next: Weak Pragmas,  Prev: Symbol-Renaming Pragmas,  Up: Pragmas
34016 5.52.7 Structure-Packing Pragmas
34017 --------------------------------
34019 For compatibility with Microsoft Windows compilers, GCC supports a set
34020 of `#pragma' directives which change the maximum alignment of members
34021 of structures (other than zero-width bitfields), unions, and classes
34022 subsequently defined. The N value below always is required to be a
34023 small power of two and specifies the new alignment in bytes.
34025   1. `#pragma pack(N)' simply sets the new alignment.
34027   2. `#pragma pack()' sets the alignment to the one that was in effect
34028      when compilation started (see also command line option
34029      `-fpack-struct[=<n>]' *note Code Gen Options::).
34031   3. `#pragma pack(push[,N])' pushes the current alignment setting on
34032      an internal stack and then optionally sets the new alignment.
34034   4. `#pragma pack(pop)' restores the alignment setting to the one
34035      saved at the top of the internal stack (and removes that stack
34036      entry).  Note that `#pragma pack([N])' does not influence this
34037      internal stack; thus it is possible to have `#pragma pack(push)'
34038      followed by multiple `#pragma pack(N)' instances and finalized by
34039      a single `#pragma pack(pop)'.
34041  Some targets, e.g. i386 and powerpc, support the `ms_struct' `#pragma'
34042 which lays out a structure as the documented `__attribute__
34043 ((ms_struct))'.
34044   1. `#pragma ms_struct on' turns on the layout for structures declared.
34046   2. `#pragma ms_struct off' turns off the layout for structures
34047      declared.
34049   3. `#pragma ms_struct reset' goes back to the default layout.
34051 \x1f
34052 File: gcc.info,  Node: Weak Pragmas,  Next: Diagnostic Pragmas,  Prev: Structure-Packing Pragmas,  Up: Pragmas
34054 5.52.8 Weak Pragmas
34055 -------------------
34057 For compatibility with SVR4, GCC supports a set of `#pragma' directives
34058 for declaring symbols to be weak, and defining weak aliases.
34060 `#pragma weak SYMBOL'
34061      This pragma declares SYMBOL to be weak, as if the declaration had
34062      the attribute of the same name.  The pragma may appear before or
34063      after the declaration of SYMBOL, but must appear before either its
34064      first use or its definition.  It is not an error for SYMBOL to
34065      never be defined at all.
34067 `#pragma weak SYMBOL1 = SYMBOL2'
34068      This pragma declares SYMBOL1 to be a weak alias of SYMBOL2.  It is
34069      an error if SYMBOL2 is not defined in the current translation unit.
34071 \x1f
34072 File: gcc.info,  Node: Diagnostic Pragmas,  Next: Visibility Pragmas,  Prev: Weak Pragmas,  Up: Pragmas
34074 5.52.9 Diagnostic Pragmas
34075 -------------------------
34077 GCC allows the user to selectively enable or disable certain types of
34078 diagnostics, and change the kind of the diagnostic.  For example, a
34079 project's policy might require that all sources compile with `-Werror'
34080 but certain files might have exceptions allowing specific types of
34081 warnings.  Or, a project might selectively enable diagnostics and treat
34082 them as errors depending on which preprocessor macros are defined.
34084 `#pragma GCC diagnostic KIND OPTION'
34085      Modifies the disposition of a diagnostic.  Note that not all
34086      diagnostics are modifiable; at the moment only warnings (normally
34087      controlled by `-W...') can be controlled, and not all of them.
34088      Use `-fdiagnostics-show-option' to determine which diagnostics are
34089      controllable and which option controls them.
34091      KIND is `error' to treat this diagnostic as an error, `warning' to
34092      treat it like a warning (even if `-Werror' is in effect), or
34093      `ignored' if the diagnostic is to be ignored.  OPTION is a double
34094      quoted string which matches the command line option.
34096           #pragma GCC diagnostic warning "-Wformat"
34097           #pragma GCC diagnostic error "-Wformat"
34098           #pragma GCC diagnostic ignored "-Wformat"
34100      Note that these pragmas override any command line options.  Also,
34101      while it is syntactically valid to put these pragmas anywhere in
34102      your sources, the only supported location for them is before any
34103      data or functions are defined.  Doing otherwise may result in
34104      unpredictable results depending on how the optimizer manages your
34105      sources.  If the same option is listed multiple times, the last
34106      one specified is the one that is in effect.  This pragma is not
34107      intended to be a general purpose replacement for command line
34108      options, but for implementing strict control over project policies.
34111  GCC also offers a simple mechanism for printing messages during
34112 compilation.
34114 `#pragma message STRING'
34115      Prints STRING as a compiler message on compilation.  The message
34116      is informational only, and is neither a compilation warning nor an
34117      error.
34119           #pragma message "Compiling " __FILE__ "..."
34121      STRING may be parenthesized, and is printed with location
34122      information.  For example,
34124           #define DO_PRAGMA(x) _Pragma (#x)
34125           #define TODO(x) DO_PRAGMA(message ("TODO - " #x))
34127           TODO(Remember to fix this)
34129      prints `/tmp/file.c:4: note: #pragma message: TODO - Remember to
34130      fix this'.
34133 \x1f
34134 File: gcc.info,  Node: Visibility Pragmas,  Next: Push/Pop Macro Pragmas,  Prev: Diagnostic Pragmas,  Up: Pragmas
34136 5.52.10 Visibility Pragmas
34137 --------------------------
34139 `#pragma GCC visibility push(VISIBILITY)'
34140 `#pragma GCC visibility pop'
34141      This pragma allows the user to set the visibility for multiple
34142      declarations without having to give each a visibility attribute
34143      *Note Function Attributes::, for more information about visibility
34144      and the attribute syntax.
34146      In C++, `#pragma GCC visibility' affects only namespace-scope
34147      declarations.  Class members and template specializations are not
34148      affected; if you want to override the visibility for a particular
34149      member or instantiation, you must use an attribute.
34152 \x1f
34153 File: gcc.info,  Node: Push/Pop Macro Pragmas,  Next: Function Specific Option Pragmas,  Prev: Visibility Pragmas,  Up: Pragmas
34155 5.52.11 Push/Pop Macro Pragmas
34156 ------------------------------
34158 For compatibility with Microsoft Windows compilers, GCC supports
34159 `#pragma push_macro("MACRO_NAME")' and `#pragma
34160 pop_macro("MACRO_NAME")'.
34162 `#pragma push_macro("MACRO_NAME")'
34163      This pragma saves the value of the macro named as MACRO_NAME to
34164      the top of the stack for this macro.
34166 `#pragma pop_macro("MACRO_NAME")'
34167      This pragma sets the value of the macro named as MACRO_NAME to the
34168      value on top of the stack for this macro. If the stack for
34169      MACRO_NAME is empty, the value of the macro remains unchanged.
34171  For example:
34173      #define X  1
34174      #pragma push_macro("X")
34175      #undef X
34176      #define X -1
34177      #pragma pop_macro("X")
34178      int x [X];
34180  In this example, the definition of X as 1 is saved by `#pragma
34181 push_macro' and restored by `#pragma pop_macro'.
34183 \x1f
34184 File: gcc.info,  Node: Function Specific Option Pragmas,  Prev: Push/Pop Macro Pragmas,  Up: Pragmas
34186 5.52.12 Function Specific Option Pragmas
34187 ----------------------------------------
34189 `#pragma GCC target ("STRING"...)'
34190      This pragma allows you to set target specific options for functions
34191      defined later in the source file.  One or more strings can be
34192      specified.  Each function that is defined after this point will be
34193      as if `attribute((target("STRING")))' was specified for that
34194      function.  The parenthesis around the options is optional.  *Note
34195      Function Attributes::, for more information about the `target'
34196      attribute and the attribute syntax.
34198      The `#pragma GCC target' pragma is not implemented in GCC versions
34199      earlier than 4.4, and is currently only implemented for the 386
34200      and x86_64 backends.
34202 `#pragma GCC optimize ("STRING"...)'
34203      This pragma allows you to set global optimization options for
34204      functions defined later in the source file.  One or more strings
34205      can be specified.  Each function that is defined after this point
34206      will be as if `attribute((optimize("STRING")))' was specified for
34207      that function.  The parenthesis around the options is optional.
34208      *Note Function Attributes::, for more information about the
34209      `optimize' attribute and the attribute syntax.
34211      The `#pragma GCC optimize' pragma is not implemented in GCC
34212      versions earlier than 4.4.
34214 `#pragma GCC push_options'
34215 `#pragma GCC pop_options'
34216      These pragmas maintain a stack of the current target and
34217      optimization options.  It is intended for include files where you
34218      temporarily want to switch to using a different `#pragma GCC
34219      target' or `#pragma GCC optimize' and then to pop back to the
34220      previous options.
34222      The `#pragma GCC push_options' and `#pragma GCC pop_options'
34223      pragmas are not implemented in GCC versions earlier than 4.4.
34225 `#pragma GCC reset_options'
34226      This pragma clears the current `#pragma GCC target' and `#pragma
34227      GCC optimize' to use the default switches as specified on the
34228      command line.
34230      The `#pragma GCC reset_options' pragma is not implemented in GCC
34231      versions earlier than 4.4.
34233 \x1f
34234 File: gcc.info,  Node: Unnamed Fields,  Next: Thread-Local,  Prev: Pragmas,  Up: C Extensions
34236 5.53 Unnamed struct/union fields within structs/unions
34237 ======================================================
34239 For compatibility with other compilers, GCC allows you to define a
34240 structure or union that contains, as fields, structures and unions
34241 without names.  For example:
34243      struct {
34244        int a;
34245        union {
34246          int b;
34247          float c;
34248        };
34249        int d;
34250      } foo;
34252  In this example, the user would be able to access members of the
34253 unnamed union with code like `foo.b'.  Note that only unnamed structs
34254 and unions are allowed, you may not have, for example, an unnamed `int'.
34256  You must never create such structures that cause ambiguous field
34257 definitions.  For example, this structure:
34259      struct {
34260        int a;
34261        struct {
34262          int a;
34263        };
34264      } foo;
34266  It is ambiguous which `a' is being referred to with `foo.a'.  Such
34267 constructs are not supported and must be avoided.  In the future, such
34268 constructs may be detected and treated as compilation errors.
34270  Unless `-fms-extensions' is used, the unnamed field must be a
34271 structure or union definition without a tag (for example, `struct { int
34272 a; };').  If `-fms-extensions' is used, the field may also be a
34273 definition with a tag such as `struct foo { int a; };', a reference to
34274 a previously defined structure or union such as `struct foo;', or a
34275 reference to a `typedef' name for a previously defined structure or
34276 union type.
34278 \x1f
34279 File: gcc.info,  Node: Thread-Local,  Next: Binary constants,  Prev: Unnamed Fields,  Up: C Extensions
34281 5.54 Thread-Local Storage
34282 =========================
34284 Thread-local storage (TLS) is a mechanism by which variables are
34285 allocated such that there is one instance of the variable per extant
34286 thread.  The run-time model GCC uses to implement this originates in
34287 the IA-64 processor-specific ABI, but has since been migrated to other
34288 processors as well.  It requires significant support from the linker
34289 (`ld'), dynamic linker (`ld.so'), and system libraries (`libc.so' and
34290 `libpthread.so'), so it is not available everywhere.
34292  At the user level, the extension is visible with a new storage class
34293 keyword: `__thread'.  For example:
34295      __thread int i;
34296      extern __thread struct state s;
34297      static __thread char *p;
34299  The `__thread' specifier may be used alone, with the `extern' or
34300 `static' specifiers, but with no other storage class specifier.  When
34301 used with `extern' or `static', `__thread' must appear immediately
34302 after the other storage class specifier.
34304  The `__thread' specifier may be applied to any global, file-scoped
34305 static, function-scoped static, or static data member of a class.  It
34306 may not be applied to block-scoped automatic or non-static data member.
34308  When the address-of operator is applied to a thread-local variable, it
34309 is evaluated at run-time and returns the address of the current thread's
34310 instance of that variable.  An address so obtained may be used by any
34311 thread.  When a thread terminates, any pointers to thread-local
34312 variables in that thread become invalid.
34314  No static initialization may refer to the address of a thread-local
34315 variable.
34317  In C++, if an initializer is present for a thread-local variable, it
34318 must be a CONSTANT-EXPRESSION, as defined in 5.19.2 of the ANSI/ISO C++
34319 standard.
34321  See ELF Handling For Thread-Local Storage
34322 (http://people.redhat.com/drepper/tls.pdf) for a detailed explanation of
34323 the four thread-local storage addressing models, and how the run-time
34324 is expected to function.
34326 * Menu:
34328 * C99 Thread-Local Edits::
34329 * C++98 Thread-Local Edits::
34331 \x1f
34332 File: gcc.info,  Node: C99 Thread-Local Edits,  Next: C++98 Thread-Local Edits,  Up: Thread-Local
34334 5.54.1 ISO/IEC 9899:1999 Edits for Thread-Local Storage
34335 -------------------------------------------------------
34337 The following are a set of changes to ISO/IEC 9899:1999 (aka C99) that
34338 document the exact semantics of the language extension.
34340    * `5.1.2  Execution environments'
34342      Add new text after paragraph 1
34344           Within either execution environment, a "thread" is a flow of
34345           control within a program.  It is implementation defined
34346           whether or not there may be more than one thread associated
34347           with a program.  It is implementation defined how threads
34348           beyond the first are created, the name and type of the
34349           function called at thread startup, and how threads may be
34350           terminated.  However, objects with thread storage duration
34351           shall be initialized before thread startup.
34353    * `6.2.4  Storage durations of objects'
34355      Add new text before paragraph 3
34357           An object whose identifier is declared with the storage-class
34358           specifier `__thread' has "thread storage duration".  Its
34359           lifetime is the entire execution of the thread, and its
34360           stored value is initialized only once, prior to thread
34361           startup.
34363    * `6.4.1  Keywords'
34365      Add `__thread'.
34367    * `6.7.1  Storage-class specifiers'
34369      Add `__thread' to the list of storage class specifiers in
34370      paragraph 1.
34372      Change paragraph 2 to
34374           With the exception of `__thread', at most one storage-class
34375           specifier may be given [...].  The `__thread' specifier may
34376           be used alone, or immediately following `extern' or `static'.
34378      Add new text after paragraph 6
34380           The declaration of an identifier for a variable that has
34381           block scope that specifies `__thread' shall also specify
34382           either `extern' or `static'.
34384           The `__thread' specifier shall be used only with variables.
34386 \x1f
34387 File: gcc.info,  Node: C++98 Thread-Local Edits,  Prev: C99 Thread-Local Edits,  Up: Thread-Local
34389 5.54.2 ISO/IEC 14882:1998 Edits for Thread-Local Storage
34390 --------------------------------------------------------
34392 The following are a set of changes to ISO/IEC 14882:1998 (aka C++98)
34393 that document the exact semantics of the language extension.
34395    * [intro.execution]
34397      New text after paragraph 4
34399           A "thread" is a flow of control within the abstract machine.
34400           It is implementation defined whether or not there may be more
34401           than one thread.
34403      New text after paragraph 7
34405           It is unspecified whether additional action must be taken to
34406           ensure when and whether side effects are visible to other
34407           threads.
34409    * [lex.key]
34411      Add `__thread'.
34413    * [basic.start.main]
34415      Add after paragraph 5
34417           The thread that begins execution at the `main' function is
34418           called the "main thread".  It is implementation defined how
34419           functions beginning threads other than the main thread are
34420           designated or typed.  A function so designated, as well as
34421           the `main' function, is called a "thread startup function".
34422           It is implementation defined what happens if a thread startup
34423           function returns.  It is implementation defined what happens
34424           to other threads when any thread calls `exit'.
34426    * [basic.start.init]
34428      Add after paragraph 4
34430           The storage for an object of thread storage duration shall be
34431           statically initialized before the first statement of the
34432           thread startup function.  An object of thread storage
34433           duration shall not require dynamic initialization.
34435    * [basic.start.term]
34437      Add after paragraph 3
34439           The type of an object with thread storage duration shall not
34440           have a non-trivial destructor, nor shall it be an array type
34441           whose elements (directly or indirectly) have non-trivial
34442           destructors.
34444    * [basic.stc]
34446      Add "thread storage duration" to the list in paragraph 1.
34448      Change paragraph 2
34450           Thread, static, and automatic storage durations are
34451           associated with objects introduced by declarations [...].
34453      Add `__thread' to the list of specifiers in paragraph 3.
34455    * [basic.stc.thread]
34457      New section before [basic.stc.static]
34459           The keyword `__thread' applied to a non-local object gives the
34460           object thread storage duration.
34462           A local variable or class data member declared both `static'
34463           and `__thread' gives the variable or member thread storage
34464           duration.
34466    * [basic.stc.static]
34468      Change paragraph 1
34470           All objects which have neither thread storage duration,
34471           dynamic storage duration nor are local [...].
34473    * [dcl.stc]
34475      Add `__thread' to the list in paragraph 1.
34477      Change paragraph 1
34479           With the exception of `__thread', at most one
34480           STORAGE-CLASS-SPECIFIER shall appear in a given
34481           DECL-SPECIFIER-SEQ.  The `__thread' specifier may be used
34482           alone, or immediately following the `extern' or `static'
34483           specifiers.  [...]
34485      Add after paragraph 5
34487           The `__thread' specifier can be applied only to the names of
34488           objects and to anonymous unions.
34490    * [class.mem]
34492      Add after paragraph 6
34494           Non-`static' members shall not be `__thread'.
34496 \x1f
34497 File: gcc.info,  Node: Binary constants,  Prev: Thread-Local,  Up: C Extensions
34499 5.55 Binary constants using the `0b' prefix
34500 ===========================================
34502 Integer constants can be written as binary constants, consisting of a
34503 sequence of `0' and `1' digits, prefixed by `0b' or `0B'.  This is
34504 particularly useful in environments that operate a lot on the bit-level
34505 (like microcontrollers).
34507  The following statements are identical:
34509      i =       42;
34510      i =     0x2a;
34511      i =      052;
34512      i = 0b101010;
34514  The type of these constants follows the same rules as for octal or
34515 hexadecimal integer constants, so suffixes like `L' or `UL' can be
34516 applied.
34518 \x1f
34519 File: gcc.info,  Node: C++ Extensions,  Next: Objective-C,  Prev: C Extensions,  Up: Top
34521 6 Extensions to the C++ Language
34522 ********************************
34524 The GNU compiler provides these extensions to the C++ language (and you
34525 can also use most of the C language extensions in your C++ programs).
34526 If you want to write code that checks whether these features are
34527 available, you can test for the GNU compiler the same way as for C
34528 programs: check for a predefined macro `__GNUC__'.  You can also use
34529 `__GNUG__' to test specifically for GNU C++ (*note Predefined Macros:
34530 (cpp)Common Predefined Macros.).
34532 * Menu:
34534 * Volatiles::           What constitutes an access to a volatile object.
34535 * Restricted Pointers:: C99 restricted pointers and references.
34536 * Vague Linkage::       Where G++ puts inlines, vtables and such.
34537 * C++ Interface::       You can use a single C++ header file for both
34538                         declarations and definitions.
34539 * Template Instantiation:: Methods for ensuring that exactly one copy of
34540                         each needed template instantiation is emitted.
34541 * Bound member functions:: You can extract a function pointer to the
34542                         method denoted by a `->*' or `.*' expression.
34543 * C++ Attributes::      Variable, function, and type attributes for C++ only.
34544 * Namespace Association:: Strong using-directives for namespace association.
34545 * Type Traits::         Compiler support for type traits
34546 * Java Exceptions::     Tweaking exception handling to work with Java.
34547 * Deprecated Features:: Things will disappear from g++.
34548 * Backwards Compatibility:: Compatibilities with earlier definitions of C++.
34550 \x1f
34551 File: gcc.info,  Node: Volatiles,  Next: Restricted Pointers,  Up: C++ Extensions
34553 6.1 When is a Volatile Object Accessed?
34554 =======================================
34556 Both the C and C++ standard have the concept of volatile objects.  These
34557 are normally accessed by pointers and used for accessing hardware.  The
34558 standards encourage compilers to refrain from optimizations concerning
34559 accesses to volatile objects.  The C standard leaves it implementation
34560 defined  as to what constitutes a volatile access.  The C++ standard
34561 omits to specify this, except to say that C++ should behave in a
34562 similar manner to C with respect to volatiles, where possible.  The
34563 minimum either standard specifies is that at a sequence point all
34564 previous accesses to volatile objects have stabilized and no subsequent
34565 accesses have occurred.  Thus an implementation is free to reorder and
34566 combine volatile accesses which occur between sequence points, but
34567 cannot do so for accesses across a sequence point.  The use of
34568 volatiles does not allow you to violate the restriction on updating
34569 objects multiple times within a sequence point.
34571  *Note Volatile qualifier and the C compiler: Qualifiers implementation.
34573  The behavior differs slightly between C and C++ in the non-obvious
34574 cases:
34576      volatile int *src = SOMEVALUE;
34577      *src;
34579  With C, such expressions are rvalues, and GCC interprets this either
34580 as a read of the volatile object being pointed to or only as request to
34581 evaluate the side-effects.  The C++ standard specifies that such
34582 expressions do not undergo lvalue to rvalue conversion, and that the
34583 type of the dereferenced object may be incomplete.  The C++ standard
34584 does not specify explicitly that it is this lvalue to rvalue conversion
34585 which may be responsible for causing an access.  However, there is
34586 reason to believe that it is, because otherwise certain simple
34587 expressions become undefined.  However, because it would surprise most
34588 programmers, G++ treats dereferencing a pointer to volatile object of
34589 complete type when the value is unused as GCC would do for an
34590 equivalent type in C.  When the object has incomplete type, G++ issues
34591 a warning; if you wish to force an error, you must force a conversion
34592 to rvalue with, for instance, a static cast.
34594  When using a reference to volatile, G++ does not treat equivalent
34595 expressions as accesses to volatiles, but instead issues a warning that
34596 no volatile is accessed.  The rationale for this is that otherwise it
34597 becomes difficult to determine where volatile access occur, and not
34598 possible to ignore the return value from functions returning volatile
34599 references.  Again, if you wish to force a read, cast the reference to
34600 an rvalue.
34602 \x1f
34603 File: gcc.info,  Node: Restricted Pointers,  Next: Vague Linkage,  Prev: Volatiles,  Up: C++ Extensions
34605 6.2 Restricting Pointer Aliasing
34606 ================================
34608 As with the C front end, G++ understands the C99 feature of restricted
34609 pointers, specified with the `__restrict__', or `__restrict' type
34610 qualifier.  Because you cannot compile C++ by specifying the `-std=c99'
34611 language flag, `restrict' is not a keyword in C++.
34613  In addition to allowing restricted pointers, you can specify restricted
34614 references, which indicate that the reference is not aliased in the
34615 local context.
34617      void fn (int *__restrict__ rptr, int &__restrict__ rref)
34618      {
34619        /* ... */
34620      }
34622 In the body of `fn', RPTR points to an unaliased integer and RREF
34623 refers to a (different) unaliased integer.
34625  You may also specify whether a member function's THIS pointer is
34626 unaliased by using `__restrict__' as a member function qualifier.
34628      void T::fn () __restrict__
34629      {
34630        /* ... */
34631      }
34633 Within the body of `T::fn', THIS will have the effective definition `T
34634 *__restrict__ const this'.  Notice that the interpretation of a
34635 `__restrict__' member function qualifier is different to that of
34636 `const' or `volatile' qualifier, in that it is applied to the pointer
34637 rather than the object.  This is consistent with other compilers which
34638 implement restricted pointers.
34640  As with all outermost parameter qualifiers, `__restrict__' is ignored
34641 in function definition matching.  This means you only need to specify
34642 `__restrict__' in a function definition, rather than in a function
34643 prototype as well.
34645 \x1f
34646 File: gcc.info,  Node: Vague Linkage,  Next: C++ Interface,  Prev: Restricted Pointers,  Up: C++ Extensions
34648 6.3 Vague Linkage
34649 =================
34651 There are several constructs in C++ which require space in the object
34652 file but are not clearly tied to a single translation unit.  We say that
34653 these constructs have "vague linkage".  Typically such constructs are
34654 emitted wherever they are needed, though sometimes we can be more
34655 clever.
34657 Inline Functions
34658      Inline functions are typically defined in a header file which can
34659      be included in many different compilations.  Hopefully they can
34660      usually be inlined, but sometimes an out-of-line copy is
34661      necessary, if the address of the function is taken or if inlining
34662      fails.  In general, we emit an out-of-line copy in all translation
34663      units where one is needed.  As an exception, we only emit inline
34664      virtual functions with the vtable, since it will always require a
34665      copy.
34667      Local static variables and string constants used in an inline
34668      function are also considered to have vague linkage, since they
34669      must be shared between all inlined and out-of-line instances of
34670      the function.
34672 VTables
34673      C++ virtual functions are implemented in most compilers using a
34674      lookup table, known as a vtable.  The vtable contains pointers to
34675      the virtual functions provided by a class, and each object of the
34676      class contains a pointer to its vtable (or vtables, in some
34677      multiple-inheritance situations).  If the class declares any
34678      non-inline, non-pure virtual functions, the first one is chosen as
34679      the "key method" for the class, and the vtable is only emitted in
34680      the translation unit where the key method is defined.
34682      _Note:_ If the chosen key method is later defined as inline, the
34683      vtable will still be emitted in every translation unit which
34684      defines it.  Make sure that any inline virtuals are declared
34685      inline in the class body, even if they are not defined there.
34687 type_info objects
34688      C++ requires information about types to be written out in order to
34689      implement `dynamic_cast', `typeid' and exception handling.  For
34690      polymorphic classes (classes with virtual functions), the type_info
34691      object is written out along with the vtable so that `dynamic_cast'
34692      can determine the dynamic type of a class object at runtime.  For
34693      all other types, we write out the type_info object when it is
34694      used: when applying `typeid' to an expression, throwing an object,
34695      or referring to a type in a catch clause or exception
34696      specification.
34698 Template Instantiations
34699      Most everything in this section also applies to template
34700      instantiations, but there are other options as well.  *Note
34701      Where's the Template?: Template Instantiation.
34704  When used with GNU ld version 2.8 or later on an ELF system such as
34705 GNU/Linux or Solaris 2, or on Microsoft Windows, duplicate copies of
34706 these constructs will be discarded at link time.  This is known as
34707 COMDAT support.
34709  On targets that don't support COMDAT, but do support weak symbols, GCC
34710 will use them.  This way one copy will override all the others, but the
34711 unused copies will still take up space in the executable.
34713  For targets which do not support either COMDAT or weak symbols, most
34714 entities with vague linkage will be emitted as local symbols to avoid
34715 duplicate definition errors from the linker.  This will not happen for
34716 local statics in inlines, however, as having multiple copies will
34717 almost certainly break things.
34719  *Note Declarations and Definitions in One Header: C++ Interface, for
34720 another way to control placement of these constructs.
34722 \x1f
34723 File: gcc.info,  Node: C++ Interface,  Next: Template Instantiation,  Prev: Vague Linkage,  Up: C++ Extensions
34725 6.4 #pragma interface and implementation
34726 ========================================
34728 `#pragma interface' and `#pragma implementation' provide the user with
34729 a way of explicitly directing the compiler to emit entities with vague
34730 linkage (and debugging information) in a particular translation unit.
34732  _Note:_ As of GCC 2.7.2, these `#pragma's are not useful in most
34733 cases, because of COMDAT support and the "key method" heuristic
34734 mentioned in *Note Vague Linkage::.  Using them can actually cause your
34735 program to grow due to unnecessary out-of-line copies of inline
34736 functions.  Currently (3.4) the only benefit of these `#pragma's is
34737 reduced duplication of debugging information, and that should be
34738 addressed soon on DWARF 2 targets with the use of COMDAT groups.
34740 `#pragma interface'
34741 `#pragma interface "SUBDIR/OBJECTS.h"'
34742      Use this directive in _header files_ that define object classes,
34743      to save space in most of the object files that use those classes.
34744      Normally, local copies of certain information (backup copies of
34745      inline member functions, debugging information, and the internal
34746      tables that implement virtual functions) must be kept in each
34747      object file that includes class definitions.  You can use this
34748      pragma to avoid such duplication.  When a header file containing
34749      `#pragma interface' is included in a compilation, this auxiliary
34750      information will not be generated (unless the main input source
34751      file itself uses `#pragma implementation').  Instead, the object
34752      files will contain references to be resolved at link time.
34754      The second form of this directive is useful for the case where you
34755      have multiple headers with the same name in different directories.
34756      If you use this form, you must specify the same string to `#pragma
34757      implementation'.
34759 `#pragma implementation'
34760 `#pragma implementation "OBJECTS.h"'
34761      Use this pragma in a _main input file_, when you want full output
34762      from included header files to be generated (and made globally
34763      visible).  The included header file, in turn, should use `#pragma
34764      interface'.  Backup copies of inline member functions, debugging
34765      information, and the internal tables used to implement virtual
34766      functions are all generated in implementation files.
34768      If you use `#pragma implementation' with no argument, it applies to
34769      an include file with the same basename(1) as your source file.
34770      For example, in `allclass.cc', giving just `#pragma implementation'
34771      by itself is equivalent to `#pragma implementation "allclass.h"'.
34773      In versions of GNU C++ prior to 2.6.0 `allclass.h' was treated as
34774      an implementation file whenever you would include it from
34775      `allclass.cc' even if you never specified `#pragma
34776      implementation'.  This was deemed to be more trouble than it was
34777      worth, however, and disabled.
34779      Use the string argument if you want a single implementation file to
34780      include code from multiple header files.  (You must also use
34781      `#include' to include the header file; `#pragma implementation'
34782      only specifies how to use the file--it doesn't actually include
34783      it.)
34785      There is no way to split up the contents of a single header file
34786      into multiple implementation files.
34788  `#pragma implementation' and `#pragma interface' also have an effect
34789 on function inlining.
34791  If you define a class in a header file marked with `#pragma
34792 interface', the effect on an inline function defined in that class is
34793 similar to an explicit `extern' declaration--the compiler emits no code
34794 at all to define an independent version of the function.  Its
34795 definition is used only for inlining with its callers.
34797  Conversely, when you include the same header file in a main source file
34798 that declares it as `#pragma implementation', the compiler emits code
34799 for the function itself; this defines a version of the function that
34800 can be found via pointers (or by callers compiled without inlining).
34801 If all calls to the function can be inlined, you can avoid emitting the
34802 function by compiling with `-fno-implement-inlines'.  If any calls were
34803 not inlined, you will get linker errors.
34805  ---------- Footnotes ----------
34807  (1) A file's "basename" was the name stripped of all leading path
34808 information and of trailing suffixes, such as `.h' or `.C' or `.cc'.
34810 \x1f
34811 File: gcc.info,  Node: Template Instantiation,  Next: Bound member functions,  Prev: C++ Interface,  Up: C++ Extensions
34813 6.5 Where's the Template?
34814 =========================
34816 C++ templates are the first language feature to require more
34817 intelligence from the environment than one usually finds on a UNIX
34818 system.  Somehow the compiler and linker have to make sure that each
34819 template instance occurs exactly once in the executable if it is needed,
34820 and not at all otherwise.  There are two basic approaches to this
34821 problem, which are referred to as the Borland model and the Cfront
34822 model.
34824 Borland model
34825      Borland C++ solved the template instantiation problem by adding
34826      the code equivalent of common blocks to their linker; the compiler
34827      emits template instances in each translation unit that uses them,
34828      and the linker collapses them together.  The advantage of this
34829      model is that the linker only has to consider the object files
34830      themselves; there is no external complexity to worry about.  This
34831      disadvantage is that compilation time is increased because the
34832      template code is being compiled repeatedly.  Code written for this
34833      model tends to include definitions of all templates in the header
34834      file, since they must be seen to be instantiated.
34836 Cfront model
34837      The AT&T C++ translator, Cfront, solved the template instantiation
34838      problem by creating the notion of a template repository, an
34839      automatically maintained place where template instances are
34840      stored.  A more modern version of the repository works as follows:
34841      As individual object files are built, the compiler places any
34842      template definitions and instantiations encountered in the
34843      repository.  At link time, the link wrapper adds in the objects in
34844      the repository and compiles any needed instances that were not
34845      previously emitted.  The advantages of this model are more optimal
34846      compilation speed and the ability to use the system linker; to
34847      implement the Borland model a compiler vendor also needs to
34848      replace the linker.  The disadvantages are vastly increased
34849      complexity, and thus potential for error; for some code this can be
34850      just as transparent, but in practice it can been very difficult to
34851      build multiple programs in one directory and one program in
34852      multiple directories.  Code written for this model tends to
34853      separate definitions of non-inline member templates into a
34854      separate file, which should be compiled separately.
34856  When used with GNU ld version 2.8 or later on an ELF system such as
34857 GNU/Linux or Solaris 2, or on Microsoft Windows, G++ supports the
34858 Borland model.  On other systems, G++ implements neither automatic
34859 model.
34861  A future version of G++ will support a hybrid model whereby the
34862 compiler will emit any instantiations for which the template definition
34863 is included in the compile, and store template definitions and
34864 instantiation context information into the object file for the rest.
34865 The link wrapper will extract that information as necessary and invoke
34866 the compiler to produce the remaining instantiations.  The linker will
34867 then combine duplicate instantiations.
34869  In the mean time, you have the following options for dealing with
34870 template instantiations:
34872   1. Compile your template-using code with `-frepo'.  The compiler will
34873      generate files with the extension `.rpo' listing all of the
34874      template instantiations used in the corresponding object files
34875      which could be instantiated there; the link wrapper, `collect2',
34876      will then update the `.rpo' files to tell the compiler where to
34877      place those instantiations and rebuild any affected object files.
34878      The link-time overhead is negligible after the first pass, as the
34879      compiler will continue to place the instantiations in the same
34880      files.
34882      This is your best option for application code written for the
34883      Borland model, as it will just work.  Code written for the Cfront
34884      model will need to be modified so that the template definitions
34885      are available at one or more points of instantiation; usually this
34886      is as simple as adding `#include <tmethods.cc>' to the end of each
34887      template header.
34889      For library code, if you want the library to provide all of the
34890      template instantiations it needs, just try to link all of its
34891      object files together; the link will fail, but cause the
34892      instantiations to be generated as a side effect.  Be warned,
34893      however, that this may cause conflicts if multiple libraries try
34894      to provide the same instantiations.  For greater control, use
34895      explicit instantiation as described in the next option.
34897   2. Compile your code with `-fno-implicit-templates' to disable the
34898      implicit generation of template instances, and explicitly
34899      instantiate all the ones you use.  This approach requires more
34900      knowledge of exactly which instances you need than do the others,
34901      but it's less mysterious and allows greater control.  You can
34902      scatter the explicit instantiations throughout your program,
34903      perhaps putting them in the translation units where the instances
34904      are used or the translation units that define the templates
34905      themselves; you can put all of the explicit instantiations you
34906      need into one big file; or you can create small files like
34908           #include "Foo.h"
34909           #include "Foo.cc"
34911           template class Foo<int>;
34912           template ostream& operator <<
34913                           (ostream&, const Foo<int>&);
34915      for each of the instances you need, and create a template
34916      instantiation library from those.
34918      If you are using Cfront-model code, you can probably get away with
34919      not using `-fno-implicit-templates' when compiling files that don't
34920      `#include' the member template definitions.
34922      If you use one big file to do the instantiations, you may want to
34923      compile it without `-fno-implicit-templates' so you get all of the
34924      instances required by your explicit instantiations (but not by any
34925      other files) without having to specify them as well.
34927      G++ has extended the template instantiation syntax given in the ISO
34928      standard to allow forward declaration of explicit instantiations
34929      (with `extern'), instantiation of the compiler support data for a
34930      template class (i.e. the vtable) without instantiating any of its
34931      members (with `inline'), and instantiation of only the static data
34932      members of a template class, without the support data or member
34933      functions (with (`static'):
34935           extern template int max (int, int);
34936           inline template class Foo<int>;
34937           static template class Foo<int>;
34939   3. Do nothing.  Pretend G++ does implement automatic instantiation
34940      management.  Code written for the Borland model will work fine, but
34941      each translation unit will contain instances of each of the
34942      templates it uses.  In a large program, this can lead to an
34943      unacceptable amount of code duplication.
34945 \x1f
34946 File: gcc.info,  Node: Bound member functions,  Next: C++ Attributes,  Prev: Template Instantiation,  Up: C++ Extensions
34948 6.6 Extracting the function pointer from a bound pointer to member function
34949 ===========================================================================
34951 In C++, pointer to member functions (PMFs) are implemented using a wide
34952 pointer of sorts to handle all the possible call mechanisms; the PMF
34953 needs to store information about how to adjust the `this' pointer, and
34954 if the function pointed to is virtual, where to find the vtable, and
34955 where in the vtable to look for the member function.  If you are using
34956 PMFs in an inner loop, you should really reconsider that decision.  If
34957 that is not an option, you can extract the pointer to the function that
34958 would be called for a given object/PMF pair and call it directly inside
34959 the inner loop, to save a bit of time.
34961  Note that you will still be paying the penalty for the call through a
34962 function pointer; on most modern architectures, such a call defeats the
34963 branch prediction features of the CPU.  This is also true of normal
34964 virtual function calls.
34966  The syntax for this extension is
34968      extern A a;
34969      extern int (A::*fp)();
34970      typedef int (*fptr)(A *);
34972      fptr p = (fptr)(a.*fp);
34974  For PMF constants (i.e. expressions of the form `&Klasse::Member'), no
34975 object is needed to obtain the address of the function.  They can be
34976 converted to function pointers directly:
34978      fptr p1 = (fptr)(&A::foo);
34980  You must specify `-Wno-pmf-conversions' to use this extension.
34982 \x1f
34983 File: gcc.info,  Node: C++ Attributes,  Next: Namespace Association,  Prev: Bound member functions,  Up: C++ Extensions
34985 6.7 C++-Specific Variable, Function, and Type Attributes
34986 ========================================================
34988 Some attributes only make sense for C++ programs.
34990 `init_priority (PRIORITY)'
34991      In Standard C++, objects defined at namespace scope are guaranteed
34992      to be initialized in an order in strict accordance with that of
34993      their definitions _in a given translation unit_.  No guarantee is
34994      made for initializations across translation units.  However, GNU
34995      C++ allows users to control the order of initialization of objects
34996      defined at namespace scope with the `init_priority' attribute by
34997      specifying a relative PRIORITY, a constant integral expression
34998      currently bounded between 101 and 65535 inclusive.  Lower numbers
34999      indicate a higher priority.
35001      In the following example, `A' would normally be created before
35002      `B', but the `init_priority' attribute has reversed that order:
35004           Some_Class  A  __attribute__ ((init_priority (2000)));
35005           Some_Class  B  __attribute__ ((init_priority (543)));
35007      Note that the particular values of PRIORITY do not matter; only
35008      their relative ordering.
35010 `java_interface'
35011      This type attribute informs C++ that the class is a Java
35012      interface.  It may only be applied to classes declared within an
35013      `extern "Java"' block.  Calls to methods declared in this
35014      interface will be dispatched using GCJ's interface table
35015      mechanism, instead of regular virtual table dispatch.
35018  See also *Note Namespace Association::.
35020 \x1f
35021 File: gcc.info,  Node: Namespace Association,  Next: Type Traits,  Prev: C++ Attributes,  Up: C++ Extensions
35023 6.8 Namespace Association
35024 =========================
35026 *Caution:* The semantics of this extension are not fully defined.
35027 Users should refrain from using this extension as its semantics may
35028 change subtly over time.  It is possible that this extension will be
35029 removed in future versions of G++.
35031  A using-directive with `__attribute ((strong))' is stronger than a
35032 normal using-directive in two ways:
35034    * Templates from the used namespace can be specialized and explicitly
35035      instantiated as though they were members of the using namespace.
35037    * The using namespace is considered an associated namespace of all
35038      templates in the used namespace for purposes of argument-dependent
35039      name lookup.
35041  The used namespace must be nested within the using namespace so that
35042 normal unqualified lookup works properly.
35044  This is useful for composing a namespace transparently from
35045 implementation namespaces.  For example:
35047      namespace std {
35048        namespace debug {
35049          template <class T> struct A { };
35050        }
35051        using namespace debug __attribute ((__strong__));
35052        template <> struct A<int> { };   // ok to specialize
35054        template <class T> void f (A<T>);
35055      }
35057      int main()
35058      {
35059        f (std::A<float>());             // lookup finds std::f
35060        f (std::A<int>());
35061      }
35063 \x1f
35064 File: gcc.info,  Node: Type Traits,  Next: Java Exceptions,  Prev: Namespace Association,  Up: C++ Extensions
35066 6.9 Type Traits
35067 ===============
35069 The C++ front-end implements syntactic extensions that allow to
35070 determine at compile time various characteristics of a type (or of a
35071 pair of types).
35073 `__has_nothrow_assign (type)'
35074      If `type' is const qualified or is a reference type then the trait
35075      is false.  Otherwise if `__has_trivial_assign (type)' is true then
35076      the trait is true, else if `type' is a cv class or union type with
35077      copy assignment operators that are known not to throw an exception
35078      then the trait is true, else it is false.  Requires: `type' shall
35079      be a complete type, an array type of unknown bound, or is a `void'
35080      type.
35082 `__has_nothrow_copy (type)'
35083      If `__has_trivial_copy (type)' is true then the trait is true,
35084      else if `type' is a cv class or union type with copy constructors
35085      that are known not to throw an exception then the trait is true,
35086      else it is false.  Requires: `type' shall be a complete type, an
35087      array type of unknown bound, or is a `void' type.
35089 `__has_nothrow_constructor (type)'
35090      If `__has_trivial_constructor (type)' is true then the trait is
35091      true, else if `type' is a cv class or union type (or array
35092      thereof) with a default constructor that is known not to throw an
35093      exception then the trait is true, else it is false.  Requires:
35094      `type' shall be a complete type, an array type of unknown bound,
35095      or is a `void' type.
35097 `__has_trivial_assign (type)'
35098      If `type' is const qualified or is a reference type then the trait
35099      is false.  Otherwise if `__is_pod (type)' is true then the trait is
35100      true, else if `type' is a cv class or union type with a trivial
35101      copy assignment ([class.copy]) then the trait is true, else it is
35102      false.  Requires: `type' shall be a complete type, an array type
35103      of unknown bound, or is a `void' type.
35105 `__has_trivial_copy (type)'
35106      If `__is_pod (type)' is true or `type' is a reference type then
35107      the trait is true, else if `type' is a cv class or union type with
35108      a trivial copy constructor ([class.copy]) then the trait is true,
35109      else it is false.  Requires: `type' shall be a complete type, an
35110      array type of unknown bound, or is a `void' type.
35112 `__has_trivial_constructor (type)'
35113      If `__is_pod (type)' is true then the trait is true, else if
35114      `type' is a cv class or union type (or array thereof) with a
35115      trivial default constructor ([class.ctor]) then the trait is true,
35116      else it is false.  Requires: `type' shall be a complete type, an
35117      array type of unknown bound, or is a `void' type.
35119 `__has_trivial_destructor (type)'
35120      If `__is_pod (type)' is true or `type' is a reference type then
35121      the trait is true, else if `type' is a cv class or union type (or
35122      array thereof) with a trivial destructor ([class.dtor]) then the
35123      trait is true, else it is false.  Requires: `type' shall be a
35124      complete type, an array type of unknown bound, or is a `void' type.
35126 `__has_virtual_destructor (type)'
35127      If `type' is a class type with a virtual destructor ([class.dtor])
35128      then the trait is true, else it is false.  Requires: `type'  shall
35129      be a complete type, an array type of unknown bound, or is a `void'
35130      type.
35132 `__is_abstract (type)'
35133      If `type' is an abstract class ([class.abstract]) then the trait
35134      is true, else it is false.  Requires: `type' shall be a complete
35135      type, an array type of unknown bound, or is a `void' type.
35137 `__is_base_of (base_type, derived_type)'
35138      If `base_type' is a base class of `derived_type' ([class.derived])
35139      then the trait is true, otherwise it is false.  Top-level cv
35140      qualifications of `base_type' and `derived_type' are ignored.  For
35141      the purposes of this trait, a class type is considered is own
35142      base.  Requires: if `__is_class (base_type)' and `__is_class
35143      (derived_type)' are true and `base_type' and `derived_type' are
35144      not the same type (disregarding cv-qualifiers), `derived_type'
35145      shall be a complete type.  Diagnostic is produced if this
35146      requirement is not met.
35148 `__is_class (type)'
35149      If `type' is a cv class type, and not a union type
35150      ([basic.compound]) the trait is true, else it is false.
35152 `__is_empty (type)'
35153      If `__is_class (type)' is false then the trait is false.
35154      Otherwise `type' is considered empty if and only if: `type' has no
35155      non-static data members, or all non-static data members, if any,
35156      are bit-fields of length 0, and `type' has no virtual members, and
35157      `type' has no virtual base classes, and `type' has no base classes
35158      `base_type' for which `__is_empty (base_type)' is false.
35159      Requires: `type' shall be a complete type, an array type of
35160      unknown bound, or is a `void' type.
35162 `__is_enum (type)'
35163      If `type' is a cv enumeration type ([basic.compound]) the trait is
35164      true, else it is false.
35166 `__is_pod (type)'
35167      If `type' is a cv POD type ([basic.types]) then the trait is true,
35168      else it is false.  Requires: `type' shall be a complete type, an
35169      array type of unknown bound, or is a `void' type.
35171 `__is_polymorphic (type)'
35172      If `type' is a polymorphic class ([class.virtual]) then the trait
35173      is true, else it is false.  Requires: `type' shall be a complete
35174      type, an array type of unknown bound, or is a `void' type.
35176 `__is_union (type)'
35177      If `type' is a cv union type ([basic.compound]) the trait is true,
35178      else it is false.
35181 \x1f
35182 File: gcc.info,  Node: Java Exceptions,  Next: Deprecated Features,  Prev: Type Traits,  Up: C++ Extensions
35184 6.10 Java Exceptions
35185 ====================
35187 The Java language uses a slightly different exception handling model
35188 from C++.  Normally, GNU C++ will automatically detect when you are
35189 writing C++ code that uses Java exceptions, and handle them
35190 appropriately.  However, if C++ code only needs to execute destructors
35191 when Java exceptions are thrown through it, GCC will guess incorrectly.
35192 Sample problematic code is:
35194        struct S { ~S(); };
35195        extern void bar();    // is written in Java, and may throw exceptions
35196        void foo()
35197        {
35198          S s;
35199          bar();
35200        }
35202 The usual effect of an incorrect guess is a link failure, complaining of
35203 a missing routine called `__gxx_personality_v0'.
35205  You can inform the compiler that Java exceptions are to be used in a
35206 translation unit, irrespective of what it might think, by writing
35207 `#pragma GCC java_exceptions' at the head of the file.  This `#pragma'
35208 must appear before any functions that throw or catch exceptions, or run
35209 destructors when exceptions are thrown through them.
35211  You cannot mix Java and C++ exceptions in the same translation unit.
35212 It is believed to be safe to throw a C++ exception from one file through
35213 another file compiled for the Java exception model, or vice versa, but
35214 there may be bugs in this area.
35216 \x1f
35217 File: gcc.info,  Node: Deprecated Features,  Next: Backwards Compatibility,  Prev: Java Exceptions,  Up: C++ Extensions
35219 6.11 Deprecated Features
35220 ========================
35222 In the past, the GNU C++ compiler was extended to experiment with new
35223 features, at a time when the C++ language was still evolving.  Now that
35224 the C++ standard is complete, some of those features are superseded by
35225 superior alternatives.  Using the old features might cause a warning in
35226 some cases that the feature will be dropped in the future.  In other
35227 cases, the feature might be gone already.
35229  While the list below is not exhaustive, it documents some of the
35230 options that are now deprecated:
35232 `-fexternal-templates'
35233 `-falt-external-templates'
35234      These are two of the many ways for G++ to implement template
35235      instantiation.  *Note Template Instantiation::.  The C++ standard
35236      clearly defines how template definitions have to be organized
35237      across implementation units.  G++ has an implicit instantiation
35238      mechanism that should work just fine for standard-conforming code.
35240 `-fstrict-prototype'
35241 `-fno-strict-prototype'
35242      Previously it was possible to use an empty prototype parameter
35243      list to indicate an unspecified number of parameters (like C),
35244      rather than no parameters, as C++ demands.  This feature has been
35245      removed, except where it is required for backwards compatibility.
35246      *Note Backwards Compatibility::.
35248  G++ allows a virtual function returning `void *' to be overridden by
35249 one returning a different pointer type.  This extension to the
35250 covariant return type rules is now deprecated and will be removed from a
35251 future version.
35253  The G++ minimum and maximum operators (`<?' and `>?') and their
35254 compound forms (`<?=') and `>?=') have been deprecated and are now
35255 removed from G++.  Code using these operators should be modified to use
35256 `std::min' and `std::max' instead.
35258  The named return value extension has been deprecated, and is now
35259 removed from G++.
35261  The use of initializer lists with new expressions has been deprecated,
35262 and is now removed from G++.
35264  Floating and complex non-type template parameters have been deprecated,
35265 and are now removed from G++.
35267  The implicit typename extension has been deprecated and is now removed
35268 from G++.
35270  The use of default arguments in function pointers, function typedefs
35271 and other places where they are not permitted by the standard is
35272 deprecated and will be removed from a future version of G++.
35274  G++ allows floating-point literals to appear in integral constant
35275 expressions, e.g. ` enum E { e = int(2.2 * 3.7) } ' This extension is
35276 deprecated and will be removed from a future version.
35278  G++ allows static data members of const floating-point type to be
35279 declared with an initializer in a class definition. The standard only
35280 allows initializers for static members of const integral types and const
35281 enumeration types so this extension has been deprecated and will be
35282 removed from a future version.
35284 \x1f
35285 File: gcc.info,  Node: Backwards Compatibility,  Prev: Deprecated Features,  Up: C++ Extensions
35287 6.12 Backwards Compatibility
35288 ============================
35290 Now that there is a definitive ISO standard C++, G++ has a specification
35291 to adhere to.  The C++ language evolved over time, and features that
35292 used to be acceptable in previous drafts of the standard, such as the
35293 ARM [Annotated C++ Reference Manual], are no longer accepted.  In order
35294 to allow compilation of C++ written to such drafts, G++ contains some
35295 backwards compatibilities.  _All such backwards compatibility features
35296 are liable to disappear in future versions of G++._ They should be
35297 considered deprecated.   *Note Deprecated Features::.
35299 `For scope'
35300      If a variable is declared at for scope, it used to remain in scope
35301      until the end of the scope which contained the for statement
35302      (rather than just within the for scope).  G++ retains this, but
35303      issues a warning, if such a variable is accessed outside the for
35304      scope.
35306 `Implicit C language'
35307      Old C system header files did not contain an `extern "C" {...}'
35308      scope to set the language.  On such systems, all header files are
35309      implicitly scoped inside a C language scope.  Also, an empty
35310      prototype `()' will be treated as an unspecified number of
35311      arguments, rather than no arguments, as C++ demands.
35313 \x1f
35314 File: gcc.info,  Node: Objective-C,  Next: Compatibility,  Prev: C++ Extensions,  Up: Top
35316 7 GNU Objective-C runtime features
35317 **********************************
35319 This document is meant to describe some of the GNU Objective-C runtime
35320 features.  It is not intended to teach you Objective-C, there are
35321 several resources on the Internet that present the language.  Questions
35322 and comments about this document to Ovidiu Predescu <ovidiu@cup.hp.com>.
35324 * Menu:
35326 * Executing code before main::
35327 * Type encoding::
35328 * Garbage Collection::
35329 * Constant string objects::
35330 * compatibility_alias::
35332 \x1f
35333 File: gcc.info,  Node: Executing code before main,  Next: Type encoding,  Prev: Objective-C,  Up: Objective-C
35335 7.1 `+load': Executing code before main
35336 =======================================
35338 The GNU Objective-C runtime provides a way that allows you to execute
35339 code before the execution of the program enters the `main' function.
35340 The code is executed on a per-class and a per-category basis, through a
35341 special class method `+load'.
35343  This facility is very useful if you want to initialize global variables
35344 which can be accessed by the program directly, without sending a message
35345 to the class first.  The usual way to initialize global variables, in
35346 the `+initialize' method, might not be useful because `+initialize' is
35347 only called when the first message is sent to a class object, which in
35348 some cases could be too late.
35350  Suppose for example you have a `FileStream' class that declares
35351 `Stdin', `Stdout' and `Stderr' as global variables, like below:
35354      FileStream *Stdin = nil;
35355      FileStream *Stdout = nil;
35356      FileStream *Stderr = nil;
35358      @implementation FileStream
35360      + (void)initialize
35361      {
35362          Stdin = [[FileStream new] initWithFd:0];
35363          Stdout = [[FileStream new] initWithFd:1];
35364          Stderr = [[FileStream new] initWithFd:2];
35365      }
35367      /* Other methods here */
35368      @end
35370  In this example, the initialization of `Stdin', `Stdout' and `Stderr'
35371 in `+initialize' occurs too late.  The programmer can send a message to
35372 one of these objects before the variables are actually initialized,
35373 thus sending messages to the `nil' object.  The `+initialize' method
35374 which actually initializes the global variables is not invoked until
35375 the first message is sent to the class object.  The solution would
35376 require these variables to be initialized just before entering `main'.
35378  The correct solution of the above problem is to use the `+load' method
35379 instead of `+initialize':
35382      @implementation FileStream
35384      + (void)load
35385      {
35386          Stdin = [[FileStream new] initWithFd:0];
35387          Stdout = [[FileStream new] initWithFd:1];
35388          Stderr = [[FileStream new] initWithFd:2];
35389      }
35391      /* Other methods here */
35392      @end
35394  The `+load' is a method that is not overridden by categories.  If a
35395 class and a category of it both implement `+load', both methods are
35396 invoked.  This allows some additional initializations to be performed in
35397 a category.
35399  This mechanism is not intended to be a replacement for `+initialize'.
35400 You should be aware of its limitations when you decide to use it
35401 instead of `+initialize'.
35403 * Menu:
35405 * What you can and what you cannot do in +load::
35407 \x1f
35408 File: gcc.info,  Node: What you can and what you cannot do in +load,  Prev: Executing code before main,  Up: Executing code before main
35410 7.1.1 What you can and what you cannot do in `+load'
35411 ----------------------------------------------------
35413 The `+load' implementation in the GNU runtime guarantees you the
35414 following things:
35416    * you can write whatever C code you like;
35418    * you can send messages to Objective-C constant strings (`@"this is a
35419      constant string"');
35421    * you can allocate and send messages to objects whose class is
35422      implemented in the same file;
35424    * the `+load' implementation of all super classes of a class are
35425      executed before the `+load' of that class is executed;
35427    * the `+load' implementation of a class is executed before the
35428      `+load' implementation of any category.
35431  In particular, the following things, even if they can work in a
35432 particular case, are not guaranteed:
35434    * allocation of or sending messages to arbitrary objects;
35436    * allocation of or sending messages to objects whose classes have a
35437      category implemented in the same file;
35440  You should make no assumptions about receiving `+load' in sibling
35441 classes when you write `+load' of a class.  The order in which sibling
35442 classes receive `+load' is not guaranteed.
35444  The order in which `+load' and `+initialize' are called could be
35445 problematic if this matters.  If you don't allocate objects inside
35446 `+load', it is guaranteed that `+load' is called before `+initialize'.
35447 If you create an object inside `+load' the `+initialize' method of
35448 object's class is invoked even if `+load' was not invoked.  Note if you
35449 explicitly call `+load' on a class, `+initialize' will be called first.
35450 To avoid possible problems try to implement only one of these methods.
35452  The `+load' method is also invoked when a bundle is dynamically loaded
35453 into your running program.  This happens automatically without any
35454 intervening operation from you.  When you write bundles and you need to
35455 write `+load' you can safely create and send messages to objects whose
35456 classes already exist in the running program.  The same restrictions as
35457 above apply to classes defined in bundle.
35459 \x1f
35460 File: gcc.info,  Node: Type encoding,  Next: Garbage Collection,  Prev: Executing code before main,  Up: Objective-C
35462 7.2 Type encoding
35463 =================
35465 The Objective-C compiler generates type encodings for all the types.
35466 These type encodings are used at runtime to find out information about
35467 selectors and methods and about objects and classes.
35469  The types are encoded in the following way:
35471 `_Bool'            `B'
35472 `char'             `c'
35473 `unsigned char'    `C'
35474 `short'            `s'
35475 `unsigned short'   `S'
35476 `int'              `i'
35477 `unsigned int'     `I'
35478 `long'             `l'
35479 `unsigned long'    `L'
35480 `long long'        `q'
35481 `unsigned long     `Q'
35482 long'              
35483 `float'            `f'
35484 `double'           `d'
35485 `void'             `v'
35486 `id'               `@'
35487 `Class'            `#'
35488 `SEL'              `:'
35489 `char*'            `*'
35490 unknown type       `?'
35491 Complex types      `j' followed by the inner type.  For example
35492                    `_Complex double' is encoded as "jd".
35493 bit-fields         `b' followed by the starting position of the
35494                    bit-field, the type of the bit-field and the size of
35495                    the bit-field (the bit-fields encoding was changed
35496                    from the NeXT's compiler encoding, see below)
35498  The encoding of bit-fields has changed to allow bit-fields to be
35499 properly handled by the runtime functions that compute sizes and
35500 alignments of types that contain bit-fields.  The previous encoding
35501 contained only the size of the bit-field.  Using only this information
35502 it is not possible to reliably compute the size occupied by the
35503 bit-field.  This is very important in the presence of the Boehm's
35504 garbage collector because the objects are allocated using the typed
35505 memory facility available in this collector.  The typed memory
35506 allocation requires information about where the pointers are located
35507 inside the object.
35509  The position in the bit-field is the position, counting in bits, of the
35510 bit closest to the beginning of the structure.
35512  The non-atomic types are encoded as follows:
35514 pointers       `^' followed by the pointed type.
35515 arrays         `[' followed by the number of elements in the array
35516                followed by the type of the elements followed by `]'
35517 structures     `{' followed by the name of the structure (or `?' if the
35518                structure is unnamed), the `=' sign, the type of the
35519                members and by `}'
35520 unions         `(' followed by the name of the structure (or `?' if the
35521                union is unnamed), the `=' sign, the type of the members
35522                followed by `)'
35524  Here are some types and their encodings, as they are generated by the
35525 compiler on an i386 machine:
35528 Objective-C type   Compiler encoding
35529      int a[10];    `[10i]'
35530      struct {      `{?=i[3f]b128i3b131i2c}'
35531        int i;      
35532        float f[3]; 
35533        int a:3;    
35534        int b:2;    
35535        char c;     
35536      }             
35539  In addition to the types the compiler also encodes the type
35540 specifiers.  The table below describes the encoding of the current
35541 Objective-C type specifiers:
35544 Specifier          Encoding
35545 `const'            `r'
35546 `in'               `n'
35547 `inout'            `N'
35548 `out'              `o'
35549 `bycopy'           `O'
35550 `oneway'           `V'
35553  The type specifiers are encoded just before the type.  Unlike types
35554 however, the type specifiers are only encoded when they appear in method
35555 argument types.
35557 \x1f
35558 File: gcc.info,  Node: Garbage Collection,  Next: Constant string objects,  Prev: Type encoding,  Up: Objective-C
35560 7.3 Garbage Collection
35561 ======================
35563 Support for a new memory management policy has been added by using a
35564 powerful conservative garbage collector, known as the
35565 Boehm-Demers-Weiser conservative garbage collector.  It is available
35566 from `http://www.hpl.hp.com/personal/Hans_Boehm/gc/'.
35568  To enable the support for it you have to configure the compiler using
35569 an additional argument, `--enable-objc-gc'.  You need to have garbage
35570 collector installed before building the compiler.  This will build an
35571 additional runtime library which has several enhancements to support
35572 the garbage collector.  The new library has a new name, `libobjc_gc.a'
35573 to not conflict with the non-garbage-collected library.
35575  When the garbage collector is used, the objects are allocated using the
35576 so-called typed memory allocation mechanism available in the
35577 Boehm-Demers-Weiser collector.  This mode requires precise information
35578 on where pointers are located inside objects.  This information is
35579 computed once per class, immediately after the class has been
35580 initialized.
35582  There is a new runtime function `class_ivar_set_gcinvisible()' which
35583 can be used to declare a so-called "weak pointer" reference.  Such a
35584 pointer is basically hidden for the garbage collector; this can be
35585 useful in certain situations, especially when you want to keep track of
35586 the allocated objects, yet allow them to be collected.  This kind of
35587 pointers can only be members of objects, you cannot declare a global
35588 pointer as a weak reference.  Every type which is a pointer type can be
35589 declared a weak pointer, including `id', `Class' and `SEL'.
35591  Here is an example of how to use this feature.  Suppose you want to
35592 implement a class whose instances hold a weak pointer reference; the
35593 following class does this:
35596      @interface WeakPointer : Object
35597      {
35598          const void* weakPointer;
35599      }
35601      - initWithPointer:(const void*)p;
35602      - (const void*)weakPointer;
35603      @end
35606      @implementation WeakPointer
35608      + (void)initialize
35609      {
35610        class_ivar_set_gcinvisible (self, "weakPointer", YES);
35611      }
35613      - initWithPointer:(const void*)p
35614      {
35615        weakPointer = p;
35616        return self;
35617      }
35619      - (const void*)weakPointer
35620      {
35621        return weakPointer;
35622      }
35624      @end
35626  Weak pointers are supported through a new type character specifier
35627 represented by the `!' character.  The `class_ivar_set_gcinvisible()'
35628 function adds or removes this specifier to the string type description
35629 of the instance variable named as argument.
35631 \x1f
35632 File: gcc.info,  Node: Constant string objects,  Next: compatibility_alias,  Prev: Garbage Collection,  Up: Objective-C
35634 7.4 Constant string objects
35635 ===========================
35637 GNU Objective-C provides constant string objects that are generated
35638 directly by the compiler.  You declare a constant string object by
35639 prefixing a C constant string with the character `@':
35641        id myString = @"this is a constant string object";
35643  The constant string objects are by default instances of the
35644 `NXConstantString' class which is provided by the GNU Objective-C
35645 runtime.  To get the definition of this class you must include the
35646 `objc/NXConstStr.h' header file.
35648  User defined libraries may want to implement their own constant string
35649 class.  To be able to support them, the GNU Objective-C compiler
35650 provides a new command line options
35651 `-fconstant-string-class=CLASS-NAME'.  The provided class should adhere
35652 to a strict structure, the same as `NXConstantString''s structure:
35655      @interface MyConstantStringClass
35656      {
35657        Class isa;
35658        char *c_string;
35659        unsigned int len;
35660      }
35661      @end
35663  `NXConstantString' inherits from `Object'; user class libraries may
35664 choose to inherit the customized constant string class from a different
35665 class than `Object'.  There is no requirement in the methods the
35666 constant string class has to implement, but the final ivar layout of
35667 the class must be the compatible with the given structure.
35669  When the compiler creates the statically allocated constant string
35670 object, the `c_string' field will be filled by the compiler with the
35671 string; the `length' field will be filled by the compiler with the
35672 string length; the `isa' pointer will be filled with `NULL' by the
35673 compiler, and it will later be fixed up automatically at runtime by the
35674 GNU Objective-C runtime library to point to the class which was set by
35675 the `-fconstant-string-class' option when the object file is loaded (if
35676 you wonder how it works behind the scenes, the name of the class to
35677 use, and the list of static objects to fixup, are stored by the
35678 compiler in the object file in a place where the GNU runtime library
35679 will find them at runtime).
35681  As a result, when a file is compiled with the
35682 `-fconstant-string-class' option, all the constant string objects will
35683 be instances of the class specified as argument to this option.  It is
35684 possible to have multiple compilation units referring to different
35685 constant string classes, neither the compiler nor the linker impose any
35686 restrictions in doing this.
35688 \x1f
35689 File: gcc.info,  Node: compatibility_alias,  Prev: Constant string objects,  Up: Objective-C
35691 7.5 compatibility_alias
35692 =======================
35694 This is a feature of the Objective-C compiler rather than of the
35695 runtime, anyway since it is documented nowhere and its existence was
35696 forgotten, we are documenting it here.
35698  The keyword `@compatibility_alias' allows you to define a class name
35699 as equivalent to another class name.  For example:
35701      @compatibility_alias WOApplication GSWApplication;
35703  tells the compiler that each time it encounters `WOApplication' as a
35704 class name, it should replace it with `GSWApplication' (that is,
35705 `WOApplication' is just an alias for `GSWApplication').
35707  There are some constraints on how this can be used--
35709    * `WOApplication' (the alias) must not be an existing class;
35711    * `GSWApplication' (the real class) must be an existing class.
35714 \x1f
35715 File: gcc.info,  Node: Compatibility,  Next: Gcov,  Prev: Objective-C,  Up: Top
35717 8 Binary Compatibility
35718 **********************
35720 Binary compatibility encompasses several related concepts:
35722 "application binary interface (ABI)"
35723      The set of runtime conventions followed by all of the tools that
35724      deal with binary representations of a program, including
35725      compilers, assemblers, linkers, and language runtime support.
35726      Some ABIs are formal with a written specification, possibly
35727      designed by multiple interested parties.  Others are simply the
35728      way things are actually done by a particular set of tools.
35730 "ABI conformance"
35731      A compiler conforms to an ABI if it generates code that follows
35732      all of the specifications enumerated by that ABI.  A library
35733      conforms to an ABI if it is implemented according to that ABI.  An
35734      application conforms to an ABI if it is built using tools that
35735      conform to that ABI and does not contain source code that
35736      specifically changes behavior specified by the ABI.
35738 "calling conventions"
35739      Calling conventions are a subset of an ABI that specify of how
35740      arguments are passed and function results are returned.
35742 "interoperability"
35743      Different sets of tools are interoperable if they generate files
35744      that can be used in the same program.  The set of tools includes
35745      compilers, assemblers, linkers, libraries, header files, startup
35746      files, and debuggers.  Binaries produced by different sets of
35747      tools are not interoperable unless they implement the same ABI.
35748      This applies to different versions of the same tools as well as
35749      tools from different vendors.
35751 "intercallability"
35752      Whether a function in a binary built by one set of tools can call a
35753      function in a binary built by a different set of tools is a subset
35754      of interoperability.
35756 "implementation-defined features"
35757      Language standards include lists of implementation-defined
35758      features whose behavior can vary from one implementation to
35759      another.  Some of these features are normally covered by a
35760      platform's ABI and others are not.  The features that are not
35761      covered by an ABI generally affect how a program behaves, but not
35762      intercallability.
35764 "compatibility"
35765      Conformance to the same ABI and the same behavior of
35766      implementation-defined features are both relevant for
35767      compatibility.
35769  The application binary interface implemented by a C or C++ compiler
35770 affects code generation and runtime support for:
35772    * size and alignment of data types
35774    * layout of structured types
35776    * calling conventions
35778    * register usage conventions
35780    * interfaces for runtime arithmetic support
35782    * object file formats
35784  In addition, the application binary interface implemented by a C++
35785 compiler affects code generation and runtime support for:
35786    * name mangling
35788    * exception handling
35790    * invoking constructors and destructors
35792    * layout, alignment, and padding of classes
35794    * layout and alignment of virtual tables
35796  Some GCC compilation options cause the compiler to generate code that
35797 does not conform to the platform's default ABI.  Other options cause
35798 different program behavior for implementation-defined features that are
35799 not covered by an ABI.  These options are provided for consistency with
35800 other compilers that do not follow the platform's default ABI or the
35801 usual behavior of implementation-defined features for the platform.  Be
35802 very careful about using such options.
35804  Most platforms have a well-defined ABI that covers C code, but ABIs
35805 that cover C++ functionality are not yet common.
35807  Starting with GCC 3.2, GCC binary conventions for C++ are based on a
35808 written, vendor-neutral C++ ABI that was designed to be specific to
35809 64-bit Itanium but also includes generic specifications that apply to
35810 any platform.  This C++ ABI is also implemented by other compiler
35811 vendors on some platforms, notably GNU/Linux and BSD systems.  We have
35812 tried hard to provide a stable ABI that will be compatible with future
35813 GCC releases, but it is possible that we will encounter problems that
35814 make this difficult.  Such problems could include different
35815 interpretations of the C++ ABI by different vendors, bugs in the ABI, or
35816 bugs in the implementation of the ABI in different compilers.  GCC's
35817 `-Wabi' switch warns when G++ generates code that is probably not
35818 compatible with the C++ ABI.
35820  The C++ library used with a C++ compiler includes the Standard C++
35821 Library, with functionality defined in the C++ Standard, plus language
35822 runtime support.  The runtime support is included in a C++ ABI, but
35823 there is no formal ABI for the Standard C++ Library.  Two
35824 implementations of that library are interoperable if one follows the
35825 de-facto ABI of the other and if they are both built with the same
35826 compiler, or with compilers that conform to the same ABI for C++
35827 compiler and runtime support.
35829  When G++ and another C++ compiler conform to the same C++ ABI, but the
35830 implementations of the Standard C++ Library that they normally use do
35831 not follow the same ABI for the Standard C++ Library, object files
35832 built with those compilers can be used in the same program only if they
35833 use the same C++ library.  This requires specifying the location of the
35834 C++ library header files when invoking the compiler whose usual library
35835 is not being used.  The location of GCC's C++ header files depends on
35836 how the GCC build was configured, but can be seen by using the G++ `-v'
35837 option.  With default configuration options for G++ 3.3 the compile
35838 line for a different C++ compiler needs to include
35840          -IGCC_INSTALL_DIRECTORY/include/c++/3.3
35842  Similarly, compiling code with G++ that must use a C++ library other
35843 than the GNU C++ library requires specifying the location of the header
35844 files for that other library.
35846  The most straightforward way to link a program to use a particular C++
35847 library is to use a C++ driver that specifies that C++ library by
35848 default.  The `g++' driver, for example, tells the linker where to find
35849 GCC's C++ library (`libstdc++') plus the other libraries and startup
35850 files it needs, in the proper order.
35852  If a program must use a different C++ library and it's not possible to
35853 do the final link using a C++ driver that uses that library by default,
35854 it is necessary to tell `g++' the location and name of that library.
35855 It might also be necessary to specify different startup files and other
35856 runtime support libraries, and to suppress the use of GCC's support
35857 libraries with one or more of the options `-nostdlib', `-nostartfiles',
35858 and `-nodefaultlibs'.
35860 \x1f
35861 File: gcc.info,  Node: Gcov,  Next: Trouble,  Prev: Compatibility,  Up: Top
35863 9 `gcov'--a Test Coverage Program
35864 *********************************
35866 `gcov' is a tool you can use in conjunction with GCC to test code
35867 coverage in your programs.
35869 * Menu:
35871 * Gcov Intro::                  Introduction to gcov.
35872 * Invoking Gcov::               How to use gcov.
35873 * Gcov and Optimization::       Using gcov with GCC optimization.
35874 * Gcov Data Files::             The files used by gcov.
35875 * Cross-profiling::             Data file relocation.
35877 \x1f
35878 File: gcc.info,  Node: Gcov Intro,  Next: Invoking Gcov,  Up: Gcov
35880 9.1 Introduction to `gcov'
35881 ==========================
35883 `gcov' is a test coverage program.  Use it in concert with GCC to
35884 analyze your programs to help create more efficient, faster running
35885 code and to discover untested parts of your program.  You can use
35886 `gcov' as a profiling tool to help discover where your optimization
35887 efforts will best affect your code.  You can also use `gcov' along with
35888 the other profiling tool, `gprof', to assess which parts of your code
35889 use the greatest amount of computing time.
35891  Profiling tools help you analyze your code's performance.  Using a
35892 profiler such as `gcov' or `gprof', you can find out some basic
35893 performance statistics, such as:
35895    * how often each line of code executes
35897    * what lines of code are actually executed
35899    * how much computing time each section of code uses
35901  Once you know these things about how your code works when compiled, you
35902 can look at each module to see which modules should be optimized.
35903 `gcov' helps you determine where to work on optimization.
35905  Software developers also use coverage testing in concert with
35906 testsuites, to make sure software is actually good enough for a release.
35907 Testsuites can verify that a program works as expected; a coverage
35908 program tests to see how much of the program is exercised by the
35909 testsuite.  Developers can then determine what kinds of test cases need
35910 to be added to the testsuites to create both better testing and a better
35911 final product.
35913  You should compile your code without optimization if you plan to use
35914 `gcov' because the optimization, by combining some lines of code into
35915 one function, may not give you as much information as you need to look
35916 for `hot spots' where the code is using a great deal of computer time.
35917 Likewise, because `gcov' accumulates statistics by line (at the lowest
35918 resolution), it works best with a programming style that places only
35919 one statement on each line.  If you use complicated macros that expand
35920 to loops or to other control structures, the statistics are less
35921 helpful--they only report on the line where the macro call appears.  If
35922 your complex macros behave like functions, you can replace them with
35923 inline functions to solve this problem.
35925  `gcov' creates a logfile called `SOURCEFILE.gcov' which indicates how
35926 many times each line of a source file `SOURCEFILE.c' has executed.  You
35927 can use these logfiles along with `gprof' to aid in fine-tuning the
35928 performance of your programs.  `gprof' gives timing information you can
35929 use along with the information you get from `gcov'.
35931  `gcov' works only on code compiled with GCC.  It is not compatible
35932 with any other profiling or test coverage mechanism.
35934 \x1f
35935 File: gcc.info,  Node: Invoking Gcov,  Next: Gcov and Optimization,  Prev: Gcov Intro,  Up: Gcov
35937 9.2 Invoking `gcov'
35938 ===================
35940      gcov [OPTIONS] SOURCEFILES
35942  `gcov' accepts the following options:
35944 `-h'
35945 `--help'
35946      Display help about using `gcov' (on the standard output), and exit
35947      without doing any further processing.
35949 `-v'
35950 `--version'
35951      Display the `gcov' version number (on the standard output), and
35952      exit without doing any further processing.
35954 `-a'
35955 `--all-blocks'
35956      Write individual execution counts for every basic block.  Normally
35957      gcov outputs execution counts only for the main blocks of a line.
35958      With this option you can determine if blocks within a single line
35959      are not being executed.
35961 `-b'
35962 `--branch-probabilities'
35963      Write branch frequencies to the output file, and write branch
35964      summary info to the standard output.  This option allows you to
35965      see how often each branch in your program was taken.
35966      Unconditional branches will not be shown, unless the `-u' option
35967      is given.
35969 `-c'
35970 `--branch-counts'
35971      Write branch frequencies as the number of branches taken, rather
35972      than the percentage of branches taken.
35974 `-n'
35975 `--no-output'
35976      Do not create the `gcov' output file.
35978 `-l'
35979 `--long-file-names'
35980      Create long file names for included source files.  For example, if
35981      the header file `x.h' contains code, and was included in the file
35982      `a.c', then running `gcov' on the file `a.c' will produce an
35983      output file called `a.c##x.h.gcov' instead of `x.h.gcov'.  This
35984      can be useful if `x.h' is included in multiple source files.  If
35985      you use the `-p' option, both the including and included file
35986      names will be complete path names.
35988 `-p'
35989 `--preserve-paths'
35990      Preserve complete path information in the names of generated
35991      `.gcov' files.  Without this option, just the filename component is
35992      used.  With this option, all directories are used, with `/'
35993      characters translated to `#' characters, `.' directory components
35994      removed and `..' components renamed to `^'.  This is useful if
35995      sourcefiles are in several different directories.  It also affects
35996      the `-l' option.
35998 `-f'
35999 `--function-summaries'
36000      Output summaries for each function in addition to the file level
36001      summary.
36003 `-o DIRECTORY|FILE'
36004 `--object-directory DIRECTORY'
36005 `--object-file FILE'
36006      Specify either the directory containing the gcov data files, or the
36007      object path name.  The `.gcno', and `.gcda' data files are
36008      searched for using this option.  If a directory is specified, the
36009      data files are in that directory and named after the source file
36010      name, without its extension.  If a file is specified here, the
36011      data files are named after that file, without its extension.  If
36012      this option is not supplied, it defaults to the current directory.
36014 `-u'
36015 `--unconditional-branches'
36016      When branch probabilities are given, include those of
36017      unconditional branches.  Unconditional branches are normally not
36018      interesting.
36021  `gcov' should be run with the current directory the same as that when
36022 you invoked the compiler.  Otherwise it will not be able to locate the
36023 source files.  `gcov' produces files called `MANGLEDNAME.gcov' in the
36024 current directory.  These contain the coverage information of the
36025 source file they correspond to.  One `.gcov' file is produced for each
36026 source file containing code, which was compiled to produce the data
36027 files.  The MANGLEDNAME part of the output file name is usually simply
36028 the source file name, but can be something more complicated if the `-l'
36029 or `-p' options are given.  Refer to those options for details.
36031  The `.gcov' files contain the `:' separated fields along with program
36032 source code.  The format is
36034      EXECUTION_COUNT:LINE_NUMBER:SOURCE LINE TEXT
36036  Additional block information may succeed each line, when requested by
36037 command line option.  The EXECUTION_COUNT is `-' for lines containing
36038 no code and `#####' for lines which were never executed.  Some lines of
36039 information at the start have LINE_NUMBER of zero.
36041  The preamble lines are of the form
36043      -:0:TAG:VALUE
36045  The ordering and number of these preamble lines will be augmented as
36046 `gcov' development progresses -- do not rely on them remaining
36047 unchanged.  Use TAG to locate a particular preamble line.
36049  The additional block information is of the form
36051      TAG INFORMATION
36053  The INFORMATION is human readable, but designed to be simple enough
36054 for machine parsing too.
36056  When printing percentages, 0% and 100% are only printed when the values
36057 are _exactly_ 0% and 100% respectively.  Other values which would
36058 conventionally be rounded to 0% or 100% are instead printed as the
36059 nearest non-boundary value.
36061  When using `gcov', you must first compile your program with two
36062 special GCC options: `-fprofile-arcs -ftest-coverage'.  This tells the
36063 compiler to generate additional information needed by gcov (basically a
36064 flow graph of the program) and also includes additional code in the
36065 object files for generating the extra profiling information needed by
36066 gcov.  These additional files are placed in the directory where the
36067 object file is located.
36069  Running the program will cause profile output to be generated.  For
36070 each source file compiled with `-fprofile-arcs', an accompanying
36071 `.gcda' file will be placed in the object file directory.
36073  Running `gcov' with your program's source file names as arguments will
36074 now produce a listing of the code along with frequency of execution for
36075 each line.  For example, if your program is called `tmp.c', this is
36076 what you see when you use the basic `gcov' facility:
36078      $ gcc -fprofile-arcs -ftest-coverage tmp.c
36079      $ a.out
36080      $ gcov tmp.c
36081      90.00% of 10 source lines executed in file tmp.c
36082      Creating tmp.c.gcov.
36084  The file `tmp.c.gcov' contains output from `gcov'.  Here is a sample:
36086              -:    0:Source:tmp.c
36087              -:    0:Graph:tmp.gcno
36088              -:    0:Data:tmp.gcda
36089              -:    0:Runs:1
36090              -:    0:Programs:1
36091              -:    1:#include <stdio.h>
36092              -:    2:
36093              -:    3:int main (void)
36094              1:    4:{
36095              1:    5:  int i, total;
36096              -:    6:
36097              1:    7:  total = 0;
36098              -:    8:
36099             11:    9:  for (i = 0; i < 10; i++)
36100             10:   10:    total += i;
36101              -:   11:
36102              1:   12:  if (total != 45)
36103          #####:   13:    printf ("Failure\n");
36104              -:   14:  else
36105              1:   15:    printf ("Success\n");
36106              1:   16:  return 0;
36107              -:   17:}
36109  When you use the `-a' option, you will get individual block counts,
36110 and the output looks like this:
36112              -:    0:Source:tmp.c
36113              -:    0:Graph:tmp.gcno
36114              -:    0:Data:tmp.gcda
36115              -:    0:Runs:1
36116              -:    0:Programs:1
36117              -:    1:#include <stdio.h>
36118              -:    2:
36119              -:    3:int main (void)
36120              1:    4:{
36121              1:    4-block  0
36122              1:    5:  int i, total;
36123              -:    6:
36124              1:    7:  total = 0;
36125              -:    8:
36126             11:    9:  for (i = 0; i < 10; i++)
36127             11:    9-block  0
36128             10:   10:    total += i;
36129             10:   10-block  0
36130              -:   11:
36131              1:   12:  if (total != 45)
36132              1:   12-block  0
36133          #####:   13:    printf ("Failure\n");
36134          $$$$$:   13-block  0
36135              -:   14:  else
36136              1:   15:    printf ("Success\n");
36137              1:   15-block  0
36138              1:   16:  return 0;
36139              1:   16-block  0
36140              -:   17:}
36142  In this mode, each basic block is only shown on one line - the last
36143 line of the block.  A multi-line block will only contribute to the
36144 execution count of that last line, and other lines will not be shown to
36145 contain code, unless previous blocks end on those lines.  The total
36146 execution count of a line is shown and subsequent lines show the
36147 execution counts for individual blocks that end on that line.  After
36148 each block, the branch and call counts of the block will be shown, if
36149 the `-b' option is given.
36151  Because of the way GCC instruments calls, a call count can be shown
36152 after a line with no individual blocks.  As you can see, line 13
36153 contains a basic block that was not executed.
36155  When you use the `-b' option, your output looks like this:
36157      $ gcov -b tmp.c
36158      90.00% of 10 source lines executed in file tmp.c
36159      80.00% of 5 branches executed in file tmp.c
36160      80.00% of 5 branches taken at least once in file tmp.c
36161      50.00% of 2 calls executed in file tmp.c
36162      Creating tmp.c.gcov.
36164  Here is a sample of a resulting `tmp.c.gcov' file:
36166              -:    0:Source:tmp.c
36167              -:    0:Graph:tmp.gcno
36168              -:    0:Data:tmp.gcda
36169              -:    0:Runs:1
36170              -:    0:Programs:1
36171              -:    1:#include <stdio.h>
36172              -:    2:
36173              -:    3:int main (void)
36174      function main called 1 returned 1 blocks executed 75%
36175              1:    4:{
36176              1:    5:  int i, total;
36177              -:    6:
36178              1:    7:  total = 0;
36179              -:    8:
36180             11:    9:  for (i = 0; i < 10; i++)
36181      branch  0 taken 91% (fallthrough)
36182      branch  1 taken 9%
36183             10:   10:    total += i;
36184              -:   11:
36185              1:   12:  if (total != 45)
36186      branch  0 taken 0% (fallthrough)
36187      branch  1 taken 100%
36188          #####:   13:    printf ("Failure\n");
36189      call    0 never executed
36190              -:   14:  else
36191              1:   15:    printf ("Success\n");
36192      call    0 called 1 returned 100%
36193              1:   16:  return 0;
36194              -:   17:}
36196  For each function, a line is printed showing how many times the
36197 function is called, how many times it returns and what percentage of the
36198 function's blocks were executed.
36200  For each basic block, a line is printed after the last line of the
36201 basic block describing the branch or call that ends the basic block.
36202 There can be multiple branches and calls listed for a single source
36203 line if there are multiple basic blocks that end on that line.  In this
36204 case, the branches and calls are each given a number.  There is no
36205 simple way to map these branches and calls back to source constructs.
36206 In general, though, the lowest numbered branch or call will correspond
36207 to the leftmost construct on the source line.
36209  For a branch, if it was executed at least once, then a percentage
36210 indicating the number of times the branch was taken divided by the
36211 number of times the branch was executed will be printed.  Otherwise, the
36212 message "never executed" is printed.
36214  For a call, if it was executed at least once, then a percentage
36215 indicating the number of times the call returned divided by the number
36216 of times the call was executed will be printed.  This will usually be
36217 100%, but may be less for functions that call `exit' or `longjmp', and
36218 thus may not return every time they are called.
36220  The execution counts are cumulative.  If the example program were
36221 executed again without removing the `.gcda' file, the count for the
36222 number of times each line in the source was executed would be added to
36223 the results of the previous run(s).  This is potentially useful in
36224 several ways.  For example, it could be used to accumulate data over a
36225 number of program runs as part of a test verification suite, or to
36226 provide more accurate long-term information over a large number of
36227 program runs.
36229  The data in the `.gcda' files is saved immediately before the program
36230 exits.  For each source file compiled with `-fprofile-arcs', the
36231 profiling code first attempts to read in an existing `.gcda' file; if
36232 the file doesn't match the executable (differing number of basic block
36233 counts) it will ignore the contents of the file.  It then adds in the
36234 new execution counts and finally writes the data to the file.
36236 \x1f
36237 File: gcc.info,  Node: Gcov and Optimization,  Next: Gcov Data Files,  Prev: Invoking Gcov,  Up: Gcov
36239 9.3 Using `gcov' with GCC Optimization
36240 ======================================
36242 If you plan to use `gcov' to help optimize your code, you must first
36243 compile your program with two special GCC options: `-fprofile-arcs
36244 -ftest-coverage'.  Aside from that, you can use any other GCC options;
36245 but if you want to prove that every single line in your program was
36246 executed, you should not compile with optimization at the same time.
36247 On some machines the optimizer can eliminate some simple code lines by
36248 combining them with other lines.  For example, code like this:
36250      if (a != b)
36251        c = 1;
36252      else
36253        c = 0;
36255 can be compiled into one instruction on some machines.  In this case,
36256 there is no way for `gcov' to calculate separate execution counts for
36257 each line because there isn't separate code for each line.  Hence the
36258 `gcov' output looks like this if you compiled the program with
36259 optimization:
36261            100:   12:if (a != b)
36262            100:   13:  c = 1;
36263            100:   14:else
36264            100:   15:  c = 0;
36266  The output shows that this block of code, combined by optimization,
36267 executed 100 times.  In one sense this result is correct, because there
36268 was only one instruction representing all four of these lines.  However,
36269 the output does not indicate how many times the result was 0 and how
36270 many times the result was 1.
36272  Inlineable functions can create unexpected line counts.  Line counts
36273 are shown for the source code of the inlineable function, but what is
36274 shown depends on where the function is inlined, or if it is not inlined
36275 at all.
36277  If the function is not inlined, the compiler must emit an out of line
36278 copy of the function, in any object file that needs it.  If `fileA.o'
36279 and `fileB.o' both contain out of line bodies of a particular
36280 inlineable function, they will also both contain coverage counts for
36281 that function.  When `fileA.o' and `fileB.o' are linked together, the
36282 linker will, on many systems, select one of those out of line bodies
36283 for all calls to that function, and remove or ignore the other.
36284 Unfortunately, it will not remove the coverage counters for the unused
36285 function body.  Hence when instrumented, all but one use of that
36286 function will show zero counts.
36288  If the function is inlined in several places, the block structure in
36289 each location might not be the same.  For instance, a condition might
36290 now be calculable at compile time in some instances.  Because the
36291 coverage of all the uses of the inline function will be shown for the
36292 same source lines, the line counts themselves might seem inconsistent.
36294 \x1f
36295 File: gcc.info,  Node: Gcov Data Files,  Next: Cross-profiling,  Prev: Gcov and Optimization,  Up: Gcov
36297 9.4 Brief description of `gcov' data files
36298 ==========================================
36300 `gcov' uses two files for profiling.  The names of these files are
36301 derived from the original _object_ file by substituting the file suffix
36302 with either `.gcno', or `.gcda'.  All of these files are placed in the
36303 same directory as the object file, and contain data stored in a
36304 platform-independent format.
36306  The `.gcno' file is generated when the source file is compiled with
36307 the GCC `-ftest-coverage' option.  It contains information to
36308 reconstruct the basic block graphs and assign source line numbers to
36309 blocks.
36311  The `.gcda' file is generated when a program containing object files
36312 built with the GCC `-fprofile-arcs' option is executed.  A separate
36313 `.gcda' file is created for each object file compiled with this option.
36314 It contains arc transition counts, and some summary information.
36316  The full details of the file format is specified in `gcov-io.h', and
36317 functions provided in that header file should be used to access the
36318 coverage files.
36320 \x1f
36321 File: gcc.info,  Node: Cross-profiling,  Prev: Gcov Data Files,  Up: Gcov
36323 9.5 Data file relocation to support cross-profiling
36324 ===================================================
36326 Running the program will cause profile output to be generated.  For each
36327 source file compiled with `-fprofile-arcs', an accompanying `.gcda'
36328 file will be placed in the object file directory. That implicitly
36329 requires running the program on the same system as it was built or
36330 having the same absolute directory structure on the target system. The
36331 program will try to create the needed directory structure, if it is not
36332 already present.
36334  To support cross-profiling, a program compiled with `-fprofile-arcs'
36335 can relocate the data files based on two environment variables:
36337    * GCOV_PREFIX contains the prefix to add to the absolute paths in
36338      the object file. Prefix must be absolute as well, otherwise its
36339      value is ignored. The default is no prefix.
36341    * GCOV_PREFIX_STRIP indicates the how many initial directory names
36342      to strip off the hardwired absolute paths. Default value is 0.
36344      _Note:_ GCOV_PREFIX_STRIP has no effect if GCOV_PREFIX is
36345      undefined, empty or non-absolute.
36347  For example, if the object file `/user/build/foo.o' was built with
36348 `-fprofile-arcs', the final executable will try to create the data file
36349 `/user/build/foo.gcda' when running on the target system.  This will
36350 fail if the corresponding directory does not exist and it is unable to
36351 create it.  This can be overcome by, for example, setting the
36352 environment as `GCOV_PREFIX=/target/run' and `GCOV_PREFIX_STRIP=1'.
36353 Such a setting will name the data file `/target/run/build/foo.gcda'.
36355  You must move the data files to the expected directory tree in order to
36356 use them for profile directed optimizations (`--use-profile'), or to
36357 use the `gcov' tool.
36359 \x1f
36360 File: gcc.info,  Node: Trouble,  Next: Bugs,  Prev: Gcov,  Up: Top
36362 10 Known Causes of Trouble with GCC
36363 ***********************************
36365 This section describes known problems that affect users of GCC.  Most
36366 of these are not GCC bugs per se--if they were, we would fix them.  But
36367 the result for a user may be like the result of a bug.
36369  Some of these problems are due to bugs in other software, some are
36370 missing features that are too much work to add, and some are places
36371 where people's opinions differ as to what is best.
36373 * Menu:
36375 * Actual Bugs::         Bugs we will fix later.
36376 * Cross-Compiler Problems:: Common problems of cross compiling with GCC.
36377 * Interoperation::      Problems using GCC with other compilers,
36378                         and with certain linkers, assemblers and debuggers.
36379 * Incompatibilities::   GCC is incompatible with traditional C.
36380 * Fixed Headers::       GCC uses corrected versions of system header files.
36381                         This is necessary, but doesn't always work smoothly.
36382 * Standard Libraries::  GCC uses the system C library, which might not be
36383                         compliant with the ISO C standard.
36384 * Disappointments::     Regrettable things we can't change, but not quite bugs.
36385 * C++ Misunderstandings:: Common misunderstandings with GNU C++.
36386 * Protoize Caveats::    Things to watch out for when using `protoize'.
36387 * Non-bugs::            Things we think are right, but some others disagree.
36388 * Warnings and Errors:: Which problems in your code get warnings,
36389                         and which get errors.
36391 \x1f
36392 File: gcc.info,  Node: Actual Bugs,  Next: Cross-Compiler Problems,  Up: Trouble
36394 10.1 Actual Bugs We Haven't Fixed Yet
36395 =====================================
36397    * The `fixincludes' script interacts badly with automounters; if the
36398      directory of system header files is automounted, it tends to be
36399      unmounted while `fixincludes' is running.  This would seem to be a
36400      bug in the automounter.  We don't know any good way to work around
36401      it.
36403    * The `fixproto' script will sometimes add prototypes for the
36404      `sigsetjmp' and `siglongjmp' functions that reference the
36405      `jmp_buf' type before that type is defined.  To work around this,
36406      edit the offending file and place the typedef in front of the
36407      prototypes.
36409 \x1f
36410 File: gcc.info,  Node: Cross-Compiler Problems,  Next: Interoperation,  Prev: Actual Bugs,  Up: Trouble
36412 10.2 Cross-Compiler Problems
36413 ============================
36415 You may run into problems with cross compilation on certain machines,
36416 for several reasons.
36418    * At present, the program `mips-tfile' which adds debug support to
36419      object files on MIPS systems does not work in a cross compile
36420      environment.
36422 \x1f
36423 File: gcc.info,  Node: Interoperation,  Next: Incompatibilities,  Prev: Cross-Compiler Problems,  Up: Trouble
36425 10.3 Interoperation
36426 ===================
36428 This section lists various difficulties encountered in using GCC
36429 together with other compilers or with the assemblers, linkers,
36430 libraries and debuggers on certain systems.
36432    * On many platforms, GCC supports a different ABI for C++ than do
36433      other compilers, so the object files compiled by GCC cannot be
36434      used with object files generated by another C++ compiler.
36436      An area where the difference is most apparent is name mangling.
36437      The use of different name mangling is intentional, to protect you
36438      from more subtle problems.  Compilers differ as to many internal
36439      details of C++ implementation, including: how class instances are
36440      laid out, how multiple inheritance is implemented, and how virtual
36441      function calls are handled.  If the name encoding were made the
36442      same, your programs would link against libraries provided from
36443      other compilers--but the programs would then crash when run.
36444      Incompatible libraries are then detected at link time, rather than
36445      at run time.
36447    * On some BSD systems, including some versions of Ultrix, use of
36448      profiling causes static variable destructors (currently used only
36449      in C++) not to be run.
36451    * On some SGI systems, when you use `-lgl_s' as an option, it gets
36452      translated magically to `-lgl_s -lX11_s -lc_s'.  Naturally, this
36453      does not happen when you use GCC.  You must specify all three
36454      options explicitly.
36456    * On a SPARC, GCC aligns all values of type `double' on an 8-byte
36457      boundary, and it expects every `double' to be so aligned.  The Sun
36458      compiler usually gives `double' values 8-byte alignment, with one
36459      exception: function arguments of type `double' may not be aligned.
36461      As a result, if a function compiled with Sun CC takes the address
36462      of an argument of type `double' and passes this pointer of type
36463      `double *' to a function compiled with GCC, dereferencing the
36464      pointer may cause a fatal signal.
36466      One way to solve this problem is to compile your entire program
36467      with GCC.  Another solution is to modify the function that is
36468      compiled with Sun CC to copy the argument into a local variable;
36469      local variables are always properly aligned.  A third solution is
36470      to modify the function that uses the pointer to dereference it via
36471      the following function `access_double' instead of directly with
36472      `*':
36474           inline double
36475           access_double (double *unaligned_ptr)
36476           {
36477             union d2i { double d; int i[2]; };
36479             union d2i *p = (union d2i *) unaligned_ptr;
36480             union d2i u;
36482             u.i[0] = p->i[0];
36483             u.i[1] = p->i[1];
36485             return u.d;
36486           }
36488      Storing into the pointer can be done likewise with the same union.
36490    * On Solaris, the `malloc' function in the `libmalloc.a' library may
36491      allocate memory that is only 4 byte aligned.  Since GCC on the
36492      SPARC assumes that doubles are 8 byte aligned, this may result in a
36493      fatal signal if doubles are stored in memory allocated by the
36494      `libmalloc.a' library.
36496      The solution is to not use the `libmalloc.a' library.  Use instead
36497      `malloc' and related functions from `libc.a'; they do not have
36498      this problem.
36500    * On the HP PA machine, ADB sometimes fails to work on functions
36501      compiled with GCC.  Specifically, it fails to work on functions
36502      that use `alloca' or variable-size arrays.  This is because GCC
36503      doesn't generate HP-UX unwind descriptors for such functions.  It
36504      may even be impossible to generate them.
36506    * Debugging (`-g') is not supported on the HP PA machine, unless you
36507      use the preliminary GNU tools.
36509    * Taking the address of a label may generate errors from the HP-UX
36510      PA assembler.  GAS for the PA does not have this problem.
36512    * Using floating point parameters for indirect calls to static
36513      functions will not work when using the HP assembler.  There simply
36514      is no way for GCC to specify what registers hold arguments for
36515      static functions when using the HP assembler.  GAS for the PA does
36516      not have this problem.
36518    * In extremely rare cases involving some very large functions you may
36519      receive errors from the HP linker complaining about an out of
36520      bounds unconditional branch offset.  This used to occur more often
36521      in previous versions of GCC, but is now exceptionally rare.  If
36522      you should run into it, you can work around by making your
36523      function smaller.
36525    * GCC compiled code sometimes emits warnings from the HP-UX
36526      assembler of the form:
36528           (warning) Use of GR3 when
36529             frame >= 8192 may cause conflict.
36531      These warnings are harmless and can be safely ignored.
36533    * In extremely rare cases involving some very large functions you may
36534      receive errors from the AIX Assembler complaining about a
36535      displacement that is too large.  If you should run into it, you
36536      can work around by making your function smaller.
36538    * The `libstdc++.a' library in GCC relies on the SVR4 dynamic linker
36539      semantics which merges global symbols between libraries and
36540      applications, especially necessary for C++ streams functionality.
36541      This is not the default behavior of AIX shared libraries and
36542      dynamic linking.  `libstdc++.a' is built on AIX with
36543      "runtime-linking" enabled so that symbol merging can occur.  To
36544      utilize this feature, the application linked with `libstdc++.a'
36545      must include the `-Wl,-brtl' flag on the link line.  G++ cannot
36546      impose this because this option may interfere with the semantics
36547      of the user program and users may not always use `g++' to link his
36548      or her application.  Applications are not required to use the
36549      `-Wl,-brtl' flag on the link line--the rest of the `libstdc++.a'
36550      library which is not dependent on the symbol merging semantics
36551      will continue to function correctly.
36553    * An application can interpose its own definition of functions for
36554      functions invoked by `libstdc++.a' with "runtime-linking" enabled
36555      on AIX.  To accomplish this the application must be linked with
36556      "runtime-linking" option and the functions explicitly must be
36557      exported by the application (`-Wl,-brtl,-bE:exportfile').
36559    * AIX on the RS/6000 provides support (NLS) for environments outside
36560      of the United States.  Compilers and assemblers use NLS to support
36561      locale-specific representations of various objects including
36562      floating-point numbers (`.' vs `,' for separating decimal
36563      fractions).  There have been problems reported where the library
36564      linked with GCC does not produce the same floating-point formats
36565      that the assembler accepts.  If you have this problem, set the
36566      `LANG' environment variable to `C' or `En_US'.
36568    * Even if you specify `-fdollars-in-identifiers', you cannot
36569      successfully use `$' in identifiers on the RS/6000 due to a
36570      restriction in the IBM assembler.  GAS supports these identifiers.
36573 \x1f
36574 File: gcc.info,  Node: Incompatibilities,  Next: Fixed Headers,  Prev: Interoperation,  Up: Trouble
36576 10.4 Incompatibilities of GCC
36577 =============================
36579 There are several noteworthy incompatibilities between GNU C and K&R
36580 (non-ISO) versions of C.
36582    * GCC normally makes string constants read-only.  If several
36583      identical-looking string constants are used, GCC stores only one
36584      copy of the string.
36586      One consequence is that you cannot call `mktemp' with a string
36587      constant argument.  The function `mktemp' always alters the string
36588      its argument points to.
36590      Another consequence is that `sscanf' does not work on some very
36591      old systems when passed a string constant as its format control
36592      string or input.  This is because `sscanf' incorrectly tries to
36593      write into the string constant.  Likewise `fscanf' and `scanf'.
36595      The solution to these problems is to change the program to use
36596      `char'-array variables with initialization strings for these
36597      purposes instead of string constants.
36599    * `-2147483648' is positive.
36601      This is because 2147483648 cannot fit in the type `int', so
36602      (following the ISO C rules) its data type is `unsigned long int'.
36603      Negating this value yields 2147483648 again.
36605    * GCC does not substitute macro arguments when they appear inside of
36606      string constants.  For example, the following macro in GCC
36608           #define foo(a) "a"
36610      will produce output `"a"' regardless of what the argument A is.
36612    * When you use `setjmp' and `longjmp', the only automatic variables
36613      guaranteed to remain valid are those declared `volatile'.  This is
36614      a consequence of automatic register allocation.  Consider this
36615      function:
36617           jmp_buf j;
36619           foo ()
36620           {
36621             int a, b;
36623             a = fun1 ();
36624             if (setjmp (j))
36625               return a;
36627             a = fun2 ();
36628             /* `longjmp (j)' may occur in `fun3'. */
36629             return a + fun3 ();
36630           }
36632      Here `a' may or may not be restored to its first value when the
36633      `longjmp' occurs.  If `a' is allocated in a register, then its
36634      first value is restored; otherwise, it keeps the last value stored
36635      in it.
36637      If you use the `-W' option with the `-O' option, you will get a
36638      warning when GCC thinks such a problem might be possible.
36640    * Programs that use preprocessing directives in the middle of macro
36641      arguments do not work with GCC.  For example, a program like this
36642      will not work:
36644           foobar (
36645           #define luser
36646                   hack)
36648      ISO C does not permit such a construct.
36650    * K&R compilers allow comments to cross over an inclusion boundary
36651      (i.e. started in an include file and ended in the including file).
36653    * Declarations of external variables and functions within a block
36654      apply only to the block containing the declaration.  In other
36655      words, they have the same scope as any other declaration in the
36656      same place.
36658      In some other C compilers, a `extern' declaration affects all the
36659      rest of the file even if it happens within a block.
36661    * In traditional C, you can combine `long', etc., with a typedef
36662      name, as shown here:
36664           typedef int foo;
36665           typedef long foo bar;
36667      In ISO C, this is not allowed: `long' and other type modifiers
36668      require an explicit `int'.
36670    * PCC allows typedef names to be used as function parameters.
36672    * Traditional C allows the following erroneous pair of declarations
36673      to appear together in a given scope:
36675           typedef int foo;
36676           typedef foo foo;
36678    * GCC treats all characters of identifiers as significant.
36679      According to K&R-1 (2.2), "No more than the first eight characters
36680      are significant, although more may be used.".  Also according to
36681      K&R-1 (2.2), "An identifier is a sequence of letters and digits;
36682      the first character must be a letter.  The underscore _ counts as
36683      a letter.", but GCC also allows dollar signs in identifiers.
36685    * PCC allows whitespace in the middle of compound assignment
36686      operators such as `+='.  GCC, following the ISO standard, does not
36687      allow this.
36689    * GCC complains about unterminated character constants inside of
36690      preprocessing conditionals that fail.  Some programs have English
36691      comments enclosed in conditionals that are guaranteed to fail; if
36692      these comments contain apostrophes, GCC will probably report an
36693      error.  For example, this code would produce an error:
36695           #if 0
36696           You can't expect this to work.
36697           #endif
36699      The best solution to such a problem is to put the text into an
36700      actual C comment delimited by `/*...*/'.
36702    * Many user programs contain the declaration `long time ();'.  In the
36703      past, the system header files on many systems did not actually
36704      declare `time', so it did not matter what type your program
36705      declared it to return.  But in systems with ISO C headers, `time'
36706      is declared to return `time_t', and if that is not the same as
36707      `long', then `long time ();' is erroneous.
36709      The solution is to change your program to use appropriate system
36710      headers (`<time.h>' on systems with ISO C headers) and not to
36711      declare `time' if the system header files declare it, or failing
36712      that to use `time_t' as the return type of `time'.
36714    * When compiling functions that return `float', PCC converts it to a
36715      double.  GCC actually returns a `float'.  If you are concerned
36716      with PCC compatibility, you should declare your functions to return
36717      `double'; you might as well say what you mean.
36719    * When compiling functions that return structures or unions, GCC
36720      output code normally uses a method different from that used on most
36721      versions of Unix.  As a result, code compiled with GCC cannot call
36722      a structure-returning function compiled with PCC, and vice versa.
36724      The method used by GCC is as follows: a structure or union which is
36725      1, 2, 4 or 8 bytes long is returned like a scalar.  A structure or
36726      union with any other size is stored into an address supplied by
36727      the caller (usually in a special, fixed register, but on some
36728      machines it is passed on the stack).  The target hook
36729      `TARGET_STRUCT_VALUE_RTX' tells GCC where to pass this address.
36731      By contrast, PCC on most target machines returns structures and
36732      unions of any size by copying the data into an area of static
36733      storage, and then returning the address of that storage as if it
36734      were a pointer value.  The caller must copy the data from that
36735      memory area to the place where the value is wanted.  GCC does not
36736      use this method because it is slower and nonreentrant.
36738      On some newer machines, PCC uses a reentrant convention for all
36739      structure and union returning.  GCC on most of these machines uses
36740      a compatible convention when returning structures and unions in
36741      memory, but still returns small structures and unions in registers.
36743      You can tell GCC to use a compatible convention for all structure
36744      and union returning with the option `-fpcc-struct-return'.
36746    * GCC complains about program fragments such as `0x74ae-0x4000'
36747      which appear to be two hexadecimal constants separated by the minus
36748      operator.  Actually, this string is a single "preprocessing token".
36749      Each such token must correspond to one token in C.  Since this
36750      does not, GCC prints an error message.  Although it may appear
36751      obvious that what is meant is an operator and two values, the ISO
36752      C standard specifically requires that this be treated as erroneous.
36754      A "preprocessing token" is a "preprocessing number" if it begins
36755      with a digit and is followed by letters, underscores, digits,
36756      periods and `e+', `e-', `E+', `E-', `p+', `p-', `P+', or `P-'
36757      character sequences.  (In strict C89 mode, the sequences `p+',
36758      `p-', `P+' and `P-' cannot appear in preprocessing numbers.)
36760      To make the above program fragment valid, place whitespace in
36761      front of the minus sign.  This whitespace will end the
36762      preprocessing number.
36764 \x1f
36765 File: gcc.info,  Node: Fixed Headers,  Next: Standard Libraries,  Prev: Incompatibilities,  Up: Trouble
36767 10.5 Fixed Header Files
36768 =======================
36770 GCC needs to install corrected versions of some system header files.
36771 This is because most target systems have some header files that won't
36772 work with GCC unless they are changed.  Some have bugs, some are
36773 incompatible with ISO C, and some depend on special features of other
36774 compilers.
36776  Installing GCC automatically creates and installs the fixed header
36777 files, by running a program called `fixincludes'.  Normally, you don't
36778 need to pay attention to this.  But there are cases where it doesn't do
36779 the right thing automatically.
36781    * If you update the system's header files, such as by installing a
36782      new system version, the fixed header files of GCC are not
36783      automatically updated.  They can be updated using the `mkheaders'
36784      script installed in `LIBEXECDIR/gcc/TARGET/VERSION/install-tools/'.
36786    * On some systems, header file directories contain machine-specific
36787      symbolic links in certain places.  This makes it possible to share
36788      most of the header files among hosts running the same version of
36789      the system on different machine models.
36791      The programs that fix the header files do not understand this
36792      special way of using symbolic links; therefore, the directory of
36793      fixed header files is good only for the machine model used to
36794      build it.
36796      It is possible to make separate sets of fixed header files for the
36797      different machine models, and arrange a structure of symbolic
36798      links so as to use the proper set, but you'll have to do this by
36799      hand.
36801 \x1f
36802 File: gcc.info,  Node: Standard Libraries,  Next: Disappointments,  Prev: Fixed Headers,  Up: Trouble
36804 10.6 Standard Libraries
36805 =======================
36807 GCC by itself attempts to be a conforming freestanding implementation.
36808 *Note Language Standards Supported by GCC: Standards, for details of
36809 what this means.  Beyond the library facilities required of such an
36810 implementation, the rest of the C library is supplied by the vendor of
36811 the operating system.  If that C library doesn't conform to the C
36812 standards, then your programs might get warnings (especially when using
36813 `-Wall') that you don't expect.
36815  For example, the `sprintf' function on SunOS 4.1.3 returns `char *'
36816 while the C standard says that `sprintf' returns an `int'.  The
36817 `fixincludes' program could make the prototype for this function match
36818 the Standard, but that would be wrong, since the function will still
36819 return `char *'.
36821  If you need a Standard compliant library, then you need to find one, as
36822 GCC does not provide one.  The GNU C library (called `glibc') provides
36823 ISO C, POSIX, BSD, SystemV and X/Open compatibility for GNU/Linux and
36824 HURD-based GNU systems; no recent version of it supports other systems,
36825 though some very old versions did.  Version 2.2 of the GNU C library
36826 includes nearly complete C99 support.  You could also ask your
36827 operating system vendor if newer libraries are available.
36829 \x1f
36830 File: gcc.info,  Node: Disappointments,  Next: C++ Misunderstandings,  Prev: Standard Libraries,  Up: Trouble
36832 10.7 Disappointments and Misunderstandings
36833 ==========================================
36835 These problems are perhaps regrettable, but we don't know any practical
36836 way around them.
36838    * Certain local variables aren't recognized by debuggers when you
36839      compile with optimization.
36841      This occurs because sometimes GCC optimizes the variable out of
36842      existence.  There is no way to tell the debugger how to compute the
36843      value such a variable "would have had", and it is not clear that
36844      would be desirable anyway.  So GCC simply does not mention the
36845      eliminated variable when it writes debugging information.
36847      You have to expect a certain amount of disagreement between the
36848      executable and your source code, when you use optimization.
36850    * Users often think it is a bug when GCC reports an error for code
36851      like this:
36853           int foo (struct mumble *);
36855           struct mumble { ... };
36857           int foo (struct mumble *x)
36858           { ... }
36860      This code really is erroneous, because the scope of `struct
36861      mumble' in the prototype is limited to the argument list
36862      containing it.  It does not refer to the `struct mumble' defined
36863      with file scope immediately below--they are two unrelated types
36864      with similar names in different scopes.
36866      But in the definition of `foo', the file-scope type is used
36867      because that is available to be inherited.  Thus, the definition
36868      and the prototype do not match, and you get an error.
36870      This behavior may seem silly, but it's what the ISO standard
36871      specifies.  It is easy enough for you to make your code work by
36872      moving the definition of `struct mumble' above the prototype.
36873      It's not worth being incompatible with ISO C just to avoid an
36874      error for the example shown above.
36876    * Accesses to bit-fields even in volatile objects works by accessing
36877      larger objects, such as a byte or a word.  You cannot rely on what
36878      size of object is accessed in order to read or write the
36879      bit-field; it may even vary for a given bit-field according to the
36880      precise usage.
36882      If you care about controlling the amount of memory that is
36883      accessed, use volatile but do not use bit-fields.
36885    * GCC comes with shell scripts to fix certain known problems in
36886      system header files.  They install corrected copies of various
36887      header files in a special directory where only GCC will normally
36888      look for them.  The scripts adapt to various systems by searching
36889      all the system header files for the problem cases that we know
36890      about.
36892      If new system header files are installed, nothing automatically
36893      arranges to update the corrected header files.  They can be
36894      updated using the `mkheaders' script installed in
36895      `LIBEXECDIR/gcc/TARGET/VERSION/install-tools/'.
36897    * On 68000 and x86 systems, for instance, you can get paradoxical
36898      results if you test the precise values of floating point numbers.
36899      For example, you can find that a floating point value which is not
36900      a NaN is not equal to itself.  This results from the fact that the
36901      floating point registers hold a few more bits of precision than
36902      fit in a `double' in memory.  Compiled code moves values between
36903      memory and floating point registers at its convenience, and moving
36904      them into memory truncates them.
36906      You can partially avoid this problem by using the `-ffloat-store'
36907      option (*note Optimize Options::).
36909    * On AIX and other platforms without weak symbol support, templates
36910      need to be instantiated explicitly and symbols for static members
36911      of templates will not be generated.
36913    * On AIX, GCC scans object files and library archives for static
36914      constructors and destructors when linking an application before the
36915      linker prunes unreferenced symbols.  This is necessary to prevent
36916      the AIX linker from mistakenly assuming that static constructor or
36917      destructor are unused and removing them before the scanning can
36918      occur.  All static constructors and destructors found will be
36919      referenced even though the modules in which they occur may not be
36920      used by the program.  This may lead to both increased executable
36921      size and unexpected symbol references.
36923 \x1f
36924 File: gcc.info,  Node: C++ Misunderstandings,  Next: Protoize Caveats,  Prev: Disappointments,  Up: Trouble
36926 10.8 Common Misunderstandings with GNU C++
36927 ==========================================
36929 C++ is a complex language and an evolving one, and its standard
36930 definition (the ISO C++ standard) was only recently completed.  As a
36931 result, your C++ compiler may occasionally surprise you, even when its
36932 behavior is correct.  This section discusses some areas that frequently
36933 give rise to questions of this sort.
36935 * Menu:
36937 * Static Definitions::  Static member declarations are not definitions
36938 * Name lookup::         Name lookup, templates, and accessing members of base classes
36939 * Temporaries::         Temporaries may vanish before you expect
36940 * Copy Assignment::     Copy Assignment operators copy virtual bases twice
36942 \x1f
36943 File: gcc.info,  Node: Static Definitions,  Next: Name lookup,  Up: C++ Misunderstandings
36945 10.8.1 Declare _and_ Define Static Members
36946 ------------------------------------------
36948 When a class has static data members, it is not enough to _declare_ the
36949 static member; you must also _define_ it.  For example:
36951      class Foo
36952      {
36953        ...
36954        void method();
36955        static int bar;
36956      };
36958  This declaration only establishes that the class `Foo' has an `int'
36959 named `Foo::bar', and a member function named `Foo::method'.  But you
36960 still need to define _both_ `method' and `bar' elsewhere.  According to
36961 the ISO standard, you must supply an initializer in one (and only one)
36962 source file, such as:
36964      int Foo::bar = 0;
36966  Other C++ compilers may not correctly implement the standard behavior.
36967 As a result, when you switch to `g++' from one of these compilers, you
36968 may discover that a program that appeared to work correctly in fact
36969 does not conform to the standard: `g++' reports as undefined symbols
36970 any static data members that lack definitions.
36972 \x1f
36973 File: gcc.info,  Node: Name lookup,  Next: Temporaries,  Prev: Static Definitions,  Up: C++ Misunderstandings
36975 10.8.2 Name lookup, templates, and accessing members of base classes
36976 --------------------------------------------------------------------
36978 The C++ standard prescribes that all names that are not dependent on
36979 template parameters are bound to their present definitions when parsing
36980 a template function or class.(1)  Only names that are dependent are
36981 looked up at the point of instantiation.  For example, consider
36983        void foo(double);
36985        struct A {
36986          template <typename T>
36987          void f () {
36988            foo (1);        // 1
36989            int i = N;      // 2
36990            T t;
36991            t.bar();        // 3
36992            foo (t);        // 4
36993          }
36995          static const int N;
36996        };
36998  Here, the names `foo' and `N' appear in a context that does not depend
36999 on the type of `T'.  The compiler will thus require that they are
37000 defined in the context of use in the template, not only before the
37001 point of instantiation, and will here use `::foo(double)' and `A::N',
37002 respectively.  In particular, it will convert the integer value to a
37003 `double' when passing it to `::foo(double)'.
37005  Conversely, `bar' and the call to `foo' in the fourth marked line are
37006 used in contexts that do depend on the type of `T', so they are only
37007 looked up at the point of instantiation, and you can provide
37008 declarations for them after declaring the template, but before
37009 instantiating it.  In particular, if you instantiate `A::f<int>', the
37010 last line will call an overloaded `::foo(int)' if one was provided,
37011 even if after the declaration of `struct A'.
37013  This distinction between lookup of dependent and non-dependent names is
37014 called two-stage (or dependent) name lookup.  G++ implements it since
37015 version 3.4.
37017  Two-stage name lookup sometimes leads to situations with behavior
37018 different from non-template codes.  The most common is probably this:
37020        template <typename T> struct Base {
37021          int i;
37022        };
37024        template <typename T> struct Derived : public Base<T> {
37025          int get_i() { return i; }
37026        };
37028  In `get_i()', `i' is not used in a dependent context, so the compiler
37029 will look for a name declared at the enclosing namespace scope (which
37030 is the global scope here).  It will not look into the base class, since
37031 that is dependent and you may declare specializations of `Base' even
37032 after declaring `Derived', so the compiler can't really know what `i'
37033 would refer to.  If there is no global variable `i', then you will get
37034 an error message.
37036  In order to make it clear that you want the member of the base class,
37037 you need to defer lookup until instantiation time, at which the base
37038 class is known.  For this, you need to access `i' in a dependent
37039 context, by either using `this->i' (remember that `this' is of type
37040 `Derived<T>*', so is obviously dependent), or using `Base<T>::i'.
37041 Alternatively, `Base<T>::i' might be brought into scope by a
37042 `using'-declaration.
37044  Another, similar example involves calling member functions of a base
37045 class:
37047        template <typename T> struct Base {
37048            int f();
37049        };
37051        template <typename T> struct Derived : Base<T> {
37052            int g() { return f(); };
37053        };
37055  Again, the call to `f()' is not dependent on template arguments (there
37056 are no arguments that depend on the type `T', and it is also not
37057 otherwise specified that the call should be in a dependent context).
37058 Thus a global declaration of such a function must be available, since
37059 the one in the base class is not visible until instantiation time.  The
37060 compiler will consequently produce the following error message:
37062        x.cc: In member function `int Derived<T>::g()':
37063        x.cc:6: error: there are no arguments to `f' that depend on a template
37064           parameter, so a declaration of `f' must be available
37065        x.cc:6: error: (if you use `-fpermissive', G++ will accept your code, but
37066           allowing the use of an undeclared name is deprecated)
37068  To make the code valid either use `this->f()', or `Base<T>::f()'.
37069 Using the `-fpermissive' flag will also let the compiler accept the
37070 code, by marking all function calls for which no declaration is visible
37071 at the time of definition of the template for later lookup at
37072 instantiation time, as if it were a dependent call.  We do not
37073 recommend using `-fpermissive' to work around invalid code, and it will
37074 also only catch cases where functions in base classes are called, not
37075 where variables in base classes are used (as in the example above).
37077  Note that some compilers (including G++ versions prior to 3.4) get
37078 these examples wrong and accept above code without an error.  Those
37079 compilers do not implement two-stage name lookup correctly.
37081  ---------- Footnotes ----------
37083  (1) The C++ standard just uses the term "dependent" for names that
37084 depend on the type or value of template parameters.  This shorter term
37085 will also be used in the rest of this section.
37087 \x1f
37088 File: gcc.info,  Node: Temporaries,  Next: Copy Assignment,  Prev: Name lookup,  Up: C++ Misunderstandings
37090 10.8.3 Temporaries May Vanish Before You Expect
37091 -----------------------------------------------
37093 It is dangerous to use pointers or references to _portions_ of a
37094 temporary object.  The compiler may very well delete the object before
37095 you expect it to, leaving a pointer to garbage.  The most common place
37096 where this problem crops up is in classes like string classes,
37097 especially ones that define a conversion function to type `char *' or
37098 `const char *'--which is one reason why the standard `string' class
37099 requires you to call the `c_str' member function.  However, any class
37100 that returns a pointer to some internal structure is potentially
37101 subject to this problem.
37103  For example, a program may use a function `strfunc' that returns
37104 `string' objects, and another function `charfunc' that operates on
37105 pointers to `char':
37107      string strfunc ();
37108      void charfunc (const char *);
37110      void
37111      f ()
37112      {
37113        const char *p = strfunc().c_str();
37114        ...
37115        charfunc (p);
37116        ...
37117        charfunc (p);
37118      }
37120 In this situation, it may seem reasonable to save a pointer to the C
37121 string returned by the `c_str' member function and use that rather than
37122 call `c_str' repeatedly.  However, the temporary string created by the
37123 call to `strfunc' is destroyed after `p' is initialized, at which point
37124 `p' is left pointing to freed memory.
37126  Code like this may run successfully under some other compilers,
37127 particularly obsolete cfront-based compilers that delete temporaries
37128 along with normal local variables.  However, the GNU C++ behavior is
37129 standard-conforming, so if your program depends on late destruction of
37130 temporaries it is not portable.
37132  The safe way to write such code is to give the temporary a name, which
37133 forces it to remain until the end of the scope of the name.  For
37134 example:
37136      const string& tmp = strfunc ();
37137      charfunc (tmp.c_str ());
37139 \x1f
37140 File: gcc.info,  Node: Copy Assignment,  Prev: Temporaries,  Up: C++ Misunderstandings
37142 10.8.4 Implicit Copy-Assignment for Virtual Bases
37143 -------------------------------------------------
37145 When a base class is virtual, only one subobject of the base class
37146 belongs to each full object.  Also, the constructors and destructors are
37147 invoked only once, and called from the most-derived class.  However,
37148 such objects behave unspecified when being assigned.  For example:
37150      struct Base{
37151        char *name;
37152        Base(char *n) : name(strdup(n)){}
37153        Base& operator= (const Base& other){
37154         free (name);
37155         name = strdup (other.name);
37156        }
37157      };
37159      struct A:virtual Base{
37160        int val;
37161        A():Base("A"){}
37162      };
37164      struct B:virtual Base{
37165        int bval;
37166        B():Base("B"){}
37167      };
37169      struct Derived:public A, public B{
37170        Derived():Base("Derived"){}
37171      };
37173      void func(Derived &d1, Derived &d2)
37174      {
37175        d1 = d2;
37176      }
37178  The C++ standard specifies that `Base::Base' is only called once when
37179 constructing or copy-constructing a Derived object.  It is unspecified
37180 whether `Base::operator=' is called more than once when the implicit
37181 copy-assignment for Derived objects is invoked (as it is inside `func'
37182 in the example).
37184  G++ implements the "intuitive" algorithm for copy-assignment: assign
37185 all direct bases, then assign all members.  In that algorithm, the
37186 virtual base subobject can be encountered more than once.  In the
37187 example, copying proceeds in the following order: `val', `name' (via
37188 `strdup'), `bval', and `name' again.
37190  If application code relies on copy-assignment, a user-defined
37191 copy-assignment operator removes any uncertainties.  With such an
37192 operator, the application can define whether and how the virtual base
37193 subobject is assigned.
37195 \x1f
37196 File: gcc.info,  Node: Protoize Caveats,  Next: Non-bugs,  Prev: C++ Misunderstandings,  Up: Trouble
37198 10.9 Caveats of using `protoize'
37199 ================================
37201 The conversion programs `protoize' and `unprotoize' can sometimes
37202 change a source file in a way that won't work unless you rearrange it.
37204    * `protoize' can insert references to a type name or type tag before
37205      the definition, or in a file where they are not defined.
37207      If this happens, compiler error messages should show you where the
37208      new references are, so fixing the file by hand is straightforward.
37210    * There are some C constructs which `protoize' cannot figure out.
37211      For example, it can't determine argument types for declaring a
37212      pointer-to-function variable; this you must do by hand.  `protoize'
37213      inserts a comment containing `???' each time it finds such a
37214      variable; so you can find all such variables by searching for this
37215      string.  ISO C does not require declaring the argument types of
37216      pointer-to-function types.
37218    * Using `unprotoize' can easily introduce bugs.  If the program
37219      relied on prototypes to bring about conversion of arguments, these
37220      conversions will not take place in the program without prototypes.
37221      One case in which you can be sure `unprotoize' is safe is when you
37222      are removing prototypes that were made with `protoize'; if the
37223      program worked before without any prototypes, it will work again
37224      without them.
37226      You can find all the places where this problem might occur by
37227      compiling the program with the `-Wtraditional-conversion' option.
37228      It prints a warning whenever an argument is converted.
37230    * Both conversion programs can be confused if there are macro calls
37231      in and around the text to be converted.  In other words, the
37232      standard syntax for a declaration or definition must not result
37233      from expanding a macro.  This problem is inherent in the design of
37234      C and cannot be fixed.  If only a few functions have confusing
37235      macro calls, you can easily convert them manually.
37237    * `protoize' cannot get the argument types for a function whose
37238      definition was not actually compiled due to preprocessing
37239      conditionals.  When this happens, `protoize' changes nothing in
37240      regard to such a function.  `protoize' tries to detect such
37241      instances and warn about them.
37243      You can generally work around this problem by using `protoize' step
37244      by step, each time specifying a different set of `-D' options for
37245      compilation, until all of the functions have been converted.
37246      There is no automatic way to verify that you have got them all,
37247      however.
37249    * Confusion may result if there is an occasion to convert a function
37250      declaration or definition in a region of source code where there
37251      is more than one formal parameter list present.  Thus, attempts to
37252      convert code containing multiple (conditionally compiled) versions
37253      of a single function header (in the same vicinity) may not produce
37254      the desired (or expected) results.
37256      If you plan on converting source files which contain such code, it
37257      is recommended that you first make sure that each conditionally
37258      compiled region of source code which contains an alternative
37259      function header also contains at least one additional follower
37260      token (past the final right parenthesis of the function header).
37261      This should circumvent the problem.
37263    * `unprotoize' can become confused when trying to convert a function
37264      definition or declaration which contains a declaration for a
37265      pointer-to-function formal argument which has the same name as the
37266      function being defined or declared.  We recommend you avoid such
37267      choices of formal parameter names.
37269    * You might also want to correct some of the indentation by hand and
37270      break long lines.  (The conversion programs don't write lines
37271      longer than eighty characters in any case.)
37273 \x1f
37274 File: gcc.info,  Node: Non-bugs,  Next: Warnings and Errors,  Prev: Protoize Caveats,  Up: Trouble
37276 10.10 Certain Changes We Don't Want to Make
37277 ===========================================
37279 This section lists changes that people frequently request, but which we
37280 do not make because we think GCC is better without them.
37282    * Checking the number and type of arguments to a function which has
37283      an old-fashioned definition and no prototype.
37285      Such a feature would work only occasionally--only for calls that
37286      appear in the same file as the called function, following the
37287      definition.  The only way to check all calls reliably is to add a
37288      prototype for the function.  But adding a prototype eliminates the
37289      motivation for this feature.  So the feature is not worthwhile.
37291    * Warning about using an expression whose type is signed as a shift
37292      count.
37294      Shift count operands are probably signed more often than unsigned.
37295      Warning about this would cause far more annoyance than good.
37297    * Warning about assigning a signed value to an unsigned variable.
37299      Such assignments must be very common; warning about them would
37300      cause more annoyance than good.
37302    * Warning when a non-void function value is ignored.
37304      C contains many standard functions that return a value that most
37305      programs choose to ignore.  One obvious example is `printf'.
37306      Warning about this practice only leads the defensive programmer to
37307      clutter programs with dozens of casts to `void'.  Such casts are
37308      required so frequently that they become visual noise.  Writing
37309      those casts becomes so automatic that they no longer convey useful
37310      information about the intentions of the programmer.  For functions
37311      where the return value should never be ignored, use the
37312      `warn_unused_result' function attribute (*note Function
37313      Attributes::).
37315    * Making `-fshort-enums' the default.
37317      This would cause storage layout to be incompatible with most other
37318      C compilers.  And it doesn't seem very important, given that you
37319      can get the same result in other ways.  The case where it matters
37320      most is when the enumeration-valued object is inside a structure,
37321      and in that case you can specify a field width explicitly.
37323    * Making bit-fields unsigned by default on particular machines where
37324      "the ABI standard" says to do so.
37326      The ISO C standard leaves it up to the implementation whether a
37327      bit-field declared plain `int' is signed or not.  This in effect
37328      creates two alternative dialects of C.
37330      The GNU C compiler supports both dialects; you can specify the
37331      signed dialect with `-fsigned-bitfields' and the unsigned dialect
37332      with `-funsigned-bitfields'.  However, this leaves open the
37333      question of which dialect to use by default.
37335      Currently, the preferred dialect makes plain bit-fields signed,
37336      because this is simplest.  Since `int' is the same as `signed int'
37337      in every other context, it is cleanest for them to be the same in
37338      bit-fields as well.
37340      Some computer manufacturers have published Application Binary
37341      Interface standards which specify that plain bit-fields should be
37342      unsigned.  It is a mistake, however, to say anything about this
37343      issue in an ABI.  This is because the handling of plain bit-fields
37344      distinguishes two dialects of C.  Both dialects are meaningful on
37345      every type of machine.  Whether a particular object file was
37346      compiled using signed bit-fields or unsigned is of no concern to
37347      other object files, even if they access the same bit-fields in the
37348      same data structures.
37350      A given program is written in one or the other of these two
37351      dialects.  The program stands a chance to work on most any machine
37352      if it is compiled with the proper dialect.  It is unlikely to work
37353      at all if compiled with the wrong dialect.
37355      Many users appreciate the GNU C compiler because it provides an
37356      environment that is uniform across machines.  These users would be
37357      inconvenienced if the compiler treated plain bit-fields
37358      differently on certain machines.
37360      Occasionally users write programs intended only for a particular
37361      machine type.  On these occasions, the users would benefit if the
37362      GNU C compiler were to support by default the same dialect as the
37363      other compilers on that machine.  But such applications are rare.
37364      And users writing a program to run on more than one type of
37365      machine cannot possibly benefit from this kind of compatibility.
37367      This is why GCC does and will treat plain bit-fields in the same
37368      fashion on all types of machines (by default).
37370      There are some arguments for making bit-fields unsigned by default
37371      on all machines.  If, for example, this becomes a universal de
37372      facto standard, it would make sense for GCC to go along with it.
37373      This is something to be considered in the future.
37375      (Of course, users strongly concerned about portability should
37376      indicate explicitly in each bit-field whether it is signed or not.
37377      In this way, they write programs which have the same meaning in
37378      both C dialects.)
37380    * Undefining `__STDC__' when `-ansi' is not used.
37382      Currently, GCC defines `__STDC__' unconditionally.  This provides
37383      good results in practice.
37385      Programmers normally use conditionals on `__STDC__' to ask whether
37386      it is safe to use certain features of ISO C, such as function
37387      prototypes or ISO token concatenation.  Since plain `gcc' supports
37388      all the features of ISO C, the correct answer to these questions is
37389      "yes".
37391      Some users try to use `__STDC__' to check for the availability of
37392      certain library facilities.  This is actually incorrect usage in
37393      an ISO C program, because the ISO C standard says that a conforming
37394      freestanding implementation should define `__STDC__' even though it
37395      does not have the library facilities.  `gcc -ansi -pedantic' is a
37396      conforming freestanding implementation, and it is therefore
37397      required to define `__STDC__', even though it does not come with
37398      an ISO C library.
37400      Sometimes people say that defining `__STDC__' in a compiler that
37401      does not completely conform to the ISO C standard somehow violates
37402      the standard.  This is illogical.  The standard is a standard for
37403      compilers that claim to support ISO C, such as `gcc -ansi'--not
37404      for other compilers such as plain `gcc'.  Whatever the ISO C
37405      standard says is relevant to the design of plain `gcc' without
37406      `-ansi' only for pragmatic reasons, not as a requirement.
37408      GCC normally defines `__STDC__' to be 1, and in addition defines
37409      `__STRICT_ANSI__' if you specify the `-ansi' option, or a `-std'
37410      option for strict conformance to some version of ISO C.  On some
37411      hosts, system include files use a different convention, where
37412      `__STDC__' is normally 0, but is 1 if the user specifies strict
37413      conformance to the C Standard.  GCC follows the host convention
37414      when processing system include files, but when processing user
37415      files it follows the usual GNU C convention.
37417    * Undefining `__STDC__' in C++.
37419      Programs written to compile with C++-to-C translators get the
37420      value of `__STDC__' that goes with the C compiler that is
37421      subsequently used.  These programs must test `__STDC__' to
37422      determine what kind of C preprocessor that compiler uses: whether
37423      they should concatenate tokens in the ISO C fashion or in the
37424      traditional fashion.
37426      These programs work properly with GNU C++ if `__STDC__' is defined.
37427      They would not work otherwise.
37429      In addition, many header files are written to provide prototypes
37430      in ISO C but not in traditional C.  Many of these header files can
37431      work without change in C++ provided `__STDC__' is defined.  If
37432      `__STDC__' is not defined, they will all fail, and will all need
37433      to be changed to test explicitly for C++ as well.
37435    * Deleting "empty" loops.
37437      Historically, GCC has not deleted "empty" loops under the
37438      assumption that the most likely reason you would put one in a
37439      program is to have a delay, so deleting them will not make real
37440      programs run any faster.
37442      However, the rationale here is that optimization of a nonempty loop
37443      cannot produce an empty one. This held for carefully written C
37444      compiled with less powerful optimizers but is not always the case
37445      for carefully written C++ or with more powerful optimizers.  Thus
37446      GCC will remove operations from loops whenever it can determine
37447      those operations are not externally visible (apart from the time
37448      taken to execute them, of course).  In case the loop can be proved
37449      to be finite, GCC will also remove the loop itself.
37451      Be aware of this when performing timing tests, for instance the
37452      following loop can be completely removed, provided
37453      `some_expression' can provably not change any global state.
37455           {
37456              int sum = 0;
37457              int ix;
37459              for (ix = 0; ix != 10000; ix++)
37460                 sum += some_expression;
37461           }
37463      Even though `sum' is accumulated in the loop, no use is made of
37464      that summation, so the accumulation can be removed.
37466    * Making side effects happen in the same order as in some other
37467      compiler.
37469      It is never safe to depend on the order of evaluation of side
37470      effects.  For example, a function call like this may very well
37471      behave differently from one compiler to another:
37473           void func (int, int);
37475           int i = 2;
37476           func (i++, i++);
37478      There is no guarantee (in either the C or the C++ standard language
37479      definitions) that the increments will be evaluated in any
37480      particular order.  Either increment might happen first.  `func'
37481      might get the arguments `2, 3', or it might get `3, 2', or even
37482      `2, 2'.
37484    * Making certain warnings into errors by default.
37486      Some ISO C testsuites report failure when the compiler does not
37487      produce an error message for a certain program.
37489      ISO C requires a "diagnostic" message for certain kinds of invalid
37490      programs, but a warning is defined by GCC to count as a
37491      diagnostic.  If GCC produces a warning but not an error, that is
37492      correct ISO C support.  If testsuites call this "failure", they
37493      should be run with the GCC option `-pedantic-errors', which will
37494      turn these warnings into errors.
37497 \x1f
37498 File: gcc.info,  Node: Warnings and Errors,  Prev: Non-bugs,  Up: Trouble
37500 10.11 Warning Messages and Error Messages
37501 =========================================
37503 The GNU compiler can produce two kinds of diagnostics: errors and
37504 warnings.  Each kind has a different purpose:
37506      "Errors" report problems that make it impossible to compile your
37507      program.  GCC reports errors with the source file name and line
37508      number where the problem is apparent.
37510      "Warnings" report other unusual conditions in your code that _may_
37511      indicate a problem, although compilation can (and does) proceed.
37512      Warning messages also report the source file name and line number,
37513      but include the text `warning:' to distinguish them from error
37514      messages.
37516  Warnings may indicate danger points where you should check to make sure
37517 that your program really does what you intend; or the use of obsolete
37518 features; or the use of nonstandard features of GNU C or C++.  Many
37519 warnings are issued only if you ask for them, with one of the `-W'
37520 options (for instance, `-Wall' requests a variety of useful warnings).
37522  GCC always tries to compile your program if possible; it never
37523 gratuitously rejects a program whose meaning is clear merely because
37524 (for instance) it fails to conform to a standard.  In some cases,
37525 however, the C and C++ standards specify that certain extensions are
37526 forbidden, and a diagnostic _must_ be issued by a conforming compiler.
37527 The `-pedantic' option tells GCC to issue warnings in such cases;
37528 `-pedantic-errors' says to make them errors instead.  This does not
37529 mean that _all_ non-ISO constructs get warnings or errors.
37531  *Note Options to Request or Suppress Warnings: Warning Options, for
37532 more detail on these and related command-line options.
37534 \x1f
37535 File: gcc.info,  Node: Bugs,  Next: Service,  Prev: Trouble,  Up: Top
37537 11 Reporting Bugs
37538 *****************
37540 Your bug reports play an essential role in making GCC reliable.
37542  When you encounter a problem, the first thing to do is to see if it is
37543 already known.  *Note Trouble::.  If it isn't known, then you should
37544 report the problem.
37546 * Menu:
37548 * Criteria:  Bug Criteria.   Have you really found a bug?
37549 * Reporting: Bug Reporting.  How to report a bug effectively.
37550 * Known: Trouble.            Known problems.
37551 * Help: Service.             Where to ask for help.
37553 \x1f
37554 File: gcc.info,  Node: Bug Criteria,  Next: Bug Reporting,  Up: Bugs
37556 11.1 Have You Found a Bug?
37557 ==========================
37559 If you are not sure whether you have found a bug, here are some
37560 guidelines:
37562    * If the compiler gets a fatal signal, for any input whatever, that
37563      is a compiler bug.  Reliable compilers never crash.
37565    * If the compiler produces invalid assembly code, for any input
37566      whatever (except an `asm' statement), that is a compiler bug,
37567      unless the compiler reports errors (not just warnings) which would
37568      ordinarily prevent the assembler from being run.
37570    * If the compiler produces valid assembly code that does not
37571      correctly execute the input source code, that is a compiler bug.
37573      However, you must double-check to make sure, because you may have a
37574      program whose behavior is undefined, which happened by chance to
37575      give the desired results with another C or C++ compiler.
37577      For example, in many nonoptimizing compilers, you can write `x;'
37578      at the end of a function instead of `return x;', with the same
37579      results.  But the value of the function is undefined if `return'
37580      is omitted; it is not a bug when GCC produces different results.
37582      Problems often result from expressions with two increment
37583      operators, as in `f (*p++, *p++)'.  Your previous compiler might
37584      have interpreted that expression the way you intended; GCC might
37585      interpret it another way.  Neither compiler is wrong.  The bug is
37586      in your code.
37588      After you have localized the error to a single source line, it
37589      should be easy to check for these things.  If your program is
37590      correct and well defined, you have found a compiler bug.
37592    * If the compiler produces an error message for valid input, that is
37593      a compiler bug.
37595    * If the compiler does not produce an error message for invalid
37596      input, that is a compiler bug.  However, you should note that your
37597      idea of "invalid input" might be someone else's idea of "an
37598      extension" or "support for traditional practice".
37600    * If you are an experienced user of one of the languages GCC
37601      supports, your suggestions for improvement of GCC are welcome in
37602      any case.
37604 \x1f
37605 File: gcc.info,  Node: Bug Reporting,  Prev: Bug Criteria,  Up: Bugs
37607 11.2 How and where to Report Bugs
37608 =================================
37610 Bugs should be reported to the bug database at
37611 `http://www.tdragon.net/recentgcc/bugs.php'.
37613 \x1f
37614 File: gcc.info,  Node: Service,  Next: Contributing,  Prev: Bugs,  Up: Top
37616 12 How To Get Help with GCC
37617 ***************************
37619 If you need help installing, using or changing GCC, there are two ways
37620 to find it:
37622    * Send a message to a suitable network mailing list.  First try
37623      <gcc-help@gcc.gnu.org> (for help installing or using GCC), and if
37624      that brings no response, try <gcc@gcc.gnu.org>.  For help changing
37625      GCC, ask <gcc@gcc.gnu.org>.  If you think you have found a bug in
37626      GCC, please report it following the instructions at *note Bug
37627      Reporting::.
37629    * Look in the service directory for someone who might help you for a
37630      fee.  The service directory is found at
37631      `http://www.gnu.org/prep/service.html'.
37633  For further information, see `http://gcc.gnu.org/faq.html#support'.
37635 \x1f
37636 File: gcc.info,  Node: Contributing,  Next: Funding,  Prev: Service,  Up: Top
37638 13 Contributing to GCC Development
37639 **********************************
37641 If you would like to help pretest GCC releases to assure they work well,
37642 current development sources are available by SVN (see
37643 `http://gcc.gnu.org/svn.html').  Source and binary snapshots are also
37644 available for FTP; see `http://gcc.gnu.org/snapshots.html'.
37646  If you would like to work on improvements to GCC, please read the
37647 advice at these URLs:
37649      `http://gcc.gnu.org/contribute.html'
37650      `http://gcc.gnu.org/contributewhy.html'
37652 for information on how to make useful contributions and avoid
37653 duplication of effort.  Suggested projects are listed at
37654 `http://gcc.gnu.org/projects/'.
37656 \x1f
37657 File: gcc.info,  Node: Funding,  Next: GNU Project,  Prev: Contributing,  Up: Top
37659 Funding Free Software
37660 *********************
37662 If you want to have more free software a few years from now, it makes
37663 sense for you to help encourage people to contribute funds for its
37664 development.  The most effective approach known is to encourage
37665 commercial redistributors to donate.
37667  Users of free software systems can boost the pace of development by
37668 encouraging for-a-fee distributors to donate part of their selling price
37669 to free software developers--the Free Software Foundation, and others.
37671  The way to convince distributors to do this is to demand it and expect
37672 it from them.  So when you compare distributors, judge them partly by
37673 how much they give to free software development.  Show distributors
37674 they must compete to be the one who gives the most.
37676  To make this approach work, you must insist on numbers that you can
37677 compare, such as, "We will donate ten dollars to the Frobnitz project
37678 for each disk sold."  Don't be satisfied with a vague promise, such as
37679 "A portion of the profits are donated," since it doesn't give a basis
37680 for comparison.
37682  Even a precise fraction "of the profits from this disk" is not very
37683 meaningful, since creative accounting and unrelated business decisions
37684 can greatly alter what fraction of the sales price counts as profit.
37685 If the price you pay is $50, ten percent of the profit is probably less
37686 than a dollar; it might be a few cents, or nothing at all.
37688  Some redistributors do development work themselves.  This is useful
37689 too; but to keep everyone honest, you need to inquire how much they do,
37690 and what kind.  Some kinds of development make much more long-term
37691 difference than others.  For example, maintaining a separate version of
37692 a program contributes very little; maintaining the standard version of a
37693 program for the whole community contributes much.  Easy new ports
37694 contribute little, since someone else would surely do them; difficult
37695 ports such as adding a new CPU to the GNU Compiler Collection
37696 contribute more; major new features or packages contribute the most.
37698  By establishing the idea that supporting further development is "the
37699 proper thing to do" when distributing free software for a fee, we can
37700 assure a steady flow of resources into making more free software.
37702      Copyright (C) 1994 Free Software Foundation, Inc.
37703      Verbatim copying and redistribution of this section is permitted
37704      without royalty; alteration is not permitted.
37706 \x1f
37707 File: gcc.info,  Node: GNU Project,  Next: Copying,  Prev: Funding,  Up: Top
37709 The GNU Project and GNU/Linux
37710 *****************************
37712 The GNU Project was launched in 1984 to develop a complete Unix-like
37713 operating system which is free software: the GNU system.  (GNU is a
37714 recursive acronym for "GNU's Not Unix"; it is pronounced "guh-NEW".)
37715 Variants of the GNU operating system, which use the kernel Linux, are
37716 now widely used; though these systems are often referred to as "Linux",
37717 they are more accurately called GNU/Linux systems.
37719  For more information, see:
37720      `http://www.gnu.org/'
37721      `http://www.gnu.org/gnu/linux-and-gnu.html'
37723 \x1f
37724 File: gcc.info,  Node: Copying,  Next: GNU Free Documentation License,  Prev: GNU Project,  Up: Top
37726 GNU General Public License
37727 **************************
37729                         Version 3, 29 June 2007
37731      Copyright (C) 2007 Free Software Foundation, Inc. `http://fsf.org/'
37733      Everyone is permitted to copy and distribute verbatim copies of this
37734      license document, but changing it is not allowed.
37736 Preamble
37737 ========
37739 The GNU General Public License is a free, copyleft license for software
37740 and other kinds of works.
37742  The licenses for most software and other practical works are designed
37743 to take away your freedom to share and change the works.  By contrast,
37744 the GNU General Public License is intended to guarantee your freedom to
37745 share and change all versions of a program-to make sure it remains free
37746 software for all its users.  We, the Free Software Foundation, use the
37747 GNU General Public License for most of our software; it applies also to
37748 any other work released this way by its authors.  You can apply it to
37749 your programs, too.
37751  When we speak of free software, we are referring to freedom, not
37752 price.  Our General Public Licenses are designed to make sure that you
37753 have the freedom to distribute copies of free software (and charge for
37754 them if you wish), that you receive source code or can get it if you
37755 want it, that you can change the software or use pieces of it in new
37756 free programs, and that you know you can do these things.
37758  To protect your rights, we need to prevent others from denying you
37759 these rights or asking you to surrender the rights.  Therefore, you
37760 have certain responsibilities if you distribute copies of the software,
37761 or if you modify it: responsibilities to respect the freedom of others.
37763  For example, if you distribute copies of such a program, whether
37764 gratis or for a fee, you must pass on to the recipients the same
37765 freedoms that you received.  You must make sure that they, too, receive
37766 or can get the source code.  And you must show them these terms so they
37767 know their rights.
37769  Developers that use the GNU GPL protect your rights with two steps:
37770 (1) assert copyright on the software, and (2) offer you this License
37771 giving you legal permission to copy, distribute and/or modify it.
37773  For the developers' and authors' protection, the GPL clearly explains
37774 that there is no warranty for this free software.  For both users' and
37775 authors' sake, the GPL requires that modified versions be marked as
37776 changed, so that their problems will not be attributed erroneously to
37777 authors of previous versions.
37779  Some devices are designed to deny users access to install or run
37780 modified versions of the software inside them, although the
37781 manufacturer can do so.  This is fundamentally incompatible with the
37782 aim of protecting users' freedom to change the software.  The
37783 systematic pattern of such abuse occurs in the area of products for
37784 individuals to use, which is precisely where it is most unacceptable.
37785 Therefore, we have designed this version of the GPL to prohibit the
37786 practice for those products.  If such problems arise substantially in
37787 other domains, we stand ready to extend this provision to those domains
37788 in future versions of the GPL, as needed to protect the freedom of
37789 users.
37791  Finally, every program is threatened constantly by software patents.
37792 States should not allow patents to restrict development and use of
37793 software on general-purpose computers, but in those that do, we wish to
37794 avoid the special danger that patents applied to a free program could
37795 make it effectively proprietary.  To prevent this, the GPL assures that
37796 patents cannot be used to render the program non-free.
37798  The precise terms and conditions for copying, distribution and
37799 modification follow.
37801 TERMS AND CONDITIONS
37802 ====================
37804   0. Definitions.
37806      "This License" refers to version 3 of the GNU General Public
37807      License.
37809      "Copyright" also means copyright-like laws that apply to other
37810      kinds of works, such as semiconductor masks.
37812      "The Program" refers to any copyrightable work licensed under this
37813      License.  Each licensee is addressed as "you".  "Licensees" and
37814      "recipients" may be individuals or organizations.
37816      To "modify" a work means to copy from or adapt all or part of the
37817      work in a fashion requiring copyright permission, other than the
37818      making of an exact copy.  The resulting work is called a "modified
37819      version" of the earlier work or a work "based on" the earlier work.
37821      A "covered work" means either the unmodified Program or a work
37822      based on the Program.
37824      To "propagate" a work means to do anything with it that, without
37825      permission, would make you directly or secondarily liable for
37826      infringement under applicable copyright law, except executing it
37827      on a computer or modifying a private copy.  Propagation includes
37828      copying, distribution (with or without modification), making
37829      available to the public, and in some countries other activities as
37830      well.
37832      To "convey" a work means any kind of propagation that enables other
37833      parties to make or receive copies.  Mere interaction with a user
37834      through a computer network, with no transfer of a copy, is not
37835      conveying.
37837      An interactive user interface displays "Appropriate Legal Notices"
37838      to the extent that it includes a convenient and prominently visible
37839      feature that (1) displays an appropriate copyright notice, and (2)
37840      tells the user that there is no warranty for the work (except to
37841      the extent that warranties are provided), that licensees may
37842      convey the work under this License, and how to view a copy of this
37843      License.  If the interface presents a list of user commands or
37844      options, such as a menu, a prominent item in the list meets this
37845      criterion.
37847   1. Source Code.
37849      The "source code" for a work means the preferred form of the work
37850      for making modifications to it.  "Object code" means any
37851      non-source form of a work.
37853      A "Standard Interface" means an interface that either is an
37854      official standard defined by a recognized standards body, or, in
37855      the case of interfaces specified for a particular programming
37856      language, one that is widely used among developers working in that
37857      language.
37859      The "System Libraries" of an executable work include anything,
37860      other than the work as a whole, that (a) is included in the normal
37861      form of packaging a Major Component, but which is not part of that
37862      Major Component, and (b) serves only to enable use of the work
37863      with that Major Component, or to implement a Standard Interface
37864      for which an implementation is available to the public in source
37865      code form.  A "Major Component", in this context, means a major
37866      essential component (kernel, window system, and so on) of the
37867      specific operating system (if any) on which the executable work
37868      runs, or a compiler used to produce the work, or an object code
37869      interpreter used to run it.
37871      The "Corresponding Source" for a work in object code form means all
37872      the source code needed to generate, install, and (for an executable
37873      work) run the object code and to modify the work, including
37874      scripts to control those activities.  However, it does not include
37875      the work's System Libraries, or general-purpose tools or generally
37876      available free programs which are used unmodified in performing
37877      those activities but which are not part of the work.  For example,
37878      Corresponding Source includes interface definition files
37879      associated with source files for the work, and the source code for
37880      shared libraries and dynamically linked subprograms that the work
37881      is specifically designed to require, such as by intimate data
37882      communication or control flow between those subprograms and other
37883      parts of the work.
37885      The Corresponding Source need not include anything that users can
37886      regenerate automatically from other parts of the Corresponding
37887      Source.
37889      The Corresponding Source for a work in source code form is that
37890      same work.
37892   2. Basic Permissions.
37894      All rights granted under this License are granted for the term of
37895      copyright on the Program, and are irrevocable provided the stated
37896      conditions are met.  This License explicitly affirms your unlimited
37897      permission to run the unmodified Program.  The output from running
37898      a covered work is covered by this License only if the output,
37899      given its content, constitutes a covered work.  This License
37900      acknowledges your rights of fair use or other equivalent, as
37901      provided by copyright law.
37903      You may make, run and propagate covered works that you do not
37904      convey, without conditions so long as your license otherwise
37905      remains in force.  You may convey covered works to others for the
37906      sole purpose of having them make modifications exclusively for
37907      you, or provide you with facilities for running those works,
37908      provided that you comply with the terms of this License in
37909      conveying all material for which you do not control copyright.
37910      Those thus making or running the covered works for you must do so
37911      exclusively on your behalf, under your direction and control, on
37912      terms that prohibit them from making any copies of your
37913      copyrighted material outside their relationship with you.
37915      Conveying under any other circumstances is permitted solely under
37916      the conditions stated below.  Sublicensing is not allowed; section
37917      10 makes it unnecessary.
37919   3. Protecting Users' Legal Rights From Anti-Circumvention Law.
37921      No covered work shall be deemed part of an effective technological
37922      measure under any applicable law fulfilling obligations under
37923      article 11 of the WIPO copyright treaty adopted on 20 December
37924      1996, or similar laws prohibiting or restricting circumvention of
37925      such measures.
37927      When you convey a covered work, you waive any legal power to forbid
37928      circumvention of technological measures to the extent such
37929      circumvention is effected by exercising rights under this License
37930      with respect to the covered work, and you disclaim any intention
37931      to limit operation or modification of the work as a means of
37932      enforcing, against the work's users, your or third parties' legal
37933      rights to forbid circumvention of technological measures.
37935   4. Conveying Verbatim Copies.
37937      You may convey verbatim copies of the Program's source code as you
37938      receive it, in any medium, provided that you conspicuously and
37939      appropriately publish on each copy an appropriate copyright notice;
37940      keep intact all notices stating that this License and any
37941      non-permissive terms added in accord with section 7 apply to the
37942      code; keep intact all notices of the absence of any warranty; and
37943      give all recipients a copy of this License along with the Program.
37945      You may charge any price or no price for each copy that you convey,
37946      and you may offer support or warranty protection for a fee.
37948   5. Conveying Modified Source Versions.
37950      You may convey a work based on the Program, or the modifications to
37951      produce it from the Program, in the form of source code under the
37952      terms of section 4, provided that you also meet all of these
37953      conditions:
37955        a. The work must carry prominent notices stating that you
37956           modified it, and giving a relevant date.
37958        b. The work must carry prominent notices stating that it is
37959           released under this License and any conditions added under
37960           section 7.  This requirement modifies the requirement in
37961           section 4 to "keep intact all notices".
37963        c. You must license the entire work, as a whole, under this
37964           License to anyone who comes into possession of a copy.  This
37965           License will therefore apply, along with any applicable
37966           section 7 additional terms, to the whole of the work, and all
37967           its parts, regardless of how they are packaged.  This License
37968           gives no permission to license the work in any other way, but
37969           it does not invalidate such permission if you have separately
37970           received it.
37972        d. If the work has interactive user interfaces, each must display
37973           Appropriate Legal Notices; however, if the Program has
37974           interactive interfaces that do not display Appropriate Legal
37975           Notices, your work need not make them do so.
37977      A compilation of a covered work with other separate and independent
37978      works, which are not by their nature extensions of the covered
37979      work, and which are not combined with it such as to form a larger
37980      program, in or on a volume of a storage or distribution medium, is
37981      called an "aggregate" if the compilation and its resulting
37982      copyright are not used to limit the access or legal rights of the
37983      compilation's users beyond what the individual works permit.
37984      Inclusion of a covered work in an aggregate does not cause this
37985      License to apply to the other parts of the aggregate.
37987   6. Conveying Non-Source Forms.
37989      You may convey a covered work in object code form under the terms
37990      of sections 4 and 5, provided that you also convey the
37991      machine-readable Corresponding Source under the terms of this
37992      License, in one of these ways:
37994        a. Convey the object code in, or embodied in, a physical product
37995           (including a physical distribution medium), accompanied by the
37996           Corresponding Source fixed on a durable physical medium
37997           customarily used for software interchange.
37999        b. Convey the object code in, or embodied in, a physical product
38000           (including a physical distribution medium), accompanied by a
38001           written offer, valid for at least three years and valid for
38002           as long as you offer spare parts or customer support for that
38003           product model, to give anyone who possesses the object code
38004           either (1) a copy of the Corresponding Source for all the
38005           software in the product that is covered by this License, on a
38006           durable physical medium customarily used for software
38007           interchange, for a price no more than your reasonable cost of
38008           physically performing this conveying of source, or (2) access
38009           to copy the Corresponding Source from a network server at no
38010           charge.
38012        c. Convey individual copies of the object code with a copy of
38013           the written offer to provide the Corresponding Source.  This
38014           alternative is allowed only occasionally and noncommercially,
38015           and only if you received the object code with such an offer,
38016           in accord with subsection 6b.
38018        d. Convey the object code by offering access from a designated
38019           place (gratis or for a charge), and offer equivalent access
38020           to the Corresponding Source in the same way through the same
38021           place at no further charge.  You need not require recipients
38022           to copy the Corresponding Source along with the object code.
38023           If the place to copy the object code is a network server, the
38024           Corresponding Source may be on a different server (operated
38025           by you or a third party) that supports equivalent copying
38026           facilities, provided you maintain clear directions next to
38027           the object code saying where to find the Corresponding Source.
38028           Regardless of what server hosts the Corresponding Source, you
38029           remain obligated to ensure that it is available for as long
38030           as needed to satisfy these requirements.
38032        e. Convey the object code using peer-to-peer transmission,
38033           provided you inform other peers where the object code and
38034           Corresponding Source of the work are being offered to the
38035           general public at no charge under subsection 6d.
38038      A separable portion of the object code, whose source code is
38039      excluded from the Corresponding Source as a System Library, need
38040      not be included in conveying the object code work.
38042      A "User Product" is either (1) a "consumer product", which means
38043      any tangible personal property which is normally used for personal,
38044      family, or household purposes, or (2) anything designed or sold for
38045      incorporation into a dwelling.  In determining whether a product
38046      is a consumer product, doubtful cases shall be resolved in favor of
38047      coverage.  For a particular product received by a particular user,
38048      "normally used" refers to a typical or common use of that class of
38049      product, regardless of the status of the particular user or of the
38050      way in which the particular user actually uses, or expects or is
38051      expected to use, the product.  A product is a consumer product
38052      regardless of whether the product has substantial commercial,
38053      industrial or non-consumer uses, unless such uses represent the
38054      only significant mode of use of the product.
38056      "Installation Information" for a User Product means any methods,
38057      procedures, authorization keys, or other information required to
38058      install and execute modified versions of a covered work in that
38059      User Product from a modified version of its Corresponding Source.
38060      The information must suffice to ensure that the continued
38061      functioning of the modified object code is in no case prevented or
38062      interfered with solely because modification has been made.
38064      If you convey an object code work under this section in, or with,
38065      or specifically for use in, a User Product, and the conveying
38066      occurs as part of a transaction in which the right of possession
38067      and use of the User Product is transferred to the recipient in
38068      perpetuity or for a fixed term (regardless of how the transaction
38069      is characterized), the Corresponding Source conveyed under this
38070      section must be accompanied by the Installation Information.  But
38071      this requirement does not apply if neither you nor any third party
38072      retains the ability to install modified object code on the User
38073      Product (for example, the work has been installed in ROM).
38075      The requirement to provide Installation Information does not
38076      include a requirement to continue to provide support service,
38077      warranty, or updates for a work that has been modified or
38078      installed by the recipient, or for the User Product in which it
38079      has been modified or installed.  Access to a network may be denied
38080      when the modification itself materially and adversely affects the
38081      operation of the network or violates the rules and protocols for
38082      communication across the network.
38084      Corresponding Source conveyed, and Installation Information
38085      provided, in accord with this section must be in a format that is
38086      publicly documented (and with an implementation available to the
38087      public in source code form), and must require no special password
38088      or key for unpacking, reading or copying.
38090   7. Additional Terms.
38092      "Additional permissions" are terms that supplement the terms of
38093      this License by making exceptions from one or more of its
38094      conditions.  Additional permissions that are applicable to the
38095      entire Program shall be treated as though they were included in
38096      this License, to the extent that they are valid under applicable
38097      law.  If additional permissions apply only to part of the Program,
38098      that part may be used separately under those permissions, but the
38099      entire Program remains governed by this License without regard to
38100      the additional permissions.
38102      When you convey a copy of a covered work, you may at your option
38103      remove any additional permissions from that copy, or from any part
38104      of it.  (Additional permissions may be written to require their own
38105      removal in certain cases when you modify the work.)  You may place
38106      additional permissions on material, added by you to a covered work,
38107      for which you have or can give appropriate copyright permission.
38109      Notwithstanding any other provision of this License, for material
38110      you add to a covered work, you may (if authorized by the copyright
38111      holders of that material) supplement the terms of this License
38112      with terms:
38114        a. Disclaiming warranty or limiting liability differently from
38115           the terms of sections 15 and 16 of this License; or
38117        b. Requiring preservation of specified reasonable legal notices
38118           or author attributions in that material or in the Appropriate
38119           Legal Notices displayed by works containing it; or
38121        c. Prohibiting misrepresentation of the origin of that material,
38122           or requiring that modified versions of such material be
38123           marked in reasonable ways as different from the original
38124           version; or
38126        d. Limiting the use for publicity purposes of names of licensors
38127           or authors of the material; or
38129        e. Declining to grant rights under trademark law for use of some
38130           trade names, trademarks, or service marks; or
38132        f. Requiring indemnification of licensors and authors of that
38133           material by anyone who conveys the material (or modified
38134           versions of it) with contractual assumptions of liability to
38135           the recipient, for any liability that these contractual
38136           assumptions directly impose on those licensors and authors.
38138      All other non-permissive additional terms are considered "further
38139      restrictions" within the meaning of section 10.  If the Program as
38140      you received it, or any part of it, contains a notice stating that
38141      it is governed by this License along with a term that is a further
38142      restriction, you may remove that term.  If a license document
38143      contains a further restriction but permits relicensing or
38144      conveying under this License, you may add to a covered work
38145      material governed by the terms of that license document, provided
38146      that the further restriction does not survive such relicensing or
38147      conveying.
38149      If you add terms to a covered work in accord with this section, you
38150      must place, in the relevant source files, a statement of the
38151      additional terms that apply to those files, or a notice indicating
38152      where to find the applicable terms.
38154      Additional terms, permissive or non-permissive, may be stated in
38155      the form of a separately written license, or stated as exceptions;
38156      the above requirements apply either way.
38158   8. Termination.
38160      You may not propagate or modify a covered work except as expressly
38161      provided under this License.  Any attempt otherwise to propagate or
38162      modify it is void, and will automatically terminate your rights
38163      under this License (including any patent licenses granted under
38164      the third paragraph of section 11).
38166      However, if you cease all violation of this License, then your
38167      license from a particular copyright holder is reinstated (a)
38168      provisionally, unless and until the copyright holder explicitly
38169      and finally terminates your license, and (b) permanently, if the
38170      copyright holder fails to notify you of the violation by some
38171      reasonable means prior to 60 days after the cessation.
38173      Moreover, your license from a particular copyright holder is
38174      reinstated permanently if the copyright holder notifies you of the
38175      violation by some reasonable means, this is the first time you have
38176      received notice of violation of this License (for any work) from
38177      that copyright holder, and you cure the violation prior to 30 days
38178      after your receipt of the notice.
38180      Termination of your rights under this section does not terminate
38181      the licenses of parties who have received copies or rights from
38182      you under this License.  If your rights have been terminated and
38183      not permanently reinstated, you do not qualify to receive new
38184      licenses for the same material under section 10.
38186   9. Acceptance Not Required for Having Copies.
38188      You are not required to accept this License in order to receive or
38189      run a copy of the Program.  Ancillary propagation of a covered work
38190      occurring solely as a consequence of using peer-to-peer
38191      transmission to receive a copy likewise does not require
38192      acceptance.  However, nothing other than this License grants you
38193      permission to propagate or modify any covered work.  These actions
38194      infringe copyright if you do not accept this License.  Therefore,
38195      by modifying or propagating a covered work, you indicate your
38196      acceptance of this License to do so.
38198  10. Automatic Licensing of Downstream Recipients.
38200      Each time you convey a covered work, the recipient automatically
38201      receives a license from the original licensors, to run, modify and
38202      propagate that work, subject to this License.  You are not
38203      responsible for enforcing compliance by third parties with this
38204      License.
38206      An "entity transaction" is a transaction transferring control of an
38207      organization, or substantially all assets of one, or subdividing an
38208      organization, or merging organizations.  If propagation of a
38209      covered work results from an entity transaction, each party to that
38210      transaction who receives a copy of the work also receives whatever
38211      licenses to the work the party's predecessor in interest had or
38212      could give under the previous paragraph, plus a right to
38213      possession of the Corresponding Source of the work from the
38214      predecessor in interest, if the predecessor has it or can get it
38215      with reasonable efforts.
38217      You may not impose any further restrictions on the exercise of the
38218      rights granted or affirmed under this License.  For example, you
38219      may not impose a license fee, royalty, or other charge for
38220      exercise of rights granted under this License, and you may not
38221      initiate litigation (including a cross-claim or counterclaim in a
38222      lawsuit) alleging that any patent claim is infringed by making,
38223      using, selling, offering for sale, or importing the Program or any
38224      portion of it.
38226  11. Patents.
38228      A "contributor" is a copyright holder who authorizes use under this
38229      License of the Program or a work on which the Program is based.
38230      The work thus licensed is called the contributor's "contributor
38231      version".
38233      A contributor's "essential patent claims" are all patent claims
38234      owned or controlled by the contributor, whether already acquired or
38235      hereafter acquired, that would be infringed by some manner,
38236      permitted by this License, of making, using, or selling its
38237      contributor version, but do not include claims that would be
38238      infringed only as a consequence of further modification of the
38239      contributor version.  For purposes of this definition, "control"
38240      includes the right to grant patent sublicenses in a manner
38241      consistent with the requirements of this License.
38243      Each contributor grants you a non-exclusive, worldwide,
38244      royalty-free patent license under the contributor's essential
38245      patent claims, to make, use, sell, offer for sale, import and
38246      otherwise run, modify and propagate the contents of its
38247      contributor version.
38249      In the following three paragraphs, a "patent license" is any
38250      express agreement or commitment, however denominated, not to
38251      enforce a patent (such as an express permission to practice a
38252      patent or covenant not to sue for patent infringement).  To
38253      "grant" such a patent license to a party means to make such an
38254      agreement or commitment not to enforce a patent against the party.
38256      If you convey a covered work, knowingly relying on a patent
38257      license, and the Corresponding Source of the work is not available
38258      for anyone to copy, free of charge and under the terms of this
38259      License, through a publicly available network server or other
38260      readily accessible means, then you must either (1) cause the
38261      Corresponding Source to be so available, or (2) arrange to deprive
38262      yourself of the benefit of the patent license for this particular
38263      work, or (3) arrange, in a manner consistent with the requirements
38264      of this License, to extend the patent license to downstream
38265      recipients.  "Knowingly relying" means you have actual knowledge
38266      that, but for the patent license, your conveying the covered work
38267      in a country, or your recipient's use of the covered work in a
38268      country, would infringe one or more identifiable patents in that
38269      country that you have reason to believe are valid.
38271      If, pursuant to or in connection with a single transaction or
38272      arrangement, you convey, or propagate by procuring conveyance of, a
38273      covered work, and grant a patent license to some of the parties
38274      receiving the covered work authorizing them to use, propagate,
38275      modify or convey a specific copy of the covered work, then the
38276      patent license you grant is automatically extended to all
38277      recipients of the covered work and works based on it.
38279      A patent license is "discriminatory" if it does not include within
38280      the scope of its coverage, prohibits the exercise of, or is
38281      conditioned on the non-exercise of one or more of the rights that
38282      are specifically granted under this License.  You may not convey a
38283      covered work if you are a party to an arrangement with a third
38284      party that is in the business of distributing software, under
38285      which you make payment to the third party based on the extent of
38286      your activity of conveying the work, and under which the third
38287      party grants, to any of the parties who would receive the covered
38288      work from you, a discriminatory patent license (a) in connection
38289      with copies of the covered work conveyed by you (or copies made
38290      from those copies), or (b) primarily for and in connection with
38291      specific products or compilations that contain the covered work,
38292      unless you entered into that arrangement, or that patent license
38293      was granted, prior to 28 March 2007.
38295      Nothing in this License shall be construed as excluding or limiting
38296      any implied license or other defenses to infringement that may
38297      otherwise be available to you under applicable patent law.
38299  12. No Surrender of Others' Freedom.
38301      If conditions are imposed on you (whether by court order,
38302      agreement or otherwise) that contradict the conditions of this
38303      License, they do not excuse you from the conditions of this
38304      License.  If you cannot convey a covered work so as to satisfy
38305      simultaneously your obligations under this License and any other
38306      pertinent obligations, then as a consequence you may not convey it
38307      at all.  For example, if you agree to terms that obligate you to
38308      collect a royalty for further conveying from those to whom you
38309      convey the Program, the only way you could satisfy both those
38310      terms and this License would be to refrain entirely from conveying
38311      the Program.
38313  13. Use with the GNU Affero General Public License.
38315      Notwithstanding any other provision of this License, you have
38316      permission to link or combine any covered work with a work licensed
38317      under version 3 of the GNU Affero General Public License into a
38318      single combined work, and to convey the resulting work.  The terms
38319      of this License will continue to apply to the part which is the
38320      covered work, but the special requirements of the GNU Affero
38321      General Public License, section 13, concerning interaction through
38322      a network will apply to the combination as such.
38324  14. Revised Versions of this License.
38326      The Free Software Foundation may publish revised and/or new
38327      versions of the GNU General Public License from time to time.
38328      Such new versions will be similar in spirit to the present
38329      version, but may differ in detail to address new problems or
38330      concerns.
38332      Each version is given a distinguishing version number.  If the
38333      Program specifies that a certain numbered version of the GNU
38334      General Public License "or any later version" applies to it, you
38335      have the option of following the terms and conditions either of
38336      that numbered version or of any later version published by the
38337      Free Software Foundation.  If the Program does not specify a
38338      version number of the GNU General Public License, you may choose
38339      any version ever published by the Free Software Foundation.
38341      If the Program specifies that a proxy can decide which future
38342      versions of the GNU General Public License can be used, that
38343      proxy's public statement of acceptance of a version permanently
38344      authorizes you to choose that version for the Program.
38346      Later license versions may give you additional or different
38347      permissions.  However, no additional obligations are imposed on any
38348      author or copyright holder as a result of your choosing to follow a
38349      later version.
38351  15. Disclaimer of Warranty.
38353      THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
38354      APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE
38355      COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS"
38356      WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED,
38357      INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
38358      MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE
38359      RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.
38360      SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL
38361      NECESSARY SERVICING, REPAIR OR CORRECTION.
38363  16. Limitation of Liability.
38365      IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
38366      WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES
38367      AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU
38368      FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
38369      CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE
38370      THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA
38371      BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
38372      PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
38373      PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF
38374      THE POSSIBILITY OF SUCH DAMAGES.
38376  17. Interpretation of Sections 15 and 16.
38378      If the disclaimer of warranty and limitation of liability provided
38379      above cannot be given local legal effect according to their terms,
38380      reviewing courts shall apply local law that most closely
38381      approximates an absolute waiver of all civil liability in
38382      connection with the Program, unless a warranty or assumption of
38383      liability accompanies a copy of the Program in return for a fee.
38386 END OF TERMS AND CONDITIONS
38387 ===========================
38389 How to Apply These Terms to Your New Programs
38390 =============================================
38392 If you develop a new program, and you want it to be of the greatest
38393 possible use to the public, the best way to achieve this is to make it
38394 free software which everyone can redistribute and change under these
38395 terms.
38397  To do so, attach the following notices to the program.  It is safest
38398 to attach them to the start of each source file to most effectively
38399 state the exclusion of warranty; and each file should have at least the
38400 "copyright" line and a pointer to where the full notice is found.
38402      ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES.
38403      Copyright (C) YEAR NAME OF AUTHOR
38405      This program is free software: you can redistribute it and/or modify
38406      it under the terms of the GNU General Public License as published by
38407      the Free Software Foundation, either version 3 of the License, or (at
38408      your option) any later version.
38410      This program is distributed in the hope that it will be useful, but
38411      WITHOUT ANY WARRANTY; without even the implied warranty of
38412      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
38413      General Public License for more details.
38415      You should have received a copy of the GNU General Public License
38416      along with this program.  If not, see `http://www.gnu.org/licenses/'.
38418  Also add information on how to contact you by electronic and paper
38419 mail.
38421  If the program does terminal interaction, make it output a short
38422 notice like this when it starts in an interactive mode:
38424      PROGRAM Copyright (C) YEAR NAME OF AUTHOR
38425      This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
38426      This is free software, and you are welcome to redistribute it
38427      under certain conditions; type `show c' for details.
38429  The hypothetical commands `show w' and `show c' should show the
38430 appropriate parts of the General Public License.  Of course, your
38431 program's commands might be different; for a GUI interface, you would
38432 use an "about box".
38434  You should also get your employer (if you work as a programmer) or
38435 school, if any, to sign a "copyright disclaimer" for the program, if
38436 necessary.  For more information on this, and how to apply and follow
38437 the GNU GPL, see `http://www.gnu.org/licenses/'.
38439  The GNU General Public License does not permit incorporating your
38440 program into proprietary programs.  If your program is a subroutine
38441 library, you may consider it more useful to permit linking proprietary
38442 applications with the library.  If this is what you want to do, use the
38443 GNU Lesser General Public License instead of this License.  But first,
38444 please read `http://www.gnu.org/philosophy/why-not-lgpl.html'.
38446 \x1f
38447 File: gcc.info,  Node: GNU Free Documentation License,  Next: Contributors,  Prev: Copying,  Up: Top
38449 GNU Free Documentation License
38450 ******************************
38452                       Version 1.2, November 2002
38454      Copyright (C) 2000,2001,2002 Free Software Foundation, Inc.
38455      51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
38457      Everyone is permitted to copy and distribute verbatim copies
38458      of this license document, but changing it is not allowed.
38460   0. PREAMBLE
38462      The purpose of this License is to make a manual, textbook, or other
38463      functional and useful document "free" in the sense of freedom: to
38464      assure everyone the effective freedom to copy and redistribute it,
38465      with or without modifying it, either commercially or
38466      noncommercially.  Secondarily, this License preserves for the
38467      author and publisher a way to get credit for their work, while not
38468      being considered responsible for modifications made by others.
38470      This License is a kind of "copyleft", which means that derivative
38471      works of the document must themselves be free in the same sense.
38472      It complements the GNU General Public License, which is a copyleft
38473      license designed for free software.
38475      We have designed this License in order to use it for manuals for
38476      free software, because free software needs free documentation: a
38477      free program should come with manuals providing the same freedoms
38478      that the software does.  But this License is not limited to
38479      software manuals; it can be used for any textual work, regardless
38480      of subject matter or whether it is published as a printed book.
38481      We recommend this License principally for works whose purpose is
38482      instruction or reference.
38484   1. APPLICABILITY AND DEFINITIONS
38486      This License applies to any manual or other work, in any medium,
38487      that contains a notice placed by the copyright holder saying it
38488      can be distributed under the terms of this License.  Such a notice
38489      grants a world-wide, royalty-free license, unlimited in duration,
38490      to use that work under the conditions stated herein.  The
38491      "Document", below, refers to any such manual or work.  Any member
38492      of the public is a licensee, and is addressed as "you".  You
38493      accept the license if you copy, modify or distribute the work in a
38494      way requiring permission under copyright law.
38496      A "Modified Version" of the Document means any work containing the
38497      Document or a portion of it, either copied verbatim, or with
38498      modifications and/or translated into another language.
38500      A "Secondary Section" is a named appendix or a front-matter section
38501      of the Document that deals exclusively with the relationship of the
38502      publishers or authors of the Document to the Document's overall
38503      subject (or to related matters) and contains nothing that could
38504      fall directly within that overall subject.  (Thus, if the Document
38505      is in part a textbook of mathematics, a Secondary Section may not
38506      explain any mathematics.)  The relationship could be a matter of
38507      historical connection with the subject or with related matters, or
38508      of legal, commercial, philosophical, ethical or political position
38509      regarding them.
38511      The "Invariant Sections" are certain Secondary Sections whose
38512      titles are designated, as being those of Invariant Sections, in
38513      the notice that says that the Document is released under this
38514      License.  If a section does not fit the above definition of
38515      Secondary then it is not allowed to be designated as Invariant.
38516      The Document may contain zero Invariant Sections.  If the Document
38517      does not identify any Invariant Sections then there are none.
38519      The "Cover Texts" are certain short passages of text that are
38520      listed, as Front-Cover Texts or Back-Cover Texts, in the notice
38521      that says that the Document is released under this License.  A
38522      Front-Cover Text may be at most 5 words, and a Back-Cover Text may
38523      be at most 25 words.
38525      A "Transparent" copy of the Document means a machine-readable copy,
38526      represented in a format whose specification is available to the
38527      general public, that is suitable for revising the document
38528      straightforwardly with generic text editors or (for images
38529      composed of pixels) generic paint programs or (for drawings) some
38530      widely available drawing editor, and that is suitable for input to
38531      text formatters or for automatic translation to a variety of
38532      formats suitable for input to text formatters.  A copy made in an
38533      otherwise Transparent file format whose markup, or absence of
38534      markup, has been arranged to thwart or discourage subsequent
38535      modification by readers is not Transparent.  An image format is
38536      not Transparent if used for any substantial amount of text.  A
38537      copy that is not "Transparent" is called "Opaque".
38539      Examples of suitable formats for Transparent copies include plain
38540      ASCII without markup, Texinfo input format, LaTeX input format,
38541      SGML or XML using a publicly available DTD, and
38542      standard-conforming simple HTML, PostScript or PDF designed for
38543      human modification.  Examples of transparent image formats include
38544      PNG, XCF and JPG.  Opaque formats include proprietary formats that
38545      can be read and edited only by proprietary word processors, SGML or
38546      XML for which the DTD and/or processing tools are not generally
38547      available, and the machine-generated HTML, PostScript or PDF
38548      produced by some word processors for output purposes only.
38550      The "Title Page" means, for a printed book, the title page itself,
38551      plus such following pages as are needed to hold, legibly, the
38552      material this License requires to appear in the title page.  For
38553      works in formats which do not have any title page as such, "Title
38554      Page" means the text near the most prominent appearance of the
38555      work's title, preceding the beginning of the body of the text.
38557      A section "Entitled XYZ" means a named subunit of the Document
38558      whose title either is precisely XYZ or contains XYZ in parentheses
38559      following text that translates XYZ in another language.  (Here XYZ
38560      stands for a specific section name mentioned below, such as
38561      "Acknowledgements", "Dedications", "Endorsements", or "History".)
38562      To "Preserve the Title" of such a section when you modify the
38563      Document means that it remains a section "Entitled XYZ" according
38564      to this definition.
38566      The Document may include Warranty Disclaimers next to the notice
38567      which states that this License applies to the Document.  These
38568      Warranty Disclaimers are considered to be included by reference in
38569      this License, but only as regards disclaiming warranties: any other
38570      implication that these Warranty Disclaimers may have is void and
38571      has no effect on the meaning of this License.
38573   2. VERBATIM COPYING
38575      You may copy and distribute the Document in any medium, either
38576      commercially or noncommercially, provided that this License, the
38577      copyright notices, and the license notice saying this License
38578      applies to the Document are reproduced in all copies, and that you
38579      add no other conditions whatsoever to those of this License.  You
38580      may not use technical measures to obstruct or control the reading
38581      or further copying of the copies you make or distribute.  However,
38582      you may accept compensation in exchange for copies.  If you
38583      distribute a large enough number of copies you must also follow
38584      the conditions in section 3.
38586      You may also lend copies, under the same conditions stated above,
38587      and you may publicly display copies.
38589   3. COPYING IN QUANTITY
38591      If you publish printed copies (or copies in media that commonly
38592      have printed covers) of the Document, numbering more than 100, and
38593      the Document's license notice requires Cover Texts, you must
38594      enclose the copies in covers that carry, clearly and legibly, all
38595      these Cover Texts: Front-Cover Texts on the front cover, and
38596      Back-Cover Texts on the back cover.  Both covers must also clearly
38597      and legibly identify you as the publisher of these copies.  The
38598      front cover must present the full title with all words of the
38599      title equally prominent and visible.  You may add other material
38600      on the covers in addition.  Copying with changes limited to the
38601      covers, as long as they preserve the title of the Document and
38602      satisfy these conditions, can be treated as verbatim copying in
38603      other respects.
38605      If the required texts for either cover are too voluminous to fit
38606      legibly, you should put the first ones listed (as many as fit
38607      reasonably) on the actual cover, and continue the rest onto
38608      adjacent pages.
38610      If you publish or distribute Opaque copies of the Document
38611      numbering more than 100, you must either include a
38612      machine-readable Transparent copy along with each Opaque copy, or
38613      state in or with each Opaque copy a computer-network location from
38614      which the general network-using public has access to download
38615      using public-standard network protocols a complete Transparent
38616      copy of the Document, free of added material.  If you use the
38617      latter option, you must take reasonably prudent steps, when you
38618      begin distribution of Opaque copies in quantity, to ensure that
38619      this Transparent copy will remain thus accessible at the stated
38620      location until at least one year after the last time you
38621      distribute an Opaque copy (directly or through your agents or
38622      retailers) of that edition to the public.
38624      It is requested, but not required, that you contact the authors of
38625      the Document well before redistributing any large number of
38626      copies, to give them a chance to provide you with an updated
38627      version of the Document.
38629   4. MODIFICATIONS
38631      You may copy and distribute a Modified Version of the Document
38632      under the conditions of sections 2 and 3 above, provided that you
38633      release the Modified Version under precisely this License, with
38634      the Modified Version filling the role of the Document, thus
38635      licensing distribution and modification of the Modified Version to
38636      whoever possesses a copy of it.  In addition, you must do these
38637      things in the Modified Version:
38639        A. Use in the Title Page (and on the covers, if any) a title
38640           distinct from that of the Document, and from those of
38641           previous versions (which should, if there were any, be listed
38642           in the History section of the Document).  You may use the
38643           same title as a previous version if the original publisher of
38644           that version gives permission.
38646        B. List on the Title Page, as authors, one or more persons or
38647           entities responsible for authorship of the modifications in
38648           the Modified Version, together with at least five of the
38649           principal authors of the Document (all of its principal
38650           authors, if it has fewer than five), unless they release you
38651           from this requirement.
38653        C. State on the Title page the name of the publisher of the
38654           Modified Version, as the publisher.
38656        D. Preserve all the copyright notices of the Document.
38658        E. Add an appropriate copyright notice for your modifications
38659           adjacent to the other copyright notices.
38661        F. Include, immediately after the copyright notices, a license
38662           notice giving the public permission to use the Modified
38663           Version under the terms of this License, in the form shown in
38664           the Addendum below.
38666        G. Preserve in that license notice the full lists of Invariant
38667           Sections and required Cover Texts given in the Document's
38668           license notice.
38670        H. Include an unaltered copy of this License.
38672        I. Preserve the section Entitled "History", Preserve its Title,
38673           and add to it an item stating at least the title, year, new
38674           authors, and publisher of the Modified Version as given on
38675           the Title Page.  If there is no section Entitled "History" in
38676           the Document, create one stating the title, year, authors,
38677           and publisher of the Document as given on its Title Page,
38678           then add an item describing the Modified Version as stated in
38679           the previous sentence.
38681        J. Preserve the network location, if any, given in the Document
38682           for public access to a Transparent copy of the Document, and
38683           likewise the network locations given in the Document for
38684           previous versions it was based on.  These may be placed in
38685           the "History" section.  You may omit a network location for a
38686           work that was published at least four years before the
38687           Document itself, or if the original publisher of the version
38688           it refers to gives permission.
38690        K. For any section Entitled "Acknowledgements" or "Dedications",
38691           Preserve the Title of the section, and preserve in the
38692           section all the substance and tone of each of the contributor
38693           acknowledgements and/or dedications given therein.
38695        L. Preserve all the Invariant Sections of the Document,
38696           unaltered in their text and in their titles.  Section numbers
38697           or the equivalent are not considered part of the section
38698           titles.
38700        M. Delete any section Entitled "Endorsements".  Such a section
38701           may not be included in the Modified Version.
38703        N. Do not retitle any existing section to be Entitled
38704           "Endorsements" or to conflict in title with any Invariant
38705           Section.
38707        O. Preserve any Warranty Disclaimers.
38709      If the Modified Version includes new front-matter sections or
38710      appendices that qualify as Secondary Sections and contain no
38711      material copied from the Document, you may at your option
38712      designate some or all of these sections as invariant.  To do this,
38713      add their titles to the list of Invariant Sections in the Modified
38714      Version's license notice.  These titles must be distinct from any
38715      other section titles.
38717      You may add a section Entitled "Endorsements", provided it contains
38718      nothing but endorsements of your Modified Version by various
38719      parties--for example, statements of peer review or that the text
38720      has been approved by an organization as the authoritative
38721      definition of a standard.
38723      You may add a passage of up to five words as a Front-Cover Text,
38724      and a passage of up to 25 words as a Back-Cover Text, to the end
38725      of the list of Cover Texts in the Modified Version.  Only one
38726      passage of Front-Cover Text and one of Back-Cover Text may be
38727      added by (or through arrangements made by) any one entity.  If the
38728      Document already includes a cover text for the same cover,
38729      previously added by you or by arrangement made by the same entity
38730      you are acting on behalf of, you may not add another; but you may
38731      replace the old one, on explicit permission from the previous
38732      publisher that added the old one.
38734      The author(s) and publisher(s) of the Document do not by this
38735      License give permission to use their names for publicity for or to
38736      assert or imply endorsement of any Modified Version.
38738   5. COMBINING DOCUMENTS
38740      You may combine the Document with other documents released under
38741      this License, under the terms defined in section 4 above for
38742      modified versions, provided that you include in the combination
38743      all of the Invariant Sections of all of the original documents,
38744      unmodified, and list them all as Invariant Sections of your
38745      combined work in its license notice, and that you preserve all
38746      their Warranty Disclaimers.
38748      The combined work need only contain one copy of this License, and
38749      multiple identical Invariant Sections may be replaced with a single
38750      copy.  If there are multiple Invariant Sections with the same name
38751      but different contents, make the title of each such section unique
38752      by adding at the end of it, in parentheses, the name of the
38753      original author or publisher of that section if known, or else a
38754      unique number.  Make the same adjustment to the section titles in
38755      the list of Invariant Sections in the license notice of the
38756      combined work.
38758      In the combination, you must combine any sections Entitled
38759      "History" in the various original documents, forming one section
38760      Entitled "History"; likewise combine any sections Entitled
38761      "Acknowledgements", and any sections Entitled "Dedications".  You
38762      must delete all sections Entitled "Endorsements."
38764   6. COLLECTIONS OF DOCUMENTS
38766      You may make a collection consisting of the Document and other
38767      documents released under this License, and replace the individual
38768      copies of this License in the various documents with a single copy
38769      that is included in the collection, provided that you follow the
38770      rules of this License for verbatim copying of each of the
38771      documents in all other respects.
38773      You may extract a single document from such a collection, and
38774      distribute it individually under this License, provided you insert
38775      a copy of this License into the extracted document, and follow
38776      this License in all other respects regarding verbatim copying of
38777      that document.
38779   7. AGGREGATION WITH INDEPENDENT WORKS
38781      A compilation of the Document or its derivatives with other
38782      separate and independent documents or works, in or on a volume of
38783      a storage or distribution medium, is called an "aggregate" if the
38784      copyright resulting from the compilation is not used to limit the
38785      legal rights of the compilation's users beyond what the individual
38786      works permit.  When the Document is included in an aggregate, this
38787      License does not apply to the other works in the aggregate which
38788      are not themselves derivative works of the Document.
38790      If the Cover Text requirement of section 3 is applicable to these
38791      copies of the Document, then if the Document is less than one half
38792      of the entire aggregate, the Document's Cover Texts may be placed
38793      on covers that bracket the Document within the aggregate, or the
38794      electronic equivalent of covers if the Document is in electronic
38795      form.  Otherwise they must appear on printed covers that bracket
38796      the whole aggregate.
38798   8. TRANSLATION
38800      Translation is considered a kind of modification, so you may
38801      distribute translations of the Document under the terms of section
38802      4.  Replacing Invariant Sections with translations requires special
38803      permission from their copyright holders, but you may include
38804      translations of some or all Invariant Sections in addition to the
38805      original versions of these Invariant Sections.  You may include a
38806      translation of this License, and all the license notices in the
38807      Document, and any Warranty Disclaimers, provided that you also
38808      include the original English version of this License and the
38809      original versions of those notices and disclaimers.  In case of a
38810      disagreement between the translation and the original version of
38811      this License or a notice or disclaimer, the original version will
38812      prevail.
38814      If a section in the Document is Entitled "Acknowledgements",
38815      "Dedications", or "History", the requirement (section 4) to
38816      Preserve its Title (section 1) will typically require changing the
38817      actual title.
38819   9. TERMINATION
38821      You may not copy, modify, sublicense, or distribute the Document
38822      except as expressly provided for under this License.  Any other
38823      attempt to copy, modify, sublicense or distribute the Document is
38824      void, and will automatically terminate your rights under this
38825      License.  However, parties who have received copies, or rights,
38826      from you under this License will not have their licenses
38827      terminated so long as such parties remain in full compliance.
38829  10. FUTURE REVISIONS OF THIS LICENSE
38831      The Free Software Foundation may publish new, revised versions of
38832      the GNU Free Documentation License from time to time.  Such new
38833      versions will be similar in spirit to the present version, but may
38834      differ in detail to address new problems or concerns.  See
38835      `http://www.gnu.org/copyleft/'.
38837      Each version of the License is given a distinguishing version
38838      number.  If the Document specifies that a particular numbered
38839      version of this License "or any later version" applies to it, you
38840      have the option of following the terms and conditions either of
38841      that specified version or of any later version that has been
38842      published (not as a draft) by the Free Software Foundation.  If
38843      the Document does not specify a version number of this License,
38844      you may choose any version ever published (not as a draft) by the
38845      Free Software Foundation.
38847 ADDENDUM: How to use this License for your documents
38848 ====================================================
38850 To use this License in a document you have written, include a copy of
38851 the License in the document and put the following copyright and license
38852 notices just after the title page:
38854        Copyright (C)  YEAR  YOUR NAME.
38855        Permission is granted to copy, distribute and/or modify this document
38856        under the terms of the GNU Free Documentation License, Version 1.2
38857        or any later version published by the Free Software Foundation;
38858        with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
38859        Texts.  A copy of the license is included in the section entitled ``GNU
38860        Free Documentation License''.
38862  If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
38863 replace the "with...Texts." line with this:
38865          with the Invariant Sections being LIST THEIR TITLES, with
38866          the Front-Cover Texts being LIST, and with the Back-Cover Texts
38867          being LIST.
38869  If you have Invariant Sections without Cover Texts, or some other
38870 combination of the three, merge those two alternatives to suit the
38871 situation.
38873  If your document contains nontrivial examples of program code, we
38874 recommend releasing these examples in parallel under your choice of
38875 free software license, such as the GNU General Public License, to
38876 permit their use in free software.
38878 \x1f
38879 File: gcc.info,  Node: Contributors,  Next: Option Index,  Prev: GNU Free Documentation License,  Up: Top
38881 Contributors to GCC
38882 *******************
38884 The GCC project would like to thank its many contributors.  Without
38885 them the project would not have been nearly as successful as it has
38886 been.  Any omissions in this list are accidental.  Feel free to contact
38887 <law@redhat.com> or <gerald@pfeifer.com> if you have been left out or
38888 some of your contributions are not listed.  Please keep this list in
38889 alphabetical order.
38891    * Analog Devices helped implement the support for complex data types
38892      and iterators.
38894    * John David Anglin for threading-related fixes and improvements to
38895      libstdc++-v3, and the HP-UX port.
38897    * James van Artsdalen wrote the code that makes efficient use of the
38898      Intel 80387 register stack.
38900    * Abramo and Roberto Bagnara for the SysV68 Motorola 3300 Delta
38901      Series port.
38903    * Alasdair Baird for various bug fixes.
38905    * Giovanni Bajo for analyzing lots of complicated C++ problem
38906      reports.
38908    * Peter Barada for his work to improve code generation for new
38909      ColdFire cores.
38911    * Gerald Baumgartner added the signature extension to the C++ front
38912      end.
38914    * Godmar Back for his Java improvements and encouragement.
38916    * Scott Bambrough for help porting the Java compiler.
38918    * Wolfgang Bangerth for processing tons of bug reports.
38920    * Jon Beniston for his Microsoft Windows port of Java.
38922    * Daniel Berlin for better DWARF2 support, faster/better
38923      optimizations, improved alias analysis, plus migrating GCC to
38924      Bugzilla.
38926    * Geoff Berry for his Java object serialization work and various
38927      patches.
38929    * Uros Bizjak for the implementation of x87 math built-in functions
38930      and for various middle end and i386 back end improvements and bug
38931      fixes.
38933    * Eric Blake for helping to make GCJ and libgcj conform to the
38934      specifications.
38936    * Janne Blomqvist for contributions to GNU Fortran.
38938    * Segher Boessenkool for various fixes.
38940    * Hans-J. Boehm for his garbage collector, IA-64 libffi port, and
38941      other Java work.
38943    * Neil Booth for work on cpplib, lang hooks, debug hooks and other
38944      miscellaneous clean-ups.
38946    * Steven Bosscher for integrating the GNU Fortran front end into GCC
38947      and for contributing to the tree-ssa branch.
38949    * Eric Botcazou for fixing middle- and backend bugs left and right.
38951    * Per Bothner for his direction via the steering committee and
38952      various improvements to the infrastructure for supporting new
38953      languages.  Chill front end implementation.  Initial
38954      implementations of cpplib, fix-header, config.guess, libio, and
38955      past C++ library (libg++) maintainer.  Dreaming up, designing and
38956      implementing much of GCJ.
38958    * Devon Bowen helped port GCC to the Tahoe.
38960    * Don Bowman for mips-vxworks contributions.
38962    * Dave Brolley for work on cpplib and Chill.
38964    * Paul Brook for work on the ARM architecture and maintaining GNU
38965      Fortran.
38967    * Robert Brown implemented the support for Encore 32000 systems.
38969    * Christian Bruel for improvements to local store elimination.
38971    * Herman A.J. ten Brugge for various fixes.
38973    * Joerg Brunsmann for Java compiler hacking and help with the GCJ
38974      FAQ.
38976    * Joe Buck for his direction via the steering committee.
38978    * Craig Burley for leadership of the G77 Fortran effort.
38980    * Stephan Buys for contributing Doxygen notes for libstdc++.
38982    * Paolo Carlini for libstdc++ work: lots of efficiency improvements
38983      to the C++ strings, streambufs and formatted I/O, hard detective
38984      work on the frustrating localization issues, and keeping up with
38985      the problem reports.
38987    * John Carr for his alias work, SPARC hacking, infrastructure
38988      improvements, previous contributions to the steering committee,
38989      loop optimizations, etc.
38991    * Stephane Carrez for 68HC11 and 68HC12 ports.
38993    * Steve Chamberlain for support for the Renesas SH and H8 processors
38994      and the PicoJava processor, and for GCJ config fixes.
38996    * Glenn Chambers for help with the GCJ FAQ.
38998    * John-Marc Chandonia for various libgcj patches.
39000    * Scott Christley for his Objective-C contributions.
39002    * Eric Christopher for his Java porting help and clean-ups.
39004    * Branko Cibej for more warning contributions.
39006    * The GNU Classpath project for all of their merged runtime code.
39008    * Nick Clifton for arm, mcore, fr30, v850, m32r work, `--help', and
39009      other random hacking.
39011    * Michael Cook for libstdc++ cleanup patches to reduce warnings.
39013    * R. Kelley Cook for making GCC buildable from a read-only directory
39014      as well as other miscellaneous build process and documentation
39015      clean-ups.
39017    * Ralf Corsepius for SH testing and minor bug fixing.
39019    * Stan Cox for care and feeding of the x86 port and lots of behind
39020      the scenes hacking.
39022    * Alex Crain provided changes for the 3b1.
39024    * Ian Dall for major improvements to the NS32k port.
39026    * Paul Dale for his work to add uClinux platform support to the m68k
39027      backend.
39029    * Dario Dariol contributed the four varieties of sample programs
39030      that print a copy of their source.
39032    * Russell Davidson for fstream and stringstream fixes in libstdc++.
39034    * Bud Davis for work on the G77 and GNU Fortran compilers.
39036    * Mo DeJong for GCJ and libgcj bug fixes.
39038    * DJ Delorie for the DJGPP port, build and libiberty maintenance,
39039      various bug fixes, and the M32C port.
39041    * Arnaud Desitter for helping to debug GNU Fortran.
39043    * Gabriel Dos Reis for contributions to G++, contributions and
39044      maintenance of GCC diagnostics infrastructure, libstdc++-v3,
39045      including `valarray<>', `complex<>', maintaining the numerics
39046      library (including that pesky `<limits>' :-) and keeping
39047      up-to-date anything to do with numbers.
39049    * Ulrich Drepper for his work on glibc, testing of GCC using glibc,
39050      ISO C99 support, CFG dumping support, etc., plus support of the
39051      C++ runtime libraries including for all kinds of C interface
39052      issues, contributing and maintaining `complex<>', sanity checking
39053      and disbursement, configuration architecture, libio maintenance,
39054      and early math work.
39056    * Zdenek Dvorak for a new loop unroller and various fixes.
39058    * Richard Earnshaw for his ongoing work with the ARM.
39060    * David Edelsohn for his direction via the steering committee,
39061      ongoing work with the RS6000/PowerPC port, help cleaning up Haifa
39062      loop changes, doing the entire AIX port of libstdc++ with his bare
39063      hands, and for ensuring GCC properly keeps working on AIX.
39065    * Kevin Ediger for the floating point formatting of num_put::do_put
39066      in libstdc++.
39068    * Phil Edwards for libstdc++ work including configuration hackery,
39069      documentation maintainer, chief breaker of the web pages, the
39070      occasional iostream bug fix, and work on shared library symbol
39071      versioning.
39073    * Paul Eggert for random hacking all over GCC.
39075    * Mark Elbrecht for various DJGPP improvements, and for libstdc++
39076      configuration support for locales and fstream-related fixes.
39078    * Vadim Egorov for libstdc++ fixes in strings, streambufs, and
39079      iostreams.
39081    * Christian Ehrhardt for dealing with bug reports.
39083    * Ben Elliston for his work to move the Objective-C runtime into its
39084      own subdirectory and for his work on autoconf.
39086    * Revital Eres for work on the PowerPC 750CL port.
39088    * Marc Espie for OpenBSD support.
39090    * Doug Evans for much of the global optimization framework, arc,
39091      m32r, and SPARC work.
39093    * Christopher Faylor for his work on the Cygwin port and for caring
39094      and feeding the gcc.gnu.org box and saving its users tons of spam.
39096    * Fred Fish for BeOS support and Ada fixes.
39098    * Ivan Fontes Garcia for the Portuguese translation of the GCJ FAQ.
39100    * Peter Gerwinski for various bug fixes and the Pascal front end.
39102    * Kaveh R. Ghazi for his direction via the steering committee,
39103      amazing work to make `-W -Wall -W* -Werror' useful, and
39104      continuously testing GCC on a plethora of platforms.  Kaveh
39105      extends his gratitude to the CAIP Center at Rutgers University for
39106      providing him with computing resources to work on Free Software
39107      since the late 1980s.
39109    * John Gilmore for a donation to the FSF earmarked improving GNU
39110      Java.
39112    * Judy Goldberg for c++ contributions.
39114    * Torbjorn Granlund for various fixes and the c-torture testsuite,
39115      multiply- and divide-by-constant optimization, improved long long
39116      support, improved leaf function register allocation, and his
39117      direction via the steering committee.
39119    * Anthony Green for his `-Os' contributions and Java front end work.
39121    * Stu Grossman for gdb hacking, allowing GCJ developers to debug
39122      Java code.
39124    * Michael K. Gschwind contributed the port to the PDP-11.
39126    * Ron Guilmette implemented the `protoize' and `unprotoize' tools,
39127      the support for Dwarf symbolic debugging information, and much of
39128      the support for System V Release 4.  He has also worked heavily on
39129      the Intel 386 and 860 support.
39131    * Mostafa Hagog for Swing Modulo Scheduling (SMS) and post reload
39132      GCSE.
39134    * Bruno Haible for improvements in the runtime overhead for EH, new
39135      warnings and assorted bug fixes.
39137    * Andrew Haley for his amazing Java compiler and library efforts.
39139    * Chris Hanson assisted in making GCC work on HP-UX for the 9000
39140      series 300.
39142    * Michael Hayes for various thankless work he's done trying to get
39143      the c30/c40 ports functional.  Lots of loop and unroll
39144      improvements and fixes.
39146    * Dara Hazeghi for wading through myriads of target-specific bug
39147      reports.
39149    * Kate Hedstrom for staking the G77 folks with an initial testsuite.
39151    * Richard Henderson for his ongoing SPARC, alpha, ia32, and ia64
39152      work, loop opts, and generally fixing lots of old problems we've
39153      ignored for years, flow rewrite and lots of further stuff,
39154      including reviewing tons of patches.
39156    * Aldy Hernandez for working on the PowerPC port, SIMD support, and
39157      various fixes.
39159    * Nobuyuki Hikichi of Software Research Associates, Tokyo,
39160      contributed the support for the Sony NEWS machine.
39162    * Kazu Hirata for caring and feeding the Renesas H8/300 port and
39163      various fixes.
39165    * Katherine Holcomb for work on GNU Fortran.
39167    * Manfred Hollstein for his ongoing work to keep the m88k alive, lots
39168      of testing and bug fixing, particularly of GCC configury code.
39170    * Steve Holmgren for MachTen patches.
39172    * Jan Hubicka for his x86 port improvements.
39174    * Falk Hueffner for working on C and optimization bug reports.
39176    * Bernardo Innocenti for his m68k work, including merging of
39177      ColdFire improvements and uClinux support.
39179    * Christian Iseli for various bug fixes.
39181    * Kamil Iskra for general m68k hacking.
39183    * Lee Iverson for random fixes and MIPS testing.
39185    * Andreas Jaeger for testing and benchmarking of GCC and various bug
39186      fixes.
39188    * Jakub Jelinek for his SPARC work and sibling call optimizations as
39189      well as lots of bug fixes and test cases, and for improving the
39190      Java build system.
39192    * Janis Johnson for ia64 testing and fixes, her quality improvement
39193      sidetracks, and web page maintenance.
39195    * Kean Johnston for SCO OpenServer support and various fixes.
39197    * Tim Josling for the sample language treelang based originally on
39198      Richard Kenner's "toy" language.
39200    * Nicolai Josuttis for additional libstdc++ documentation.
39202    * Klaus Kaempf for his ongoing work to make alpha-vms a viable
39203      target.
39205    * Steven G. Kargl for work on GNU Fortran.
39207    * David Kashtan of SRI adapted GCC to VMS.
39209    * Ryszard Kabatek for many, many libstdc++ bug fixes and
39210      optimizations of strings, especially member functions, and for
39211      auto_ptr fixes.
39213    * Geoffrey Keating for his ongoing work to make the PPC work for
39214      GNU/Linux and his automatic regression tester.
39216    * Brendan Kehoe for his ongoing work with G++ and for a lot of early
39217      work in just about every part of libstdc++.
39219    * Oliver M. Kellogg of Deutsche Aerospace contributed the port to the
39220      MIL-STD-1750A.
39222    * Richard Kenner of the New York University Ultracomputer Research
39223      Laboratory wrote the machine descriptions for the AMD 29000, the
39224      DEC Alpha, the IBM RT PC, and the IBM RS/6000 as well as the
39225      support for instruction attributes.  He also made changes to
39226      better support RISC processors including changes to common
39227      subexpression elimination, strength reduction, function calling
39228      sequence handling, and condition code support, in addition to
39229      generalizing the code for frame pointer elimination and delay slot
39230      scheduling.  Richard Kenner was also the head maintainer of GCC
39231      for several years.
39233    * Mumit Khan for various contributions to the Cygwin and Mingw32
39234      ports and maintaining binary releases for Microsoft Windows hosts,
39235      and for massive libstdc++ porting work to Cygwin/Mingw32.
39237    * Robin Kirkham for cpu32 support.
39239    * Mark Klein for PA improvements.
39241    * Thomas Koenig for various bug fixes.
39243    * Bruce Korb for the new and improved fixincludes code.
39245    * Benjamin Kosnik for his G++ work and for leading the libstdc++-v3
39246      effort.
39248    * Charles LaBrec contributed the support for the Integrated Solutions
39249      68020 system.
39251    * Asher Langton and Mike Kumbera for contributing Cray pointer
39252      support to GNU Fortran, and for other GNU Fortran improvements.
39254    * Jeff Law for his direction via the steering committee,
39255      coordinating the entire egcs project and GCC 2.95, rolling out
39256      snapshots and releases, handling merges from GCC2, reviewing tons
39257      of patches that might have fallen through the cracks else, and
39258      random but extensive hacking.
39260    * Marc Lehmann for his direction via the steering committee and
39261      helping with analysis and improvements of x86 performance.
39263    * Victor Leikehman for work on GNU Fortran.
39265    * Ted Lemon wrote parts of the RTL reader and printer.
39267    * Kriang Lerdsuwanakij for C++ improvements including template as
39268      template parameter support, and many C++ fixes.
39270    * Warren Levy for tremendous work on libgcj (Java Runtime Library)
39271      and random work on the Java front end.
39273    * Alain Lichnewsky ported GCC to the MIPS CPU.
39275    * Oskar Liljeblad for hacking on AWT and his many Java bug reports
39276      and patches.
39278    * Robert Lipe for OpenServer support, new testsuites, testing, etc.
39280    * Chen Liqin for various S+core related fixes/improvement, and for
39281      maintaining the S+core port.
39283    * Weiwen Liu for testing and various bug fixes.
39285    * Manuel Lo'pez-Iba'n~ez for improving `-Wconversion' and many other
39286      diagnostics fixes and improvements.
39288    * Dave Love for his ongoing work with the Fortran front end and
39289      runtime libraries.
39291    * Martin von Lo"wis for internal consistency checking infrastructure,
39292      various C++ improvements including namespace support, and tons of
39293      assistance with libstdc++/compiler merges.
39295    * H.J. Lu for his previous contributions to the steering committee,
39296      many x86 bug reports, prototype patches, and keeping the GNU/Linux
39297      ports working.
39299    * Greg McGary for random fixes and (someday) bounded pointers.
39301    * Andrew MacLeod for his ongoing work in building a real EH system,
39302      various code generation improvements, work on the global
39303      optimizer, etc.
39305    * Vladimir Makarov for hacking some ugly i960 problems, PowerPC
39306      hacking improvements to compile-time performance, overall
39307      knowledge and direction in the area of instruction scheduling, and
39308      design and implementation of the automaton based instruction
39309      scheduler.
39311    * Bob Manson for his behind the scenes work on dejagnu.
39313    * Philip Martin for lots of libstdc++ string and vector iterator
39314      fixes and improvements, and string clean up and testsuites.
39316    * All of the Mauve project contributors, for Java test code.
39318    * Bryce McKinlay for numerous GCJ and libgcj fixes and improvements.
39320    * Adam Megacz for his work on the Microsoft Windows port of GCJ.
39322    * Michael Meissner for LRS framework, ia32, m32r, v850, m88k, MIPS,
39323      powerpc, haifa, ECOFF debug support, and other assorted hacking.
39325    * Jason Merrill for his direction via the steering committee and
39326      leading the G++ effort.
39328    * Martin Michlmayr for testing GCC on several architectures using the
39329      entire Debian archive.
39331    * David Miller for his direction via the steering committee, lots of
39332      SPARC work, improvements in jump.c and interfacing with the Linux
39333      kernel developers.
39335    * Gary Miller ported GCC to Charles River Data Systems machines.
39337    * Alfred Minarik for libstdc++ string and ios bug fixes, and turning
39338      the entire libstdc++ testsuite namespace-compatible.
39340    * Mark Mitchell for his direction via the steering committee,
39341      mountains of C++ work, load/store hoisting out of loops, alias
39342      analysis improvements, ISO C `restrict' support, and serving as
39343      release manager for GCC 3.x.
39345    * Alan Modra for various GNU/Linux bits and testing.
39347    * Toon Moene for his direction via the steering committee, Fortran
39348      maintenance, and his ongoing work to make us make Fortran run fast.
39350    * Jason Molenda for major help in the care and feeding of all the
39351      services on the gcc.gnu.org (formerly egcs.cygnus.com)
39352      machine--mail, web services, ftp services, etc etc.  Doing all
39353      this work on scrap paper and the backs of envelopes would have
39354      been... difficult.
39356    * Catherine Moore for fixing various ugly problems we have sent her
39357      way, including the haifa bug which was killing the Alpha & PowerPC
39358      Linux kernels.
39360    * Mike Moreton for his various Java patches.
39362    * David Mosberger-Tang for various Alpha improvements, and for the
39363      initial IA-64 port.
39365    * Stephen Moshier contributed the floating point emulator that
39366      assists in cross-compilation and permits support for floating
39367      point numbers wider than 64 bits and for ISO C99 support.
39369    * Bill Moyer for his behind the scenes work on various issues.
39371    * Philippe De Muyter for his work on the m68k port.
39373    * Joseph S. Myers for his work on the PDP-11 port, format checking
39374      and ISO C99 support, and continuous emphasis on (and contributions
39375      to) documentation.
39377    * Nathan Myers for his work on libstdc++-v3: architecture and
39378      authorship through the first three snapshots, including
39379      implementation of locale infrastructure, string, shadow C headers,
39380      and the initial project documentation (DESIGN, CHECKLIST, and so
39381      forth).  Later, more work on MT-safe string and shadow headers.
39383    * Felix Natter for documentation on porting libstdc++.
39385    * Nathanael Nerode for cleaning up the configuration/build process.
39387    * NeXT, Inc. donated the front end that supports the Objective-C
39388      language.
39390    * Hans-Peter Nilsson for the CRIS and MMIX ports, improvements to
39391      the search engine setup, various documentation fixes and other
39392      small fixes.
39394    * Geoff Noer for his work on getting cygwin native builds working.
39396    * Diego Novillo for his work on Tree SSA, OpenMP, SPEC performance
39397      tracking web pages, GIMPLE tuples, and assorted fixes.
39399    * David O'Brien for the FreeBSD/alpha, FreeBSD/AMD x86-64,
39400      FreeBSD/ARM, FreeBSD/PowerPC, and FreeBSD/SPARC64 ports and
39401      related infrastructure improvements.
39403    * Alexandre Oliva for various build infrastructure improvements,
39404      scripts and amazing testing work, including keeping libtool issues
39405      sane and happy.
39407    * Stefan Olsson for work on mt_alloc.
39409    * Melissa O'Neill for various NeXT fixes.
39411    * Rainer Orth for random MIPS work, including improvements to GCC's
39412      o32 ABI support, improvements to dejagnu's MIPS support, Java
39413      configuration clean-ups and porting work, etc.
39415    * Hartmut Penner for work on the s390 port.
39417    * Paul Petersen wrote the machine description for the Alliant FX/8.
39419    * Alexandre Petit-Bianco for implementing much of the Java compiler
39420      and continued Java maintainership.
39422    * Matthias Pfaller for major improvements to the NS32k port.
39424    * Gerald Pfeifer for his direction via the steering committee,
39425      pointing out lots of problems we need to solve, maintenance of the
39426      web pages, and taking care of documentation maintenance in general.
39428    * Andrew Pinski for processing bug reports by the dozen.
39430    * Ovidiu Predescu for his work on the Objective-C front end and
39431      runtime libraries.
39433    * Jerry Quinn for major performance improvements in C++ formatted
39434      I/O.
39436    * Ken Raeburn for various improvements to checker, MIPS ports and
39437      various cleanups in the compiler.
39439    * Rolf W. Rasmussen for hacking on AWT.
39441    * David Reese of Sun Microsystems contributed to the Solaris on
39442      PowerPC port.
39444    * Volker Reichelt for keeping up with the problem reports.
39446    * Joern Rennecke for maintaining the sh port, loop, regmove & reload
39447      hacking.
39449    * Loren J. Rittle for improvements to libstdc++-v3 including the
39450      FreeBSD port, threading fixes, thread-related configury changes,
39451      critical threading documentation, and solutions to really tricky
39452      I/O problems, as well as keeping GCC properly working on FreeBSD
39453      and continuous testing.
39455    * Craig Rodrigues for processing tons of bug reports.
39457    * Ola Ro"nnerup for work on mt_alloc.
39459    * Gavin Romig-Koch for lots of behind the scenes MIPS work.
39461    * David Ronis inspired and encouraged Craig to rewrite the G77
39462      documentation in texinfo format by contributing a first pass at a
39463      translation of the old `g77-0.5.16/f/DOC' file.
39465    * Ken Rose for fixes to GCC's delay slot filling code.
39467    * Paul Rubin wrote most of the preprocessor.
39469    * Pe'tur Runo'lfsson for major performance improvements in C++
39470      formatted I/O and large file support in C++ filebuf.
39472    * Chip Salzenberg for libstdc++ patches and improvements to locales,
39473      traits, Makefiles, libio, libtool hackery, and "long long" support.
39475    * Juha Sarlin for improvements to the H8 code generator.
39477    * Greg Satz assisted in making GCC work on HP-UX for the 9000 series
39478      300.
39480    * Roger Sayle for improvements to constant folding and GCC's RTL
39481      optimizers as well as for fixing numerous bugs.
39483    * Bradley Schatz for his work on the GCJ FAQ.
39485    * Peter Schauer wrote the code to allow debugging to work on the
39486      Alpha.
39488    * William Schelter did most of the work on the Intel 80386 support.
39490    * Tobias Schlu"ter for work on GNU Fortran.
39492    * Bernd Schmidt for various code generation improvements and major
39493      work in the reload pass as well a serving as release manager for
39494      GCC 2.95.3.
39496    * Peter Schmid for constant testing of libstdc++--especially
39497      application testing, going above and beyond what was requested for
39498      the release criteria--and libstdc++ header file tweaks.
39500    * Jason Schroeder for jcf-dump patches.
39502    * Andreas Schwab for his work on the m68k port.
39504    * Lars Segerlund for work on GNU Fortran.
39506    * Joel Sherrill for his direction via the steering committee, RTEMS
39507      contributions and RTEMS testing.
39509    * Nathan Sidwell for many C++ fixes/improvements.
39511    * Jeffrey Siegal for helping RMS with the original design of GCC,
39512      some code which handles the parse tree and RTL data structures,
39513      constant folding and help with the original VAX & m68k ports.
39515    * Kenny Simpson for prompting libstdc++ fixes due to defect reports
39516      from the LWG (thereby keeping GCC in line with updates from the
39517      ISO).
39519    * Franz Sirl for his ongoing work with making the PPC port stable
39520      for GNU/Linux.
39522    * Andrey Slepuhin for assorted AIX hacking.
39524    * Trevor Smigiel for contributing the SPU port.
39526    * Christopher Smith did the port for Convex machines.
39528    * Danny Smith for his major efforts on the Mingw (and Cygwin) ports.
39530    * Randy Smith finished the Sun FPA support.
39532    * Scott Snyder for queue, iterator, istream, and string fixes and
39533      libstdc++ testsuite entries.  Also for providing the patch to G77
39534      to add rudimentary support for `INTEGER*1', `INTEGER*2', and
39535      `LOGICAL*1'.
39537    * Brad Spencer for contributions to the GLIBCPP_FORCE_NEW technique.
39539    * Richard Stallman, for writing the original GCC and launching the
39540      GNU project.
39542    * Jan Stein of the Chalmers Computer Society provided support for
39543      Genix, as well as part of the 32000 machine description.
39545    * Nigel Stephens for various mips16 related fixes/improvements.
39547    * Jonathan Stone wrote the machine description for the Pyramid
39548      computer.
39550    * Graham Stott for various infrastructure improvements.
39552    * John Stracke for his Java HTTP protocol fixes.
39554    * Mike Stump for his Elxsi port, G++ contributions over the years
39555      and more recently his vxworks contributions
39557    * Jeff Sturm for Java porting help, bug fixes, and encouragement.
39559    * Shigeya Suzuki for this fixes for the bsdi platforms.
39561    * Ian Lance Taylor for his mips16 work, general configury hacking,
39562      fixincludes, etc.
39564    * Holger Teutsch provided the support for the Clipper CPU.
39566    * Gary Thomas for his ongoing work to make the PPC work for
39567      GNU/Linux.
39569    * Philipp Thomas for random bug fixes throughout the compiler
39571    * Jason Thorpe for thread support in libstdc++ on NetBSD.
39573    * Kresten Krab Thorup wrote the run time support for the Objective-C
39574      language and the fantastic Java bytecode interpreter.
39576    * Michael Tiemann for random bug fixes, the first instruction
39577      scheduler, initial C++ support, function integration, NS32k, SPARC
39578      and M88k machine description work, delay slot scheduling.
39580    * Andreas Tobler for his work porting libgcj to Darwin.
39582    * Teemu Torma for thread safe exception handling support.
39584    * Leonard Tower wrote parts of the parser, RTL generator, and RTL
39585      definitions, and of the VAX machine description.
39587    * Daniel Towner and Hariharan Sandanagobalane contributed and
39588      maintain the picoChip port.
39590    * Tom Tromey for internationalization support and for his many Java
39591      contributions and libgcj maintainership.
39593    * Lassi Tuura for improvements to config.guess to determine HP
39594      processor types.
39596    * Petter Urkedal for libstdc++ CXXFLAGS, math, and algorithms fixes.
39598    * Andy Vaught for the design and initial implementation of the GNU
39599      Fortran front end.
39601    * Brent Verner for work with the libstdc++ cshadow files and their
39602      associated configure steps.
39604    * Todd Vierling for contributions for NetBSD ports.
39606    * Jonathan Wakely for contributing libstdc++ Doxygen notes and XHTML
39607      guidance.
39609    * Dean Wakerley for converting the install documentation from HTML
39610      to texinfo in time for GCC 3.0.
39612    * Krister Walfridsson for random bug fixes.
39614    * Feng Wang for contributions to GNU Fortran.
39616    * Stephen M. Webb for time and effort on making libstdc++ shadow
39617      files work with the tricky Solaris 8+ headers, and for pushing the
39618      build-time header tree.
39620    * John Wehle for various improvements for the x86 code generator,
39621      related infrastructure improvements to help x86 code generation,
39622      value range propagation and other work, WE32k port.
39624    * Ulrich Weigand for work on the s390 port.
39626    * Zack Weinberg for major work on cpplib and various other bug fixes.
39628    * Matt Welsh for help with Linux Threads support in GCJ.
39630    * Urban Widmark for help fixing java.io.
39632    * Mark Wielaard for new Java library code and his work integrating
39633      with Classpath.
39635    * Dale Wiles helped port GCC to the Tahoe.
39637    * Bob Wilson from Tensilica, Inc. for the Xtensa port.
39639    * Jim Wilson for his direction via the steering committee, tackling
39640      hard problems in various places that nobody else wanted to work
39641      on, strength reduction and other loop optimizations.
39643    * Paul Woegerer and Tal Agmon for the CRX port.
39645    * Carlo Wood for various fixes.
39647    * Tom Wood for work on the m88k port.
39649    * Canqun Yang for work on GNU Fortran.
39651    * Masanobu Yuhara of Fujitsu Laboratories implemented the machine
39652      description for the Tron architecture (specifically, the Gmicro).
39654    * Kevin Zachmann helped port GCC to the Tahoe.
39656    * Ayal Zaks for Swing Modulo Scheduling (SMS).
39658    * Xiaoqiang Zhang for work on GNU Fortran.
39660    * Gilles Zunino for help porting Java to Irix.
39663  The following people are recognized for their contributions to GNAT,
39664 the Ada front end of GCC:
39665    * Bernard Banner
39667    * Romain Berrendonner
39669    * Geert Bosch
39671    * Emmanuel Briot
39673    * Joel Brobecker
39675    * Ben Brosgol
39677    * Vincent Celier
39679    * Arnaud Charlet
39681    * Chien Chieng
39683    * Cyrille Comar
39685    * Cyrille Crozes
39687    * Robert Dewar
39689    * Gary Dismukes
39691    * Robert Duff
39693    * Ed Falis
39695    * Ramon Fernandez
39697    * Sam Figueroa
39699    * Vasiliy Fofanov
39701    * Michael Friess
39703    * Franco Gasperoni
39705    * Ted Giering
39707    * Matthew Gingell
39709    * Laurent Guerby
39711    * Jerome Guitton
39713    * Olivier Hainque
39715    * Jerome Hugues
39717    * Hristian Kirtchev
39719    * Jerome Lambourg
39721    * Bruno Leclerc
39723    * Albert Lee
39725    * Sean McNeil
39727    * Javier Miranda
39729    * Laurent Nana
39731    * Pascal Obry
39733    * Dong-Ik Oh
39735    * Laurent Pautet
39737    * Brett Porter
39739    * Thomas Quinot
39741    * Nicolas Roche
39743    * Pat Rogers
39745    * Jose Ruiz
39747    * Douglas Rupp
39749    * Sergey Rybin
39751    * Gail Schenker
39753    * Ed Schonberg
39755    * Nicolas Setton
39757    * Samuel Tardieu
39760  The following people are recognized for their contributions of new
39761 features, bug reports, testing and integration of classpath/libgcj for
39762 GCC version 4.1:
39763    * Lillian Angel for `JTree' implementation and lots Free Swing
39764      additions and bug fixes.
39766    * Wolfgang Baer for `GapContent' bug fixes.
39768    * Anthony Balkissoon for `JList', Free Swing 1.5 updates and mouse
39769      event fixes, lots of Free Swing work including `JTable' editing.
39771    * Stuart Ballard for RMI constant fixes.
39773    * Goffredo Baroncelli for `HTTPURLConnection' fixes.
39775    * Gary Benson for `MessageFormat' fixes.
39777    * Daniel Bonniot for `Serialization' fixes.
39779    * Chris Burdess for lots of gnu.xml and http protocol fixes, `StAX'
39780      and `DOM xml:id' support.
39782    * Ka-Hing Cheung for `TreePath' and `TreeSelection' fixes.
39784    * Archie Cobbs for build fixes, VM interface updates,
39785      `URLClassLoader' updates.
39787    * Kelley Cook for build fixes.
39789    * Martin Cordova for Suggestions for better `SocketTimeoutException'.
39791    * David Daney for `BitSet' bug fixes, `HttpURLConnection' rewrite
39792      and improvements.
39794    * Thomas Fitzsimmons for lots of upgrades to the gtk+ AWT and Cairo
39795      2D support. Lots of imageio framework additions, lots of AWT and
39796      Free Swing bug fixes.
39798    * Jeroen Frijters for `ClassLoader' and nio cleanups, serialization
39799      fixes, better `Proxy' support, bug fixes and IKVM integration.
39801    * Santiago Gala for `AccessControlContext' fixes.
39803    * Nicolas Geoffray for `VMClassLoader' and `AccessController'
39804      improvements.
39806    * David Gilbert for `basic' and `metal' icon and plaf support and
39807      lots of documenting, Lots of Free Swing and metal theme additions.
39808      `MetalIconFactory' implementation.
39810    * Anthony Green for `MIDI' framework, `ALSA' and `DSSI' providers.
39812    * Andrew Haley for `Serialization' and `URLClassLoader' fixes, gcj
39813      build speedups.
39815    * Kim Ho for `JFileChooser' implementation.
39817    * Andrew John Hughes for `Locale' and net fixes, URI RFC2986
39818      updates, `Serialization' fixes, `Properties' XML support and
39819      generic branch work, VMIntegration guide update.
39821    * Bastiaan Huisman for `TimeZone' bug fixing.
39823    * Andreas Jaeger for mprec updates.
39825    * Paul Jenner for better `-Werror' support.
39827    * Ito Kazumitsu for `NetworkInterface' implementation and updates.
39829    * Roman Kennke for `BoxLayout', `GrayFilter' and `SplitPane', plus
39830      bug fixes all over. Lots of Free Swing work including styled text.
39832    * Simon Kitching for `String' cleanups and optimization suggestions.
39834    * Michael Koch for configuration fixes, `Locale' updates, bug and
39835      build fixes.
39837    * Guilhem Lavaux for configuration, thread and channel fixes and
39838      Kaffe integration. JCL native `Pointer' updates. Logger bug fixes.
39840    * David Lichteblau for JCL support library global/local reference
39841      cleanups.
39843    * Aaron Luchko for JDWP updates and documentation fixes.
39845    * Ziga Mahkovec for `Graphics2D' upgraded to Cairo 0.5 and new regex
39846      features.
39848    * Sven de Marothy for BMP imageio support, CSS and `TextLayout'
39849      fixes. `GtkImage' rewrite, 2D, awt, free swing and date/time fixes
39850      and implementing the Qt4 peers.
39852    * Casey Marshall for crypto algorithm fixes, `FileChannel' lock,
39853      `SystemLogger' and `FileHandler' rotate implementations, NIO
39854      `FileChannel.map' support, security and policy updates.
39856    * Bryce McKinlay for RMI work.
39858    * Audrius Meskauskas for lots of Free Corba, RMI and HTML work plus
39859      testing and documenting.
39861    * Kalle Olavi Niemitalo for build fixes.
39863    * Rainer Orth for build fixes.
39865    * Andrew Overholt for `File' locking fixes.
39867    * Ingo Proetel for `Image', `Logger' and `URLClassLoader' updates.
39869    * Olga Rodimina for `MenuSelectionManager' implementation.
39871    * Jan Roehrich for `BasicTreeUI' and `JTree' fixes.
39873    * Julian Scheid for documentation updates and gjdoc support.
39875    * Christian Schlichtherle for zip fixes and cleanups.
39877    * Robert Schuster for documentation updates and beans fixes,
39878      `TreeNode' enumerations and `ActionCommand' and various fixes, XML
39879      and URL, AWT and Free Swing bug fixes.
39881    * Keith Seitz for lots of JDWP work.
39883    * Christian Thalinger for 64-bit cleanups, Configuration and VM
39884      interface fixes and `CACAO' integration, `fdlibm' updates.
39886    * Gael Thomas for `VMClassLoader' boot packages support suggestions.
39888    * Andreas Tobler for Darwin and Solaris testing and fixing, `Qt4'
39889      support for Darwin/OS X, `Graphics2D' support, `gtk+' updates.
39891    * Dalibor Topic for better `DEBUG' support, build cleanups and Kaffe
39892      integration. `Qt4' build infrastructure, `SHA1PRNG' and
39893      `GdkPixbugDecoder' updates.
39895    * Tom Tromey for Eclipse integration, generics work, lots of bug
39896      fixes and gcj integration including coordinating The Big Merge.
39898    * Mark Wielaard for bug fixes, packaging and release management,
39899      `Clipboard' implementation, system call interrupts and network
39900      timeouts and `GdkPixpufDecoder' fixes.
39903  In addition to the above, all of which also contributed time and
39904 energy in testing GCC, we would like to thank the following for their
39905 contributions to testing:
39907    * Michael Abd-El-Malek
39909    * Thomas Arend
39911    * Bonzo Armstrong
39913    * Steven Ashe
39915    * Chris Baldwin
39917    * David Billinghurst
39919    * Jim Blandy
39921    * Stephane Bortzmeyer
39923    * Horst von Brand
39925    * Frank Braun
39927    * Rodney Brown
39929    * Sidney Cadot
39931    * Bradford Castalia
39933    * Robert Clark
39935    * Jonathan Corbet
39937    * Ralph Doncaster
39939    * Richard Emberson
39941    * Levente Farkas
39943    * Graham Fawcett
39945    * Mark Fernyhough
39947    * Robert A. French
39949    * Jo"rgen Freyh
39951    * Mark K. Gardner
39953    * Charles-Antoine Gauthier
39955    * Yung Shing Gene
39957    * David Gilbert
39959    * Simon Gornall
39961    * Fred Gray
39963    * John Griffin
39965    * Patrik Hagglund
39967    * Phil Hargett
39969    * Amancio Hasty
39971    * Takafumi Hayashi
39973    * Bryan W. Headley
39975    * Kevin B. Hendricks
39977    * Joep Jansen
39979    * Christian Joensson
39981    * Michel Kern
39983    * David Kidd
39985    * Tobias Kuipers
39987    * Anand Krishnaswamy
39989    * A. O. V. Le Blanc
39991    * llewelly
39993    * Damon Love
39995    * Brad Lucier
39997    * Matthias Klose
39999    * Martin Knoblauch
40001    * Rick Lutowski
40003    * Jesse Macnish
40005    * Stefan Morrell
40007    * Anon A. Mous
40009    * Matthias Mueller
40011    * Pekka Nikander
40013    * Rick Niles
40015    * Jon Olson
40017    * Magnus Persson
40019    * Chris Pollard
40021    * Richard Polton
40023    * Derk Reefman
40025    * David Rees
40027    * Paul Reilly
40029    * Tom Reilly
40031    * Torsten Rueger
40033    * Danny Sadinoff
40035    * Marc Schifer
40037    * Erik Schnetter
40039    * Wayne K. Schroll
40041    * David Schuler
40043    * Vin Shelton
40045    * Tim Souder
40047    * Adam Sulmicki
40049    * Bill Thorson
40051    * George Talbot
40053    * Pedro A. M. Vazquez
40055    * Gregory Warnes
40057    * Ian Watson
40059    * David E. Young
40061    * And many others
40063  And finally we'd like to thank everyone who uses the compiler, provides
40064 feedback and generally reminds us why we're doing this work in the first
40065 place.
40067 \x1f
40068 File: gcc.info,  Node: Option Index,  Next: Keyword Index,  Prev: Contributors,  Up: Top
40070 Option Index
40071 ************
40073 GCC's command line options are indexed here without any initial `-' or
40074 `--'.  Where an option has both positive and negative forms (such as
40075 `-fOPTION' and `-fno-OPTION'), relevant entries in the manual are
40076 indexed under the most appropriate form; it may sometimes be useful to
40077 look up both forms.
40079 \0\b[index\0\b]
40080 * Menu:
40082 * ###:                                   Overall Options.    (line  204)
40083 * -fdump-statistics:                     Debugging Options.  (line  611)
40084 * A:                                     Preprocessor Options.
40085                                                              (line  538)
40086 * all_load:                              Darwin Options.     (line  112)
40087 * allowable_client:                      Darwin Options.     (line  199)
40088 * ansi <1>:                              C Dialect Options.  (line   11)
40089 * ansi <2>:                              Standards.          (line   16)
40090 * ansi <3>:                              Non-bugs.           (line  107)
40091 * ansi <4>:                              Other Builtins.     (line   22)
40092 * ansi:                                  Preprocessor Options.
40093                                                              (line  325)
40094 * arch_errors_fatal:                     Darwin Options.     (line  116)
40095 * aux-info:                              C Dialect Options.  (line  140)
40096 * b:                                     Target Options.     (line   13)
40097 * B:                                     Directory Options.  (line   41)
40098 * bcopy-builtin:                         PDP-11 Options.     (line   32)
40099 * Bdynamic:                              VxWorks Options.    (line   22)
40100 * bind_at_load:                          Darwin Options.     (line  120)
40101 * Bstatic:                               VxWorks Options.    (line   22)
40102 * bundle:                                Darwin Options.     (line  125)
40103 * bundle_loader:                         Darwin Options.     (line  129)
40104 * c <1>:                                 Link Options.       (line   20)
40105 * c:                                     Overall Options.    (line  159)
40106 * C:                                     Preprocessor Options.
40107                                                              (line  596)
40108 * client_name:                           Darwin Options.     (line  199)
40109 * combine:                               Overall Options.    (line  215)
40110 * compatibility_version:                 Darwin Options.     (line  199)
40111 * coverage:                              Debugging Options.  (line  264)
40112 * current_version:                       Darwin Options.     (line  199)
40113 * D:                                     Preprocessor Options.
40114                                                              (line   33)
40115 * d:                                     Debugging Options.  (line  328)
40116 * dA:                                    Debugging Options.  (line  530)
40117 * dD <1>:                                Debugging Options.  (line  534)
40118 * dD:                                    Preprocessor Options.
40119                                                              (line  570)
40120 * dead_strip:                            Darwin Options.     (line  199)
40121 * dependency-file:                       Darwin Options.     (line  199)
40122 * dH:                                    Debugging Options.  (line  538)
40123 * dI:                                    Preprocessor Options.
40124                                                              (line  579)
40125 * dm:                                    Debugging Options.  (line  541)
40126 * dM:                                    Preprocessor Options.
40127                                                              (line  554)
40128 * dN:                                    Preprocessor Options.
40129                                                              (line  576)
40130 * dP:                                    Debugging Options.  (line  550)
40131 * dp:                                    Debugging Options.  (line  545)
40132 * dU:                                    Preprocessor Options.
40133                                                              (line  583)
40134 * dumpmachine:                           Debugging Options.  (line  938)
40135 * dumpspecs:                             Debugging Options.  (line  946)
40136 * dumpversion:                           Debugging Options.  (line  942)
40137 * dv:                                    Debugging Options.  (line  554)
40138 * dx:                                    Debugging Options.  (line  559)
40139 * dy:                                    Debugging Options.  (line  563)
40140 * dylib_file:                            Darwin Options.     (line  199)
40141 * dylinker_install_name:                 Darwin Options.     (line  199)
40142 * dynamic:                               Darwin Options.     (line  199)
40143 * dynamiclib:                            Darwin Options.     (line  133)
40144 * E <1>:                                 Link Options.       (line   20)
40145 * E:                                     Overall Options.    (line  180)
40146 * EB <1>:                                ARC Options.        (line   12)
40147 * EB:                                    MIPS Options.       (line    7)
40148 * EL <1>:                                ARC Options.        (line    9)
40149 * EL:                                    MIPS Options.       (line   10)
40150 * exported_symbols_list:                 Darwin Options.     (line  199)
40151 * F:                                     Darwin Options.     (line   32)
40152 * fabi-version:                          C++ Dialect Options.
40153                                                              (line   20)
40154 * falign-functions:                      Optimize Options.   (line 1184)
40155 * falign-jumps:                          Optimize Options.   (line 1234)
40156 * falign-labels:                         Optimize Options.   (line 1202)
40157 * falign-loops:                          Optimize Options.   (line 1220)
40158 * fargument-alias:                       Code Gen Options.   (line  413)
40159 * fargument-noalias:                     Code Gen Options.   (line  413)
40160 * fargument-noalias-anything:            Code Gen Options.   (line  413)
40161 * fargument-noalias-global:              Code Gen Options.   (line  413)
40162 * fassociative-math:                     Optimize Options.   (line 1411)
40163 * fasynchronous-unwind-tables:           Code Gen Options.   (line   64)
40164 * fauto-inc-dec:                         Optimize Options.   (line  455)
40165 * fbounds-check:                         Code Gen Options.   (line   15)
40166 * fbranch-probabilities:                 Optimize Options.   (line 1544)
40167 * fbranch-target-load-optimize:          Optimize Options.   (line 1652)
40168 * fbranch-target-load-optimize2:         Optimize Options.   (line 1658)
40169 * fbtr-bb-exclusive:                     Optimize Options.   (line 1662)
40170 * fcall-saved:                           Code Gen Options.   (line  262)
40171 * fcall-used:                            Code Gen Options.   (line  248)
40172 * fcaller-saves:                         Optimize Options.   (line  676)
40173 * fcheck-data-deps:                      Optimize Options.   (line  897)
40174 * fcheck-new:                            C++ Dialect Options.
40175                                                              (line   34)
40176 * fcommon:                               Variable Attributes.
40177                                                              (line  105)
40178 * fcond-mismatch:                        C Dialect Options.  (line  258)
40179 * fconserve-space:                       C++ Dialect Options.
40180                                                              (line   44)
40181 * fconserve-stack:                       Optimize Options.   (line  689)
40182 * fconstant-string-class:                Objective-C and Objective-C++ Dialect Options.
40183                                                              (line   30)
40184 * fcprop-registers:                      Optimize Options.   (line 1292)
40185 * fcrossjumping:                         Optimize Options.   (line  448)
40186 * fcse-follow-jumps:                     Optimize Options.   (line  376)
40187 * fcse-skip-blocks:                      Optimize Options.   (line  385)
40188 * fcx-fortran-rules:                     Optimize Options.   (line 1530)
40189 * fcx-limited-range:                     Optimize Options.   (line 1518)
40190 * fdata-sections:                        Optimize Options.   (line 1633)
40191 * fdbg-cnt:                              Debugging Options.  (line  317)
40192 * fdbg-cnt-list:                         Debugging Options.  (line  314)
40193 * fdce:                                  Optimize Options.   (line  461)
40194 * fdebug-prefix-map:                     Debugging Options.  (line  211)
40195 * fdelayed-branch:                       Optimize Options.   (line  557)
40196 * fdelete-null-pointer-checks:           Optimize Options.   (line  484)
40197 * fdiagnostics-show-location:            Language Independent Options.
40198                                                              (line   21)
40199 * fdiagnostics-show-option:              Language Independent Options.
40200                                                              (line   36)
40201 * fdirectives-only:                      Preprocessor Options.
40202                                                              (line  446)
40203 * fdollars-in-identifiers <1>:           Preprocessor Options.
40204                                                              (line  468)
40205 * fdollars-in-identifiers:               Interoperation.     (line  146)
40206 * fdse:                                  Optimize Options.   (line  465)
40207 * fdump-class-hierarchy:                 Debugging Options.  (line  587)
40208 * fdump-ipa:                             Debugging Options.  (line  594)
40209 * fdump-noaddr:                          Debugging Options.  (line  566)
40210 * fdump-rtl-alignments:                  Debugging Options.  (line  342)
40211 * fdump-rtl-all:                         Debugging Options.  (line  527)
40212 * fdump-rtl-asmcons:                     Debugging Options.  (line  345)
40213 * fdump-rtl-auto_inc_dec:                Debugging Options.  (line  349)
40214 * fdump-rtl-barriers:                    Debugging Options.  (line  353)
40215 * fdump-rtl-bbpart:                      Debugging Options.  (line  356)
40216 * fdump-rtl-bbro:                        Debugging Options.  (line  359)
40217 * fdump-rtl-btl2:                        Debugging Options.  (line  363)
40218 * fdump-rtl-bypass:                      Debugging Options.  (line  367)
40219 * fdump-rtl-ce1:                         Debugging Options.  (line  378)
40220 * fdump-rtl-ce2:                         Debugging Options.  (line  378)
40221 * fdump-rtl-ce3:                         Debugging Options.  (line  378)
40222 * fdump-rtl-combine:                     Debugging Options.  (line  370)
40223 * fdump-rtl-compgotos:                   Debugging Options.  (line  373)
40224 * fdump-rtl-cprop_hardreg:               Debugging Options.  (line  382)
40225 * fdump-rtl-csa:                         Debugging Options.  (line  385)
40226 * fdump-rtl-cse1:                        Debugging Options.  (line  389)
40227 * fdump-rtl-cse2:                        Debugging Options.  (line  389)
40228 * fdump-rtl-dbr:                         Debugging Options.  (line  396)
40229 * fdump-rtl-dce:                         Debugging Options.  (line  393)
40230 * fdump-rtl-dce1:                        Debugging Options.  (line  400)
40231 * fdump-rtl-dce2:                        Debugging Options.  (line  400)
40232 * fdump-rtl-dfinish:                     Debugging Options.  (line  524)
40233 * fdump-rtl-dfinit:                      Debugging Options.  (line  524)
40234 * fdump-rtl-eh:                          Debugging Options.  (line  404)
40235 * fdump-rtl-eh_ranges:                   Debugging Options.  (line  407)
40236 * fdump-rtl-expand:                      Debugging Options.  (line  410)
40237 * fdump-rtl-fwprop1:                     Debugging Options.  (line  414)
40238 * fdump-rtl-fwprop2:                     Debugging Options.  (line  414)
40239 * fdump-rtl-gcse1:                       Debugging Options.  (line  419)
40240 * fdump-rtl-gcse2:                       Debugging Options.  (line  419)
40241 * fdump-rtl-init-regs:                   Debugging Options.  (line  423)
40242 * fdump-rtl-initvals:                    Debugging Options.  (line  426)
40243 * fdump-rtl-into_cfglayout:              Debugging Options.  (line  429)
40244 * fdump-rtl-ira:                         Debugging Options.  (line  432)
40245 * fdump-rtl-jump:                        Debugging Options.  (line  435)
40246 * fdump-rtl-loop2:                       Debugging Options.  (line  438)
40247 * fdump-rtl-mach:                        Debugging Options.  (line  442)
40248 * fdump-rtl-mode_sw:                     Debugging Options.  (line  446)
40249 * fdump-rtl-outof_cfglayout:             Debugging Options.  (line  452)
40250 * fdump-rtl-peephole2:                   Debugging Options.  (line  455)
40251 * fdump-rtl-postreload:                  Debugging Options.  (line  458)
40252 * fdump-rtl-pro_and_epilogue:            Debugging Options.  (line  461)
40253 * fdump-rtl-regclass:                    Debugging Options.  (line  524)
40254 * fdump-rtl-regmove:                     Debugging Options.  (line  464)
40255 * fdump-rtl-rnreg:                       Debugging Options.  (line  449)
40256 * fdump-rtl-sched1:                      Debugging Options.  (line  468)
40257 * fdump-rtl-sched2:                      Debugging Options.  (line  468)
40258 * fdump-rtl-see:                         Debugging Options.  (line  472)
40259 * fdump-rtl-seqabstr:                    Debugging Options.  (line  475)
40260 * fdump-rtl-shorten:                     Debugging Options.  (line  478)
40261 * fdump-rtl-sibling:                     Debugging Options.  (line  481)
40262 * fdump-rtl-sms:                         Debugging Options.  (line  494)
40263 * fdump-rtl-split1:                      Debugging Options.  (line  488)
40264 * fdump-rtl-split2:                      Debugging Options.  (line  488)
40265 * fdump-rtl-split3:                      Debugging Options.  (line  488)
40266 * fdump-rtl-split4:                      Debugging Options.  (line  488)
40267 * fdump-rtl-split5:                      Debugging Options.  (line  488)
40268 * fdump-rtl-stack:                       Debugging Options.  (line  498)
40269 * fdump-rtl-subreg1:                     Debugging Options.  (line  504)
40270 * fdump-rtl-subreg2:                     Debugging Options.  (line  504)
40271 * fdump-rtl-subregs_of_mode_finish:      Debugging Options.  (line  524)
40272 * fdump-rtl-subregs_of_mode_init:        Debugging Options.  (line  524)
40273 * fdump-rtl-unshare:                     Debugging Options.  (line  508)
40274 * fdump-rtl-vartrack:                    Debugging Options.  (line  511)
40275 * fdump-rtl-vregs:                       Debugging Options.  (line  514)
40276 * fdump-rtl-web:                         Debugging Options.  (line  517)
40277 * fdump-translation-unit:                Debugging Options.  (line  579)
40278 * fdump-tree:                            Debugging Options.  (line  621)
40279 * fdump-tree-alias:                      Debugging Options.  (line  705)
40280 * fdump-tree-all:                        Debugging Options.  (line  790)
40281 * fdump-tree-ccp:                        Debugging Options.  (line  709)
40282 * fdump-tree-cfg:                        Debugging Options.  (line  685)
40283 * fdump-tree-ch:                         Debugging Options.  (line  697)
40284 * fdump-tree-copyprop:                   Debugging Options.  (line  725)
40285 * fdump-tree-copyrename:                 Debugging Options.  (line  771)
40286 * fdump-tree-dce:                        Debugging Options.  (line  733)
40287 * fdump-tree-dom:                        Debugging Options.  (line  751)
40288 * fdump-tree-dse:                        Debugging Options.  (line  756)
40289 * fdump-tree-forwprop:                   Debugging Options.  (line  766)
40290 * fdump-tree-fre:                        Debugging Options.  (line  721)
40291 * fdump-tree-gimple:                     Debugging Options.  (line  680)
40292 * fdump-tree-mudflap:                    Debugging Options.  (line  737)
40293 * fdump-tree-nrv:                        Debugging Options.  (line  776)
40294 * fdump-tree-phiopt:                     Debugging Options.  (line  761)
40295 * fdump-tree-pre:                        Debugging Options.  (line  717)
40296 * fdump-tree-sink:                       Debugging Options.  (line  747)
40297 * fdump-tree-sra:                        Debugging Options.  (line  742)
40298 * fdump-tree-ssa:                        Debugging Options.  (line  701)
40299 * fdump-tree-store_copyprop:             Debugging Options.  (line  729)
40300 * fdump-tree-storeccp:                   Debugging Options.  (line  713)
40301 * fdump-tree-vcg:                        Debugging Options.  (line  689)
40302 * fdump-tree-vect:                       Debugging Options.  (line  781)
40303 * fdump-tree-vrp:                        Debugging Options.  (line  786)
40304 * fdump-unnumbered:                      Debugging Options.  (line  572)
40305 * fdwarf2-cfi-asm:                       Debugging Options.  (line  215)
40306 * fearly-inlining:                       Optimize Options.   (line  220)
40307 * feliminate-dwarf2-dups:                Debugging Options.  (line  128)
40308 * feliminate-unused-debug-symbols:       Debugging Options.  (line   52)
40309 * feliminate-unused-debug-types:         Debugging Options.  (line  950)
40310 * fexceptions:                           Code Gen Options.   (line   34)
40311 * fexec-charset:                         Preprocessor Options.
40312                                                              (line  495)
40313 * fexpensive-optimizations:              Optimize Options.   (line  497)
40314 * fextended-identifiers:                 Preprocessor Options.
40315                                                              (line  471)
40316 * ffast-math:                            Optimize Options.   (line 1362)
40317 * ffinite-math-only:                     Optimize Options.   (line 1435)
40318 * ffix-and-continue:                     Darwin Options.     (line  106)
40319 * ffixed:                                Code Gen Options.   (line  236)
40320 * ffloat-store <1>:                      Disappointments.    (line   77)
40321 * ffloat-store:                          Optimize Options.   (line 1348)
40322 * ffor-scope:                            C++ Dialect Options.
40323                                                              (line   86)
40324 * fforward-propagate:                    Optimize Options.   (line  149)
40325 * ffreestanding <1>:                     Function Attributes.
40326                                                              (line  412)
40327 * ffreestanding <2>:                     Standards.          (line   84)
40328 * ffreestanding <3>:                     Warning Options.    (line  194)
40329 * ffreestanding:                         C Dialect Options.  (line  211)
40330 * ffriend-injection:                     C++ Dialect Options.
40331                                                              (line   56)
40332 * ffunction-sections:                    Optimize Options.   (line 1633)
40333 * fgcse:                                 Optimize Options.   (line  399)
40334 * fgcse-after-reload:                    Optimize Options.   (line  435)
40335 * fgcse-las:                             Optimize Options.   (line  428)
40336 * fgcse-lm:                              Optimize Options.   (line  410)
40337 * fgcse-sm:                              Optimize Options.   (line  419)
40338 * fgnu-runtime:                          Objective-C and Objective-C++ Dialect Options.
40339                                                              (line   39)
40340 * fgnu89-inline:                         C Dialect Options.  (line  120)
40341 * fhosted:                               C Dialect Options.  (line  204)
40342 * fif-conversion:                        Optimize Options.   (line  469)
40343 * fif-conversion2:                       Optimize Options.   (line  478)
40344 * filelist:                              Darwin Options.     (line  199)
40345 * findirect-data:                        Darwin Options.     (line  106)
40346 * findirect-inlining:                    Optimize Options.   (line  193)
40347 * finhibit-size-directive:               Code Gen Options.   (line  158)
40348 * finline-functions:                     Optimize Options.   (line  201)
40349 * finline-functions-called-once:         Optimize Options.   (line  212)
40350 * finline-limit:                         Optimize Options.   (line  230)
40351 * finline-small-functions:               Optimize Options.   (line  185)
40352 * finput-charset:                        Preprocessor Options.
40353                                                              (line  508)
40354 * finstrument-functions <1>:             Code Gen Options.   (line  292)
40355 * finstrument-functions:                 Function Attributes.
40356                                                              (line  712)
40357 * finstrument-functions-exclude-file-list: Code Gen Options. (line  329)
40358 * finstrument-functions-exclude-function-list: Code Gen Options.
40359                                                              (line  347)
40360 * fipa-cp:                               Optimize Options.   (line  742)
40361 * fipa-cp-clone:                         Optimize Options.   (line  750)
40362 * fipa-matrix-reorg:                     Optimize Options.   (line  760)
40363 * fipa-pta:                              Optimize Options.   (line  738)
40364 * fipa-pure-const:                       Optimize Options.   (line  715)
40365 * fipa-reference:                        Optimize Options.   (line  719)
40366 * fipa-struct-reorg:                     Optimize Options.   (line  723)
40367 * fira-coalesce:                         Optimize Options.   (line  536)
40368 * fira-verbose:                          Optimize Options.   (line  552)
40369 * fivopts:                               Optimize Options.   (line  933)
40370 * fkeep-inline-functions <1>:            Optimize Options.   (line  256)
40371 * fkeep-inline-functions:                Inline.             (line   51)
40372 * fkeep-static-consts:                   Optimize Options.   (line  263)
40373 * flat_namespace:                        Darwin Options.     (line  199)
40374 * flax-vector-conversions:               C Dialect Options.  (line  263)
40375 * fleading-underscore:                   Code Gen Options.   (line  430)
40376 * fmem-report:                           Debugging Options.  (line  239)
40377 * fmerge-all-constants:                  Optimize Options.   (line  282)
40378 * fmerge-constants:                      Optimize Options.   (line  272)
40379 * fmerge-debug-strings:                  Debugging Options.  (line  203)
40380 * fmessage-length:                       Language Independent Options.
40381                                                              (line   15)
40382 * fmodulo-sched:                         Optimize Options.   (line  293)
40383 * fmodulo-sched-allow-regmoves:          Optimize Options.   (line  298)
40384 * fmove-loop-invariants:                 Optimize Options.   (line 1623)
40385 * fms-extensions <1>:                    C++ Dialect Options.
40386                                                              (line  121)
40387 * fms-extensions <2>:                    C Dialect Options.  (line  229)
40388 * fms-extensions:                        Unnamed Fields.     (line   37)
40389 * fmudflap:                              Optimize Options.   (line  338)
40390 * fmudflapir:                            Optimize Options.   (line  338)
40391 * fmudflapth:                            Optimize Options.   (line  338)
40392 * fnext-runtime:                         Objective-C and Objective-C++ Dialect Options.
40393                                                              (line   43)
40394 * fno-access-control:                    C++ Dialect Options.
40395                                                              (line   30)
40396 * fno-asm:                               C Dialect Options.  (line  156)
40397 * fno-branch-count-reg:                  Optimize Options.   (line  305)
40398 * fno-builtin <1>:                       Function Attributes.
40399                                                              (line  412)
40400 * fno-builtin <2>:                       C Dialect Options.  (line  170)
40401 * fno-builtin <3>:                       Warning Options.    (line  194)
40402 * fno-builtin:                           Other Builtins.     (line   14)
40403 * fno-common <1>:                        Variable Attributes.
40404                                                              (line  105)
40405 * fno-common:                            Code Gen Options.   (line  135)
40406 * fno-default-inline <1>:                C++ Dialect Options.
40407                                                              (line  262)
40408 * fno-default-inline <2>:                Optimize Options.   (line  134)
40409 * fno-default-inline:                    Inline.             (line   71)
40410 * fno-defer-pop:                         Optimize Options.   (line  141)
40411 * fno-dwarf2-cfi-asm:                    Debugging Options.  (line  215)
40412 * fno-elide-constructors:                C++ Dialect Options.
40413                                                              (line   69)
40414 * fno-enforce-eh-specs:                  C++ Dialect Options.
40415                                                              (line   75)
40416 * fno-for-scope:                         C++ Dialect Options.
40417                                                              (line   86)
40418 * fno-function-cse:                      Optimize Options.   (line  315)
40419 * fno-gnu-keywords:                      C++ Dialect Options.
40420                                                              (line   98)
40421 * fno-guess-branch-probability:          Optimize Options.   (line 1056)
40422 * fno-ident:                             Code Gen Options.   (line  155)
40423 * fno-implement-inlines <1>:             C++ Interface.      (line   75)
40424 * fno-implement-inlines:                 C++ Dialect Options.
40425                                                              (line  115)
40426 * fno-implicit-inline-templates:         C++ Dialect Options.
40427                                                              (line  109)
40428 * fno-implicit-templates <1>:            Template Instantiation.
40429                                                              (line   87)
40430 * fno-implicit-templates:                C++ Dialect Options.
40431                                                              (line  103)
40432 * fno-inline:                            Optimize Options.   (line  179)
40433 * fno-ira-share-save-slots:              Optimize Options.   (line  540)
40434 * fno-ira-share-spill-slots:             Optimize Options.   (line  546)
40435 * fno-jump-tables:                       Code Gen Options.   (line  228)
40436 * fno-math-errno:                        Optimize Options.   (line 1376)
40437 * fno-merge-debug-strings:               Debugging Options.  (line  203)
40438 * fno-nil-receivers:                     Objective-C and Objective-C++ Dialect Options.
40439                                                              (line   49)
40440 * fno-nonansi-builtins:                  C++ Dialect Options.
40441                                                              (line  126)
40442 * fno-operator-names:                    C++ Dialect Options.
40443                                                              (line  131)
40444 * fno-optional-diags:                    C++ Dialect Options.
40445                                                              (line  135)
40446 * fno-peephole:                          Optimize Options.   (line 1047)
40447 * fno-peephole2:                         Optimize Options.   (line 1047)
40448 * fno-rtti:                              C++ Dialect Options.
40449                                                              (line  150)
40450 * fno-sched-interblock:                  Optimize Options.   (line  583)
40451 * fno-sched-spec:                        Optimize Options.   (line  588)
40452 * fno-show-column:                       Preprocessor Options.
40453                                                              (line  533)
40454 * fno-signed-bitfields:                  C Dialect Options.  (line  296)
40455 * fno-signed-zeros:                      Optimize Options.   (line 1447)
40456 * fno-stack-limit:                       Code Gen Options.   (line  396)
40457 * fno-threadsafe-statics:                C++ Dialect Options.
40458                                                              (line  172)
40459 * fno-toplevel-reorder:                  Optimize Options.   (line 1254)
40460 * fno-trapping-math:                     Optimize Options.   (line 1457)
40461 * fno-unsigned-bitfields:                C Dialect Options.  (line  296)
40462 * fno-use-cxa-get-exception-ptr:         C++ Dialect Options.
40463                                                              (line  185)
40464 * fno-weak:                              C++ Dialect Options.
40465                                                              (line  247)
40466 * fno-working-directory:                 Preprocessor Options.
40467                                                              (line  518)
40468 * fno-zero-initialized-in-bss:           Optimize Options.   (line  326)
40469 * fnon-call-exceptions:                  Code Gen Options.   (line   48)
40470 * fobjc-call-cxx-cdtors:                 Objective-C and Objective-C++ Dialect Options.
40471                                                              (line   56)
40472 * fobjc-direct-dispatch:                 Objective-C and Objective-C++ Dialect Options.
40473                                                              (line   81)
40474 * fobjc-exceptions:                      Objective-C and Objective-C++ Dialect Options.
40475                                                              (line   85)
40476 * fobjc-gc:                              Objective-C and Objective-C++ Dialect Options.
40477                                                              (line  170)
40478 * fomit-frame-pointer:                   Optimize Options.   (line  158)
40479 * fopenmp:                               C Dialect Options.  (line  221)
40480 * foptimize-register-move:               Optimize Options.   (line  504)
40481 * foptimize-sibling-calls:               Optimize Options.   (line  174)
40482 * force_cpusubtype_ALL:                  Darwin Options.     (line  138)
40483 * force_flat_namespace:                  Darwin Options.     (line  199)
40484 * fpack-struct:                          Code Gen Options.   (line  279)
40485 * fpcc-struct-return <1>:                Code Gen Options.   (line   70)
40486 * fpcc-struct-return:                    Incompatibilities.  (line  170)
40487 * fpch-deps:                             Preprocessor Options.
40488                                                              (line  281)
40489 * fpch-preprocess:                       Preprocessor Options.
40490                                                              (line  289)
40491 * fpeel-loops:                           Optimize Options.   (line 1615)
40492 * fpermissive:                           C++ Dialect Options.
40493                                                              (line  140)
40494 * fpic:                                  Code Gen Options.   (line  184)
40495 * fPIC:                                  Code Gen Options.   (line  205)
40496 * fpie:                                  Code Gen Options.   (line  218)
40497 * fPIE:                                  Code Gen Options.   (line  218)
40498 * fpost-ipa-mem-report:                  Debugging Options.  (line  245)
40499 * fpre-ipa-mem-report:                   Debugging Options.  (line  243)
40500 * fpredictive-commoning:                 Optimize Options.   (line 1029)
40501 * fprefetch-loop-arrays:                 Optimize Options.   (line 1036)
40502 * fpreprocessed:                         Preprocessor Options.
40503                                                              (line  476)
40504 * fprofile-arcs <1>:                     Other Builtins.     (line  242)
40505 * fprofile-arcs:                         Debugging Options.  (line  249)
40506 * fprofile-correction:                   Optimize Options.   (line 1299)
40507 * fprofile-dir:                          Optimize Options.   (line 1306)
40508 * fprofile-generate:                     Optimize Options.   (line 1316)
40509 * fprofile-use:                          Optimize Options.   (line 1329)
40510 * fprofile-values:                       Optimize Options.   (line 1563)
40511 * frandom-string:                        Debugging Options.  (line  819)
40512 * freciprocal-math:                      Optimize Options.   (line 1426)
40513 * frecord-gcc-switches:                  Code Gen Options.   (line  174)
40514 * freg-struct-return:                    Code Gen Options.   (line   88)
40515 * fregmove:                              Optimize Options.   (line  504)
40516 * frename-registers:                     Optimize Options.   (line 1582)
40517 * freorder-blocks:                       Optimize Options.   (line 1073)
40518 * freorder-blocks-and-partition:         Optimize Options.   (line 1079)
40519 * freorder-functions:                    Optimize Options.   (line 1090)
40520 * freplace-objc-classes:                 Objective-C and Objective-C++ Dialect Options.
40521                                                              (line  174)
40522 * frepo <1>:                             Template Instantiation.
40523                                                              (line   62)
40524 * frepo:                                 C++ Dialect Options.
40525                                                              (line  145)
40526 * frerun-cse-after-loop:                 Optimize Options.   (line  393)
40527 * freschedule-modulo-scheduled-loops:    Optimize Options.   (line  652)
40528 * frounding-math:                        Optimize Options.   (line 1472)
40529 * frtl-abstract-sequences:               Optimize Options.   (line 1492)
40530 * fsched-spec-load:                      Optimize Options.   (line  593)
40531 * fsched-spec-load-dangerous:            Optimize Options.   (line  598)
40532 * fsched-stalled-insns:                  Optimize Options.   (line  604)
40533 * fsched-stalled-insns-dep:              Optimize Options.   (line  614)
40534 * fsched-verbose:                        Debugging Options.  (line  829)
40535 * fsched2-use-superblocks:               Optimize Options.   (line  624)
40536 * fsched2-use-traces:                    Optimize Options.   (line  635)
40537 * fschedule-insns:                       Optimize Options.   (line  564)
40538 * fschedule-insns2:                      Optimize Options.   (line  574)
40539 * fsection-anchors:                      Optimize Options.   (line 1678)
40540 * fsee:                                  Optimize Options.   (line  647)
40541 * fsel-sched-pipelining:                 Optimize Options.   (line  666)
40542 * fsel-sched-pipelining-outer-loops:     Optimize Options.   (line  671)
40543 * fselective-scheduling:                 Optimize Options.   (line  658)
40544 * fselective-scheduling2:                Optimize Options.   (line  662)
40545 * fshort-double:                         Code Gen Options.   (line  117)
40546 * fshort-enums <1>:                      Non-bugs.           (line   42)
40547 * fshort-enums <2>:                      Structures unions enumerations and bit-fields implementation.
40548                                                              (line   43)
40549 * fshort-enums <3>:                      Code Gen Options.   (line  106)
40550 * fshort-enums:                          Type Attributes.    (line  113)
40551 * fshort-wchar:                          Code Gen Options.   (line  125)
40552 * fsignaling-nans:                       Optimize Options.   (line 1499)
40553 * fsigned-bitfields <1>:                 Non-bugs.           (line   57)
40554 * fsigned-bitfields:                     C Dialect Options.  (line  296)
40555 * fsigned-char <1>:                      C Dialect Options.  (line  286)
40556 * fsigned-char:                          Characters implementation.
40557                                                              (line   31)
40558 * fsingle-precision-constant:            Optimize Options.   (line 1514)
40559 * fsplit-ivs-in-unroller:                Optimize Options.   (line 1010)
40560 * fsplit-wide-types:                     Optimize Options.   (line  368)
40561 * fstack-check:                          Code Gen Options.   (line  357)
40562 * fstack-limit-register:                 Code Gen Options.   (line  396)
40563 * fstack-limit-symbol:                   Code Gen Options.   (line  396)
40564 * fstack-protector:                      Optimize Options.   (line 1666)
40565 * fstack-protector-all:                  Optimize Options.   (line 1675)
40566 * fstats:                                C++ Dialect Options.
40567                                                              (line  160)
40568 * fstrict-aliasing:                      Optimize Options.   (line 1103)
40569 * fstrict-overflow:                      Optimize Options.   (line 1149)
40570 * fsyntax-only:                          Warning Options.    (line   14)
40571 * ftabstop:                              Preprocessor Options.
40572                                                              (line  489)
40573 * ftemplate-depth:                       C++ Dialect Options.
40574                                                              (line  165)
40575 * ftest-coverage:                        Debugging Options.  (line  305)
40576 * fthread-jumps:                         Optimize Options.   (line  359)
40577 * ftime-report:                          Debugging Options.  (line  235)
40578 * ftls-model:                            Code Gen Options.   (line  441)
40579 * ftracer:                               Optimize Options.   (line  993)
40580 * ftrapv:                                Code Gen Options.   (line   22)
40581 * ftree-builtin-call-dce:                Optimize Options.   (line  788)
40582 * ftree-ccp:                             Optimize Options.   (line  774)
40583 * ftree-ch:                              Optimize Options.   (line  808)
40584 * ftree-copy-prop:                       Optimize Options.   (line  710)
40585 * ftree-copyrename:                      Optimize Options.   (line  953)
40586 * ftree-dce:                             Optimize Options.   (line  784)
40587 * ftree-dominator-opts:                  Optimize Options.   (line  794)
40588 * ftree-dse:                             Optimize Options.   (line  801)
40589 * ftree-fre:                             Optimize Options.   (line  703)
40590 * ftree-loop-im:                         Optimize Options.   (line  918)
40591 * ftree-loop-ivcanon:                    Optimize Options.   (line  927)
40592 * ftree-loop-linear:                     Optimize Options.   (line  819)
40593 * ftree-loop-optimize:                   Optimize Options.   (line  815)
40594 * ftree-parallelize-loops:               Optimize Options.   (line  938)
40595 * ftree-pre:                             Optimize Options.   (line  699)
40596 * ftree-reassoc:                         Optimize Options.   (line  695)
40597 * ftree-sink:                            Optimize Options.   (line  770)
40598 * ftree-sra:                             Optimize Options.   (line  947)
40599 * ftree-ter:                             Optimize Options.   (line  960)
40600 * ftree-vect-loop-version:               Optimize Options.   (line  972)
40601 * ftree-vectorize:                       Optimize Options.   (line  968)
40602 * ftree-vectorizer-verbose:              Debugging Options.  (line  794)
40603 * ftree-vrp:                             Optimize Options.   (line  984)
40604 * funit-at-a-time:                       Optimize Options.   (line 1247)
40605 * funroll-all-loops:                     Optimize Options.   (line 1609)
40606 * funroll-loops:                         Optimize Options.   (line 1599)
40607 * funsafe-loop-optimizations:            Optimize Options.   (line  440)
40608 * funsafe-math-optimizations:            Optimize Options.   (line 1394)
40609 * funsigned-bitfields <1>:               Non-bugs.           (line   57)
40610 * funsigned-bitfields <2>:               C Dialect Options.  (line  296)
40611 * funsigned-bitfields:                   Structures unions enumerations and bit-fields implementation.
40612                                                              (line   17)
40613 * funsigned-char <1>:                    Characters implementation.
40614                                                              (line   31)
40615 * funsigned-char:                        C Dialect Options.  (line  268)
40616 * funswitch-loops:                       Optimize Options.   (line 1627)
40617 * funwind-tables:                        Code Gen Options.   (line   57)
40618 * fuse-cxa-atexit:                       C++ Dialect Options.
40619                                                              (line  178)
40620 * fvar-tracking:                         Debugging Options.  (line  874)
40621 * fvariable-expansion-in-unroller:       Optimize Options.   (line 1024)
40622 * fvect-cost-model:                      Optimize Options.   (line  981)
40623 * fverbose-asm:                          Code Gen Options.   (line  165)
40624 * fvisibility:                           Code Gen Options.   (line  449)
40625 * fvisibility-inlines-hidden:            C++ Dialect Options.
40626                                                              (line  190)
40627 * fvisibility-ms-compat:                 C++ Dialect Options.
40628                                                              (line  218)
40629 * fvpt:                                  Optimize Options.   (line 1573)
40630 * fweb:                                  Optimize Options.   (line 1266)
40631 * fwhole-program:                        Optimize Options.   (line 1277)
40632 * fwide-exec-charset:                    Preprocessor Options.
40633                                                              (line  500)
40634 * fworking-directory:                    Preprocessor Options.
40635                                                              (line  518)
40636 * fwrapv:                                Code Gen Options.   (line   26)
40637 * fzero-link:                            Objective-C and Objective-C++ Dialect Options.
40638                                                              (line  184)
40639 * G <1>:                                 MIPS Options.       (line  314)
40640 * G <2>:                                 System V Options.   (line   10)
40641 * G:                                     M32R/D Options.     (line   57)
40642 * g:                                     Debugging Options.  (line   10)
40643 * G:                                     RS/6000 and PowerPC Options.
40644                                                              (line  663)
40645 * gcoff:                                 Debugging Options.  (line   70)
40646 * gdwarf-2:                              Debugging Options.  (line   88)
40647 * gen-decls:                             Objective-C and Objective-C++ Dialect Options.
40648                                                              (line  194)
40649 * gfull:                                 Darwin Options.     (line   71)
40650 * ggdb:                                  Debugging Options.  (line   38)
40651 * gnu-ld:                                HPPA Options.       (line  111)
40652 * gstabs:                                Debugging Options.  (line   44)
40653 * gstabs+:                               Debugging Options.  (line   64)
40654 * gused:                                 Darwin Options.     (line   66)
40655 * gvms:                                  Debugging Options.  (line   95)
40656 * gxcoff:                                Debugging Options.  (line   75)
40657 * gxcoff+:                               Debugging Options.  (line   80)
40658 * H:                                     Preprocessor Options.
40659                                                              (line  651)
40660 * headerpad_max_install_names:           Darwin Options.     (line  199)
40661 * help <1>:                              Overall Options.    (line  231)
40662 * help:                                  Preprocessor Options.
40663                                                              (line  643)
40664 * hp-ld:                                 HPPA Options.       (line  123)
40665 * I <1>:                                 Directory Options.  (line   10)
40666 * I:                                     Preprocessor Options.
40667                                                              (line   64)
40668 * I- <1>:                                Directory Options.  (line  107)
40669 * I-:                                    Preprocessor Options.
40670                                                              (line  362)
40671 * idirafter:                             Preprocessor Options.
40672                                                              (line  404)
40673 * iframework:                            Darwin Options.     (line   59)
40674 * imacros:                               Preprocessor Options.
40675                                                              (line  395)
40676 * image_base:                            Darwin Options.     (line  199)
40677 * imultilib:                             Preprocessor Options.
40678                                                              (line  427)
40679 * include:                               Preprocessor Options.
40680                                                              (line  384)
40681 * init:                                  Darwin Options.     (line  199)
40682 * install_name:                          Darwin Options.     (line  199)
40683 * iprefix:                               Preprocessor Options.
40684                                                              (line  411)
40685 * iquote <1>:                            Preprocessor Options.
40686                                                              (line  439)
40687 * iquote:                                Directory Options.  (line   31)
40688 * isysroot:                              Preprocessor Options.
40689                                                              (line  423)
40690 * isystem:                               Preprocessor Options.
40691                                                              (line  431)
40692 * iwithprefix:                           Preprocessor Options.
40693                                                              (line  417)
40694 * iwithprefixbefore:                     Preprocessor Options.
40695                                                              (line  417)
40696 * keep_private_externs:                  Darwin Options.     (line  199)
40697 * l:                                     Link Options.       (line   26)
40698 * L:                                     Directory Options.  (line   37)
40699 * lobjc:                                 Link Options.       (line   53)
40700 * M:                                     Preprocessor Options.
40701                                                              (line  172)
40702 * m1:                                    SH Options.         (line    9)
40703 * m10:                                   PDP-11 Options.     (line   29)
40704 * m128bit-long-double:                   i386 and x86-64 Options.
40705                                                              (line  265)
40706 * m16-bit:                               CRIS Options.       (line   64)
40707 * m2:                                    SH Options.         (line   12)
40708 * m210:                                  MCore Options.      (line   43)
40709 * m3:                                    SH Options.         (line   18)
40710 * m31:                                   S/390 and zSeries Options.
40711                                                              (line   87)
40712 * m32 <1>:                               i386 and x86-64 Options.
40713                                                              (line  607)
40714 * m32 <2>:                               SPARC Options.      (line  191)
40715 * m32:                                   RS/6000 and PowerPC Options.
40716                                                              (line  252)
40717 * m32-bit:                               CRIS Options.       (line   64)
40718 * m32r:                                  M32R/D Options.     (line   15)
40719 * m32r2:                                 M32R/D Options.     (line    9)
40720 * m32rx:                                 M32R/D Options.     (line   12)
40721 * m340:                                  MCore Options.      (line   43)
40722 * m3dnow:                                i386 and x86-64 Options.
40723                                                              (line  435)
40724 * m3e:                                   SH Options.         (line   21)
40725 * m4:                                    SH Options.         (line   35)
40726 * m4-nofpu:                              SH Options.         (line   24)
40727 * m4-single:                             SH Options.         (line   31)
40728 * m4-single-only:                        SH Options.         (line   27)
40729 * m40:                                   PDP-11 Options.     (line   23)
40730 * m45:                                   PDP-11 Options.     (line   26)
40731 * m4a:                                   SH Options.         (line   50)
40732 * m4a-nofpu:                             SH Options.         (line   38)
40733 * m4a-single:                            SH Options.         (line   46)
40734 * m4a-single-only:                       SH Options.         (line   42)
40735 * m4al:                                  SH Options.         (line   53)
40736 * m4byte-functions:                      MCore Options.      (line   27)
40737 * m5200:                                 M680x0 Options.     (line  143)
40738 * m5206e:                                M680x0 Options.     (line  152)
40739 * m528x:                                 M680x0 Options.     (line  156)
40740 * m5307:                                 M680x0 Options.     (line  160)
40741 * m5407:                                 M680x0 Options.     (line  164)
40742 * m64 <1>:                               S/390 and zSeries Options.
40743                                                              (line   87)
40744 * m64 <2>:                               i386 and x86-64 Options.
40745                                                              (line  607)
40746 * m64 <3>:                               SPARC Options.      (line  191)
40747 * m64:                                   RS/6000 and PowerPC Options.
40748                                                              (line  252)
40749 * m68000:                                M680x0 Options.     (line   91)
40750 * m68010:                                M680x0 Options.     (line   99)
40751 * m68020:                                M680x0 Options.     (line  105)
40752 * m68020-40:                             M680x0 Options.     (line  174)
40753 * m68020-60:                             M680x0 Options.     (line  183)
40754 * m68030:                                M680x0 Options.     (line  110)
40755 * m68040:                                M680x0 Options.     (line  115)
40756 * m68060:                                M680x0 Options.     (line  124)
40757 * m6811:                                 M68hc1x Options.    (line   13)
40758 * m6812:                                 M68hc1x Options.    (line   18)
40759 * m68881:                                M680x0 Options.     (line  193)
40760 * m68hc11:                               M68hc1x Options.    (line   13)
40761 * m68hc12:                               M68hc1x Options.    (line   18)
40762 * m68hcs12:                              M68hc1x Options.    (line   23)
40763 * m68S12:                                M68hc1x Options.    (line   23)
40764 * m8-bit:                                CRIS Options.       (line   64)
40765 * m96bit-long-double:                    i386 and x86-64 Options.
40766                                                              (line  265)
40767 * mabi <1>:                              ARM Options.        (line   10)
40768 * mabi:                                  RS/6000 and PowerPC Options.
40769                                                              (line  549)
40770 * mabi-mmixware:                         MMIX Options.       (line   20)
40771 * mabi=32:                               MIPS Options.       (line  129)
40772 * mabi=64:                               MIPS Options.       (line  129)
40773 * mabi=eabi:                             MIPS Options.       (line  129)
40774 * mabi=gnu:                              MMIX Options.       (line   20)
40775 * mabi=ibmlongdouble:                    RS/6000 and PowerPC Options.
40776                                                              (line  562)
40777 * mabi=ieeelongdouble:                   RS/6000 and PowerPC Options.
40778                                                              (line  566)
40779 * mabi=n32:                              MIPS Options.       (line  129)
40780 * mabi=no-spe:                           RS/6000 and PowerPC Options.
40781                                                              (line  559)
40782 * mabi=o64:                              MIPS Options.       (line  129)
40783 * mabi=spe:                              RS/6000 and PowerPC Options.
40784                                                              (line  554)
40785 * mabicalls:                             MIPS Options.       (line  153)
40786 * mabort-on-noreturn:                    ARM Options.        (line  149)
40787 * mabshi:                                PDP-11 Options.     (line   55)
40788 * mac0:                                  PDP-11 Options.     (line   16)
40789 * macc-4:                                FRV Options.        (line  113)
40790 * macc-8:                                FRV Options.        (line  116)
40791 * maccumulate-outgoing-args:             i386 and x86-64 Options.
40792                                                              (line  532)
40793 * madjust-unroll:                        SH Options.         (line  196)
40794 * mads:                                  RS/6000 and PowerPC Options.
40795                                                              (line  592)
40796 * maix-struct-return:                    RS/6000 and PowerPC Options.
40797                                                              (line  542)
40798 * maix32:                                RS/6000 and PowerPC Options.
40799                                                              (line  290)
40800 * maix64:                                RS/6000 and PowerPC Options.
40801                                                              (line  290)
40802 * malign-300:                            H8/300 Options.     (line   31)
40803 * malign-double:                         i386 and x86-64 Options.
40804                                                              (line  249)
40805 * malign-int:                            M680x0 Options.     (line  263)
40806 * malign-labels:                         FRV Options.        (line  104)
40807 * malign-loops:                          M32R/D Options.     (line   73)
40808 * malign-natural:                        RS/6000 and PowerPC Options.
40809                                                              (line  329)
40810 * malign-power:                          RS/6000 and PowerPC Options.
40811                                                              (line  329)
40812 * malloc-cc:                             FRV Options.        (line   25)
40813 * malpha-as:                             DEC Alpha Options.  (line  159)
40814 * maltivec:                              RS/6000 and PowerPC Options.
40815                                                              (line  183)
40816 * mam33:                                 MN10300 Options.    (line   17)
40817 * mapcs:                                 ARM Options.        (line   22)
40818 * mapcs-frame:                           ARM Options.        (line   14)
40819 * mapp-regs <1>:                         V850 Options.       (line   57)
40820 * mapp-regs:                             SPARC Options.      (line   10)
40821 * march <1>:                             i386 and x86-64 Options.
40822                                                              (line  148)
40823 * march <2>:                             MIPS Options.       (line   14)
40824 * march <3>:                             ARM Options.        (line  112)
40825 * march <4>:                             M680x0 Options.     (line   12)
40826 * march <5>:                             CRIS Options.       (line   10)
40827 * march <6>:                             S/390 and zSeries Options.
40828                                                              (line  116)
40829 * march <7>:                             HPPA Options.       (line  162)
40830 * march:                                 i386 and x86-64 Options.
40831                                                              (line  156)
40832 * masm=DIALECT:                          i386 and x86-64 Options.
40833                                                              (line  205)
40834 * mauto-incdec:                          M68hc1x Options.    (line   26)
40835 * mauto-pic:                             IA-64 Options.      (line   50)
40836 * mavoid-indexed-addresses:              RS/6000 and PowerPC Options.
40837                                                              (line  399)
40838 * mb:                                    SH Options.         (line   58)
40839 * mbackchain:                            S/390 and zSeries Options.
40840                                                              (line   35)
40841 * mbase-addresses:                       MMIX Options.       (line   54)
40842 * mbcopy:                                PDP-11 Options.     (line   36)
40843 * mbig:                                  RS/6000 and PowerPC Options.
40844                                                              (line  474)
40845 * mbig-endian <1>:                       IA-64 Options.      (line    9)
40846 * mbig-endian <2>:                       ARM Options.        (line   72)
40847 * mbig-endian <3>:                       RS/6000 and PowerPC Options.
40848                                                              (line  474)
40849 * mbig-endian:                           MCore Options.      (line   39)
40850 * mbig-switch <1>:                       HPPA Options.       (line   23)
40851 * mbig-switch:                           V850 Options.       (line   52)
40852 * mbigtable:                             SH Options.         (line   74)
40853 * mbit-align:                            RS/6000 and PowerPC Options.
40854                                                              (line  428)
40855 * mbitfield:                             M680x0 Options.     (line  231)
40856 * mbitops:                               SH Options.         (line   78)
40857 * mbranch-cheap:                         PDP-11 Options.     (line   65)
40858 * mbranch-cost:                          MIPS Options.       (line  610)
40859 * mbranch-cost=NUMBER:                   M32R/D Options.     (line   82)
40860 * mbranch-expensive:                     PDP-11 Options.     (line   61)
40861 * mbranch-hints:                         SPU Options.        (line   27)
40862 * mbranch-likely:                        MIPS Options.       (line  617)
40863 * mbranch-predict:                       MMIX Options.       (line   49)
40864 * mbss-plt:                              RS/6000 and PowerPC Options.
40865                                                              (line  206)
40866 * mbuild-constants:                      DEC Alpha Options.  (line  142)
40867 * mbwx:                                  DEC Alpha Options.  (line  171)
40868 * mc68000:                               M680x0 Options.     (line   91)
40869 * mc68020:                               M680x0 Options.     (line  105)
40870 * mcall-gnu:                             RS/6000 and PowerPC Options.
40871                                                              (line  534)
40872 * mcall-linux:                           RS/6000 and PowerPC Options.
40873                                                              (line  530)
40874 * mcall-netbsd:                          RS/6000 and PowerPC Options.
40875                                                              (line  538)
40876 * mcall-prologues:                       AVR Options.        (line   43)
40877 * mcall-solaris:                         RS/6000 and PowerPC Options.
40878                                                              (line  526)
40879 * mcall-sysv:                            RS/6000 and PowerPC Options.
40880                                                              (line  513)
40881 * mcall-sysv-eabi:                       RS/6000 and PowerPC Options.
40882                                                              (line  520)
40883 * mcall-sysv-noeabi:                     RS/6000 and PowerPC Options.
40884                                                              (line  523)
40885 * mcallee-super-interworking:            ARM Options.        (line  238)
40886 * mcaller-super-interworking:            ARM Options.        (line  244)
40887 * mcallgraph-data:                       MCore Options.      (line   31)
40888 * mcc-init:                              CRIS Options.       (line   41)
40889 * mcfv4e:                                M680x0 Options.     (line  168)
40890 * mcheck-zero-division:                  MIPS Options.       (line  425)
40891 * mcirrus-fix-invalid-insns:             ARM Options.        (line  189)
40892 * mcix:                                  DEC Alpha Options.  (line  171)
40893 * mcld:                                  i386 and x86-64 Options.
40894                                                              (line  458)
40895 * mcmodel=embmedany:                     SPARC Options.      (line  213)
40896 * mcmodel=kernel:                        i386 and x86-64 Options.
40897                                                              (line  629)
40898 * mcmodel=large:                         i386 and x86-64 Options.
40899                                                              (line  641)
40900 * mcmodel=medany:                        SPARC Options.      (line  207)
40901 * mcmodel=medium:                        i386 and x86-64 Options.
40902                                                              (line  634)
40903 * mcmodel=medlow:                        SPARC Options.      (line  196)
40904 * mcmodel=medmid:                        SPARC Options.      (line  201)
40905 * mcmodel=small:                         i386 and x86-64 Options.
40906                                                              (line  623)
40907 * mcmpb:                                 RS/6000 and PowerPC Options.
40908                                                              (line   31)
40909 * mcode-readable:                        MIPS Options.       (line  385)
40910 * mcond-exec:                            FRV Options.        (line  152)
40911 * mcond-move:                            FRV Options.        (line  128)
40912 * mconsole:                              i386 and x86-64 Windows Options.
40913                                                              (line    9)
40914 * mconst-align:                          CRIS Options.       (line   55)
40915 * mconst16:                              Xtensa Options.     (line   10)
40916 * mconstant-gp:                          IA-64 Options.      (line   46)
40917 * mcorea:                                Blackfin Options.   (line  149)
40918 * mcoreb:                                Blackfin Options.   (line  155)
40919 * mcpu <1>:                              FRV Options.        (line  212)
40920 * mcpu <2>:                              ARC Options.        (line   23)
40921 * mcpu <3>:                              RS/6000 and PowerPC Options.
40922                                                              (line  114)
40923 * mcpu <4>:                              ARM Options.        (line   84)
40924 * mcpu <5>:                              M680x0 Options.     (line   28)
40925 * mcpu <6>:                              CRIS Options.       (line   10)
40926 * mcpu <7>:                              SPARC Options.      (line   96)
40927 * mcpu <8>:                              picoChip Options.   (line    9)
40928 * mcpu <9>:                              i386 and x86-64 Options.
40929                                                              (line  153)
40930 * mcpu:                                  DEC Alpha Options.  (line  223)
40931 * mcpu32:                                M680x0 Options.     (line  134)
40932 * mcpu= <1>:                             M32C Options.       (line    7)
40933 * mcpu=:                                 Blackfin Options.   (line    7)
40934 * mcsync-anomaly:                        Blackfin Options.   (line   55)
40935 * mcx16:                                 i386 and x86-64 Options.
40936                                                              (line  472)
40937 * mcygwin:                               i386 and x86-64 Windows Options.
40938                                                              (line   16)
40939 * MD:                                    Preprocessor Options.
40940                                                              (line  261)
40941 * mdalign:                               SH Options.         (line   64)
40942 * mdata:                                 ARC Options.        (line   30)
40943 * mdata-align:                           CRIS Options.       (line   55)
40944 * mdebug <1>:                            M32R/D Options.     (line   69)
40945 * mdebug:                                S/390 and zSeries Options.
40946                                                              (line  112)
40947 * mdec-asm:                              PDP-11 Options.     (line   78)
40948 * mdisable-callt:                        V850 Options.       (line   80)
40949 * mdisable-fpregs:                       HPPA Options.       (line   33)
40950 * mdisable-indexing:                     HPPA Options.       (line   40)
40951 * mdiv <1>:                              M680x0 Options.     (line  205)
40952 * mdiv:                                  MCore Options.      (line   15)
40953 * mdiv=STRATEGY:                         SH Options.         (line  141)
40954 * mdivide-breaks:                        MIPS Options.       (line  431)
40955 * mdivide-traps:                         MIPS Options.       (line  431)
40956 * mdivsi3_libfunc=NAME:                  SH Options.         (line  182)
40957 * mdll:                                  i386 and x86-64 Windows Options.
40958                                                              (line   30)
40959 * mdlmzb:                                RS/6000 and PowerPC Options.
40960                                                              (line  421)
40961 * mdmx:                                  MIPS Options.       (line  278)
40962 * mdouble:                               FRV Options.        (line   38)
40963 * mdouble-float <1>:                     MIPS Options.       (line  236)
40964 * mdouble-float:                         RS/6000 and PowerPC Options.
40965                                                              (line  347)
40966 * mdsp:                                  MIPS Options.       (line  255)
40967 * mdspr2:                                MIPS Options.       (line  261)
40968 * mdual-nops:                            SPU Options.        (line   55)
40969 * mdwarf2-asm:                           IA-64 Options.      (line   79)
40970 * mdword:                                FRV Options.        (line   32)
40971 * mdynamic-no-pic:                       RS/6000 and PowerPC Options.
40972                                                              (line  479)
40973 * meabi:                                 RS/6000 and PowerPC Options.
40974                                                              (line  611)
40975 * mearly-stop-bits:                      IA-64 Options.      (line   85)
40976 * meb:                                   Score Options.      (line    9)
40977 * mel:                                   Score Options.      (line   12)
40978 * melf <1>:                              CRIS Options.       (line   87)
40979 * melf:                                  MMIX Options.       (line   44)
40980 * memb:                                  RS/6000 and PowerPC Options.
40981                                                              (line  606)
40982 * membedded-data:                        MIPS Options.       (line  372)
40983 * memregs=:                              M32C Options.       (line   21)
40984 * mep:                                   V850 Options.       (line   16)
40985 * mepsilon:                              MMIX Options.       (line   15)
40986 * merror-reloc:                          SPU Options.        (line   10)
40987 * mesa:                                  S/390 and zSeries Options.
40988                                                              (line   95)
40989 * metrax100:                             CRIS Options.       (line   26)
40990 * metrax4:                               CRIS Options.       (line   26)
40991 * mexplicit-relocs <1>:                  MIPS Options.       (line  416)
40992 * mexplicit-relocs:                      DEC Alpha Options.  (line  184)
40993 * mextern-sdata:                         MIPS Options.       (line  334)
40994 * MF:                                    Preprocessor Options.
40995                                                              (line  207)
40996 * mfast-fp:                              Blackfin Options.   (line  128)
40997 * mfast-indirect-calls:                  HPPA Options.       (line   52)
40998 * mfaster-structs:                       SPARC Options.      (line   71)
40999 * mfdpic:                                FRV Options.        (line   56)
41000 * mfix:                                  DEC Alpha Options.  (line  171)
41001 * mfix-and-continue:                     Darwin Options.     (line  106)
41002 * mfix-cortex-m3-ldrd:                   ARC Options.        (line   36)
41003 * mfix-r10000:                           MIPS Options.       (line  502)
41004 * mfix-r4000:                            MIPS Options.       (line  481)
41005 * mfix-r4400:                            MIPS Options.       (line  495)
41006 * mfix-sb1:                              MIPS Options.       (line  534)
41007 * mfix-vr4120:                           MIPS Options.       (line  513)
41008 * mfix-vr4130:                           MIPS Options.       (line  527)
41009 * mfixed-cc:                             FRV Options.        (line   28)
41010 * mfixed-range <1>:                      IA-64 Options.      (line   90)
41011 * mfixed-range <2>:                      HPPA Options.       (line   59)
41012 * mfixed-range <3>:                      SPU Options.        (line   47)
41013 * mfixed-range:                          SH Options.         (line  189)
41014 * mflip-mips16:                          MIPS Options.       (line  109)
41015 * mfloat-abi:                            ARM Options.        (line   41)
41016 * mfloat-gprs:                           RS/6000 and PowerPC Options.
41017                                                              (line  235)
41018 * mfloat-ieee:                           DEC Alpha Options.  (line  179)
41019 * mfloat-vax:                            DEC Alpha Options.  (line  179)
41020 * mfloat32:                              PDP-11 Options.     (line   52)
41021 * mfloat64:                              PDP-11 Options.     (line   48)
41022 * mflush-func:                           MIPS Options.       (line  601)
41023 * mflush-func=NAME:                      M32R/D Options.     (line   94)
41024 * mflush-trap=NUMBER:                    M32R/D Options.     (line   87)
41025 * mfmovd:                                SH Options.         (line   81)
41026 * mfp:                                   ARM Options.        (line  124)
41027 * mfp-exceptions:                        MIPS Options.       (line  628)
41028 * mfp-reg:                               DEC Alpha Options.  (line   25)
41029 * mfp-rounding-mode:                     DEC Alpha Options.  (line   85)
41030 * mfp-trap-mode:                         DEC Alpha Options.  (line   63)
41031 * mfp32:                                 MIPS Options.       (line  219)
41032 * mfp64:                                 MIPS Options.       (line  222)
41033 * mfpe:                                  ARM Options.        (line  124)
41034 * mfpr-32:                               FRV Options.        (line   13)
41035 * mfpr-64:                               FRV Options.        (line   16)
41036 * mfprnd:                                RS/6000 and PowerPC Options.
41037                                                              (line   31)
41038 * mfpu <1>:                              ARM Options.        (line  124)
41039 * mfpu <2>:                              SPARC Options.      (line   20)
41040 * mfpu <3>:                              PDP-11 Options.     (line    9)
41041 * mfpu:                                  RS/6000 and PowerPC Options.
41042                                                              (line  355)
41043 * mfull-toc:                             RS/6000 and PowerPC Options.
41044                                                              (line  263)
41045 * mfused-madd <1>:                       RS/6000 and PowerPC Options.
41046                                                              (line  408)
41047 * mfused-madd <2>:                       Xtensa Options.     (line   19)
41048 * mfused-madd <3>:                       i386 and x86-64 Options.
41049                                                              (line  591)
41050 * mfused-madd <4>:                       S/390 and zSeries Options.
41051                                                              (line  137)
41052 * mfused-madd:                           MIPS Options.       (line  466)
41053 * mg:                                    VAX Options.        (line   17)
41054 * MG:                                    Preprocessor Options.
41055                                                              (line  216)
41056 * mgas <1>:                              HPPA Options.       (line   75)
41057 * mgas:                                  DEC Alpha Options.  (line  159)
41058 * mgen-cell-microcode:                   RS/6000 and PowerPC Options.
41059                                                              (line  194)
41060 * mgettrcost=NUMBER:                     SH Options.         (line  211)
41061 * mglibc:                                GNU/Linux Options.  (line    9)
41062 * mgnu:                                  VAX Options.        (line   13)
41063 * mgnu-as:                               IA-64 Options.      (line   18)
41064 * mgnu-ld:                               IA-64 Options.      (line   23)
41065 * mgotplt:                               CRIS Options.       (line   81)
41066 * mgp32:                                 MIPS Options.       (line  213)
41067 * mgp64:                                 MIPS Options.       (line  216)
41068 * mgpopt:                                MIPS Options.       (line  357)
41069 * mgpr-32:                               FRV Options.        (line    7)
41070 * mgpr-64:                               FRV Options.        (line   10)
41071 * mgprel-ro:                             FRV Options.        (line   79)
41072 * mh:                                    H8/300 Options.     (line   14)
41073 * mhard-dfp <1>:                         S/390 and zSeries Options.
41074                                                              (line   20)
41075 * mhard-dfp:                             RS/6000 and PowerPC Options.
41076                                                              (line   31)
41077 * mhard-float <1>:                       ARM Options.        (line   62)
41078 * mhard-float <2>:                       M680x0 Options.     (line  193)
41079 * mhard-float <3>:                       RS/6000 and PowerPC Options.
41080                                                              (line  341)
41081 * mhard-float <4>:                       SPARC Options.      (line   20)
41082 * mhard-float <5>:                       FRV Options.        (line   19)
41083 * mhard-float <6>:                       S/390 and zSeries Options.
41084                                                              (line   11)
41085 * mhard-float:                           MIPS Options.       (line  225)
41086 * mhard-quad-float:                      SPARC Options.      (line   41)
41087 * mhardlit:                              MCore Options.      (line   10)
41088 * mhint-max-distance:                    SPU Options.        (line   67)
41089 * mhint-max-nops:                        SPU Options.        (line   61)
41090 * mhitachi:                              SH Options.         (line   90)
41091 * micplb:                                Blackfin Options.   (line  168)
41092 * mid-shared-library:                    Blackfin Options.   (line   76)
41093 * mieee <1>:                             DEC Alpha Options.  (line   39)
41094 * mieee:                                 SH Options.         (line   99)
41095 * mieee-conformant:                      DEC Alpha Options.  (line  134)
41096 * mieee-fp:                              i386 and x86-64 Options.
41097                                                              (line  211)
41098 * mieee-with-inexact:                    DEC Alpha Options.  (line   52)
41099 * milp32:                                IA-64 Options.      (line  114)
41100 * mimpure-text:                          SPARC Options.      (line   81)
41101 * mincoming-stack-boundary:              i386 and x86-64 Options.
41102                                                              (line  379)
41103 * mindexed-addressing:                   SH Options.         (line  201)
41104 * minit-stack:                           AVR Options.        (line   35)
41105 * minline-all-stringops:                 i386 and x86-64 Options.
41106                                                              (line  553)
41107 * minline-float-divide-max-throughput:   IA-64 Options.      (line   58)
41108 * minline-float-divide-min-latency:      IA-64 Options.      (line   54)
41109 * minline-ic_invalidate:                 SH Options.         (line  106)
41110 * minline-int-divide-max-throughput:     IA-64 Options.      (line   66)
41111 * minline-int-divide-min-latency:        IA-64 Options.      (line   62)
41112 * minline-plt <1>:                       Blackfin Options.   (line  133)
41113 * minline-plt:                           FRV Options.        (line   64)
41114 * minline-sqrt-max-throughput:           IA-64 Options.      (line   74)
41115 * minline-sqrt-min-latency:              IA-64 Options.      (line   70)
41116 * minline-stringops-dynamically:         i386 and x86-64 Options.
41117                                                              (line  560)
41118 * minmax:                                M68hc1x Options.    (line   31)
41119 * minsert-sched-nops:                    RS/6000 and PowerPC Options.
41120                                                              (line  501)
41121 * mint16:                                PDP-11 Options.     (line   40)
41122 * mint32 <1>:                            H8/300 Options.     (line   28)
41123 * mint32:                                PDP-11 Options.     (line   44)
41124 * mint8:                                 AVR Options.        (line   55)
41125 * minterlink-mips16:                     MIPS Options.       (line  116)
41126 * minvalid-symbols:                      SH Options.         (line  234)
41127 * mips1:                                 MIPS Options.       (line   76)
41128 * mips16:                                MIPS Options.       (line  101)
41129 * mips2:                                 MIPS Options.       (line   79)
41130 * mips3:                                 MIPS Options.       (line   82)
41131 * mips32:                                MIPS Options.       (line   88)
41132 * mips32r2:                              MIPS Options.       (line   91)
41133 * mips3d:                                MIPS Options.       (line  284)
41134 * mips4:                                 MIPS Options.       (line   85)
41135 * mips64:                                MIPS Options.       (line   94)
41136 * mips64r2:                              MIPS Options.       (line   97)
41137 * misel:                                 RS/6000 and PowerPC Options.
41138                                                              (line  212)
41139 * misize:                                SH Options.         (line  118)
41140 * missue-rate=NUMBER:                    M32R/D Options.     (line   79)
41141 * mjump-in-delay:                        HPPA Options.       (line   28)
41142 * mkernel:                               Darwin Options.     (line   84)
41143 * mknuthdiv:                             MMIX Options.       (line   33)
41144 * ml:                                    SH Options.         (line   61)
41145 * mlarge-data:                           DEC Alpha Options.  (line  195)
41146 * mlarge-data-threshold=NUMBER:          i386 and x86-64 Options.
41147                                                              (line  291)
41148 * mlarge-mem:                            SPU Options.        (line   35)
41149 * mlarge-text:                           DEC Alpha Options.  (line  213)
41150 * mleaf-id-shared-library:               Blackfin Options.   (line   87)
41151 * mlibfuncs:                             MMIX Options.       (line   10)
41152 * mlibrary-pic:                          FRV Options.        (line  110)
41153 * mlinked-fp:                            FRV Options.        (line   94)
41154 * mlinker-opt:                           HPPA Options.       (line   85)
41155 * mlinux:                                CRIS Options.       (line   91)
41156 * mlittle:                               RS/6000 and PowerPC Options.
41157                                                              (line  468)
41158 * mlittle-endian <1>:                    IA-64 Options.      (line   13)
41159 * mlittle-endian <2>:                    RS/6000 and PowerPC Options.
41160                                                              (line  468)
41161 * mlittle-endian <3>:                    MCore Options.      (line   39)
41162 * mlittle-endian <4>:                    SPARC Options.      (line  185)
41163 * mlittle-endian:                        ARM Options.        (line   68)
41164 * mllsc:                                 MIPS Options.       (line  241)
41165 * mlocal-sdata:                          MIPS Options.       (line  322)
41166 * mlong-calls <1>:                       M68hc1x Options.    (line   35)
41167 * mlong-calls <2>:                       FRV Options.        (line   99)
41168 * mlong-calls <3>:                       ARM Options.        (line  154)
41169 * mlong-calls <4>:                       V850 Options.       (line   10)
41170 * mlong-calls <5>:                       Blackfin Options.   (line  116)
41171 * mlong-calls:                           MIPS Options.       (line  452)
41172 * mlong-double-128:                      S/390 and zSeries Options.
41173                                                              (line   29)
41174 * mlong-double-64:                       S/390 and zSeries Options.
41175                                                              (line   29)
41176 * mlong-load-store:                      HPPA Options.       (line   66)
41177 * mlong32:                               MIPS Options.       (line  297)
41178 * mlong64:                               MIPS Options.       (line  292)
41179 * mlongcall:                             RS/6000 and PowerPC Options.
41180                                                              (line  677)
41181 * mlongcalls:                            Xtensa Options.     (line   67)
41182 * mlow-64k:                              Blackfin Options.   (line   65)
41183 * mlp64:                                 IA-64 Options.      (line  114)
41184 * MM:                                    Preprocessor Options.
41185                                                              (line  197)
41186 * mmac <1>:                              Score Options.      (line   21)
41187 * mmac:                                  CRX Options.        (line    9)
41188 * mmad:                                  MIPS Options.       (line  461)
41189 * mmangle-cpu:                           ARC Options.        (line   15)
41190 * mmax:                                  DEC Alpha Options.  (line  171)
41191 * mmax-stack-frame:                      CRIS Options.       (line   22)
41192 * mmcu:                                  AVR Options.        (line    9)
41193 * MMD:                                   Preprocessor Options.
41194                                                              (line  277)
41195 * mmedia:                                FRV Options.        (line   44)
41196 * mmemcpy:                               MIPS Options.       (line  446)
41197 * mmemory-latency:                       DEC Alpha Options.  (line  276)
41198 * mmfcrf:                                RS/6000 and PowerPC Options.
41199                                                              (line   31)
41200 * mmfpgpr:                               RS/6000 and PowerPC Options.
41201                                                              (line   31)
41202 * mminimal-toc:                          RS/6000 and PowerPC Options.
41203                                                              (line  263)
41204 * mmmx:                                  i386 and x86-64 Options.
41205                                                              (line  435)
41206 * mmodel=large:                          M32R/D Options.     (line   33)
41207 * mmodel=medium:                         M32R/D Options.     (line   27)
41208 * mmodel=small:                          M32R/D Options.     (line   18)
41209 * mmt:                                   MIPS Options.       (line  289)
41210 * mmul-bug-workaround:                   CRIS Options.       (line   31)
41211 * mmuladd:                               FRV Options.        (line   50)
41212 * mmulhw:                                RS/6000 and PowerPC Options.
41213                                                              (line  414)
41214 * mmult-bug:                             MN10300 Options.    (line    9)
41215 * mmulti-cond-exec:                      FRV Options.        (line  176)
41216 * mmulticore:                            Blackfin Options.   (line  137)
41217 * mmultiple:                             RS/6000 and PowerPC Options.
41218                                                              (line  366)
41219 * mmvcle:                                S/390 and zSeries Options.
41220                                                              (line  105)
41221 * mmvme:                                 RS/6000 and PowerPC Options.
41222                                                              (line  587)
41223 * mn:                                    H8/300 Options.     (line   20)
41224 * mnested-cond-exec:                     FRV Options.        (line  189)
41225 * mnew-mnemonics:                        RS/6000 and PowerPC Options.
41226                                                              (line   99)
41227 * mnhwloop:                              Score Options.      (line   15)
41228 * mno-3dnow:                             i386 and x86-64 Options.
41229                                                              (line  435)
41230 * mno-4byte-functions:                   MCore Options.      (line   27)
41231 * mno-abicalls:                          MIPS Options.       (line  153)
41232 * mno-abshi:                             PDP-11 Options.     (line   58)
41233 * mno-ac0:                               PDP-11 Options.     (line   20)
41234 * mno-align-double:                      i386 and x86-64 Options.
41235                                                              (line  249)
41236 * mno-align-int:                         M680x0 Options.     (line  263)
41237 * mno-align-loops:                       M32R/D Options.     (line   76)
41238 * mno-align-stringops:                   i386 and x86-64 Options.
41239                                                              (line  548)
41240 * mno-altivec:                           RS/6000 and PowerPC Options.
41241                                                              (line  183)
41242 * mno-am33:                              MN10300 Options.    (line   20)
41243 * mno-app-regs <1>:                      V850 Options.       (line   61)
41244 * mno-app-regs:                          SPARC Options.      (line   10)
41245 * mno-avoid-indexed-addresses:           RS/6000 and PowerPC Options.
41246                                                              (line  399)
41247 * mno-backchain:                         S/390 and zSeries Options.
41248                                                              (line   35)
41249 * mno-base-addresses:                    MMIX Options.       (line   54)
41250 * mno-bit-align:                         RS/6000 and PowerPC Options.
41251                                                              (line  428)
41252 * mno-bitfield:                          M680x0 Options.     (line  227)
41253 * mno-branch-likely:                     MIPS Options.       (line  617)
41254 * mno-branch-predict:                    MMIX Options.       (line   49)
41255 * mno-bwx:                               DEC Alpha Options.  (line  171)
41256 * mno-callgraph-data:                    MCore Options.      (line   31)
41257 * mno-check-zero-division:               MIPS Options.       (line  425)
41258 * mno-cirrus-fix-invalid-insns:          ARM Options.        (line  189)
41259 * mno-cix:                               DEC Alpha Options.  (line  171)
41260 * mno-cmpb:                              RS/6000 and PowerPC Options.
41261                                                              (line   31)
41262 * mno-cond-exec:                         FRV Options.        (line  158)
41263 * mno-cond-move:                         FRV Options.        (line  134)
41264 * mno-const-align:                       CRIS Options.       (line   55)
41265 * mno-const16:                           Xtensa Options.     (line   10)
41266 * mno-crt0:                              MN10300 Options.    (line   31)
41267 * mno-csync-anomaly:                     Blackfin Options.   (line   61)
41268 * mno-cygwin:                            i386 and x86-64 Windows Options.
41269                                                              (line   23)
41270 * mno-data-align:                        CRIS Options.       (line   55)
41271 * mno-debug:                             S/390 and zSeries Options.
41272                                                              (line  112)
41273 * mno-div <1>:                           MCore Options.      (line   15)
41274 * mno-div:                               M680x0 Options.     (line  205)
41275 * mno-dlmzb:                             RS/6000 and PowerPC Options.
41276                                                              (line  421)
41277 * mno-double:                            FRV Options.        (line   41)
41278 * mno-dsp:                               MIPS Options.       (line  255)
41279 * mno-dspr2:                             MIPS Options.       (line  261)
41280 * mno-dwarf2-asm:                        IA-64 Options.      (line   79)
41281 * mno-dword:                             FRV Options.        (line   35)
41282 * mno-eabi:                              RS/6000 and PowerPC Options.
41283                                                              (line  611)
41284 * mno-early-stop-bits:                   IA-64 Options.      (line   85)
41285 * mno-eflags:                            FRV Options.        (line  125)
41286 * mno-embedded-data:                     MIPS Options.       (line  372)
41287 * mno-ep:                                V850 Options.       (line   16)
41288 * mno-epsilon:                           MMIX Options.       (line   15)
41289 * mno-explicit-relocs <1>:               DEC Alpha Options.  (line  184)
41290 * mno-explicit-relocs:                   MIPS Options.       (line  416)
41291 * mno-extern-sdata:                      MIPS Options.       (line  334)
41292 * mno-fancy-math-387:                    i386 and x86-64 Options.
41293                                                              (line  238)
41294 * mno-faster-structs:                    SPARC Options.      (line   71)
41295 * mno-fix:                               DEC Alpha Options.  (line  171)
41296 * mno-fix-r10000:                        MIPS Options.       (line  502)
41297 * mno-fix-r4000:                         MIPS Options.       (line  481)
41298 * mno-fix-r4400:                         MIPS Options.       (line  495)
41299 * mno-float32:                           PDP-11 Options.     (line   48)
41300 * mno-float64:                           PDP-11 Options.     (line   52)
41301 * mno-flush-func:                        M32R/D Options.     (line   99)
41302 * mno-flush-trap:                        M32R/D Options.     (line   91)
41303 * mno-fp-in-toc:                         RS/6000 and PowerPC Options.
41304                                                              (line  263)
41305 * mno-fp-regs:                           DEC Alpha Options.  (line   25)
41306 * mno-fp-ret-in-387:                     i386 and x86-64 Options.
41307                                                              (line  228)
41308 * mno-fprnd:                             RS/6000 and PowerPC Options.
41309                                                              (line   31)
41310 * mno-fpu:                               SPARC Options.      (line   25)
41311 * mno-fused-madd <1>:                    Xtensa Options.     (line   19)
41312 * mno-fused-madd <2>:                    S/390 and zSeries Options.
41313                                                              (line  137)
41314 * mno-fused-madd <3>:                    MIPS Options.       (line  466)
41315 * mno-fused-madd:                        RS/6000 and PowerPC Options.
41316                                                              (line  408)
41317 * mno-gnu-as:                            IA-64 Options.      (line   18)
41318 * mno-gnu-ld:                            IA-64 Options.      (line   23)
41319 * mno-gotplt:                            CRIS Options.       (line   81)
41320 * mno-gpopt:                             MIPS Options.       (line  357)
41321 * mno-hard-dfp <1>:                      RS/6000 and PowerPC Options.
41322                                                              (line   31)
41323 * mno-hard-dfp:                          S/390 and zSeries Options.
41324                                                              (line   20)
41325 * mno-hardlit:                           MCore Options.      (line   10)
41326 * mno-id-shared-library:                 Blackfin Options.   (line   83)
41327 * mno-ieee-fp:                           i386 and x86-64 Options.
41328                                                              (line  211)
41329 * mno-int16:                             PDP-11 Options.     (line   44)
41330 * mno-int32:                             PDP-11 Options.     (line   40)
41331 * mno-interlink-mips16:                  MIPS Options.       (line  116)
41332 * mno-interrupts:                        AVR Options.        (line   39)
41333 * mno-isel:                              RS/6000 and PowerPC Options.
41334                                                              (line  212)
41335 * mno-knuthdiv:                          MMIX Options.       (line   33)
41336 * mno-leaf-id-shared-library:            Blackfin Options.   (line   93)
41337 * mno-libfuncs:                          MMIX Options.       (line   10)
41338 * mno-llsc:                              MIPS Options.       (line  241)
41339 * mno-local-sdata:                       MIPS Options.       (line  322)
41340 * mno-long-calls <1>:                    M68hc1x Options.    (line   35)
41341 * mno-long-calls <2>:                    MIPS Options.       (line  452)
41342 * mno-long-calls <3>:                    HPPA Options.       (line  136)
41343 * mno-long-calls <4>:                    ARM Options.        (line  154)
41344 * mno-long-calls <5>:                    V850 Options.       (line   10)
41345 * mno-long-calls:                        Blackfin Options.   (line  116)
41346 * mno-longcall:                          RS/6000 and PowerPC Options.
41347                                                              (line  677)
41348 * mno-longcalls:                         Xtensa Options.     (line   67)
41349 * mno-low-64k:                           Blackfin Options.   (line   69)
41350 * mno-lsim:                              FR30 Options.       (line   14)
41351 * mno-mad:                               MIPS Options.       (line  461)
41352 * mno-max:                               DEC Alpha Options.  (line  171)
41353 * mno-mdmx:                              MIPS Options.       (line  278)
41354 * mno-media:                             FRV Options.        (line   47)
41355 * mno-memcpy:                            MIPS Options.       (line  446)
41356 * mno-mfcrf:                             RS/6000 and PowerPC Options.
41357                                                              (line   31)
41358 * mno-mfpgpr:                            RS/6000 and PowerPC Options.
41359                                                              (line   31)
41360 * mno-mips16:                            MIPS Options.       (line  101)
41361 * mno-mips3d:                            MIPS Options.       (line  284)
41362 * mno-mmx:                               i386 and x86-64 Options.
41363                                                              (line  435)
41364 * mno-mt:                                MIPS Options.       (line  289)
41365 * mno-mul-bug-workaround:                CRIS Options.       (line   31)
41366 * mno-muladd:                            FRV Options.        (line   53)
41367 * mno-mulhw:                             RS/6000 and PowerPC Options.
41368                                                              (line  414)
41369 * mno-mult-bug:                          MN10300 Options.    (line   13)
41370 * mno-multi-cond-exec:                   FRV Options.        (line  183)
41371 * mno-multiple:                          RS/6000 and PowerPC Options.
41372                                                              (line  366)
41373 * mno-mvcle:                             S/390 and zSeries Options.
41374                                                              (line  105)
41375 * mno-nested-cond-exec:                  FRV Options.        (line  195)
41376 * mno-optimize-membar:                   FRV Options.        (line  205)
41377 * mno-pack:                              FRV Options.        (line  122)
41378 * mno-packed-stack:                      S/390 and zSeries Options.
41379                                                              (line   54)
41380 * mno-paired:                            RS/6000 and PowerPC Options.
41381                                                              (line  226)
41382 * mno-paired-single:                     MIPS Options.       (line  272)
41383 * mno-pic:                               IA-64 Options.      (line   26)
41384 * mno-plt:                               MIPS Options.       (line  180)
41385 * mno-popcntb:                           RS/6000 and PowerPC Options.
41386                                                              (line   31)
41387 * mno-power:                             RS/6000 and PowerPC Options.
41388                                                              (line   31)
41389 * mno-power2:                            RS/6000 and PowerPC Options.
41390                                                              (line   31)
41391 * mno-powerpc:                           RS/6000 and PowerPC Options.
41392                                                              (line   31)
41393 * mno-powerpc-gfxopt:                    RS/6000 and PowerPC Options.
41394                                                              (line   31)
41395 * mno-powerpc-gpopt:                     RS/6000 and PowerPC Options.
41396                                                              (line   31)
41397 * mno-powerpc64:                         RS/6000 and PowerPC Options.
41398                                                              (line   31)
41399 * mno-prolog-function:                   V850 Options.       (line   23)
41400 * mno-prologue-epilogue:                 CRIS Options.       (line   71)
41401 * mno-prototype:                         RS/6000 and PowerPC Options.
41402                                                              (line  571)
41403 * mno-push-args:                         i386 and x86-64 Options.
41404                                                              (line  525)
41405 * mno-register-names:                    IA-64 Options.      (line   37)
41406 * mno-regnames:                          RS/6000 and PowerPC Options.
41407                                                              (line  671)
41408 * mno-relax-immediate:                   MCore Options.      (line   19)
41409 * mno-relocatable:                       RS/6000 and PowerPC Options.
41410                                                              (line  445)
41411 * mno-relocatable-lib:                   RS/6000 and PowerPC Options.
41412                                                              (line  453)
41413 * mno-rtd:                               M680x0 Options.     (line  258)
41414 * mno-scc:                               FRV Options.        (line  146)
41415 * mno-sched-ar-data-spec:                IA-64 Options.      (line  128)
41416 * mno-sched-ar-in-data-spec:             IA-64 Options.      (line  149)
41417 * mno-sched-br-data-spec:                IA-64 Options.      (line  121)
41418 * mno-sched-br-in-data-spec:             IA-64 Options.      (line  142)
41419 * mno-sched-control-ldc:                 IA-64 Options.      (line  168)
41420 * mno-sched-control-spec:                IA-64 Options.      (line  135)
41421 * mno-sched-count-spec-in-critical-path: IA-64 Options.      (line  194)
41422 * mno-sched-in-control-spec:             IA-64 Options.      (line  156)
41423 * mno-sched-ldc:                         IA-64 Options.      (line  162)
41424 * mno-sched-prefer-non-control-spec-insns: IA-64 Options.    (line  187)
41425 * mno-sched-prefer-non-data-spec-insns:  IA-64 Options.      (line  180)
41426 * mno-sched-prolog:                      ARM Options.        (line   32)
41427 * mno-sched-spec-verbose:                IA-64 Options.      (line  176)
41428 * mno-sdata <1>:                         IA-64 Options.      (line   42)
41429 * mno-sdata:                             RS/6000 and PowerPC Options.
41430                                                              (line  658)
41431 * mno-sep-data:                          Blackfin Options.   (line  111)
41432 * mno-serialize-volatile:                Xtensa Options.     (line   35)
41433 * mno-short:                             M680x0 Options.     (line  222)
41434 * mno-side-effects:                      CRIS Options.       (line   46)
41435 * mno-single-exit:                       MMIX Options.       (line   66)
41436 * mno-slow-bytes:                        MCore Options.      (line   35)
41437 * mno-small-exec:                        S/390 and zSeries Options.
41438                                                              (line   80)
41439 * mno-smartmips:                         MIPS Options.       (line  268)
41440 * mno-soft-float:                        DEC Alpha Options.  (line   10)
41441 * mno-space-regs:                        HPPA Options.       (line   45)
41442 * mno-spe:                               RS/6000 and PowerPC Options.
41443                                                              (line  221)
41444 * mno-specld-anomaly:                    Blackfin Options.   (line   51)
41445 * mno-split:                             PDP-11 Options.     (line   71)
41446 * mno-split-addresses:                   MIPS Options.       (line  410)
41447 * mno-sse:                               i386 and x86-64 Options.
41448                                                              (line  435)
41449 * mno-stack-align:                       CRIS Options.       (line   55)
41450 * mno-stack-bias:                        SPARC Options.      (line  222)
41451 * mno-strict-align <1>:                  M680x0 Options.     (line  283)
41452 * mno-strict-align:                      RS/6000 and PowerPC Options.
41453                                                              (line  440)
41454 * mno-string:                            RS/6000 and PowerPC Options.
41455                                                              (line  377)
41456 * mno-sum-in-toc:                        RS/6000 and PowerPC Options.
41457                                                              (line  263)
41458 * mno-swdiv:                             RS/6000 and PowerPC Options.
41459                                                              (line  173)
41460 * mno-sym32:                             MIPS Options.       (line  307)
41461 * mno-tablejump:                         AVR Options.        (line   47)
41462 * mno-target-align:                      Xtensa Options.     (line   54)
41463 * mno-text-section-literals:             Xtensa Options.     (line   42)
41464 * mno-toc:                               RS/6000 and PowerPC Options.
41465                                                              (line  462)
41466 * mno-toplevel-symbols:                  MMIX Options.       (line   40)
41467 * mno-tpf-trace:                         S/390 and zSeries Options.
41468                                                              (line  131)
41469 * mno-unaligned-doubles:                 SPARC Options.      (line   59)
41470 * mno-uninit-const-in-rodata:            MIPS Options.       (line  380)
41471 * mno-update:                            RS/6000 and PowerPC Options.
41472                                                              (line  388)
41473 * mno-v8plus:                            SPARC Options.      (line  170)
41474 * mno-vis:                               SPARC Options.      (line  177)
41475 * mno-vliw-branch:                       FRV Options.        (line  170)
41476 * mno-volatile-asm-stop:                 IA-64 Options.      (line   32)
41477 * mno-vrsave:                            RS/6000 and PowerPC Options.
41478                                                              (line  191)
41479 * mno-wide-bitfields:                    MCore Options.      (line   23)
41480 * mno-xgot <1>:                          MIPS Options.       (line  190)
41481 * mno-xgot:                              M680x0 Options.     (line  315)
41482 * mno-xl-compat:                         RS/6000 and PowerPC Options.
41483                                                              (line  298)
41484 * mno-zero-extend:                       MMIX Options.       (line   27)
41485 * mnobitfield:                           M680x0 Options.     (line  227)
41486 * mnomacsave:                            SH Options.         (line   95)
41487 * mnominmax:                             M68hc1x Options.    (line   31)
41488 * mnop-fun-dllimport:                    i386 and x86-64 Windows Options.
41489                                                              (line   36)
41490 * mold-mnemonics:                        RS/6000 and PowerPC Options.
41491                                                              (line   99)
41492 * momit-leaf-frame-pointer <1>:          i386 and x86-64 Options.
41493                                                              (line  573)
41494 * momit-leaf-frame-pointer:              Blackfin Options.   (line   39)
41495 * mone-byte-bool:                        Darwin Options.     (line   92)
41496 * moptimize-membar:                      FRV Options.        (line  201)
41497 * MP:                                    Preprocessor Options.
41498                                                              (line  226)
41499 * mpa-risc-1-0:                          HPPA Options.       (line   19)
41500 * mpa-risc-1-1:                          HPPA Options.       (line   19)
41501 * mpa-risc-2-0:                          HPPA Options.       (line   19)
41502 * mpack:                                 FRV Options.        (line  119)
41503 * mpacked-stack:                         S/390 and zSeries Options.
41504                                                              (line   54)
41505 * mpadstruct:                            SH Options.         (line  121)
41506 * mpaired:                               RS/6000 and PowerPC Options.
41507                                                              (line  226)
41508 * mpaired-single:                        MIPS Options.       (line  272)
41509 * mpc32:                                 i386 and x86-64 Options.
41510                                                              (line  344)
41511 * mpc64:                                 i386 and x86-64 Options.
41512                                                              (line  344)
41513 * mpc80:                                 i386 and x86-64 Options.
41514                                                              (line  344)
41515 * mpcrel:                                M680x0 Options.     (line  275)
41516 * mpdebug:                               CRIS Options.       (line   35)
41517 * mpe:                                   RS/6000 and PowerPC Options.
41518                                                              (line  318)
41519 * mpic-register:                         ARM Options.        (line  185)
41520 * mplt:                                  MIPS Options.       (line  180)
41521 * mpoke-function-name:                   ARM Options.        (line  199)
41522 * mpopcntb:                              RS/6000 and PowerPC Options.
41523                                                              (line   31)
41524 * mportable-runtime:                     HPPA Options.       (line   71)
41525 * mpower:                                RS/6000 and PowerPC Options.
41526                                                              (line   31)
41527 * mpower2:                               RS/6000 and PowerPC Options.
41528                                                              (line   31)
41529 * mpowerpc:                              RS/6000 and PowerPC Options.
41530                                                              (line   31)
41531 * mpowerpc-gfxopt:                       RS/6000 and PowerPC Options.
41532                                                              (line   31)
41533 * mpowerpc-gpopt:                        RS/6000 and PowerPC Options.
41534                                                              (line   31)
41535 * mpowerpc64:                            RS/6000 and PowerPC Options.
41536                                                              (line   31)
41537 * mprefergot:                            SH Options.         (line  128)
41538 * mpreferred-stack-boundary:             i386 and x86-64 Options.
41539                                                              (line  374)
41540 * mprioritize-restricted-insns:          RS/6000 and PowerPC Options.
41541                                                              (line  485)
41542 * mprolog-function:                      V850 Options.       (line   23)
41543 * mprologue-epilogue:                    CRIS Options.       (line   71)
41544 * mprototype:                            RS/6000 and PowerPC Options.
41545                                                              (line  571)
41546 * mpt-fixed:                             SH Options.         (line  215)
41547 * mpush-args <1>:                        CRX Options.        (line   13)
41548 * mpush-args:                            i386 and x86-64 Options.
41549                                                              (line  525)
41550 * MQ:                                    Preprocessor Options.
41551                                                              (line  252)
41552 * mr10k-cache-barrier:                   MIPS Options.       (line  539)
41553 * mrecip:                                i386 and x86-64 Options.
41554                                                              (line  490)
41555 * mregister-names:                       IA-64 Options.      (line   37)
41556 * mregnames:                             RS/6000 and PowerPC Options.
41557                                                              (line  671)
41558 * mregparm:                              i386 and x86-64 Options.
41559                                                              (line  321)
41560 * mrelax <1>:                            MN10300 Options.    (line   34)
41561 * mrelax <2>:                            H8/300 Options.     (line    9)
41562 * mrelax:                                SH Options.         (line   70)
41563 * mrelax-immediate:                      MCore Options.      (line   19)
41564 * mrelocatable:                          RS/6000 and PowerPC Options.
41565                                                              (line  445)
41566 * mrelocatable-lib:                      RS/6000 and PowerPC Options.
41567                                                              (line  453)
41568 * mreturn-pointer-on-d0:                 MN10300 Options.    (line   24)
41569 * mrodata:                               ARC Options.        (line   30)
41570 * mrtd <1>:                              i386 and x86-64 Options.
41571                                                              (line  297)
41572 * mrtd <2>:                              Function Attributes.
41573                                                              (line  170)
41574 * mrtd:                                  M680x0 Options.     (line  236)
41575 * mrtp:                                  VxWorks Options.    (line   11)
41576 * ms:                                    H8/300 Options.     (line   17)
41577 * ms2600:                                H8/300 Options.     (line   24)
41578 * msafe-dma:                             SPU Options.        (line   17)
41579 * msafe-hints:                           SPU Options.        (line   72)
41580 * msahf:                                 i386 and x86-64 Options.
41581                                                              (line  480)
41582 * mscc:                                  FRV Options.        (line  140)
41583 * msched-ar-data-spec:                   IA-64 Options.      (line  128)
41584 * msched-ar-in-data-spec:                IA-64 Options.      (line  149)
41585 * msched-br-data-spec:                   IA-64 Options.      (line  121)
41586 * msched-br-in-data-spec:                IA-64 Options.      (line  142)
41587 * msched-control-ldc:                    IA-64 Options.      (line  168)
41588 * msched-control-spec:                   IA-64 Options.      (line  135)
41589 * msched-costly-dep:                     RS/6000 and PowerPC Options.
41590                                                              (line  492)
41591 * msched-count-spec-in-critical-path:    IA-64 Options.      (line  194)
41592 * msched-in-control-spec:                IA-64 Options.      (line  156)
41593 * msched-ldc:                            IA-64 Options.      (line  162)
41594 * msched-prefer-non-control-spec-insns:  IA-64 Options.      (line  187)
41595 * msched-prefer-non-data-spec-insns:     IA-64 Options.      (line  180)
41596 * msched-spec-verbose:                   IA-64 Options.      (line  176)
41597 * mschedule:                             HPPA Options.       (line   78)
41598 * mscore5:                               Score Options.      (line   25)
41599 * mscore5u:                              Score Options.      (line   28)
41600 * mscore7:                               Score Options.      (line   31)
41601 * mscore7d:                              Score Options.      (line   34)
41602 * msda:                                  V850 Options.       (line   40)
41603 * msdata <1>:                            IA-64 Options.      (line   42)
41604 * msdata:                                RS/6000 and PowerPC Options.
41605                                                              (line  645)
41606 * msdata=data:                           RS/6000 and PowerPC Options.
41607                                                              (line  650)
41608 * msdata=default:                        RS/6000 and PowerPC Options.
41609                                                              (line  645)
41610 * msdata=eabi:                           RS/6000 and PowerPC Options.
41611                                                              (line  625)
41612 * msdata=none <1>:                       M32R/D Options.     (line   40)
41613 * msdata=none:                           RS/6000 and PowerPC Options.
41614                                                              (line  658)
41615 * msdata=sdata:                          M32R/D Options.     (line   49)
41616 * msdata=sysv:                           RS/6000 and PowerPC Options.
41617                                                              (line  636)
41618 * msdata=use:                            M32R/D Options.     (line   53)
41619 * msdram:                                Blackfin Options.   (line  162)
41620 * msecure-plt:                           RS/6000 and PowerPC Options.
41621                                                              (line  201)
41622 * msep-data:                             Blackfin Options.   (line  105)
41623 * mserialize-volatile:                   Xtensa Options.     (line   35)
41624 * mshared-library-id:                    Blackfin Options.   (line   98)
41625 * mshort <1>:                            M680x0 Options.     (line  216)
41626 * mshort:                                M68hc1x Options.    (line   40)
41627 * msim <1>:                              Blackfin Options.   (line   32)
41628 * msim <2>:                              Xstormy16 Options.  (line    9)
41629 * msim <3>:                              RS/6000 and PowerPC Options.
41630                                                              (line  581)
41631 * msim:                                  M32C Options.       (line   13)
41632 * msimple-fpu:                           RS/6000 and PowerPC Options.
41633                                                              (line  351)
41634 * msingle-exit:                          MMIX Options.       (line   66)
41635 * msingle-float <1>:                     RS/6000 and PowerPC Options.
41636                                                              (line  347)
41637 * msingle-float:                         MIPS Options.       (line  232)
41638 * msingle-pic-base:                      ARM Options.        (line  179)
41639 * msio:                                  HPPA Options.       (line  105)
41640 * msize:                                 AVR Options.        (line   32)
41641 * mslow-bytes:                           MCore Options.      (line   35)
41642 * msmall-data:                           DEC Alpha Options.  (line  195)
41643 * msmall-exec:                           S/390 and zSeries Options.
41644                                                              (line   80)
41645 * msmall-mem:                            SPU Options.        (line   35)
41646 * msmall-model:                          FR30 Options.       (line    9)
41647 * msmall-text:                           DEC Alpha Options.  (line  213)
41648 * msmartmips:                            MIPS Options.       (line  268)
41649 * msoft-float <1>:                       HPPA Options.       (line   91)
41650 * msoft-float <2>:                       RS/6000 and PowerPC Options.
41651                                                              (line  341)
41652 * msoft-float <3>:                       M680x0 Options.     (line  199)
41653 * msoft-float <4>:                       FRV Options.        (line   22)
41654 * msoft-float <5>:                       DEC Alpha Options.  (line   10)
41655 * msoft-float <6>:                       ARM Options.        (line   65)
41656 * msoft-float <7>:                       SPARC Options.      (line   25)
41657 * msoft-float <8>:                       i386 and x86-64 Options.
41658                                                              (line  216)
41659 * msoft-float <9>:                       PDP-11 Options.     (line   13)
41660 * msoft-float <10>:                      S/390 and zSeries Options.
41661                                                              (line   11)
41662 * msoft-float:                           MIPS Options.       (line  228)
41663 * msoft-quad-float:                      SPARC Options.      (line   45)
41664 * msoft-reg-count:                       M68hc1x Options.    (line   43)
41665 * mspace <1>:                            V850 Options.       (line   30)
41666 * mspace:                                SH Options.         (line  125)
41667 * mspe:                                  RS/6000 and PowerPC Options.
41668                                                              (line  221)
41669 * mspecld-anomaly:                       Blackfin Options.   (line   46)
41670 * msplit:                                PDP-11 Options.     (line   68)
41671 * msplit-addresses:                      MIPS Options.       (line  410)
41672 * msse:                                  i386 and x86-64 Options.
41673                                                              (line  435)
41674 * msse2avx:                              i386 and x86-64 Options.
41675                                                              (line  599)
41676 * msseregparm:                           i386 and x86-64 Options.
41677                                                              (line  332)
41678 * mstack-align:                          CRIS Options.       (line   55)
41679 * mstack-bias:                           SPARC Options.      (line  222)
41680 * mstack-check-l1:                       Blackfin Options.   (line   72)
41681 * mstack-guard:                          S/390 and zSeries Options.
41682                                                              (line  156)
41683 * mstack-increment:                      MCore Options.      (line   50)
41684 * mstack-size:                           S/390 and zSeries Options.
41685                                                              (line  156)
41686 * mstackrealign:                         i386 and x86-64 Options.
41687                                                              (line  365)
41688 * mstdmain:                              SPU Options.        (line   40)
41689 * mstrict-align <1>:                     M680x0 Options.     (line  283)
41690 * mstrict-align:                         RS/6000 and PowerPC Options.
41691                                                              (line  440)
41692 * mstring:                               RS/6000 and PowerPC Options.
41693                                                              (line  377)
41694 * mstringop-strategy=ALG:                i386 and x86-64 Options.
41695                                                              (line  565)
41696 * mstructure-size-boundary:              ARM Options.        (line  134)
41697 * msvr4-struct-return:                   RS/6000 and PowerPC Options.
41698                                                              (line  545)
41699 * mswdiv:                                RS/6000 and PowerPC Options.
41700                                                              (line  173)
41701 * msym32:                                MIPS Options.       (line  307)
41702 * MT:                                    Preprocessor Options.
41703                                                              (line  238)
41704 * mt:                                    IA-64 Options.      (line  106)
41705 * mtarget-align:                         Xtensa Options.     (line   54)
41706 * mtda:                                  V850 Options.       (line   34)
41707 * mtext:                                 ARC Options.        (line   30)
41708 * mtext-section-literals:                Xtensa Options.     (line   42)
41709 * mthread:                               i386 and x86-64 Windows Options.
41710                                                              (line   40)
41711 * mthreads:                              i386 and x86-64 Options.
41712                                                              (line  540)
41713 * mthumb:                                ARM Options.        (line  220)
41714 * mthumb-interwork:                      ARM Options.        (line   25)
41715 * mtiny-stack:                           AVR Options.        (line   52)
41716 * mtls-direct-seg-refs:                  i386 and x86-64 Options.
41717                                                              (line  581)
41718 * mtls-size:                             IA-64 Options.      (line   97)
41719 * mtoc:                                  RS/6000 and PowerPC Options.
41720                                                              (line  462)
41721 * mtomcat-stats:                         FRV Options.        (line  209)
41722 * mtoplevel-symbols:                     MMIX Options.       (line   40)
41723 * mtp:                                   ARM Options.        (line  250)
41724 * mtpcs-frame:                           ARM Options.        (line  226)
41725 * mtpcs-leaf-frame:                      ARM Options.        (line  232)
41726 * mtpf-trace:                            S/390 and zSeries Options.
41727                                                              (line  131)
41728 * mtrap-precision:                       DEC Alpha Options.  (line  109)
41729 * mtune <1>:                             IA-64 Options.      (line  101)
41730 * mtune <2>:                             M680x0 Options.     (line   66)
41731 * mtune <3>:                             S/390 and zSeries Options.
41732                                                              (line  124)
41733 * mtune <4>:                             SPARC Options.      (line  158)
41734 * mtune <5>:                             RS/6000 and PowerPC Options.
41735                                                              (line  163)
41736 * mtune <6>:                             DEC Alpha Options.  (line  267)
41737 * mtune <7>:                             MIPS Options.       (line   61)
41738 * mtune <8>:                             CRIS Options.       (line   16)
41739 * mtune <9>:                             i386 and x86-64 Options.
41740                                                              (line   10)
41741 * mtune:                                 ARM Options.        (line  102)
41742 * muclibc:                               GNU/Linux Options.  (line   13)
41743 * muls:                                  Score Options.      (line   18)
41744 * multcost=NUMBER:                       SH Options.         (line  138)
41745 * multi_module:                          Darwin Options.     (line  199)
41746 * multilib-library-pic:                  FRV Options.        (line   89)
41747 * multiply_defined:                      Darwin Options.     (line  199)
41748 * multiply_defined_unused:               Darwin Options.     (line  199)
41749 * munaligned-doubles:                    SPARC Options.      (line   59)
41750 * muninit-const-in-rodata:               MIPS Options.       (line  380)
41751 * munix:                                 VAX Options.        (line    9)
41752 * munix-asm:                             PDP-11 Options.     (line   74)
41753 * munsafe-dma:                           SPU Options.        (line   17)
41754 * mupdate:                               RS/6000 and PowerPC Options.
41755                                                              (line  388)
41756 * musermode:                             SH Options.         (line  133)
41757 * mv850:                                 V850 Options.       (line   49)
41758 * mv850e:                                V850 Options.       (line   69)
41759 * mv850e1:                               V850 Options.       (line   64)
41760 * mv8plus:                               SPARC Options.      (line  170)
41761 * mveclibabi:                            i386 and x86-64 Options.
41762                                                              (line  503)
41763 * mvis:                                  SPARC Options.      (line  177)
41764 * mvliw-branch:                          FRV Options.        (line  164)
41765 * mvms-return-codes:                     DEC Alpha/VMS Options.
41766                                                              (line    9)
41767 * mvolatile-asm-stop:                    IA-64 Options.      (line   32)
41768 * mvr4130-align:                         MIPS Options.       (line  638)
41769 * mvrsave:                               RS/6000 and PowerPC Options.
41770                                                              (line  191)
41771 * mvxworks:                              RS/6000 and PowerPC Options.
41772                                                              (line  602)
41773 * mwarn-cell-microcode:                  RS/6000 and PowerPC Options.
41774                                                              (line  197)
41775 * mwarn-dynamicstack:                    S/390 and zSeries Options.
41776                                                              (line  150)
41777 * mwarn-framesize:                       S/390 and zSeries Options.
41778                                                              (line  142)
41779 * mwarn-reloc:                           SPU Options.        (line   10)
41780 * mwide-bitfields:                       MCore Options.      (line   23)
41781 * mwin32:                                i386 and x86-64 Windows Options.
41782                                                              (line   44)
41783 * mwindows:                              i386 and x86-64 Windows Options.
41784                                                              (line   50)
41785 * mword-relocations:                     ARM Options.        (line  258)
41786 * mwords-little-endian:                  ARM Options.        (line   76)
41787 * mxgot <1>:                             MIPS Options.       (line  190)
41788 * mxgot:                                 M680x0 Options.     (line  315)
41789 * mxilinx-fpu:                           RS/6000 and PowerPC Options.
41790                                                              (line  361)
41791 * mxl-compat:                            RS/6000 and PowerPC Options.
41792                                                              (line  298)
41793 * myellowknife:                          RS/6000 and PowerPC Options.
41794                                                              (line  597)
41795 * mzarch:                                S/390 and zSeries Options.
41796                                                              (line   95)
41797 * mzda:                                  V850 Options.       (line   45)
41798 * mzero-extend:                          MMIX Options.       (line   27)
41799 * no-integrated-cpp:                     C Dialect Options.  (line  240)
41800 * no-lsim:                               MCore Options.      (line   46)
41801 * no-red-zone:                           i386 and x86-64 Options.
41802                                                              (line  615)
41803 * no_dead_strip_inits_and_terms:         Darwin Options.     (line  199)
41804 * noall_load:                            Darwin Options.     (line  199)
41805 * nocpp:                                 MIPS Options.       (line  476)
41806 * nodefaultlibs:                         Link Options.       (line   62)
41807 * nofixprebinding:                       Darwin Options.     (line  199)
41808 * nolibdld:                              HPPA Options.       (line  188)
41809 * nomultidefs:                           Darwin Options.     (line  199)
41810 * non-static:                            VxWorks Options.    (line   16)
41811 * noprebind:                             Darwin Options.     (line  199)
41812 * noseglinkedit:                         Darwin Options.     (line  199)
41813 * nostartfiles:                          Link Options.       (line   57)
41814 * nostdinc:                              Preprocessor Options.
41815                                                              (line  374)
41816 * nostdinc++ <1>:                        C++ Dialect Options.
41817                                                              (line  254)
41818 * nostdinc++:                            Preprocessor Options.
41819                                                              (line  379)
41820 * nostdlib:                              Link Options.       (line   71)
41821 * o:                                     Overall Options.    (line  187)
41822 * O:                                     Optimize Options.   (line   29)
41823 * o:                                     Preprocessor Options.
41824                                                              (line   74)
41825 * O0:                                    Optimize Options.   (line  106)
41826 * O1:                                    Optimize Options.   (line   29)
41827 * O2:                                    Optimize Options.   (line   67)
41828 * O3:                                    Optimize Options.   (line  100)
41829 * Os:                                    Optimize Options.   (line  110)
41830 * P:                                     Preprocessor Options.
41831                                                              (line  590)
41832 * p:                                     Debugging Options.  (line  219)
41833 * pagezero_size:                         Darwin Options.     (line  199)
41834 * param:                                 Optimize Options.   (line 1702)
41835 * pass-exit-codes:                       Overall Options.    (line  145)
41836 * pedantic <1>:                          Warning Options.    (line   53)
41837 * pedantic <2>:                          Alternate Keywords. (line   29)
41838 * pedantic <3>:                          Preprocessor Options.
41839                                                              (line  162)
41840 * pedantic <4>:                          Warnings and Errors.
41841                                                              (line   25)
41842 * pedantic <5>:                          Standards.          (line   16)
41843 * pedantic:                              C Extensions.       (line    6)
41844 * pedantic-errors <1>:                   Preprocessor Options.
41845                                                              (line  167)
41846 * pedantic-errors <2>:                   Non-bugs.           (line  216)
41847 * pedantic-errors <3>:                   Warnings and Errors.
41848                                                              (line   25)
41849 * pedantic-errors <4>:                   Standards.          (line   16)
41850 * pedantic-errors:                       Warning Options.    (line   95)
41851 * pg:                                    Debugging Options.  (line  225)
41852 * pie:                                   Link Options.       (line   92)
41853 * pipe:                                  Overall Options.    (line  209)
41854 * prebind:                               Darwin Options.     (line  199)
41855 * prebind_all_twolevel_modules:          Darwin Options.     (line  199)
41856 * preprocessor:                          Preprocessor Options.
41857                                                              (line   24)
41858 * print-file-name:                       Debugging Options.  (line  884)
41859 * print-libgcc-file-name:                Debugging Options.  (line  905)
41860 * print-multi-directory:                 Debugging Options.  (line  890)
41861 * print-multi-lib:                       Debugging Options.  (line  895)
41862 * print-objc-runtime-info:               Objective-C and Objective-C++ Dialect Options.
41863                                                              (line  244)
41864 * print-prog-name:                       Debugging Options.  (line  902)
41865 * print-search-dirs:                     Debugging Options.  (line  913)
41866 * print-sysroot:                         Debugging Options.  (line  926)
41867 * print-sysroot-headers-suffix:          Debugging Options.  (line  933)
41868 * private_bundle:                        Darwin Options.     (line  199)
41869 * pthread <1>:                           RS/6000 and PowerPC Options.
41870                                                              (line  709)
41871 * pthread <2>:                           SPARC Options.      (line  242)
41872 * pthread:                               IA-64 Options.      (line  106)
41873 * pthreads:                              SPARC Options.      (line  236)
41874 * Q:                                     Debugging Options.  (line  231)
41875 * Qn:                                    System V Options.   (line   18)
41876 * Qy:                                    System V Options.   (line   14)
41877 * rdynamic:                              Link Options.       (line   98)
41878 * read_only_relocs:                      Darwin Options.     (line  199)
41879 * remap:                                 Preprocessor Options.
41880                                                              (line  638)
41881 * S <1>:                                 Overall Options.    (line  170)
41882 * S:                                     Link Options.       (line   20)
41883 * s:                                     Link Options.       (line  105)
41884 * save-temps:                            Debugging Options.  (line  846)
41885 * sectalign:                             Darwin Options.     (line  199)
41886 * sectcreate:                            Darwin Options.     (line  199)
41887 * sectobjectsymbols:                     Darwin Options.     (line  199)
41888 * sectorder:                             Darwin Options.     (line  199)
41889 * seg1addr:                              Darwin Options.     (line  199)
41890 * seg_addr_table:                        Darwin Options.     (line  199)
41891 * seg_addr_table_filename:               Darwin Options.     (line  199)
41892 * segaddr:                               Darwin Options.     (line  199)
41893 * seglinkedit:                           Darwin Options.     (line  199)
41894 * segprot:                               Darwin Options.     (line  199)
41895 * segs_read_only_addr:                   Darwin Options.     (line  199)
41896 * segs_read_write_addr:                  Darwin Options.     (line  199)
41897 * shared:                                Link Options.       (line  114)
41898 * shared-libgcc:                         Link Options.       (line  122)
41899 * sim:                                   CRIS Options.       (line   95)
41900 * sim2:                                  CRIS Options.       (line  101)
41901 * single_module:                         Darwin Options.     (line  199)
41902 * specs:                                 Directory Options.  (line   84)
41903 * static <1>:                            Darwin Options.     (line  199)
41904 * static <2>:                            HPPA Options.       (line  192)
41905 * static:                                Link Options.       (line  109)
41906 * static-libgcc:                         Link Options.       (line  122)
41907 * std <1>:                               Non-bugs.           (line  107)
41908 * std <2>:                               Other Builtins.     (line   22)
41909 * std <3>:                               C Dialect Options.  (line   47)
41910 * std:                                   Standards.          (line   16)
41911 * std=:                                  Preprocessor Options.
41912                                                              (line  325)
41913 * sub_library:                           Darwin Options.     (line  199)
41914 * sub_umbrella:                          Darwin Options.     (line  199)
41915 * symbolic:                              Link Options.       (line  157)
41916 * sysroot:                               Directory Options.  (line   92)
41917 * T:                                     Link Options.       (line  163)
41918 * target-help <1>:                       Preprocessor Options.
41919                                                              (line  643)
41920 * target-help:                           Overall Options.    (line  240)
41921 * threads <1>:                           HPPA Options.       (line  205)
41922 * threads:                               SPARC Options.      (line  230)
41923 * time:                                  Debugging Options.  (line  860)
41924 * tls:                                   FRV Options.        (line   75)
41925 * TLS:                                   FRV Options.        (line   72)
41926 * traditional <1>:                       C Dialect Options.  (line  252)
41927 * traditional:                           Incompatibilities.  (line    6)
41928 * traditional-cpp <1>:                   Preprocessor Options.
41929                                                              (line  621)
41930 * traditional-cpp:                       C Dialect Options.  (line  252)
41931 * trigraphs <1>:                         Preprocessor Options.
41932                                                              (line  625)
41933 * trigraphs:                             C Dialect Options.  (line  236)
41934 * twolevel_namespace:                    Darwin Options.     (line  199)
41935 * u:                                     Link Options.       (line  196)
41936 * U:                                     Preprocessor Options.
41937                                                              (line   56)
41938 * umbrella:                              Darwin Options.     (line  199)
41939 * undef:                                 Preprocessor Options.
41940                                                              (line   60)
41941 * undefined:                             Darwin Options.     (line  199)
41942 * unexported_symbols_list:               Darwin Options.     (line  199)
41943 * v <1>:                                 Overall Options.    (line  198)
41944 * v:                                     Preprocessor Options.
41945                                                              (line  647)
41946 * V:                                     Target Options.     (line   25)
41947 * version <1>:                           Preprocessor Options.
41948                                                              (line  660)
41949 * version:                               Overall Options.    (line  348)
41950 * w:                                     Preprocessor Options.
41951                                                              (line  158)
41952 * W:                                     Warning Options.    (line 1025)
41953 * w:                                     Warning Options.    (line   18)
41954 * W <1>:                                 Warning Options.    (line  146)
41955 * W <2>:                                 Incompatibilities.  (line   64)
41956 * W:                                     Warning Options.    (line 1132)
41957 * Wa:                                    Assembler Options.  (line    9)
41958 * Wabi:                                  C++ Dialect Options.
41959                                                              (line  268)
41960 * Waddress:                              Warning Options.    (line  953)
41961 * Waggregate-return:                     Warning Options.    (line  971)
41962 * Wall <1>:                              Warning Options.    (line   99)
41963 * Wall <2>:                              Standard Libraries. (line    6)
41964 * Wall:                                  Preprocessor Options.
41965                                                              (line   80)
41966 * Warray-bounds:                         Warning Options.    (line  691)
41967 * Wassign-intercept:                     Objective-C and Objective-C++ Dialect Options.
41968                                                              (line  198)
41969 * Wattributes:                           Warning Options.    (line  976)
41970 * Wbad-function-cast:                    Warning Options.    (line  869)
41971 * Wbuiltin-macro-redefined:              Warning Options.    (line  982)
41972 * Wcast-align:                           Warning Options.    (line  889)
41973 * Wcast-qual:                            Warning Options.    (line  884)
41974 * Wchar-subscripts:                      Warning Options.    (line  184)
41975 * Wclobbered:                            Warning Options.    (line  909)
41976 * Wcomment <1>:                          Warning Options.    (line  189)
41977 * Wcomment:                              Preprocessor Options.
41978                                                              (line   88)
41979 * Wcomments:                             Preprocessor Options.
41980                                                              (line   88)
41981 * Wconversion:                           Warning Options.    (line  913)
41982 * Wcoverage-mismatch:                    Language Independent Options.
41983                                                              (line   42)
41984 * Wctor-dtor-privacy:                    C++ Dialect Options.
41985                                                              (line  360)
41986 * Wdeclaration-after-statement:          Warning Options.    (line  812)
41987 * Wdeprecated:                           Warning Options.    (line 1119)
41988 * Wdeprecated-declarations:              Warning Options.    (line 1123)
41989 * Wdisabled-optimization:                Warning Options.    (line 1272)
41990 * Wdiv-by-zero:                          Warning Options.    (line  696)
41991 * weak_reference_mismatches:             Darwin Options.     (line  199)
41992 * Weffc++:                               C++ Dialect Options.
41993                                                              (line  387)
41994 * Wempty-body:                           Warning Options.    (line  932)
41995 * Wendif-labels <1>:                     Preprocessor Options.
41996                                                              (line  135)
41997 * Wendif-labels:                         Warning Options.    (line  822)
41998 * Wenum-compare:                         Warning Options.    (line  936)
41999 * Werror <1>:                            Warning Options.    (line   21)
42000 * Werror:                                Preprocessor Options.
42001                                                              (line  148)
42002 * Werror=:                               Warning Options.    (line   24)
42003 * Wextra:                                Warning Options.    (line 1132)
42004 * Wfatal-errors:                         Warning Options.    (line   38)
42005 * Wfloat-equal:                          Warning Options.    (line  712)
42006 * Wformat <1>:                           Function Attributes.
42007                                                              (line  373)
42008 * Wformat:                               Warning Options.    (line  194)
42009 * Wformat-contains-nul:                  Warning Options.    (line  233)
42010 * Wformat-extra-args:                    Warning Options.    (line  237)
42011 * Wformat-nonliteral <1>:                Warning Options.    (line  255)
42012 * Wformat-nonliteral:                    Function Attributes.
42013                                                              (line  432)
42014 * Wformat-security:                      Warning Options.    (line  260)
42015 * Wformat-y2k:                           Warning Options.    (line  229)
42016 * Wformat-zero-length:                   Warning Options.    (line  251)
42017 * Wformat=2:                             Warning Options.    (line  271)
42018 * Wframe-larger-than:                    Warning Options.    (line  834)
42019 * whatsloaded:                           Darwin Options.     (line  199)
42020 * whyload:                               Darwin Options.     (line  199)
42021 * Wignored-qualifiers:                   Warning Options.    (line  310)
42022 * Wimplicit:                             Warning Options.    (line  306)
42023 * Wimplicit-function-declaration:        Warning Options.    (line  300)
42024 * Wimplicit-int:                         Warning Options.    (line  296)
42025 * Winit-self:                            Warning Options.    (line  283)
42026 * Winline <1>:                           Warning Options.    (line 1211)
42027 * Winline:                               Inline.             (line   63)
42028 * Wint-to-pointer-cast:                  Warning Options.    (line 1238)
42029 * Winvalid-offsetof:                     Warning Options.    (line 1224)
42030 * Winvalid-pch:                          Warning Options.    (line 1246)
42031 * Wl:                                    Link Options.       (line  188)
42032 * Wlarger-than-LEN:                      Warning Options.    (line  831)
42033 * Wlarger-than=LEN:                      Warning Options.    (line  831)
42034 * Wlogical-op:                           Warning Options.    (line  966)
42035 * Wlong-long:                            Warning Options.    (line 1250)
42036 * Wmain:                                 Warning Options.    (line  321)
42037 * Wmissing-braces:                       Warning Options.    (line  328)
42038 * Wmissing-declarations:                 Warning Options.    (line 1017)
42039 * Wmissing-field-initializers:           Warning Options.    (line 1025)
42040 * Wmissing-format-attribute:             Warning Options.    (line 1051)
42041 * Wmissing-include-dirs:                 Warning Options.    (line  338)
42042 * Wmissing-noreturn:                     Warning Options.    (line 1043)
42043 * Wmissing-parameter-type:               Warning Options.    (line 1003)
42044 * Wmissing-prototypes:                   Warning Options.    (line 1011)
42045 * Wmultichar:                            Warning Options.    (line 1070)
42046 * Wnested-externs:                       Warning Options.    (line 1186)
42047 * Wno-abi:                               C++ Dialect Options.
42048                                                              (line  268)
42049 * Wno-address:                           Warning Options.    (line  953)
42050 * Wno-aggregate-return:                  Warning Options.    (line  971)
42051 * Wno-all:                               Warning Options.    (line   99)
42052 * Wno-array-bounds:                      Warning Options.    (line  691)
42053 * Wno-assign-intercept:                  Objective-C and Objective-C++ Dialect Options.
42054                                                              (line  198)
42055 * Wno-attributes:                        Warning Options.    (line  976)
42056 * Wno-bad-function-cast:                 Warning Options.    (line  869)
42057 * Wno-builtin-macro-redefined:           Warning Options.    (line  982)
42058 * Wno-cast-align:                        Warning Options.    (line  889)
42059 * Wno-cast-qual:                         Warning Options.    (line  884)
42060 * Wno-char-subscripts:                   Warning Options.    (line  184)
42061 * Wno-clobbered:                         Warning Options.    (line  909)
42062 * Wno-comment:                           Warning Options.    (line  189)
42063 * Wno-conversion:                        Warning Options.    (line  913)
42064 * Wno-ctor-dtor-privacy:                 C++ Dialect Options.
42065                                                              (line  360)
42066 * Wno-declaration-after-statement:       Warning Options.    (line  812)
42067 * Wno-deprecated:                        Warning Options.    (line 1119)
42068 * Wno-deprecated-declarations:           Warning Options.    (line 1123)
42069 * Wno-disabled-optimization:             Warning Options.    (line 1272)
42070 * Wno-div-by-zero:                       Warning Options.    (line  696)
42071 * Wno-effc++:                            C++ Dialect Options.
42072                                                              (line  387)
42073 * Wno-empty-body:                        Warning Options.    (line  932)
42074 * Wno-endif-labels:                      Warning Options.    (line  822)
42075 * Wno-enum-compare:                      Warning Options.    (line  936)
42076 * Wno-error:                             Warning Options.    (line   21)
42077 * Wno-error=:                            Warning Options.    (line   24)
42078 * Wno-extra:                             Warning Options.    (line 1132)
42079 * Wno-fatal-errors:                      Warning Options.    (line   38)
42080 * Wno-float-equal:                       Warning Options.    (line  712)
42081 * Wno-format:                            Warning Options.    (line  194)
42082 * Wno-format-contains-nul:               Warning Options.    (line  233)
42083 * Wno-format-extra-args:                 Warning Options.    (line  237)
42084 * Wno-format-nonliteral:                 Warning Options.    (line  255)
42085 * Wno-format-security:                   Warning Options.    (line  260)
42086 * Wno-format-y2k:                        Warning Options.    (line  229)
42087 * Wno-format-zero-length:                Warning Options.    (line  251)
42088 * Wno-format=2:                          Warning Options.    (line  271)
42089 * Wno-ignored-qualifiers:                Warning Options.    (line  310)
42090 * Wno-implicit:                          Warning Options.    (line  306)
42091 * Wno-implicit-function-declaration:     Warning Options.    (line  300)
42092 * Wno-implicit-int:                      Warning Options.    (line  296)
42093 * Wno-init-self:                         Warning Options.    (line  283)
42094 * Wno-inline:                            Warning Options.    (line 1211)
42095 * Wno-int-to-pointer-cast:               Warning Options.    (line 1238)
42096 * Wno-invalid-offsetof:                  Warning Options.    (line 1224)
42097 * Wno-invalid-pch:                       Warning Options.    (line 1246)
42098 * Wno-logical-op:                        Warning Options.    (line  966)
42099 * Wno-long-long:                         Warning Options.    (line 1250)
42100 * Wno-main:                              Warning Options.    (line  321)
42101 * Wno-missing-braces:                    Warning Options.    (line  328)
42102 * Wno-missing-declarations:              Warning Options.    (line 1017)
42103 * Wno-missing-field-initializers:        Warning Options.    (line 1025)
42104 * Wno-missing-format-attribute:          Warning Options.    (line 1051)
42105 * Wno-missing-include-dirs:              Warning Options.    (line  338)
42106 * Wno-missing-noreturn:                  Warning Options.    (line 1043)
42107 * Wno-missing-parameter-type:            Warning Options.    (line 1003)
42108 * Wno-missing-prototypes:                Warning Options.    (line 1011)
42109 * Wno-mudflap:                           Warning Options.    (line 1292)
42110 * Wno-multichar:                         Warning Options.    (line 1070)
42111 * Wno-nested-externs:                    Warning Options.    (line 1186)
42112 * Wno-non-template-friend:               C++ Dialect Options.
42113                                                              (line  424)
42114 * Wno-non-virtual-dtor:                  C++ Dialect Options.
42115                                                              (line  365)
42116 * Wno-nonnull:                           Warning Options.    (line  276)
42117 * Wno-old-style-cast:                    C++ Dialect Options.
42118                                                              (line  440)
42119 * Wno-old-style-declaration:             Warning Options.    (line  993)
42120 * Wno-old-style-definition:              Warning Options.    (line  999)
42121 * Wno-overflow:                          Warning Options.    (line 1129)
42122 * Wno-overlength-strings:                Warning Options.    (line 1296)
42123 * Wno-overloaded-virtual:                C++ Dialect Options.
42124                                                              (line  446)
42125 * Wno-override-init:                     Warning Options.    (line 1132)
42126 * Wno-packed:                            Warning Options.    (line 1140)
42127 * Wno-packed-bitfield-compat:            Warning Options.    (line 1157)
42128 * Wno-padded:                            Warning Options.    (line 1174)
42129 * Wno-parentheses:                       Warning Options.    (line  341)
42130 * Wno-pedantic-ms-format:                Warning Options.    (line  849)
42131 * Wno-pmf-conversions <1>:               C++ Dialect Options.
42132                                                              (line  465)
42133 * Wno-pmf-conversions:                   Bound member functions.
42134                                                              (line   35)
42135 * Wno-pointer-arith:                     Warning Options.    (line  855)
42136 * Wno-pointer-sign:                      Warning Options.    (line 1281)
42137 * Wno-pointer-to-int-cast:               Warning Options.    (line 1242)
42138 * Wno-pragmas:                           Warning Options.    (line  594)
42139 * Wno-protocol:                          Objective-C and Objective-C++ Dialect Options.
42140                                                              (line  202)
42141 * Wno-redundant-decls:                   Warning Options.    (line 1181)
42142 * Wno-reorder:                           C++ Dialect Options.
42143                                                              (line  371)
42144 * Wno-return-type:                       Warning Options.    (line  431)
42145 * Wno-selector:                          Objective-C and Objective-C++ Dialect Options.
42146                                                              (line  212)
42147 * Wno-sequence-point:                    Warning Options.    (line  385)
42148 * Wno-shadow:                            Warning Options.    (line  826)
42149 * Wno-sign-compare:                      Warning Options.    (line  940)
42150 * Wno-sign-conversion:                   Warning Options.    (line  947)
42151 * Wno-sign-promo:                        C++ Dialect Options.
42152                                                              (line  469)
42153 * Wno-stack-protector:                   Warning Options.    (line 1287)
42154 * Wno-strict-aliasing:                   Warning Options.    (line  599)
42155 * Wno-strict-aliasing=n:                 Warning Options.    (line  607)
42156 * Wno-strict-null-sentinel:              C++ Dialect Options.
42157                                                              (line  417)
42158 * Wno-strict-overflow:                   Warning Options.    (line  640)
42159 * Wno-strict-prototypes:                 Warning Options.    (line  987)
42160 * Wno-strict-selector-match:             Objective-C and Objective-C++ Dialect Options.
42161                                                              (line  224)
42162 * Wno-switch:                            Warning Options.    (line  446)
42163 * Wno-switch-default:                    Warning Options.    (line  454)
42164 * Wno-switch-enum:                       Warning Options.    (line  457)
42165 * Wno-sync-nand:                         Warning Options.    (line  463)
42166 * Wno-system-headers:                    Warning Options.    (line  701)
42167 * Wno-traditional:                       Warning Options.    (line  727)
42168 * Wno-traditional-conversion:            Warning Options.    (line  804)
42169 * Wno-trigraphs:                         Warning Options.    (line  468)
42170 * Wno-type-limits:                       Warning Options.    (line  862)
42171 * Wno-undeclared-selector:               Objective-C and Objective-C++ Dialect Options.
42172                                                              (line  232)
42173 * Wno-undef:                             Warning Options.    (line  819)
42174 * Wno-uninitialized:                     Warning Options.    (line  517)
42175 * Wno-unknown-pragmas:                   Warning Options.    (line  587)
42176 * Wno-unreachable-code:                  Warning Options.    (line 1189)
42177 * Wno-unsafe-loop-optimizations:         Warning Options.    (line  843)
42178 * Wno-unused:                            Warning Options.    (line  510)
42179 * Wno-unused-function:                   Warning Options.    (line  473)
42180 * Wno-unused-label:                      Warning Options.    (line  478)
42181 * Wno-unused-parameter:                  Warning Options.    (line  485)
42182 * Wno-unused-value:                      Warning Options.    (line  500)
42183 * Wno-unused-variable:                   Warning Options.    (line  492)
42184 * Wno-variadic-macros:                   Warning Options.    (line 1256)
42185 * Wno-vla:                               Warning Options.    (line 1262)
42186 * Wno-volatile-register-var:             Warning Options.    (line 1266)
42187 * Wno-write-strings:                     Warning Options.    (line  895)
42188 * Wnon-template-friend:                  C++ Dialect Options.
42189                                                              (line  424)
42190 * Wnon-virtual-dtor:                     C++ Dialect Options.
42191                                                              (line  365)
42192 * Wnonnull:                              Warning Options.    (line  276)
42193 * Wnormalized=:                          Warning Options.    (line 1076)
42194 * Wold-style-cast:                       C++ Dialect Options.
42195                                                              (line  440)
42196 * Wold-style-declaration:                Warning Options.    (line  993)
42197 * Wold-style-definition:                 Warning Options.    (line  999)
42198 * Woverflow:                             Warning Options.    (line 1129)
42199 * Woverlength-strings:                   Warning Options.    (line 1296)
42200 * Woverloaded-virtual:                   C++ Dialect Options.
42201                                                              (line  446)
42202 * Woverride-init:                        Warning Options.    (line 1132)
42203 * Wp:                                    Preprocessor Options.
42204                                                              (line   13)
42205 * Wpacked:                               Warning Options.    (line 1140)
42206 * Wpacked-bitfield-compat:               Warning Options.    (line 1157)
42207 * Wpadded:                               Warning Options.    (line 1174)
42208 * Wparentheses:                          Warning Options.    (line  341)
42209 * Wpedantic-ms-format:                   Warning Options.    (line  849)
42210 * Wpmf-conversions:                      C++ Dialect Options.
42211                                                              (line  465)
42212 * Wpointer-arith <1>:                    Pointer Arith.      (line   13)
42213 * Wpointer-arith:                        Warning Options.    (line  855)
42214 * Wpointer-sign:                         Warning Options.    (line 1281)
42215 * Wpointer-to-int-cast:                  Warning Options.    (line 1242)
42216 * Wpragmas:                              Warning Options.    (line  594)
42217 * Wprotocol:                             Objective-C and Objective-C++ Dialect Options.
42218                                                              (line  202)
42219 * wrapper:                               Overall Options.    (line  351)
42220 * Wredundant-decls:                      Warning Options.    (line 1181)
42221 * Wreorder:                              C++ Dialect Options.
42222                                                              (line  371)
42223 * Wreturn-type:                          Warning Options.    (line  431)
42224 * Wselector:                             Objective-C and Objective-C++ Dialect Options.
42225                                                              (line  212)
42226 * Wsequence-point:                       Warning Options.    (line  385)
42227 * Wshadow:                               Warning Options.    (line  826)
42228 * Wsign-compare:                         Warning Options.    (line  940)
42229 * Wsign-conversion:                      Warning Options.    (line  947)
42230 * Wsign-promo:                           C++ Dialect Options.
42231                                                              (line  469)
42232 * Wstack-protector:                      Warning Options.    (line 1287)
42233 * Wstrict-aliasing:                      Warning Options.    (line  599)
42234 * Wstrict-aliasing=n:                    Warning Options.    (line  607)
42235 * Wstrict-null-sentinel:                 C++ Dialect Options.
42236                                                              (line  417)
42237 * Wstrict-overflow:                      Warning Options.    (line  640)
42238 * Wstrict-prototypes:                    Warning Options.    (line  987)
42239 * Wstrict-selector-match:                Objective-C and Objective-C++ Dialect Options.
42240                                                              (line  224)
42241 * Wswitch:                               Warning Options.    (line  446)
42242 * Wswitch-default:                       Warning Options.    (line  454)
42243 * Wswitch-enum:                          Warning Options.    (line  457)
42244 * Wsync-nand:                            Warning Options.    (line  463)
42245 * Wsystem-headers <1>:                   Preprocessor Options.
42246                                                              (line  152)
42247 * Wsystem-headers:                       Warning Options.    (line  701)
42248 * Wtraditional <1>:                      Preprocessor Options.
42249                                                              (line  105)
42250 * Wtraditional:                          Warning Options.    (line  727)
42251 * Wtraditional-conversion <1>:           Protoize Caveats.   (line   31)
42252 * Wtraditional-conversion:               Warning Options.    (line  804)
42253 * Wtrigraphs <1>:                        Preprocessor Options.
42254                                                              (line   93)
42255 * Wtrigraphs:                            Warning Options.    (line  468)
42256 * Wtype-limits:                          Warning Options.    (line  862)
42257 * Wundeclared-selector:                  Objective-C and Objective-C++ Dialect Options.
42258                                                              (line  232)
42259 * Wundef <1>:                            Preprocessor Options.
42260                                                              (line  111)
42261 * Wundef:                                Warning Options.    (line  819)
42262 * Wuninitialized:                        Warning Options.    (line  517)
42263 * Wunknown-pragmas:                      Warning Options.    (line  587)
42264 * Wunreachable-code:                     Warning Options.    (line 1189)
42265 * Wunsafe-loop-optimizations:            Warning Options.    (line  843)
42266 * Wunused:                               Warning Options.    (line  510)
42267 * Wunused-function:                      Warning Options.    (line  473)
42268 * Wunused-label:                         Warning Options.    (line  478)
42269 * Wunused-macros:                        Preprocessor Options.
42270                                                              (line  116)
42271 * Wunused-parameter:                     Warning Options.    (line  485)
42272 * Wunused-value:                         Warning Options.    (line  500)
42273 * Wunused-variable:                      Warning Options.    (line  492)
42274 * Wvariadic-macros:                      Warning Options.    (line 1256)
42275 * Wvla:                                  Warning Options.    (line 1262)
42276 * Wvolatile-register-var:                Warning Options.    (line 1266)
42277 * Wwrite-strings:                        Warning Options.    (line  895)
42278 * x <1>:                                 Overall Options.    (line  122)
42279 * x:                                     Preprocessor Options.
42280                                                              (line  309)
42281 * Xassembler:                            Assembler Options.  (line   13)
42282 * Xbind-lazy:                            VxWorks Options.    (line   26)
42283 * Xbind-now:                             VxWorks Options.    (line   30)
42284 * Xlinker:                               Link Options.       (line  169)
42285 * Ym:                                    System V Options.   (line   26)
42286 * YP:                                    System V Options.   (line   22)
42288 \x1f
42289 File: gcc.info,  Node: Keyword Index,  Prev: Option Index,  Up: Top
42291 Keyword Index
42292 *************
42294 \0\b[index\0\b]
42295 * Menu:
42297 * ! in constraint:                       Multi-Alternative.  (line   33)
42298 * # in constraint:                       Modifiers.          (line   57)
42299 * #pragma:                               Pragmas.            (line    6)
42300 * #pragma implementation:                C++ Interface.      (line   39)
42301 * #pragma implementation, implied:       C++ Interface.      (line   46)
42302 * #pragma interface:                     C++ Interface.      (line   20)
42303 * #pragma, reason for not using:         Function Attributes.
42304                                                              (line 1344)
42305 * $:                                     Dollar Signs.       (line    6)
42306 * % in constraint:                       Modifiers.          (line   45)
42307 * %include:                              Spec Files.         (line   27)
42308 * %include_noerr:                        Spec Files.         (line   31)
42309 * %rename:                               Spec Files.         (line   35)
42310 * & in constraint:                       Modifiers.          (line   25)
42311 * ':                                     Incompatibilities.  (line  116)
42312 * (:                                     Constructing Calls. (line   53)
42313 * * in constraint:                       Modifiers.          (line   62)
42314 * + in constraint:                       Modifiers.          (line   12)
42315 * -lgcc, use with -nodefaultlibs:        Link Options.       (line   79)
42316 * -lgcc, use with -nostdlib:             Link Options.       (line   79)
42317 * -nodefaultlibs and unresolved references: Link Options.    (line   79)
42318 * -nostdlib and unresolved references:   Link Options.       (line   79)
42319 * .sdata/.sdata2 references (PowerPC):   RS/6000 and PowerPC Options.
42320                                                              (line  663)
42321 * //:                                    C++ Comments.       (line    6)
42322 * 0 in constraint:                       Simple Constraints. (line  117)
42323 * < in constraint:                       Simple Constraints. (line   48)
42324 * = in constraint:                       Modifiers.          (line    8)
42325 * > in constraint:                       Simple Constraints. (line   52)
42326 * ? in constraint:                       Multi-Alternative.  (line   27)
42327 * ?: extensions:                         Conditionals.       (line    6)
42328 * ?: side effect:                        Conditionals.       (line   20)
42329 * _ in variables in macros:              Typeof.             (line   42)
42330 * __builtin___clear_cache:               Other Builtins.     (line  274)
42331 * __builtin___fprintf_chk:               Object Size Checking.
42332                                                              (line    6)
42333 * __builtin___memcpy_chk:                Object Size Checking.
42334                                                              (line    6)
42335 * __builtin___memmove_chk:               Object Size Checking.
42336                                                              (line    6)
42337 * __builtin___mempcpy_chk:               Object Size Checking.
42338                                                              (line    6)
42339 * __builtin___memset_chk:                Object Size Checking.
42340                                                              (line    6)
42341 * __builtin___printf_chk:                Object Size Checking.
42342                                                              (line    6)
42343 * __builtin___snprintf_chk:              Object Size Checking.
42344                                                              (line    6)
42345 * __builtin___sprintf_chk:               Object Size Checking.
42346                                                              (line    6)
42347 * __builtin___stpcpy_chk:                Object Size Checking.
42348                                                              (line    6)
42349 * __builtin___strcat_chk:                Object Size Checking.
42350                                                              (line    6)
42351 * __builtin___strcpy_chk:                Object Size Checking.
42352                                                              (line    6)
42353 * __builtin___strncat_chk:               Object Size Checking.
42354                                                              (line    6)
42355 * __builtin___strncpy_chk:               Object Size Checking.
42356                                                              (line    6)
42357 * __builtin___vfprintf_chk:              Object Size Checking.
42358                                                              (line    6)
42359 * __builtin___vprintf_chk:               Object Size Checking.
42360                                                              (line    6)
42361 * __builtin___vsnprintf_chk:             Object Size Checking.
42362                                                              (line    6)
42363 * __builtin___vsprintf_chk:              Object Size Checking.
42364                                                              (line    6)
42365 * __builtin_apply:                       Constructing Calls. (line   31)
42366 * __builtin_apply_args:                  Constructing Calls. (line   20)
42367 * __builtin_bswap32:                     Other Builtins.     (line  493)
42368 * __builtin_bswap64:                     Other Builtins.     (line  498)
42369 * __builtin_choose_expr:                 Other Builtins.     (line  156)
42370 * __builtin_clz:                         Other Builtins.     (line  426)
42371 * __builtin_clzl:                        Other Builtins.     (line  444)
42372 * __builtin_clzll:                       Other Builtins.     (line  464)
42373 * __builtin_constant_p:                  Other Builtins.     (line  196)
42374 * __builtin_ctz:                         Other Builtins.     (line  430)
42375 * __builtin_ctzl:                        Other Builtins.     (line  448)
42376 * __builtin_ctzll:                       Other Builtins.     (line  468)
42377 * __builtin_expect:                      Other Builtins.     (line  242)
42378 * __builtin_ffs:                         Other Builtins.     (line  422)
42379 * __builtin_ffsl:                        Other Builtins.     (line  440)
42380 * __builtin_ffsll:                       Other Builtins.     (line  460)
42381 * __builtin_fpclassify:                  Other Builtins.     (line    6)
42382 * __builtin_frame_address:               Return Address.     (line   34)
42383 * __builtin_huge_val:                    Other Builtins.     (line  325)
42384 * __builtin_huge_valf:                   Other Builtins.     (line  330)
42385 * __builtin_huge_vall:                   Other Builtins.     (line  333)
42386 * __builtin_inf:                         Other Builtins.     (line  348)
42387 * __builtin_infd128:                     Other Builtins.     (line  358)
42388 * __builtin_infd32:                      Other Builtins.     (line  352)
42389 * __builtin_infd64:                      Other Builtins.     (line  355)
42390 * __builtin_inff:                        Other Builtins.     (line  362)
42391 * __builtin_infl:                        Other Builtins.     (line  367)
42392 * __builtin_isfinite:                    Other Builtins.     (line    6)
42393 * __builtin_isgreater:                   Other Builtins.     (line    6)
42394 * __builtin_isgreaterequal:              Other Builtins.     (line    6)
42395 * __builtin_isinf_sign:                  Other Builtins.     (line    6)
42396 * __builtin_isless:                      Other Builtins.     (line    6)
42397 * __builtin_islessequal:                 Other Builtins.     (line    6)
42398 * __builtin_islessgreater:               Other Builtins.     (line    6)
42399 * __builtin_isnormal:                    Other Builtins.     (line    6)
42400 * __builtin_isunordered:                 Other Builtins.     (line    6)
42401 * __builtin_nan:                         Other Builtins.     (line  378)
42402 * __builtin_nand128:                     Other Builtins.     (line  400)
42403 * __builtin_nand32:                      Other Builtins.     (line  394)
42404 * __builtin_nand64:                      Other Builtins.     (line  397)
42405 * __builtin_nanf:                        Other Builtins.     (line  404)
42406 * __builtin_nanl:                        Other Builtins.     (line  407)
42407 * __builtin_nans:                        Other Builtins.     (line  411)
42408 * __builtin_nansf:                       Other Builtins.     (line  415)
42409 * __builtin_nansl:                       Other Builtins.     (line  418)
42410 * __builtin_object_size:                 Object Size Checking.
42411                                                              (line   11)
42412 * __builtin_offsetof:                    Offsetof.           (line    6)
42413 * __builtin_parity:                      Other Builtins.     (line  437)
42414 * __builtin_parityl:                     Other Builtins.     (line  456)
42415 * __builtin_parityll:                    Other Builtins.     (line  476)
42416 * __builtin_popcount:                    Other Builtins.     (line  434)
42417 * __builtin_popcountl:                   Other Builtins.     (line  452)
42418 * __builtin_popcountll:                  Other Builtins.     (line  472)
42419 * __builtin_powi:                        Other Builtins.     (line    6)
42420 * __builtin_powif:                       Other Builtins.     (line    6)
42421 * __builtin_powil:                       Other Builtins.     (line    6)
42422 * __builtin_prefetch:                    Other Builtins.     (line  286)
42423 * __builtin_return:                      Constructing Calls. (line   48)
42424 * __builtin_return_address:              Return Address.     (line   11)
42425 * __builtin_trap:                        Other Builtins.     (line  266)
42426 * __builtin_types_compatible_p:          Other Builtins.     (line  110)
42427 * __complex__ keyword:                   Complex.            (line    6)
42428 * __declspec(dllexport):                 Function Attributes.
42429                                                              (line  244)
42430 * __declspec(dllimport):                 Function Attributes.
42431                                                              (line  274)
42432 * __extension__:                         Alternate Keywords. (line   29)
42433 * __float128 data type:                  Floating Types.     (line    6)
42434 * __float80 data type:                   Floating Types.     (line    6)
42435 * __func__ identifier:                   Function Names.     (line    6)
42436 * __FUNCTION__ identifier:               Function Names.     (line    6)
42437 * __imag__ keyword:                      Complex.            (line   27)
42438 * __PRETTY_FUNCTION__ identifier:        Function Names.     (line    6)
42439 * __real__ keyword:                      Complex.            (line   27)
42440 * __STDC_HOSTED__:                       Standards.          (line   13)
42441 * __sync_add_and_fetch:                  Atomic Builtins.    (line   61)
42442 * __sync_and_and_fetch:                  Atomic Builtins.    (line   61)
42443 * __sync_bool_compare_and_swap:          Atomic Builtins.    (line   73)
42444 * __sync_fetch_and_add:                  Atomic Builtins.    (line   45)
42445 * __sync_fetch_and_and:                  Atomic Builtins.    (line   45)
42446 * __sync_fetch_and_nand:                 Atomic Builtins.    (line   45)
42447 * __sync_fetch_and_or:                   Atomic Builtins.    (line   45)
42448 * __sync_fetch_and_sub:                  Atomic Builtins.    (line   45)
42449 * __sync_fetch_and_xor:                  Atomic Builtins.    (line   45)
42450 * __sync_lock_release:                   Atomic Builtins.    (line  103)
42451 * __sync_lock_test_and_set:              Atomic Builtins.    (line   85)
42452 * __sync_nand_and_fetch:                 Atomic Builtins.    (line   61)
42453 * __sync_or_and_fetch:                   Atomic Builtins.    (line   61)
42454 * __sync_sub_and_fetch:                  Atomic Builtins.    (line   61)
42455 * __sync_synchronize:                    Atomic Builtins.    (line   82)
42456 * __sync_val_compare_and_swap:           Atomic Builtins.    (line   73)
42457 * __sync_xor_and_fetch:                  Atomic Builtins.    (line   61)
42458 * __thread:                              Thread-Local.       (line    6)
42459 * _Accum data type:                      Fixed-Point.        (line    6)
42460 * _Complex keyword:                      Complex.            (line    6)
42461 * _Decimal128 data type:                 Decimal Float.      (line    6)
42462 * _Decimal32 data type:                  Decimal Float.      (line    6)
42463 * _Decimal64 data type:                  Decimal Float.      (line    6)
42464 * _exit:                                 Other Builtins.     (line    6)
42465 * _Exit:                                 Other Builtins.     (line    6)
42466 * _Fract data type:                      Fixed-Point.        (line    6)
42467 * _Sat data type:                        Fixed-Point.        (line    6)
42468 * ABI:                                   Compatibility.      (line    6)
42469 * abort:                                 Other Builtins.     (line    6)
42470 * abs:                                   Other Builtins.     (line    6)
42471 * accessing volatiles:                   Volatiles.          (line    6)
42472 * acos:                                  Other Builtins.     (line    6)
42473 * acosf:                                 Other Builtins.     (line    6)
42474 * acosh:                                 Other Builtins.     (line    6)
42475 * acoshf:                                Other Builtins.     (line    6)
42476 * acoshl:                                Other Builtins.     (line    6)
42477 * acosl:                                 Other Builtins.     (line    6)
42478 * Ada:                                   G++ and GCC.        (line    6)
42479 * additional floating types:             Floating Types.     (line    6)
42480 * address constraints:                   Simple Constraints. (line  144)
42481 * address of a label:                    Labels as Values.   (line    6)
42482 * address_operand:                       Simple Constraints. (line  148)
42483 * alias attribute:                       Function Attributes.
42484                                                              (line   34)
42485 * aliasing of parameters:                Code Gen Options.   (line  409)
42486 * aligned attribute <1>:                 Type Attributes.    (line   31)
42487 * aligned attribute <2>:                 Function Attributes.
42488                                                              (line   47)
42489 * aligned attribute:                     Variable Attributes.
42490                                                              (line   23)
42491 * alignment:                             Alignment.          (line    6)
42492 * alloc_size attribute:                  Function Attributes.
42493                                                              (line   67)
42494 * alloca:                                Other Builtins.     (line    6)
42495 * alloca vs variable-length arrays:      Variable Length.    (line   27)
42496 * Allow nesting in an interrupt handler on the Blackfin processor.: Function Attributes.
42497                                                              (line  701)
42498 * alternate keywords:                    Alternate Keywords. (line    6)
42499 * always_inline function attribute:      Function Attributes.
42500                                                              (line   88)
42501 * AMD x86-64 Options:                    i386 and x86-64 Options.
42502                                                              (line    6)
42503 * AMD1:                                  Standards.          (line   13)
42504 * ANSI C:                                Standards.          (line   13)
42505 * ANSI C standard:                       Standards.          (line   13)
42506 * ANSI C89:                              Standards.          (line   13)
42507 * ANSI support:                          C Dialect Options.  (line   10)
42508 * ANSI X3.159-1989:                      Standards.          (line   13)
42509 * apostrophes:                           Incompatibilities.  (line  116)
42510 * application binary interface:          Compatibility.      (line    6)
42511 * ARC Options:                           ARC Options.        (line    6)
42512 * ARM [Annotated C++ Reference Manual]:  Backwards Compatibility.
42513                                                              (line    6)
42514 * ARM options:                           ARM Options.        (line    6)
42515 * arrays of length zero:                 Zero Length.        (line    6)
42516 * arrays of variable length:             Variable Length.    (line    6)
42517 * arrays, non-lvalue:                    Subscripting.       (line    6)
42518 * artificial function attribute:         Function Attributes.
42519                                                              (line  131)
42520 * asin:                                  Other Builtins.     (line    6)
42521 * asinf:                                 Other Builtins.     (line    6)
42522 * asinh:                                 Other Builtins.     (line    6)
42523 * asinhf:                                Other Builtins.     (line    6)
42524 * asinhl:                                Other Builtins.     (line    6)
42525 * asinl:                                 Other Builtins.     (line    6)
42526 * asm constraints:                       Constraints.        (line    6)
42527 * asm expressions:                       Extended Asm.       (line    6)
42528 * assembler instructions:                Extended Asm.       (line    6)
42529 * assembler names for identifiers:       Asm Labels.         (line    6)
42530 * assembly code, invalid:                Bug Criteria.       (line   12)
42531 * atan:                                  Other Builtins.     (line    6)
42532 * atan2:                                 Other Builtins.     (line    6)
42533 * atan2f:                                Other Builtins.     (line    6)
42534 * atan2l:                                Other Builtins.     (line    6)
42535 * atanf:                                 Other Builtins.     (line    6)
42536 * atanh:                                 Other Builtins.     (line    6)
42537 * atanhf:                                Other Builtins.     (line    6)
42538 * atanhl:                                Other Builtins.     (line    6)
42539 * atanl:                                 Other Builtins.     (line    6)
42540 * attribute of types:                    Type Attributes.    (line    6)
42541 * attribute of variables:                Variable Attributes.
42542                                                              (line    6)
42543 * attribute syntax:                      Attribute Syntax.   (line    6)
42544 * autoincrement/decrement addressing:    Simple Constraints. (line   30)
42545 * automatic inline for C++ member fns:   Inline.             (line   71)
42546 * AVR Options:                           AVR Options.        (line    6)
42547 * Backwards Compatibility:               Backwards Compatibility.
42548                                                              (line    6)
42549 * base class members:                    Name lookup.        (line    6)
42550 * bcmp:                                  Other Builtins.     (line    6)
42551 * below100 attribute:                    Variable Attributes.
42552                                                              (line  492)
42553 * binary compatibility:                  Compatibility.      (line    6)
42554 * Binary constants using the 0b prefix:  Binary constants.   (line    6)
42555 * Blackfin Options:                      Blackfin Options.   (line    6)
42556 * bound pointer to member function:      Bound member functions.
42557                                                              (line    6)
42558 * bounds checking:                       Optimize Options.   (line  338)
42559 * bug criteria:                          Bug Criteria.       (line    6)
42560 * bugs:                                  Bugs.               (line    6)
42561 * bugs, known:                           Trouble.            (line    6)
42562 * built-in functions <1>:                Other Builtins.     (line    6)
42563 * built-in functions:                    C Dialect Options.  (line  170)
42564 * bzero:                                 Other Builtins.     (line    6)
42565 * C compilation options:                 Invoking GCC.       (line   17)
42566 * C intermediate output, nonexistent:    G++ and GCC.        (line   35)
42567 * C language extensions:                 C Extensions.       (line    6)
42568 * C language, traditional:               C Dialect Options.  (line  250)
42569 * C standard:                            Standards.          (line   13)
42570 * C standards:                           Standards.          (line   13)
42571 * C++:                                   G++ and GCC.        (line   30)
42572 * c++:                                   Invoking G++.       (line   14)
42573 * C++ comments:                          C++ Comments.       (line    6)
42574 * C++ compilation options:               Invoking GCC.       (line   23)
42575 * C++ interface and implementation headers: C++ Interface.   (line    6)
42576 * C++ language extensions:               C++ Extensions.     (line    6)
42577 * C++ member fns, automatically inline:  Inline.             (line   71)
42578 * C++ misunderstandings:                 C++ Misunderstandings.
42579                                                              (line    6)
42580 * C++ options, command line:             C++ Dialect Options.
42581                                                              (line    6)
42582 * C++ pragmas, effect on inlining:       C++ Interface.      (line   66)
42583 * C++ source file suffixes:              Invoking G++.       (line    6)
42584 * C++ static data, declaring and defining: Static Definitions.
42585                                                              (line    6)
42586 * C89:                                   Standards.          (line   13)
42587 * C90:                                   Standards.          (line   13)
42588 * C94:                                   Standards.          (line   13)
42589 * C95:                                   Standards.          (line   13)
42590 * C99:                                   Standards.          (line   13)
42591 * C9X:                                   Standards.          (line   13)
42592 * C_INCLUDE_PATH:                        Environment Variables.
42593                                                              (line  127)
42594 * cabs:                                  Other Builtins.     (line    6)
42595 * cabsf:                                 Other Builtins.     (line    6)
42596 * cabsl:                                 Other Builtins.     (line    6)
42597 * cacos:                                 Other Builtins.     (line    6)
42598 * cacosf:                                Other Builtins.     (line    6)
42599 * cacosh:                                Other Builtins.     (line    6)
42600 * cacoshf:                               Other Builtins.     (line    6)
42601 * cacoshl:                               Other Builtins.     (line    6)
42602 * cacosl:                                Other Builtins.     (line    6)
42603 * calling functions through the function vector on H8/300, M16C, M32C and SH2A processors: Function Attributes.
42604                                                              (line  471)
42605 * calloc:                                Other Builtins.     (line    6)
42606 * carg:                                  Other Builtins.     (line    6)
42607 * cargf:                                 Other Builtins.     (line    6)
42608 * cargl:                                 Other Builtins.     (line    6)
42609 * case labels in initializers:           Designated Inits.   (line    6)
42610 * case ranges:                           Case Ranges.        (line    6)
42611 * casin:                                 Other Builtins.     (line    6)
42612 * casinf:                                Other Builtins.     (line    6)
42613 * casinh:                                Other Builtins.     (line    6)
42614 * casinhf:                               Other Builtins.     (line    6)
42615 * casinhl:                               Other Builtins.     (line    6)
42616 * casinl:                                Other Builtins.     (line    6)
42617 * cast to a union:                       Cast to Union.      (line    6)
42618 * catan:                                 Other Builtins.     (line    6)
42619 * catanf:                                Other Builtins.     (line    6)
42620 * catanh:                                Other Builtins.     (line    6)
42621 * catanhf:                               Other Builtins.     (line    6)
42622 * catanhl:                               Other Builtins.     (line    6)
42623 * catanl:                                Other Builtins.     (line    6)
42624 * cbrt:                                  Other Builtins.     (line    6)
42625 * cbrtf:                                 Other Builtins.     (line    6)
42626 * cbrtl:                                 Other Builtins.     (line    6)
42627 * ccos:                                  Other Builtins.     (line    6)
42628 * ccosf:                                 Other Builtins.     (line    6)
42629 * ccosh:                                 Other Builtins.     (line    6)
42630 * ccoshf:                                Other Builtins.     (line    6)
42631 * ccoshl:                                Other Builtins.     (line    6)
42632 * ccosl:                                 Other Builtins.     (line    6)
42633 * ceil:                                  Other Builtins.     (line    6)
42634 * ceilf:                                 Other Builtins.     (line    6)
42635 * ceill:                                 Other Builtins.     (line    6)
42636 * cexp:                                  Other Builtins.     (line    6)
42637 * cexpf:                                 Other Builtins.     (line    6)
42638 * cexpl:                                 Other Builtins.     (line    6)
42639 * character set, execution:              Preprocessor Options.
42640                                                              (line  495)
42641 * character set, input:                  Preprocessor Options.
42642                                                              (line  508)
42643 * character set, input normalization:    Warning Options.    (line 1076)
42644 * character set, wide execution:         Preprocessor Options.
42645                                                              (line  500)
42646 * cimag:                                 Other Builtins.     (line    6)
42647 * cimagf:                                Other Builtins.     (line    6)
42648 * cimagl:                                Other Builtins.     (line    6)
42649 * cleanup attribute:                     Variable Attributes.
42650                                                              (line   89)
42651 * clog:                                  Other Builtins.     (line    6)
42652 * clogf:                                 Other Builtins.     (line    6)
42653 * clogl:                                 Other Builtins.     (line    6)
42654 * COBOL:                                 G++ and GCC.        (line   23)
42655 * code generation conventions:           Code Gen Options.   (line    6)
42656 * code, mixed with declarations:         Mixed Declarations. (line    6)
42657 * cold function attribute:               Function Attributes.
42658                                                              (line  852)
42659 * command options:                       Invoking GCC.       (line    6)
42660 * comments, C++ style:                   C++ Comments.       (line    6)
42661 * common attribute:                      Variable Attributes.
42662                                                              (line  105)
42663 * comparison of signed and unsigned values, warning: Warning Options.
42664                                                              (line  940)
42665 * compiler bugs, reporting:              Bug Reporting.      (line    6)
42666 * compiler compared to C++ preprocessor: G++ and GCC.        (line   35)
42667 * compiler options, C++:                 C++ Dialect Options.
42668                                                              (line    6)
42669 * compiler options, Objective-C and Objective-C++: Objective-C and Objective-C++ Dialect Options.
42670                                                              (line    6)
42671 * compiler version, specifying:          Target Options.     (line    6)
42672 * COMPILER_PATH:                         Environment Variables.
42673                                                              (line   88)
42674 * complex conjugation:                   Complex.            (line   34)
42675 * complex numbers:                       Complex.            (line    6)
42676 * compound literals:                     Compound Literals.  (line    6)
42677 * computed gotos:                        Labels as Values.   (line    6)
42678 * conditional expressions, extensions:   Conditionals.       (line    6)
42679 * conflicting types:                     Disappointments.    (line   21)
42680 * conj:                                  Other Builtins.     (line    6)
42681 * conjf:                                 Other Builtins.     (line    6)
42682 * conjl:                                 Other Builtins.     (line    6)
42683 * const applied to function:             Function Attributes.
42684                                                              (line    6)
42685 * const function attribute:              Function Attributes.
42686                                                              (line  176)
42687 * constants in constraints:              Simple Constraints. (line   60)
42688 * constraint modifier characters:        Modifiers.          (line    6)
42689 * constraint, matching:                  Simple Constraints. (line  129)
42690 * constraints, asm:                      Constraints.        (line    6)
42691 * constraints, machine specific:         Machine Constraints.
42692                                                              (line    6)
42693 * constructing calls:                    Constructing Calls. (line    6)
42694 * constructor expressions:               Compound Literals.  (line    6)
42695 * constructor function attribute:        Function Attributes.
42696                                                              (line  204)
42697 * contributors:                          Contributors.       (line    6)
42698 * copysign:                              Other Builtins.     (line    6)
42699 * copysignf:                             Other Builtins.     (line    6)
42700 * copysignl:                             Other Builtins.     (line    6)
42701 * core dump:                             Bug Criteria.       (line    9)
42702 * cos:                                   Other Builtins.     (line    6)
42703 * cosf:                                  Other Builtins.     (line    6)
42704 * cosh:                                  Other Builtins.     (line    6)
42705 * coshf:                                 Other Builtins.     (line    6)
42706 * coshl:                                 Other Builtins.     (line    6)
42707 * cosl:                                  Other Builtins.     (line    6)
42708 * CPATH:                                 Environment Variables.
42709                                                              (line  126)
42710 * CPLUS_INCLUDE_PATH:                    Environment Variables.
42711                                                              (line  128)
42712 * cpow:                                  Other Builtins.     (line    6)
42713 * cpowf:                                 Other Builtins.     (line    6)
42714 * cpowl:                                 Other Builtins.     (line    6)
42715 * cproj:                                 Other Builtins.     (line    6)
42716 * cprojf:                                Other Builtins.     (line    6)
42717 * cprojl:                                Other Builtins.     (line    6)
42718 * creal:                                 Other Builtins.     (line    6)
42719 * crealf:                                Other Builtins.     (line    6)
42720 * creall:                                Other Builtins.     (line    6)
42721 * CRIS Options:                          CRIS Options.       (line    6)
42722 * cross compiling:                       Target Options.     (line    6)
42723 * CRX Options:                           CRX Options.        (line    6)
42724 * csin:                                  Other Builtins.     (line    6)
42725 * csinf:                                 Other Builtins.     (line    6)
42726 * csinh:                                 Other Builtins.     (line    6)
42727 * csinhf:                                Other Builtins.     (line    6)
42728 * csinhl:                                Other Builtins.     (line    6)
42729 * csinl:                                 Other Builtins.     (line    6)
42730 * csqrt:                                 Other Builtins.     (line    6)
42731 * csqrtf:                                Other Builtins.     (line    6)
42732 * csqrtl:                                Other Builtins.     (line    6)
42733 * ctan:                                  Other Builtins.     (line    6)
42734 * ctanf:                                 Other Builtins.     (line    6)
42735 * ctanh:                                 Other Builtins.     (line    6)
42736 * ctanhf:                                Other Builtins.     (line    6)
42737 * ctanhl:                                Other Builtins.     (line    6)
42738 * ctanl:                                 Other Builtins.     (line    6)
42739 * Darwin options:                        Darwin Options.     (line    6)
42740 * dcgettext:                             Other Builtins.     (line    6)
42741 * DD integer suffix:                     Decimal Float.      (line    6)
42742 * dd integer suffix:                     Decimal Float.      (line    6)
42743 * deallocating variable length arrays:   Variable Length.    (line   23)
42744 * debugging information options:         Debugging Options.  (line    6)
42745 * decimal floating types:                Decimal Float.      (line    6)
42746 * declaration scope:                     Incompatibilities.  (line   80)
42747 * declarations inside expressions:       Statement Exprs.    (line    6)
42748 * declarations, mixed with code:         Mixed Declarations. (line    6)
42749 * declaring attributes of functions:     Function Attributes.
42750                                                              (line    6)
42751 * declaring static data in C++:          Static Definitions. (line    6)
42752 * defining static data in C++:           Static Definitions. (line    6)
42753 * dependencies for make as output:       Environment Variables.
42754                                                              (line  170)
42755 * dependencies, make:                    Preprocessor Options.
42756                                                              (line  172)
42757 * DEPENDENCIES_OUTPUT:                   Environment Variables.
42758                                                              (line  153)
42759 * dependent name lookup:                 Name lookup.        (line    6)
42760 * deprecated attribute:                  Variable Attributes.
42761                                                              (line  113)
42762 * deprecated attribute.:                 Function Attributes.
42763                                                              (line  226)
42764 * designated initializers:               Designated Inits.   (line    6)
42765 * designator lists:                      Designated Inits.   (line   94)
42766 * designators:                           Designated Inits.   (line   61)
42767 * destructor function attribute:         Function Attributes.
42768                                                              (line  204)
42769 * df integer suffix:                     Decimal Float.      (line    6)
42770 * DF integer suffix:                     Decimal Float.      (line    6)
42771 * dgettext:                              Other Builtins.     (line    6)
42772 * diagnostic messages:                   Language Independent Options.
42773                                                              (line    6)
42774 * dialect options:                       C Dialect Options.  (line    6)
42775 * digits in constraint:                  Simple Constraints. (line  117)
42776 * directory options:                     Directory Options.  (line    6)
42777 * DL integer suffix:                     Decimal Float.      (line    6)
42778 * dl integer suffix:                     Decimal Float.      (line    6)
42779 * dollar signs in identifier names:      Dollar Signs.       (line    6)
42780 * double-word arithmetic:                Long Long.          (line    6)
42781 * downward funargs:                      Nested Functions.   (line    6)
42782 * drem:                                  Other Builtins.     (line    6)
42783 * dremf:                                 Other Builtins.     (line    6)
42784 * dreml:                                 Other Builtins.     (line    6)
42785 * E in constraint:                       Simple Constraints. (line   79)
42786 * earlyclobber operand:                  Modifiers.          (line   25)
42787 * eight bit data on the H8/300, H8/300H, and H8S: Function Attributes.
42788                                                              (line  327)
42789 * empty structures:                      Empty Structures.   (line    6)
42790 * environment variables:                 Environment Variables.
42791                                                              (line    6)
42792 * erf:                                   Other Builtins.     (line    6)
42793 * erfc:                                  Other Builtins.     (line    6)
42794 * erfcf:                                 Other Builtins.     (line    6)
42795 * erfcl:                                 Other Builtins.     (line    6)
42796 * erff:                                  Other Builtins.     (line    6)
42797 * erfl:                                  Other Builtins.     (line    6)
42798 * error function attribute:              Function Attributes.
42799                                                              (line  145)
42800 * error messages:                        Warnings and Errors.
42801                                                              (line    6)
42802 * escaped newlines:                      Escaped Newlines.   (line    6)
42803 * exception handler functions on the Blackfin processor: Function Attributes.
42804                                                              (line  337)
42805 * exclamation point:                     Multi-Alternative.  (line   33)
42806 * exit:                                  Other Builtins.     (line    6)
42807 * exp:                                   Other Builtins.     (line    6)
42808 * exp10:                                 Other Builtins.     (line    6)
42809 * exp10f:                                Other Builtins.     (line    6)
42810 * exp10l:                                Other Builtins.     (line    6)
42811 * exp2:                                  Other Builtins.     (line    6)
42812 * exp2f:                                 Other Builtins.     (line    6)
42813 * exp2l:                                 Other Builtins.     (line    6)
42814 * expf:                                  Other Builtins.     (line    6)
42815 * expl:                                  Other Builtins.     (line    6)
42816 * explicit register variables:           Explicit Reg Vars.  (line    6)
42817 * expm1:                                 Other Builtins.     (line    6)
42818 * expm1f:                                Other Builtins.     (line    6)
42819 * expm1l:                                Other Builtins.     (line    6)
42820 * expressions containing statements:     Statement Exprs.    (line    6)
42821 * expressions, constructor:              Compound Literals.  (line    6)
42822 * extended asm:                          Extended Asm.       (line    6)
42823 * extensible constraints:                Simple Constraints. (line  153)
42824 * extensions, ?::                        Conditionals.       (line    6)
42825 * extensions, C language:                C Extensions.       (line    6)
42826 * extensions, C++ language:              C++ Extensions.     (line    6)
42827 * external declaration scope:            Incompatibilities.  (line   80)
42828 * externally_visible attribute.:         Function Attributes.
42829                                                              (line  343)
42830 * F in constraint:                       Simple Constraints. (line   84)
42831 * fabs:                                  Other Builtins.     (line    6)
42832 * fabsf:                                 Other Builtins.     (line    6)
42833 * fabsl:                                 Other Builtins.     (line    6)
42834 * fatal signal:                          Bug Criteria.       (line    9)
42835 * fdim:                                  Other Builtins.     (line    6)
42836 * fdimf:                                 Other Builtins.     (line    6)
42837 * fdiml:                                 Other Builtins.     (line    6)
42838 * FDL, GNU Free Documentation License:   GNU Free Documentation License.
42839                                                              (line    6)
42840 * ffs:                                   Other Builtins.     (line    6)
42841 * file name suffix:                      Overall Options.    (line   14)
42842 * file names:                            Link Options.       (line   10)
42843 * fixed-point types:                     Fixed-Point.        (line    6)
42844 * flatten function attribute:            Function Attributes.
42845                                                              (line  138)
42846 * flexible array members:                Zero Length.        (line    6)
42847 * float as function value type:          Incompatibilities.  (line  141)
42848 * floating point precision <1>:          Disappointments.    (line   68)
42849 * floating point precision:              Optimize Options.   (line 1352)
42850 * floor:                                 Other Builtins.     (line    6)
42851 * floorf:                                Other Builtins.     (line    6)
42852 * floorl:                                Other Builtins.     (line    6)
42853 * fma:                                   Other Builtins.     (line    6)
42854 * fmaf:                                  Other Builtins.     (line    6)
42855 * fmal:                                  Other Builtins.     (line    6)
42856 * fmax:                                  Other Builtins.     (line    6)
42857 * fmaxf:                                 Other Builtins.     (line    6)
42858 * fmaxl:                                 Other Builtins.     (line    6)
42859 * fmin:                                  Other Builtins.     (line    6)
42860 * fminf:                                 Other Builtins.     (line    6)
42861 * fminl:                                 Other Builtins.     (line    6)
42862 * fmod:                                  Other Builtins.     (line    6)
42863 * fmodf:                                 Other Builtins.     (line    6)
42864 * fmodl:                                 Other Builtins.     (line    6)
42865 * force_align_arg_pointer attribute:     Function Attributes.
42866                                                              (line  894)
42867 * format function attribute:             Function Attributes.
42868                                                              (line  373)
42869 * format_arg function attribute:         Function Attributes.
42870                                                              (line  432)
42871 * Fortran:                               G++ and GCC.        (line    6)
42872 * forwarding calls:                      Constructing Calls. (line    6)
42873 * fprintf:                               Other Builtins.     (line    6)
42874 * fprintf_unlocked:                      Other Builtins.     (line    6)
42875 * fputs:                                 Other Builtins.     (line    6)
42876 * fputs_unlocked:                        Other Builtins.     (line    6)
42877 * FR30 Options:                          FR30 Options.       (line    6)
42878 * freestanding environment:              Standards.          (line   13)
42879 * freestanding implementation:           Standards.          (line   13)
42880 * frexp:                                 Other Builtins.     (line    6)
42881 * frexpf:                                Other Builtins.     (line    6)
42882 * frexpl:                                Other Builtins.     (line    6)
42883 * FRV Options:                           FRV Options.        (line    6)
42884 * fscanf:                                Other Builtins.     (line    6)
42885 * fscanf, and constant strings:          Incompatibilities.  (line   17)
42886 * function addressability on the M32R/D: Function Attributes.
42887                                                              (line  643)
42888 * function attributes:                   Function Attributes.
42889                                                              (line    6)
42890 * function pointers, arithmetic:         Pointer Arith.      (line    6)
42891 * function prototype declarations:       Function Prototypes.
42892                                                              (line    6)
42893 * function without a prologue/epilogue code: Function Attributes.
42894                                                              (line  683)
42895 * function, size of pointer to:          Pointer Arith.      (line    6)
42896 * functions called via pointer on the RS/6000 and PowerPC: Function Attributes.
42897                                                              (line  597)
42898 * functions in arbitrary sections:       Function Attributes.
42899                                                              (line    6)
42900 * functions that are passed arguments in registers on the 386: Function Attributes.
42901                                                              (line    6)
42902 * functions that behave like malloc:     Function Attributes.
42903                                                              (line    6)
42904 * functions that do not pop the argument stack on the 386: Function Attributes.
42905                                                              (line    6)
42906 * functions that do pop the argument stack on the 386: Function Attributes.
42907                                                              (line  170)
42908 * functions that have different compilation options on the 386: Function Attributes.
42909                                                              (line    6)
42910 * functions that have different optimization options: Function Attributes.
42911                                                              (line    6)
42912 * functions that have no side effects:   Function Attributes.
42913                                                              (line    6)
42914 * functions that never return:           Function Attributes.
42915                                                              (line    6)
42916 * functions that pop the argument stack on the 386: Function Attributes.
42917                                                              (line    6)
42918 * functions that return more than once:  Function Attributes.
42919                                                              (line    6)
42920 * functions which do not handle memory bank switching on 68HC11/68HC12: Function Attributes.
42921                                                              (line  695)
42922 * functions which handle memory bank switching: Function Attributes.
42923                                                              (line  348)
42924 * functions with non-null pointer arguments: Function Attributes.
42925                                                              (line    6)
42926 * functions with printf, scanf, strftime or strfmon style arguments: Function Attributes.
42927                                                              (line    6)
42928 * G in constraint:                       Simple Constraints. (line   88)
42929 * g in constraint:                       Simple Constraints. (line  110)
42930 * g++:                                   Invoking G++.       (line   14)
42931 * G++:                                   G++ and GCC.        (line   30)
42932 * gamma:                                 Other Builtins.     (line    6)
42933 * gamma_r:                               Other Builtins.     (line    6)
42934 * gammaf:                                Other Builtins.     (line    6)
42935 * gammaf_r:                              Other Builtins.     (line    6)
42936 * gammal:                                Other Builtins.     (line    6)
42937 * gammal_r:                              Other Builtins.     (line    6)
42938 * GCC:                                   G++ and GCC.        (line    6)
42939 * GCC command options:                   Invoking GCC.       (line    6)
42940 * GCC_EXEC_PREFIX:                       Environment Variables.
42941                                                              (line   52)
42942 * gcc_struct:                            Type Attributes.    (line  309)
42943 * gcc_struct attribute:                  Variable Attributes.
42944                                                              (line  349)
42945 * gcov:                                  Debugging Options.  (line  263)
42946 * gettext:                               Other Builtins.     (line    6)
42947 * global offset table:                   Code Gen Options.   (line  184)
42948 * global register after longjmp:         Global Reg Vars.    (line   66)
42949 * global register variables:             Global Reg Vars.    (line    6)
42950 * GNAT:                                  G++ and GCC.        (line   30)
42951 * GNU C Compiler:                        G++ and GCC.        (line    6)
42952 * GNU Compiler Collection:               G++ and GCC.        (line    6)
42953 * gnu_inline function attribute:         Function Attributes.
42954                                                              (line   93)
42955 * goto with computed label:              Labels as Values.   (line    6)
42956 * gprof:                                 Debugging Options.  (line  224)
42957 * grouping options:                      Invoking GCC.       (line   26)
42958 * H in constraint:                       Simple Constraints. (line   88)
42959 * hardware models and configurations, specifying: Submodel Options.
42960                                                              (line    6)
42961 * hex floats:                            Hex Floats.         (line    6)
42962 * HK fixed-suffix:                       Fixed-Point.        (line    6)
42963 * hk fixed-suffix:                       Fixed-Point.        (line    6)
42964 * hosted environment <1>:                C Dialect Options.  (line  204)
42965 * hosted environment:                    Standards.          (line   13)
42966 * hosted implementation:                 Standards.          (line   13)
42967 * hot function attribute:                Function Attributes.
42968                                                              (line  839)
42969 * HPPA Options:                          HPPA Options.       (line    6)
42970 * hr fixed-suffix:                       Fixed-Point.        (line    6)
42971 * HR fixed-suffix:                       Fixed-Point.        (line    6)
42972 * hypot:                                 Other Builtins.     (line    6)
42973 * hypotf:                                Other Builtins.     (line    6)
42974 * hypotl:                                Other Builtins.     (line    6)
42975 * I in constraint:                       Simple Constraints. (line   71)
42976 * i in constraint:                       Simple Constraints. (line   60)
42977 * i386 and x86-64 Windows Options:       i386 and x86-64 Windows Options.
42978                                                              (line    6)
42979 * i386 Options:                          i386 and x86-64 Options.
42980                                                              (line    6)
42981 * IA-64 Options:                         IA-64 Options.      (line    6)
42982 * IBM RS/6000 and PowerPC Options:       RS/6000 and PowerPC Options.
42983                                                              (line    6)
42984 * identifier names, dollar signs in:     Dollar Signs.       (line    6)
42985 * identifiers, names in assembler code:  Asm Labels.         (line    6)
42986 * ilogb:                                 Other Builtins.     (line    6)
42987 * ilogbf:                                Other Builtins.     (line    6)
42988 * ilogbl:                                Other Builtins.     (line    6)
42989 * imaxabs:                               Other Builtins.     (line    6)
42990 * implementation-defined behavior, C language: C Implementation.
42991                                                              (line    6)
42992 * implied #pragma implementation:        C++ Interface.      (line   46)
42993 * incompatibilities of GCC:              Incompatibilities.  (line    6)
42994 * increment operators:                   Bug Criteria.       (line   17)
42995 * index:                                 Other Builtins.     (line    6)
42996 * indirect calls on ARM:                 Function Attributes.
42997                                                              (line  587)
42998 * indirect calls on MIPS:                Function Attributes.
42999                                                              (line  609)
43000 * init_priority attribute:               C++ Attributes.     (line    9)
43001 * initializations in expressions:        Compound Literals.  (line    6)
43002 * initializers with labeled elements:    Designated Inits.   (line    6)
43003 * initializers, non-constant:            Initializers.       (line    6)
43004 * inline automatic for C++ member fns:   Inline.             (line   71)
43005 * inline functions:                      Inline.             (line    6)
43006 * inline functions, omission of:         Inline.             (line   51)
43007 * inlining and C++ pragmas:              C++ Interface.      (line   66)
43008 * installation trouble:                  Trouble.            (line    6)
43009 * integrating function code:             Inline.             (line    6)
43010 * Intel 386 Options:                     i386 and x86-64 Options.
43011                                                              (line    6)
43012 * interface and implementation headers, C++: C++ Interface.  (line    6)
43013 * intermediate C version, nonexistent:   G++ and GCC.        (line   35)
43014 * interrupt handler functions:           Function Attributes.
43015                                                              (line  532)
43016 * interrupt handler functions on the Blackfin, m68k, H8/300 and SH processors: Function Attributes.
43017                                                              (line  557)
43018 * interrupt service routines on ARM:     Function Attributes.
43019                                                              (line  572)
43020 * interrupt thread functions on fido:    Function Attributes.
43021                                                              (line  564)
43022 * introduction:                          Top.                (line    6)
43023 * invalid assembly code:                 Bug Criteria.       (line   12)
43024 * invalid input:                         Bug Criteria.       (line   42)
43025 * invoking g++:                          Invoking G++.       (line   22)
43026 * isalnum:                               Other Builtins.     (line    6)
43027 * isalpha:                               Other Builtins.     (line    6)
43028 * isascii:                               Other Builtins.     (line    6)
43029 * isblank:                               Other Builtins.     (line    6)
43030 * iscntrl:                               Other Builtins.     (line    6)
43031 * isdigit:                               Other Builtins.     (line    6)
43032 * isgraph:                               Other Builtins.     (line    6)
43033 * islower:                               Other Builtins.     (line    6)
43034 * ISO 9899:                              Standards.          (line   13)
43035 * ISO C:                                 Standards.          (line   13)
43036 * ISO C standard:                        Standards.          (line   13)
43037 * ISO C90:                               Standards.          (line   13)
43038 * ISO C94:                               Standards.          (line   13)
43039 * ISO C95:                               Standards.          (line   13)
43040 * ISO C99:                               Standards.          (line   13)
43041 * ISO C9X:                               Standards.          (line   13)
43042 * ISO support:                           C Dialect Options.  (line   10)
43043 * ISO/IEC 9899:                          Standards.          (line   13)
43044 * isprint:                               Other Builtins.     (line    6)
43045 * ispunct:                               Other Builtins.     (line    6)
43046 * isspace:                               Other Builtins.     (line    6)
43047 * isupper:                               Other Builtins.     (line    6)
43048 * iswalnum:                              Other Builtins.     (line    6)
43049 * iswalpha:                              Other Builtins.     (line    6)
43050 * iswblank:                              Other Builtins.     (line    6)
43051 * iswcntrl:                              Other Builtins.     (line    6)
43052 * iswdigit:                              Other Builtins.     (line    6)
43053 * iswgraph:                              Other Builtins.     (line    6)
43054 * iswlower:                              Other Builtins.     (line    6)
43055 * iswprint:                              Other Builtins.     (line    6)
43056 * iswpunct:                              Other Builtins.     (line    6)
43057 * iswspace:                              Other Builtins.     (line    6)
43058 * iswupper:                              Other Builtins.     (line    6)
43059 * iswxdigit:                             Other Builtins.     (line    6)
43060 * isxdigit:                              Other Builtins.     (line    6)
43061 * j0:                                    Other Builtins.     (line    6)
43062 * j0f:                                   Other Builtins.     (line    6)
43063 * j0l:                                   Other Builtins.     (line    6)
43064 * j1:                                    Other Builtins.     (line    6)
43065 * j1f:                                   Other Builtins.     (line    6)
43066 * j1l:                                   Other Builtins.     (line    6)
43067 * Java:                                  G++ and GCC.        (line    6)
43068 * java_interface attribute:              C++ Attributes.     (line   29)
43069 * jn:                                    Other Builtins.     (line    6)
43070 * jnf:                                   Other Builtins.     (line    6)
43071 * jnl:                                   Other Builtins.     (line    6)
43072 * K fixed-suffix:                        Fixed-Point.        (line    6)
43073 * k fixed-suffix:                        Fixed-Point.        (line    6)
43074 * keywords, alternate:                   Alternate Keywords. (line    6)
43075 * known causes of trouble:               Trouble.            (line    6)
43076 * l1_data variable attribute:            Variable Attributes.
43077                                                              (line  317)
43078 * l1_data_A variable attribute:          Variable Attributes.
43079                                                              (line  317)
43080 * l1_data_B variable attribute:          Variable Attributes.
43081                                                              (line  317)
43082 * l1_text function attribute:            Function Attributes.
43083                                                              (line  581)
43084 * labeled elements in initializers:      Designated Inits.   (line    6)
43085 * labels as values:                      Labels as Values.   (line    6)
43086 * labs:                                  Other Builtins.     (line    6)
43087 * LANG:                                  Environment Variables.
43088                                                              (line   21)
43089 * language dialect options:              C Dialect Options.  (line    6)
43090 * LC_ALL:                                Environment Variables.
43091                                                              (line   21)
43092 * LC_CTYPE:                              Environment Variables.
43093                                                              (line   21)
43094 * LC_MESSAGES:                           Environment Variables.
43095                                                              (line   21)
43096 * ldexp:                                 Other Builtins.     (line    6)
43097 * ldexpf:                                Other Builtins.     (line    6)
43098 * ldexpl:                                Other Builtins.     (line    6)
43099 * length-zero arrays:                    Zero Length.        (line    6)
43100 * lgamma:                                Other Builtins.     (line    6)
43101 * lgamma_r:                              Other Builtins.     (line    6)
43102 * lgammaf:                               Other Builtins.     (line    6)
43103 * lgammaf_r:                             Other Builtins.     (line    6)
43104 * lgammal:                               Other Builtins.     (line    6)
43105 * lgammal_r:                             Other Builtins.     (line    6)
43106 * Libraries:                             Link Options.       (line   24)
43107 * LIBRARY_PATH:                          Environment Variables.
43108                                                              (line   94)
43109 * link options:                          Link Options.       (line    6)
43110 * linker script:                         Link Options.       (line  163)
43111 * LK fixed-suffix:                       Fixed-Point.        (line    6)
43112 * lk fixed-suffix:                       Fixed-Point.        (line    6)
43113 * LL integer suffix:                     Long Long.          (line    6)
43114 * llabs:                                 Other Builtins.     (line    6)
43115 * LLK fixed-suffix:                      Fixed-Point.        (line    6)
43116 * llk fixed-suffix:                      Fixed-Point.        (line    6)
43117 * llr fixed-suffix:                      Fixed-Point.        (line    6)
43118 * LLR fixed-suffix:                      Fixed-Point.        (line    6)
43119 * llrint:                                Other Builtins.     (line    6)
43120 * llrintf:                               Other Builtins.     (line    6)
43121 * llrintl:                               Other Builtins.     (line    6)
43122 * llround:                               Other Builtins.     (line    6)
43123 * llroundf:                              Other Builtins.     (line    6)
43124 * llroundl:                              Other Builtins.     (line    6)
43125 * load address instruction:              Simple Constraints. (line  144)
43126 * local labels:                          Local Labels.       (line    6)
43127 * local variables in macros:             Typeof.             (line   42)
43128 * local variables, specifying registers: Local Reg Vars.     (line    6)
43129 * locale:                                Environment Variables.
43130                                                              (line   21)
43131 * locale definition:                     Environment Variables.
43132                                                              (line  103)
43133 * log:                                   Other Builtins.     (line    6)
43134 * log10:                                 Other Builtins.     (line    6)
43135 * log10f:                                Other Builtins.     (line    6)
43136 * log10l:                                Other Builtins.     (line    6)
43137 * log1p:                                 Other Builtins.     (line    6)
43138 * log1pf:                                Other Builtins.     (line    6)
43139 * log1pl:                                Other Builtins.     (line    6)
43140 * log2:                                  Other Builtins.     (line    6)
43141 * log2f:                                 Other Builtins.     (line    6)
43142 * log2l:                                 Other Builtins.     (line    6)
43143 * logb:                                  Other Builtins.     (line    6)
43144 * logbf:                                 Other Builtins.     (line    6)
43145 * logbl:                                 Other Builtins.     (line    6)
43146 * logf:                                  Other Builtins.     (line    6)
43147 * logl:                                  Other Builtins.     (line    6)
43148 * long long data types:                  Long Long.          (line    6)
43149 * longjmp:                               Global Reg Vars.    (line   66)
43150 * longjmp incompatibilities:             Incompatibilities.  (line   39)
43151 * longjmp warnings:                      Warning Options.    (line  570)
43152 * LR fixed-suffix:                       Fixed-Point.        (line    6)
43153 * lr fixed-suffix:                       Fixed-Point.        (line    6)
43154 * lrint:                                 Other Builtins.     (line    6)
43155 * lrintf:                                Other Builtins.     (line    6)
43156 * lrintl:                                Other Builtins.     (line    6)
43157 * lround:                                Other Builtins.     (line    6)
43158 * lroundf:                               Other Builtins.     (line    6)
43159 * lroundl:                               Other Builtins.     (line    6)
43160 * m in constraint:                       Simple Constraints. (line   17)
43161 * M32C options:                          M32C Options.       (line    6)
43162 * M32R/D options:                        M32R/D Options.     (line    6)
43163 * M680x0 options:                        M680x0 Options.     (line    6)
43164 * M68hc1x options:                       M68hc1x Options.    (line    6)
43165 * machine dependent options:             Submodel Options.   (line    6)
43166 * machine specific constraints:          Machine Constraints.
43167                                                              (line    6)
43168 * macro with variable arguments:         Variadic Macros.    (line    6)
43169 * macros containing asm:                 Extended Asm.       (line  241)
43170 * macros, inline alternative:            Inline.             (line    6)
43171 * macros, local labels:                  Local Labels.       (line    6)
43172 * macros, local variables in:            Typeof.             (line   42)
43173 * macros, statements in expressions:     Statement Exprs.    (line    6)
43174 * macros, types of arguments:            Typeof.             (line    6)
43175 * make:                                  Preprocessor Options.
43176                                                              (line  172)
43177 * malloc:                                Other Builtins.     (line    6)
43178 * malloc attribute:                      Function Attributes.
43179                                                              (line  619)
43180 * matching constraint:                   Simple Constraints. (line  129)
43181 * MCore options:                         MCore Options.      (line    6)
43182 * member fns, automatically inline:      Inline.             (line   71)
43183 * memchr:                                Other Builtins.     (line    6)
43184 * memcmp:                                Other Builtins.     (line    6)
43185 * memcpy:                                Other Builtins.     (line    6)
43186 * memory references in constraints:      Simple Constraints. (line   17)
43187 * mempcpy:                               Other Builtins.     (line    6)
43188 * memset:                                Other Builtins.     (line    6)
43189 * Mercury:                               G++ and GCC.        (line   23)
43190 * message formatting:                    Language Independent Options.
43191                                                              (line    6)
43192 * messages, warning:                     Warning Options.    (line    6)
43193 * messages, warning and error:           Warnings and Errors.
43194                                                              (line    6)
43195 * middle-operands, omitted:              Conditionals.       (line    6)
43196 * MIPS options:                          MIPS Options.       (line    6)
43197 * mips16 attribute:                      Function Attributes.
43198                                                              (line  629)
43199 * misunderstandings in C++:              C++ Misunderstandings.
43200                                                              (line    6)
43201 * mixed declarations and code:           Mixed Declarations. (line    6)
43202 * mktemp, and constant strings:          Incompatibilities.  (line   13)
43203 * MMIX Options:                          MMIX Options.       (line    6)
43204 * MN10300 options:                       MN10300 Options.    (line    6)
43205 * mode attribute:                        Variable Attributes.
43206                                                              (line  131)
43207 * modf:                                  Other Builtins.     (line    6)
43208 * modff:                                 Other Builtins.     (line    6)
43209 * modfl:                                 Other Builtins.     (line    6)
43210 * modifiers in constraints:              Modifiers.          (line    6)
43211 * ms_abi attribute:                      Function Attributes.
43212                                                              (line  671)
43213 * ms_struct:                             Type Attributes.    (line  309)
43214 * ms_struct attribute:                   Variable Attributes.
43215                                                              (line  349)
43216 * mudflap:                               Optimize Options.   (line  338)
43217 * multiple alternative constraints:      Multi-Alternative.  (line    6)
43218 * multiprecision arithmetic:             Long Long.          (line    6)
43219 * n in constraint:                       Simple Constraints. (line   65)
43220 * names used in assembler code:          Asm Labels.         (line    6)
43221 * naming convention, implementation headers: C++ Interface.  (line   46)
43222 * nearbyint:                             Other Builtins.     (line    6)
43223 * nearbyintf:                            Other Builtins.     (line    6)
43224 * nearbyintl:                            Other Builtins.     (line    6)
43225 * nested functions:                      Nested Functions.   (line    6)
43226 * newlines (escaped):                    Escaped Newlines.   (line    6)
43227 * nextafter:                             Other Builtins.     (line    6)
43228 * nextafterf:                            Other Builtins.     (line    6)
43229 * nextafterl:                            Other Builtins.     (line    6)
43230 * nexttoward:                            Other Builtins.     (line    6)
43231 * nexttowardf:                           Other Builtins.     (line    6)
43232 * nexttowardl:                           Other Builtins.     (line    6)
43233 * NFC:                                   Warning Options.    (line 1076)
43234 * NFKC:                                  Warning Options.    (line 1076)
43235 * NMI handler functions on the Blackfin processor: Function Attributes.
43236                                                              (line  706)
43237 * no_instrument_function function attribute: Function Attributes.
43238                                                              (line  712)
43239 * nocommon attribute:                    Variable Attributes.
43240                                                              (line  105)
43241 * noinline function attribute:           Function Attributes.
43242                                                              (line  717)
43243 * nomips16 attribute:                    Function Attributes.
43244                                                              (line  629)
43245 * non-constant initializers:             Initializers.       (line    6)
43246 * non-static inline function:            Inline.             (line   85)
43247 * nonnull function attribute:            Function Attributes.
43248                                                              (line  727)
43249 * noreturn function attribute:           Function Attributes.
43250                                                              (line  750)
43251 * nothrow function attribute:            Function Attributes.
43252                                                              (line  792)
43253 * o in constraint:                       Simple Constraints. (line   23)
43254 * OBJC_INCLUDE_PATH:                     Environment Variables.
43255                                                              (line  129)
43256 * Objective-C <1>:                       G++ and GCC.        (line    6)
43257 * Objective-C:                           Standards.          (line  153)
43258 * Objective-C and Objective-C++ options, command line: Objective-C and Objective-C++ Dialect Options.
43259                                                              (line    6)
43260 * Objective-C++ <1>:                     G++ and GCC.        (line    6)
43261 * Objective-C++:                         Standards.          (line  153)
43262 * offsettable address:                   Simple Constraints. (line   23)
43263 * old-style function definitions:        Function Prototypes.
43264                                                              (line    6)
43265 * omitted middle-operands:               Conditionals.       (line    6)
43266 * open coding:                           Inline.             (line    6)
43267 * openmp parallel:                       C Dialect Options.  (line  221)
43268 * operand constraints, asm:              Constraints.        (line    6)
43269 * optimize function attribute:           Function Attributes.
43270                                                              (line  800)
43271 * optimize options:                      Optimize Options.   (line    6)
43272 * options to control diagnostics formatting: Language Independent Options.
43273                                                              (line    6)
43274 * options to control warnings:           Warning Options.    (line    6)
43275 * options, C++:                          C++ Dialect Options.
43276                                                              (line    6)
43277 * options, code generation:              Code Gen Options.   (line    6)
43278 * options, debugging:                    Debugging Options.  (line    6)
43279 * options, dialect:                      C Dialect Options.  (line    6)
43280 * options, directory search:             Directory Options.  (line    6)
43281 * options, GCC command:                  Invoking GCC.       (line    6)
43282 * options, grouping:                     Invoking GCC.       (line   26)
43283 * options, linking:                      Link Options.       (line    6)
43284 * options, Objective-C and Objective-C++: Objective-C and Objective-C++ Dialect Options.
43285                                                              (line    6)
43286 * options, optimization:                 Optimize Options.   (line    6)
43287 * options, order:                        Invoking GCC.       (line   30)
43288 * options, preprocessor:                 Preprocessor Options.
43289                                                              (line    6)
43290 * order of evaluation, side effects:     Non-bugs.           (line  196)
43291 * order of options:                      Invoking GCC.       (line   30)
43292 * other register constraints:            Simple Constraints. (line  153)
43293 * output file option:                    Overall Options.    (line  186)
43294 * overloaded virtual fn, warning:        C++ Dialect Options.
43295                                                              (line  446)
43296 * p in constraint:                       Simple Constraints. (line  144)
43297 * packed attribute:                      Variable Attributes.
43298                                                              (line  142)
43299 * parameter forward declaration:         Variable Length.    (line   60)
43300 * parameters, aliased:                   Code Gen Options.   (line  409)
43301 * Pascal:                                G++ and GCC.        (line   23)
43302 * PDP-11 Options:                        PDP-11 Options.     (line    6)
43303 * PIC:                                   Code Gen Options.   (line  184)
43304 * picoChip options:                      picoChip Options.   (line    6)
43305 * pmf:                                   Bound member functions.
43306                                                              (line    6)
43307 * pointer arguments:                     Function Attributes.
43308                                                              (line  181)
43309 * pointer to member function:            Bound member functions.
43310                                                              (line    6)
43311 * portions of temporary objects, pointers to: Temporaries.   (line    6)
43312 * pow:                                   Other Builtins.     (line    6)
43313 * pow10:                                 Other Builtins.     (line    6)
43314 * pow10f:                                Other Builtins.     (line    6)
43315 * pow10l:                                Other Builtins.     (line    6)
43316 * PowerPC options:                       PowerPC Options.    (line    6)
43317 * powf:                                  Other Builtins.     (line    6)
43318 * powl:                                  Other Builtins.     (line    6)
43319 * pragma GCC optimize:                   Function Specific Option Pragmas.
43320                                                              (line   20)
43321 * pragma GCC pop_options:                Function Specific Option Pragmas.
43322                                                              (line   33)
43323 * pragma GCC push_options:               Function Specific Option Pragmas.
43324                                                              (line   33)
43325 * pragma GCC reset_options:              Function Specific Option Pragmas.
43326                                                              (line   43)
43327 * pragma GCC target:                     Function Specific Option Pragmas.
43328                                                              (line    7)
43329 * pragma, align:                         Solaris Pragmas.    (line   11)
43330 * pragma, diagnostic:                    Diagnostic Pragmas. (line   14)
43331 * pragma, extern_prefix:                 Symbol-Renaming Pragmas.
43332                                                              (line   19)
43333 * pragma, fini:                          Solaris Pragmas.    (line   19)
43334 * pragma, init:                          Solaris Pragmas.    (line   24)
43335 * pragma, long_calls:                    ARM Pragmas.        (line   11)
43336 * pragma, long_calls_off:                ARM Pragmas.        (line   17)
43337 * pragma, longcall:                      RS/6000 and PowerPC Pragmas.
43338                                                              (line   14)
43339 * pragma, mark:                          Darwin Pragmas.     (line   11)
43340 * pragma, memregs:                       M32C Pragmas.       (line    7)
43341 * pragma, no_long_calls:                 ARM Pragmas.        (line   14)
43342 * pragma, options align:                 Darwin Pragmas.     (line   14)
43343 * pragma, pop_macro:                     Push/Pop Macro Pragmas.
43344                                                              (line   15)
43345 * pragma, push_macro:                    Push/Pop Macro Pragmas.
43346                                                              (line   11)
43347 * pragma, reason for not using:          Function Attributes.
43348                                                              (line 1344)
43349 * pragma, redefine_extname:              Symbol-Renaming Pragmas.
43350                                                              (line   14)
43351 * pragma, segment:                       Darwin Pragmas.     (line   21)
43352 * pragma, unused:                        Darwin Pragmas.     (line   24)
43353 * pragma, visibility:                    Visibility Pragmas. (line    8)
43354 * pragma, weak:                          Weak Pragmas.       (line   10)
43355 * pragmas:                               Pragmas.            (line    6)
43356 * pragmas in C++, effect on inlining:    C++ Interface.      (line   66)
43357 * pragmas, interface and implementation: C++ Interface.      (line    6)
43358 * pragmas, warning of unknown:           Warning Options.    (line  587)
43359 * precompiled headers:                   Precompiled Headers.
43360                                                              (line    6)
43361 * preprocessing numbers:                 Incompatibilities.  (line  173)
43362 * preprocessing tokens:                  Incompatibilities.  (line  173)
43363 * preprocessor options:                  Preprocessor Options.
43364                                                              (line    6)
43365 * printf:                                Other Builtins.     (line    6)
43366 * printf_unlocked:                       Other Builtins.     (line    6)
43367 * prof:                                  Debugging Options.  (line  218)
43368 * progmem variable attribute:            Variable Attributes.
43369                                                              (line  503)
43370 * promotion of formal parameters:        Function Prototypes.
43371                                                              (line    6)
43372 * pure function attribute:               Function Attributes.
43373                                                              (line  817)
43374 * push address instruction:              Simple Constraints. (line  144)
43375 * putchar:                               Other Builtins.     (line    6)
43376 * puts:                                  Other Builtins.     (line    6)
43377 * q floating point suffix:               Floating Types.     (line    6)
43378 * Q floating point suffix:               Floating Types.     (line    6)
43379 * qsort, and global register variables:  Global Reg Vars.    (line   42)
43380 * question mark:                         Multi-Alternative.  (line   27)
43381 * R fixed-suffix:                        Fixed-Point.        (line    6)
43382 * r fixed-suffix:                        Fixed-Point.        (line    6)
43383 * r in constraint:                       Simple Constraints. (line   56)
43384 * ranges in case statements:             Case Ranges.        (line    6)
43385 * read-only strings:                     Incompatibilities.  (line    9)
43386 * register variable after longjmp:       Global Reg Vars.    (line   66)
43387 * registers:                             Extended Asm.       (line    6)
43388 * registers for local variables:         Local Reg Vars.     (line    6)
43389 * registers in constraints:              Simple Constraints. (line   56)
43390 * registers, global allocation:          Explicit Reg Vars.  (line    6)
43391 * registers, global variables in:        Global Reg Vars.    (line    6)
43392 * regparm attribute:                     Function Attributes.
43393                                                              (line  870)
43394 * relocation truncated to fit (ColdFire): M680x0 Options.    (line  325)
43395 * relocation truncated to fit (MIPS):    MIPS Options.       (line  198)
43396 * remainder:                             Other Builtins.     (line    6)
43397 * remainderf:                            Other Builtins.     (line    6)
43398 * remainderl:                            Other Builtins.     (line    6)
43399 * remquo:                                Other Builtins.     (line    6)
43400 * remquof:                               Other Builtins.     (line    6)
43401 * remquol:                               Other Builtins.     (line    6)
43402 * reordering, warning:                   C++ Dialect Options.
43403                                                              (line  371)
43404 * reporting bugs:                        Bugs.               (line    6)
43405 * resbank attribute:                     Function Attributes.
43406                                                              (line  902)
43407 * rest argument (in macro):              Variadic Macros.    (line    6)
43408 * restricted pointers:                   Restricted Pointers.
43409                                                              (line    6)
43410 * restricted references:                 Restricted Pointers.
43411                                                              (line    6)
43412 * restricted this pointer:               Restricted Pointers.
43413                                                              (line    6)
43414 * returns_twice attribute:               Function Attributes.
43415                                                              (line  916)
43416 * rindex:                                Other Builtins.     (line    6)
43417 * rint:                                  Other Builtins.     (line    6)
43418 * rintf:                                 Other Builtins.     (line    6)
43419 * rintl:                                 Other Builtins.     (line    6)
43420 * round:                                 Other Builtins.     (line    6)
43421 * roundf:                                Other Builtins.     (line    6)
43422 * roundl:                                Other Builtins.     (line    6)
43423 * RS/6000 and PowerPC Options:           RS/6000 and PowerPC Options.
43424                                                              (line    6)
43425 * RTTI:                                  Vague Linkage.      (line   43)
43426 * run-time options:                      Code Gen Options.   (line    6)
43427 * s in constraint:                       Simple Constraints. (line   92)
43428 * S/390 and zSeries Options:             S/390 and zSeries Options.
43429                                                              (line    6)
43430 * save all registers on the Blackfin, H8/300, H8/300H, and H8S: Function Attributes.
43431                                                              (line  925)
43432 * scalb:                                 Other Builtins.     (line    6)
43433 * scalbf:                                Other Builtins.     (line    6)
43434 * scalbl:                                Other Builtins.     (line    6)
43435 * scalbln:                               Other Builtins.     (line    6)
43436 * scalblnf:                              Other Builtins.     (line    6)
43437 * scalbn:                                Other Builtins.     (line    6)
43438 * scalbnf:                               Other Builtins.     (line    6)
43439 * scanf, and constant strings:           Incompatibilities.  (line   17)
43440 * scanfnl:                               Other Builtins.     (line    6)
43441 * scope of a variable length array:      Variable Length.    (line   23)
43442 * scope of declaration:                  Disappointments.    (line   21)
43443 * scope of external declarations:        Incompatibilities.  (line   80)
43444 * Score Options:                         Score Options.      (line    6)
43445 * search path:                           Directory Options.  (line    6)
43446 * section function attribute:            Function Attributes.
43447                                                              (line  930)
43448 * section variable attribute:            Variable Attributes.
43449                                                              (line  163)
43450 * sentinel function attribute:           Function Attributes.
43451                                                              (line  946)
43452 * setjmp:                                Global Reg Vars.    (line   66)
43453 * setjmp incompatibilities:              Incompatibilities.  (line   39)
43454 * shared strings:                        Incompatibilities.  (line    9)
43455 * shared variable attribute:             Variable Attributes.
43456                                                              (line  208)
43457 * side effect in ?::                     Conditionals.       (line   20)
43458 * side effects, macro argument:          Statement Exprs.    (line   35)
43459 * side effects, order of evaluation:     Non-bugs.           (line  196)
43460 * signal handler functions on the AVR processors: Function Attributes.
43461                                                              (line  977)
43462 * signbit:                               Other Builtins.     (line    6)
43463 * signbitd128:                           Other Builtins.     (line    6)
43464 * signbitd32:                            Other Builtins.     (line    6)
43465 * signbitd64:                            Other Builtins.     (line    6)
43466 * signbitf:                              Other Builtins.     (line    6)
43467 * signbitl:                              Other Builtins.     (line    6)
43468 * signed and unsigned values, comparison warning: Warning Options.
43469                                                              (line  940)
43470 * significand:                           Other Builtins.     (line    6)
43471 * significandf:                          Other Builtins.     (line    6)
43472 * significandl:                          Other Builtins.     (line    6)
43473 * simple constraints:                    Simple Constraints. (line    6)
43474 * sin:                                   Other Builtins.     (line    6)
43475 * sincos:                                Other Builtins.     (line    6)
43476 * sincosf:                               Other Builtins.     (line    6)
43477 * sincosl:                               Other Builtins.     (line    6)
43478 * sinf:                                  Other Builtins.     (line    6)
43479 * sinh:                                  Other Builtins.     (line    6)
43480 * sinhf:                                 Other Builtins.     (line    6)
43481 * sinhl:                                 Other Builtins.     (line    6)
43482 * sinl:                                  Other Builtins.     (line    6)
43483 * sizeof:                                Typeof.             (line    6)
43484 * smaller data references:               M32R/D Options.     (line   57)
43485 * smaller data references (PowerPC):     RS/6000 and PowerPC Options.
43486                                                              (line  663)
43487 * snprintf:                              Other Builtins.     (line    6)
43488 * SPARC options:                         SPARC Options.      (line    6)
43489 * Spec Files:                            Spec Files.         (line    6)
43490 * specified registers:                   Explicit Reg Vars.  (line    6)
43491 * specifying compiler version and target machine: Target Options.
43492                                                              (line    6)
43493 * specifying hardware config:            Submodel Options.   (line    6)
43494 * specifying machine version:            Target Options.     (line    6)
43495 * specifying registers for local variables: Local Reg Vars.  (line    6)
43496 * speed of compilation:                  Precompiled Headers.
43497                                                              (line    6)
43498 * sprintf:                               Other Builtins.     (line    6)
43499 * SPU options:                           SPU Options.        (line    6)
43500 * sqrt:                                  Other Builtins.     (line    6)
43501 * sqrtf:                                 Other Builtins.     (line    6)
43502 * sqrtl:                                 Other Builtins.     (line    6)
43503 * sscanf:                                Other Builtins.     (line    6)
43504 * sscanf, and constant strings:          Incompatibilities.  (line   17)
43505 * sseregparm attribute:                  Function Attributes.
43506                                                              (line  887)
43507 * statements inside expressions:         Statement Exprs.    (line    6)
43508 * static data in C++, declaring and defining: Static Definitions.
43509                                                              (line    6)
43510 * stpcpy:                                Other Builtins.     (line    6)
43511 * stpncpy:                               Other Builtins.     (line    6)
43512 * strcasecmp:                            Other Builtins.     (line    6)
43513 * strcat:                                Other Builtins.     (line    6)
43514 * strchr:                                Other Builtins.     (line    6)
43515 * strcmp:                                Other Builtins.     (line    6)
43516 * strcpy:                                Other Builtins.     (line    6)
43517 * strcspn:                               Other Builtins.     (line    6)
43518 * strdup:                                Other Builtins.     (line    6)
43519 * strfmon:                               Other Builtins.     (line    6)
43520 * strftime:                              Other Builtins.     (line    6)
43521 * string constants:                      Incompatibilities.  (line    9)
43522 * strlen:                                Other Builtins.     (line    6)
43523 * strncasecmp:                           Other Builtins.     (line    6)
43524 * strncat:                               Other Builtins.     (line    6)
43525 * strncmp:                               Other Builtins.     (line    6)
43526 * strncpy:                               Other Builtins.     (line    6)
43527 * strndup:                               Other Builtins.     (line    6)
43528 * strpbrk:                               Other Builtins.     (line    6)
43529 * strrchr:                               Other Builtins.     (line    6)
43530 * strspn:                                Other Builtins.     (line    6)
43531 * strstr:                                Other Builtins.     (line    6)
43532 * struct:                                Unnamed Fields.     (line    6)
43533 * structures:                            Incompatibilities.  (line  146)
43534 * structures, constructor expression:    Compound Literals.  (line    6)
43535 * submodel options:                      Submodel Options.   (line    6)
43536 * subscripting:                          Subscripting.       (line    6)
43537 * subscripting and function values:      Subscripting.       (line    6)
43538 * suffixes for C++ source:               Invoking G++.       (line    6)
43539 * SUNPRO_DEPENDENCIES:                   Environment Variables.
43540                                                              (line  169)
43541 * suppressing warnings:                  Warning Options.    (line    6)
43542 * surprises in C++:                      C++ Misunderstandings.
43543                                                              (line    6)
43544 * syntax checking:                       Warning Options.    (line   13)
43545 * syscall_linkage attribute:             Function Attributes.
43546                                                              (line  999)
43547 * system headers, warnings from:         Warning Options.    (line  701)
43548 * sysv_abi attribute:                    Function Attributes.
43549                                                              (line  671)
43550 * tan:                                   Other Builtins.     (line    6)
43551 * tanf:                                  Other Builtins.     (line    6)
43552 * tanh:                                  Other Builtins.     (line    6)
43553 * tanhf:                                 Other Builtins.     (line    6)
43554 * tanhl:                                 Other Builtins.     (line    6)
43555 * tanl:                                  Other Builtins.     (line    6)
43556 * target function attribute:             Function Attributes.
43557                                                              (line 1006)
43558 * target machine, specifying:            Target Options.     (line    6)
43559 * target options:                        Target Options.     (line    6)
43560 * target("abm") attribute:               Function Attributes.
43561                                                              (line 1033)
43562 * target("aes") attribute:               Function Attributes.
43563                                                              (line 1038)
43564 * target("align-stringops") attribute:   Function Attributes.
43565                                                              (line 1120)
43566 * target("arch=ARCH") attribute:         Function Attributes.
43567                                                              (line 1129)
43568 * target("cld") attribute:               Function Attributes.
43569                                                              (line 1091)
43570 * target("fancy-math-387") attribute:    Function Attributes.
43571                                                              (line 1095)
43572 * target("fpmath=FPMATH") attribute:     Function Attributes.
43573                                                              (line 1137)
43574 * target("fused-madd") attribute:        Function Attributes.
43575                                                              (line 1100)
43576 * target("ieee-fp") attribute:           Function Attributes.
43577                                                              (line 1105)
43578 * target("inline-all-stringops") attribute: Function Attributes.
43579                                                              (line 1110)
43580 * target("inline-stringops-dynamically") attribute: Function Attributes.
43581                                                              (line 1114)
43582 * target("mmx") attribute:               Function Attributes.
43583                                                              (line 1042)
43584 * target("pclmul") attribute:            Function Attributes.
43585                                                              (line 1046)
43586 * target("popcnt") attribute:            Function Attributes.
43587                                                              (line 1050)
43588 * target("recip") attribute:             Function Attributes.
43589                                                              (line 1124)
43590 * target("sse") attribute:               Function Attributes.
43591                                                              (line 1054)
43592 * target("sse2") attribute:              Function Attributes.
43593                                                              (line 1058)
43594 * target("sse3") attribute:              Function Attributes.
43595                                                              (line 1062)
43596 * target("sse4") attribute:              Function Attributes.
43597                                                              (line 1066)
43598 * target("sse4.1") attribute:            Function Attributes.
43599                                                              (line 1071)
43600 * target("sse4.2") attribute:            Function Attributes.
43601                                                              (line 1075)
43602 * target("sse4a") attribute:             Function Attributes.
43603                                                              (line 1079)
43604 * target("sse5") attribute:              Function Attributes.
43605                                                              (line 1083)
43606 * target("ssse3") attribute:             Function Attributes.
43607                                                              (line 1087)
43608 * target("tune=TUNE") attribute:         Function Attributes.
43609                                                              (line 1133)
43610 * TC1:                                   Standards.          (line   13)
43611 * TC2:                                   Standards.          (line   13)
43612 * TC3:                                   Standards.          (line   13)
43613 * Technical Corrigenda:                  Standards.          (line   13)
43614 * Technical Corrigendum 1:               Standards.          (line   13)
43615 * Technical Corrigendum 2:               Standards.          (line   13)
43616 * Technical Corrigendum 3:               Standards.          (line   13)
43617 * template instantiation:                Template Instantiation.
43618                                                              (line    6)
43619 * temporaries, lifetime of:              Temporaries.        (line    6)
43620 * tgamma:                                Other Builtins.     (line    6)
43621 * tgammaf:                               Other Builtins.     (line    6)
43622 * tgammal:                               Other Builtins.     (line    6)
43623 * Thread-Local Storage:                  Thread-Local.       (line    6)
43624 * thunks:                                Nested Functions.   (line    6)
43625 * tiny data section on the H8/300H and H8S: Function Attributes.
43626                                                              (line 1155)
43627 * TLS:                                   Thread-Local.       (line    6)
43628 * tls_model attribute:                   Variable Attributes.
43629                                                              (line  232)
43630 * TMPDIR:                                Environment Variables.
43631                                                              (line   45)
43632 * toascii:                               Other Builtins.     (line    6)
43633 * tolower:                               Other Builtins.     (line    6)
43634 * toupper:                               Other Builtins.     (line    6)
43635 * towlower:                              Other Builtins.     (line    6)
43636 * towupper:                              Other Builtins.     (line    6)
43637 * traditional C language:                C Dialect Options.  (line  250)
43638 * trunc:                                 Other Builtins.     (line    6)
43639 * truncf:                                Other Builtins.     (line    6)
43640 * truncl:                                Other Builtins.     (line    6)
43641 * two-stage name lookup:                 Name lookup.        (line    6)
43642 * type alignment:                        Alignment.          (line    6)
43643 * type attributes:                       Type Attributes.    (line    6)
43644 * type_info:                             Vague Linkage.      (line   43)
43645 * typedef names as function parameters:  Incompatibilities.  (line   97)
43646 * typeof:                                Typeof.             (line    6)
43647 * uhk fixed-suffix:                      Fixed-Point.        (line    6)
43648 * UHK fixed-suffix:                      Fixed-Point.        (line    6)
43649 * UHR fixed-suffix:                      Fixed-Point.        (line    6)
43650 * uhr fixed-suffix:                      Fixed-Point.        (line    6)
43651 * uk fixed-suffix:                       Fixed-Point.        (line    6)
43652 * UK fixed-suffix:                       Fixed-Point.        (line    6)
43653 * ulk fixed-suffix:                      Fixed-Point.        (line    6)
43654 * ULK fixed-suffix:                      Fixed-Point.        (line    6)
43655 * ULL integer suffix:                    Long Long.          (line    6)
43656 * ULLK fixed-suffix:                     Fixed-Point.        (line    6)
43657 * ullk fixed-suffix:                     Fixed-Point.        (line    6)
43658 * ullr fixed-suffix:                     Fixed-Point.        (line    6)
43659 * ULLR fixed-suffix:                     Fixed-Point.        (line    6)
43660 * ULR fixed-suffix:                      Fixed-Point.        (line    6)
43661 * ulr fixed-suffix:                      Fixed-Point.        (line    6)
43662 * undefined behavior:                    Bug Criteria.       (line   17)
43663 * undefined function value:              Bug Criteria.       (line   17)
43664 * underscores in variables in macros:    Typeof.             (line   42)
43665 * union:                                 Unnamed Fields.     (line    6)
43666 * union, casting to a:                   Cast to Union.      (line    6)
43667 * unions:                                Incompatibilities.  (line  146)
43668 * unknown pragmas, warning:              Warning Options.    (line  587)
43669 * unresolved references and -nodefaultlibs: Link Options.    (line   79)
43670 * unresolved references and -nostdlib:   Link Options.       (line   79)
43671 * unused attribute.:                     Function Attributes.
43672                                                              (line 1167)
43673 * UR fixed-suffix:                       Fixed-Point.        (line    6)
43674 * ur fixed-suffix:                       Fixed-Point.        (line    6)
43675 * used attribute.:                       Function Attributes.
43676                                                              (line 1172)
43677 * User stack pointer in interrupts on the Blackfin: Function Attributes.
43678                                                              (line  576)
43679 * V in constraint:                       Simple Constraints. (line   43)
43680 * V850 Options:                          V850 Options.       (line    6)
43681 * vague linkage:                         Vague Linkage.      (line    6)
43682 * value after longjmp:                   Global Reg Vars.    (line   66)
43683 * variable addressability on the IA-64:  Function Attributes.
43684                                                              (line  643)
43685 * variable addressability on the M32R/D: Variable Attributes.
43686                                                              (line  330)
43687 * variable alignment:                    Alignment.          (line    6)
43688 * variable attributes:                   Variable Attributes.
43689                                                              (line    6)
43690 * variable number of arguments:          Variadic Macros.    (line    6)
43691 * variable-length array scope:           Variable Length.    (line   23)
43692 * variable-length arrays:                Variable Length.    (line    6)
43693 * variables in specified registers:      Explicit Reg Vars.  (line    6)
43694 * variables, local, in macros:           Typeof.             (line   42)
43695 * variadic macros:                       Variadic Macros.    (line    6)
43696 * VAX options:                           VAX Options.        (line    6)
43697 * version_id attribute:                  Function Attributes.
43698                                                              (line 1178)
43699 * vfprintf:                              Other Builtins.     (line    6)
43700 * vfscanf:                               Other Builtins.     (line    6)
43701 * visibility attribute:                  Function Attributes.
43702                                                              (line 1188)
43703 * VLAs:                                  Variable Length.    (line    6)
43704 * void pointers, arithmetic:             Pointer Arith.      (line    6)
43705 * void, size of pointer to:              Pointer Arith.      (line    6)
43706 * volatile access:                       Volatiles.          (line    6)
43707 * volatile applied to function:          Function Attributes.
43708                                                              (line    6)
43709 * volatile read:                         Volatiles.          (line    6)
43710 * volatile write:                        Volatiles.          (line    6)
43711 * vprintf:                               Other Builtins.     (line    6)
43712 * vscanf:                                Other Builtins.     (line    6)
43713 * vsnprintf:                             Other Builtins.     (line    6)
43714 * vsprintf:                              Other Builtins.     (line    6)
43715 * vsscanf:                               Other Builtins.     (line    6)
43716 * vtable:                                Vague Linkage.      (line   28)
43717 * VxWorks Options:                       VxWorks Options.    (line    6)
43718 * w floating point suffix:               Floating Types.     (line    6)
43719 * W floating point suffix:               Floating Types.     (line    6)
43720 * warn_unused_result attribute:          Function Attributes.
43721                                                              (line 1282)
43722 * warning for comparison of signed and unsigned values: Warning Options.
43723                                                              (line  940)
43724 * warning for overloaded virtual fn:     C++ Dialect Options.
43725                                                              (line  446)
43726 * warning for reordering of member initializers: C++ Dialect Options.
43727                                                              (line  371)
43728 * warning for unknown pragmas:           Warning Options.    (line  587)
43729 * warning function attribute:            Function Attributes.
43730                                                              (line  158)
43731 * warning messages:                      Warning Options.    (line    6)
43732 * warnings from system headers:          Warning Options.    (line  701)
43733 * warnings vs errors:                    Warnings and Errors.
43734                                                              (line    6)
43735 * weak attribute:                        Function Attributes.
43736                                                              (line 1299)
43737 * weakref attribute:                     Function Attributes.
43738                                                              (line 1308)
43739 * whitespace:                            Incompatibilities.  (line  112)
43740 * X in constraint:                       Simple Constraints. (line  114)
43741 * X3.159-1989:                           Standards.          (line   13)
43742 * x86-64 Options:                        i386 and x86-64 Options.
43743                                                              (line    6)
43744 * x86-64 options:                        x86-64 Options.     (line    6)
43745 * Xstormy16 Options:                     Xstormy16 Options.  (line    6)
43746 * Xtensa Options:                        Xtensa Options.     (line    6)
43747 * y0:                                    Other Builtins.     (line    6)
43748 * y0f:                                   Other Builtins.     (line    6)
43749 * y0l:                                   Other Builtins.     (line    6)
43750 * y1:                                    Other Builtins.     (line    6)
43751 * y1f:                                   Other Builtins.     (line    6)
43752 * y1l:                                   Other Builtins.     (line    6)
43753 * yn:                                    Other Builtins.     (line    6)
43754 * ynf:                                   Other Builtins.     (line    6)
43755 * ynl:                                   Other Builtins.     (line    6)
43756 * zero-length arrays:                    Zero Length.        (line    6)
43757 * zero-size structures:                  Empty Structures.   (line    6)
43758 * zSeries options:                       zSeries Options.    (line    6)
43761 \x1f
43762 Tag Table:
43763 Node: Top\x7f2055
43764 Node: G++ and GCC\x7f3762
43765 Node: Standards\x7f5827
43766 Node: Invoking GCC\x7f14802
43767 Node: Option Summary\x7f18631
43768 Node: Overall Options\x7f51290
43769 Node: Invoking G++\x7f65125
43770 Node: C Dialect Options\x7f66648
43771 Node: C++ Dialect Options\x7f80539
43772 Node: Objective-C and Objective-C++ Dialect Options\x7f101529
43773 Node: Language Independent Options\x7f113310
43774 Node: Warning Options\x7f116080
43775 Node: Debugging Options\x7f174427
43776 Node: Optimize Options\x7f213246
43777 Ref: Type-punning\x7f260048
43778 Node: Preprocessor Options\x7f316447
43779 Ref: Wtrigraphs\x7f320532
43780 Ref: dashMF\x7f325280
43781 Ref: fdollars-in-identifiers\x7f335799
43782 Node: Assembler Options\x7f344360
43783 Node: Link Options\x7f345065
43784 Ref: Link Options-Footnote-1\x7f354535
43785 Node: Directory Options\x7f354869
43786 Node: Spec Files\x7f360931
43787 Node: Target Options\x7f381270
43788 Node: Submodel Options\x7f382788
43789 Node: ARC Options\x7f384487
43790 Node: ARM Options\x7f385974
43791 Node: AVR Options\x7f398208
43792 Node: Blackfin Options\x7f400426
43793 Node: CRIS Options\x7f408318
43794 Node: CRX Options\x7f412059
43795 Node: Darwin Options\x7f412484
43796 Node: DEC Alpha Options\x7f419977
43797 Node: DEC Alpha/VMS Options\x7f431893
43798 Node: FR30 Options\x7f432279
43799 Node: FRV Options\x7f432854
43800 Node: GNU/Linux Options\x7f439571
43801 Node: H8/300 Options\x7f440029
43802 Node: HPPA Options\x7f441096
43803 Node: i386 and x86-64 Options\x7f450596
43804 Node: IA-64 Options\x7f478581
43805 Node: M32C Options\x7f485906
43806 Node: M32R/D Options\x7f487197
43807 Node: M680x0 Options\x7f490784
43808 Node: M68hc1x Options\x7f504604
43809 Node: MCore Options\x7f506172
43810 Node: MIPS Options\x7f507680
43811 Node: MMIX Options\x7f533715
43812 Node: MN10300 Options\x7f536197
43813 Node: PDP-11 Options\x7f537619
43814 Node: picoChip Options\x7f539459
43815 Node: PowerPC Options\x7f541658
43816 Node: RS/6000 and PowerPC Options\x7f541894
43817 Node: S/390 and zSeries Options\x7f572641
43818 Node: Score Options\x7f580589
43819 Node: SH Options\x7f581417
43820 Node: SPARC Options\x7f591695
43821 Node: SPU Options\x7f602668
43822 Node: System V Options\x7f605956
43823 Node: V850 Options\x7f606779
43824 Node: VAX Options\x7f609919
43825 Node: VxWorks Options\x7f610467
43826 Node: x86-64 Options\x7f611622
43827 Node: i386 and x86-64 Windows Options\x7f611840
43828 Node: Xstormy16 Options\x7f614159
43829 Node: Xtensa Options\x7f614448
43830 Node: zSeries Options\x7f618595
43831 Node: Code Gen Options\x7f618791
43832 Node: Environment Variables\x7f643370
43833 Node: Precompiled Headers\x7f651266
43834 Node: Running Protoize\x7f657492
43835 Node: C Implementation\x7f663829
43836 Node: Translation implementation\x7f665492
43837 Node: Environment implementation\x7f666066
43838 Node: Identifiers implementation\x7f666616
43839 Node: Characters implementation\x7f667670
43840 Node: Integers implementation\x7f670476
43841 Node: Floating point implementation\x7f672301
43842 Node: Arrays and pointers implementation\x7f675230
43843 Ref: Arrays and pointers implementation-Footnote-1\x7f676665
43844 Node: Hints implementation\x7f676789
43845 Node: Structures unions enumerations and bit-fields implementation\x7f678255
43846 Node: Qualifiers implementation\x7f680241
43847 Node: Declarators implementation\x7f682013
43848 Node: Statements implementation\x7f682355
43849 Node: Preprocessing directives implementation\x7f682682
43850 Node: Library functions implementation\x7f684787
43851 Node: Architecture implementation\x7f685427
43852 Node: Locale-specific behavior implementation\x7f686130
43853 Node: C Extensions\x7f686435
43854 Node: Statement Exprs\x7f691046
43855 Node: Local Labels\x7f695559
43856 Node: Labels as Values\x7f698538
43857 Ref: Labels as Values-Footnote-1\x7f700911
43858 Node: Nested Functions\x7f701094
43859 Node: Constructing Calls\x7f704988
43860 Node: Typeof\x7f709711
43861 Node: Conditionals\x7f712877
43862 Node: Long Long\x7f713768
43863 Node: Complex\x7f715269
43864 Node: Floating Types\x7f717839
43865 Node: Decimal Float\x7f718958
43866 Node: Hex Floats\x7f720947
43867 Node: Fixed-Point\x7f721988
43868 Node: Zero Length\x7f725273
43869 Node: Empty Structures\x7f728551
43870 Node: Variable Length\x7f728967
43871 Node: Variadic Macros\x7f731734
43872 Node: Escaped Newlines\x7f734116
43873 Node: Subscripting\x7f734955
43874 Node: Pointer Arith\x7f735678
43875 Node: Initializers\x7f736246
43876 Node: Compound Literals\x7f736742
43877 Node: Designated Inits\x7f738917
43878 Node: Case Ranges\x7f742572
43879 Node: Cast to Union\x7f743255
43880 Node: Mixed Declarations\x7f744351
43881 Node: Function Attributes\x7f744857
43882 Node: Attribute Syntax\x7f807472
43883 Node: Function Prototypes\x7f817742
43884 Node: C++ Comments\x7f819523
43885 Node: Dollar Signs\x7f820042
43886 Node: Character Escapes\x7f820507
43887 Node: Alignment\x7f820801
43888 Node: Variable Attributes\x7f822175
43889 Ref: i386 Variable Attributes\x7f836765
43890 Node: Type Attributes\x7f842750
43891 Ref: i386 Type Attributes\x7f856371
43892 Ref: PowerPC Type Attributes\x7f857211
43893 Ref: SPU Type Attributes\x7f858073
43894 Node: Inline\x7f858364
43895 Node: Extended Asm\x7f863311
43896 Ref: Example of asm with clobbered asm reg\x7f869397
43897 Node: Constraints\x7f883616
43898 Node: Simple Constraints\x7f884466
43899 Node: Multi-Alternative\x7f891137
43900 Node: Modifiers\x7f892854
43901 Node: Machine Constraints\x7f895748
43902 Node: Asm Labels\x7f927961
43903 Node: Explicit Reg Vars\x7f929637
43904 Node: Global Reg Vars\x7f931245
43905 Node: Local Reg Vars\x7f935795
43906 Node: Alternate Keywords\x7f938236
43907 Node: Incomplete Enums\x7f939664
43908 Node: Function Names\x7f940421
43909 Node: Return Address\x7f942583
43910 Node: Vector Extensions\x7f945380
43911 Node: Offsetof\x7f948882
43912 Node: Atomic Builtins\x7f949696
43913 Node: Object Size Checking\x7f955074
43914 Node: Other Builtins\x7f960502
43915 Node: Target Builtins\x7f985310
43916 Node: Alpha Built-in Functions\x7f986204
43917 Node: ARM iWMMXt Built-in Functions\x7f989203
43918 Node: ARM NEON Intrinsics\x7f995922
43919 Node: Blackfin Built-in Functions\x7f1203760
43920 Node: FR-V Built-in Functions\x7f1204374
43921 Node: Argument Types\x7f1205233
43922 Node: Directly-mapped Integer Functions\x7f1206989
43923 Node: Directly-mapped Media Functions\x7f1208071
43924 Node: Raw read/write Functions\x7f1215103
43925 Node: Other Built-in Functions\x7f1216015
43926 Node: X86 Built-in Functions\x7f1217204
43927 Node: MIPS DSP Built-in Functions\x7f1261595
43928 Node: MIPS Paired-Single Support\x7f1274042
43929 Node: MIPS Loongson Built-in Functions\x7f1275543
43930 Node: Paired-Single Arithmetic\x7f1282061
43931 Node: Paired-Single Built-in Functions\x7f1283007
43932 Node: MIPS-3D Built-in Functions\x7f1285677
43933 Node: picoChip Built-in Functions\x7f1291052
43934 Node: Other MIPS Built-in Functions\x7f1292414
43935 Node: PowerPC AltiVec Built-in Functions\x7f1292938
43936 Node: SPARC VIS Built-in Functions\x7f1394362
43937 Node: SPU Built-in Functions\x7f1396054
43938 Node: Target Format Checks\x7f1397836
43939 Node: Solaris Format Checks\x7f1398243
43940 Node: Pragmas\x7f1398640
43941 Node: ARM Pragmas\x7f1399334
43942 Node: M32C Pragmas\x7f1399937
43943 Node: RS/6000 and PowerPC Pragmas\x7f1400513
43944 Node: Darwin Pragmas\x7f1401255
43945 Node: Solaris Pragmas\x7f1402322
43946 Node: Symbol-Renaming Pragmas\x7f1403483
43947 Node: Structure-Packing Pragmas\x7f1406105
43948 Node: Weak Pragmas\x7f1407757
43949 Node: Diagnostic Pragmas\x7f1408559
43950 Node: Visibility Pragmas\x7f1411193
43951 Node: Push/Pop Macro Pragmas\x7f1411945
43952 Node: Function Specific Option Pragmas\x7f1412918
43953 Node: Unnamed Fields\x7f1415133
43954 Node: Thread-Local\x7f1416643
43955 Node: C99 Thread-Local Edits\x7f1418752
43956 Node: C++98 Thread-Local Edits\x7f1420764
43957 Node: Binary constants\x7f1424209
43958 Node: C++ Extensions\x7f1424880
43959 Node: Volatiles\x7f1426522
43960 Node: Restricted Pointers\x7f1429198
43961 Node: Vague Linkage\x7f1430792
43962 Node: C++ Interface\x7f1434448
43963 Ref: C++ Interface-Footnote-1\x7f1438745
43964 Node: Template Instantiation\x7f1438882
43965 Node: Bound member functions\x7f1445894
43966 Node: C++ Attributes\x7f1447437
43967 Node: Namespace Association\x7f1449095
43968 Node: Type Traits\x7f1450509
43969 Node: Java Exceptions\x7f1456056
43970 Node: Deprecated Features\x7f1457453
43971 Node: Backwards Compatibility\x7f1460418
43972 Node: Objective-C\x7f1461776
43973 Node: Executing code before main\x7f1462357
43974 Node: What you can and what you cannot do in +load\x7f1464963
43975 Node: Type encoding\x7f1467130
43976 Node: Garbage Collection\x7f1470517
43977 Node: Constant string objects\x7f1473141
43978 Node: compatibility_alias\x7f1475649
43979 Node: Compatibility\x7f1476527
43980 Node: Gcov\x7f1483094
43981 Node: Gcov Intro\x7f1483625
43982 Node: Invoking Gcov\x7f1486341
43983 Node: Gcov and Optimization\x7f1498202
43984 Node: Gcov Data Files\x7f1500855
43985 Node: Cross-profiling\x7f1501993
43986 Node: Trouble\x7f1503819
43987 Node: Actual Bugs\x7f1505375
43988 Node: Cross-Compiler Problems\x7f1506115
43989 Node: Interoperation\x7f1506529
43990 Node: Incompatibilities\x7f1513666
43991 Node: Fixed Headers\x7f1521816
43992 Node: Standard Libraries\x7f1523479
43993 Node: Disappointments\x7f1524851
43994 Node: C++ Misunderstandings\x7f1529209
43995 Node: Static Definitions\x7f1530028
43996 Node: Name lookup\x7f1531081
43997 Ref: Name lookup-Footnote-1\x7f1535859
43998 Node: Temporaries\x7f1536046
43999 Node: Copy Assignment\x7f1538022
44000 Node: Protoize Caveats\x7f1539829
44001 Node: Non-bugs\x7f1543802
44002 Node: Warnings and Errors\x7f1554306
44003 Node: Bugs\x7f1556070
44004 Node: Bug Criteria\x7f1556634
44005 Node: Bug Reporting\x7f1558844
44006 Node: Service\x7f1559078
44007 Node: Contributing\x7f1559897
44008 Node: Funding\x7f1560637
44009 Node: GNU Project\x7f1563126
44010 Node: Copying\x7f1563772
44011 Node: GNU Free Documentation License\x7f1601300
44012 Node: Contributors\x7f1623706
44013 Node: Option Index\x7f1660033
44014 Node: Keyword Index\x7f1819424
44015 \x1f
44016 End Tag Table