• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /asuswrt-rt-n18u-9.0.0.4.380.2695/release/src-rt-6.x.4708/toolchains/hndtools-armeabi-2011.09/share/doc/arm-arm-none-eabi/info/
1This is doc/gcc.info, produced by makeinfo version 4.13 from
2/scratch/jwlemke/2011.09-arm-eabi-lite/src/gcc-4.6-2011.09/gcc/doc/gcc.texi.
3
4Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
51999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
6Free Software Foundation, Inc.
7
8 Permission is granted to copy, distribute and/or modify this document
9under the terms of the GNU Free Documentation License, Version 1.3 or
10any later version published by the Free Software Foundation; with the
11Invariant Sections being "Funding Free Software", the Front-Cover Texts
12being (a) (see below), and with the Back-Cover Texts being (b) (see
13below).  A copy of the license is included in the section entitled "GNU
14Free Documentation License".
15
16 (a) The FSF's Front-Cover Text is:
17
18 A GNU Manual
19
20 (b) The FSF's Back-Cover Text is:
21
22 You have freedom to copy and modify this GNU Manual, like GNU
23software.  Copies published by the Free Software Foundation raise
24funds for GNU development.
25
26INFO-DIR-SECTION Software development
27START-INFO-DIR-ENTRY
28* gcc: (gcc).                  The GNU Compiler Collection.
29* g++: (gcc).                  The GNU C++ compiler.
30END-INFO-DIR-ENTRY
31 This file documents the use of the GNU compilers.
32
33 Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
341999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
35Free Software Foundation, Inc.
36
37 Permission is granted to copy, distribute and/or modify this document
38under the terms of the GNU Free Documentation License, Version 1.3 or
39any later version published by the Free Software Foundation; with the
40Invariant Sections being "Funding Free Software", the Front-Cover Texts
41being (a) (see below), and with the Back-Cover Texts being (b) (see
42below).  A copy of the license is included in the section entitled "GNU
43Free Documentation License".
44
45 (a) The FSF's Front-Cover Text is:
46
47 A GNU Manual
48
49 (b) The FSF's Back-Cover Text is:
50
51 You have freedom to copy and modify this GNU Manual, like GNU
52software.  Copies published by the Free Software Foundation raise
53funds for GNU development.
54
55
56
57File: gcc.info,  Node: Top,  Next: G++ and GCC,  Up: (DIR)
58
59Introduction
60************
61
62This manual documents how to use the GNU compilers, as well as their
63features and incompatibilities, and how to report bugs.  It corresponds
64to the compilers (Sourcery CodeBench Lite 2011.09-69) version
654.6.1.  The internals of the GNU compilers, including how to port them
66to new targets and some information about how to write front ends for
67new languages, are documented in a separate manual.  *Note
68Introduction: (gccint)Top.
69
70* Menu:
71
72* G++ and GCC::     You can compile C or C++ programs.
73* Standards::       Language standards supported by GCC.
74* Invoking GCC::    Command options supported by `gcc'.
75* C Implementation:: How GCC implements the ISO C specification.
76* C Extensions::    GNU extensions to the C language family.
77* C++ Implementation:: How GCC implements the ISO C++ specification.
78* C++ Extensions::  GNU extensions to the C++ language.
79* Objective-C::     GNU Objective-C runtime features.
80* Compatibility::   Binary Compatibility
81* Gcov::            `gcov'---a test coverage program.
82* Trouble::         If you have trouble using GCC.
83* Bugs::            How, why and where to report bugs.
84* Service::         How to find suppliers of support for GCC.
85* Contributing::    How to contribute to testing and developing GCC.
86
87* Funding::         How to help assure funding for free software.
88* GNU Project::     The GNU Project and GNU/Linux.
89
90* Copying::         GNU General Public License says
91                    how you can copy and share GCC.
92* GNU Free Documentation License:: How you can copy and share this manual.
93* Contributors::    People who have contributed to GCC.
94
95* Option Index::    Index to command line options.
96* Keyword Index::   Index of concepts and symbol names.
97
98
99File: gcc.info,  Node: G++ and GCC,  Next: Standards,  Prev: Top,  Up: Top
100
1011 Programming Languages Supported by GCC
102****************************************
103
104GCC stands for "GNU Compiler Collection".  GCC is an integrated
105distribution of compilers for several major programming languages.
106These languages currently include C, C++, Objective-C, Objective-C++,
107Java, Fortran, Ada, and Go.
108
109 The abbreviation "GCC" has multiple meanings in common use.  The
110current official meaning is "GNU Compiler Collection", which refers
111generically to the complete suite of tools.  The name historically stood
112for "GNU C Compiler", and this usage is still common when the emphasis
113is on compiling C programs.  Finally, the name is also used when
114speaking of the "language-independent" component of GCC: code shared
115among the compilers for all supported languages.
116
117 The language-independent component of GCC includes the majority of the
118optimizers, as well as the "back ends" that generate machine code for
119various processors.
120
121 The part of a compiler that is specific to a particular language is
122called the "front end".  In addition to the front ends that are
123integrated components of GCC, there are several other front ends that
124are maintained separately.  These support languages such as Pascal,
125Mercury, and COBOL.  To use these, they must be built together with GCC
126proper.
127
128 Most of the compilers for languages other than C have their own names.
129The C++ compiler is G++, the Ada compiler is GNAT, and so on.  When we
130talk about compiling one of those languages, we might refer to that
131compiler by its own name, or as GCC.  Either is correct.
132
133 Historically, compilers for many languages, including C++ and Fortran,
134have been implemented as "preprocessors" which emit another high level
135language such as C.  None of the compilers included in GCC are
136implemented this way; they all generate machine code directly.  This
137sort of preprocessor should not be confused with the "C preprocessor",
138which is an integral feature of the C, C++, Objective-C and
139Objective-C++ languages.
140
141
142File: gcc.info,  Node: Standards,  Next: Invoking GCC,  Prev: G++ and GCC,  Up: Top
143
1442 Language Standards Supported by GCC
145*************************************
146
147For each language compiled by GCC for which there is a standard, GCC
148attempts to follow one or more versions of that standard, possibly with
149some exceptions, and possibly with some extensions.
150
1512.1 C language
152==============
153
154GCC supports three versions of the C standard, although support for the
155most recent version is not yet complete.
156
157 The original ANSI C standard (X3.159-1989) was ratified in 1989 and
158published in 1990.  This standard was ratified as an ISO standard
159(ISO/IEC 9899:1990) later in 1990.  There were no technical differences
160between these publications, although the sections of the ANSI standard
161were renumbered and became clauses in the ISO standard.  This standard,
162in both its forms, is commonly known as "C89", or occasionally as
163"C90", from the dates of ratification.  The ANSI standard, but not the
164ISO standard, also came with a Rationale document.  To select this
165standard in GCC, use one of the options `-ansi', `-std=c90' or
166`-std=iso9899:1990'; to obtain all the diagnostics required by the
167standard, you should also specify `-pedantic' (or `-pedantic-errors' if
168you want them to be errors rather than warnings).  *Note Options
169Controlling C Dialect: C Dialect Options.
170
171 Errors in the 1990 ISO C standard were corrected in two Technical
172Corrigenda published in 1994 and 1996.  GCC does not support the
173uncorrected version.
174
175 An amendment to the 1990 standard was published in 1995.  This
176amendment added digraphs and `__STDC_VERSION__' to the language, but
177otherwise concerned the library.  This amendment is commonly known as
178"AMD1"; the amended standard is sometimes known as "C94" or "C95".  To
179select this standard in GCC, use the option `-std=iso9899:199409'
180(with, as for other standard versions, `-pedantic' to receive all
181required diagnostics).
182
183 A new edition of the ISO C standard was published in 1999 as ISO/IEC
1849899:1999, and is commonly known as "C99".  GCC has incomplete support
185for this standard version; see
186`http://gcc.gnu.org/gcc-4.6/c99status.html' for details.  To select this
187standard, use `-std=c99' or `-std=iso9899:1999'.  (While in
188development, drafts of this standard version were referred to as "C9X".)
189
190 Errors in the 1999 ISO C standard were corrected in three Technical
191Corrigenda published in 2001, 2004 and 2007.  GCC does not support the
192uncorrected version.
193
194 A fourth version of the C standard, known as "C1X", is under
195development; GCC has limited preliminary support for parts of this
196standard, enabled with `-std=c1x'.
197
198 By default, GCC provides some extensions to the C language that on
199rare occasions conflict with the C standard.  *Note Extensions to the C
200Language Family: C Extensions.  Use of the `-std' options listed above
201will disable these extensions where they conflict with the C standard
202version selected.  You may also select an extended version of the C
203language explicitly with `-std=gnu90' (for C90 with GNU extensions),
204`-std=gnu99' (for C99 with GNU extensions) or `-std=gnu1x' (for C1X
205with GNU extensions).  The default, if no C language dialect options
206are given, is `-std=gnu90'; this will change to `-std=gnu99' in some
207future release when the C99 support is complete.  Some features that
208are part of the C99 standard are accepted as extensions in C90 mode.
209
210 The ISO C standard defines (in clause 4) two classes of conforming
211implementation.  A "conforming hosted implementation" supports the
212whole standard including all the library facilities; a "conforming
213freestanding implementation" is only required to provide certain
214library facilities: those in `<float.h>', `<limits.h>', `<stdarg.h>',
215and `<stddef.h>'; since AMD1, also those in `<iso646.h>'; and in C99,
216also those in `<stdbool.h>' and `<stdint.h>'.  In addition, complex
217types, added in C99, are not required for freestanding implementations.
218The standard also defines two environments for programs, a
219"freestanding environment", required of all implementations and which
220may not have library facilities beyond those required of freestanding
221implementations, where the handling of program startup and termination
222are implementation-defined, and a "hosted environment", which is not
223required, in which all the library facilities are provided and startup
224is through a function `int main (void)' or `int main (int, char *[])'.
225An OS kernel would be a freestanding environment; a program using the
226facilities of an operating system would normally be in a hosted
227implementation.
228
229 GCC aims towards being usable as a conforming freestanding
230implementation, or as the compiler for a conforming hosted
231implementation.  By default, it will act as the compiler for a hosted
232implementation, defining `__STDC_HOSTED__' as `1' and presuming that
233when the names of ISO C functions are used, they have the semantics
234defined in the standard.  To make it act as a conforming freestanding
235implementation for a freestanding environment, use the option
236`-ffreestanding'; it will then define `__STDC_HOSTED__' to `0' and not
237make assumptions about the meanings of function names from the standard
238library, with exceptions noted below.  To build an OS kernel, you may
239well still need to make your own arrangements for linking and startup.
240*Note Options Controlling C Dialect: C Dialect Options.
241
242 GCC does not provide the library facilities required only of hosted
243implementations, nor yet all the facilities required by C99 of
244freestanding implementations; to use the facilities of a hosted
245environment, you will need to find them elsewhere (for example, in the
246GNU C library).  *Note Standard Libraries: Standard Libraries.
247
248 Most of the compiler support routines used by GCC are present in
249`libgcc', but there are a few exceptions.  GCC requires the
250freestanding environment provide `memcpy', `memmove', `memset' and
251`memcmp'.  Finally, if `__builtin_trap' is used, and the target does
252not implement the `trap' pattern, then GCC will emit a call to `abort'.
253
254 For references to Technical Corrigenda, Rationale documents and
255information concerning the history of C that is available online, see
256`http://gcc.gnu.org/readings.html'
257
2582.2 C++ language
259================
260
261GCC supports the ISO C++ standard (1998) and contains experimental
262support for the upcoming ISO C++ standard (200x).
263
264 The original ISO C++ standard was published as the ISO standard
265(ISO/IEC 14882:1998) and amended by a Technical Corrigenda published in
2662003 (ISO/IEC 14882:2003). These standards are referred to as C++98 and
267C++03, respectively. GCC implements the majority of C++98 (`export' is
268a notable exception) and most of the changes in C++03.  To select this
269standard in GCC, use one of the options `-ansi' or `-std=c++98'; to
270obtain all the diagnostics required by the standard, you should also
271specify `-pedantic' (or `-pedantic-errors' if you want them to be
272errors rather than warnings).
273
274 The ISO C++ committee is working on a new ISO C++ standard, dubbed
275C++0x, that is intended to be published by 2009. C++0x contains several
276changes to the C++ language, some of which have been implemented in an
277experimental C++0x mode in GCC. The C++0x mode in GCC tracks the draft
278working paper for the C++0x standard; the latest working paper is
279available on the ISO C++ committee's web site at
280`http://www.open-std.org/jtc1/sc22/wg21/'. For information regarding
281the C++0x features available in the experimental C++0x mode, see
282`http://gcc.gnu.org/projects/cxx0x.html'. To select this standard in
283GCC, use the option `-std=c++0x'; to obtain all the diagnostics
284required by the standard, you should also specify `-pedantic' (or
285`-pedantic-errors' if you want them to be errors rather than warnings).
286
287 By default, GCC provides some extensions to the C++ language; *Note
288Options Controlling C++ Dialect: C++ Dialect Options.  Use of the
289`-std' option listed above will disable these extensions.  You may also
290select an extended version of the C++ language explicitly with
291`-std=gnu++98' (for C++98 with GNU extensions) or `-std=gnu++0x' (for
292C++0x with GNU extensions).  The default, if no C++ language dialect
293options are given, is `-std=gnu++98'.
294
2952.3 Objective-C and Objective-C++ languages
296===========================================
297
298GCC supports "traditional" Objective-C (also known as "Objective-C
2991.0") and contains support for the Objective-C exception and
300synchronization syntax.  It has also support for a number of
301"Objective-C 2.0" language extensions, including properties, fast
302enumeration (only for Objective-C), method attributes and the @optional
303and @required keywords in protocols.  GCC supports Objective-C++ and
304features available in Objective-C are also available in Objective-C++.
305
306 GCC by default uses the GNU Objective-C runtime library, which is part
307of GCC and is not the same as the Apple/NeXT Objective-C runtime
308library used on Apple systems.  There are a number of differences
309documented in this manual.  The options `-fgnu-runtime' and
310`-fnext-runtime' allow you to switch between producing output that
311works with the GNU Objective-C runtime library and output that works
312with the Apple/NeXT Objective-C runtime library.
313
314 There is no formal written standard for Objective-C or Objective-C++.
315The authoritative manual on traditional Objective-C (1.0) is
316"Object-Oriented Programming and the Objective-C Language", available
317at a number of web sites:
318   * `http://www.gnustep.org/resources/documentation/ObjectivCBook.pdf'
319     is the original NeXTstep document;
320
321   * `http://objc.toodarkpark.net' is the same document in another
322     format;
323
324   *
325     `http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/ObjectiveC/'
326     has an updated version but make sure you search for "Object
327     Oriented Programming and the Objective-C Programming Language 1.0",
328     not documentation on the newer "Objective-C 2.0" language
329
330 The Objective-C exception and synchronization syntax (that is, the
331keywords @try, @throw, @catch, @finally and @synchronized) is supported
332by GCC and is enabled with the option `-fobjc-exceptions'.  The syntax
333is briefly documented in this manual and in the Objective-C 2.0 manuals
334from Apple.
335
336 The Objective-C 2.0 language extensions and features are automatically
337enabled; they include properties (via the @property, @synthesize and
338@dynamic keywords), fast enumeration (not available in Objective-C++),
339attributes for methods (such as deprecated, noreturn, sentinel,
340format), the unused attribute for method arguments, the @package
341keyword for instance variables and the @optional and @required keywords
342in protocols.  You can disable all these Objective-C 2.0 language
343extensions with the option `-fobjc-std=objc1', which causes the
344compiler to recognize the same Objective-C language syntax recognized
345by GCC 4.0, and to produce an error if one of the new features is used.
346
347 GCC has currently no support for non-fragile instance variables.
348
349 The authoritative manual on Objective-C 2.0 is available from Apple:
350   *
351     `http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/ObjectiveC/'
352
353 For more information concerning the history of Objective-C that is
354available online, see `http://gcc.gnu.org/readings.html'
355
3562.4 Go language
357===============
358
359The Go language continues to evolve as of this writing; see the current
360language specifications (http://golang.org/doc/go_spec.html).  At
361present there are no specific versions of Go, and there is no way to
362describe the language supported by GCC in terms of a specific version.
363In general GCC tracks the evolving specification closely, and any given
364release will support the language as of the date that the release was
365frozen.
366
3672.5 References for other languages
368==================================
369
370*Note GNAT Reference Manual: (gnat_rm)Top, for information on standard
371conformance and compatibility of the Ada compiler.
372
373 *Note Standards: (gfortran)Standards, for details of standards
374supported by GNU Fortran.
375
376 *Note Compatibility with the Java Platform: (gcj)Compatibility, for
377details of compatibility between `gcj' and the Java Platform.
378
379
380File: gcc.info,  Node: Invoking GCC,  Next: C Implementation,  Prev: Standards,  Up: Top
381
3823 GCC Command Options
383*********************
384
385When you invoke GCC, it normally does preprocessing, compilation,
386assembly and linking.  The "overall options" allow you to stop this
387process at an intermediate stage.  For example, the `-c' option says
388not to run the linker.  Then the output consists of object files output
389by the assembler.
390
391 Other options are passed on to one stage of processing.  Some options
392control the preprocessor and others the compiler itself.  Yet other
393options control the assembler and linker; most of these are not
394documented here, since you rarely need to use any of them.
395
396 Most of the command line options that you can use with GCC are useful
397for C programs; when an option is only useful with another language
398(usually C++), the explanation says so explicitly.  If the description
399for a particular option does not mention a source language, you can use
400that option with all supported languages.
401
402 *Note Compiling C++ Programs: Invoking G++, for a summary of special
403options for compiling C++ programs.
404
405 The `gcc' program accepts options and file names as operands.  Many
406options have multi-letter names; therefore multiple single-letter
407options may _not_ be grouped: `-dv' is very different from `-d -v'.
408
409 You can mix options and other arguments.  For the most part, the order
410you use doesn't matter.  Order does matter when you use several options
411of the same kind; for example, if you specify `-L' more than once, the
412directories are searched in the order specified.  Also, the placement
413of the `-l' option is significant.
414
415 Many options have long names starting with `-f' or with `-W'--for
416example, `-fmove-loop-invariants', `-Wformat' and so on.  Most of these
417have both positive and negative forms; the negative form of `-ffoo'
418would be `-fno-foo'.  This manual documents only one of these two
419forms, whichever one is not the default.
420
421 *Note Option Index::, for an index to GCC's options.
422
423* Menu:
424
425* Option Summary::      Brief list of all options, without explanations.
426* Overall Options::     Controlling the kind of output:
427                        an executable, object files, assembler files,
428                        or preprocessed source.
429* Invoking G++::        Compiling C++ programs.
430* C Dialect Options::   Controlling the variant of C language compiled.
431* C++ Dialect Options:: Variations on C++.
432* Objective-C and Objective-C++ Dialect Options:: Variations on Objective-C
433                        and Objective-C++.
434* Language Independent Options:: Controlling how diagnostics should be
435                        formatted.
436* Warning Options::     How picky should the compiler be?
437* Debugging Options::   Symbol tables, measurements, and debugging dumps.
438* Optimize Options::    How much optimization?
439* Preprocessor Options:: Controlling header files and macro definitions.
440                         Also, getting dependency information for Make.
441* Assembler Options::   Passing options to the assembler.
442* Link Options::        Specifying libraries and so on.
443* Directory Options::   Where to find header files and libraries.
444                        Where to find the compiler executable files.
445* Spec Files::          How to pass switches to sub-processes.
446* Target Options::      Running a cross-compiler, or an old version of GCC.
447* Submodel Options::    Specifying minor hardware or convention variations,
448                        such as 68010 vs 68020.
449* Code Gen Options::    Specifying conventions for function calls, data layout
450                        and register usage.
451* Environment Variables:: Env vars that affect GCC.
452* Precompiled Headers:: Compiling a header once, and using it many times.
453
454
455File: gcc.info,  Node: Option Summary,  Next: Overall Options,  Up: Invoking GCC
456
4573.1 Option Summary
458==================
459
460Here is a summary of all the options, grouped by type.  Explanations are
461in the following sections.
462
463_Overall Options_
464     *Note Options Controlling the Kind of Output: Overall Options.
465          -c  -S  -E  -o FILE  -no-canonical-prefixes
466          -pipe  -pass-exit-codes
467          -x LANGUAGE  -v  -###  --help[=CLASS[,...]]  --target-help
468          --version -wrapper @FILE -fplugin=FILE -fplugin-arg-NAME=ARG
469          -fdump-ada-spec[-slim]
470      -fdump-go-spec=FILE
471
472_C Language Options_
473     *Note Options Controlling C Dialect: C Dialect Options.
474          -ansi  -std=STANDARD  -fgnu89-inline
475          -aux-info FILENAME
476          -fno-asm  -fno-builtin  -fno-builtin-FUNCTION
477          -fhosted  -ffreestanding -fopenmp -fms-extensions -fplan9-extensions
478          -trigraphs  -no-integrated-cpp  -traditional  -traditional-cpp
479          -fallow-single-precision  -fcond-mismatch -flax-vector-conversions
480          -fsigned-bitfields  -fsigned-char
481          -funsigned-bitfields  -funsigned-char
482
483_C++ Language Options_
484     *Note Options Controlling C++ Dialect: C++ Dialect Options.
485          -fabi-version=N  -fno-access-control  -fcheck-new
486          -fconserve-space  -fconstexpr-depth=N  -ffriend-injection
487          -fno-elide-constructors
488          -fno-enforce-eh-specs
489          -ffor-scope  -fno-for-scope  -fno-gnu-keywords
490          -fno-implicit-templates
491          -fno-implicit-inline-templates
492          -fno-implement-inlines  -fms-extensions
493          -fno-nonansi-builtins  -fnothrow-opt  -fno-operator-names
494          -fno-optional-diags  -fpermissive
495          -fno-pretty-templates
496          -frepo  -fno-rtti  -fstats  -ftemplate-depth=N
497          -fno-threadsafe-statics -fuse-cxa-atexit  -fno-weak  -nostdinc++
498          -fno-default-inline  -fvisibility-inlines-hidden
499          -fvisibility-ms-compat
500          -Wabi  -Wconversion-null  -Wctor-dtor-privacy
501          -Wnoexcept -Wnon-virtual-dtor  -Wreorder
502          -Weffc++  -Wstrict-null-sentinel
503          -Wno-non-template-friend  -Wold-style-cast
504          -Woverloaded-virtual  -Wno-pmf-conversions
505          -Wsign-promo
506
507_Objective-C and Objective-C++ Language Options_
508     *Note Options Controlling Objective-C and Objective-C++ Dialects:
509     Objective-C and Objective-C++ Dialect Options.
510          -fconstant-string-class=CLASS-NAME
511          -fgnu-runtime  -fnext-runtime
512          -fno-nil-receivers
513          -fobjc-abi-version=N
514          -fobjc-call-cxx-cdtors
515          -fobjc-direct-dispatch
516          -fobjc-exceptions
517          -fobjc-gc
518          -fobjc-nilcheck
519          -fobjc-std=objc1
520          -freplace-objc-classes
521          -fzero-link
522          -gen-decls
523          -Wassign-intercept
524          -Wno-protocol  -Wselector
525          -Wstrict-selector-match
526          -Wundeclared-selector
527
528_Language Independent Options_
529     *Note Options to Control Diagnostic Messages Formatting: Language
530     Independent Options.
531          -fmessage-length=N
532          -fdiagnostics-show-location=[once|every-line]
533          -fno-diagnostics-show-option
534
535_Warning Options_
536     *Note Options to Request or Suppress Warnings: Warning Options.
537          -fsyntax-only  -fmax-errors=N  -pedantic
538          -pedantic-errors
539          -w  -Wextra  -Wall  -Waddress  -Waggregate-return  -Warray-bounds
540          -Wno-attributes -Wno-builtin-macro-redefined
541          -Wc++-compat -Wc++0x-compat -Wcast-align  -Wcast-qual
542          -Wchar-subscripts -Wclobbered  -Wcomment
543          -Wconversion  -Wcoverage-mismatch  -Wno-cpp  -Wno-deprecated
544          -Wno-deprecated-declarations -Wdisabled-optimization
545          -Wno-div-by-zero -Wdouble-promotion -Wempty-body  -Wenum-compare
546          -Wno-endif-labels -Werror  -Werror=*
547          -Wfatal-errors  -Wfloat-equal  -Wformat  -Wformat=2
548          -Wno-format-contains-nul -Wno-format-extra-args -Wformat-nonliteral
549          -Wformat-security  -Wformat-y2k
550          -Wframe-larger-than=LEN -Wjump-misses-init -Wignored-qualifiers
551          -Wimplicit  -Wimplicit-function-declaration  -Wimplicit-int
552          -Winit-self  -Winline
553          -Wno-int-to-pointer-cast -Wno-invalid-offsetof
554          -Winvalid-pch -Wlarger-than=LEN  -Wunsafe-loop-optimizations
555          -Wlogical-op -Wlong-long
556          -Wmain  -Wmissing-braces  -Wmissing-field-initializers
557          -Wmissing-format-attribute  -Wmissing-include-dirs
558          -Wno-mudflap
559          -Wno-multichar  -Wnonnull  -Wno-overflow
560          -Woverlength-strings  -Wpacked  -Wpacked-bitfield-compat  -Wpadded
561          -Wparentheses  -Wpedantic-ms-format -Wno-pedantic-ms-format
562          -Wpointer-arith  -Wno-pointer-to-int-cast
563          -Wno-poison-system-directories
564          -Wredundant-decls
565          -Wreturn-type  -Wsequence-point  -Wshadow
566          -Wsign-compare  -Wsign-conversion  -Wstack-protector
567          -Wstrict-aliasing -Wstrict-aliasing=n
568          -Wstrict-overflow -Wstrict-overflow=N
569          -Wsuggest-attribute=[pure|const|noreturn]
570          -Wswitch  -Wswitch-default  -Wswitch-enum -Wsync-nand
571          -Wsystem-headers  -Wtrampolines  -Wtrigraphs  -Wtype-limits  -Wundef
572          -Wuninitialized  -Wunknown-pragmas  -Wno-pragmas
573          -Wunsuffixed-float-constants  -Wunused  -Wunused-function
574          -Wunused-label  -Wunused-parameter -Wno-unused-result -Wunused-value
575          -Wunused-variable -Wunused-but-set-parameter -Wunused-but-set-variable
576          -Wvariadic-macros -Wvla -Wvolatile-register-var  -Wwrite-strings
577
578_C and Objective-C-only Warning Options_
579          -Wbad-function-cast  -Wmissing-declarations
580          -Wmissing-parameter-type  -Wmissing-prototypes  -Wnested-externs
581          -Wold-style-declaration  -Wold-style-definition
582          -Wstrict-prototypes  -Wtraditional  -Wtraditional-conversion
583          -Wdeclaration-after-statement -Wpointer-sign
584
585_Debugging Options_
586     *Note Options for Debugging Your Program or GCC: Debugging Options.
587          -dLETTERS  -dumpspecs  -dumpmachine  -dumpversion
588          -fdbg-cnt-list -fdbg-cnt=COUNTER-VALUE-LIST
589          -fdump-noaddr -fdump-unnumbered -fdump-unnumbered-links
590          -fdump-translation-unit[-N]
591          -fdump-class-hierarchy[-N]
592          -fdump-ipa-all -fdump-ipa-cgraph -fdump-ipa-inline
593          -fdump-statistics
594          -fdump-tree-all
595          -fdump-tree-original[-N]
596          -fdump-tree-optimized[-N]
597          -fdump-tree-cfg -fdump-tree-vcg -fdump-tree-alias
598          -fdump-tree-ch
599          -fdump-tree-ssa[-N] -fdump-tree-pre[-N]
600          -fdump-tree-ccp[-N] -fdump-tree-dce[-N]
601          -fdump-tree-gimple[-raw] -fdump-tree-mudflap[-N]
602          -fdump-tree-dom[-N]
603          -fdump-tree-dse[-N]
604          -fdump-tree-phiprop[-N]
605          -fdump-tree-phiopt[-N]
606          -fdump-tree-forwprop[-N]
607          -fdump-tree-copyrename[-N]
608          -fdump-tree-nrv -fdump-tree-vect
609          -fdump-tree-sink
610          -fdump-tree-sra[-N]
611          -fdump-tree-forwprop[-N]
612          -fdump-tree-fre[-N]
613          -fdump-tree-vrp[-N]
614          -ftree-vectorizer-verbose=N
615          -fdump-tree-storeccp[-N]
616          -fdump-final-insns=FILE
617          -fcompare-debug[=OPTS]  -fcompare-debug-second
618          -feliminate-dwarf2-dups -feliminate-unused-debug-types
619          -feliminate-unused-debug-symbols -femit-class-debug-always
620          -fenable-icf-debug
621          -fmem-report -fpre-ipa-mem-report -fpost-ipa-mem-report -fprofile-arcs
622          -frandom-seed=STRING -fsched-verbose=N
623          -fsel-sched-verbose -fsel-sched-dump-cfg -fsel-sched-pipelining-verbose
624          -fstack-usage  -ftest-coverage  -ftime-report -fvar-tracking
625          -fvar-tracking-assignments  -fvar-tracking-assignments-toggle
626          -g  -gLEVEL  -gtoggle  -gcoff  -gdwarf-VERSION
627          -ggdb  -gstabs  -gstabs+  -gstrict-dwarf  -gno-strict-dwarf
628          -gvms  -gxcoff  -gxcoff+
629          -fno-merge-debug-strings -fno-dwarf2-cfi-asm
630          -fdebug-prefix-map=OLD=NEW
631          -femit-struct-debug-baseonly -femit-struct-debug-reduced
632          -femit-struct-debug-detailed[=SPEC-LIST]
633          -p  -pg  -print-file-name=LIBRARY  -print-libgcc-file-name
634          -print-multi-directory  -print-multi-lib  -print-multi-os-directory
635          -print-prog-name=PROGRAM  -print-search-dirs  -Q
636          -print-sysroot -print-sysroot-headers-suffix
637          -save-temps -save-temps=cwd -save-temps=obj -time[=FILE]
638
639_Optimization Options_
640     *Note Options that Control Optimization: Optimize Options.
641          -falign-arrays
642          -falign-functions[=N] -falign-jumps[=N]
643          -falign-labels[=N] -falign-loops[=N] -fassociative-math
644          -fauto-inc-dec -fbranch-probabilities -fbranch-target-load-optimize
645          -fbranch-target-load-optimize2 -fbtr-bb-exclusive -fcaller-saves
646          -fcheck-data-deps -fcombine-stack-adjustments -fconserve-stack
647          -fcompare-elim -fcprop-registers -fcrossjumping
648          -fcse-follow-jumps -fcse-skip-blocks -fcx-fortran-rules
649          -fcx-limited-range
650          -fdata-sections -fdce -fdce -fdelayed-branch
651          -fdelete-null-pointer-checks -fdse -fdevirtualize -fdse
652          -fearly-inlining -fipa-sra -fexpensive-optimizations -ffast-math
653          -ffinite-math-only -ffloat-store -fexcess-precision=STYLE
654          -fforward-propagate -ffp-contract=STYLE -ffunction-sections
655          -fgcse -fgcse-after-reload -fgcse-las -fgcse-lm -fgraphite-identity
656          -fgcse-sm -fif-conversion -fif-conversion2 -findirect-inlining
657          -finline-functions -finline-functions-called-once -finline-limit=N
658          -finline-small-functions -fipa-cp -fipa-cp-clone -fipa-matrix-reorg
659          -fipa-pta -fipa-profile -fipa-pure-const -fipa-reference
660          -fipa-struct-reorg -fira-algorithm=ALGORITHM
661          -fira-region=REGION
662          -fira-loop-pressure -fno-ira-share-save-slots
663          -fno-ira-share-spill-slots -fira-verbose=N
664          -fivopts -fkeep-inline-functions -fkeep-static-consts
665          -floop-block -floop-flatten -floop-interchange -floop-strip-mine
666          -floop-parallelize-all -flto -flto-compression-level
667          -flto-partition=ALG -flto-report -fmerge-all-constants
668          -fmerge-constants -fmodulo-sched -fmodulo-sched-allow-regmoves
669          -fmove-loop-invariants fmudflap -fmudflapir -fmudflapth -fno-branch-count-reg
670          -fno-default-inline
671          -fno-defer-pop -fno-function-cse -fno-guess-branch-probability
672          -fno-inline -fno-math-errno -fno-peephole -fno-peephole2
673          -fno-sched-interblock -fno-sched-spec -fno-signed-zeros
674          -fno-toplevel-reorder -fno-trapping-math -fno-zero-initialized-in-bss
675          -fomit-frame-pointer -foptimize-register-move -foptimize-sibling-calls
676          -fpartial-inlining -fpeel-loops -fpredictive-commoning
677          -fprefetch-loop-arrays
678          -fprofile-correction -fprofile-dir=PATH -fprofile-generate
679          -fprofile-generate=PATH
680          -fprofile-use -fprofile-use=PATH -fprofile-values
681          -freciprocal-math -fregmove -frename-registers -freorder-blocks
682          -freorder-blocks-and-partition -freorder-functions
683          -frerun-cse-after-loop -freschedule-modulo-scheduled-loops
684          -frounding-math -fsched2-use-superblocks -fsched-pressure
685          -fsched-spec-load -fsched-spec-load-dangerous
686          -fsched-stalled-insns-dep[=N] -fsched-stalled-insns[=N]
687          -fsched-group-heuristic -fsched-critical-path-heuristic
688          -fsched-spec-insn-heuristic -fsched-rank-heuristic
689          -fsched-last-insn-heuristic -fsched-dep-count-heuristic
690          -fschedule-insns -fschedule-insns2 -fsection-anchors
691          -fselective-scheduling -fselective-scheduling2
692          -fsel-sched-pipelining -fsel-sched-pipelining-outer-loops
693          -fshrink-wrap -fsignaling-nans -fsingle-precision-constant
694          -fsplit-ivs-in-unroller -fsplit-wide-types -fstack-protector
695          -fstack-protector-all -fstrict-aliasing -fstrict-overflow
696          -fthread-jumps -ftracer -ftree-bit-ccp
697          -ftree-builtin-call-dce -ftree-ccp -ftree-ch -ftree-copy-prop
698          -ftree-copyrename -ftree-dce -ftree-dominator-opts -ftree-dse
699          -ftree-forwprop -ftree-fre -ftree-if-to-switch-conversion
700          -ftree-loop-if-convert -ftree-loop-if-convert-stores -ftree-loop-im
701          -ftree-phiprop -ftree-loop-distribution -ftree-loop-distribute-patterns
702          -ftree-loop-ivcanon -ftree-loop-linear -ftree-loop-optimize
703          -ftree-parallelize-loops=N -ftree-pre -ftree-pta -ftree-reassoc
704          -ftree-sink -ftree-sra -ftree-switch-conversion
705          -ftree-ter -ftree-vect-loop-version -ftree-vectorize -ftree-vrp
706          -funit-at-a-time -funroll-all-loops -funroll-loops
707          -funsafe-loop-optimizations -funsafe-math-optimizations -funswitch-loops
708          -fvariable-expansion-in-unroller -fvect-cost-model -fvpt -fweb
709          -fwhole-program -fwpa -fuse-linker-plugin
710          --param NAME=VALUE
711          -O  -O0  -O1  -O2  -O3  -Os -Ofast
712
713_Preprocessor Options_
714     *Note Options Controlling the Preprocessor: Preprocessor Options.
715          -AQUESTION=ANSWER
716          -A-QUESTION[=ANSWER]
717          -C  -dD  -dI  -dM  -dN
718          -DMACRO[=DEFN]  -E  -H
719          -idirafter DIR
720          -include FILE  -imacros FILE
721          -iprefix FILE  -iwithprefix DIR
722          -iwithprefixbefore DIR  -isystem DIR
723          -imultilib DIR -isysroot DIR
724          -M  -MM  -MF  -MG  -MP  -MQ  -MT  -nostdinc
725          -P  -fworking-directory  -remap
726          -trigraphs  -undef  -UMACRO  -Wp,OPTION
727          -Xpreprocessor OPTION
728
729_Assembler Option_
730     *Note Passing Options to the Assembler: Assembler Options.
731          -Wa,OPTION  -Xassembler OPTION
732
733_Linker Options_
734     *Note Options for Linking: Link Options.
735          OBJECT-FILE-NAME  -lLIBRARY
736          -nostartfiles  -nodefaultlibs  -nostdlib -pie -rdynamic
737          -s  -static  -static-libgcc  -static-libstdc++ -shared
738          -shared-libgcc  -symbolic
739          -T SCRIPT  -Wl,OPTION  -Xlinker OPTION
740          -u SYMBOL
741
742_Directory Options_
743     *Note Options for Directory Search: Directory Options.
744          -BPREFIX -IDIR -iplugindir=DIR
745
746     -iquoteDIR -LDIR -specs=FILE -I- -sysroot=DIR
747
748_Machine Dependent Options_
749     *Note Hardware Models and Configurations: Submodel Options.
750
751     _ARC Options_
752          -EB  -EL
753          -mmangle-cpu  -mcpu=CPU  -mtext=TEXT-SECTION
754          -mdata=DATA-SECTION  -mrodata=READONLY-DATA-SECTION
755
756     _ARM Options_
757          -mapcs-frame  -mno-apcs-frame
758          -mabi=NAME
759          -mapcs-stack-check  -mno-apcs-stack-check
760          -mapcs-float  -mno-apcs-float
761          -mapcs-reentrant  -mno-apcs-reentrant
762          -msched-prolog  -mno-sched-prolog
763          -mlittle-endian  -mbig-endian  -mwords-little-endian
764          -mfloat-abi=NAME  -msoft-float  -mhard-float  -mfpe
765          -mfp16-format=NAME
766          -mthumb-interwork  -mno-thumb-interwork
767          -mcpu=NAME  -march=NAME  -mfpu=NAME
768          -mstructure-size-boundary=N
769          -mabort-on-noreturn
770          -mlong-calls  -mno-long-calls
771          -msingle-pic-base  -mno-single-pic-base
772          -mpic-register=REG
773          -mnop-fun-dllimport
774          -mcirrus-fix-invalid-insns -mno-cirrus-fix-invalid-insns
775          -mpoke-function-name
776          -mthumb  -marm
777          -mtpcs-frame  -mtpcs-leaf-frame
778          -mcaller-super-interworking  -mcallee-super-interworking
779          -mtp=NAME -mtls-dialect=DIALECT
780          -mword-relocations
781          -mfix-cortex-m3-ldrd
782
783     _AVR Options_
784          -mmcu=MCU  -mno-interrupts
785          -mcall-prologues  -mtiny-stack  -mint8
786
787     _Blackfin Options_
788          -mcpu=CPU[-SIREVISION]
789          -msim -momit-leaf-frame-pointer  -mno-omit-leaf-frame-pointer
790          -mspecld-anomaly  -mno-specld-anomaly  -mcsync-anomaly  -mno-csync-anomaly
791          -mlow-64k -mno-low64k  -mstack-check-l1  -mid-shared-library
792          -mno-id-shared-library  -mshared-library-id=N
793          -mleaf-id-shared-library  -mno-leaf-id-shared-library
794          -msep-data  -mno-sep-data  -mlong-calls  -mno-long-calls
795          -mfast-fp -minline-plt -mmulticore  -mcorea  -mcoreb  -msdram
796          -micplb
797
798     _CRIS Options_
799          -mcpu=CPU  -march=CPU  -mtune=CPU
800          -mmax-stack-frame=N  -melinux-stacksize=N
801          -metrax4  -metrax100  -mpdebug  -mcc-init  -mno-side-effects
802          -mstack-align  -mdata-align  -mconst-align
803          -m32-bit  -m16-bit  -m8-bit  -mno-prologue-epilogue  -mno-gotplt
804          -melf  -maout  -melinux  -mlinux  -sim  -sim2
805          -mmul-bug-workaround  -mno-mul-bug-workaround
806
807     _CRX Options_
808          -mmac -mpush-args
809
810     _Darwin Options_
811          -all_load  -allowable_client  -arch  -arch_errors_fatal
812          -arch_only  -bind_at_load  -bundle  -bundle_loader
813          -client_name  -compatibility_version  -current_version
814          -dead_strip
815          -dependency-file  -dylib_file  -dylinker_install_name
816          -dynamic  -dynamiclib  -exported_symbols_list
817          -filelist  -flat_namespace  -force_cpusubtype_ALL
818          -force_flat_namespace  -headerpad_max_install_names
819          -iframework
820          -image_base  -init  -install_name  -keep_private_externs
821          -multi_module  -multiply_defined  -multiply_defined_unused
822          -noall_load   -no_dead_strip_inits_and_terms
823          -nofixprebinding -nomultidefs  -noprebind  -noseglinkedit
824          -pagezero_size  -prebind  -prebind_all_twolevel_modules
825          -private_bundle  -read_only_relocs  -sectalign
826          -sectobjectsymbols  -whyload  -seg1addr
827          -sectcreate  -sectobjectsymbols  -sectorder
828          -segaddr -segs_read_only_addr -segs_read_write_addr
829          -seg_addr_table  -seg_addr_table_filename  -seglinkedit
830          -segprot  -segs_read_only_addr  -segs_read_write_addr
831          -single_module  -static  -sub_library  -sub_umbrella
832          -twolevel_namespace  -umbrella  -undefined
833          -unexported_symbols_list  -weak_reference_mismatches
834          -whatsloaded -F -gused -gfull -mmacosx-version-min=VERSION
835          -mkernel -mone-byte-bool
836
837     _DEC Alpha Options_
838          -mno-fp-regs  -msoft-float  -malpha-as  -mgas
839          -mieee  -mieee-with-inexact  -mieee-conformant
840          -mfp-trap-mode=MODE  -mfp-rounding-mode=MODE
841          -mtrap-precision=MODE  -mbuild-constants
842          -mcpu=CPU-TYPE  -mtune=CPU-TYPE
843          -mbwx  -mmax  -mfix  -mcix
844          -mfloat-vax  -mfloat-ieee
845          -mexplicit-relocs  -msmall-data  -mlarge-data
846          -msmall-text  -mlarge-text
847          -mmemory-latency=TIME
848
849     _DEC Alpha/VMS Options_
850          -mvms-return-codes -mdebug-main=PREFIX -mmalloc64
851
852     _FR30 Options_
853          -msmall-model -mno-lsim
854
855     _FRV Options_
856          -mgpr-32  -mgpr-64  -mfpr-32  -mfpr-64
857          -mhard-float  -msoft-float
858          -malloc-cc  -mfixed-cc  -mdword  -mno-dword
859          -mdouble  -mno-double
860          -mmedia  -mno-media  -mmuladd  -mno-muladd
861          -mfdpic  -minline-plt -mgprel-ro  -multilib-library-pic
862          -mlinked-fp  -mlong-calls  -malign-labels
863          -mlibrary-pic  -macc-4  -macc-8
864          -mpack  -mno-pack  -mno-eflags  -mcond-move  -mno-cond-move
865          -moptimize-membar -mno-optimize-membar
866          -mscc  -mno-scc  -mcond-exec  -mno-cond-exec
867          -mvliw-branch  -mno-vliw-branch
868          -mmulti-cond-exec  -mno-multi-cond-exec  -mnested-cond-exec
869          -mno-nested-cond-exec  -mtomcat-stats
870          -mTLS -mtls
871          -mcpu=CPU
872
873     _GNU/Linux Options_
874          -mglibc -muclibc -mbionic -mandroid
875          -tno-android-cc -tno-android-ld
876
877     _H8/300 Options_
878          -mrelax  -mh  -ms  -mn  -mint32  -malign-300
879
880     _HPPA Options_
881          -march=ARCHITECTURE-TYPE
882          -mbig-switch  -mdisable-fpregs  -mdisable-indexing
883          -mfast-indirect-calls  -mgas  -mgnu-ld   -mhp-ld
884          -mfixed-range=REGISTER-RANGE
885          -mjump-in-delay -mlinker-opt -mlong-calls
886          -mlong-load-store  -mno-big-switch  -mno-disable-fpregs
887          -mno-disable-indexing  -mno-fast-indirect-calls  -mno-gas
888          -mno-jump-in-delay  -mno-long-load-store
889          -mno-portable-runtime  -mno-soft-float
890          -mno-space-regs  -msoft-float  -mpa-risc-1-0
891          -mpa-risc-1-1  -mpa-risc-2-0  -mportable-runtime
892          -mschedule=CPU-TYPE  -mspace-regs  -msio  -mwsio
893          -munix=UNIX-STD  -nolibdld  -static  -threads
894
895     _i386 and x86-64 Options_
896          -mtune=CPU-TYPE  -march=CPU-TYPE
897          -mfpmath=UNIT
898          -masm=DIALECT  -mno-fancy-math-387
899          -mno-fp-ret-in-387  -msoft-float
900          -mno-wide-multiply  -mrtd  -malign-double
901          -mpreferred-stack-boundary=NUM
902          -mincoming-stack-boundary=NUM
903          -mcld -mcx16 -msahf -mmovbe -mcrc32 -mrecip -mvzeroupper
904          -mmmx  -msse  -msse2 -msse3 -mssse3 -msse4.1 -msse4.2 -msse4 -mavx
905          -maes -mpclmul -mfsgsbase -mrdrnd -mf16c -mfused-madd
906          -msse4a -m3dnow -mpopcnt -mabm -mbmi -mtbm -mfma4 -mxop -mlwp
907          -mthreads  -mno-align-stringops  -minline-all-stringops
908          -minline-stringops-dynamically -mstringop-strategy=ALG
909          -mpush-args  -maccumulate-outgoing-args  -m128bit-long-double
910          -m96bit-long-double  -mregparm=NUM  -msseregparm
911          -mveclibabi=TYPE -mvect8-ret-in-mem
912          -mpc32 -mpc64 -mpc80 -mstackrealign
913          -momit-leaf-frame-pointer  -mno-red-zone -mno-tls-direct-seg-refs
914          -mcmodel=CODE-MODEL -mabi=NAME
915          -m32  -m64 -mlarge-data-threshold=NUM
916          -msse2avx -mfentry -m8bit-idiv
917
918     _i386 and x86-64 Windows Options_
919          -mconsole -mcygwin -mno-cygwin -mdll
920          -mnop-fun-dllimport -mthread
921          -municode -mwin32 -mwindows -fno-set-stack-executable
922
923     _IA-64 Options_
924          -mbig-endian  -mlittle-endian  -mgnu-as  -mgnu-ld  -mno-pic
925          -mvolatile-asm-stop  -mregister-names  -msdata -mno-sdata
926          -mconstant-gp  -mauto-pic  -mfused-madd
927          -minline-float-divide-min-latency
928          -minline-float-divide-max-throughput
929          -mno-inline-float-divide
930          -minline-int-divide-min-latency
931          -minline-int-divide-max-throughput
932          -mno-inline-int-divide
933          -minline-sqrt-min-latency -minline-sqrt-max-throughput
934          -mno-inline-sqrt
935          -mdwarf2-asm -mearly-stop-bits
936          -mfixed-range=REGISTER-RANGE -mtls-size=TLS-SIZE
937          -mtune=CPU-TYPE -milp32 -mlp64
938          -msched-br-data-spec -msched-ar-data-spec -msched-control-spec
939          -msched-br-in-data-spec -msched-ar-in-data-spec -msched-in-control-spec
940          -msched-spec-ldc -msched-spec-control-ldc
941          -msched-prefer-non-data-spec-insns -msched-prefer-non-control-spec-insns
942          -msched-stop-bits-after-every-cycle -msched-count-spec-in-critical-path
943          -msel-sched-dont-check-control-spec -msched-fp-mem-deps-zero-cost
944          -msched-max-memory-insns-hard-limit -msched-max-memory-insns=MAX-INSNS
945
946     _IA-64/VMS Options_
947          -mvms-return-codes -mdebug-main=PREFIX -mmalloc64
948
949     _LM32 Options_
950          -mbarrel-shift-enabled -mdivide-enabled -mmultiply-enabled
951          -msign-extend-enabled -muser-enabled
952
953     _M32R/D Options_
954          -m32r2 -m32rx -m32r
955          -mdebug
956          -malign-loops -mno-align-loops
957          -missue-rate=NUMBER
958          -mbranch-cost=NUMBER
959          -mmodel=CODE-SIZE-MODEL-TYPE
960          -msdata=SDATA-TYPE
961          -mno-flush-func -mflush-func=NAME
962          -mno-flush-trap -mflush-trap=NUMBER
963          -G NUM
964
965     _M32C Options_
966          -mcpu=CPU -msim -memregs=NUMBER
967
968     _M680x0 Options_
969          -march=ARCH  -mcpu=CPU  -mtune=TUNE
970          -m68000  -m68020  -m68020-40  -m68020-60  -m68030  -m68040
971          -m68060  -mcpu32  -m5200  -m5206e  -m528x  -m5307  -m5407
972          -mcfv4e  -mbitfield  -mno-bitfield  -mc68000  -mc68020
973          -mnobitfield  -mrtd  -mno-rtd  -mdiv  -mno-div  -mshort
974          -mno-short  -mhard-float  -m68881  -msoft-float  -mpcrel
975          -malign-int  -mstrict-align  -msep-data  -mno-sep-data
976          -mshared-library-id=n  -mid-shared-library  -mno-id-shared-library
977          -mxgot -mno-xgot
978
979     _M68hc1x Options_
980          -m6811  -m6812  -m68hc11  -m68hc12   -m68hcs12
981          -mauto-incdec  -minmax  -mlong-calls  -mshort
982          -msoft-reg-count=COUNT
983
984     _MCore Options_
985          -mhardlit  -mno-hardlit  -mdiv  -mno-div  -mrelax-immediates
986          -mno-relax-immediates  -mwide-bitfields  -mno-wide-bitfields
987          -m4byte-functions  -mno-4byte-functions  -mcallgraph-data
988          -mno-callgraph-data  -mslow-bytes  -mno-slow-bytes  -mno-lsim
989          -mlittle-endian  -mbig-endian  -m210  -m340  -mstack-increment
990
991     _MeP Options_
992          -mabsdiff -mall-opts -maverage -mbased=N -mbitops
993          -mc=N -mclip -mconfig=NAME -mcop -mcop32 -mcop64 -mivc2
994          -mdc -mdiv -meb -mel -mio-volatile -ml -mleadz -mm -mminmax
995          -mmult -mno-opts -mrepeat -ms -msatur -msdram -msim -msimnovec -mtf
996          -mtiny=N
997
998     _MicroBlaze Options_
999          -msoft-float -mhard-float -msmall-divides -mcpu=CPU
1000          -mmemcpy -mxl-soft-mul -mxl-soft-div -mxl-barrel-shift
1001          -mxl-pattern-compare -mxl-stack-check -mxl-gp-opt -mno-clearbss
1002          -mxl-multiply-high -mxl-float-convert -mxl-float-sqrt
1003          -mxl-mode-APP-MODEL
1004
1005     _MIPS Options_
1006          -EL  -EB  -march=ARCH  -mtune=ARCH
1007          -mips1  -mips2  -mips3  -mips4  -mips32  -mips32r2
1008          -mips64  -mips64r2
1009          -mips16  -mips16e  -mno-mips16  -mflip-mips16
1010          -minterlink-mips16  -mno-interlink-mips16
1011          -mabi=ABI  -mabicalls  -mno-abicalls
1012          -mshared  -mno-shared  -mplt  -mno-plt  -mxgot  -mno-xgot
1013          -mgp32  -mgp64  -mfp32  -mfp64  -mhard-float  -msoft-float
1014          -msingle-float  -mdouble-float  -mdsp  -mno-dsp  -mdspr2  -mno-dspr2
1015          -mfpu=FPU-TYPE
1016          -msmartmips  -mno-smartmips
1017          -mpaired-single  -mno-paired-single  -mdmx  -mno-mdmx
1018          -mips3d  -mno-mips3d  -mmt  -mno-mt  -mllsc  -mno-llsc
1019          -mlong64  -mlong32  -msym32  -mno-sym32
1020          -GNUM  -mlocal-sdata  -mno-local-sdata
1021          -mextern-sdata  -mno-extern-sdata  -mgpopt  -mno-gopt
1022          -membedded-data  -mno-embedded-data
1023          -muninit-const-in-rodata  -mno-uninit-const-in-rodata
1024          -mcode-readable=SETTING
1025          -msplit-addresses  -mno-split-addresses
1026          -mexplicit-relocs  -mno-explicit-relocs
1027          -mcheck-zero-division  -mno-check-zero-division
1028          -mdivide-traps  -mdivide-breaks
1029          -mmemcpy  -mno-memcpy  -mlong-calls  -mno-long-calls
1030          -mmad  -mno-mad  -mfused-madd  -mno-fused-madd  -nocpp
1031          -mfix-24k -mno-fix-24k
1032          -mfix-r4000  -mno-fix-r4000  -mfix-r4400  -mno-fix-r4400
1033          -mfix-r10000 -mno-fix-r10000  -mfix-vr4120  -mno-fix-vr4120
1034          -mfix-vr4130  -mno-fix-vr4130  -mfix-sb1  -mno-fix-sb1
1035          -mflush-func=FUNC  -mno-flush-func
1036          -mbranch-cost=NUM  -mbranch-likely  -mno-branch-likely
1037          -mfp-exceptions -mno-fp-exceptions
1038          -mvr4130-align -mno-vr4130-align -msynci -mno-synci
1039          -mrelax-pic-calls -mno-relax-pic-calls -mmcount-ra-address
1040
1041     _MMIX Options_
1042          -mlibfuncs  -mno-libfuncs  -mepsilon  -mno-epsilon  -mabi=gnu
1043          -mabi=mmixware  -mzero-extend  -mknuthdiv  -mtoplevel-symbols
1044          -melf  -mbranch-predict  -mno-branch-predict  -mbase-addresses
1045          -mno-base-addresses  -msingle-exit  -mno-single-exit
1046
1047     _MN10300 Options_
1048          -mmult-bug  -mno-mult-bug
1049          -mno-am33 -mam33 -mam33-2 -mam34
1050          -mtune=CPU-TYPE
1051          -mreturn-pointer-on-d0
1052          -mno-crt0  -mrelax -mliw
1053
1054     _PDP-11 Options_
1055          -mfpu  -msoft-float  -mac0  -mno-ac0  -m40  -m45  -m10
1056          -mbcopy  -mbcopy-builtin  -mint32  -mno-int16
1057          -mint16  -mno-int32  -mfloat32  -mno-float64
1058          -mfloat64  -mno-float32  -mabshi  -mno-abshi
1059          -mbranch-expensive  -mbranch-cheap
1060          -munix-asm  -mdec-asm
1061
1062     _picoChip Options_
1063          -mae=AE_TYPE -mvliw-lookahead=N
1064          -msymbol-as-address -mno-inefficient-warnings
1065
1066     _PowerPC Options_ See RS/6000 and PowerPC Options.
1067
1068     _RS/6000 and PowerPC Options_
1069          -mcpu=CPU-TYPE
1070          -mtune=CPU-TYPE
1071          -mcmodel=CODE-MODEL
1072          -mpower  -mno-power  -mpower2  -mno-power2
1073          -mpowerpc  -mpowerpc64  -mno-powerpc
1074          -maltivec  -mno-altivec
1075          -mpowerpc-gpopt  -mno-powerpc-gpopt
1076          -mpowerpc-gfxopt  -mno-powerpc-gfxopt
1077          -mmfcrf  -mno-mfcrf  -mpopcntb  -mno-popcntb -mpopcntd -mno-popcntd
1078          -mfprnd  -mno-fprnd
1079          -mcmpb -mno-cmpb -mmfpgpr -mno-mfpgpr -mhard-dfp -mno-hard-dfp
1080          -mnew-mnemonics  -mold-mnemonics
1081          -mfull-toc   -mminimal-toc  -mno-fp-in-toc  -mno-sum-in-toc
1082          -m64  -m32  -mxl-compat  -mno-xl-compat  -mpe
1083          -malign-power  -malign-natural
1084          -msoft-float  -mhard-float  -mmultiple  -mno-multiple
1085          -msingle-float -mdouble-float -msimple-fpu
1086          -mstring  -mno-string  -mupdate  -mno-update
1087          -mavoid-indexed-addresses  -mno-avoid-indexed-addresses
1088          -mfused-madd  -mno-fused-madd  -mbit-align  -mno-bit-align
1089          -mstrict-align  -mno-strict-align  -mrelocatable
1090          -mno-relocatable  -mrelocatable-lib  -mno-relocatable-lib
1091          -mtoc  -mno-toc  -mlittle  -mlittle-endian  -mbig  -mbig-endian
1092          -mdynamic-no-pic  -maltivec -mswdiv  -msingle-pic-base
1093          -mprioritize-restricted-insns=PRIORITY
1094          -msched-costly-dep=DEPENDENCE_TYPE
1095          -minsert-sched-nops=SCHEME
1096          -mcall-sysv  -mcall-netbsd
1097          -maix-struct-return  -msvr4-struct-return
1098          -mabi=ABI-TYPE -msecure-plt -mbss-plt
1099          -mblock-move-inline-limit=NUM
1100          -misel -mno-isel
1101          -misel=yes  -misel=no
1102          -mspe -mno-spe
1103          -mspe=yes  -mspe=no
1104          -mpaired
1105          -mgen-cell-microcode -mwarn-cell-microcode
1106          -mvrsave -mno-vrsave
1107          -mmulhw -mno-mulhw
1108          -mdlmzb -mno-dlmzb
1109          -mfloat-gprs=yes  -mfloat-gprs=no -mfloat-gprs=single -mfloat-gprs=double
1110          -mprototype  -mno-prototype
1111          -msim  -mmvme  -mads  -myellowknife  -memb  -msdata
1112          -msdata=OPT  -mvxworks  -G NUM  -pthread
1113          -mrecip -mrecip=OPT -mno-recip -mrecip-precision
1114          -mno-recip-precision
1115          -mveclibabi=TYPE -mfriz -mno-friz
1116
1117     _RX Options_
1118          -m64bit-doubles  -m32bit-doubles  -fpu  -nofpu
1119          -mcpu=
1120          -mbig-endian-data -mlittle-endian-data
1121          -msmall-data
1122          -msim  -mno-sim
1123          -mas100-syntax -mno-as100-syntax
1124          -mrelax
1125          -mmax-constant-size=
1126          -mint-register=
1127          -msave-acc-in-interrupts
1128
1129     _S/390 and zSeries Options_
1130          -mtune=CPU-TYPE  -march=CPU-TYPE
1131          -mhard-float  -msoft-float  -mhard-dfp -mno-hard-dfp
1132          -mlong-double-64 -mlong-double-128
1133          -mbackchain  -mno-backchain -mpacked-stack  -mno-packed-stack
1134          -msmall-exec  -mno-small-exec  -mmvcle -mno-mvcle
1135          -m64  -m31  -mdebug  -mno-debug  -mesa  -mzarch
1136          -mtpf-trace -mno-tpf-trace  -mfused-madd  -mno-fused-madd
1137          -mwarn-framesize  -mwarn-dynamicstack  -mstack-size -mstack-guard
1138
1139     _Score Options_
1140          -meb -mel
1141          -mnhwloop
1142          -muls
1143          -mmac
1144          -mscore5 -mscore5u -mscore7 -mscore7d
1145
1146     _SH Options_
1147          -m1  -m2  -m2e
1148          -m2a-nofpu -m2a-single-only -m2a-single -m2a
1149          -m3  -m3e
1150          -m4-nofpu  -m4-single-only  -m4-single  -m4
1151          -m4a-nofpu -m4a-single-only -m4a-single -m4a -m4al
1152          -m5-64media  -m5-64media-nofpu
1153          -m5-32media  -m5-32media-nofpu
1154          -m5-compact  -m5-compact-nofpu
1155          -mb  -ml  -mdalign  -mrelax
1156          -mbigtable -mfmovd -mhitachi -mrenesas -mno-renesas -mnomacsave
1157          -mieee  -mbitops  -misize  -minline-ic_invalidate -mpadstruct  -mspace
1158          -mprefergot  -musermode -multcost=NUMBER -mdiv=STRATEGY
1159          -mdivsi3_libfunc=NAME -mfixed-range=REGISTER-RANGE
1160          -madjust-unroll -mindexed-addressing -mgettrcost=NUMBER -mpt-fixed
1161          -maccumulate-outgoing-args -minvalid-symbols
1162
1163     _Solaris 2 Options_
1164          -mimpure-text  -mno-impure-text
1165          -threads -pthreads -pthread
1166
1167     _SPARC Options_
1168          -mcpu=CPU-TYPE
1169          -mtune=CPU-TYPE
1170          -mcmodel=CODE-MODEL
1171          -m32  -m64  -mapp-regs  -mno-app-regs
1172          -mfaster-structs  -mno-faster-structs
1173          -mfpu  -mno-fpu  -mhard-float  -msoft-float
1174          -mhard-quad-float  -msoft-quad-float
1175          -mlittle-endian
1176          -mstack-bias  -mno-stack-bias
1177          -munaligned-doubles  -mno-unaligned-doubles
1178          -mv8plus  -mno-v8plus  -mvis  -mno-vis
1179
1180     _SPU Options_
1181          -mwarn-reloc -merror-reloc
1182          -msafe-dma -munsafe-dma
1183          -mbranch-hints
1184          -msmall-mem -mlarge-mem -mstdmain
1185          -mfixed-range=REGISTER-RANGE
1186          -mea32 -mea64
1187          -maddress-space-conversion -mno-address-space-conversion
1188          -mcache-size=CACHE-SIZE
1189          -matomic-updates -mno-atomic-updates
1190
1191     _System V Options_
1192          -Qy  -Qn  -YP,PATHS  -Ym,DIR
1193
1194     _V850 Options_
1195          -mlong-calls  -mno-long-calls  -mep  -mno-ep
1196          -mprolog-function  -mno-prolog-function  -mspace
1197          -mtda=N  -msda=N  -mzda=N
1198          -mapp-regs  -mno-app-regs
1199          -mdisable-callt  -mno-disable-callt
1200          -mv850e2v3
1201          -mv850e2
1202          -mv850e1 -mv850es
1203          -mv850e
1204          -mv850  -mbig-switch
1205
1206     _VAX Options_
1207          -mg  -mgnu  -munix
1208
1209     _VxWorks Options_
1210          -mrtp  -non-static  -Bstatic  -Bdynamic
1211          -Xbind-lazy  -Xbind-now
1212
1213     _x86-64 Options_ See i386 and x86-64 Options.
1214
1215     _Xstormy16 Options_
1216          -msim
1217
1218     _Xtensa Options_
1219          -mconst16 -mno-const16
1220          -mfused-madd  -mno-fused-madd
1221          -mforce-no-pic
1222          -mserialize-volatile  -mno-serialize-volatile
1223          -mtext-section-literals  -mno-text-section-literals
1224          -mtarget-align  -mno-target-align
1225          -mlongcalls  -mno-longcalls
1226
1227     _zSeries Options_ See S/390 and zSeries Options.
1228
1229_Code Generation Options_
1230     *Note Options for Code Generation Conventions: Code Gen Options.
1231          -fcall-saved-REG  -fcall-used-REG
1232          -ffixed-REG  -fexceptions
1233          -fnon-call-exceptions  -funwind-tables
1234          -fasynchronous-unwind-tables
1235          -finhibit-size-directive  -finstrument-functions
1236          -finstrument-functions-exclude-function-list=SYM,SYM,...
1237          -finstrument-functions-exclude-file-list=FILE,FILE,...
1238          -finstrument-function-calls
1239          -fno-common  -fno-ident
1240          -fpcc-struct-return  -fpic  -fPIC -fpie -fPIE
1241          -fno-jump-tables
1242          -frecord-gcc-switches
1243          -freg-struct-return  -fshort-enums
1244          -fshort-double  -fshort-wchar
1245          -fverbose-asm  -fpack-struct[=N]  -fstack-check
1246          -fstack-limit-register=REG  -fstack-limit-symbol=SYM
1247          -fno-stack-limit -fsplit-stack
1248          -fleading-underscore  -ftls-model=MODEL
1249          -ftrapv  -fwrapv  -fbounds-check
1250          -fvisibility -fstrict-volatile-bitfields
1251
1252
1253* Menu:
1254
1255* Overall Options::     Controlling the kind of output:
1256                        an executable, object files, assembler files,
1257                        or preprocessed source.
1258* C Dialect Options::   Controlling the variant of C language compiled.
1259* C++ Dialect Options:: Variations on C++.
1260* Objective-C and Objective-C++ Dialect Options:: Variations on Objective-C
1261                        and Objective-C++.
1262* Language Independent Options:: Controlling how diagnostics should be
1263                        formatted.
1264* Warning Options::     How picky should the compiler be?
1265* Debugging Options::   Symbol tables, measurements, and debugging dumps.
1266* Optimize Options::    How much optimization?
1267* Preprocessor Options:: Controlling header files and macro definitions.
1268                         Also, getting dependency information for Make.
1269* Assembler Options::   Passing options to the assembler.
1270* Link Options::        Specifying libraries and so on.
1271* Directory Options::   Where to find header files and libraries.
1272                        Where to find the compiler executable files.
1273* Spec Files::          How to pass switches to sub-processes.
1274* Target Options::      Running a cross-compiler, or an old version of GCC.
1275
1276
1277File: gcc.info,  Node: Overall Options,  Next: Invoking G++,  Prev: Option Summary,  Up: Invoking GCC
1278
12793.2 Options Controlling the Kind of Output
1280==========================================
1281
1282Compilation can involve up to four stages: preprocessing, compilation
1283proper, assembly and linking, always in that order.  GCC is capable of
1284preprocessing and compiling several files either into several assembler
1285input files, or into one assembler input file; then each assembler
1286input file produces an object file, and linking combines all the object
1287files (those newly compiled, and those specified as input) into an
1288executable file.
1289
1290 For any given input file, the file name suffix determines what kind of
1291compilation is done:
1292
1293`FILE.c'
1294     C source code which must be preprocessed.
1295
1296`FILE.i'
1297     C source code which should not be preprocessed.
1298
1299`FILE.ii'
1300     C++ source code which should not be preprocessed.
1301
1302`FILE.m'
1303     Objective-C source code.  Note that you must link with the
1304     `libobjc' library to make an Objective-C program work.
1305
1306`FILE.mi'
1307     Objective-C source code which should not be preprocessed.
1308
1309`FILE.mm'
1310`FILE.M'
1311     Objective-C++ source code.  Note that you must link with the
1312     `libobjc' library to make an Objective-C++ program work.  Note
1313     that `.M' refers to a literal capital M.
1314
1315`FILE.mii'
1316     Objective-C++ source code which should not be preprocessed.
1317
1318`FILE.h'
1319     C, C++, Objective-C or Objective-C++ header file to be turned into
1320     a precompiled header (default), or C, C++ header file to be turned
1321     into an Ada spec (via the `-fdump-ada-spec' switch).
1322
1323`FILE.cc'
1324`FILE.cp'
1325`FILE.cxx'
1326`FILE.cpp'
1327`FILE.CPP'
1328`FILE.c++'
1329`FILE.C'
1330     C++ source code which must be preprocessed.  Note that in `.cxx',
1331     the last two letters must both be literally `x'.  Likewise, `.C'
1332     refers to a literal capital C.
1333
1334`FILE.mm'
1335`FILE.M'
1336     Objective-C++ source code which must be preprocessed.
1337
1338`FILE.mii'
1339     Objective-C++ source code which should not be preprocessed.
1340
1341`FILE.hh'
1342`FILE.H'
1343`FILE.hp'
1344`FILE.hxx'
1345`FILE.hpp'
1346`FILE.HPP'
1347`FILE.h++'
1348`FILE.tcc'
1349     C++ header file to be turned into a precompiled header or Ada spec.
1350
1351`FILE.f'
1352`FILE.for'
1353`FILE.ftn'
1354     Fixed form Fortran source code which should not be preprocessed.
1355
1356`FILE.F'
1357`FILE.FOR'
1358`FILE.fpp'
1359`FILE.FPP'
1360`FILE.FTN'
1361     Fixed form Fortran source code which must be preprocessed (with
1362     the traditional preprocessor).
1363
1364`FILE.f90'
1365`FILE.f95'
1366`FILE.f03'
1367`FILE.f08'
1368     Free form Fortran source code which should not be preprocessed.
1369
1370`FILE.F90'
1371`FILE.F95'
1372`FILE.F03'
1373`FILE.F08'
1374     Free form Fortran source code which must be preprocessed (with the
1375     traditional preprocessor).
1376
1377`FILE.go'
1378     Go source code.
1379
1380`FILE.ads'
1381     Ada source code file which contains a library unit declaration (a
1382     declaration of a package, subprogram, or generic, or a generic
1383     instantiation), or a library unit renaming declaration (a package,
1384     generic, or subprogram renaming declaration).  Such files are also
1385     called "specs".
1386
1387`FILE.adb'
1388     Ada source code file containing a library unit body (a subprogram
1389     or package body).  Such files are also called "bodies".
1390
1391`FILE.s'
1392     Assembler code.
1393
1394`FILE.S'
1395`FILE.sx'
1396     Assembler code which must be preprocessed.
1397
1398`OTHER'
1399     An object file to be fed straight into linking.  Any file name
1400     with no recognized suffix is treated this way.
1401
1402 You can specify the input language explicitly with the `-x' option:
1403
1404`-x LANGUAGE'
1405     Specify explicitly the LANGUAGE for the following input files
1406     (rather than letting the compiler choose a default based on the
1407     file name suffix).  This option applies to all following input
1408     files until the next `-x' option.  Possible values for LANGUAGE
1409     are:
1410          c  c-header  cpp-output
1411          c++  c++-header  c++-cpp-output
1412          objective-c  objective-c-header  objective-c-cpp-output
1413          objective-c++ objective-c++-header objective-c++-cpp-output
1414          assembler  assembler-with-cpp
1415          ada
1416          f77  f77-cpp-input f95  f95-cpp-input
1417          go
1418          java
1419
1420`-x none'
1421     Turn off any specification of a language, so that subsequent files
1422     are handled according to their file name suffixes (as they are if
1423     `-x' has not been used at all).
1424
1425`-pass-exit-codes'
1426     Normally the `gcc' program will exit with the code of 1 if any
1427     phase of the compiler returns a non-success return code.  If you
1428     specify `-pass-exit-codes', the `gcc' program will instead return
1429     with numerically highest error produced by any phase that returned
1430     an error indication.  The C, C++, and Fortran frontends return 4,
1431     if an internal compiler error is encountered.
1432
1433 If you only want some of the stages of compilation, you can use `-x'
1434(or filename suffixes) to tell `gcc' where to start, and one of the
1435options `-c', `-S', or `-E' to say where `gcc' is to stop.  Note that
1436some combinations (for example, `-x cpp-output -E') instruct `gcc' to
1437do nothing at all.
1438
1439`-c'
1440     Compile or assemble the source files, but do not link.  The linking
1441     stage simply is not done.  The ultimate output is in the form of an
1442     object file for each source file.
1443
1444     By default, the object file name for a source file is made by
1445     replacing the suffix `.c', `.i', `.s', etc., with `.o'.
1446
1447     Unrecognized input files, not requiring compilation or assembly,
1448     are ignored.
1449
1450`-S'
1451     Stop after the stage of compilation proper; do not assemble.  The
1452     output is in the form of an assembler code file for each
1453     non-assembler input file specified.
1454
1455     By default, the assembler file name for a source file is made by
1456     replacing the suffix `.c', `.i', etc., with `.s'.
1457
1458     Input files that don't require compilation are ignored.
1459
1460`-E'
1461     Stop after the preprocessing stage; do not run the compiler
1462     proper.  The output is in the form of preprocessed source code,
1463     which is sent to the standard output.
1464
1465     Input files which don't require preprocessing are ignored.
1466
1467`-o FILE'
1468     Place output in file FILE.  This applies regardless to whatever
1469     sort of output is being produced, whether it be an executable file,
1470     an object file, an assembler file or preprocessed C code.
1471
1472     If `-o' is not specified, the default is to put an executable file
1473     in `a.out', the object file for `SOURCE.SUFFIX' in `SOURCE.o', its
1474     assembler file in `SOURCE.s', a precompiled header file in
1475     `SOURCE.SUFFIX.gch', and all preprocessed C source on standard
1476     output.
1477
1478`-v'
1479     Print (on standard error output) the commands executed to run the
1480     stages of compilation.  Also print the version number of the
1481     compiler driver program and of the preprocessor and the compiler
1482     proper.
1483
1484`-###'
1485     Like `-v' except the commands are not executed and arguments are
1486     quoted unless they contain only alphanumeric characters or `./-_'.
1487     This is useful for shell scripts to capture the driver-generated
1488     command lines.
1489
1490`-pipe'
1491     Use pipes rather than temporary files for communication between the
1492     various stages of compilation.  This fails to work on some systems
1493     where the assembler is unable to read from a pipe; but the GNU
1494     assembler has no trouble.
1495
1496`--help'
1497     Print (on the standard output) a description of the command line
1498     options understood by `gcc'.  If the `-v' option is also specified
1499     then `--help' will also be passed on to the various processes
1500     invoked by `gcc', so that they can display the command line options
1501     they accept.  If the `-Wextra' option has also been specified
1502     (prior to the `--help' option), then command line options which
1503     have no documentation associated with them will also be displayed.
1504
1505`--target-help'
1506     Print (on the standard output) a description of target-specific
1507     command line options for each tool.  For some targets extra
1508     target-specific information may also be printed.
1509
1510`--help={CLASS|[^]QUALIFIER}[,...]'
1511     Print (on the standard output) a description of the command line
1512     options understood by the compiler that fit into all specified
1513     classes and qualifiers.  These are the supported classes:
1514
1515    `optimizers'
1516          This will display all of the optimization options supported
1517          by the compiler.
1518
1519    `warnings'
1520          This will display all of the options controlling warning
1521          messages produced by the compiler.
1522
1523    `target'
1524          This will display target-specific options.  Unlike the
1525          `--target-help' option however, target-specific options of the
1526          linker and assembler will not be displayed.  This is because
1527          those tools do not currently support the extended `--help='
1528          syntax.
1529
1530    `params'
1531          This will display the values recognized by the `--param'
1532          option.
1533
1534    LANGUAGE
1535          This will display the options supported for LANGUAGE, where
1536          LANGUAGE is the name of one of the languages supported in this
1537          version of GCC.
1538
1539    `common'
1540          This will display the options that are common to all
1541          languages.
1542
1543     These are the supported qualifiers:
1544
1545    `undocumented'
1546          Display only those options which are undocumented.
1547
1548    `joined'
1549          Display options which take an argument that appears after an
1550          equal sign in the same continuous piece of text, such as:
1551          `--help=target'.
1552
1553    `separate'
1554          Display options which take an argument that appears as a
1555          separate word following the original option, such as: `-o
1556          output-file'.
1557
1558     Thus for example to display all the undocumented target-specific
1559     switches supported by the compiler the following can be used:
1560
1561          --help=target,undocumented
1562
1563     The sense of a qualifier can be inverted by prefixing it with the
1564     `^' character, so for example to display all binary warning
1565     options (i.e., ones that are either on or off and that do not take
1566     an argument), which have a description the following can be used:
1567
1568          --help=warnings,^joined,^undocumented
1569
1570     The argument to `--help=' should not consist solely of inverted
1571     qualifiers.
1572
1573     Combining several classes is possible, although this usually
1574     restricts the output by so much that there is nothing to display.
1575     One case where it does work however is when one of the classes is
1576     TARGET.  So for example to display all the target-specific
1577     optimization options the following can be used:
1578
1579          --help=target,optimizers
1580
1581     The `--help=' option can be repeated on the command line.  Each
1582     successive use will display its requested class of options,
1583     skipping those that have already been displayed.
1584
1585     If the `-Q' option appears on the command line before the
1586     `--help=' option, then the descriptive text displayed by `--help='
1587     is changed.  Instead of describing the displayed options, an
1588     indication is given as to whether the option is enabled, disabled
1589     or set to a specific value (assuming that the compiler knows this
1590     at the point where the `--help=' option is used).
1591
1592     Here is a truncated example from the ARM port of `gcc':
1593
1594            % gcc -Q -mabi=2 --help=target -c
1595            The following options are target specific:
1596            -mabi=                                2
1597            -mabort-on-noreturn                   [disabled]
1598            -mapcs                                [disabled]
1599
1600     The output is sensitive to the effects of previous command line
1601     options, so for example it is possible to find out which
1602     optimizations are enabled at `-O2' by using:
1603
1604          -Q -O2 --help=optimizers
1605
1606     Alternatively you can discover which binary optimizations are
1607     enabled by `-O3' by using:
1608
1609          gcc -c -Q -O3 --help=optimizers > /tmp/O3-opts
1610          gcc -c -Q -O2 --help=optimizers > /tmp/O2-opts
1611          diff /tmp/O2-opts /tmp/O3-opts | grep enabled
1612
1613`-no-canonical-prefixes'
1614     Do not expand any symbolic links, resolve references to `/../' or
1615     `/./', or make the path absolute when generating a relative prefix.
1616
1617`--version'
1618     Display the version number and copyrights of the invoked GCC.
1619
1620`-wrapper'
1621     Invoke all subcommands under a wrapper program.  The name of the
1622     wrapper program and its parameters are passed as a comma separated
1623     list.
1624
1625          gcc -c t.c -wrapper gdb,--args
1626
1627     This will invoke all subprograms of `gcc' under `gdb --args', thus
1628     the invocation of `cc1' will be `gdb --args cc1 ...'.
1629
1630`-fplugin=NAME.so'
1631     Load the plugin code in file NAME.so, assumed to be a shared
1632     object to be dlopen'd by the compiler.  The base name of the
1633     shared object file is used to identify the plugin for the purposes
1634     of argument parsing (See `-fplugin-arg-NAME-KEY=VALUE' below).
1635     Each plugin should define the callback functions specified in the
1636     Plugins API.
1637
1638`-fplugin-arg-NAME-KEY=VALUE'
1639     Define an argument called KEY with a value of VALUE for the plugin
1640     called NAME.
1641
1642`-fdump-ada-spec[-slim]'
1643     For C and C++ source and include files, generate corresponding Ada
1644     specs. *Note Generating Ada Bindings for C and C++ headers:
1645     (gnat_ugn)Generating Ada Bindings for C and C++ headers, which
1646     provides detailed documentation on this feature.
1647
1648`-fdump-go-spec=FILE'
1649     For input files in any language, generate corresponding Go
1650     declarations in FILE.  This generates Go `const', `type', `var',
1651     and `func' declarations which may be a useful way to start writing
1652     a Go interface to code written in some other language.
1653
1654`@FILE'
1655     Read command-line options from FILE.  The options read are
1656     inserted in place of the original @FILE option.  If FILE does not
1657     exist, or cannot be read, then the option will be treated
1658     literally, and not removed.
1659
1660     Options in FILE are separated by whitespace.  A whitespace
1661     character may be included in an option by surrounding the entire
1662     option in either single or double quotes.  Any character
1663     (including a backslash) may be included by prefixing the character
1664     to be included with a backslash.  The FILE may itself contain
1665     additional @FILE options; any such options will be processed
1666     recursively.
1667
1668
1669File: gcc.info,  Node: Invoking G++,  Next: C Dialect Options,  Prev: Overall Options,  Up: Invoking GCC
1670
16713.3 Compiling C++ Programs
1672==========================
1673
1674C++ source files conventionally use one of the suffixes `.C', `.cc',
1675`.cpp', `.CPP', `.c++', `.cp', or `.cxx'; C++ header files often use
1676`.hh', `.hpp', `.H', or (for shared template code) `.tcc'; and
1677preprocessed C++ files use the suffix `.ii'.  GCC recognizes files with
1678these names and compiles them as C++ programs even if you call the
1679compiler the same way as for compiling C programs (usually with the
1680name `gcc').
1681
1682 However, the use of `gcc' does not add the C++ library.  `g++' is a
1683program that calls GCC and treats `.c', `.h' and `.i' files as C++
1684source files instead of C source files unless `-x' is used, and
1685automatically specifies linking against the C++ library.  This program
1686is also useful when precompiling a C header file with a `.h' extension
1687for use in C++ compilations.  On many systems, `g++' is also installed
1688with the name `c++'.
1689
1690 When you compile C++ programs, you may specify many of the same
1691command-line options that you use for compiling programs in any
1692language; or command-line options meaningful for C and related
1693languages; or options that are meaningful only for C++ programs.  *Note
1694Options Controlling C Dialect: C Dialect Options, for explanations of
1695options for languages related to C.  *Note Options Controlling C++
1696Dialect: C++ Dialect Options, for explanations of options that are
1697meaningful only for C++ programs.
1698
1699
1700File: gcc.info,  Node: C Dialect Options,  Next: C++ Dialect Options,  Prev: Invoking G++,  Up: Invoking GCC
1701
17023.4 Options Controlling C Dialect
1703=================================
1704
1705The following options control the dialect of C (or languages derived
1706from C, such as C++, Objective-C and Objective-C++) that the compiler
1707accepts:
1708
1709`-ansi'
1710     In C mode, this is equivalent to `-std=c90'. In C++ mode, it is
1711     equivalent to `-std=c++98'.
1712
1713     This turns off certain features of GCC that are incompatible with
1714     ISO C90 (when compiling C code), or of standard C++ (when
1715     compiling C++ code), such as the `asm' and `typeof' keywords, and
1716     predefined macros such as `unix' and `vax' that identify the type
1717     of system you are using.  It also enables the undesirable and
1718     rarely used ISO trigraph feature.  For the C compiler, it disables
1719     recognition of C++ style `//' comments as well as the `inline'
1720     keyword.
1721
1722     The alternate keywords `__asm__', `__extension__', `__inline__'
1723     and `__typeof__' continue to work despite `-ansi'.  You would not
1724     want to use them in an ISO C program, of course, but it is useful
1725     to put them in header files that might be included in compilations
1726     done with `-ansi'.  Alternate predefined macros such as `__unix__'
1727     and `__vax__' are also available, with or without `-ansi'.
1728
1729     The `-ansi' option does not cause non-ISO programs to be rejected
1730     gratuitously.  For that, `-pedantic' is required in addition to
1731     `-ansi'.  *Note Warning Options::.
1732
1733     The macro `__STRICT_ANSI__' is predefined when the `-ansi' option
1734     is used.  Some header files may notice this macro and refrain from
1735     declaring certain functions or defining certain macros that the
1736     ISO standard doesn't call for; this is to avoid interfering with
1737     any programs that might use these names for other things.
1738
1739     Functions that would normally be built in but do not have semantics
1740     defined by ISO C (such as `alloca' and `ffs') are not built-in
1741     functions when `-ansi' is used.  *Note Other built-in functions
1742     provided by GCC: Other Builtins, for details of the functions
1743     affected.
1744
1745`-std='
1746     Determine the language standard. *Note Language Standards
1747     Supported by GCC: Standards, for details of these standard
1748     versions.  This option is currently only supported when compiling
1749     C or C++.
1750
1751     The compiler can accept several base standards, such as `c90' or
1752     `c++98', and GNU dialects of those standards, such as `gnu90' or
1753     `gnu++98'.  By specifying a base standard, the compiler will
1754     accept all programs following that standard and those using GNU
1755     extensions that do not contradict it.  For example, `-std=c90'
1756     turns off certain features of GCC that are incompatible with ISO
1757     C90, such as the `asm' and `typeof' keywords, but not other GNU
1758     extensions that do not have a meaning in ISO C90, such as omitting
1759     the middle term of a `?:' expression. On the other hand, by
1760     specifying a GNU dialect of a standard, all features the compiler
1761     support are enabled, even when those features change the meaning
1762     of the base standard and some strict-conforming programs may be
1763     rejected.  The particular standard is used by `-pedantic' to
1764     identify which features are GNU extensions given that version of
1765     the standard. For example `-std=gnu90 -pedantic' would warn about
1766     C++ style `//' comments, while `-std=gnu99 -pedantic' would not.
1767
1768     A value for this option must be provided; possible values are
1769
1770    `c90'
1771    `c89'
1772    `iso9899:1990'
1773          Support all ISO C90 programs (certain GNU extensions that
1774          conflict with ISO C90 are disabled). Same as `-ansi' for C
1775          code.
1776
1777    `iso9899:199409'
1778          ISO C90 as modified in amendment 1.
1779
1780    `c99'
1781    `c9x'
1782    `iso9899:1999'
1783    `iso9899:199x'
1784          ISO C99.  Note that this standard is not yet fully supported;
1785          see `http://gcc.gnu.org/gcc-4.6/c99status.html' for more
1786          information.  The names `c9x' and `iso9899:199x' are
1787          deprecated.
1788
1789    `c1x'
1790          ISO C1X, the draft of the next revision of the ISO C standard.
1791          Support is limited and experimental and features enabled by
1792          this option may be changed or removed if changed in or
1793          removed from the standard draft.
1794
1795    `gnu90'
1796    `gnu89'
1797          GNU dialect of ISO C90 (including some C99 features). This is
1798          the default for C code.
1799
1800    `gnu99'
1801    `gnu9x'
1802          GNU dialect of ISO C99.  When ISO C99 is fully implemented in
1803          GCC, this will become the default.  The name `gnu9x' is
1804          deprecated.
1805
1806    `gnu1x'
1807          GNU dialect of ISO C1X.  Support is limited and experimental
1808          and features enabled by this option may be changed or removed
1809          if changed in or removed from the standard draft.
1810
1811    `c++98'
1812          The 1998 ISO C++ standard plus amendments. Same as `-ansi' for
1813          C++ code.
1814
1815    `gnu++98'
1816          GNU dialect of `-std=c++98'.  This is the default for C++
1817          code.
1818
1819    `c++0x'
1820          The working draft of the upcoming ISO C++0x standard. This
1821          option enables experimental features that are likely to be
1822          included in C++0x. The working draft is constantly changing,
1823          and any feature that is enabled by this flag may be removed
1824          from future versions of GCC if it is not part of the C++0x
1825          standard.
1826
1827    `gnu++0x'
1828          GNU dialect of `-std=c++0x'. This option enables experimental
1829          features that may be removed in future versions of GCC.
1830
1831`-fgnu89-inline'
1832     The option `-fgnu89-inline' tells GCC to use the traditional GNU
1833     semantics for `inline' functions when in C99 mode.  *Note An
1834     Inline Function is As Fast As a Macro: Inline.  This option is
1835     accepted and ignored by GCC versions 4.1.3 up to but not including
1836     4.3.  In GCC versions 4.3 and later it changes the behavior of GCC
1837     in C99 mode.  Using this option is roughly equivalent to adding the
1838     `gnu_inline' function attribute to all inline functions (*note
1839     Function Attributes::).
1840
1841     The option `-fno-gnu89-inline' explicitly tells GCC to use the C99
1842     semantics for `inline' when in C99 or gnu99 mode (i.e., it
1843     specifies the default behavior).  This option was first supported
1844     in GCC 4.3.  This option is not supported in `-std=c90' or
1845     `-std=gnu90' mode.
1846
1847     The preprocessor macros `__GNUC_GNU_INLINE__' and
1848     `__GNUC_STDC_INLINE__' may be used to check which semantics are in
1849     effect for `inline' functions.  *Note Common Predefined Macros:
1850     (cpp)Common Predefined Macros.
1851
1852`-aux-info FILENAME'
1853     Output to the given filename prototyped declarations for all
1854     functions declared and/or defined in a translation unit, including
1855     those in header files.  This option is silently ignored in any
1856     language other than C.
1857
1858     Besides declarations, the file indicates, in comments, the origin
1859     of each declaration (source file and line), whether the
1860     declaration was implicit, prototyped or unprototyped (`I', `N' for
1861     new or `O' for old, respectively, in the first character after the
1862     line number and the colon), and whether it came from a declaration
1863     or a definition (`C' or `F', respectively, in the following
1864     character).  In the case of function definitions, a K&R-style list
1865     of arguments followed by their declarations is also provided,
1866     inside comments, after the declaration.
1867
1868`-fno-asm'
1869     Do not recognize `asm', `inline' or `typeof' as a keyword, so that
1870     code can use these words as identifiers.  You can use the keywords
1871     `__asm__', `__inline__' and `__typeof__' instead.  `-ansi' implies
1872     `-fno-asm'.
1873
1874     In C++, this switch only affects the `typeof' keyword, since `asm'
1875     and `inline' are standard keywords.  You may want to use the
1876     `-fno-gnu-keywords' flag instead, which has the same effect.  In
1877     C99 mode (`-std=c99' or `-std=gnu99'), this switch only affects
1878     the `asm' and `typeof' keywords, since `inline' is a standard
1879     keyword in ISO C99.
1880
1881`-fno-builtin'
1882`-fno-builtin-FUNCTION'
1883     Don't recognize built-in functions that do not begin with
1884     `__builtin_' as prefix.  *Note Other built-in functions provided
1885     by GCC: Other Builtins, for details of the functions affected,
1886     including those which are not built-in functions when `-ansi' or
1887     `-std' options for strict ISO C conformance are used because they
1888     do not have an ISO standard meaning.
1889
1890     GCC normally generates special code to handle certain built-in
1891     functions more efficiently; for instance, calls to `alloca' may
1892     become single instructions that adjust the stack directly, and
1893     calls to `memcpy' may become inline copy loops.  The resulting
1894     code is often both smaller and faster, but since the function
1895     calls no longer appear as such, you cannot set a breakpoint on
1896     those calls, nor can you change the behavior of the functions by
1897     linking with a different library.  In addition, when a function is
1898     recognized as a built-in function, GCC may use information about
1899     that function to warn about problems with calls to that function,
1900     or to generate more efficient code, even if the resulting code
1901     still contains calls to that function.  For example, warnings are
1902     given with `-Wformat' for bad calls to `printf', when `printf' is
1903     built in, and `strlen' is known not to modify global memory.
1904
1905     With the `-fno-builtin-FUNCTION' option only the built-in function
1906     FUNCTION is disabled.  FUNCTION must not begin with `__builtin_'.
1907     If a function is named that is not built-in in this version of
1908     GCC, this option is ignored.  There is no corresponding
1909     `-fbuiltin-FUNCTION' option; if you wish to enable built-in
1910     functions selectively when using `-fno-builtin' or
1911     `-ffreestanding', you may define macros such as:
1912
1913          #define abs(n)          __builtin_abs ((n))
1914          #define strcpy(d, s)    __builtin_strcpy ((d), (s))
1915
1916`-fhosted'
1917     Assert that compilation takes place in a hosted environment.  This
1918     implies `-fbuiltin'.  A hosted environment is one in which the
1919     entire standard library is available, and in which `main' has a
1920     return type of `int'.  Examples are nearly everything except a
1921     kernel.  This is equivalent to `-fno-freestanding'.
1922
1923`-ffreestanding'
1924     Assert that compilation takes place in a freestanding environment.
1925     This implies `-fno-builtin'.  A freestanding environment is one in
1926     which the standard library may not exist, and program startup may
1927     not necessarily be at `main'.  The most obvious example is an OS
1928     kernel.  This is equivalent to `-fno-hosted'.
1929
1930     *Note Language Standards Supported by GCC: Standards, for details
1931     of freestanding and hosted environments.
1932
1933`-fopenmp'
1934     Enable handling of OpenMP directives `#pragma omp' in C/C++ and
1935     `!$omp' in Fortran.  When `-fopenmp' is specified, the compiler
1936     generates parallel code according to the OpenMP Application
1937     Program Interface v3.0 `http://www.openmp.org/'.  This option
1938     implies `-pthread', and thus is only supported on targets that
1939     have support for `-pthread'.
1940
1941`-fms-extensions'
1942     Accept some non-standard constructs used in Microsoft header files.
1943
1944     In C++ code, this allows member names in structures to be similar
1945     to previous types declarations.
1946
1947          typedef int UOW;
1948          struct ABC {
1949            UOW UOW;
1950          };
1951
1952     Some cases of unnamed fields in structures and unions are only
1953     accepted with this option.  *Note Unnamed struct/union fields
1954     within structs/unions: Unnamed Fields, for details.
1955
1956`-fplan9-extensions'
1957     Accept some non-standard constructs used in Plan 9 code.
1958
1959     This enables `-fms-extensions', permits passing pointers to
1960     structures with anonymous fields to functions which expect
1961     pointers to elements of the type of the field, and permits
1962     referring to anonymous fields declared using a typedef.  *Note
1963     Unnamed struct/union fields within structs/unions: Unnamed Fields,
1964     for details.  This is only supported for C, not C++.
1965
1966`-trigraphs'
1967     Support ISO C trigraphs.  The `-ansi' option (and `-std' options
1968     for strict ISO C conformance) implies `-trigraphs'.
1969
1970`-no-integrated-cpp'
1971     Performs a compilation in two passes: preprocessing and compiling.
1972     This option allows a user supplied "cc1", "cc1plus", or "cc1obj"
1973     via the `-B' option.  The user supplied compilation step can then
1974     add in an additional preprocessing step after normal preprocessing
1975     but before compiling.  The default is to use the integrated cpp
1976     (internal cpp)
1977
1978     The semantics of this option will change if "cc1", "cc1plus", and
1979     "cc1obj" are merged.
1980
1981`-traditional'
1982`-traditional-cpp'
1983     Formerly, these options caused GCC to attempt to emulate a
1984     pre-standard C compiler.  They are now only supported with the
1985     `-E' switch.  The preprocessor continues to support a pre-standard
1986     mode.  See the GNU CPP manual for details.
1987
1988`-fcond-mismatch'
1989     Allow conditional expressions with mismatched types in the second
1990     and third arguments.  The value of such an expression is void.
1991     This option is not supported for C++.
1992
1993`-flax-vector-conversions'
1994     Allow implicit conversions between vectors with differing numbers
1995     of elements and/or incompatible element types.  This option should
1996     not be used for new code.
1997
1998`-funsigned-char'
1999     Let the type `char' be unsigned, like `unsigned char'.
2000
2001     Each kind of machine has a default for what `char' should be.  It
2002     is either like `unsigned char' by default or like `signed char' by
2003     default.
2004
2005     Ideally, a portable program should always use `signed char' or
2006     `unsigned char' when it depends on the signedness of an object.
2007     But many programs have been written to use plain `char' and expect
2008     it to be signed, or expect it to be unsigned, depending on the
2009     machines they were written for.  This option, and its inverse, let
2010     you make such a program work with the opposite default.
2011
2012     The type `char' is always a distinct type from each of `signed
2013     char' or `unsigned char', even though its behavior is always just
2014     like one of those two.
2015
2016`-fsigned-char'
2017     Let the type `char' be signed, like `signed char'.
2018
2019     Note that this is equivalent to `-fno-unsigned-char', which is the
2020     negative form of `-funsigned-char'.  Likewise, the option
2021     `-fno-signed-char' is equivalent to `-funsigned-char'.
2022
2023`-fsigned-bitfields'
2024`-funsigned-bitfields'
2025`-fno-signed-bitfields'
2026`-fno-unsigned-bitfields'
2027     These options control whether a bit-field is signed or unsigned,
2028     when the declaration does not use either `signed' or `unsigned'.
2029     By default, such a bit-field is signed, because this is
2030     consistent: the basic integer types such as `int' are signed types.
2031
2032
2033File: gcc.info,  Node: C++ Dialect Options,  Next: Objective-C and Objective-C++ Dialect Options,  Prev: C Dialect Options,  Up: Invoking GCC
2034
20353.5 Options Controlling C++ Dialect
2036===================================
2037
2038This section describes the command-line options that are only meaningful
2039for C++ programs; but you can also use most of the GNU compiler options
2040regardless of what language your program is in.  For example, you might
2041compile a file `firstClass.C' like this:
2042
2043     g++ -g -frepo -O -c firstClass.C
2044
2045In this example, only `-frepo' is an option meant only for C++
2046programs; you can use the other options with any language supported by
2047GCC.
2048
2049 Here is a list of options that are _only_ for compiling C++ programs:
2050
2051`-fabi-version=N'
2052     Use version N of the C++ ABI.  Version 2 is the version of the C++
2053     ABI that first appeared in G++ 3.4.  Version 1 is the version of
2054     the C++ ABI that first appeared in G++ 3.2.  Version 0 will always
2055     be the version that conforms most closely to the C++ ABI
2056     specification.  Therefore, the ABI obtained using version 0 will
2057     change as ABI bugs are fixed.
2058
2059     The default is version 2.
2060
2061     Version 3 corrects an error in mangling a constant address as a
2062     template argument.
2063
2064     Version 4 implements a standard mangling for vector types.
2065
2066     Version 5 corrects the mangling of attribute const/volatile on
2067     function pointer types, decltype of a plain decl, and use of a
2068     function parameter in the declaration of another parameter.
2069
2070     See also `-Wabi'.
2071
2072`-fno-access-control'
2073     Turn off all access checking.  This switch is mainly useful for
2074     working around bugs in the access control code.
2075
2076`-fcheck-new'
2077     Check that the pointer returned by `operator new' is non-null
2078     before attempting to modify the storage allocated.  This check is
2079     normally unnecessary because the C++ standard specifies that
2080     `operator new' will only return `0' if it is declared `throw()',
2081     in which case the compiler will always check the return value even
2082     without this option.  In all other cases, when `operator new' has
2083     a non-empty exception specification, memory exhaustion is
2084     signalled by throwing `std::bad_alloc'.  See also `new (nothrow)'.
2085
2086`-fconserve-space'
2087     Put uninitialized or runtime-initialized global variables into the
2088     common segment, as C does.  This saves space in the executable at
2089     the cost of not diagnosing duplicate definitions.  If you compile
2090     with this flag and your program mysteriously crashes after
2091     `main()' has completed, you may have an object that is being
2092     destroyed twice because two definitions were merged.
2093
2094     This option is no longer useful on most targets, now that support
2095     has been added for putting variables into BSS without making them
2096     common.
2097
2098`-fconstexpr-depth=N'
2099     Set the maximum nested evaluation depth for C++0x constexpr
2100     functions to N.  A limit is needed to detect endless recursion
2101     during constant expression evaluation.  The minimum specified by
2102     the standard is 512.
2103
2104`-fno-deduce-init-list'
2105     Disable deduction of a template type parameter as
2106     std::initializer_list from a brace-enclosed initializer list, i.e.
2107
2108          template <class T> auto forward(T t) -> decltype (realfn (t))
2109          {
2110            return realfn (t);
2111          }
2112
2113          void f()
2114          {
2115            forward({1,2}); // call forward<std::initializer_list<int>>
2116          }
2117
2118     This option is present because this deduction is an extension to
2119     the current specification in the C++0x working draft, and there was
2120     some concern about potential overload resolution problems.
2121
2122`-ffriend-injection'
2123     Inject friend functions into the enclosing namespace, so that they
2124     are visible outside the scope of the class in which they are
2125     declared.  Friend functions were documented to work this way in
2126     the old Annotated C++ Reference Manual, and versions of G++ before
2127     4.1 always worked that way.  However, in ISO C++ a friend function
2128     which is not declared in an enclosing scope can only be found
2129     using argument dependent lookup.  This option causes friends to be
2130     injected as they were in earlier releases.
2131
2132     This option is for compatibility, and may be removed in a future
2133     release of G++.
2134
2135`-fno-elide-constructors'
2136     The C++ standard allows an implementation to omit creating a
2137     temporary which is only used to initialize another object of the
2138     same type.  Specifying this option disables that optimization, and
2139     forces G++ to call the copy constructor in all cases.
2140
2141`-fno-enforce-eh-specs'
2142     Don't generate code to check for violation of exception
2143     specifications at runtime.  This option violates the C++ standard,
2144     but may be useful for reducing code size in production builds,
2145     much like defining `NDEBUG'.  This does not give user code
2146     permission to throw exceptions in violation of the exception
2147     specifications; the compiler will still optimize based on the
2148     specifications, so throwing an unexpected exception will result in
2149     undefined behavior.
2150
2151`-ffor-scope'
2152`-fno-for-scope'
2153     If `-ffor-scope' is specified, the scope of variables declared in
2154     a for-init-statement is limited to the `for' loop itself, as
2155     specified by the C++ standard.  If `-fno-for-scope' is specified,
2156     the scope of variables declared in a for-init-statement extends to
2157     the end of the enclosing scope, as was the case in old versions of
2158     G++, and other (traditional) implementations of C++.
2159
2160     The default if neither flag is given to follow the standard, but
2161     to allow and give a warning for old-style code that would
2162     otherwise be invalid, or have different behavior.
2163
2164`-fno-gnu-keywords'
2165     Do not recognize `typeof' as a keyword, so that code can use this
2166     word as an identifier.  You can use the keyword `__typeof__'
2167     instead.  `-ansi' implies `-fno-gnu-keywords'.
2168
2169`-fno-implicit-templates'
2170     Never emit code for non-inline templates which are instantiated
2171     implicitly (i.e. by use); only emit code for explicit
2172     instantiations.  *Note Template Instantiation::, for more
2173     information.
2174
2175`-fno-implicit-inline-templates'
2176     Don't emit code for implicit instantiations of inline templates,
2177     either.  The default is to handle inlines differently so that
2178     compiles with and without optimization will need the same set of
2179     explicit instantiations.
2180
2181`-fno-implement-inlines'
2182     To save space, do not emit out-of-line copies of inline functions
2183     controlled by `#pragma implementation'.  This will cause linker
2184     errors if these functions are not inlined everywhere they are
2185     called.
2186
2187`-fms-extensions'
2188     Disable pedantic warnings about constructs used in MFC, such as
2189     implicit int and getting a pointer to member function via
2190     non-standard syntax.
2191
2192`-fno-nonansi-builtins'
2193     Disable built-in declarations of functions that are not mandated by
2194     ANSI/ISO C.  These include `ffs', `alloca', `_exit', `index',
2195     `bzero', `conjf', and other related functions.
2196
2197`-fnothrow-opt'
2198     Treat a `throw()' exception specification as though it were a
2199     `noexcept' specification to reduce or eliminate the text size
2200     overhead relative to a function with no exception specification.
2201     If the function has local variables of types with non-trivial
2202     destructors, the exception specification will actually make the
2203     function smaller because the EH cleanups for those variables can be
2204     optimized away.  The semantic effect is that an exception thrown
2205     out of a function with such an exception specification will result
2206     in a call to `terminate' rather than `unexpected'.
2207
2208`-fno-operator-names'
2209     Do not treat the operator name keywords `and', `bitand', `bitor',
2210     `compl', `not', `or' and `xor' as synonyms as keywords.
2211
2212`-fno-optional-diags'
2213     Disable diagnostics that the standard says a compiler does not
2214     need to issue.  Currently, the only such diagnostic issued by G++
2215     is the one for a name having multiple meanings within a class.
2216
2217`-fpermissive'
2218     Downgrade some diagnostics about nonconformant code from errors to
2219     warnings.  Thus, using `-fpermissive' will allow some
2220     nonconforming code to compile.
2221
2222`-fno-pretty-templates'
2223     When an error message refers to a specialization of a function
2224     template, the compiler will normally print the signature of the
2225     template followed by the template arguments and any typedefs or
2226     typenames in the signature (e.g. `void f(T) [with T = int]' rather
2227     than `void f(int)') so that it's clear which template is involved.
2228     When an error message refers to a specialization of a class
2229     template, the compiler will omit any template arguments which match
2230     the default template arguments for that template.  If either of
2231     these behaviors make it harder to understand the error message
2232     rather than easier, using `-fno-pretty-templates' will disable
2233     them.
2234
2235`-frepo'
2236     Enable automatic template instantiation at link time.  This option
2237     also implies `-fno-implicit-templates'.  *Note Template
2238     Instantiation::, for more information.
2239
2240`-fno-rtti'
2241     Disable generation of information about every class with virtual
2242     functions for use by the C++ runtime type identification features
2243     (`dynamic_cast' and `typeid').  If you don't use those parts of
2244     the language, you can save some space by using this flag.  Note
2245     that exception handling uses the same information, but it will
2246     generate it as needed. The `dynamic_cast' operator can still be
2247     used for casts that do not require runtime type information, i.e.
2248     casts to `void *' or to unambiguous base classes.
2249
2250`-fstats'
2251     Emit statistics about front-end processing at the end of the
2252     compilation.  This information is generally only useful to the G++
2253     development team.
2254
2255`-fstrict-enums'
2256     Allow the compiler to optimize using the assumption that a value of
2257     enumeration type can only be one of the values of the enumeration
2258     (as defined in the C++ standard; basically, a value which can be
2259     represented in the minimum number of bits needed to represent all
2260     the enumerators).  This assumption may not be valid if the program
2261     uses a cast to convert an arbitrary integer value to the
2262     enumeration type.
2263
2264`-ftemplate-depth=N'
2265     Set the maximum instantiation depth for template classes to N.  A
2266     limit on the template instantiation depth is needed to detect
2267     endless recursions during template class instantiation.  ANSI/ISO
2268     C++ conforming programs must not rely on a maximum depth greater
2269     than 17 (changed to 1024 in C++0x).
2270
2271`-fno-threadsafe-statics'
2272     Do not emit the extra code to use the routines specified in the C++
2273     ABI for thread-safe initialization of local statics.  You can use
2274     this option to reduce code size slightly in code that doesn't need
2275     to be thread-safe.
2276
2277`-fuse-cxa-atexit'
2278     Register destructors for objects with static storage duration with
2279     the `__cxa_atexit' function rather than the `atexit' function.
2280     This option is required for fully standards-compliant handling of
2281     static destructors, but will only work if your C library supports
2282     `__cxa_atexit'.
2283
2284`-fno-use-cxa-get-exception-ptr'
2285     Don't use the `__cxa_get_exception_ptr' runtime routine.  This
2286     will cause `std::uncaught_exception' to be incorrect, but is
2287     necessary if the runtime routine is not available.
2288
2289`-fvisibility-inlines-hidden'
2290     This switch declares that the user does not attempt to compare
2291     pointers to inline methods where the addresses of the two functions
2292     were taken in different shared objects.
2293
2294     The effect of this is that GCC may, effectively, mark inline
2295     methods with `__attribute__ ((visibility ("hidden")))' so that
2296     they do not appear in the export table of a DSO and do not require
2297     a PLT indirection when used within the DSO.  Enabling this option
2298     can have a dramatic effect on load and link times of a DSO as it
2299     massively reduces the size of the dynamic export table when the
2300     library makes heavy use of templates.
2301
2302     The behavior of this switch is not quite the same as marking the
2303     methods as hidden directly, because it does not affect static
2304     variables local to the function or cause the compiler to deduce
2305     that the function is defined in only one shared object.
2306
2307     You may mark a method as having a visibility explicitly to negate
2308     the effect of the switch for that method.  For example, if you do
2309     want to compare pointers to a particular inline method, you might
2310     mark it as having default visibility.  Marking the enclosing class
2311     with explicit visibility will have no effect.
2312
2313     Explicitly instantiated inline methods are unaffected by this
2314     option as their linkage might otherwise cross a shared library
2315     boundary.  *Note Template Instantiation::.
2316
2317`-fvisibility-ms-compat'
2318     This flag attempts to use visibility settings to make GCC's C++
2319     linkage model compatible with that of Microsoft Visual Studio.
2320
2321     The flag makes these changes to GCC's linkage model:
2322
2323       1. It sets the default visibility to `hidden', like
2324          `-fvisibility=hidden'.
2325
2326       2. Types, but not their members, are not hidden by default.
2327
2328       3. The One Definition Rule is relaxed for types without explicit
2329          visibility specifications which are defined in more than one
2330          different shared object: those declarations are permitted if
2331          they would have been permitted when this option was not used.
2332
2333     In new code it is better to use `-fvisibility=hidden' and export
2334     those classes which are intended to be externally visible.
2335     Unfortunately it is possible for code to rely, perhaps
2336     accidentally, on the Visual Studio behavior.
2337
2338     Among the consequences of these changes are that static data
2339     members of the same type with the same name but defined in
2340     different shared objects will be different, so changing one will
2341     not change the other; and that pointers to function members
2342     defined in different shared objects may not compare equal.  When
2343     this flag is given, it is a violation of the ODR to define types
2344     with the same name differently.
2345
2346`-fno-weak'
2347     Do not use weak symbol support, even if it is provided by the
2348     linker.  By default, G++ will use weak symbols if they are
2349     available.  This option exists only for testing, and should not be
2350     used by end-users; it will result in inferior code and has no
2351     benefits.  This option may be removed in a future release of G++.
2352
2353`-nostdinc++'
2354     Do not search for header files in the standard directories
2355     specific to C++, but do still search the other standard
2356     directories.  (This option is used when building the C++ library.)
2357
2358 In addition, these optimization, warning, and code generation options
2359have meanings only for C++ programs:
2360
2361`-fno-default-inline'
2362     Do not assume `inline' for functions defined inside a class scope.
2363     *Note Options That Control Optimization: Optimize Options.  Note
2364     that these functions will have linkage like inline functions; they
2365     just won't be inlined by default.
2366
2367`-Wabi (C, Objective-C, C++ and Objective-C++ only)'
2368     Warn when G++ generates code that is probably not compatible with
2369     the vendor-neutral C++ ABI.  Although an effort has been made to
2370     warn about all such cases, there are probably some cases that are
2371     not warned about, even though G++ is generating incompatible code.
2372     There may also be cases where warnings are emitted even though the
2373     code that is generated will be compatible.
2374
2375     You should rewrite your code to avoid these warnings if you are
2376     concerned about the fact that code generated by G++ may not be
2377     binary compatible with code generated by other compilers.
2378
2379     The known incompatibilities in `-fabi-version=2' (the default)
2380     include:
2381
2382        * A template with a non-type template parameter of reference
2383          type is mangled incorrectly:
2384               extern int N;
2385               template <int &> struct S {};
2386               void n (S<N>) {2}
2387
2388          This is fixed in `-fabi-version=3'.
2389
2390        * SIMD vector types declared using `__attribute
2391          ((vector_size))' are mangled in a non-standard way that does
2392          not allow for overloading of functions taking vectors of
2393          different sizes.
2394
2395          The mangling is changed in `-fabi-version=4'.
2396
2397     The known incompatibilities in `-fabi-version=1' include:
2398
2399        * Incorrect handling of tail-padding for bit-fields.  G++ may
2400          attempt to pack data into the same byte as a base class.  For
2401          example:
2402
2403               struct A { virtual void f(); int f1 : 1; };
2404               struct B : public A { int f2 : 1; };
2405
2406          In this case, G++ will place `B::f2' into the same byte
2407          as`A::f1'; other compilers will not.  You can avoid this
2408          problem by explicitly padding `A' so that its size is a
2409          multiple of the byte size on your platform; that will cause
2410          G++ and other compilers to layout `B' identically.
2411
2412        * Incorrect handling of tail-padding for virtual bases.  G++
2413          does not use tail padding when laying out virtual bases.  For
2414          example:
2415
2416               struct A { virtual void f(); char c1; };
2417               struct B { B(); char c2; };
2418               struct C : public A, public virtual B {};
2419
2420          In this case, G++ will not place `B' into the tail-padding for
2421          `A'; other compilers will.  You can avoid this problem by
2422          explicitly padding `A' so that its size is a multiple of its
2423          alignment (ignoring virtual base classes); that will cause
2424          G++ and other compilers to layout `C' identically.
2425
2426        * Incorrect handling of bit-fields with declared widths greater
2427          than that of their underlying types, when the bit-fields
2428          appear in a union.  For example:
2429
2430               union U { int i : 4096; };
2431
2432          Assuming that an `int' does not have 4096 bits, G++ will make
2433          the union too small by the number of bits in an `int'.
2434
2435        * Empty classes can be placed at incorrect offsets.  For
2436          example:
2437
2438               struct A {};
2439
2440               struct B {
2441                 A a;
2442                 virtual void f ();
2443               };
2444
2445               struct C : public B, public A {};
2446
2447          G++ will place the `A' base class of `C' at a nonzero offset;
2448          it should be placed at offset zero.  G++ mistakenly believes
2449          that the `A' data member of `B' is already at offset zero.
2450
2451        * Names of template functions whose types involve `typename' or
2452          template template parameters can be mangled incorrectly.
2453
2454               template <typename Q>
2455               void f(typename Q::X) {}
2456
2457               template <template <typename> class Q>
2458               void f(typename Q<int>::X) {}
2459
2460          Instantiations of these templates may be mangled incorrectly.
2461
2462
2463     It also warns psABI related changes.  The known psABI changes at
2464     this point include:
2465
2466        * For SYSV/x86-64, when passing union with long double, it is
2467          changed to pass in memory as specified in psABI.  For example:
2468
2469               union U {
2470                 long double ld;
2471                 int i;
2472               };
2473
2474          `union U' will always be passed in memory.
2475
2476
2477`-Wctor-dtor-privacy (C++ and Objective-C++ only)'
2478     Warn when a class seems unusable because all the constructors or
2479     destructors in that class are private, and it has neither friends
2480     nor public static member functions.
2481
2482`-Wnoexcept (C++ and Objective-C++ only)'
2483     Warn when a noexcept-expression evaluates to false because of a
2484     call to a function that does not have a non-throwing exception
2485     specification (i.e. `throw()' or `noexcept') but is known by the
2486     compiler to never throw an exception.
2487
2488`-Wnon-virtual-dtor (C++ and Objective-C++ only)'
2489     Warn when a class has virtual functions and accessible non-virtual
2490     destructor, in which case it would be possible but unsafe to delete
2491     an instance of a derived class through a pointer to the base class.
2492     This warning is also enabled if -Weffc++ is specified.
2493
2494`-Wreorder (C++ and Objective-C++ only)'
2495     Warn when the order of member initializers given in the code does
2496     not match the order in which they must be executed.  For instance:
2497
2498          struct A {
2499            int i;
2500            int j;
2501            A(): j (0), i (1) { }
2502          };
2503
2504     The compiler will rearrange the member initializers for `i' and
2505     `j' to match the declaration order of the members, emitting a
2506     warning to that effect.  This warning is enabled by `-Wall'.
2507
2508 The following `-W...' options are not affected by `-Wall'.
2509
2510`-Weffc++ (C++ and Objective-C++ only)'
2511     Warn about violations of the following style guidelines from Scott
2512     Meyers' `Effective C++' book:
2513
2514        * Item 11:  Define a copy constructor and an assignment
2515          operator for classes with dynamically allocated memory.
2516
2517        * Item 12:  Prefer initialization to assignment in constructors.
2518
2519        * Item 14:  Make destructors virtual in base classes.
2520
2521        * Item 15:  Have `operator=' return a reference to `*this'.
2522
2523        * Item 23:  Don't try to return a reference when you must
2524          return an object.
2525
2526
2527     Also warn about violations of the following style guidelines from
2528     Scott Meyers' `More Effective C++' book:
2529
2530        * Item 6:  Distinguish between prefix and postfix forms of
2531          increment and decrement operators.
2532
2533        * Item 7:  Never overload `&&', `||', or `,'.
2534
2535
2536     When selecting this option, be aware that the standard library
2537     headers do not obey all of these guidelines; use `grep -v' to
2538     filter out those warnings.
2539
2540`-Wstrict-null-sentinel (C++ and Objective-C++ only)'
2541     Warn also about the use of an uncasted `NULL' as sentinel.  When
2542     compiling only with GCC this is a valid sentinel, as `NULL' is
2543     defined to `__null'.  Although it is a null pointer constant not a
2544     null pointer, it is guaranteed to be of the same size as a
2545     pointer.  But this use is not portable across different compilers.
2546
2547`-Wno-non-template-friend (C++ and Objective-C++ only)'
2548     Disable warnings when non-templatized friend functions are declared
2549     within a template.  Since the advent of explicit template
2550     specification support in G++, if the name of the friend is an
2551     unqualified-id (i.e., `friend foo(int)'), the C++ language
2552     specification demands that the friend declare or define an
2553     ordinary, nontemplate function.  (Section 14.5.3).  Before G++
2554     implemented explicit specification, unqualified-ids could be
2555     interpreted as a particular specialization of a templatized
2556     function.  Because this non-conforming behavior is no longer the
2557     default behavior for G++, `-Wnon-template-friend' allows the
2558     compiler to check existing code for potential trouble spots and is
2559     on by default.  This new compiler behavior can be turned off with
2560     `-Wno-non-template-friend' which keeps the conformant compiler code
2561     but disables the helpful warning.
2562
2563`-Wold-style-cast (C++ and Objective-C++ only)'
2564     Warn if an old-style (C-style) cast to a non-void type is used
2565     within a C++ program.  The new-style casts (`dynamic_cast',
2566     `static_cast', `reinterpret_cast', and `const_cast') are less
2567     vulnerable to unintended effects and much easier to search for.
2568
2569`-Woverloaded-virtual (C++ and Objective-C++ only)'
2570     Warn when a function declaration hides virtual functions from a
2571     base class.  For example, in:
2572
2573          struct A {
2574            virtual void f();
2575          };
2576
2577          struct B: public A {
2578            void f(int);
2579          };
2580
2581     the `A' class version of `f' is hidden in `B', and code like:
2582
2583          B* b;
2584          b->f();
2585
2586     will fail to compile.
2587
2588`-Wno-pmf-conversions (C++ and Objective-C++ only)'
2589     Disable the diagnostic for converting a bound pointer to member
2590     function to a plain pointer.
2591
2592`-Wsign-promo (C++ and Objective-C++ only)'
2593     Warn when overload resolution chooses a promotion from unsigned or
2594     enumerated type to a signed type, over a conversion to an unsigned
2595     type of the same size.  Previous versions of G++ would try to
2596     preserve unsignedness, but the standard mandates the current
2597     behavior.
2598
2599          struct A {
2600            operator int ();
2601            A& operator = (int);
2602          };
2603
2604          main ()
2605          {
2606            A a,b;
2607            a = b;
2608          }
2609
2610     In this example, G++ will synthesize a default `A& operator =
2611     (const A&);', while cfront will use the user-defined `operator ='.
2612
2613
2614File: gcc.info,  Node: Objective-C and Objective-C++ Dialect Options,  Next: Language Independent Options,  Prev: C++ Dialect Options,  Up: Invoking GCC
2615
26163.6 Options Controlling Objective-C and Objective-C++ Dialects
2617==============================================================
2618
2619(NOTE: This manual does not describe the Objective-C and Objective-C++
2620languages themselves.  *Note Language Standards Supported by GCC:
2621Standards, for references.)
2622
2623 This section describes the command-line options that are only
2624meaningful for Objective-C and Objective-C++ programs, but you can also
2625use most of the language-independent GNU compiler options.  For
2626example, you might compile a file `some_class.m' like this:
2627
2628     gcc -g -fgnu-runtime -O -c some_class.m
2629
2630In this example, `-fgnu-runtime' is an option meant only for
2631Objective-C and Objective-C++ programs; you can use the other options
2632with any language supported by GCC.
2633
2634 Note that since Objective-C is an extension of the C language,
2635Objective-C compilations may also use options specific to the C
2636front-end (e.g., `-Wtraditional').  Similarly, Objective-C++
2637compilations may use C++-specific options (e.g., `-Wabi').
2638
2639 Here is a list of options that are _only_ for compiling Objective-C
2640and Objective-C++ programs:
2641
2642`-fconstant-string-class=CLASS-NAME'
2643     Use CLASS-NAME as the name of the class to instantiate for each
2644     literal string specified with the syntax `@"..."'.  The default
2645     class name is `NXConstantString' if the GNU runtime is being used,
2646     and `NSConstantString' if the NeXT runtime is being used (see
2647     below).  The `-fconstant-cfstrings' option, if also present, will
2648     override the `-fconstant-string-class' setting and cause `@"..."'
2649     literals to be laid out as constant CoreFoundation strings.
2650
2651`-fgnu-runtime'
2652     Generate object code compatible with the standard GNU Objective-C
2653     runtime.  This is the default for most types of systems.
2654
2655`-fnext-runtime'
2656     Generate output compatible with the NeXT runtime.  This is the
2657     default for NeXT-based systems, including Darwin and Mac OS X.
2658     The macro `__NEXT_RUNTIME__' is predefined if (and only if) this
2659     option is used.
2660
2661`-fno-nil-receivers'
2662     Assume that all Objective-C message dispatches (`[receiver
2663     message:arg]') in this translation unit ensure that the receiver is
2664     not `nil'.  This allows for more efficient entry points in the
2665     runtime to be used.  This option is only available in conjunction
2666     with the NeXT runtime and ABI version 0 or 1.
2667
2668`-fobjc-abi-version=N'
2669     Use version N of the Objective-C ABI for the selected runtime.
2670     This option is currently supported only for the NeXT runtime.  In
2671     that case, Version 0 is the traditional (32-bit) ABI without
2672     support for properties and other Objective-C 2.0 additions.
2673     Version 1 is the traditional (32-bit) ABI with support for
2674     properties and other Objective-C 2.0 additions.  Version 2 is the
2675     modern (64-bit) ABI.  If nothing is specified, the default is
2676     Version 0 on 32-bit target machines, and Version 2 on 64-bit
2677     target machines.
2678
2679`-fobjc-call-cxx-cdtors'
2680     For each Objective-C class, check if any of its instance variables
2681     is a C++ object with a non-trivial default constructor.  If so,
2682     synthesize a special `- (id) .cxx_construct' instance method that
2683     will run non-trivial default constructors on any such instance
2684     variables, in order, and then return `self'.  Similarly, check if
2685     any instance variable is a C++ object with a non-trivial
2686     destructor, and if so, synthesize a special `- (void)
2687     .cxx_destruct' method that will run all such default destructors,
2688     in reverse order.
2689
2690     The `- (id) .cxx_construct' and `- (void) .cxx_destruct' methods
2691     thusly generated will only operate on instance variables declared
2692     in the current Objective-C class, and not those inherited from
2693     superclasses.  It is the responsibility of the Objective-C runtime
2694     to invoke all such methods in an object's inheritance hierarchy.
2695     The `- (id) .cxx_construct' methods will be invoked by the runtime
2696     immediately after a new object instance is allocated; the `-
2697     (void) .cxx_destruct' methods will be invoked immediately before
2698     the runtime deallocates an object instance.
2699
2700     As of this writing, only the NeXT runtime on Mac OS X 10.4 and
2701     later has support for invoking the `- (id) .cxx_construct' and `-
2702     (void) .cxx_destruct' methods.
2703
2704`-fobjc-direct-dispatch'
2705     Allow fast jumps to the message dispatcher.  On Darwin this is
2706     accomplished via the comm page.
2707
2708`-fobjc-exceptions'
2709     Enable syntactic support for structured exception handling in
2710     Objective-C, similar to what is offered by C++ and Java.  This
2711     option is required to use the Objective-C keywords `@try',
2712     `@throw', `@catch', `@finally' and `@synchronized'.  This option
2713     is available with both the GNU runtime and the NeXT runtime (but
2714     not available in conjunction with the NeXT runtime on Mac OS X
2715     10.2 and earlier).
2716
2717`-fobjc-gc'
2718     Enable garbage collection (GC) in Objective-C and Objective-C++
2719     programs.  This option is only available with the NeXT runtime; the
2720     GNU runtime has a different garbage collection implementation that
2721     does not require special compiler flags.
2722
2723`-fobjc-nilcheck'
2724     For the NeXT runtime with version 2 of the ABI, check for a nil
2725     receiver in method invocations before doing the actual method call.
2726     This is the default and can be disabled using
2727     `-fno-objc-nilcheck'.  Class methods and super calls are never
2728     checked for nil in this way no matter what this flag is set to.
2729     Currently this flag does nothing when the GNU runtime, or an older
2730     version of the NeXT runtime ABI, is used.
2731
2732`-fobjc-std=objc1'
2733     Conform to the language syntax of Objective-C 1.0, the language
2734     recognized by GCC 4.0.  This only affects the Objective-C
2735     additions to the C/C++ language; it does not affect conformance to
2736     C/C++ standards, which is controlled by the separate C/C++ dialect
2737     option flags.  When this option is used with the Objective-C or
2738     Objective-C++ compiler, any Objective-C syntax that is not
2739     recognized by GCC 4.0 is rejected.  This is useful if you need to
2740     make sure that your Objective-C code can be compiled with older
2741     versions of GCC.
2742
2743`-freplace-objc-classes'
2744     Emit a special marker instructing `ld(1)' not to statically link in
2745     the resulting object file, and allow `dyld(1)' to load it in at
2746     run time instead.  This is used in conjunction with the
2747     Fix-and-Continue debugging mode, where the object file in question
2748     may be recompiled and dynamically reloaded in the course of
2749     program execution, without the need to restart the program itself.
2750     Currently, Fix-and-Continue functionality is only available in
2751     conjunction with the NeXT runtime on Mac OS X 10.3 and later.
2752
2753`-fzero-link'
2754     When compiling for the NeXT runtime, the compiler ordinarily
2755     replaces calls to `objc_getClass("...")' (when the name of the
2756     class is known at compile time) with static class references that
2757     get initialized at load time, which improves run-time performance.
2758     Specifying the `-fzero-link' flag suppresses this behavior and
2759     causes calls to `objc_getClass("...")' to be retained.  This is
2760     useful in Zero-Link debugging mode, since it allows for individual
2761     class implementations to be modified during program execution.
2762     The GNU runtime currently always retains calls to
2763     `objc_get_class("...")' regardless of command line options.
2764
2765`-gen-decls'
2766     Dump interface declarations for all classes seen in the source
2767     file to a file named `SOURCENAME.decl'.
2768
2769`-Wassign-intercept (Objective-C and Objective-C++ only)'
2770     Warn whenever an Objective-C assignment is being intercepted by the
2771     garbage collector.
2772
2773`-Wno-protocol (Objective-C and Objective-C++ only)'
2774     If a class is declared to implement a protocol, a warning is
2775     issued for every method in the protocol that is not implemented by
2776     the class.  The default behavior is to issue a warning for every
2777     method not explicitly implemented in the class, even if a method
2778     implementation is inherited from the superclass.  If you use the
2779     `-Wno-protocol' option, then methods inherited from the superclass
2780     are considered to be implemented, and no warning is issued for
2781     them.
2782
2783`-Wselector (Objective-C and Objective-C++ only)'
2784     Warn if multiple methods of different types for the same selector
2785     are found during compilation.  The check is performed on the list
2786     of methods in the final stage of compilation.  Additionally, a
2787     check is performed for each selector appearing in a
2788     `@selector(...)'  expression, and a corresponding method for that
2789     selector has been found during compilation.  Because these checks
2790     scan the method table only at the end of compilation, these
2791     warnings are not produced if the final stage of compilation is not
2792     reached, for example because an error is found during compilation,
2793     or because the `-fsyntax-only' option is being used.
2794
2795`-Wstrict-selector-match (Objective-C and Objective-C++ only)'
2796     Warn if multiple methods with differing argument and/or return
2797     types are found for a given selector when attempting to send a
2798     message using this selector to a receiver of type `id' or `Class'.
2799     When this flag is off (which is the default behavior), the
2800     compiler will omit such warnings if any differences found are
2801     confined to types which share the same size and alignment.
2802
2803`-Wundeclared-selector (Objective-C and Objective-C++ only)'
2804     Warn if a `@selector(...)' expression referring to an undeclared
2805     selector is found.  A selector is considered undeclared if no
2806     method with that name has been declared before the
2807     `@selector(...)' expression, either explicitly in an `@interface'
2808     or `@protocol' declaration, or implicitly in an `@implementation'
2809     section.  This option always performs its checks as soon as a
2810     `@selector(...)' expression is found, while `-Wselector' only
2811     performs its checks in the final stage of compilation.  This also
2812     enforces the coding style convention that methods and selectors
2813     must be declared before being used.
2814
2815`-print-objc-runtime-info'
2816     Generate C header describing the largest structure that is passed
2817     by value, if any.
2818
2819
2820
2821File: gcc.info,  Node: Language Independent Options,  Next: Warning Options,  Prev: Objective-C and Objective-C++ Dialect Options,  Up: Invoking GCC
2822
28233.7 Options to Control Diagnostic Messages Formatting
2824=====================================================
2825
2826Traditionally, diagnostic messages have been formatted irrespective of
2827the output device's aspect (e.g. its width, ...).  The options described
2828below can be used to control the diagnostic messages formatting
2829algorithm, e.g. how many characters per line, how often source location
2830information should be reported.  Right now, only the C++ front end can
2831honor these options.  However it is expected, in the near future, that
2832the remaining front ends would be able to digest them correctly.
2833
2834`-fmessage-length=N'
2835     Try to format error messages so that they fit on lines of about N
2836     characters.  The default is 72 characters for `g++' and 0 for the
2837     rest of the front ends supported by GCC.  If N is zero, then no
2838     line-wrapping will be done; each error message will appear on a
2839     single line.
2840
2841`-fdiagnostics-show-location=once'
2842     Only meaningful in line-wrapping mode.  Instructs the diagnostic
2843     messages reporter to emit _once_ source location information; that
2844     is, in case the message is too long to fit on a single physical
2845     line and has to be wrapped, the source location won't be emitted
2846     (as prefix) again, over and over, in subsequent continuation
2847     lines.  This is the default behavior.
2848
2849`-fdiagnostics-show-location=every-line'
2850     Only meaningful in line-wrapping mode.  Instructs the diagnostic
2851     messages reporter to emit the same source location information (as
2852     prefix) for physical lines that result from the process of breaking
2853     a message which is too long to fit on a single line.
2854
2855`-fno-diagnostics-show-option'
2856     By default, each diagnostic emitted includes text which indicates
2857     the command line option that directly controls the diagnostic (if
2858     such an option is known to the diagnostic machinery).  Specifying
2859     the `-fno-diagnostics-show-option' flag suppresses that behavior.
2860
2861`-Wcoverage-mismatch'
2862     Warn if feedback profiles do not match when using the
2863     `-fprofile-use' option.  If a source file was changed between
2864     `-fprofile-gen' and `-fprofile-use', the files with the profile
2865     feedback can fail to match the source file and GCC can not use the
2866     profile feedback information.  By default, this warning is enabled
2867     and is treated as an error.  `-Wno-coverage-mismatch' can be used
2868     to disable the warning or `-Wno-error=coverage-mismatch' can be
2869     used to disable the error.  Disable the error for this warning can
2870     result in poorly optimized code, so disabling the error is useful
2871     only in the case of very minor changes such as bug fixes to an
2872     existing code-base.  Completely disabling the warning is not
2873     recommended.
2874
2875
2876
2877File: gcc.info,  Node: Warning Options,  Next: Debugging Options,  Prev: Language Independent Options,  Up: Invoking GCC
2878
28793.8 Options to Request or Suppress Warnings
2880===========================================
2881
2882Warnings are diagnostic messages that report constructions which are
2883not inherently erroneous but which are risky or suggest there may have
2884been an error.
2885
2886 The following language-independent options do not enable specific
2887warnings but control the kinds of diagnostics produced by GCC.
2888
2889`-fsyntax-only'
2890     Check the code for syntax errors, but don't do anything beyond
2891     that.
2892
2893`-fmax-errors=N'
2894     Limits the maximum number of error messages to N, at which point
2895     GCC bails out rather than attempting to continue processing the
2896     source code.  If N is 0 (the default), there is no limit on the
2897     number of error messages produced.  If `-Wfatal-errors' is also
2898     specified, then `-Wfatal-errors' takes precedence over this option.
2899
2900`-w'
2901     Inhibit all warning messages.
2902
2903`-Werror'
2904     Make all warnings into errors.
2905
2906`-Werror='
2907     Make the specified warning into an error.  The specifier for a
2908     warning is appended, for example `-Werror=switch' turns the
2909     warnings controlled by `-Wswitch' into errors.  This switch takes a
2910     negative form, to be used to negate `-Werror' for specific
2911     warnings, for example `-Wno-error=switch' makes `-Wswitch'
2912     warnings not be errors, even when `-Werror' is in effect.
2913
2914     The warning message for each controllable warning includes the
2915     option which controls the warning.  That option can then be used
2916     with `-Werror=' and `-Wno-error=' as described above.  (Printing
2917     of the option in the warning message can be disabled using the
2918     `-fno-diagnostics-show-option' flag.)
2919
2920     Note that specifying `-Werror='FOO automatically implies `-W'FOO.
2921     However, `-Wno-error='FOO does not imply anything.
2922
2923`-Wfatal-errors'
2924     This option causes the compiler to abort compilation on the first
2925     error occurred rather than trying to keep going and printing
2926     further error messages.
2927
2928
2929 You can request many specific warnings with options beginning `-W',
2930for example `-Wimplicit' to request warnings on implicit declarations.
2931Each of these specific warning options also has a negative form
2932beginning `-Wno-' to turn off warnings; for example, `-Wno-implicit'.
2933This manual lists only one of the two forms, whichever is not the
2934default.  For further, language-specific options also refer to *note
2935C++ Dialect Options:: and *note Objective-C and Objective-C++ Dialect
2936Options::.
2937
2938 When an unrecognized warning option is requested (e.g.,
2939`-Wunknown-warning'), GCC will emit a diagnostic stating that the
2940option is not recognized.  However, if the `-Wno-' form is used, the
2941behavior is slightly different: No diagnostic will be produced for
2942`-Wno-unknown-warning' unless other diagnostics are being produced.
2943This allows the use of new `-Wno-' options with old compilers, but if
2944something goes wrong, the compiler will warn that an unrecognized
2945option was used.
2946
2947`-pedantic'
2948     Issue all the warnings demanded by strict ISO C and ISO C++;
2949     reject all programs that use forbidden extensions, and some other
2950     programs that do not follow ISO C and ISO C++.  For ISO C, follows
2951     the version of the ISO C standard specified by any `-std' option
2952     used.
2953
2954     Valid ISO C and ISO C++ programs should compile properly with or
2955     without this option (though a rare few will require `-ansi' or a
2956     `-std' option specifying the required version of ISO C).  However,
2957     without this option, certain GNU extensions and traditional C and
2958     C++ features are supported as well.  With this option, they are
2959     rejected.
2960
2961     `-pedantic' does not cause warning messages for use of the
2962     alternate keywords whose names begin and end with `__'.  Pedantic
2963     warnings are also disabled in the expression that follows
2964     `__extension__'.  However, only system header files should use
2965     these escape routes; application programs should avoid them.
2966     *Note Alternate Keywords::.
2967
2968     Some users try to use `-pedantic' to check programs for strict ISO
2969     C conformance.  They soon find that it does not do quite what they
2970     want: it finds some non-ISO practices, but not all--only those for
2971     which ISO C _requires_ a diagnostic, and some others for which
2972     diagnostics have been added.
2973
2974     A feature to report any failure to conform to ISO C might be
2975     useful in some instances, but would require considerable
2976     additional work and would be quite different from `-pedantic'.  We
2977     don't have plans to support such a feature in the near future.
2978
2979     Where the standard specified with `-std' represents a GNU extended
2980     dialect of C, such as `gnu90' or `gnu99', there is a corresponding
2981     "base standard", the version of ISO C on which the GNU extended
2982     dialect is based.  Warnings from `-pedantic' are given where they
2983     are required by the base standard.  (It would not make sense for
2984     such warnings to be given only for features not in the specified
2985     GNU C dialect, since by definition the GNU dialects of C include
2986     all features the compiler supports with the given option, and
2987     there would be nothing to warn about.)
2988
2989`-pedantic-errors'
2990     Like `-pedantic', except that errors are produced rather than
2991     warnings.
2992
2993`-Wall'
2994     This enables all the warnings about constructions that some users
2995     consider questionable, and that are easy to avoid (or modify to
2996     prevent the warning), even in conjunction with macros.  This also
2997     enables some language-specific warnings described in *note C++
2998     Dialect Options:: and *note Objective-C and Objective-C++ Dialect
2999     Options::.
3000
3001     `-Wall' turns on the following warning flags:
3002
3003          -Waddress
3004          -Warray-bounds (only with `-O2')
3005          -Wc++0x-compat
3006          -Wchar-subscripts
3007          -Wenum-compare (in C/Objc; this is on by default in C++)
3008          -Wimplicit-int (C and Objective-C only)
3009          -Wimplicit-function-declaration (C and Objective-C only)
3010          -Wcomment
3011          -Wformat
3012          -Wmain (only for C/ObjC and unless `-ffreestanding')
3013          -Wmissing-braces
3014          -Wnonnull
3015          -Wparentheses
3016          -Wpointer-sign
3017          -Wreorder
3018          -Wreturn-type
3019          -Wsequence-point
3020          -Wsign-compare (only in C++)
3021          -Wstrict-aliasing
3022          -Wstrict-overflow=1
3023          -Wswitch
3024          -Wtrigraphs
3025          -Wuninitialized
3026          -Wunknown-pragmas
3027          -Wunused-function
3028          -Wunused-label
3029          -Wunused-value
3030          -Wunused-variable
3031          -Wvolatile-register-var
3032
3033     Note that some warning flags are not implied by `-Wall'.  Some of
3034     them warn about constructions that users generally do not consider
3035     questionable, but which occasionally you might wish to check for;
3036     others warn about constructions that are necessary or hard to
3037     avoid in some cases, and there is no simple way to modify the code
3038     to suppress the warning. Some of them are enabled by `-Wextra' but
3039     many of them must be enabled individually.
3040
3041`-Wextra'
3042     This enables some extra warning flags that are not enabled by
3043     `-Wall'. (This option used to be called `-W'.  The older name is
3044     still supported, but the newer name is more descriptive.)
3045
3046          -Wclobbered
3047          -Wempty-body
3048          -Wignored-qualifiers
3049          -Wmissing-field-initializers
3050          -Wmissing-parameter-type (C only)
3051          -Wold-style-declaration (C only)
3052          -Woverride-init
3053          -Wsign-compare
3054          -Wtype-limits
3055          -Wuninitialized
3056          -Wunused-parameter (only with `-Wunused' or `-Wall')
3057          -Wunused-but-set-parameter (only with `-Wunused' or `-Wall')
3058
3059     The option `-Wextra' also prints warning messages for the
3060     following cases:
3061
3062        * A pointer is compared against integer zero with `<', `<=',
3063          `>', or `>='.
3064
3065        * (C++ only) An enumerator and a non-enumerator both appear in a
3066          conditional expression.
3067
3068        * (C++ only) Ambiguous virtual bases.
3069
3070        * (C++ only) Subscripting an array which has been declared
3071          `register'.
3072
3073        * (C++ only) Taking the address of a variable which has been
3074          declared `register'.
3075
3076        * (C++ only) A base class is not initialized in a derived
3077          class' copy constructor.
3078
3079
3080`-Wchar-subscripts'
3081     Warn if an array subscript has type `char'.  This is a common cause
3082     of error, as programmers often forget that this type is signed on
3083     some machines.  This warning is enabled by `-Wall'.
3084
3085`-Wcomment'
3086     Warn whenever a comment-start sequence `/*' appears in a `/*'
3087     comment, or whenever a Backslash-Newline appears in a `//' comment.
3088     This warning is enabled by `-Wall'.
3089
3090`-Wno-cpp'
3091     (C, Objective-C, C++, Objective-C++ and Fortran only)
3092
3093     Suppress warning messages emitted by `#warning' directives.
3094
3095`-Wdouble-promotion (C, C++, Objective-C and Objective-C++ only)'
3096     Give a warning when a value of type `float' is implicitly promoted
3097     to `double'.  CPUs with a 32-bit "single-precision" floating-point
3098     unit implement `float' in hardware, but emulate `double' in
3099     software.  On such a machine, doing computations using `double'
3100     values is much more expensive because of the overhead required for
3101     software emulation.
3102
3103     It is easy to accidentally do computations with `double' because
3104     floating-point literals are implicitly of type `double'.  For
3105     example, in:
3106          float area(float radius)
3107          {
3108             return 3.14159 * radius * radius;
3109          }
3110     the compiler will perform the entire computation with `double'
3111     because the floating-point literal is a `double'.
3112
3113`-Wformat'
3114     Check calls to `printf' and `scanf', etc., to make sure that the
3115     arguments supplied have types appropriate to the format string
3116     specified, and that the conversions specified in the format string
3117     make sense.  This includes standard functions, and others
3118     specified by format attributes (*note Function Attributes::), in
3119     the `printf', `scanf', `strftime' and `strfmon' (an X/Open
3120     extension, not in the C standard) families (or other
3121     target-specific families).  Which functions are checked without
3122     format attributes having been specified depends on the standard
3123     version selected, and such checks of functions without the
3124     attribute specified are disabled by `-ffreestanding' or
3125     `-fno-builtin'.
3126
3127     The formats are checked against the format features supported by
3128     GNU libc version 2.2.  These include all ISO C90 and C99 features,
3129     as well as features from the Single Unix Specification and some
3130     BSD and GNU extensions.  Other library implementations may not
3131     support all these features; GCC does not support warning about
3132     features that go beyond a particular library's limitations.
3133     However, if `-pedantic' is used with `-Wformat', warnings will be
3134     given about format features not in the selected standard version
3135     (but not for `strfmon' formats, since those are not in any version
3136     of the C standard).  *Note Options Controlling C Dialect: C
3137     Dialect Options.
3138
3139     Since `-Wformat' also checks for null format arguments for several
3140     functions, `-Wformat' also implies `-Wnonnull'.
3141
3142     `-Wformat' is included in `-Wall'.  For more control over some
3143     aspects of format checking, the options `-Wformat-y2k',
3144     `-Wno-format-extra-args', `-Wno-format-zero-length',
3145     `-Wformat-nonliteral', `-Wformat-security', and `-Wformat=2' are
3146     available, but are not included in `-Wall'.
3147
3148`-Wformat-y2k'
3149     If `-Wformat' is specified, also warn about `strftime' formats
3150     which may yield only a two-digit year.
3151
3152`-Wno-format-contains-nul'
3153     If `-Wformat' is specified, do not warn about format strings that
3154     contain NUL bytes.
3155
3156`-Wno-format-extra-args'
3157     If `-Wformat' is specified, do not warn about excess arguments to a
3158     `printf' or `scanf' format function.  The C standard specifies
3159     that such arguments are ignored.
3160
3161     Where the unused arguments lie between used arguments that are
3162     specified with `$' operand number specifications, normally
3163     warnings are still given, since the implementation could not know
3164     what type to pass to `va_arg' to skip the unused arguments.
3165     However, in the case of `scanf' formats, this option will suppress
3166     the warning if the unused arguments are all pointers, since the
3167     Single Unix Specification says that such unused arguments are
3168     allowed.
3169
3170`-Wno-format-zero-length (C and Objective-C only)'
3171     If `-Wformat' is specified, do not warn about zero-length formats.
3172     The C standard specifies that zero-length formats are allowed.
3173
3174`-Wformat-nonliteral'
3175     If `-Wformat' is specified, also warn if the format string is not a
3176     string literal and so cannot be checked, unless the format function
3177     takes its format arguments as a `va_list'.
3178
3179`-Wformat-security'
3180     If `-Wformat' is specified, also warn about uses of format
3181     functions that represent possible security problems.  At present,
3182     this warns about calls to `printf' and `scanf' functions where the
3183     format string is not a string literal and there are no format
3184     arguments, as in `printf (foo);'.  This may be a security hole if
3185     the format string came from untrusted input and contains `%n'.
3186     (This is currently a subset of what `-Wformat-nonliteral' warns
3187     about, but in future warnings may be added to `-Wformat-security'
3188     that are not included in `-Wformat-nonliteral'.)
3189
3190`-Wformat=2'
3191     Enable `-Wformat' plus format checks not included in `-Wformat'.
3192     Currently equivalent to `-Wformat -Wformat-nonliteral
3193     -Wformat-security -Wformat-y2k'.
3194
3195`-Wnonnull (C and Objective-C only)'
3196     Warn about passing a null pointer for arguments marked as
3197     requiring a non-null value by the `nonnull' function attribute.
3198
3199     `-Wnonnull' is included in `-Wall' and `-Wformat'.  It can be
3200     disabled with the `-Wno-nonnull' option.
3201
3202`-Winit-self (C, C++, Objective-C and Objective-C++ only)'
3203     Warn about uninitialized variables which are initialized with
3204     themselves.  Note this option can only be used with the
3205     `-Wuninitialized' option.
3206
3207     For example, GCC will warn about `i' being uninitialized in the
3208     following snippet only when `-Winit-self' has been specified:
3209          int f()
3210          {
3211            int i = i;
3212            return i;
3213          }
3214
3215`-Wimplicit-int (C and Objective-C only)'
3216     Warn when a declaration does not specify a type.  This warning is
3217     enabled by `-Wall'.
3218
3219`-Wimplicit-function-declaration (C and Objective-C only)'
3220     Give a warning whenever a function is used before being declared.
3221     In C99 mode (`-std=c99' or `-std=gnu99'), this warning is enabled
3222     by default and it is made into an error by `-pedantic-errors'.
3223     This warning is also enabled by `-Wall'.
3224
3225`-Wimplicit (C and Objective-C only)'
3226     Same as `-Wimplicit-int' and `-Wimplicit-function-declaration'.
3227     This warning is enabled by `-Wall'.
3228
3229`-Wignored-qualifiers (C and C++ only)'
3230     Warn if the return type of a function has a type qualifier such as
3231     `const'.  For ISO C such a type qualifier has no effect, since the
3232     value returned by a function is not an lvalue.  For C++, the
3233     warning is only emitted for scalar types or `void'.  ISO C
3234     prohibits qualified `void' return types on function definitions,
3235     so such return types always receive a warning even without this
3236     option.
3237
3238     This warning is also enabled by `-Wextra'.
3239
3240`-Wmain'
3241     Warn if the type of `main' is suspicious.  `main' should be a
3242     function with external linkage, returning int, taking either zero
3243     arguments, two, or three arguments of appropriate types.  This
3244     warning is enabled by default in C++ and is enabled by either
3245     `-Wall' or `-pedantic'.
3246
3247`-Wmissing-braces'
3248     Warn if an aggregate or union initializer is not fully bracketed.
3249     In the following example, the initializer for `a' is not fully
3250     bracketed, but that for `b' is fully bracketed.
3251
3252          int a[2][2] = { 0, 1, 2, 3 };
3253          int b[2][2] = { { 0, 1 }, { 2, 3 } };
3254
3255     This warning is enabled by `-Wall'.
3256
3257`-Wmissing-include-dirs (C, C++, Objective-C and Objective-C++ only)'
3258     Warn if a user-supplied include directory does not exist.
3259
3260`-Wparentheses'
3261     Warn if parentheses are omitted in certain contexts, such as when
3262     there is an assignment in a context where a truth value is
3263     expected, or when operators are nested whose precedence people
3264     often get confused about.
3265
3266     Also warn if a comparison like `x<=y<=z' appears; this is
3267     equivalent to `(x<=y ? 1 : 0) <= z', which is a different
3268     interpretation from that of ordinary mathematical notation.
3269
3270     Also warn about constructions where there may be confusion to which
3271     `if' statement an `else' branch belongs.  Here is an example of
3272     such a case:
3273
3274          {
3275            if (a)
3276              if (b)
3277                foo ();
3278            else
3279              bar ();
3280          }
3281
3282     In C/C++, every `else' branch belongs to the innermost possible
3283     `if' statement, which in this example is `if (b)'.  This is often
3284     not what the programmer expected, as illustrated in the above
3285     example by indentation the programmer chose.  When there is the
3286     potential for this confusion, GCC will issue a warning when this
3287     flag is specified.  To eliminate the warning, add explicit braces
3288     around the innermost `if' statement so there is no way the `else'
3289     could belong to the enclosing `if'.  The resulting code would look
3290     like this:
3291
3292          {
3293            if (a)
3294              {
3295                if (b)
3296                  foo ();
3297                else
3298                  bar ();
3299              }
3300          }
3301
3302     Also warn for dangerous uses of the ?: with omitted middle operand
3303     GNU extension. When the condition in the ?: operator is a boolean
3304     expression the omitted value will be always 1. Often the user
3305     expects it to be a value computed inside the conditional
3306     expression instead.
3307
3308     This warning is enabled by `-Wall'.
3309
3310`-Wsequence-point'
3311     Warn about code that may have undefined semantics because of
3312     violations of sequence point rules in the C and C++ standards.
3313
3314     The C and C++ standards defines the order in which expressions in
3315     a C/C++ program are evaluated in terms of "sequence points", which
3316     represent a partial ordering between the execution of parts of the
3317     program: those executed before the sequence point, and those
3318     executed after it.  These occur after the evaluation of a full
3319     expression (one which is not part of a larger expression), after
3320     the evaluation of the first operand of a `&&', `||', `? :' or `,'
3321     (comma) operator, before a function is called (but after the
3322     evaluation of its arguments and the expression denoting the called
3323     function), and in certain other places.  Other than as expressed
3324     by the sequence point rules, the order of evaluation of
3325     subexpressions of an expression is not specified.  All these rules
3326     describe only a partial order rather than a total order, since,
3327     for example, if two functions are called within one expression
3328     with no sequence point between them, the order in which the
3329     functions are called is not specified.  However, the standards
3330     committee have ruled that function calls do not overlap.
3331
3332     It is not specified when between sequence points modifications to
3333     the values of objects take effect.  Programs whose behavior
3334     depends on this have undefined behavior; the C and C++ standards
3335     specify that "Between the previous and next sequence point an
3336     object shall have its stored value modified at most once by the
3337     evaluation of an expression.  Furthermore, the prior value shall
3338     be read only to determine the value to be stored.".  If a program
3339     breaks these rules, the results on any particular implementation
3340     are entirely unpredictable.
3341
3342     Examples of code with undefined behavior are `a = a++;', `a[n] =
3343     b[n++]' and `a[i++] = i;'.  Some more complicated cases are not
3344     diagnosed by this option, and it may give an occasional false
3345     positive result, but in general it has been found fairly effective
3346     at detecting this sort of problem in programs.
3347
3348     The standard is worded confusingly, therefore there is some debate
3349     over the precise meaning of the sequence point rules in subtle
3350     cases.  Links to discussions of the problem, including proposed
3351     formal definitions, may be found on the GCC readings page, at
3352     `http://gcc.gnu.org/readings.html'.
3353
3354     This warning is enabled by `-Wall' for C and C++.
3355
3356`-Wreturn-type'
3357     Warn whenever a function is defined with a return-type that
3358     defaults to `int'.  Also warn about any `return' statement with no
3359     return-value in a function whose return-type is not `void'
3360     (falling off the end of the function body is considered returning
3361     without a value), and about a `return' statement with an
3362     expression in a function whose return-type is `void'.
3363
3364     For C++, a function without return type always produces a
3365     diagnostic message, even when `-Wno-return-type' is specified.
3366     The only exceptions are `main' and functions defined in system
3367     headers.
3368
3369     This warning is enabled by `-Wall'.
3370
3371`-Wswitch'
3372     Warn whenever a `switch' statement has an index of enumerated type
3373     and lacks a `case' for one or more of the named codes of that
3374     enumeration.  (The presence of a `default' label prevents this
3375     warning.)  `case' labels outside the enumeration range also
3376     provoke warnings when this option is used (even if there is a
3377     `default' label).  This warning is enabled by `-Wall'.
3378
3379`-Wswitch-default'
3380     Warn whenever a `switch' statement does not have a `default' case.
3381
3382`-Wswitch-enum'
3383     Warn whenever a `switch' statement has an index of enumerated type
3384     and lacks a `case' for one or more of the named codes of that
3385     enumeration.  `case' labels outside the enumeration range also
3386     provoke warnings when this option is used.  The only difference
3387     between `-Wswitch' and this option is that this option gives a
3388     warning about an omitted enumeration code even if there is a
3389     `default' label.
3390
3391`-Wsync-nand (C and C++ only)'
3392     Warn when `__sync_fetch_and_nand' and `__sync_nand_and_fetch'
3393     built-in functions are used.  These functions changed semantics in
3394     GCC 4.4.
3395
3396`-Wtrigraphs'
3397     Warn if any trigraphs are encountered that might change the
3398     meaning of the program (trigraphs within comments are not warned
3399     about).  This warning is enabled by `-Wall'.
3400
3401`-Wunused-but-set-parameter'
3402     Warn whenever a function parameter is assigned to, but otherwise
3403     unused (aside from its declaration).
3404
3405     To suppress this warning use the `unused' attribute (*note
3406     Variable Attributes::).
3407
3408     This warning is also enabled by `-Wunused' together with `-Wextra'.
3409
3410`-Wunused-but-set-variable'
3411     Warn whenever a local variable is assigned to, but otherwise unused
3412     (aside from its declaration).  This warning is enabled by `-Wall'.
3413
3414     To suppress this warning use the `unused' attribute (*note
3415     Variable Attributes::).
3416
3417     This warning is also enabled by `-Wunused', which is enabled by
3418     `-Wall'.
3419
3420`-Wunused-function'
3421     Warn whenever a static function is declared but not defined or a
3422     non-inline static function is unused.  This warning is enabled by
3423     `-Wall'.
3424
3425`-Wunused-label'
3426     Warn whenever a label is declared but not used.  This warning is
3427     enabled by `-Wall'.
3428
3429     To suppress this warning use the `unused' attribute (*note
3430     Variable Attributes::).
3431
3432`-Wunused-parameter'
3433     Warn whenever a function parameter is unused aside from its
3434     declaration.
3435
3436     To suppress this warning use the `unused' attribute (*note
3437     Variable Attributes::).
3438
3439`-Wno-unused-result'
3440     Do not warn if a caller of a function marked with attribute
3441     `warn_unused_result' (*note Variable Attributes::) does not use
3442     its return value. The default is `-Wunused-result'.
3443
3444`-Wunused-variable'
3445     Warn whenever a local variable or non-constant static variable is
3446     unused aside from its declaration.  This warning is enabled by
3447     `-Wall'.
3448
3449     To suppress this warning use the `unused' attribute (*note
3450     Variable Attributes::).
3451
3452`-Wunused-value'
3453     Warn whenever a statement computes a result that is explicitly not
3454     used. To suppress this warning cast the unused expression to
3455     `void'. This includes an expression-statement or the left-hand
3456     side of a comma expression that contains no side effects. For
3457     example, an expression such as `x[i,j]' will cause a warning, while
3458     `x[(void)i,j]' will not.
3459
3460     This warning is enabled by `-Wall'.
3461
3462`-Wunused'
3463     All the above `-Wunused' options combined.
3464
3465     In order to get a warning about an unused function parameter, you
3466     must either specify `-Wextra -Wunused' (note that `-Wall' implies
3467     `-Wunused'), or separately specify `-Wunused-parameter'.
3468
3469`-Wuninitialized'
3470     Warn if an automatic variable is used without first being
3471     initialized or if a variable may be clobbered by a `setjmp' call.
3472     In C++, warn if a non-static reference or non-static `const' member
3473     appears in a class without constructors.
3474
3475     If you want to warn about code which uses the uninitialized value
3476     of the variable in its own initializer, use the `-Winit-self'
3477     option.
3478
3479     These warnings occur for individual uninitialized or clobbered
3480     elements of structure, union or array variables as well as for
3481     variables which are uninitialized or clobbered as a whole.  They do
3482     not occur for variables or elements declared `volatile'.  Because
3483     these warnings depend on optimization, the exact variables or
3484     elements for which there are warnings will depend on the precise
3485     optimization options and version of GCC used.
3486
3487     Note that there may be no warning about a variable that is used
3488     only to compute a value that itself is never used, because such
3489     computations may be deleted by data flow analysis before the
3490     warnings are printed.
3491
3492     These warnings are made optional because GCC is not smart enough
3493     to see all the reasons why the code might be correct despite
3494     appearing to have an error.  Here is one example of how this can
3495     happen:
3496
3497          {
3498            int x;
3499            switch (y)
3500              {
3501              case 1: x = 1;
3502                break;
3503              case 2: x = 4;
3504                break;
3505              case 3: x = 5;
3506              }
3507            foo (x);
3508          }
3509
3510     If the value of `y' is always 1, 2 or 3, then `x' is always
3511     initialized, but GCC doesn't know this.  Here is another common
3512     case:
3513
3514          {
3515            int save_y;
3516            if (change_y) save_y = y, y = new_y;
3517            ...
3518            if (change_y) y = save_y;
3519          }
3520
3521     This has no bug because `save_y' is used only if it is set.
3522
3523     This option also warns when a non-volatile automatic variable
3524     might be changed by a call to `longjmp'.  These warnings as well
3525     are possible only in optimizing compilation.
3526
3527     The compiler sees only the calls to `setjmp'.  It cannot know
3528     where `longjmp' will be called; in fact, a signal handler could
3529     call it at any point in the code.  As a result, you may get a
3530     warning even when there is in fact no problem because `longjmp'
3531     cannot in fact be called at the place which would cause a problem.
3532
3533     Some spurious warnings can be avoided if you declare all the
3534     functions you use that never return as `noreturn'.  *Note Function
3535     Attributes::.
3536
3537     This warning is enabled by `-Wall' or `-Wextra'.
3538
3539`-Wunknown-pragmas'
3540     Warn when a #pragma directive is encountered which is not
3541     understood by GCC.  If this command line option is used, warnings
3542     will even be issued for unknown pragmas in system header files.
3543     This is not the case if the warnings were only enabled by the
3544     `-Wall' command line option.
3545
3546`-Wno-pragmas'
3547     Do not warn about misuses of pragmas, such as incorrect parameters,
3548     invalid syntax, or conflicts between pragmas.  See also
3549     `-Wunknown-pragmas'.
3550
3551`-Wstrict-aliasing'
3552     This option is only active when `-fstrict-aliasing' is active.  It
3553     warns about code which might break the strict aliasing rules that
3554     the compiler is using for optimization.  The warning does not
3555     catch all cases, but does attempt to catch the more common
3556     pitfalls.  It is included in `-Wall'.  It is equivalent to
3557     `-Wstrict-aliasing=3'
3558
3559`-Wstrict-aliasing=n'
3560     This option is only active when `-fstrict-aliasing' is active.  It
3561     warns about code which might break the strict aliasing rules that
3562     the compiler is using for optimization.  Higher levels correspond
3563     to higher accuracy (fewer false positives).  Higher levels also
3564     correspond to more effort, similar to the way -O works.
3565     `-Wstrict-aliasing' is equivalent to `-Wstrict-aliasing=n', with
3566     n=3.
3567
3568     Level 1: Most aggressive, quick, least accurate.  Possibly useful
3569     when higher levels do not warn but -fstrict-aliasing still breaks
3570     the code, as it has very few false negatives.  However, it has
3571     many false positives.  Warns for all pointer conversions between
3572     possibly incompatible types, even if never dereferenced.  Runs in
3573     the frontend only.
3574
3575     Level 2: Aggressive, quick, not too precise.  May still have many
3576     false positives (not as many as level 1 though), and few false
3577     negatives (but possibly more than level 1).  Unlike level 1, it
3578     only warns when an address is taken.  Warns about incomplete
3579     types.  Runs in the frontend only.
3580
3581     Level 3 (default for `-Wstrict-aliasing'): Should have very few
3582     false positives and few false negatives.  Slightly slower than
3583     levels 1 or 2 when optimization is enabled.  Takes care of the
3584     common pun+dereference pattern in the frontend:
3585     `*(int*)&some_float'.  If optimization is enabled, it also runs in
3586     the backend, where it deals with multiple statement cases using
3587     flow-sensitive points-to information.  Only warns when the
3588     converted pointer is dereferenced.  Does not warn about incomplete
3589     types.
3590
3591`-Wstrict-overflow'
3592`-Wstrict-overflow=N'
3593     This option is only active when `-fstrict-overflow' is active.  It
3594     warns about cases where the compiler optimizes based on the
3595     assumption that signed overflow does not occur.  Note that it does
3596     not warn about all cases where the code might overflow: it only
3597     warns about cases where the compiler implements some optimization.
3598     Thus this warning depends on the optimization level.
3599
3600     An optimization which assumes that signed overflow does not occur
3601     is perfectly safe if the values of the variables involved are such
3602     that overflow never does, in fact, occur.  Therefore this warning
3603     can easily give a false positive: a warning about code which is not
3604     actually a problem.  To help focus on important issues, several
3605     warning levels are defined.  No warnings are issued for the use of
3606     undefined signed overflow when estimating how many iterations a
3607     loop will require, in particular when determining whether a loop
3608     will be executed at all.
3609
3610    `-Wstrict-overflow=1'
3611          Warn about cases which are both questionable and easy to
3612          avoid.  For example: `x + 1 > x'; with `-fstrict-overflow',
3613          the compiler will simplify this to `1'.  This level of
3614          `-Wstrict-overflow' is enabled by `-Wall'; higher levels are
3615          not, and must be explicitly requested.
3616
3617    `-Wstrict-overflow=2'
3618          Also warn about other cases where a comparison is simplified
3619          to a constant.  For example: `abs (x) >= 0'.  This can only be
3620          simplified when `-fstrict-overflow' is in effect, because
3621          `abs (INT_MIN)' overflows to `INT_MIN', which is less than
3622          zero.  `-Wstrict-overflow' (with no level) is the same as
3623          `-Wstrict-overflow=2'.
3624
3625    `-Wstrict-overflow=3'
3626          Also warn about other cases where a comparison is simplified.
3627          For example: `x + 1 > 1' will be simplified to `x > 0'.
3628
3629    `-Wstrict-overflow=4'
3630          Also warn about other simplifications not covered by the
3631          above cases.  For example: `(x * 10) / 5' will be simplified
3632          to `x * 2'.
3633
3634    `-Wstrict-overflow=5'
3635          Also warn about cases where the compiler reduces the
3636          magnitude of a constant involved in a comparison.  For
3637          example: `x + 2 > y' will be simplified to `x + 1 >= y'.
3638          This is reported only at the highest warning level because
3639          this simplification applies to many comparisons, so this
3640          warning level will give a very large number of false
3641          positives.
3642
3643`-Wsuggest-attribute=[pure|const|noreturn]'
3644     Warn for cases where adding an attribute may be beneficial. The
3645     attributes currently supported are listed below.
3646
3647    `-Wsuggest-attribute=pure'
3648    `-Wsuggest-attribute=const'
3649    `-Wsuggest-attribute=noreturn'
3650          Warn about functions which might be candidates for attributes
3651          `pure', `const' or `noreturn'.  The compiler only warns for
3652          functions visible in other compilation units or (in the case
3653          of `pure' and `const') if it cannot prove that the function
3654          returns normally. A function returns normally if it doesn't
3655          contain an infinite loop nor returns abnormally by throwing,
3656          calling `abort()' or trapping.  This analysis requires option
3657          `-fipa-pure-const', which is enabled by default at `-O' and
3658          higher.  Higher optimization levels improve the accuracy of
3659          the analysis.
3660
3661`-Warray-bounds'
3662     This option is only active when `-ftree-vrp' is active (default
3663     for `-O2' and above). It warns about subscripts to arrays that are
3664     always out of bounds. This warning is enabled by `-Wall'.
3665
3666`-Wno-div-by-zero'
3667     Do not warn about compile-time integer division by zero.  Floating
3668     point division by zero is not warned about, as it can be a
3669     legitimate way of obtaining infinities and NaNs.
3670
3671`-Wsystem-headers'
3672     Print warning messages for constructs found in system header files.
3673     Warnings from system headers are normally suppressed, on the
3674     assumption that they usually do not indicate real problems and
3675     would only make the compiler output harder to read.  Using this
3676     command line option tells GCC to emit warnings from system headers
3677     as if they occurred in user code.  However, note that using
3678     `-Wall' in conjunction with this option will _not_ warn about
3679     unknown pragmas in system headers--for that, `-Wunknown-pragmas'
3680     must also be used.
3681
3682`-Wtrampolines'
3683     Warn about trampolines generated for pointers to nested functions.
3684
3685     A trampoline is a small piece of data or code that is created at
3686     run  time on the stack when the address of a nested function is
3687     taken, and  is used to call the nested function indirectly.  For
3688     some targets, it  is made up of data only and thus requires no
3689     special treatment.  But,  for most targets, it is made up of code
3690     and thus requires the stack  to be made executable in order for
3691     the program to work properly.
3692
3693`-Wno-poison-system-directories'
3694     Do not warn for `-I' or `-L' options using system directories such
3695     as `/usr/include' when cross compiling.  This option is intended
3696     for use in chroot environments when such directories contain the
3697     correct headers and libraries for the target system rather than
3698     the host.
3699
3700`-Wfloat-equal'
3701     Warn if floating point values are used in equality comparisons.
3702
3703     The idea behind this is that sometimes it is convenient (for the
3704     programmer) to consider floating-point values as approximations to
3705     infinitely precise real numbers.  If you are doing this, then you
3706     need to compute (by analyzing the code, or in some other way) the
3707     maximum or likely maximum error that the computation introduces,
3708     and allow for it when performing comparisons (and when producing
3709     output, but that's a different problem).  In particular, instead
3710     of testing for equality, you would check to see whether the two
3711     values have ranges that overlap; and this is done with the
3712     relational operators, so equality comparisons are probably
3713     mistaken.
3714
3715`-Wtraditional (C and Objective-C only)'
3716     Warn about certain constructs that behave differently in
3717     traditional and ISO C.  Also warn about ISO C constructs that have
3718     no traditional C equivalent, and/or problematic constructs which
3719     should be avoided.
3720
3721        * Macro parameters that appear within string literals in the
3722          macro body.  In traditional C macro replacement takes place
3723          within string literals, but does not in ISO C.
3724
3725        * In traditional C, some preprocessor directives did not exist.
3726          Traditional preprocessors would only consider a line to be a
3727          directive if the `#' appeared in column 1 on the line.
3728          Therefore `-Wtraditional' warns about directives that
3729          traditional C understands but would ignore because the `#'
3730          does not appear as the first character on the line.  It also
3731          suggests you hide directives like `#pragma' not understood by
3732          traditional C by indenting them.  Some traditional
3733          implementations would not recognize `#elif', so it suggests
3734          avoiding it altogether.
3735
3736        * A function-like macro that appears without arguments.
3737
3738        * The unary plus operator.
3739
3740        * The `U' integer constant suffix, or the `F' or `L' floating
3741          point constant suffixes.  (Traditional C does support the `L'
3742          suffix on integer constants.)  Note, these suffixes appear in
3743          macros defined in the system headers of most modern systems,
3744          e.g. the `_MIN'/`_MAX' macros in `<limits.h>'.  Use of these
3745          macros in user code might normally lead to spurious warnings,
3746          however GCC's integrated preprocessor has enough context to
3747          avoid warning in these cases.
3748
3749        * A function declared external in one block and then used after
3750          the end of the block.
3751
3752        * A `switch' statement has an operand of type `long'.
3753
3754        * A non-`static' function declaration follows a `static' one.
3755          This construct is not accepted by some traditional C
3756          compilers.
3757
3758        * The ISO type of an integer constant has a different width or
3759          signedness from its traditional type.  This warning is only
3760          issued if the base of the constant is ten.  I.e. hexadecimal
3761          or octal values, which typically represent bit patterns, are
3762          not warned about.
3763
3764        * Usage of ISO string concatenation is detected.
3765
3766        * Initialization of automatic aggregates.
3767
3768        * Identifier conflicts with labels.  Traditional C lacks a
3769          separate namespace for labels.
3770
3771        * Initialization of unions.  If the initializer is zero, the
3772          warning is omitted.  This is done under the assumption that
3773          the zero initializer in user code appears conditioned on e.g.
3774          `__STDC__' to avoid missing initializer warnings and relies
3775          on default initialization to zero in the traditional C case.
3776
3777        * Conversions by prototypes between fixed/floating point values
3778          and vice versa.  The absence of these prototypes when
3779          compiling with traditional C would cause serious problems.
3780          This is a subset of the possible conversion warnings, for the
3781          full set use `-Wtraditional-conversion'.
3782
3783        * Use of ISO C style function definitions.  This warning
3784          intentionally is _not_ issued for prototype declarations or
3785          variadic functions because these ISO C features will appear
3786          in your code when using libiberty's traditional C
3787          compatibility macros, `PARAMS' and `VPARAMS'.  This warning
3788          is also bypassed for nested functions because that feature is
3789          already a GCC extension and thus not relevant to traditional
3790          C compatibility.
3791
3792`-Wtraditional-conversion (C and Objective-C only)'
3793     Warn if a prototype causes a type conversion that is different
3794     from what would happen to the same argument in the absence of a
3795     prototype.  This includes conversions of fixed point to floating
3796     and vice versa, and conversions changing the width or signedness
3797     of a fixed point argument except when the same as the default
3798     promotion.
3799
3800`-Wdeclaration-after-statement (C and Objective-C only)'
3801     Warn when a declaration is found after a statement in a block.
3802     This construct, known from C++, was introduced with ISO C99 and is
3803     by default allowed in GCC.  It is not supported by ISO C90 and was
3804     not supported by GCC versions before GCC 3.0.  *Note Mixed
3805     Declarations::.
3806
3807`-Wundef'
3808     Warn if an undefined identifier is evaluated in an `#if' directive.
3809
3810`-Wno-endif-labels'
3811     Do not warn whenever an `#else' or an `#endif' are followed by
3812     text.
3813
3814`-Wshadow'
3815     Warn whenever a local variable or type declaration shadows another
3816     variable, parameter, type, or class member (in C++), or whenever a
3817     built-in function is shadowed. Note that in C++, the compiler will
3818     not warn if a local variable shadows a struct/class/enum, but will
3819     warn if it shadows an explicit typedef.
3820
3821`-Wlarger-than=LEN'
3822     Warn whenever an object of larger than LEN bytes is defined.
3823
3824`-Wframe-larger-than=LEN'
3825     Warn if the size of a function frame is larger than LEN bytes.
3826     The computation done to determine the stack frame size is
3827     approximate and not conservative.  The actual requirements may be
3828     somewhat greater than LEN even if you do not get a warning.  In
3829     addition, any space allocated via `alloca', variable-length
3830     arrays, or related constructs is not included by the compiler when
3831     determining whether or not to issue a warning.
3832
3833`-Wunsafe-loop-optimizations'
3834     Warn if the loop cannot be optimized because the compiler could not
3835     assume anything on the bounds of the loop indices.  With
3836     `-funsafe-loop-optimizations' warn if the compiler made such
3837     assumptions.
3838
3839`-Wno-pedantic-ms-format (MinGW targets only)'
3840     Disables the warnings about non-ISO `printf' / `scanf' format
3841     width specifiers `I32', `I64', and `I' used on Windows targets
3842     depending on the MS runtime, when you are using the options
3843     `-Wformat' and `-pedantic' without gnu-extensions.
3844
3845`-Wpointer-arith'
3846     Warn about anything that depends on the "size of" a function type
3847     or of `void'.  GNU C assigns these types a size of 1, for
3848     convenience in calculations with `void *' pointers and pointers to
3849     functions.  In C++, warn also when an arithmetic operation involves
3850     `NULL'.  This warning is also enabled by `-pedantic'.
3851
3852`-Wtype-limits'
3853     Warn if a comparison is always true or always false due to the
3854     limited range of the data type, but do not warn for constant
3855     expressions.  For example, warn if an unsigned variable is
3856     compared against zero with `<' or `>='.  This warning is also
3857     enabled by `-Wextra'.
3858
3859`-Wbad-function-cast (C and Objective-C only)'
3860     Warn whenever a function call is cast to a non-matching type.  For
3861     example, warn if `int malloc()' is cast to `anything *'.
3862
3863`-Wc++-compat (C and Objective-C only)'
3864     Warn about ISO C constructs that are outside of the common subset
3865     of ISO C and ISO C++, e.g. request for implicit conversion from
3866     `void *' to a pointer to non-`void' type.
3867
3868`-Wc++0x-compat (C++ and Objective-C++ only)'
3869     Warn about C++ constructs whose meaning differs between ISO C++
3870     1998 and ISO C++ 200x, e.g., identifiers in ISO C++ 1998 that will
3871     become keywords in ISO C++ 200x.  This warning is enabled by
3872     `-Wall'.
3873
3874`-Wcast-qual'
3875     Warn whenever a pointer is cast so as to remove a type qualifier
3876     from the target type.  For example, warn if a `const char *' is
3877     cast to an ordinary `char *'.
3878
3879     Also warn when making a cast which introduces a type qualifier in
3880     an unsafe way.  For example, casting `char **' to `const char **'
3881     is unsafe, as in this example:
3882
3883            /* p is char ** value.  */
3884            const char **q = (const char **) p;
3885            /* Assignment of readonly string to const char * is OK.  */
3886            *q = "string";
3887            /* Now char** pointer points to read-only memory.  */
3888            **p = 'b';
3889
3890`-Wcast-align'
3891     Warn whenever a pointer is cast such that the required alignment
3892     of the target is increased.  For example, warn if a `char *' is
3893     cast to an `int *' on machines where integers can only be accessed
3894     at two- or four-byte boundaries.
3895
3896`-Wwrite-strings'
3897     When compiling C, give string constants the type `const
3898     char[LENGTH]' so that copying the address of one into a
3899     non-`const' `char *' pointer will get a warning.  These warnings
3900     will help you find at compile time code that can try to write into
3901     a string constant, but only if you have been very careful about
3902     using `const' in declarations and prototypes.  Otherwise, it will
3903     just be a nuisance. This is why we did not make `-Wall' request
3904     these warnings.
3905
3906     When compiling C++, warn about the deprecated conversion from
3907     string literals to `char *'.  This warning is enabled by default
3908     for C++ programs.
3909
3910`-Wclobbered'
3911     Warn for variables that might be changed by `longjmp' or `vfork'.
3912     This warning is also enabled by `-Wextra'.
3913
3914`-Wconversion'
3915     Warn for implicit conversions that may alter a value. This includes
3916     conversions between real and integer, like `abs (x)' when `x' is
3917     `double'; conversions between signed and unsigned, like `unsigned
3918     ui = -1'; and conversions to smaller types, like `sqrtf (M_PI)'.
3919     Do not warn for explicit casts like `abs ((int) x)' and `ui =
3920     (unsigned) -1', or if the value is not changed by the conversion
3921     like in `abs (2.0)'.  Warnings about conversions between signed
3922     and unsigned integers can be disabled by using
3923     `-Wno-sign-conversion'.
3924
3925     For C++, also warn for confusing overload resolution for
3926     user-defined conversions; and conversions that will never use a
3927     type conversion operator: conversions to `void', the same type, a
3928     base class or a reference to them. Warnings about conversions
3929     between signed and unsigned integers are disabled by default in
3930     C++ unless `-Wsign-conversion' is explicitly enabled.
3931
3932`-Wno-conversion-null (C++ and Objective-C++ only)'
3933     Do not warn for conversions between `NULL' and non-pointer types.
3934     `-Wconversion-null' is enabled by default.
3935
3936`-Wempty-body'
3937     Warn if an empty body occurs in an `if', `else' or `do while'
3938     statement.  This warning is also enabled by `-Wextra'.
3939
3940`-Wenum-compare'
3941     Warn about a comparison between values of different enum types. In
3942     C++ this warning is enabled by default.  In C this warning is
3943     enabled by `-Wall'.
3944
3945`-Wjump-misses-init (C, Objective-C only)'
3946     Warn if a `goto' statement or a `switch' statement jumps forward
3947     across the initialization of a variable, or jumps backward to a
3948     label after the variable has been initialized.  This only warns
3949     about variables which are initialized when they are declared.
3950     This warning is only supported for C and Objective C; in C++ this
3951     sort of branch is an error in any case.
3952
3953     `-Wjump-misses-init' is included in `-Wc++-compat'.  It can be
3954     disabled with the `-Wno-jump-misses-init' option.
3955
3956`-Wsign-compare'
3957     Warn when a comparison between signed and unsigned values could
3958     produce an incorrect result when the signed value is converted to
3959     unsigned.  This warning is also enabled by `-Wextra'; to get the
3960     other warnings of `-Wextra' without this warning, use `-Wextra
3961     -Wno-sign-compare'.
3962
3963`-Wsign-conversion'
3964     Warn for implicit conversions that may change the sign of an
3965     integer value, like assigning a signed integer expression to an
3966     unsigned integer variable. An explicit cast silences the warning.
3967     In C, this option is enabled also by `-Wconversion'.
3968
3969`-Waddress'
3970     Warn about suspicious uses of memory addresses. These include using
3971     the address of a function in a conditional expression, such as
3972     `void func(void); if (func)', and comparisons against the memory
3973     address of a string literal, such as `if (x == "abc")'.  Such uses
3974     typically indicate a programmer error: the address of a function
3975     always evaluates to true, so their use in a conditional usually
3976     indicate that the programmer forgot the parentheses in a function
3977     call; and comparisons against string literals result in unspecified
3978     behavior and are not portable in C, so they usually indicate that
3979     the programmer intended to use `strcmp'.  This warning is enabled
3980     by `-Wall'.
3981
3982`-Wlogical-op'
3983     Warn about suspicious uses of logical operators in expressions.
3984     This includes using logical operators in contexts where a bit-wise
3985     operator is likely to be expected.
3986
3987`-Waggregate-return'
3988     Warn if any functions that return structures or unions are defined
3989     or called.  (In languages where you can return an array, this also
3990     elicits a warning.)
3991
3992`-Wno-attributes'
3993     Do not warn if an unexpected `__attribute__' is used, such as
3994     unrecognized attributes, function attributes applied to variables,
3995     etc.  This will not stop errors for incorrect use of supported
3996     attributes.
3997
3998`-Wno-builtin-macro-redefined'
3999     Do not warn if certain built-in macros are redefined.  This
4000     suppresses warnings for redefinition of `__TIMESTAMP__',
4001     `__TIME__', `__DATE__', `__FILE__', and `__BASE_FILE__'.
4002
4003`-Wstrict-prototypes (C and Objective-C only)'
4004     Warn if a function is declared or defined without specifying the
4005     argument types.  (An old-style function definition is permitted
4006     without a warning if preceded by a declaration which specifies the
4007     argument types.)
4008
4009`-Wold-style-declaration (C and Objective-C only)'
4010     Warn for obsolescent usages, according to the C Standard, in a
4011     declaration. For example, warn if storage-class specifiers like
4012     `static' are not the first things in a declaration.  This warning
4013     is also enabled by `-Wextra'.
4014
4015`-Wold-style-definition (C and Objective-C only)'
4016     Warn if an old-style function definition is used.  A warning is
4017     given even if there is a previous prototype.
4018
4019`-Wmissing-parameter-type (C and Objective-C only)'
4020     A function parameter is declared without a type specifier in
4021     K&R-style functions:
4022
4023          void foo(bar) { }
4024
4025     This warning is also enabled by `-Wextra'.
4026
4027`-Wmissing-prototypes (C and Objective-C only)'
4028     Warn if a global function is defined without a previous prototype
4029     declaration.  This warning is issued even if the definition itself
4030     provides a prototype.  The aim is to detect global functions that
4031     fail to be declared in header files.
4032
4033`-Wmissing-declarations'
4034     Warn if a global function is defined without a previous
4035     declaration.  Do so even if the definition itself provides a
4036     prototype.  Use this option to detect global functions that are
4037     not declared in header files.  In C++, no warnings are issued for
4038     function templates, or for inline functions, or for functions in
4039     anonymous namespaces.
4040
4041`-Wmissing-field-initializers'
4042     Warn if a structure's initializer has some fields missing.  For
4043     example, the following code would cause such a warning, because
4044     `x.h' is implicitly zero:
4045
4046          struct s { int f, g, h; };
4047          struct s x = { 3, 4 };
4048
4049     This option does not warn about designated initializers, so the
4050     following modification would not trigger a warning:
4051
4052          struct s { int f, g, h; };
4053          struct s x = { .f = 3, .g = 4 };
4054
4055     This warning is included in `-Wextra'.  To get other `-Wextra'
4056     warnings without this one, use `-Wextra
4057     -Wno-missing-field-initializers'.
4058
4059`-Wmissing-format-attribute'
4060     Warn about function pointers which might be candidates for `format'
4061     attributes.  Note these are only possible candidates, not absolute
4062     ones.  GCC will guess that function pointers with `format'
4063     attributes that are used in assignment, initialization, parameter
4064     passing or return statements should have a corresponding `format'
4065     attribute in the resulting type.  I.e. the left-hand side of the
4066     assignment or initialization, the type of the parameter variable,
4067     or the return type of the containing function respectively should
4068     also have a `format' attribute to avoid the warning.
4069
4070     GCC will also warn about function definitions which might be
4071     candidates for `format' attributes.  Again, these are only
4072     possible candidates.  GCC will guess that `format' attributes
4073     might be appropriate for any function that calls a function like
4074     `vprintf' or `vscanf', but this might not always be the case, and
4075     some functions for which `format' attributes are appropriate may
4076     not be detected.
4077
4078`-Wno-multichar'
4079     Do not warn if a multicharacter constant (`'FOOF'') is used.
4080     Usually they indicate a typo in the user's code, as they have
4081     implementation-defined values, and should not be used in portable
4082     code.
4083
4084`-Wnormalized=<none|id|nfc|nfkc>'
4085     In ISO C and ISO C++, two identifiers are different if they are
4086     different sequences of characters.  However, sometimes when
4087     characters outside the basic ASCII character set are used, you can
4088     have two different character sequences that look the same.  To
4089     avoid confusion, the ISO 10646 standard sets out some
4090     "normalization rules" which when applied ensure that two sequences
4091     that look the same are turned into the same sequence.  GCC can
4092     warn you if you are using identifiers which have not been
4093     normalized; this option controls that warning.
4094
4095     There are four levels of warning that GCC supports.  The default is
4096     `-Wnormalized=nfc', which warns about any identifier which is not
4097     in the ISO 10646 "C" normalized form, "NFC".  NFC is the
4098     recommended form for most uses.
4099
4100     Unfortunately, there are some characters which ISO C and ISO C++
4101     allow in identifiers that when turned into NFC aren't allowable as
4102     identifiers.  That is, there's no way to use these symbols in
4103     portable ISO C or C++ and have all your identifiers in NFC.
4104     `-Wnormalized=id' suppresses the warning for these characters.  It
4105     is hoped that future versions of the standards involved will
4106     correct this, which is why this option is not the default.
4107
4108     You can switch the warning off for all characters by writing
4109     `-Wnormalized=none'.  You would only want to do this if you were
4110     using some other normalization scheme (like "D"), because
4111     otherwise you can easily create bugs that are literally impossible
4112     to see.
4113
4114     Some characters in ISO 10646 have distinct meanings but look
4115     identical in some fonts or display methodologies, especially once
4116     formatting has been applied.  For instance `\u207F', "SUPERSCRIPT
4117     LATIN SMALL LETTER N", will display just like a regular `n' which
4118     has been placed in a superscript.  ISO 10646 defines the "NFKC"
4119     normalization scheme to convert all these into a standard form as
4120     well, and GCC will warn if your code is not in NFKC if you use
4121     `-Wnormalized=nfkc'.  This warning is comparable to warning about
4122     every identifier that contains the letter O because it might be
4123     confused with the digit 0, and so is not the default, but may be
4124     useful as a local coding convention if the programming environment
4125     is unable to be fixed to display these characters distinctly.
4126
4127`-Wno-deprecated'
4128     Do not warn about usage of deprecated features.  *Note Deprecated
4129     Features::.
4130
4131`-Wno-deprecated-declarations'
4132     Do not warn about uses of functions (*note Function Attributes::),
4133     variables (*note Variable Attributes::), and types (*note Type
4134     Attributes::) marked as deprecated by using the `deprecated'
4135     attribute.
4136
4137`-Wno-overflow'
4138     Do not warn about compile-time overflow in constant expressions.
4139
4140`-Woverride-init (C and Objective-C only)'
4141     Warn if an initialized field without side effects is overridden
4142     when using designated initializers (*note Designated Initializers:
4143     Designated Inits.).
4144
4145     This warning is included in `-Wextra'.  To get other `-Wextra'
4146     warnings without this one, use `-Wextra -Wno-override-init'.
4147
4148`-Wpacked'
4149     Warn if a structure is given the packed attribute, but the packed
4150     attribute has no effect on the layout or size of the structure.
4151     Such structures may be mis-aligned for little benefit.  For
4152     instance, in this code, the variable `f.x' in `struct bar' will be
4153     misaligned even though `struct bar' does not itself have the
4154     packed attribute:
4155
4156          struct foo {
4157            int x;
4158            char a, b, c, d;
4159          } __attribute__((packed));
4160          struct bar {
4161            char z;
4162            struct foo f;
4163          };
4164
4165`-Wpacked-bitfield-compat'
4166     The 4.1, 4.2 and 4.3 series of GCC ignore the `packed' attribute
4167     on bit-fields of type `char'.  This has been fixed in GCC 4.4 but
4168     the change can lead to differences in the structure layout.  GCC
4169     informs you when the offset of such a field has changed in GCC 4.4.
4170     For example there is no longer a 4-bit padding between field `a'
4171     and `b' in this structure:
4172
4173          struct foo
4174          {
4175            char a:4;
4176            char b:8;
4177          } __attribute__ ((packed));
4178
4179     This warning is enabled by default.  Use
4180     `-Wno-packed-bitfield-compat' to disable this warning.
4181
4182`-Wpadded'
4183     Warn if padding is included in a structure, either to align an
4184     element of the structure or to align the whole structure.
4185     Sometimes when this happens it is possible to rearrange the fields
4186     of the structure to reduce the padding and so make the structure
4187     smaller.
4188
4189`-Wredundant-decls'
4190     Warn if anything is declared more than once in the same scope,
4191     even in cases where multiple declaration is valid and changes
4192     nothing.
4193
4194`-Wnested-externs (C and Objective-C only)'
4195     Warn if an `extern' declaration is encountered within a function.
4196
4197`-Winline'
4198     Warn if a function can not be inlined and it was declared as
4199     inline.  Even with this option, the compiler will not warn about
4200     failures to inline functions declared in system headers.
4201
4202     The compiler uses a variety of heuristics to determine whether or
4203     not to inline a function.  For example, the compiler takes into
4204     account the size of the function being inlined and the amount of
4205     inlining that has already been done in the current function.
4206     Therefore, seemingly insignificant changes in the source program
4207     can cause the warnings produced by `-Winline' to appear or
4208     disappear.
4209
4210`-Wno-invalid-offsetof (C++ and Objective-C++ only)'
4211     Suppress warnings from applying the `offsetof' macro to a non-POD
4212     type.  According to the 1998 ISO C++ standard, applying `offsetof'
4213     to a non-POD type is undefined.  In existing C++ implementations,
4214     however, `offsetof' typically gives meaningful results even when
4215     applied to certain kinds of non-POD types. (Such as a simple
4216     `struct' that fails to be a POD type only by virtue of having a
4217     constructor.)  This flag is for users who are aware that they are
4218     writing nonportable code and who have deliberately chosen to
4219     ignore the warning about it.
4220
4221     The restrictions on `offsetof' may be relaxed in a future version
4222     of the C++ standard.
4223
4224`-Wno-int-to-pointer-cast'
4225     Suppress warnings from casts to pointer type of an integer of a
4226     different size. In C++, casting to a pointer type of smaller size
4227     is an error. `Wint-to-pointer-cast' is enabled by default.
4228
4229`-Wno-pointer-to-int-cast (C and Objective-C only)'
4230     Suppress warnings from casts from a pointer to an integer type of a
4231     different size.
4232
4233`-Winvalid-pch'
4234     Warn if a precompiled header (*note Precompiled Headers::) is
4235     found in the search path but can't be used.
4236
4237`-Wlong-long'
4238     Warn if `long long' type is used.  This is enabled by either
4239     `-pedantic' or `-Wtraditional' in ISO C90 and C++98 modes.  To
4240     inhibit the warning messages, use `-Wno-long-long'.
4241
4242`-Wvariadic-macros'
4243     Warn if variadic macros are used in pedantic ISO C90 mode, or the
4244     GNU alternate syntax when in pedantic ISO C99 mode.  This is
4245     default.  To inhibit the warning messages, use
4246     `-Wno-variadic-macros'.
4247
4248`-Wvla'
4249     Warn if variable length array is used in the code.  `-Wno-vla'
4250     will prevent the `-pedantic' warning of the variable length array.
4251
4252`-Wvolatile-register-var'
4253     Warn if a register variable is declared volatile.  The volatile
4254     modifier does not inhibit all optimizations that may eliminate
4255     reads and/or writes to register variables.  This warning is
4256     enabled by `-Wall'.
4257
4258`-Wdisabled-optimization'
4259     Warn if a requested optimization pass is disabled.  This warning
4260     does not generally indicate that there is anything wrong with your
4261     code; it merely indicates that GCC's optimizers were unable to
4262     handle the code effectively.  Often, the problem is that your code
4263     is too big or too complex; GCC will refuse to optimize programs
4264     when the optimization itself is likely to take inordinate amounts
4265     of time.
4266
4267`-Wpointer-sign (C and Objective-C only)'
4268     Warn for pointer argument passing or assignment with different
4269     signedness.  This option is only supported for C and Objective-C.
4270     It is implied by `-Wall' and by `-pedantic', which can be disabled
4271     with `-Wno-pointer-sign'.
4272
4273`-Wstack-protector'
4274     This option is only active when `-fstack-protector' is active.  It
4275     warns about functions that will not be protected against stack
4276     smashing.
4277
4278`-Wno-mudflap'
4279     Suppress warnings about constructs that cannot be instrumented by
4280     `-fmudflap'.
4281
4282`-Woverlength-strings'
4283     Warn about string constants which are longer than the "minimum
4284     maximum" length specified in the C standard.  Modern compilers
4285     generally allow string constants which are much longer than the
4286     standard's minimum limit, but very portable programs should avoid
4287     using longer strings.
4288
4289     The limit applies _after_ string constant concatenation, and does
4290     not count the trailing NUL.  In C90, the limit was 509 characters;
4291     in C99, it was raised to 4095.  C++98 does not specify a normative
4292     minimum maximum, so we do not diagnose overlength strings in C++.
4293
4294     This option is implied by `-pedantic', and can be disabled with
4295     `-Wno-overlength-strings'.
4296
4297`-Wunsuffixed-float-constants (C and Objective-C only)'
4298     GCC will issue a warning for any floating constant that does not
4299     have a suffix.  When used together with `-Wsystem-headers' it will
4300     warn about such constants in system header files.  This can be
4301     useful when preparing code to use with the `FLOAT_CONST_DECIMAL64'
4302     pragma from the decimal floating-point extension to C99.
4303
4304
4305File: gcc.info,  Node: Debugging Options,  Next: Optimize Options,  Prev: Warning Options,  Up: Invoking GCC
4306
43073.9 Options for Debugging Your Program or GCC
4308=============================================
4309
4310GCC has various special options that are used for debugging either your
4311program or GCC:
4312
4313`-g'
4314     Produce debugging information in the operating system's native
4315     format (stabs, COFF, XCOFF, or DWARF 2).  GDB can work with this
4316     debugging information.
4317
4318     On most systems that use stabs format, `-g' enables use of extra
4319     debugging information that only GDB can use; this extra information
4320     makes debugging work better in GDB but will probably make other
4321     debuggers crash or refuse to read the program.  If you want to
4322     control for certain whether to generate the extra information, use
4323     `-gstabs+', `-gstabs', `-gxcoff+', `-gxcoff', or `-gvms' (see
4324     below).
4325
4326     GCC allows you to use `-g' with `-O'.  The shortcuts taken by
4327     optimized code may occasionally produce surprising results: some
4328     variables you declared may not exist at all; flow of control may
4329     briefly move where you did not expect it; some statements may not
4330     be executed because they compute constant results or their values
4331     were already at hand; some statements may execute in different
4332     places because they were moved out of loops.
4333
4334     Nevertheless it proves possible to debug optimized output.  This
4335     makes it reasonable to use the optimizer for programs that might
4336     have bugs.
4337
4338     The following options are useful when GCC is generated with the
4339     capability for more than one debugging format.
4340
4341`-ggdb'
4342     Produce debugging information for use by GDB.  This means to use
4343     the most expressive format available (DWARF 2, stabs, or the
4344     native format if neither of those are supported), including GDB
4345     extensions if at all possible.
4346
4347`-gstabs'
4348     Produce debugging information in stabs format (if that is
4349     supported), without GDB extensions.  This is the format used by
4350     DBX on most BSD systems.  On MIPS, Alpha and System V Release 4
4351     systems this option produces stabs debugging output which is not
4352     understood by DBX or SDB.  On System V Release 4 systems this
4353     option requires the GNU assembler.
4354
4355`-feliminate-unused-debug-symbols'
4356     Produce debugging information in stabs format (if that is
4357     supported), for only symbols that are actually used.
4358
4359`-femit-class-debug-always'
4360     Instead of emitting debugging information for a C++ class in only
4361     one object file, emit it in all object files using the class.
4362     This option should be used only with debuggers that are unable to
4363     handle the way GCC normally emits debugging information for
4364     classes because using this option will increase the size of
4365     debugging information by as much as a factor of two.
4366
4367`-gstabs+'
4368     Produce debugging information in stabs format (if that is
4369     supported), using GNU extensions understood only by the GNU
4370     debugger (GDB).  The use of these extensions is likely to make
4371     other debuggers crash or refuse to read the program.
4372
4373`-gcoff'
4374     Produce debugging information in COFF format (if that is
4375     supported).  This is the format used by SDB on most System V
4376     systems prior to System V Release 4.
4377
4378`-gxcoff'
4379     Produce debugging information in XCOFF format (if that is
4380     supported).  This is the format used by the DBX debugger on IBM
4381     RS/6000 systems.
4382
4383`-gxcoff+'
4384     Produce debugging information in XCOFF format (if that is
4385     supported), using GNU extensions understood only by the GNU
4386     debugger (GDB).  The use of these extensions is likely to make
4387     other debuggers crash or refuse to read the program, and may cause
4388     assemblers other than the GNU assembler (GAS) to fail with an
4389     error.
4390
4391`-gdwarf-VERSION'
4392     Produce debugging information in DWARF format (if that is
4393     supported).  This is the format used by DBX on IRIX 6.  The value
4394     of VERSION may be either 2, 3 or 4; the default version is 2.
4395
4396     Note that with DWARF version 2 some ports require, and will always
4397     use, some non-conflicting DWARF 3 extensions in the unwind tables.
4398
4399     Version 4 may require GDB 7.0 and `-fvar-tracking-assignments' for
4400     maximum benefit.
4401
4402`-gstrict-dwarf'
4403     Disallow using extensions of later DWARF standard version than
4404     selected with `-gdwarf-VERSION'.  On most targets using
4405     non-conflicting DWARF extensions from later standard versions is
4406     allowed.
4407
4408`-gno-strict-dwarf'
4409     Allow using extensions of later DWARF standard version than
4410     selected with `-gdwarf-VERSION'.
4411
4412`-gvms'
4413     Produce debugging information in VMS debug format (if that is
4414     supported).  This is the format used by DEBUG on VMS systems.
4415
4416`-gLEVEL'
4417`-ggdbLEVEL'
4418`-gstabsLEVEL'
4419`-gcoffLEVEL'
4420`-gxcoffLEVEL'
4421`-gvmsLEVEL'
4422     Request debugging information and also use LEVEL to specify how
4423     much information.  The default level is 2.
4424
4425     Level 0 produces no debug information at all.  Thus, `-g0' negates
4426     `-g'.
4427
4428     Level 1 produces minimal information, enough for making backtraces
4429     in parts of the program that you don't plan to debug.  This
4430     includes descriptions of functions and external variables, but no
4431     information about local variables and no line numbers.
4432
4433     Level 3 includes extra information, such as all the macro
4434     definitions present in the program.  Some debuggers support macro
4435     expansion when you use `-g3'.
4436
4437     `-gdwarf-2' does not accept a concatenated debug level, because
4438     GCC used to support an option `-gdwarf' that meant to generate
4439     debug information in version 1 of the DWARF format (which is very
4440     different from version 2), and it would have been too confusing.
4441     That debug format is long obsolete, but the option cannot be
4442     changed now.  Instead use an additional `-gLEVEL' option to change
4443     the debug level for DWARF.
4444
4445`-gtoggle'
4446     Turn off generation of debug info, if leaving out this option
4447     would have generated it, or turn it on at level 2 otherwise.  The
4448     position of this argument in the command line does not matter, it
4449     takes effect after all other options are processed, and it does so
4450     only once, no matter how many times it is given.  This is mainly
4451     intended to be used with `-fcompare-debug'.
4452
4453`-fdump-final-insns[=FILE]'
4454     Dump the final internal representation (RTL) to FILE.  If the
4455     optional argument is omitted (or if FILE is `.'), the name of the
4456     dump file will be determined by appending `.gkd' to the
4457     compilation output file name.
4458
4459`-fcompare-debug[=OPTS]'
4460     If no error occurs during compilation, run the compiler a second
4461     time, adding OPTS and `-fcompare-debug-second' to the arguments
4462     passed to the second compilation.  Dump the final internal
4463     representation in both compilations, and print an error if they
4464     differ.
4465
4466     If the equal sign is omitted, the default `-gtoggle' is used.
4467
4468     The environment variable `GCC_COMPARE_DEBUG', if defined, non-empty
4469     and nonzero, implicitly enables `-fcompare-debug'.  If
4470     `GCC_COMPARE_DEBUG' is defined to a string starting with a dash,
4471     then it is used for OPTS, otherwise the default `-gtoggle' is used.
4472
4473     `-fcompare-debug=', with the equal sign but without OPTS, is
4474     equivalent to `-fno-compare-debug', which disables the dumping of
4475     the final representation and the second compilation, preventing
4476     even `GCC_COMPARE_DEBUG' from taking effect.
4477
4478     To verify full coverage during `-fcompare-debug' testing, set
4479     `GCC_COMPARE_DEBUG' to say `-fcompare-debug-not-overridden', which
4480     GCC will reject as an invalid option in any actual compilation
4481     (rather than preprocessing, assembly or linking).  To get just a
4482     warning, setting `GCC_COMPARE_DEBUG' to `-w%n-fcompare-debug not
4483     overridden' will do.
4484
4485`-fcompare-debug-second'
4486     This option is implicitly passed to the compiler for the second
4487     compilation requested by `-fcompare-debug', along with options to
4488     silence warnings, and omitting other options that would cause
4489     side-effect compiler outputs to files or to the standard output.
4490     Dump files and preserved temporary files are renamed so as to
4491     contain the `.gk' additional extension during the second
4492     compilation, to avoid overwriting those generated by the first.
4493
4494     When this option is passed to the compiler driver, it causes the
4495     _first_ compilation to be skipped, which makes it useful for little
4496     other than debugging the compiler proper.
4497
4498`-feliminate-dwarf2-dups'
4499     Compress DWARF2 debugging information by eliminating duplicated
4500     information about each symbol.  This option only makes sense when
4501     generating DWARF2 debugging information with `-gdwarf-2'.
4502
4503`-femit-struct-debug-baseonly'
4504     Emit debug information for struct-like types only when the base
4505     name of the compilation source file matches the base name of file
4506     in which the struct was defined.
4507
4508     This option substantially reduces the size of debugging
4509     information, but at significant potential loss in type information
4510     to the debugger.  See `-femit-struct-debug-reduced' for a less
4511     aggressive option.  See `-femit-struct-debug-detailed' for more
4512     detailed control.
4513
4514     This option works only with DWARF 2.
4515
4516`-femit-struct-debug-reduced'
4517     Emit debug information for struct-like types only when the base
4518     name of the compilation source file matches the base name of file
4519     in which the type was defined, unless the struct is a template or
4520     defined in a system header.
4521
4522     This option significantly reduces the size of debugging
4523     information, with some potential loss in type information to the
4524     debugger.  See `-femit-struct-debug-baseonly' for a more
4525     aggressive option.  See `-femit-struct-debug-detailed' for more
4526     detailed control.
4527
4528     This option works only with DWARF 2.
4529
4530`-femit-struct-debug-detailed[=SPEC-LIST]'
4531     Specify the struct-like types for which the compiler will generate
4532     debug information.  The intent is to reduce duplicate struct debug
4533     information between different object files within the same program.
4534
4535     This option is a detailed version of `-femit-struct-debug-reduced'
4536     and `-femit-struct-debug-baseonly', which will serve for most
4537     needs.
4538
4539     A specification has the syntax
4540     [`dir:'|`ind:'][`ord:'|`gen:'](`any'|`sys'|`base'|`none')
4541
4542     The optional first word limits the specification to structs that
4543     are used directly (`dir:') or used indirectly (`ind:').  A struct
4544     type is used directly when it is the type of a variable, member.
4545     Indirect uses arise through pointers to structs.  That is, when
4546     use of an incomplete struct would be legal, the use is indirect.
4547     An example is `struct one direct; struct two * indirect;'.
4548
4549     The optional second word limits the specification to ordinary
4550     structs (`ord:') or generic structs (`gen:').  Generic structs are
4551     a bit complicated to explain.  For C++, these are non-explicit
4552     specializations of template classes, or non-template classes
4553     within the above.  Other programming languages have generics, but
4554     `-femit-struct-debug-detailed' does not yet implement them.
4555
4556     The third word specifies the source files for those structs for
4557     which the compiler will emit debug information.  The values `none'
4558     and `any' have the normal meaning.  The value `base' means that
4559     the base of name of the file in which the type declaration appears
4560     must match the base of the name of the main compilation file.  In
4561     practice, this means that types declared in `foo.c' and `foo.h'
4562     will have debug information, but types declared in other header
4563     will not.  The value `sys' means those types satisfying `base' or
4564     declared in system or compiler headers.
4565
4566     You may need to experiment to determine the best settings for your
4567     application.
4568
4569     The default is `-femit-struct-debug-detailed=all'.
4570
4571     This option works only with DWARF 2.
4572
4573`-fenable-icf-debug'
4574     Generate additional debug information to support identical code
4575     folding (ICF).  This option only works with DWARF version 2 or
4576     higher.
4577
4578`-fno-merge-debug-strings'
4579     Direct the linker to not merge together strings in the debugging
4580     information which are identical in different object files.
4581     Merging is not supported by all assemblers or linkers.  Merging
4582     decreases the size of the debug information in the output file at
4583     the cost of increasing link processing time.  Merging is enabled
4584     by default.
4585
4586`-fdebug-prefix-map=OLD=NEW'
4587     When compiling files in directory `OLD', record debugging
4588     information describing them as in `NEW' instead.
4589
4590`-fno-dwarf2-cfi-asm'
4591     Emit DWARF 2 unwind info as compiler generated `.eh_frame' section
4592     instead of using GAS `.cfi_*' directives.
4593
4594`-p'
4595     Generate extra code to write profile information suitable for the
4596     analysis program `prof'.  You must use this option when compiling
4597     the source files you want data about, and you must also use it when
4598     linking.
4599
4600`-pg'
4601     Generate extra code to write profile information suitable for the
4602     analysis program `gprof'.  You must use this option when compiling
4603     the source files you want data about, and you must also use it when
4604     linking.
4605
4606`-Q'
4607     Makes the compiler print out each function name as it is compiled,
4608     and print some statistics about each pass when it finishes.
4609
4610`-ftime-report'
4611     Makes the compiler print some statistics about the time consumed
4612     by each pass when it finishes.
4613
4614`-fmem-report'
4615     Makes the compiler print some statistics about permanent memory
4616     allocation when it finishes.
4617
4618`-fpre-ipa-mem-report'
4619
4620`-fpost-ipa-mem-report'
4621     Makes the compiler print some statistics about permanent memory
4622     allocation before or after interprocedural optimization.
4623
4624`-fstack-usage'
4625     Makes the compiler output stack usage information for the program,
4626     on a per-function basis.  The filename for the dump is made by
4627     appending `.su' to the AUXNAME.  AUXNAME is generated from the
4628     name of the output file, if explicitly specified and it is not an
4629     executable, otherwise it is the basename of the source file.  An
4630     entry is made up of three fields:
4631
4632        * The name of the function.
4633
4634        * A number of bytes.
4635
4636        * One or more qualifiers: `static', `dynamic', `bounded'.
4637
4638     The qualifier `static' means that the function manipulates the
4639     stack statically: a fixed number of bytes are allocated for the
4640     frame on function entry and released on function exit; no stack
4641     adjustments are otherwise made in the function.  The second field
4642     is this fixed number of bytes.
4643
4644     The qualifier `dynamic' means that the function manipulates the
4645     stack dynamically: in addition to the static allocation described
4646     above, stack adjustments are made in the body of the function, for
4647     example to push/pop arguments around function calls.  If the
4648     qualifier `bounded' is also present, the amount of these
4649     adjustments is bounded at compile-time and the second field is an
4650     upper bound of the total amount of stack used by the function.  If
4651     it is not present, the amount of these adjustments is not bounded
4652     at compile-time and the second field only represents the bounded
4653     part.
4654
4655`-fprofile-arcs'
4656     Add code so that program flow "arcs" are instrumented.  During
4657     execution the program records how many times each branch and call
4658     is executed and how many times it is taken or returns.  When the
4659     compiled program exits it saves this data to a file called
4660     `AUXNAME.gcda' for each source file.  The data may be used for
4661     profile-directed optimizations (`-fbranch-probabilities'), or for
4662     test coverage analysis (`-ftest-coverage').  Each object file's
4663     AUXNAME is generated from the name of the output file, if
4664     explicitly specified and it is not the final executable, otherwise
4665     it is the basename of the source file.  In both cases any suffix
4666     is removed (e.g. `foo.gcda' for input file `dir/foo.c', or
4667     `dir/foo.gcda' for output file specified as `-o dir/foo.o').
4668     *Note Cross-profiling::.
4669
4670`--coverage'
4671     This option is used to compile and link code instrumented for
4672     coverage analysis.  The option is a synonym for `-fprofile-arcs'
4673     `-ftest-coverage' (when compiling) and `-lgcov' (when linking).
4674     See the documentation for those options for more details.
4675
4676        * Compile the source files with `-fprofile-arcs' plus
4677          optimization and code generation options.  For test coverage
4678          analysis, use the additional `-ftest-coverage' option.  You
4679          do not need to profile every source file in a program.
4680
4681        * Link your object files with `-lgcov' or `-fprofile-arcs' (the
4682          latter implies the former).
4683
4684        * Run the program on a representative workload to generate the
4685          arc profile information.  This may be repeated any number of
4686          times.  You can run concurrent instances of your program, and
4687          provided that the file system supports locking, the data
4688          files will be correctly updated.  Also `fork' calls are
4689          detected and correctly handled (double counting will not
4690          happen).
4691
4692        * For profile-directed optimizations, compile the source files
4693          again with the same optimization and code generation options
4694          plus `-fbranch-probabilities' (*note Options that Control
4695          Optimization: Optimize Options.).
4696
4697        * For test coverage analysis, use `gcov' to produce human
4698          readable information from the `.gcno' and `.gcda' files.
4699          Refer to the `gcov' documentation for further information.
4700
4701
4702     With `-fprofile-arcs', for each function of your program GCC
4703     creates a program flow graph, then finds a spanning tree for the
4704     graph.  Only arcs that are not on the spanning tree have to be
4705     instrumented: the compiler adds code to count the number of times
4706     that these arcs are executed.  When an arc is the only exit or
4707     only entrance to a block, the instrumentation code can be added to
4708     the block; otherwise, a new basic block must be created to hold
4709     the instrumentation code.
4710
4711`-ftest-coverage'
4712     Produce a notes file that the `gcov' code-coverage utility (*note
4713     `gcov'--a Test Coverage Program: Gcov.) can use to show program
4714     coverage.  Each source file's note file is called `AUXNAME.gcno'.
4715     Refer to the `-fprofile-arcs' option above for a description of
4716     AUXNAME and instructions on how to generate test coverage data.
4717     Coverage data will match the source files more closely, if you do
4718     not optimize.
4719
4720`-fdbg-cnt-list'
4721     Print the name and the counter upper bound for all debug counters.
4722
4723`-fdbg-cnt=COUNTER-VALUE-LIST'
4724     Set the internal debug counter upper bound.  COUNTER-VALUE-LIST is
4725     a comma-separated list of NAME:VALUE pairs which sets the upper
4726     bound of each debug counter NAME to VALUE.  All debug counters
4727     have the initial upper bound of UINT_MAX, thus dbg_cnt() returns
4728     true always unless the upper bound is set by this option.  e.g.
4729     With -fdbg-cnt=dce:10,tail_call:0 dbg_cnt(dce) will return true
4730     only for first 10 invocations and dbg_cnt(tail_call) will return
4731     false always.
4732
4733`-dLETTERS'
4734`-fdump-rtl-PASS'
4735     Says to make debugging dumps during compilation at times specified
4736     by LETTERS.  This is used for debugging the RTL-based passes of the
4737     compiler.  The file names for most of the dumps are made by
4738     appending a pass number and a word to the DUMPNAME, and the files
4739     are created in the directory of the output file.  Note that the
4740     pass number is computed statically as passes get registered into
4741     the pass manager.  Thus the numbering is not related to the
4742     dynamic order of execution of passes.  In particular, a pass
4743     installed by a plugin could have a number over 200 even if it
4744     executed quite early.  DUMPNAME is generated from the name of the
4745     output file, if explicitly specified and it is not an executable,
4746     otherwise it is the basename of the source file. These switches
4747     may have different effects when `-E' is used for preprocessing.
4748
4749     Debug dumps can be enabled with a `-fdump-rtl' switch or some `-d'
4750     option LETTERS.  Here are the possible letters for use in PASS and
4751     LETTERS, and their meanings:
4752
4753    `-fdump-rtl-alignments'
4754          Dump after branch alignments have been computed.
4755
4756    `-fdump-rtl-asmcons'
4757          Dump after fixing rtl statements that have unsatisfied in/out
4758          constraints.
4759
4760    `-fdump-rtl-auto_inc_dec'
4761          Dump after auto-inc-dec discovery.  This pass is only run on
4762          architectures that have auto inc or auto dec instructions.
4763
4764    `-fdump-rtl-barriers'
4765          Dump after cleaning up the barrier instructions.
4766
4767    `-fdump-rtl-bbpart'
4768          Dump after partitioning hot and cold basic blocks.
4769
4770    `-fdump-rtl-bbro'
4771          Dump after block reordering.
4772
4773    `-fdump-rtl-btl1'
4774    `-fdump-rtl-btl2'
4775          `-fdump-rtl-btl1' and `-fdump-rtl-btl2' enable dumping after
4776          the two branch target load optimization passes.
4777
4778    `-fdump-rtl-bypass'
4779          Dump after jump bypassing and control flow optimizations.
4780
4781    `-fdump-rtl-combine'
4782          Dump after the RTL instruction combination pass.
4783
4784    `-fdump-rtl-compgotos'
4785          Dump after duplicating the computed gotos.
4786
4787    `-fdump-rtl-ce1'
4788    `-fdump-rtl-ce2'
4789    `-fdump-rtl-ce3'
4790          `-fdump-rtl-ce1', `-fdump-rtl-ce2', and `-fdump-rtl-ce3'
4791          enable dumping after the three if conversion passes.
4792
4793    `-fdump-rtl-cprop_hardreg'
4794          Dump after hard register copy propagation.
4795
4796    `-fdump-rtl-csa'
4797          Dump after combining stack adjustments.
4798
4799    `-fdump-rtl-cse1'
4800    `-fdump-rtl-cse2'
4801          `-fdump-rtl-cse1' and `-fdump-rtl-cse2' enable dumping after
4802          the two common sub-expression elimination passes.
4803
4804    `-fdump-rtl-dce'
4805          Dump after the standalone dead code elimination passes.
4806
4807    `-fdump-rtl-dbr'
4808          Dump after delayed branch scheduling.
4809
4810    `-fdump-rtl-dce1'
4811    `-fdump-rtl-dce2'
4812          `-fdump-rtl-dce1' and `-fdump-rtl-dce2' enable dumping after
4813          the two dead store elimination passes.
4814
4815    `-fdump-rtl-eh'
4816          Dump after finalization of EH handling code.
4817
4818    `-fdump-rtl-eh_ranges'
4819          Dump after conversion of EH handling range regions.
4820
4821    `-fdump-rtl-expand'
4822          Dump after RTL generation.
4823
4824    `-fdump-rtl-fwprop1'
4825    `-fdump-rtl-fwprop2'
4826          `-fdump-rtl-fwprop1' and `-fdump-rtl-fwprop2' enable dumping
4827          after the two forward propagation passes.
4828
4829    `-fdump-rtl-gcse1'
4830    `-fdump-rtl-gcse2'
4831          `-fdump-rtl-gcse1' and `-fdump-rtl-gcse2' enable dumping
4832          after global common subexpression elimination.
4833
4834    `-fdump-rtl-init-regs'
4835          Dump after the initialization of the registers.
4836
4837    `-fdump-rtl-initvals'
4838          Dump after the computation of the initial value sets.
4839
4840    `-fdump-rtl-into_cfglayout'
4841          Dump after converting to cfglayout mode.
4842
4843    `-fdump-rtl-ira'
4844          Dump after iterated register allocation.
4845
4846    `-fdump-rtl-jump'
4847          Dump after the second jump optimization.
4848
4849    `-fdump-rtl-loop2'
4850          `-fdump-rtl-loop2' enables dumping after the rtl loop
4851          optimization passes.
4852
4853    `-fdump-rtl-mach'
4854          Dump after performing the machine dependent reorganization
4855          pass, if that pass exists.
4856
4857    `-fdump-rtl-mode_sw'
4858          Dump after removing redundant mode switches.
4859
4860    `-fdump-rtl-rnreg'
4861          Dump after register renumbering.
4862
4863    `-fdump-rtl-outof_cfglayout'
4864          Dump after converting from cfglayout mode.
4865
4866    `-fdump-rtl-peephole2'
4867          Dump after the peephole pass.
4868
4869    `-fdump-rtl-postreload'
4870          Dump after post-reload optimizations.
4871
4872    `-fdump-rtl-pro_and_epilogue'
4873          Dump after generating the function pro and epilogues.
4874
4875    `-fdump-rtl-regmove'
4876          Dump after the register move pass.
4877
4878    `-fdump-rtl-sched1'
4879    `-fdump-rtl-sched2'
4880          `-fdump-rtl-sched1' and `-fdump-rtl-sched2' enable dumping
4881          after the basic block scheduling passes.
4882
4883    `-fdump-rtl-see'
4884          Dump after sign extension elimination.
4885
4886    `-fdump-rtl-seqabstr'
4887          Dump after common sequence discovery.
4888
4889    `-fdump-rtl-shorten'
4890          Dump after shortening branches.
4891
4892    `-fdump-rtl-sibling'
4893          Dump after sibling call optimizations.
4894
4895    `-fdump-rtl-split1'
4896    `-fdump-rtl-split2'
4897    `-fdump-rtl-split3'
4898    `-fdump-rtl-split4'
4899    `-fdump-rtl-split5'
4900          `-fdump-rtl-split1', `-fdump-rtl-split2',
4901          `-fdump-rtl-split3', `-fdump-rtl-split4' and
4902          `-fdump-rtl-split5' enable dumping after five rounds of
4903          instruction splitting.
4904
4905    `-fdump-rtl-sms'
4906          Dump after modulo scheduling.  This pass is only run on some
4907          architectures.
4908
4909    `-fdump-rtl-stack'
4910          Dump after conversion from GCC's "flat register file"
4911          registers to the x87's stack-like registers.  This pass is
4912          only run on x86 variants.
4913
4914    `-fdump-rtl-subreg1'
4915    `-fdump-rtl-subreg2'
4916          `-fdump-rtl-subreg1' and `-fdump-rtl-subreg2' enable dumping
4917          after the two subreg expansion passes.
4918
4919    `-fdump-rtl-unshare'
4920          Dump after all rtl has been unshared.
4921
4922    `-fdump-rtl-vartrack'
4923          Dump after variable tracking.
4924
4925    `-fdump-rtl-vregs'
4926          Dump after converting virtual registers to hard registers.
4927
4928    `-fdump-rtl-web'
4929          Dump after live range splitting.
4930
4931    `-fdump-rtl-regclass'
4932    `-fdump-rtl-subregs_of_mode_init'
4933    `-fdump-rtl-subregs_of_mode_finish'
4934    `-fdump-rtl-dfinit'
4935    `-fdump-rtl-dfinish'
4936          These dumps are defined but always produce empty files.
4937
4938    `-fdump-rtl-all'
4939          Produce all the dumps listed above.
4940
4941    `-dA'
4942          Annotate the assembler output with miscellaneous debugging
4943          information.
4944
4945    `-dD'
4946          Dump all macro definitions, at the end of preprocessing, in
4947          addition to normal output.
4948
4949    `-dH'
4950          Produce a core dump whenever an error occurs.
4951
4952    `-dm'
4953          Print statistics on memory usage, at the end of the run, to
4954          standard error.
4955
4956    `-dp'
4957          Annotate the assembler output with a comment indicating which
4958          pattern and alternative was used.  The length of each
4959          instruction is also printed.
4960
4961    `-dP'
4962          Dump the RTL in the assembler output as a comment before each
4963          instruction.  Also turns on `-dp' annotation.
4964
4965    `-dv'
4966          For each of the other indicated dump files
4967          (`-fdump-rtl-PASS'), dump a representation of the control
4968          flow graph suitable for viewing with VCG to `FILE.PASS.vcg'.
4969
4970    `-dx'
4971          Just generate RTL for a function instead of compiling it.
4972          Usually used with `-fdump-rtl-expand'.
4973
4974`-fdump-noaddr'
4975     When doing debugging dumps, suppress address output.  This makes
4976     it more feasible to use diff on debugging dumps for compiler
4977     invocations with different compiler binaries and/or different text
4978     / bss / data / heap / stack / dso start locations.
4979
4980`-fdump-unnumbered'
4981     When doing debugging dumps, suppress instruction numbers and
4982     address output.  This makes it more feasible to use diff on
4983     debugging dumps for compiler invocations with different options,
4984     in particular with and without `-g'.
4985
4986`-fdump-unnumbered-links'
4987     When doing debugging dumps (see `-d' option above), suppress
4988     instruction numbers for the links to the previous and next
4989     instructions in a sequence.
4990
4991`-fdump-translation-unit (C++ only)'
4992`-fdump-translation-unit-OPTIONS (C++ only)'
4993     Dump a representation of the tree structure for the entire
4994     translation unit to a file.  The file name is made by appending
4995     `.tu' to the source file name, and the file is created in the same
4996     directory as the output file.  If the `-OPTIONS' form is used,
4997     OPTIONS controls the details of the dump as described for the
4998     `-fdump-tree' options.
4999
5000`-fdump-class-hierarchy (C++ only)'
5001`-fdump-class-hierarchy-OPTIONS (C++ only)'
5002     Dump a representation of each class's hierarchy and virtual
5003     function table layout to a file.  The file name is made by
5004     appending `.class' to the source file name, and the file is
5005     created in the same directory as the output file.  If the
5006     `-OPTIONS' form is used, OPTIONS controls the details of the dump
5007     as described for the `-fdump-tree' options.
5008
5009`-fdump-ipa-SWITCH'
5010     Control the dumping at various stages of inter-procedural analysis
5011     language tree to a file.  The file name is generated by appending a
5012     switch specific suffix to the source file name, and the file is
5013     created in the same directory as the output file.  The following
5014     dumps are possible:
5015
5016    `all'
5017          Enables all inter-procedural analysis dumps.
5018
5019    `cgraph'
5020          Dumps information about call-graph optimization, unused
5021          function removal, and inlining decisions.
5022
5023    `inline'
5024          Dump after function inlining.
5025
5026
5027`-fdump-statistics-OPTION'
5028     Enable and control dumping of pass statistics in a separate file.
5029     The file name is generated by appending a suffix ending in
5030     `.statistics' to the source file name, and the file is created in
5031     the same directory as the output file.  If the `-OPTION' form is
5032     used, `-stats' will cause counters to be summed over the whole
5033     compilation unit while `-details' will dump every event as the
5034     passes generate them.  The default with no option is to sum
5035     counters for each function compiled.
5036
5037`-fdump-tree-SWITCH'
5038`-fdump-tree-SWITCH-OPTIONS'
5039     Control the dumping at various stages of processing the
5040     intermediate language tree to a file.  The file name is generated
5041     by appending a switch specific suffix to the source file name, and
5042     the file is created in the same directory as the output file.  If
5043     the `-OPTIONS' form is used, OPTIONS is a list of `-' separated
5044     options that control the details of the dump.  Not all options are
5045     applicable to all dumps, those which are not meaningful will be
5046     ignored.  The following options are available
5047
5048    `address'
5049          Print the address of each node.  Usually this is not
5050          meaningful as it changes according to the environment and
5051          source file.  Its primary use is for tying up a dump file
5052          with a debug environment.
5053
5054    `asmname'
5055          If `DECL_ASSEMBLER_NAME' has been set for a given decl, use
5056          that in the dump instead of `DECL_NAME'.  Its primary use is
5057          ease of use working backward from mangled names in the
5058          assembly file.
5059
5060    `slim'
5061          Inhibit dumping of members of a scope or body of a function
5062          merely because that scope has been reached.  Only dump such
5063          items when they are directly reachable by some other path.
5064          When dumping pretty-printed trees, this option inhibits
5065          dumping the bodies of control structures.
5066
5067    `raw'
5068          Print a raw representation of the tree.  By default, trees are
5069          pretty-printed into a C-like representation.
5070
5071    `details'
5072          Enable more detailed dumps (not honored by every dump option).
5073
5074    `stats'
5075          Enable dumping various statistics about the pass (not honored
5076          by every dump option).
5077
5078    `blocks'
5079          Enable showing basic block boundaries (disabled in raw dumps).
5080
5081    `vops'
5082          Enable showing virtual operands for every statement.
5083
5084    `lineno'
5085          Enable showing line numbers for statements.
5086
5087    `uid'
5088          Enable showing the unique ID (`DECL_UID') for each variable.
5089
5090    `verbose'
5091          Enable showing the tree dump for each statement.
5092
5093    `eh'
5094          Enable showing the EH region number holding each statement.
5095
5096    `all'
5097          Turn on all options, except `raw', `slim', `verbose' and
5098          `lineno'.
5099
5100     The following tree dumps are possible:
5101    `original'
5102          Dump before any tree based optimization, to `FILE.original'.
5103
5104    `optimized'
5105          Dump after all tree based optimization, to `FILE.optimized'.
5106
5107    `gimple'
5108          Dump each function before and after the gimplification pass
5109          to a file.  The file name is made by appending `.gimple' to
5110          the source file name.
5111
5112    `cfg'
5113          Dump the control flow graph of each function to a file.  The
5114          file name is made by appending `.cfg' to the source file name.
5115
5116    `vcg'
5117          Dump the control flow graph of each function to a file in VCG
5118          format.  The file name is made by appending `.vcg' to the
5119          source file name.  Note that if the file contains more than
5120          one function, the generated file cannot be used directly by
5121          VCG.  You will need to cut and paste each function's graph
5122          into its own separate file first.
5123
5124    `ch'
5125          Dump each function after copying loop headers.  The file name
5126          is made by appending `.ch' to the source file name.
5127
5128    `ssa'
5129          Dump SSA related information to a file.  The file name is
5130          made by appending `.ssa' to the source file name.
5131
5132    `alias'
5133          Dump aliasing information for each function.  The file name
5134          is made by appending `.alias' to the source file name.
5135
5136    `ccp'
5137          Dump each function after CCP.  The file name is made by
5138          appending `.ccp' to the source file name.
5139
5140    `storeccp'
5141          Dump each function after STORE-CCP.  The file name is made by
5142          appending `.storeccp' to the source file name.
5143
5144    `pre'
5145          Dump trees after partial redundancy elimination.  The file
5146          name is made by appending `.pre' to the source file name.
5147
5148    `fre'
5149          Dump trees after full redundancy elimination.  The file name
5150          is made by appending `.fre' to the source file name.
5151
5152    `copyprop'
5153          Dump trees after copy propagation.  The file name is made by
5154          appending `.copyprop' to the source file name.
5155
5156    `store_copyprop'
5157          Dump trees after store copy-propagation.  The file name is
5158          made by appending `.store_copyprop' to the source file name.
5159
5160    `dce'
5161          Dump each function after dead code elimination.  The file
5162          name is made by appending `.dce' to the source file name.
5163
5164    `mudflap'
5165          Dump each function after adding mudflap instrumentation.  The
5166          file name is made by appending `.mudflap' to the source file
5167          name.
5168
5169    `sra'
5170          Dump each function after performing scalar replacement of
5171          aggregates.  The file name is made by appending `.sra' to the
5172          source file name.
5173
5174    `sink'
5175          Dump each function after performing code sinking.  The file
5176          name is made by appending `.sink' to the source file name.
5177
5178    `dom'
5179          Dump each function after applying dominator tree
5180          optimizations.  The file name is made by appending `.dom' to
5181          the source file name.
5182
5183    `dse'
5184          Dump each function after applying dead store elimination.
5185          The file name is made by appending `.dse' to the source file
5186          name.
5187
5188    `phiopt'
5189          Dump each function after optimizing PHI nodes into
5190          straightline code.  The file name is made by appending
5191          `.phiopt' to the source file name.
5192
5193    `forwprop'
5194          Dump each function after forward propagating single use
5195          variables.  The file name is made by appending `.forwprop' to
5196          the source file name.
5197
5198    `copyrename'
5199          Dump each function after applying the copy rename
5200          optimization.  The file name is made by appending
5201          `.copyrename' to the source file name.
5202
5203    `nrv'
5204          Dump each function after applying the named return value
5205          optimization on generic trees.  The file name is made by
5206          appending `.nrv' to the source file name.
5207
5208    `vect'
5209          Dump each function after applying vectorization of loops.
5210          The file name is made by appending `.vect' to the source file
5211          name.
5212
5213    `slp'
5214          Dump each function after applying vectorization of basic
5215          blocks.  The file name is made by appending `.slp' to the
5216          source file name.
5217
5218    `vrp'
5219          Dump each function after Value Range Propagation (VRP).  The
5220          file name is made by appending `.vrp' to the source file name.
5221
5222    `all'
5223          Enable all the available tree dumps with the flags provided
5224          in this option.
5225
5226`-ftree-vectorizer-verbose=N'
5227     This option controls the amount of debugging output the vectorizer
5228     prints.  This information is written to standard error, unless
5229     `-fdump-tree-all' or `-fdump-tree-vect' is specified, in which
5230     case it is output to the usual dump listing file, `.vect'.  For
5231     N=0 no diagnostic information is reported.  If N=1 the vectorizer
5232     reports each loop that got vectorized, and the total number of
5233     loops that got vectorized.  If N=2 the vectorizer also reports
5234     non-vectorized loops that passed the first analysis phase
5235     (vect_analyze_loop_form) - i.e. countable, inner-most, single-bb,
5236     single-entry/exit loops.  This is the same verbosity level that
5237     `-fdump-tree-vect-stats' uses.  Higher verbosity levels mean
5238     either more information dumped for each reported loop, or same
5239     amount of information reported for more loops: if N=3, vectorizer
5240     cost model information is reported.  If N=4, alignment related
5241     information is added to the reports.  If N=5, data-references
5242     related information (e.g. memory dependences, memory
5243     access-patterns) is added to the reports.  If N=6, the vectorizer
5244     reports also non-vectorized inner-most loops that did not pass the
5245     first analysis phase (i.e., may not be countable, or may have
5246     complicated control-flow).  If N=7, the vectorizer reports also
5247     non-vectorized nested loops.  If N=8, SLP related information is
5248     added to the reports.  For N=9, all the information the vectorizer
5249     generates during its analysis and transformation is reported.
5250     This is the same verbosity level that `-fdump-tree-vect-details'
5251     uses.
5252
5253`-frandom-seed=STRING'
5254     This option provides a seed that GCC uses when it would otherwise
5255     use random numbers.  It is used to generate certain symbol names
5256     that have to be different in every compiled file.  It is also used
5257     to place unique stamps in coverage data files and the object files
5258     that produce them.  You can use the `-frandom-seed' option to
5259     produce reproducibly identical object files.
5260
5261     The STRING should be different for every file you compile.
5262
5263`-fsched-verbose=N'
5264     On targets that use instruction scheduling, this option controls
5265     the amount of debugging output the scheduler prints.  This
5266     information is written to standard error, unless
5267     `-fdump-rtl-sched1' or `-fdump-rtl-sched2' is specified, in which
5268     case it is output to the usual dump listing file, `.sched1' or
5269     `.sched2' respectively.  However for N greater than nine, the
5270     output is always printed to standard error.
5271
5272     For N greater than zero, `-fsched-verbose' outputs the same
5273     information as `-fdump-rtl-sched1' and `-fdump-rtl-sched2'.  For N
5274     greater than one, it also output basic block probabilities,
5275     detailed ready list information and unit/insn info.  For N greater
5276     than two, it includes RTL at abort point, control-flow and regions
5277     info.  And for N over four, `-fsched-verbose' also includes
5278     dependence info.
5279
5280`-save-temps'
5281`-save-temps=cwd'
5282     Store the usual "temporary" intermediate files permanently; place
5283     them in the current directory and name them based on the source
5284     file.  Thus, compiling `foo.c' with `-c -save-temps' would produce
5285     files `foo.i' and `foo.s', as well as `foo.o'.  This creates a
5286     preprocessed `foo.i' output file even though the compiler now
5287     normally uses an integrated preprocessor.
5288
5289     When used in combination with the `-x' command line option,
5290     `-save-temps' is sensible enough to avoid over writing an input
5291     source file with the same extension as an intermediate file.  The
5292     corresponding intermediate file may be obtained by renaming the
5293     source file before using `-save-temps'.
5294
5295     If you invoke GCC in parallel, compiling several different source
5296     files that share a common base name in different subdirectories or
5297     the same source file compiled for multiple output destinations, it
5298     is likely that the different parallel compilers will interfere
5299     with each other, and overwrite the temporary files.  For instance:
5300
5301          gcc -save-temps -o outdir1/foo.o indir1/foo.c&
5302          gcc -save-temps -o outdir2/foo.o indir2/foo.c&
5303
5304     may result in `foo.i' and `foo.o' being written to simultaneously
5305     by both compilers.
5306
5307`-save-temps=obj'
5308     Store the usual "temporary" intermediate files permanently.  If the
5309     `-o' option is used, the temporary files are based on the object
5310     file.  If the `-o' option is not used, the `-save-temps=obj'
5311     switch behaves like `-save-temps'.
5312
5313     For example:
5314
5315          gcc -save-temps=obj -c foo.c
5316          gcc -save-temps=obj -c bar.c -o dir/xbar.o
5317          gcc -save-temps=obj foobar.c -o dir2/yfoobar
5318
5319     would create `foo.i', `foo.s', `dir/xbar.i', `dir/xbar.s',
5320     `dir2/yfoobar.i', `dir2/yfoobar.s', and `dir2/yfoobar.o'.
5321
5322`-time[=FILE]'
5323     Report the CPU time taken by each subprocess in the compilation
5324     sequence.  For C source files, this is the compiler proper and
5325     assembler (plus the linker if linking is done).
5326
5327     Without the specification of an output file, the output looks like
5328     this:
5329
5330          # cc1 0.12 0.01
5331          # as 0.00 0.01
5332
5333     The first number on each line is the "user time", that is time
5334     spent executing the program itself.  The second number is "system
5335     time", time spent executing operating system routines on behalf of
5336     the program.  Both numbers are in seconds.
5337
5338     With the specification of an output file, the output is appended
5339     to the named file, and it looks like this:
5340
5341          0.12 0.01 cc1 OPTIONS
5342          0.00 0.01 as OPTIONS
5343
5344     The "user time" and the "system time" are moved before the program
5345     name, and the options passed to the program are displayed, so that
5346     one can later tell what file was being compiled, and with which
5347     options.
5348
5349`-fvar-tracking'
5350     Run variable tracking pass.  It computes where variables are
5351     stored at each position in code.  Better debugging information is
5352     then generated (if the debugging information format supports this
5353     information).
5354
5355     It is enabled by default when compiling with optimization (`-Os',
5356     `-O', `-O2', ...), debugging information (`-g') and the debug info
5357     format supports it.
5358
5359`-fvar-tracking-assignments'
5360     Annotate assignments to user variables early in the compilation and
5361     attempt to carry the annotations over throughout the compilation
5362     all the way to the end, in an attempt to improve debug information
5363     while optimizing.  Use of `-gdwarf-4' is recommended along with it.
5364
5365     It can be enabled even if var-tracking is disabled, in which case
5366     annotations will be created and maintained, but discarded at the
5367     end.
5368
5369`-fvar-tracking-assignments-toggle'
5370     Toggle `-fvar-tracking-assignments', in the same way that
5371     `-gtoggle' toggles `-g'.
5372
5373`-print-file-name=LIBRARY'
5374     Print the full absolute name of the library file LIBRARY that
5375     would be used when linking--and don't do anything else.  With this
5376     option, GCC does not compile or link anything; it just prints the
5377     file name.
5378
5379`-print-multi-directory'
5380     Print the directory name corresponding to the multilib selected by
5381     any other switches present in the command line.  This directory is
5382     supposed to exist in `GCC_EXEC_PREFIX'.
5383
5384`-print-multi-lib'
5385     Print the mapping from multilib directory names to compiler
5386     switches that enable them.  The directory name is separated from
5387     the switches by `;', and each switch starts with an `@' instead of
5388     the `-', without spaces between multiple switches.  This is
5389     supposed to ease shell-processing.
5390
5391`-print-multi-os-directory'
5392     Print the path to OS libraries for the selected multilib, relative
5393     to some `lib' subdirectory.  If OS libraries are present in the
5394     `lib' subdirectory and no multilibs are used, this is usually just
5395     `.', if OS libraries are present in `libSUFFIX' sibling
5396     directories this prints e.g. `../lib64', `../lib' or `../lib32',
5397     or if OS libraries are present in `lib/SUBDIR' subdirectories it
5398     prints e.g. `amd64', `sparcv9' or `ev6'.
5399
5400`-print-prog-name=PROGRAM'
5401     Like `-print-file-name', but searches for a program such as `cpp'.
5402
5403`-print-libgcc-file-name'
5404     Same as `-print-file-name=libgcc.a'.
5405
5406     This is useful when you use `-nostdlib' or `-nodefaultlibs' but
5407     you do want to link with `libgcc.a'.  You can do
5408
5409          gcc -nostdlib FILES... `gcc -print-libgcc-file-name`
5410
5411`-print-search-dirs'
5412     Print the name of the configured installation directory and a list
5413     of program and library directories `gcc' will search--and don't do
5414     anything else.
5415
5416     This is useful when `gcc' prints the error message `installation
5417     problem, cannot exec cpp0: No such file or directory'.  To resolve
5418     this you either need to put `cpp0' and the other compiler
5419     components where `gcc' expects to find them, or you can set the
5420     environment variable `GCC_EXEC_PREFIX' to the directory where you
5421     installed them.  Don't forget the trailing `/'.  *Note Environment
5422     Variables::.
5423
5424`-print-sysroot'
5425     Print the target sysroot directory that will be used during
5426     compilation.  This is the target sysroot specified either at
5427     configure time or using the `--sysroot' option, possibly with an
5428     extra suffix that depends on compilation options.  If no target
5429     sysroot is specified, the option prints nothing.
5430
5431`-print-sysroot-headers-suffix'
5432     Print the suffix added to the target sysroot when searching for
5433     headers, or give an error if the compiler is not configured with
5434     such a suffix--and don't do anything else.
5435
5436`-dumpmachine'
5437     Print the compiler's target machine (for example,
5438     `i686-pc-linux-gnu')--and don't do anything else.
5439
5440`-dumpversion'
5441     Print the compiler version (for example, `3.0')--and don't do
5442     anything else.
5443
5444`-dumpspecs'
5445     Print the compiler's built-in specs--and don't do anything else.
5446     (This is used when GCC itself is being built.)  *Note Spec Files::.
5447
5448`-feliminate-unused-debug-types'
5449     Normally, when producing DWARF2 output, GCC will emit debugging
5450     information for all types declared in a compilation unit,
5451     regardless of whether or not they are actually used in that
5452     compilation unit.  Sometimes this is useful, such as if, in the
5453     debugger, you want to cast a value to a type that is not actually
5454     used in your program (but is declared).  More often, however, this
5455     results in a significant amount of wasted space.  With this
5456     option, GCC will avoid producing debug symbol output for types
5457     that are nowhere used in the source file being compiled.
5458
5459
5460File: gcc.info,  Node: Optimize Options,  Next: Preprocessor Options,  Prev: Debugging Options,  Up: Invoking GCC
5461
54623.10 Options That Control Optimization
5463======================================
5464
5465These options control various sorts of optimizations.
5466
5467 Without any optimization option, the compiler's goal is to reduce the
5468cost of compilation and to make debugging produce the expected results.
5469Statements are independent: if you stop the program with a breakpoint
5470between statements, you can then assign a new value to any variable or
5471change the program counter to any other statement in the function and
5472get exactly the results you would expect from the source code.
5473
5474 Turning on optimization flags makes the compiler attempt to improve
5475the performance and/or code size at the expense of compilation time and
5476possibly the ability to debug the program.
5477
5478 The compiler performs optimization based on the knowledge it has of the
5479program.  Compiling multiple files at once to a single output file mode
5480allows the compiler to use information gained from all of the files
5481when compiling each of them.
5482
5483 Not all optimizations are controlled directly by a flag.  Only
5484optimizations that have a flag are listed in this section.
5485
5486 Most optimizations are only enabled if an `-O' level is set on the
5487command line.  Otherwise they are disabled, even if individual
5488optimization flags are specified.
5489
5490 Depending on the target and how GCC was configured, a slightly
5491different set of optimizations may be enabled at each `-O' level than
5492those listed here.  You can invoke GCC with `-Q --help=optimizers' to
5493find out the exact set of optimizations that are enabled at each level.
5494*Note Overall Options::, for examples.
5495
5496`-O'
5497`-O1'
5498     Optimize.  Optimizing compilation takes somewhat more time, and a
5499     lot more memory for a large function.
5500
5501     With `-O', the compiler tries to reduce code size and execution
5502     time, without performing any optimizations that take a great deal
5503     of compilation time.
5504
5505     `-O' turns on the following optimization flags:
5506          -fauto-inc-dec
5507          -fcompare-elim
5508          -fcprop-registers
5509          -fdce
5510          -fdefer-pop
5511          -fdelayed-branch
5512          -fdse
5513          -fguess-branch-probability
5514          -fif-conversion2
5515          -fif-conversion
5516          -fipa-pure-const
5517          -fipa-profile
5518          -fipa-reference
5519          -fmerge-constants
5520          -fsplit-wide-types
5521          -ftree-bit-ccp
5522          -ftree-builtin-call-dce
5523          -ftree-ccp
5524          -ftree-ch
5525          -ftree-copyrename
5526          -ftree-dce
5527          -ftree-dominator-opts
5528          -ftree-dse
5529          -ftree-forwprop
5530          -ftree-fre
5531          -ftree-phiprop
5532          -ftree-sra
5533          -ftree-pta
5534          -ftree-ter
5535          -funit-at-a-time
5536
5537     `-O' also turns on `-fomit-frame-pointer' on machines where doing
5538     so does not interfere with debugging.
5539
5540`-O2'
5541     Optimize even more.  GCC performs nearly all supported
5542     optimizations that do not involve a space-speed tradeoff.  As
5543     compared to `-O', this option increases both compilation time and
5544     the performance of the generated code.
5545
5546     `-O2' turns on all optimization flags specified by `-O'.  It also
5547     turns on the following optimization flags:
5548          -fthread-jumps
5549          -falign-functions  -falign-jumps
5550          -falign-loops  -falign-labels
5551          -fcaller-saves
5552          -fcrossjumping
5553          -fcse-follow-jumps  -fcse-skip-blocks
5554          -fdelete-null-pointer-checks
5555          -fdevirtualize
5556          -fexpensive-optimizations
5557          -fgcse  -fgcse-lm
5558          -finline-small-functions
5559          -findirect-inlining
5560          -fipa-sra
5561          -foptimize-sibling-calls
5562          -fpartial-inlining
5563          -fpeephole2
5564          -fregmove
5565          -freorder-blocks  -freorder-functions
5566          -frerun-cse-after-loop
5567          -fsched-interblock  -fsched-spec
5568          -fschedule-insns  -fschedule-insns2
5569          -fstrict-aliasing -fstrict-overflow
5570          -ftree-if-to-switch-conversion
5571          -ftree-switch-conversion
5572          -ftree-pre
5573          -ftree-vrp
5574
5575     Please note the warning under `-fgcse' about invoking `-O2' on
5576     programs that use computed gotos.
5577
5578`-O3'
5579     Optimize yet more.  `-O3' turns on all optimizations specified by
5580     `-O2' and also turns on the `-finline-functions',
5581     `-funswitch-loops', `-fpredictive-commoning',
5582     `-fgcse-after-reload', `-ftree-vectorize' and `-fipa-cp-clone'
5583     options.
5584
5585`-O0'
5586     Reduce compilation time and make debugging produce the expected
5587     results.  This is the default.
5588
5589`-Os'
5590     Optimize for size.  `-Os' enables all `-O2' optimizations that do
5591     not typically increase code size.  It also performs further
5592     optimizations designed to reduce code size.
5593
5594     `-Os' disables the following optimization flags:
5595          -falign-functions  -falign-jumps  -falign-loops
5596          -falign-labels  -freorder-blocks  -freorder-blocks-and-partition
5597          -fprefetch-loop-arrays  -ftree-vect-loop-version
5598
5599`-Ofast'
5600     Disregard strict standards compliance.  `-Ofast' enables all `-O3'
5601     optimizations.  It also enables optimizations that are not valid
5602     for all standard compliant programs.  It turns on `-ffast-math'.
5603
5604     If you use multiple `-O' options, with or without level numbers,
5605     the last such option is the one that is effective.
5606
5607 Options of the form `-fFLAG' specify machine-independent flags.  Most
5608flags have both positive and negative forms; the negative form of
5609`-ffoo' would be `-fno-foo'.  In the table below, only one of the forms
5610is listed--the one you typically will use.  You can figure out the
5611other form by either removing `no-' or adding it.
5612
5613 The following options control specific optimizations.  They are either
5614activated by `-O' options or are related to ones that are.  You can use
5615the following flags in the rare cases when "fine-tuning" of
5616optimizations to be performed is desired.
5617
5618`-fno-default-inline'
5619     Do not make member functions inline by default merely because they
5620     are defined inside the class scope (C++ only).  Otherwise, when
5621     you specify `-O', member functions defined inside class scope are
5622     compiled inline by default; i.e., you don't need to add `inline'
5623     in front of the member function name.
5624
5625`-fno-defer-pop'
5626     Always pop the arguments to each function call as soon as that
5627     function returns.  For machines which must pop arguments after a
5628     function call, the compiler normally lets arguments accumulate on
5629     the stack for several function calls and pops them all at once.
5630
5631     Disabled at levels `-O', `-O2', `-O3', `-Os'.
5632
5633`-fforward-propagate'
5634     Perform a forward propagation pass on RTL.  The pass tries to
5635     combine two instructions and checks if the result can be
5636     simplified.  If loop unrolling is active, two passes are performed
5637     and the second is scheduled after loop unrolling.
5638
5639     This option is enabled by default at optimization levels `-O',
5640     `-O2', `-O3', `-Os'.
5641
5642`-ffp-contract=STYLE'
5643     `-ffp-contract=off' disables floating-point expression contraction.
5644     `-ffp-contract=fast' enables floating-point expression contraction
5645     such as forming of fused multiply-add operations if the target has
5646     native support for them.  `-ffp-contract=on' enables
5647     floating-point expression contraction if allowed by the language
5648     standard.  This is currently not implemented and treated equal to
5649     `-ffp-contract=off'.
5650
5651     The default is `-ffp-contract=fast'.
5652
5653`-fomit-frame-pointer'
5654     Don't keep the frame pointer in a register for functions that
5655     don't need one.  This avoids the instructions to save, set up and
5656     restore frame pointers; it also makes an extra register available
5657     in many functions.  *It also makes debugging impossible on some
5658     machines.*
5659
5660     On some machines, such as the VAX, this flag has no effect, because
5661     the standard calling sequence automatically handles the frame
5662     pointer and nothing is saved by pretending it doesn't exist.  The
5663     machine-description macro `FRAME_POINTER_REQUIRED' controls
5664     whether a target machine supports this flag.  *Note Register
5665     Usage: (gccint)Registers.
5666
5667     Starting with GCC version 4.6, the default setting (when not
5668     optimizing for size) for 32-bit Linux x86 and 32-bit Darwin x86
5669     targets has been changed to `-fomit-frame-pointer'.  The default
5670     can be reverted to `-fno-omit-frame-pointer' by configuring GCC
5671     with the `--enable-frame-pointer' configure option.
5672
5673     Enabled at levels `-O', `-O2', `-O3', `-Os'.
5674
5675`-foptimize-sibling-calls'
5676     Optimize sibling and tail recursive calls.
5677
5678     Enabled at levels `-O2', `-O3', `-Os'.
5679
5680`-fno-inline'
5681     Don't pay attention to the `inline' keyword.  Normally this option
5682     is used to keep the compiler from expanding any functions inline.
5683     Note that if you are not optimizing, no functions can be expanded
5684     inline.
5685
5686`-finline-small-functions'
5687     Integrate functions into their callers when their body is smaller
5688     than expected function call code (so overall size of program gets
5689     smaller).  The compiler heuristically decides which functions are
5690     simple enough to be worth integrating in this way.
5691
5692     Enabled at level `-O2'.
5693
5694`-findirect-inlining'
5695     Inline also indirect calls that are discovered to be known at
5696     compile time thanks to previous inlining.  This option has any
5697     effect only when inlining itself is turned on by the
5698     `-finline-functions' or `-finline-small-functions' options.
5699
5700     Enabled at level `-O2'.
5701
5702`-finline-functions'
5703     Integrate all simple functions into their callers.  The compiler
5704     heuristically decides which functions are simple enough to be worth
5705     integrating in this way.
5706
5707     If all calls to a given function are integrated, and the function
5708     is declared `static', then the function is normally not output as
5709     assembler code in its own right.
5710
5711     Enabled at level `-O3'.
5712
5713`-finline-functions-called-once'
5714     Consider all `static' functions called once for inlining into their
5715     caller even if they are not marked `inline'.  If a call to a given
5716     function is integrated, then the function is not output as
5717     assembler code in its own right.
5718
5719     Enabled at levels `-O1', `-O2', `-O3' and `-Os'.
5720
5721`-fearly-inlining'
5722     Inline functions marked by `always_inline' and functions whose
5723     body seems smaller than the function call overhead early before
5724     doing `-fprofile-generate' instrumentation and real inlining pass.
5725     Doing so makes profiling significantly cheaper and usually
5726     inlining faster on programs having large chains of nested wrapper
5727     functions.
5728
5729     Enabled by default.
5730
5731`-fipa-sra'
5732     Perform interprocedural scalar replacement of aggregates, removal
5733     of unused parameters and replacement of parameters passed by
5734     reference by parameters passed by value.
5735
5736     Enabled at levels `-O2', `-O3' and `-Os'.
5737
5738`-finline-limit=N'
5739     By default, GCC limits the size of functions that can be inlined.
5740     This flag allows coarse control of this limit.  N is the size of
5741     functions that can be inlined in number of pseudo instructions.
5742
5743     Inlining is actually controlled by a number of parameters, which
5744     may be specified individually by using `--param NAME=VALUE'.  The
5745     `-finline-limit=N' option sets some of these parameters as follows:
5746
5747    `max-inline-insns-single'
5748          is set to N/2.
5749
5750    `max-inline-insns-auto'
5751          is set to N/2.
5752
5753     See below for a documentation of the individual parameters
5754     controlling inlining and for the defaults of these parameters.
5755
5756     _Note:_ there may be no value to `-finline-limit' that results in
5757     default behavior.
5758
5759     _Note:_ pseudo instruction represents, in this particular context,
5760     an abstract measurement of function's size.  In no way does it
5761     represent a count of assembly instructions and as such its exact
5762     meaning might change from one release to an another.
5763
5764`-fno-keep-inline-dllexport'
5765     This is a more fine-grained version of `-fkeep-inline-functions',
5766     which applies only to functions that are declared using the
5767     `dllexport' attribute or declspec (*Note Declaring Attributes of
5768     Functions: Function Attributes.)
5769
5770`-fkeep-inline-functions'
5771     In C, emit `static' functions that are declared `inline' into the
5772     object file, even if the function has been inlined into all of its
5773     callers.  This switch does not affect functions using the `extern
5774     inline' extension in GNU C90.  In C++, emit any and all inline
5775     functions into the object file.
5776
5777`-fkeep-static-consts'
5778     Emit variables declared `static const' when optimization isn't
5779     turned on, even if the variables aren't referenced.
5780
5781     GCC enables this option by default.  If you want to force the
5782     compiler to check if the variable was referenced, regardless of
5783     whether or not optimization is turned on, use the
5784     `-fno-keep-static-consts' option.
5785
5786`-fmerge-constants'
5787     Attempt to merge identical constants (string constants and
5788     floating point constants) across compilation units.
5789
5790     This option is the default for optimized compilation if the
5791     assembler and linker support it.  Use `-fno-merge-constants' to
5792     inhibit this behavior.
5793
5794     Enabled at levels `-O', `-O2', `-O3', `-Os'.
5795
5796`-fmerge-all-constants'
5797     Attempt to merge identical constants and identical variables.
5798
5799     This option implies `-fmerge-constants'.  In addition to
5800     `-fmerge-constants' this considers e.g. even constant initialized
5801     arrays or initialized constant variables with integral or floating
5802     point types.  Languages like C or C++ require each variable,
5803     including multiple instances of the same variable in recursive
5804     calls, to have distinct locations, so using this option will
5805     result in non-conforming behavior.
5806
5807`-fmodulo-sched'
5808     Perform swing modulo scheduling immediately before the first
5809     scheduling pass.  This pass looks at innermost loops and reorders
5810     their instructions by overlapping different iterations.
5811
5812`-fmodulo-sched-allow-regmoves'
5813     Perform more aggressive SMS based modulo scheduling with register
5814     moves allowed.  By setting this flag certain anti-dependences
5815     edges will be deleted which will trigger the generation of
5816     reg-moves based on the life-range analysis.  This option is
5817     effective only with `-fmodulo-sched' enabled.
5818
5819`-fno-branch-count-reg'
5820     Do not use "decrement and branch" instructions on a count register,
5821     but instead generate a sequence of instructions that decrement a
5822     register, compare it against zero, then branch based upon the
5823     result.  This option is only meaningful on architectures that
5824     support such instructions, which include x86, PowerPC, IA-64 and
5825     S/390.
5826
5827     The default is `-fbranch-count-reg'.
5828
5829`-fno-function-cse'
5830     Do not put function addresses in registers; make each instruction
5831     that calls a constant function contain the function's address
5832     explicitly.
5833
5834     This option results in less efficient code, but some strange hacks
5835     that alter the assembler output may be confused by the
5836     optimizations performed when this option is not used.
5837
5838     The default is `-ffunction-cse'
5839
5840`-fno-zero-initialized-in-bss'
5841     If the target supports a BSS section, GCC by default puts
5842     variables that are initialized to zero into BSS.  This can save
5843     space in the resulting code.
5844
5845     This option turns off this behavior because some programs
5846     explicitly rely on variables going to the data section.  E.g., so
5847     that the resulting executable can find the beginning of that
5848     section and/or make assumptions based on that.
5849
5850     The default is `-fzero-initialized-in-bss'.
5851
5852`-fmudflap -fmudflapth -fmudflapir'
5853     For front-ends that support it (C and C++), instrument all risky
5854     pointer/array dereferencing operations, some standard library
5855     string/heap functions, and some other associated constructs with
5856     range/validity tests.  Modules so instrumented should be immune to
5857     buffer overflows, invalid heap use, and some other classes of C/C++
5858     programming errors.  The instrumentation relies on a separate
5859     runtime library (`libmudflap'), which will be linked into a
5860     program if `-fmudflap' is given at link time.  Run-time behavior
5861     of the instrumented program is controlled by the `MUDFLAP_OPTIONS'
5862     environment variable.  See `env MUDFLAP_OPTIONS=-help a.out' for
5863     its options.
5864
5865     Use `-fmudflapth' instead of `-fmudflap' to compile and to link if
5866     your program is multi-threaded.  Use `-fmudflapir', in addition to
5867     `-fmudflap' or `-fmudflapth', if instrumentation should ignore
5868     pointer reads.  This produces less instrumentation (and therefore
5869     faster execution) and still provides some protection against
5870     outright memory corrupting writes, but allows erroneously read
5871     data to propagate within a program.
5872
5873`-fthread-jumps'
5874     Perform optimizations where we check to see if a jump branches to a
5875     location where another comparison subsumed by the first is found.
5876     If so, the first branch is redirected to either the destination of
5877     the second branch or a point immediately following it, depending
5878     on whether the condition is known to be true or false.
5879
5880     Enabled at levels `-O2', `-O3', `-Os'.
5881
5882`-fsplit-wide-types'
5883     When using a type that occupies multiple registers, such as `long
5884     long' on a 32-bit system, split the registers apart and allocate
5885     them independently.  This normally generates better code for those
5886     types, but may make debugging more difficult.
5887
5888     Enabled at levels `-O', `-O2', `-O3', `-Os'.
5889
5890`-fcse-follow-jumps'
5891     In common subexpression elimination (CSE), scan through jump
5892     instructions when the target of the jump is not reached by any
5893     other path.  For example, when CSE encounters an `if' statement
5894     with an `else' clause, CSE will follow the jump when the condition
5895     tested is false.
5896
5897     Enabled at levels `-O2', `-O3', `-Os'.
5898
5899`-fcse-skip-blocks'
5900     This is similar to `-fcse-follow-jumps', but causes CSE to follow
5901     jumps which conditionally skip over blocks.  When CSE encounters a
5902     simple `if' statement with no else clause, `-fcse-skip-blocks'
5903     causes CSE to follow the jump around the body of the `if'.
5904
5905     Enabled at levels `-O2', `-O3', `-Os'.
5906
5907`-frerun-cse-after-loop'
5908     Re-run common subexpression elimination after loop optimizations
5909     has been performed.
5910
5911     Enabled at levels `-O2', `-O3', `-Os'.
5912
5913`-fgcse'
5914     Perform a global common subexpression elimination pass.  This pass
5915     also performs global constant and copy propagation.
5916
5917     _Note:_ When compiling a program using computed gotos, a GCC
5918     extension, you may get better runtime performance if you disable
5919     the global common subexpression elimination pass by adding
5920     `-fno-gcse' to the command line.
5921
5922     Enabled at levels `-O2', `-O3', `-Os'.
5923
5924`-fgcse-lm'
5925     When `-fgcse-lm' is enabled, global common subexpression
5926     elimination will attempt to move loads which are only killed by
5927     stores into themselves.  This allows a loop containing a
5928     load/store sequence to be changed to a load outside the loop, and
5929     a copy/store within the loop.
5930
5931     Enabled by default when gcse is enabled.
5932
5933`-fgcse-sm'
5934     When `-fgcse-sm' is enabled, a store motion pass is run after
5935     global common subexpression elimination.  This pass will attempt
5936     to move stores out of loops.  When used in conjunction with
5937     `-fgcse-lm', loops containing a load/store sequence can be changed
5938     to a load before the loop and a store after the loop.
5939
5940     Not enabled at any optimization level.
5941
5942`-fgcse-las'
5943     When `-fgcse-las' is enabled, the global common subexpression
5944     elimination pass eliminates redundant loads that come after stores
5945     to the same memory location (both partial and full redundancies).
5946
5947     Not enabled at any optimization level.
5948
5949`-fgcse-after-reload'
5950     When `-fgcse-after-reload' is enabled, a redundant load elimination
5951     pass is performed after reload.  The purpose of this pass is to
5952     cleanup redundant spilling.
5953
5954`-funsafe-loop-optimizations'
5955     If given, the loop optimizer will assume that loop indices do not
5956     overflow, and that the loops with nontrivial exit condition are not
5957     infinite.  This enables a wider range of loop optimizations even if
5958     the loop optimizer itself cannot prove that these assumptions are
5959     valid.  Using `-Wunsafe-loop-optimizations', the compiler will
5960     warn you if it finds this kind of loop.
5961
5962`-fcrossjumping'
5963     Perform cross-jumping transformation.  This transformation unifies
5964     equivalent code and save code size.  The resulting code may or may
5965     not perform better than without cross-jumping.
5966
5967     Enabled at levels `-O2', `-O3', `-Os'.
5968
5969`-fauto-inc-dec'
5970     Combine increments or decrements of addresses with memory accesses.
5971     This pass is always skipped on architectures that do not have
5972     instructions to support this.  Enabled by default at `-O' and
5973     higher on architectures that support this.
5974
5975`-fdce'
5976     Perform dead code elimination (DCE) on RTL.  Enabled by default at
5977     `-O' and higher.
5978
5979`-fdse'
5980     Perform dead store elimination (DSE) on RTL.  Enabled by default
5981     at `-O' and higher.
5982
5983`-fif-conversion'
5984     Attempt to transform conditional jumps into branch-less
5985     equivalents.  This include use of conditional moves, min, max, set
5986     flags and abs instructions, and some tricks doable by standard
5987     arithmetics.  The use of conditional execution on chips where it
5988     is available is controlled by `if-conversion2'.
5989
5990     Enabled at levels `-O', `-O2', `-O3', `-Os'.
5991
5992`-fif-conversion2'
5993     Use conditional execution (where available) to transform
5994     conditional jumps into branch-less equivalents.
5995
5996     Enabled at levels `-O', `-O2', `-O3', `-Os'.
5997
5998`-fdelete-null-pointer-checks'
5999     Assume that programs cannot safely dereference null pointers, and
6000     that no code or data element resides there.  This enables simple
6001     constant folding optimizations at all optimization levels.  In
6002     addition, other optimization passes in GCC use this flag to
6003     control global dataflow analyses that eliminate useless checks for
6004     null pointers; these assume that if a pointer is checked after it
6005     has already been dereferenced, it cannot be null.
6006
6007     Note however that in some environments this assumption is not true.
6008     Use `-fno-delete-null-pointer-checks' to disable this optimization
6009     for programs which depend on that behavior.
6010
6011     Some targets, especially embedded ones, disable this option at all
6012     levels.  Otherwise it is enabled at all levels: `-O0', `-O1',
6013     `-O2', `-O3', `-Os'.  Passes that use the information are enabled
6014     independently at different optimization levels.
6015
6016`-fdevirtualize'
6017     Attempt to convert calls to virtual functions to direct calls.
6018     This is done both within a procedure and interprocedurally as part
6019     of indirect inlining (`-findirect-inlining') and interprocedural
6020     constant propagation (`-fipa-cp').  Enabled at levels `-O2',
6021     `-O3', `-Os'.
6022
6023`-fexpensive-optimizations'
6024     Perform a number of minor optimizations that are relatively
6025     expensive.
6026
6027     Enabled at levels `-O2', `-O3', `-Os'.
6028
6029`-foptimize-register-move'
6030`-fregmove'
6031     Attempt to reassign register numbers in move instructions and as
6032     operands of other simple instructions in order to maximize the
6033     amount of register tying.  This is especially helpful on machines
6034     with two-operand instructions.
6035
6036     Note `-fregmove' and `-foptimize-register-move' are the same
6037     optimization.
6038
6039     Enabled at levels `-O2', `-O3', `-Os'.
6040
6041`-fira-algorithm=ALGORITHM'
6042     Use specified coloring algorithm for the integrated register
6043     allocator.  The ALGORITHM argument should be `priority' or `CB'.
6044     The first algorithm specifies Chow's priority coloring, the second
6045     one specifies Chaitin-Briggs coloring.  The second algorithm can
6046     be unimplemented for some architectures.  If it is implemented, it
6047     is the default because Chaitin-Briggs coloring as a rule generates
6048     a better code.
6049
6050`-fira-region=REGION'
6051     Use specified regions for the integrated register allocator.  The
6052     REGION argument should be one of `all', `mixed', or `one'.  The
6053     first value means using all loops as register allocation regions,
6054     the second value which is the default means using all loops except
6055     for loops with small register pressure as the regions, and third
6056     one means using all function as a single region.  The first value
6057     can give best result for machines with small size and irregular
6058     register set, the third one results in faster and generates decent
6059     code and the smallest size code, and the default value usually
6060     give the best results in most cases and for most architectures.
6061
6062`-fira-loop-pressure'
6063     Use IRA to evaluate register pressure in loops for decision to move
6064     loop invariants.  Usage of this option usually results in
6065     generation of faster and smaller code on machines with big
6066     register files (>= 32 registers) but it can slow compiler down.
6067
6068     This option is enabled at level `-O3' for some targets.
6069
6070`-fno-ira-share-save-slots'
6071     Switch off sharing stack slots used for saving call used hard
6072     registers living through a call.  Each hard register will get a
6073     separate stack slot and as a result function stack frame will be
6074     bigger.
6075
6076`-fno-ira-share-spill-slots'
6077     Switch off sharing stack slots allocated for pseudo-registers.
6078     Each pseudo-register which did not get a hard register will get a
6079     separate stack slot and as a result function stack frame will be
6080     bigger.
6081
6082`-fira-verbose=N'
6083     Set up how verbose dump file for the integrated register allocator
6084     will be.  Default value is 5.  If the value is greater or equal to
6085     10, the dump file will be stderr as if the value were N minus 10.
6086
6087`-fdelayed-branch'
6088     If supported for the target machine, attempt to reorder
6089     instructions to exploit instruction slots available after delayed
6090     branch instructions.
6091
6092     Enabled at levels `-O', `-O2', `-O3', `-Os'.
6093
6094`-fschedule-insns'
6095     If supported for the target machine, attempt to reorder
6096     instructions to eliminate execution stalls due to required data
6097     being unavailable.  This helps machines that have slow floating
6098     point or memory load instructions by allowing other instructions
6099     to be issued until the result of the load or floating point
6100     instruction is required.
6101
6102     Enabled at levels `-O2', `-O3'.
6103
6104`-fschedule-insns2'
6105     Similar to `-fschedule-insns', but requests an additional pass of
6106     instruction scheduling after register allocation has been done.
6107     This is especially useful on machines with a relatively small
6108     number of registers and where memory load instructions take more
6109     than one cycle.
6110
6111     Enabled at levels `-O2', `-O3', `-Os'.
6112
6113`-fno-sched-interblock'
6114     Don't schedule instructions across basic blocks.  This is normally
6115     enabled by default when scheduling before register allocation, i.e.
6116     with `-fschedule-insns' or at `-O2' or higher.
6117
6118`-fno-sched-spec'
6119     Don't allow speculative motion of non-load instructions.  This is
6120     normally enabled by default when scheduling before register
6121     allocation, i.e.  with `-fschedule-insns' or at `-O2' or higher.
6122
6123`-fsched-pressure'
6124     Enable register pressure sensitive insn scheduling before the
6125     register allocation.  This only makes sense when scheduling before
6126     register allocation is enabled, i.e. with `-fschedule-insns' or at
6127     `-O2' or higher.  Usage of this option can improve the generated
6128     code and decrease its size by preventing register pressure
6129     increase above the number of available hard registers and as a
6130     consequence register spills in the register allocation.
6131
6132`-fsched-spec-load'
6133     Allow speculative motion of some load instructions.  This only
6134     makes sense when scheduling before register allocation, i.e. with
6135     `-fschedule-insns' or at `-O2' or higher.
6136
6137`-fsched-spec-load-dangerous'
6138     Allow speculative motion of more load instructions.  This only
6139     makes sense when scheduling before register allocation, i.e. with
6140     `-fschedule-insns' or at `-O2' or higher.
6141
6142`-fsched-stalled-insns'
6143`-fsched-stalled-insns=N'
6144     Define how many insns (if any) can be moved prematurely from the
6145     queue of stalled insns into the ready list, during the second
6146     scheduling pass.  `-fno-sched-stalled-insns' means that no insns
6147     will be moved prematurely, `-fsched-stalled-insns=0' means there
6148     is no limit on how many queued insns can be moved prematurely.
6149     `-fsched-stalled-insns' without a value is equivalent to
6150     `-fsched-stalled-insns=1'.
6151
6152`-fsched-stalled-insns-dep'
6153`-fsched-stalled-insns-dep=N'
6154     Define how many insn groups (cycles) will be examined for a
6155     dependency on a stalled insn that is candidate for premature
6156     removal from the queue of stalled insns.  This has an effect only
6157     during the second scheduling pass, and only if
6158     `-fsched-stalled-insns' is used.  `-fno-sched-stalled-insns-dep'
6159     is equivalent to `-fsched-stalled-insns-dep=0'.
6160     `-fsched-stalled-insns-dep' without a value is equivalent to
6161     `-fsched-stalled-insns-dep=1'.
6162
6163`-fsched2-use-superblocks'
6164     When scheduling after register allocation, do use superblock
6165     scheduling algorithm.  Superblock scheduling allows motion across
6166     basic block boundaries resulting on faster schedules.  This option
6167     is experimental, as not all machine descriptions used by GCC model
6168     the CPU closely enough to avoid unreliable results from the
6169     algorithm.
6170
6171     This only makes sense when scheduling after register allocation,
6172     i.e. with `-fschedule-insns2' or at `-O2' or higher.
6173
6174`-fsched-group-heuristic'
6175     Enable the group heuristic in the scheduler.  This heuristic favors
6176     the instruction that belongs to a schedule group.  This is enabled
6177     by default when scheduling is enabled, i.e. with `-fschedule-insns'
6178     or `-fschedule-insns2' or at `-O2' or higher.
6179
6180`-fsched-critical-path-heuristic'
6181     Enable the critical-path heuristic in the scheduler.  This
6182     heuristic favors instructions on the critical path.  This is
6183     enabled by default when scheduling is enabled, i.e. with
6184     `-fschedule-insns' or `-fschedule-insns2' or at `-O2' or higher.
6185
6186`-fsched-spec-insn-heuristic'
6187     Enable the speculative instruction heuristic in the scheduler.
6188     This heuristic favors speculative instructions with greater
6189     dependency weakness.  This is enabled by default when scheduling
6190     is enabled, i.e.  with `-fschedule-insns' or `-fschedule-insns2'
6191     or at `-O2' or higher.
6192
6193`-fsched-rank-heuristic'
6194     Enable the rank heuristic in the scheduler.  This heuristic favors
6195     the instruction belonging to a basic block with greater size or
6196     frequency.  This is enabled by default when scheduling is enabled,
6197     i.e.  with `-fschedule-insns' or `-fschedule-insns2' or at `-O2'
6198     or higher.
6199
6200`-fsched-last-insn-heuristic'
6201     Enable the last-instruction heuristic in the scheduler.  This
6202     heuristic favors the instruction that is less dependent on the
6203     last instruction scheduled.  This is enabled by default when
6204     scheduling is enabled, i.e. with `-fschedule-insns' or
6205     `-fschedule-insns2' or at `-O2' or higher.
6206
6207`-fsched-dep-count-heuristic'
6208     Enable the dependent-count heuristic in the scheduler.  This
6209     heuristic favors the instruction that has more instructions
6210     depending on it.  This is enabled by default when scheduling is
6211     enabled, i.e.  with `-fschedule-insns' or `-fschedule-insns2' or
6212     at `-O2' or higher.
6213
6214`-freschedule-modulo-scheduled-loops'
6215     The modulo scheduling comes before the traditional scheduling, if
6216     a loop was modulo scheduled we may want to prevent the later
6217     scheduling passes from changing its schedule, we use this option
6218     to control that.
6219
6220`-fselective-scheduling'
6221     Schedule instructions using selective scheduling algorithm.
6222     Selective scheduling runs instead of the first scheduler pass.
6223
6224`-fselective-scheduling2'
6225     Schedule instructions using selective scheduling algorithm.
6226     Selective scheduling runs instead of the second scheduler pass.
6227
6228`-fsel-sched-pipelining'
6229     Enable software pipelining of innermost loops during selective
6230     scheduling.  This option has no effect until one of
6231     `-fselective-scheduling' or `-fselective-scheduling2' is turned on.
6232
6233`-fsel-sched-pipelining-outer-loops'
6234     When pipelining loops during selective scheduling, also pipeline
6235     outer loops.  This option has no effect until
6236     `-fsel-sched-pipelining' is turned on.
6237
6238`-fshrink-wrap'
6239     Emit function prologues only before parts of the function that
6240     need it, rather than at the top of the function.
6241
6242`-fcaller-saves'
6243     Enable values to be allocated in registers that will be clobbered
6244     by function calls, by emitting extra instructions to save and
6245     restore the registers around such calls.  Such allocation is done
6246     only when it seems to result in better code than would otherwise
6247     be produced.
6248
6249     This option is always enabled by default on certain machines,
6250     usually those which have no call-preserved registers to use
6251     instead.
6252
6253     Enabled at levels `-O2', `-O3', `-Os'.
6254
6255`-fcombine-stack-adjustments'
6256     Tracks stack adjustments (pushes and pops) and stack memory
6257     references and then tries to find ways to combine them.
6258
6259     Enabled by default at `-O1' and higher.
6260
6261`-fconserve-stack'
6262     Attempt to minimize stack usage.  The compiler will attempt to use
6263     less stack space, even if that makes the program slower.  This
6264     option implies setting the `large-stack-frame' parameter to 100
6265     and the `large-stack-frame-growth' parameter to 400.
6266
6267`-ftree-reassoc'
6268     Perform reassociation on trees.  This flag is enabled by default
6269     at `-O' and higher.
6270
6271`-ftree-pre'
6272     Perform partial redundancy elimination (PRE) on trees.  This flag
6273     is enabled by default at `-O2' and `-O3'.
6274
6275`-ftree-forwprop'
6276     Perform forward propagation on trees.  This flag is enabled by
6277     default at `-O' and higher.
6278
6279`-ftree-fre'
6280     Perform full redundancy elimination (FRE) on trees.  The difference
6281     between FRE and PRE is that FRE only considers expressions that
6282     are computed on all paths leading to the redundant computation.
6283     This analysis is faster than PRE, though it exposes fewer
6284     redundancies.  This flag is enabled by default at `-O' and higher.
6285
6286`-ftree-phiprop'
6287     Perform hoisting of loads from conditional pointers on trees.  This
6288     pass is enabled by default at `-O' and higher.
6289
6290`-ftree-copy-prop'
6291     Perform copy propagation on trees.  This pass eliminates
6292     unnecessary copy operations.  This flag is enabled by default at
6293     `-O' and higher.
6294
6295`-fipa-pure-const'
6296     Discover which functions are pure or constant.  Enabled by default
6297     at `-O' and higher.
6298
6299`-fipa-reference'
6300     Discover which static variables do not escape cannot escape the
6301     compilation unit.  Enabled by default at `-O' and higher.
6302
6303`-fipa-struct-reorg'
6304     Perform structure reorganization optimization, that change C-like
6305     structures layout in order to better utilize spatial locality.
6306     This transformation is affective for programs containing arrays of
6307     structures.  Available in two compilation modes: profile-based
6308     (enabled with `-fprofile-generate') or static (which uses built-in
6309     heuristics).  It works only in whole program mode, so it requires
6310     `-fwhole-program' to be enabled.  Structures considered `cold' by
6311     this transformation are not affected (see `--param
6312     struct-reorg-cold-struct-ratio=VALUE').
6313
6314     With this flag, the program debug info reflects a new structure
6315     layout.
6316
6317`-fipa-pta'
6318     Perform interprocedural pointer analysis and interprocedural
6319     modification and reference analysis.  This option can cause
6320     excessive memory and compile-time usage on large compilation
6321     units.  It is not enabled by default at any optimization level.
6322
6323`-fipa-profile'
6324     Perform interprocedural profile propagation.  The functions called
6325     only from cold functions are marked as cold. Also functions
6326     executed once (such as `cold', `noreturn', static constructors or
6327     destructors) are identified. Cold functions and loop less parts of
6328     functions executed once are then optimized for size.  Enabled by
6329     default at `-O' and higher.
6330
6331`-fipa-cp'
6332     Perform interprocedural constant propagation.  This optimization
6333     analyzes the program to determine when values passed to functions
6334     are constants and then optimizes accordingly.  This optimization
6335     can substantially increase performance if the application has
6336     constants passed to functions.  This flag is enabled by default at
6337     `-O2', `-Os' and `-O3'.
6338
6339`-fipa-cp-clone'
6340     Perform function cloning to make interprocedural constant
6341     propagation stronger.  When enabled, interprocedural constant
6342     propagation will perform function cloning when externally visible
6343     function can be called with constant arguments.  Because this
6344     optimization can create multiple copies of functions, it may
6345     significantly increase code size (see `--param
6346     ipcp-unit-growth=VALUE').  This flag is enabled by default at
6347     `-O3'.
6348
6349`-fipa-matrix-reorg'
6350     Perform matrix flattening and transposing.  Matrix flattening
6351     tries to replace an m-dimensional matrix with its equivalent
6352     n-dimensional matrix, where n < m.  This reduces the level of
6353     indirection needed for accessing the elements of the matrix. The
6354     second optimization is matrix transposing that attempts to change
6355     the order of the matrix's dimensions in order to improve cache
6356     locality.  Both optimizations need the `-fwhole-program' flag.
6357     Transposing is enabled only if profiling information is available.
6358
6359`-ftree-sink'
6360     Perform forward store motion  on trees.  This flag is enabled by
6361     default at `-O' and higher.
6362
6363`-ftree-bit-ccp'
6364     Perform sparse conditional bit constant propagation on trees and
6365     propagate pointer alignment information.  This pass only operates
6366     on local scalar variables and is enabled by default at `-O' and
6367     higher.  It requires that `-ftree-ccp' is enabled.
6368
6369`-ftree-ccp'
6370     Perform sparse conditional constant propagation (CCP) on trees.
6371     This pass only operates on local scalar variables and is enabled
6372     by default at `-O' and higher.
6373
6374`-ftree-switch-conversion'
6375     Perform conversion of simple initializations in a switch to
6376     initializations from a scalar array.  This flag is enabled by
6377     default at `-O2' and higher.
6378
6379`-ftree-if-to-switch-conversion'
6380     Perform conversion of chains of ifs into switches.  This flag is
6381     enabled by default at `-O2' and higher.
6382
6383`-ftree-dce'
6384     Perform dead code elimination (DCE) on trees.  This flag is
6385     enabled by default at `-O' and higher.
6386
6387`-ftree-builtin-call-dce'
6388     Perform conditional dead code elimination (DCE) for calls to
6389     builtin functions that may set `errno' but are otherwise
6390     side-effect free.  This flag is enabled by default at `-O2' and
6391     higher if `-Os' is not also specified.
6392
6393`-ftree-dominator-opts'
6394     Perform a variety of simple scalar cleanups (constant/copy
6395     propagation, redundancy elimination, range propagation and
6396     expression simplification) based on a dominator tree traversal.
6397     This also performs jump threading (to reduce jumps to jumps). This
6398     flag is enabled by default at `-O' and higher.
6399
6400`-ftree-dse'
6401     Perform dead store elimination (DSE) on trees.  A dead store is a
6402     store into a memory location which will later be overwritten by
6403     another store without any intervening loads.  In this case the
6404     earlier store can be deleted.  This flag is enabled by default at
6405     `-O' and higher.
6406
6407`-ftree-ch'
6408     Perform loop header copying on trees.  This is beneficial since it
6409     increases effectiveness of code motion optimizations.  It also
6410     saves one jump.  This flag is enabled by default at `-O' and
6411     higher.  It is not enabled for `-Os', since it usually increases
6412     code size.
6413
6414`-ftree-loop-optimize'
6415     Perform loop optimizations on trees.  This flag is enabled by
6416     default at `-O' and higher.
6417
6418`-ftree-loop-linear'
6419     Perform loop interchange transformations on tree.  Same as
6420     `-floop-interchange'.  To use this code transformation, GCC has to
6421     be configured with `--with-ppl' and `--with-cloog' to enable the
6422     Graphite loop transformation infrastructure.
6423
6424`-floop-interchange'
6425     Perform loop interchange transformations on loops.  Interchanging
6426     two nested loops switches the inner and outer loops.  For example,
6427     given a loop like:
6428          DO J = 1, M
6429            DO I = 1, N
6430              A(J, I) = A(J, I) * C
6431            ENDDO
6432          ENDDO
6433     loop interchange will transform the loop as if the user had
6434     written:
6435          DO I = 1, N
6436            DO J = 1, M
6437              A(J, I) = A(J, I) * C
6438            ENDDO
6439          ENDDO
6440     which can be beneficial when `N' is larger than the caches,
6441     because in Fortran, the elements of an array are stored in memory
6442     contiguously by column, and the original loop iterates over rows,
6443     potentially creating at each access a cache miss.  This
6444     optimization applies to all the languages supported by GCC and is
6445     not limited to Fortran.  To use this code transformation, GCC has
6446     to be configured with `--with-ppl' and `--with-cloog' to enable the
6447     Graphite loop transformation infrastructure.
6448
6449`-floop-strip-mine'
6450     Perform loop strip mining transformations on loops.  Strip mining
6451     splits a loop into two nested loops.  The outer loop has strides
6452     equal to the strip size and the inner loop has strides of the
6453     original loop within a strip.  The strip length can be changed
6454     using the `loop-block-tile-size' parameter.  For example, given a
6455     loop like:
6456          DO I = 1, N
6457            A(I) = A(I) + C
6458          ENDDO
6459     loop strip mining will transform the loop as if the user had
6460     written:
6461          DO II = 1, N, 51
6462            DO I = II, min (II + 50, N)
6463              A(I) = A(I) + C
6464            ENDDO
6465          ENDDO
6466     This optimization applies to all the languages supported by GCC
6467     and is not limited to Fortran.  To use this code transformation,
6468     GCC has to be configured with `--with-ppl' and `--with-cloog' to
6469     enable the Graphite loop transformation infrastructure.
6470
6471`-floop-block'
6472     Perform loop blocking transformations on loops.  Blocking strip
6473     mines each loop in the loop nest such that the memory accesses of
6474     the element loops fit inside caches.  The strip length can be
6475     changed using the `loop-block-tile-size' parameter.  For example,
6476     given a loop like:
6477          DO I = 1, N
6478            DO J = 1, M
6479              A(J, I) = B(I) + C(J)
6480            ENDDO
6481          ENDDO
6482     loop blocking will transform the loop as if the user had written:
6483          DO II = 1, N, 51
6484            DO JJ = 1, M, 51
6485              DO I = II, min (II + 50, N)
6486                DO J = JJ, min (JJ + 50, M)
6487                  A(J, I) = B(I) + C(J)
6488                ENDDO
6489              ENDDO
6490            ENDDO
6491          ENDDO
6492     which can be beneficial when `M' is larger than the caches,
6493     because the innermost loop will iterate over a smaller amount of
6494     data that can be kept in the caches.  This optimization applies to
6495     all the languages supported by GCC and is not limited to Fortran.
6496     To use this code transformation, GCC has to be configured with
6497     `--with-ppl' and `--with-cloog' to enable the Graphite loop
6498     transformation infrastructure.
6499
6500`-fgraphite-identity'
6501     Enable the identity transformation for graphite.  For every SCoP
6502     we generate the polyhedral representation and transform it back to
6503     gimple.  Using `-fgraphite-identity' we can check the costs or
6504     benefits of the GIMPLE -> GRAPHITE -> GIMPLE transformation.  Some
6505     minimal optimizations are also performed by the code generator
6506     CLooG, like index splitting and dead code elimination in loops.
6507
6508`-floop-flatten'
6509     Removes the loop nesting structure: transforms the loop nest into a
6510     single loop.  This transformation can be useful to vectorize all
6511     the levels of the loop nest.
6512
6513`-floop-parallelize-all'
6514     Use the Graphite data dependence analysis to identify loops that
6515     can be parallelized.  Parallelize all the loops that can be
6516     analyzed to not contain loop carried dependences without checking
6517     that it is profitable to parallelize the loops.
6518
6519`-fcheck-data-deps'
6520     Compare the results of several data dependence analyzers.  This
6521     option is used for debugging the data dependence analyzers.
6522
6523`-ftree-loop-if-convert'
6524     Attempt to transform conditional jumps in the innermost loops to
6525     branch-less equivalents.  The intent is to remove control-flow from
6526     the innermost loops in order to improve the ability of the
6527     vectorization pass to handle these loops.  This is enabled by
6528     default if vectorization is enabled.
6529
6530`-ftree-loop-if-convert-stores'
6531     Attempt to also if-convert conditional jumps containing memory
6532     writes.  This transformation can be unsafe for multi-threaded
6533     programs as it transforms conditional memory writes into
6534     unconditional memory writes.  For example,
6535          for (i = 0; i < N; i++)
6536            if (cond)
6537              A[i] = expr;
6538     would be transformed to
6539          for (i = 0; i < N; i++)
6540            A[i] = cond ? expr : A[i];
6541     potentially producing data races.
6542
6543`-ftree-loop-distribution'
6544     Perform loop distribution.  This flag can improve cache
6545     performance on big loop bodies and allow further loop
6546     optimizations, like parallelization or vectorization, to take
6547     place.  For example, the loop
6548          DO I = 1, N
6549            A(I) = B(I) + C
6550            D(I) = E(I) * F
6551          ENDDO
6552     is transformed to
6553          DO I = 1, N
6554             A(I) = B(I) + C
6555          ENDDO
6556          DO I = 1, N
6557             D(I) = E(I) * F
6558          ENDDO
6559
6560`-ftree-loop-distribute-patterns'
6561     Perform loop distribution of patterns that can be code generated
6562     with calls to a library.  This flag is enabled by default at `-O3'.
6563
6564     This pass distributes the initialization loops and generates a
6565     call to memset zero.  For example, the loop
6566          DO I = 1, N
6567            A(I) = 0
6568            B(I) = A(I) + I
6569          ENDDO
6570     is transformed to
6571          DO I = 1, N
6572             A(I) = 0
6573          ENDDO
6574          DO I = 1, N
6575             B(I) = A(I) + I
6576          ENDDO
6577     and the initialization loop is transformed into a call to memset
6578     zero.
6579
6580`-ftree-loop-im'
6581     Perform loop invariant motion on trees.  This pass moves only
6582     invariants that would be hard to handle at RTL level (function
6583     calls, operations that expand to nontrivial sequences of insns).
6584     With `-funswitch-loops' it also moves operands of conditions that
6585     are invariant out of the loop, so that we can use just trivial
6586     invariantness analysis in loop unswitching.  The pass also includes
6587     store motion.
6588
6589`-ftree-loop-ivcanon'
6590     Create a canonical counter for number of iterations in the loop
6591     for that determining number of iterations requires complicated
6592     analysis.  Later optimizations then may determine the number
6593     easily.  Useful especially in connection with unrolling.
6594
6595`-fivopts'
6596     Perform induction variable optimizations (strength reduction,
6597     induction variable merging and induction variable elimination) on
6598     trees.
6599
6600`-ftree-parallelize-loops=n'
6601     Parallelize loops, i.e., split their iteration space to run in n
6602     threads.  This is only possible for loops whose iterations are
6603     independent and can be arbitrarily reordered.  The optimization is
6604     only profitable on multiprocessor machines, for loops that are
6605     CPU-intensive, rather than constrained e.g. by memory bandwidth.
6606     This option implies `-pthread', and thus is only supported on
6607     targets that have support for `-pthread'.
6608
6609`-ftree-pta'
6610     Perform function-local points-to analysis on trees.  This flag is
6611     enabled by default at `-O' and higher.
6612
6613`-ftree-sra'
6614     Perform scalar replacement of aggregates.  This pass replaces
6615     structure references with scalars to prevent committing structures
6616     to memory too early.  This flag is enabled by default at `-O' and
6617     higher.
6618
6619`-ftree-copyrename'
6620     Perform copy renaming on trees.  This pass attempts to rename
6621     compiler temporaries to other variables at copy locations, usually
6622     resulting in variable names which more closely resemble the
6623     original variables.  This flag is enabled by default at `-O' and
6624     higher.
6625
6626`-ftree-ter'
6627     Perform temporary expression replacement during the SSA->normal
6628     phase.  Single use/single def temporaries are replaced at their
6629     use location with their defining expression.  This results in
6630     non-GIMPLE code, but gives the expanders much more complex trees
6631     to work on resulting in better RTL generation.  This is enabled by
6632     default at `-O' and higher.
6633
6634`-ftree-vectorize'
6635     Perform loop vectorization on trees. This flag is enabled by
6636     default at `-O3'.
6637
6638`-ftree-slp-vectorize'
6639     Perform basic block vectorization on trees. This flag is enabled
6640     by default at `-O3' and when `-ftree-vectorize' is enabled.
6641
6642`-ftree-vect-loop-version'
6643     Perform loop versioning when doing loop vectorization on trees.
6644     When a loop appears to be vectorizable except that data alignment
6645     or data dependence cannot be determined at compile time then
6646     vectorized and non-vectorized versions of the loop are generated
6647     along with runtime checks for alignment or dependence to control
6648     which version is executed.  This option is enabled by default
6649     except at level `-Os' where it is disabled.
6650
6651`-fvect-cost-model'
6652     Enable cost model for vectorization.
6653
6654`-ftree-vrp'
6655     Perform Value Range Propagation on trees.  This is similar to the
6656     constant propagation pass, but instead of values, ranges of values
6657     are propagated.  This allows the optimizers to remove unnecessary
6658     range checks like array bound checks and null pointer checks.
6659     This is enabled by default at `-O2' and higher.  Null pointer check
6660     elimination is only done if `-fdelete-null-pointer-checks' is
6661     enabled.
6662
6663`-ftracer'
6664     Perform tail duplication to enlarge superblock size.  This
6665     transformation simplifies the control flow of the function
6666     allowing other optimizations to do better job.
6667
6668`-funroll-loops'
6669     Unroll loops whose number of iterations can be determined at
6670     compile time or upon entry to the loop.  `-funroll-loops' implies
6671     `-frerun-cse-after-loop'.  This option makes code larger, and may
6672     or may not make it run faster.
6673
6674`-funroll-all-loops'
6675     Unroll all loops, even if their number of iterations is uncertain
6676     when the loop is entered.  This usually makes programs run more
6677     slowly.  `-funroll-all-loops' implies the same options as
6678     `-funroll-loops',
6679
6680`-fsplit-ivs-in-unroller'
6681     Enables expressing of values of induction variables in later
6682     iterations of the unrolled loop using the value in the first
6683     iteration.  This breaks long dependency chains, thus improving
6684     efficiency of the scheduling passes.
6685
6686     Combination of `-fweb' and CSE is often sufficient to obtain the
6687     same effect.  However in cases the loop body is more complicated
6688     than a single basic block, this is not reliable.  It also does not
6689     work at all on some of the architectures due to restrictions in
6690     the CSE pass.
6691
6692     This optimization is enabled by default.
6693
6694`-fvariable-expansion-in-unroller'
6695     With this option, the compiler will create multiple copies of some
6696     local variables when unrolling a loop which can result in superior
6697     code.
6698
6699`-fpartial-inlining'
6700     Inline parts of functions.  This option has any effect only when
6701     inlining itself is turned on by the `-finline-functions' or
6702     `-finline-small-functions' options.
6703
6704     Enabled at level `-O2'.
6705
6706`-fpredictive-commoning'
6707     Perform predictive commoning optimization, i.e., reusing
6708     computations (especially memory loads and stores) performed in
6709     previous iterations of loops.
6710
6711     This option is enabled at level `-O3'.
6712
6713`-fprefetch-loop-arrays'
6714     If supported by the target machine, generate instructions to
6715     prefetch memory to improve the performance of loops that access
6716     large arrays.
6717
6718     This option may generate better or worse code; results are highly
6719     dependent on the structure of loops within the source code.
6720
6721     Disabled at level `-Os'.
6722
6723`-fno-peephole'
6724`-fno-peephole2'
6725     Disable any machine-specific peephole optimizations.  The
6726     difference between `-fno-peephole' and `-fno-peephole2' is in how
6727     they are implemented in the compiler; some targets use one, some
6728     use the other, a few use both.
6729
6730     `-fpeephole' is enabled by default.  `-fpeephole2' enabled at
6731     levels `-O2', `-O3', `-Os'.
6732
6733`-fno-guess-branch-probability'
6734     Do not guess branch probabilities using heuristics.
6735
6736     GCC will use heuristics to guess branch probabilities if they are
6737     not provided by profiling feedback (`-fprofile-arcs').  These
6738     heuristics are based on the control flow graph.  If some branch
6739     probabilities are specified by `__builtin_expect', then the
6740     heuristics will be used to guess branch probabilities for the rest
6741     of the control flow graph, taking the `__builtin_expect' info into
6742     account.  The interactions between the heuristics and
6743     `__builtin_expect' can be complex, and in some cases, it may be
6744     useful to disable the heuristics so that the effects of
6745     `__builtin_expect' are easier to understand.
6746
6747     The default is `-fguess-branch-probability' at levels `-O', `-O2',
6748     `-O3', `-Os'.
6749
6750`-freorder-blocks'
6751     Reorder basic blocks in the compiled function in order to reduce
6752     number of taken branches and improve code locality.
6753
6754     Enabled at levels `-O2', `-O3'.
6755
6756`-freorder-blocks-and-partition'
6757     In addition to reordering basic blocks in the compiled function,
6758     in order to reduce number of taken branches, partitions hot and
6759     cold basic blocks into separate sections of the assembly and .o
6760     files, to improve paging and cache locality performance.
6761
6762     This optimization is automatically turned off in the presence of
6763     exception handling, for linkonce sections, for functions with a
6764     user-defined section attribute and on any architecture that does
6765     not support named sections.
6766
6767`-freorder-functions'
6768     Reorder functions in the object file in order to improve code
6769     locality.  This is implemented by using special subsections
6770     `.text.hot' for most frequently executed functions and
6771     `.text.unlikely' for unlikely executed functions.  Reordering is
6772     done by the linker so object file format must support named
6773     sections and linker must place them in a reasonable way.
6774
6775     Also profile feedback must be available in to make this option
6776     effective.  See `-fprofile-arcs' for details.
6777
6778     Enabled at levels `-O2', `-O3', `-Os'.
6779
6780`-fstrict-aliasing'
6781     Allow the compiler to assume the strictest aliasing rules
6782     applicable to the language being compiled.  For C (and C++), this
6783     activates optimizations based on the type of expressions.  In
6784     particular, an object of one type is assumed never to reside at
6785     the same address as an object of a different type, unless the
6786     types are almost the same.  For example, an `unsigned int' can
6787     alias an `int', but not a `void*' or a `double'.  A character type
6788     may alias any other type.
6789
6790     Pay special attention to code like this:
6791          union a_union {
6792            int i;
6793            double d;
6794          };
6795
6796          int f() {
6797            union a_union t;
6798            t.d = 3.0;
6799            return t.i;
6800          }
6801     The practice of reading from a different union member than the one
6802     most recently written to (called "type-punning") is common.  Even
6803     with `-fstrict-aliasing', type-punning is allowed, provided the
6804     memory is accessed through the union type.  So, the code above
6805     will work as expected.  *Note Structures unions enumerations and
6806     bit-fields implementation::.  However, this code might not:
6807          int f() {
6808            union a_union t;
6809            int* ip;
6810            t.d = 3.0;
6811            ip = &t.i;
6812            return *ip;
6813          }
6814
6815     Similarly, access by taking the address, casting the resulting
6816     pointer and dereferencing the result has undefined behavior, even
6817     if the cast uses a union type, e.g.:
6818          int f() {
6819            double d = 3.0;
6820            return ((union a_union *) &d)->i;
6821          }
6822
6823     The `-fstrict-aliasing' option is enabled at levels `-O2', `-O3',
6824     `-Os'.
6825
6826`-fstrict-overflow'
6827     Allow the compiler to assume strict signed overflow rules,
6828     depending on the language being compiled.  For C (and C++) this
6829     means that overflow when doing arithmetic with signed numbers is
6830     undefined, which means that the compiler may assume that it will
6831     not happen.  This permits various optimizations.  For example, the
6832     compiler will assume that an expression like `i + 10 > i' will
6833     always be true for signed `i'.  This assumption is only valid if
6834     signed overflow is undefined, as the expression is false if `i +
6835     10' overflows when using twos complement arithmetic.  When this
6836     option is in effect any attempt to determine whether an operation
6837     on signed numbers will overflow must be written carefully to not
6838     actually involve overflow.
6839
6840     This option also allows the compiler to assume strict pointer
6841     semantics: given a pointer to an object, if adding an offset to
6842     that pointer does not produce a pointer to the same object, the
6843     addition is undefined.  This permits the compiler to conclude that
6844     `p + u > p' is always true for a pointer `p' and unsigned integer
6845     `u'.  This assumption is only valid because pointer wraparound is
6846     undefined, as the expression is false if `p + u' overflows using
6847     twos complement arithmetic.
6848
6849     See also the `-fwrapv' option.  Using `-fwrapv' means that integer
6850     signed overflow is fully defined: it wraps.  When `-fwrapv' is
6851     used, there is no difference between `-fstrict-overflow' and
6852     `-fno-strict-overflow' for integers.  With `-fwrapv' certain types
6853     of overflow are permitted.  For example, if the compiler gets an
6854     overflow when doing arithmetic on constants, the overflowed value
6855     can still be used with `-fwrapv', but not otherwise.
6856
6857     The `-fstrict-overflow' option is enabled at levels `-O2', `-O3',
6858     `-Os'.
6859
6860`-falign-arrays'
6861     Set the minimum alignment for array variables to be the largest
6862     power of two less than or equal to their total storage size, or
6863     the biggest alignment used on the machine, whichever is smaller.
6864     This option may be helpful when compiling legacy code that uses
6865     type punning on arrays that does not strictly conform to the C
6866     standard.
6867
6868`-falign-functions'
6869`-falign-functions=N'
6870     Align the start of functions to the next power-of-two greater than
6871     N, skipping up to N bytes.  For instance, `-falign-functions=32'
6872     aligns functions to the next 32-byte boundary, but
6873     `-falign-functions=24' would align to the next 32-byte boundary
6874     only if this can be done by skipping 23 bytes or less.
6875
6876     `-fno-align-functions' and `-falign-functions=1' are equivalent
6877     and mean that functions will not be aligned.
6878
6879     Some assemblers only support this flag when N is a power of two;
6880     in that case, it is rounded up.
6881
6882     If N is not specified or is zero, use a machine-dependent default.
6883
6884     Enabled at levels `-O2', `-O3'.
6885
6886`-falign-labels'
6887`-falign-labels=N'
6888     Align all branch targets to a power-of-two boundary, skipping up to
6889     N bytes like `-falign-functions'.  This option can easily make
6890     code slower, because it must insert dummy operations for when the
6891     branch target is reached in the usual flow of the code.
6892
6893     `-fno-align-labels' and `-falign-labels=1' are equivalent and mean
6894     that labels will not be aligned.
6895
6896     If `-falign-loops' or `-falign-jumps' are applicable and are
6897     greater than this value, then their values are used instead.
6898
6899     If N is not specified or is zero, use a machine-dependent default
6900     which is very likely to be `1', meaning no alignment.
6901
6902     Enabled at levels `-O2', `-O3'.
6903
6904`-falign-loops'
6905`-falign-loops=N'
6906     Align loops to a power-of-two boundary, skipping up to N bytes
6907     like `-falign-functions'.  The hope is that the loop will be
6908     executed many times, which will make up for any execution of the
6909     dummy operations.
6910
6911     `-fno-align-loops' and `-falign-loops=1' are equivalent and mean
6912     that loops will not be aligned.
6913
6914     If N is not specified or is zero, use a machine-dependent default.
6915
6916     Enabled at levels `-O2', `-O3'.
6917
6918`-falign-jumps'
6919`-falign-jumps=N'
6920     Align branch targets to a power-of-two boundary, for branch targets
6921     where the targets can only be reached by jumping, skipping up to N
6922     bytes like `-falign-functions'.  In this case, no dummy operations
6923     need be executed.
6924
6925     `-fno-align-jumps' and `-falign-jumps=1' are equivalent and mean
6926     that loops will not be aligned.
6927
6928     If N is not specified or is zero, use a machine-dependent default.
6929
6930     Enabled at levels `-O2', `-O3'.
6931
6932`-funit-at-a-time'
6933     This option is left for compatibility reasons. `-funit-at-a-time'
6934     has no effect, while `-fno-unit-at-a-time' implies
6935     `-fno-toplevel-reorder' and `-fno-section-anchors'.
6936
6937     Enabled by default.
6938
6939`-fno-toplevel-reorder'
6940     Do not reorder top-level functions, variables, and `asm'
6941     statements.  Output them in the same order that they appear in the
6942     input file.  When this option is used, unreferenced static
6943     variables will not be removed.  This option is intended to support
6944     existing code which relies on a particular ordering.  For new
6945     code, it is better to use attributes.
6946
6947     Enabled at level `-O0'.  When disabled explicitly, it also imply
6948     `-fno-section-anchors' that is otherwise enabled at `-O0' on some
6949     targets.
6950
6951`-fweb'
6952     Constructs webs as commonly used for register allocation purposes
6953     and assign each web individual pseudo register.  This allows the
6954     register allocation pass to operate on pseudos directly, but also
6955     strengthens several other optimization passes, such as CSE, loop
6956     optimizer and trivial dead code remover.  It can, however, make
6957     debugging impossible, since variables will no longer stay in a
6958     "home register".
6959
6960     Enabled by default with `-funroll-loops'.
6961
6962`-fwhole-program'
6963     Assume that the current compilation unit represents the whole
6964     program being compiled.  All public functions and variables with
6965     the exception of `main' and those merged by attribute
6966     `externally_visible' become static functions and in effect are
6967     optimized more aggressively by interprocedural optimizers. If
6968     `gold' is used as the linker plugin, `externally_visible'
6969     attributes are automatically added to functions (not variable yet
6970     due to a current `gold' issue) that are accessed outside of LTO
6971     objects according to resolution file produced by `gold'.  For
6972     other linkers that cannot generate resolution file, explicit
6973     `externally_visible' attributes are still necessary.  While this
6974     option is equivalent to proper use of the `static' keyword for
6975     programs consisting of a single file, in combination with option
6976     `-flto' this flag can be used to compile many smaller scale
6977     programs since the functions and variables become local for the
6978     whole combined compilation unit, not for the single source file
6979     itself.
6980
6981     This option implies `-fwhole-file' for Fortran programs.
6982
6983`-flto[=N]'
6984     This option runs the standard link-time optimizer.  When invoked
6985     with source code, it generates GIMPLE (one of GCC's internal
6986     representations) and writes it to special ELF sections in the
6987     object file.  When the object files are linked together, all the
6988     function bodies are read from these ELF sections and instantiated
6989     as if they had been part of the same translation unit.
6990
6991     To use the link-timer optimizer, `-flto' needs to be specified at
6992     compile time and during the final link.  For example,
6993
6994          gcc -c -O2 -flto foo.c
6995          gcc -c -O2 -flto bar.c
6996          gcc -o myprog -flto -O2 foo.o bar.o
6997
6998     The first two invocations to GCC will save a bytecode
6999     representation of GIMPLE into special ELF sections inside `foo.o'
7000     and `bar.o'.  The final invocation will read the GIMPLE bytecode
7001     from `foo.o' and `bar.o', merge the two files into a single
7002     internal image, and compile the result as usual.  Since both
7003     `foo.o' and `bar.o' are merged into a single image, this causes
7004     all the inter-procedural analyses and optimizations in GCC to work
7005     across the two files as if they were a single one.  This means,
7006     for example, that the inliner will be able to inline functions in
7007     `bar.o' into functions in `foo.o' and vice-versa.
7008
7009     Another (simpler) way to enable link-time optimization is,
7010
7011          gcc -o myprog -flto -O2 foo.c bar.c
7012
7013     The above will generate bytecode for `foo.c' and `bar.c', merge
7014     them together into a single GIMPLE representation and optimize
7015     them as usual to produce `myprog'.
7016
7017     The only important thing to keep in mind is that to enable
7018     link-time optimizations the `-flto' flag needs to be passed to
7019     both the compile and the link commands.
7020
7021     To make whole program optimization effective, it is necessary to
7022     make certain whole program assumptions.  The compiler needs to know
7023     what functions and variables can be accessed by libraries and
7024     runtime outside of the link time optimized unit.  When supported
7025     by the linker, the linker plugin (see `-fuse-linker-plugin')
7026     passes to the compiler information about used and externally
7027     visible symbols.  When the linker plugin is not available,
7028     `-fwhole-program' should be used to allow the compiler to make
7029     these assumptions, which will lead to more aggressive optimization
7030     decisions.
7031
7032     Note that when a file is compiled with `-flto', the generated
7033     object file will be larger than a regular object file because it
7034     will contain GIMPLE bytecodes and the usual final code.  This
7035     means that object files with LTO information can be linked as a
7036     normal object file.  So, in the previous example, if the final
7037     link is done with
7038
7039          gcc -o myprog foo.o bar.o
7040
7041     The only difference will be that no inter-procedural optimizations
7042     will be applied to produce `myprog'.  The two object files `foo.o'
7043     and `bar.o' will be simply sent to the regular linker.
7044
7045     Additionally, the optimization flags used to compile individual
7046     files are not necessarily related to those used at link-time.  For
7047     instance,
7048
7049          gcc -c -O0 -flto foo.c
7050          gcc -c -O0 -flto bar.c
7051          gcc -o myprog -flto -O3 foo.o bar.o
7052
7053     This will produce individual object files with unoptimized
7054     assembler code, but the resulting binary `myprog' will be
7055     optimized at `-O3'.  Now, if the final binary is generated without
7056     `-flto', then `myprog' will not be optimized.
7057
7058     When producing the final binary with `-flto', GCC will only apply
7059     link-time optimizations to those files that contain bytecode.
7060     Therefore, you can mix and match object files and libraries with
7061     GIMPLE bytecodes and final object code.  GCC will automatically
7062     select which files to optimize in LTO mode and which files to link
7063     without further processing.
7064
7065     There are some code generation flags that GCC will preserve when
7066     generating bytecodes, as they need to be used during the final link
7067     stage.  Currently, the following options are saved into the GIMPLE
7068     bytecode files: `-fPIC', `-fcommon' and all the `-m' target flags.
7069
7070     At link time, these options are read-in and reapplied.  Note that
7071     the current implementation makes no attempt at recognizing
7072     conflicting values for these options.  If two or more files have a
7073     conflicting value (e.g., one file is compiled with `-fPIC' and
7074     another isn't), the compiler will simply use the last value read
7075     from the bytecode files.  It is recommended, then, that all the
7076     files participating in the same link be compiled with the same
7077     options.
7078
7079     Another feature of LTO is that it is possible to apply
7080     interprocedural optimizations on files written in different
7081     languages.  This requires some support in the language front end.
7082     Currently, the C, C++ and Fortran front ends are capable of
7083     emitting GIMPLE bytecodes, so something like this should work
7084
7085          gcc -c -flto foo.c
7086          g++ -c -flto bar.cc
7087          gfortran -c -flto baz.f90
7088          g++ -o myprog -flto -O3 foo.o bar.o baz.o -lgfortran
7089
7090     Notice that the final link is done with `g++' to get the C++
7091     runtime libraries and `-lgfortran' is added to get the Fortran
7092     runtime libraries.  In general, when mixing languages in LTO mode,
7093     you should use the same link command used when mixing languages in
7094     a regular (non-LTO) compilation.  This means that if your build
7095     process was mixing languages before, all you need to add is
7096     `-flto' to all the compile and link commands.
7097
7098     If LTO encounters objects with C linkage declared with incompatible
7099     types in separate translation units to be linked together
7100     (undefined behavior according to ISO C99 6.2.7), a non-fatal
7101     diagnostic may be issued.  The behavior is still undefined at
7102     runtime.
7103
7104     If object files containing GIMPLE bytecode are stored in a library
7105     archive, say `libfoo.a', it is possible to extract and use them in
7106     an LTO link if you are using a linker with linker plugin support.
7107     To enable this feature, use the flag `-fuse-linker-plugin' at
7108     link-time:
7109
7110          gcc -o myprog -O2 -flto -fuse-linker-plugin a.o b.o -lfoo
7111
7112     With the linker plugin enabled, the linker will extract the needed
7113     GIMPLE files from `libfoo.a' and pass them on to the running GCC
7114     to make them part of the aggregated GIMPLE image to be optimized.
7115
7116     If you are not using a linker with linker plugin support and/or do
7117     not enable linker plugin then the objects inside `libfoo.a' will
7118     be extracted and linked as usual, but they will not participate in
7119     the LTO optimization process.
7120
7121     Link time optimizations do not require the presence of the whole
7122     program to operate.  If the program does not require any symbols
7123     to be exported, it is possible to combine `-flto' and with
7124     `-fwhole-program' to allow the interprocedural optimizers to use
7125     more aggressive assumptions which may lead to improved
7126     optimization opportunities.  Use of `-fwhole-program' is not
7127     needed when linker plugin is active (see `-fuse-linker-plugin').
7128
7129     Regarding portability: the current implementation of LTO makes no
7130     attempt at generating bytecode that can be ported between different
7131     types of hosts.  The bytecode files are versioned and there is a
7132     strict version check, so bytecode files generated in one version of
7133     GCC will not work with an older/newer version of GCC.
7134
7135     Link time optimization does not play well with generating debugging
7136     information.  Combining `-flto' with `-g' is currently
7137     experimental and expected to produce wrong results.
7138
7139     If you specify the optional N, the optimization and code
7140     generation done at link time is executed in parallel using N
7141     parallel jobs by utilizing an installed `make' program.  The
7142     environment variable `MAKE' may be used to override the program
7143     used.  The default value for N is 1.
7144
7145     You can also specify `-flto=jobserver' to use GNU make's job
7146     server mode to determine the number of parallel jobs. This is
7147     useful when the Makefile calling GCC is already executing in
7148     parallel.  The parent Makefile will need a `+' prepended to the
7149     command recipe for this to work. This will likely only work if
7150     `MAKE' is GNU make.
7151
7152     This option is disabled by default.
7153
7154`-flto-partition=ALG'
7155     Specify the partitioning algorithm used by the link time optimizer.
7156     The value is either `1to1' to specify a partitioning mirroring the
7157     original source files or `balanced' to specify partitioning into
7158     equally sized chunks (whenever possible).  Specifying `none' as an
7159     algorithm disables partitioning and streaming completely. The
7160     default value is `balanced'.
7161
7162`-flto-compression-level=N'
7163     This option specifies the level of compression used for
7164     intermediate language written to LTO object files, and is only
7165     meaningful in conjunction with LTO mode (`-flto').  Valid values
7166     are 0 (no compression) to 9 (maximum compression).  Values outside
7167     this range are clamped to either 0 or 9.  If the option is not
7168     given, a default balanced compression setting is used.
7169
7170`-flto-report'
7171     Prints a report with internal details on the workings of the
7172     link-time optimizer.  The contents of this report vary from
7173     version to version, it is meant to be useful to GCC developers
7174     when processing object files in LTO mode (via `-flto').
7175
7176     Disabled by default.
7177
7178`-fuse-linker-plugin'
7179     Enables the use of linker plugin during link time optimization.
7180     This option relies on the linker plugin support in linker that is
7181     available in gold or in GNU ld 2.21 or newer.
7182
7183     This option enables the extraction of object files with GIMPLE
7184     bytecode out of library archives. This improves the quality of
7185     optimization by exposing more code the the link time optimizer.
7186     This information specify what symbols can be accessed externally
7187     (by non-LTO object or during dynamic linking).  Resulting code
7188     quality improvements on binaries (and shared libraries that do use
7189     hidden visibility) is similar to `-fwhole-program'.  See `-flto'
7190     for a description on the effect of this flag and how to use it.
7191
7192     Enabled by default when LTO support in GCC is enabled and GCC was
7193     compiled with a linker supporting plugins (GNU ld 2.21 or newer or
7194     gold).
7195
7196`-fcompare-elim'
7197     After register allocation and post-register allocation instruction
7198     splitting, identify arithmetic instructions that compute processor
7199     flags similar to a comparison operation based on that arithmetic.
7200     If possible, eliminate the explicit comparison operation.
7201
7202     This pass only applies to certain targets that cannot explicitly
7203     represent the comparison operation before register allocation is
7204     complete.
7205
7206     Enabled at levels `-O', `-O2', `-O3', `-Os'.
7207
7208`-fcprop-registers'
7209     After register allocation and post-register allocation instruction
7210     splitting, we perform a copy-propagation pass to try to reduce
7211     scheduling dependencies and occasionally eliminate the copy.
7212
7213     Enabled at levels `-O', `-O2', `-O3', `-Os'.
7214
7215`-fprofile-correction'
7216     Profiles collected using an instrumented binary for multi-threaded
7217     programs may be inconsistent due to missed counter updates. When
7218     this option is specified, GCC will use heuristics to correct or
7219     smooth out such inconsistencies. By default, GCC will emit an
7220     error message when an inconsistent profile is detected.
7221
7222`-fprofile-dir=PATH'
7223     Set the directory to search for the profile data files in to PATH.
7224     This option affects only the profile data generated by
7225     `-fprofile-generate', `-ftest-coverage', `-fprofile-arcs' and used
7226     by `-fprofile-use' and `-fbranch-probabilities' and its related
7227     options.  By default, GCC will use the current directory as PATH,
7228     thus the profile data file will appear in the same directory as
7229     the object file.
7230
7231`-fprofile-generate'
7232`-fprofile-generate=PATH'
7233     Enable options usually used for instrumenting application to
7234     produce profile useful for later recompilation with profile
7235     feedback based optimization.  You must use `-fprofile-generate'
7236     both when compiling and when linking your program.
7237
7238     The following options are enabled: `-fprofile-arcs',
7239     `-fprofile-values', `-fvpt'.
7240
7241     If PATH is specified, GCC will look at the PATH to find the
7242     profile feedback data files. See `-fprofile-dir'.
7243
7244`-fprofile-use'
7245`-fprofile-use=PATH'
7246     Enable profile feedback directed optimizations, and optimizations
7247     generally profitable only with profile feedback available.
7248
7249     The following options are enabled: `-fbranch-probabilities',
7250     `-fvpt', `-funroll-loops', `-fpeel-loops', `-ftracer'
7251
7252     By default, GCC emits an error message if the feedback profiles do
7253     not match the source code.  This error can be turned into a
7254     warning by using `-Wcoverage-mismatch'.  Note this may result in
7255     poorly optimized code.
7256
7257     If PATH is specified, GCC will look at the PATH to find the
7258     profile feedback data files. See `-fprofile-dir'.
7259
7260 The following options control compiler behavior regarding floating
7261point arithmetic.  These options trade off between speed and
7262correctness.  All must be specifically enabled.
7263
7264`-ffloat-store'
7265     Do not store floating point variables in registers, and inhibit
7266     other options that might change whether a floating point value is
7267     taken from a register or memory.
7268
7269     This option prevents undesirable excess precision on machines such
7270     as the 68000 where the floating registers (of the 68881) keep more
7271     precision than a `double' is supposed to have.  Similarly for the
7272     x86 architecture.  For most programs, the excess precision does
7273     only good, but a few programs rely on the precise definition of
7274     IEEE floating point.  Use `-ffloat-store' for such programs, after
7275     modifying them to store all pertinent intermediate computations
7276     into variables.
7277
7278`-fexcess-precision=STYLE'
7279     This option allows further control over excess precision on
7280     machines where floating-point registers have more precision than
7281     the IEEE `float' and `double' types and the processor does not
7282     support operations rounding to those types.  By default,
7283     `-fexcess-precision=fast' is in effect; this means that operations
7284     are carried out in the precision of the registers and that it is
7285     unpredictable when rounding to the types specified in the source
7286     code takes place.  When compiling C, if
7287     `-fexcess-precision=standard' is specified then excess precision
7288     will follow the rules specified in ISO C99; in particular, both
7289     casts and assignments cause values to be rounded to their semantic
7290     types (whereas `-ffloat-store' only affects assignments).  This
7291     option is enabled by default for C if a strict conformance option
7292     such as `-std=c99' is used.
7293
7294     `-fexcess-precision=standard' is not implemented for languages
7295     other than C, and has no effect if `-funsafe-math-optimizations'
7296     or `-ffast-math' is specified.  On the x86, it also has no effect
7297     if `-mfpmath=sse' or `-mfpmath=sse+387' is specified; in the
7298     former case, IEEE semantics apply without excess precision, and in
7299     the latter, rounding is unpredictable.
7300
7301`-ffast-math'
7302     Sets `-fno-math-errno', `-funsafe-math-optimizations',
7303     `-ffinite-math-only', `-fno-rounding-math', `-fno-signaling-nans'
7304     and `-fcx-limited-range'.
7305
7306     This option causes the preprocessor macro `__FAST_MATH__' to be
7307     defined.
7308
7309     This option is not turned on by any `-O' option besides `-Ofast'
7310     since it can result in incorrect output for programs which depend
7311     on an exact implementation of IEEE or ISO rules/specifications for
7312     math functions. It may, however, yield faster code for programs
7313     that do not require the guarantees of these specifications.
7314
7315`-fno-math-errno'
7316     Do not set ERRNO after calling math functions that are executed
7317     with a single instruction, e.g., sqrt.  A program that relies on
7318     IEEE exceptions for math error handling may want to use this flag
7319     for speed while maintaining IEEE arithmetic compatibility.
7320
7321     This option is not turned on by any `-O' option since it can
7322     result in incorrect output for programs which depend on an exact
7323     implementation of IEEE or ISO rules/specifications for math
7324     functions. It may, however, yield faster code for programs that do
7325     not require the guarantees of these specifications.
7326
7327     The default is `-fmath-errno'.
7328
7329     On Darwin systems, the math library never sets `errno'.  There is
7330     therefore no reason for the compiler to consider the possibility
7331     that it might, and `-fno-math-errno' is the default.
7332
7333`-funsafe-math-optimizations'
7334     Allow optimizations for floating-point arithmetic that (a) assume
7335     that arguments and results are valid and (b) may violate IEEE or
7336     ANSI standards.  When used at link-time, it may include libraries
7337     or startup files that change the default FPU control word or other
7338     similar optimizations.
7339
7340     This option is not turned on by any `-O' option since it can
7341     result in incorrect output for programs which depend on an exact
7342     implementation of IEEE or ISO rules/specifications for math
7343     functions. It may, however, yield faster code for programs that do
7344     not require the guarantees of these specifications.  Enables
7345     `-fno-signed-zeros', `-fno-trapping-math', `-fassociative-math'
7346     and `-freciprocal-math'.
7347
7348     The default is `-fno-unsafe-math-optimizations'.
7349
7350`-fassociative-math'
7351     Allow re-association of operands in series of floating-point
7352     operations.  This violates the ISO C and C++ language standard by
7353     possibly changing computation result.  NOTE: re-ordering may
7354     change the sign of zero as well as ignore NaNs and inhibit or
7355     create underflow or overflow (and thus cannot be used on a code
7356     which relies on rounding behavior like `(x + 2**52) - 2**52)'.
7357     May also reorder floating-point comparisons and thus may not be
7358     used when ordered comparisons are required.  This option requires
7359     that both `-fno-signed-zeros' and `-fno-trapping-math' be in
7360     effect.  Moreover, it doesn't make much sense with
7361     `-frounding-math'. For Fortran the option is automatically enabled
7362     when both `-fno-signed-zeros' and `-fno-trapping-math' are in
7363     effect.
7364
7365     The default is `-fno-associative-math'.
7366
7367`-freciprocal-math'
7368     Allow the reciprocal of a value to be used instead of dividing by
7369     the value if this enables optimizations.  For example `x / y' can
7370     be replaced with `x * (1/y)' which is useful if `(1/y)' is subject
7371     to common subexpression elimination.  Note that this loses
7372     precision and increases the number of flops operating on the value.
7373
7374     The default is `-fno-reciprocal-math'.
7375
7376`-ffinite-math-only'
7377     Allow optimizations for floating-point arithmetic that assume that
7378     arguments and results are not NaNs or +-Infs.
7379
7380     This option is not turned on by any `-O' option since it can
7381     result in incorrect output for programs which depend on an exact
7382     implementation of IEEE or ISO rules/specifications for math
7383     functions. It may, however, yield faster code for programs that do
7384     not require the guarantees of these specifications.
7385
7386     The default is `-fno-finite-math-only'.
7387
7388`-fno-signed-zeros'
7389     Allow optimizations for floating point arithmetic that ignore the
7390     signedness of zero.  IEEE arithmetic specifies the behavior of
7391     distinct +0.0 and -0.0 values, which then prohibits simplification
7392     of expressions such as x+0.0 or 0.0*x (even with
7393     `-ffinite-math-only').  This option implies that the sign of a
7394     zero result isn't significant.
7395
7396     The default is `-fsigned-zeros'.
7397
7398`-fno-trapping-math'
7399     Compile code assuming that floating-point operations cannot
7400     generate user-visible traps.  These traps include division by
7401     zero, overflow, underflow, inexact result and invalid operation.
7402     This option requires that `-fno-signaling-nans' be in effect.
7403     Setting this option may allow faster code if one relies on
7404     "non-stop" IEEE arithmetic, for example.
7405
7406     This option should never be turned on by any `-O' option since it
7407     can result in incorrect output for programs which depend on an
7408     exact implementation of IEEE or ISO rules/specifications for math
7409     functions.
7410
7411     The default is `-ftrapping-math'.
7412
7413`-frounding-math'
7414     Disable transformations and optimizations that assume default
7415     floating point rounding behavior.  This is round-to-zero for all
7416     floating point to integer conversions, and round-to-nearest for
7417     all other arithmetic truncations.  This option should be specified
7418     for programs that change the FP rounding mode dynamically, or that
7419     may be executed with a non-default rounding mode.  This option
7420     disables constant folding of floating point expressions at
7421     compile-time (which may be affected by rounding mode) and
7422     arithmetic transformations that are unsafe in the presence of
7423     sign-dependent rounding modes.
7424
7425     The default is `-fno-rounding-math'.
7426
7427     This option is experimental and does not currently guarantee to
7428     disable all GCC optimizations that are affected by rounding mode.
7429     Future versions of GCC may provide finer control of this setting
7430     using C99's `FENV_ACCESS' pragma.  This command line option will
7431     be used to specify the default state for `FENV_ACCESS'.
7432
7433`-fsignaling-nans'
7434     Compile code assuming that IEEE signaling NaNs may generate
7435     user-visible traps during floating-point operations.  Setting this
7436     option disables optimizations that may change the number of
7437     exceptions visible with signaling NaNs.  This option implies
7438     `-ftrapping-math'.
7439
7440     This option causes the preprocessor macro `__SUPPORT_SNAN__' to be
7441     defined.
7442
7443     The default is `-fno-signaling-nans'.
7444
7445     This option is experimental and does not currently guarantee to
7446     disable all GCC optimizations that affect signaling NaN behavior.
7447
7448`-fsingle-precision-constant'
7449     Treat floating point constant as single precision constant instead
7450     of implicitly converting it to double precision constant.
7451
7452`-fcx-limited-range'
7453     When enabled, this option states that a range reduction step is not
7454     needed when performing complex division.  Also, there is no
7455     checking whether the result of a complex multiplication or
7456     division is `NaN + I*NaN', with an attempt to rescue the situation
7457     in that case.  The default is `-fno-cx-limited-range', but is
7458     enabled by `-ffast-math'.
7459
7460     This option controls the default setting of the ISO C99
7461     `CX_LIMITED_RANGE' pragma.  Nevertheless, the option applies to
7462     all languages.
7463
7464`-fcx-fortran-rules'
7465     Complex multiplication and division follow Fortran rules.  Range
7466     reduction is done as part of complex division, but there is no
7467     checking whether the result of a complex multiplication or
7468     division is `NaN + I*NaN', with an attempt to rescue the situation
7469     in that case.
7470
7471     The default is `-fno-cx-fortran-rules'.
7472
7473
7474 The following options control optimizations that may improve
7475performance, but are not enabled by any `-O' options.  This section
7476includes experimental options that may produce broken code.
7477
7478`-fbranch-probabilities'
7479     After running a program compiled with `-fprofile-arcs' (*note
7480     Options for Debugging Your Program or `gcc': Debugging Options.),
7481     you can compile it a second time using `-fbranch-probabilities',
7482     to improve optimizations based on the number of times each branch
7483     was taken.  When the program compiled with `-fprofile-arcs' exits
7484     it saves arc execution counts to a file called `SOURCENAME.gcda'
7485     for each source file.  The information in this data file is very
7486     dependent on the structure of the generated code, so you must use
7487     the same source code and the same optimization options for both
7488     compilations.
7489
7490     With `-fbranch-probabilities', GCC puts a `REG_BR_PROB' note on
7491     each `JUMP_INSN' and `CALL_INSN'.  These can be used to improve
7492     optimization.  Currently, they are only used in one place: in
7493     `reorg.c', instead of guessing which path a branch is most likely
7494     to take, the `REG_BR_PROB' values are used to exactly determine
7495     which path is taken more often.
7496
7497`-fprofile-values'
7498     If combined with `-fprofile-arcs', it adds code so that some data
7499     about values of expressions in the program is gathered.
7500
7501     With `-fbranch-probabilities', it reads back the data gathered
7502     from profiling values of expressions for usage in optimizations.
7503
7504     Enabled with `-fprofile-generate' and `-fprofile-use'.
7505
7506`-fvpt'
7507     If combined with `-fprofile-arcs', it instructs the compiler to add
7508     a code to gather information about values of expressions.
7509
7510     With `-fbranch-probabilities', it reads back the data gathered and
7511     actually performs the optimizations based on them.  Currently the
7512     optimizations include specialization of division operation using
7513     the knowledge about the value of the denominator.
7514
7515`-frename-registers'
7516     Attempt to avoid false dependencies in scheduled code by making use
7517     of registers left over after register allocation.  This
7518     optimization will most benefit processors with lots of registers.
7519     Depending on the debug information format adopted by the target,
7520     however, it can make debugging impossible, since variables will no
7521     longer stay in a "home register".
7522
7523     Enabled by default with `-funroll-loops' and `-fpeel-loops'.
7524
7525`-ftracer'
7526     Perform tail duplication to enlarge superblock size.  This
7527     transformation simplifies the control flow of the function
7528     allowing other optimizations to do better job.
7529
7530     Enabled with `-fprofile-use'.
7531
7532`-funroll-loops'
7533     Unroll loops whose number of iterations can be determined at
7534     compile time or upon entry to the loop.  `-funroll-loops' implies
7535     `-frerun-cse-after-loop', `-fweb' and `-frename-registers'.  It
7536     also turns on complete loop peeling (i.e. complete removal of
7537     loops with small constant number of iterations).  This option
7538     makes code larger, and may or may not make it run faster.
7539
7540     Enabled with `-fprofile-use'.
7541
7542`-funroll-all-loops'
7543     Unroll all loops, even if their number of iterations is uncertain
7544     when the loop is entered.  This usually makes programs run more
7545     slowly.  `-funroll-all-loops' implies the same options as
7546     `-funroll-loops'.
7547
7548`-fpeel-loops'
7549     Peels the loops for that there is enough information that they do
7550     not roll much (from profile feedback).  It also turns on complete
7551     loop peeling (i.e. complete removal of loops with small constant
7552     number of iterations).
7553
7554     Enabled with `-fprofile-use'.
7555
7556`-fmove-loop-invariants'
7557     Enables the loop invariant motion pass in the RTL loop optimizer.
7558     Enabled at level `-O1'
7559
7560`-funswitch-loops'
7561     Move branches with loop invariant conditions out of the loop, with
7562     duplicates of the loop on both branches (modified according to
7563     result of the condition).
7564
7565`-ffunction-sections'
7566`-fdata-sections'
7567     Place each function or data item into its own section in the output
7568     file if the target supports arbitrary sections.  The name of the
7569     function or the name of the data item determines the section's name
7570     in the output file.
7571
7572     Use these options on systems where the linker can perform
7573     optimizations to improve locality of reference in the instruction
7574     space.  Most systems using the ELF object format and SPARC
7575     processors running Solaris 2 have linkers with such optimizations.
7576     AIX may have these optimizations in the future.
7577
7578     Only use these options when there are significant benefits from
7579     doing so.  When you specify these options, the assembler and
7580     linker will create larger object and executable files and will
7581     also be slower.  You will not be able to use `gprof' on all
7582     systems if you specify this option and you may have problems with
7583     debugging if you specify both this option and `-g'.
7584
7585`-fbranch-target-load-optimize'
7586     Perform branch target register load optimization before prologue /
7587     epilogue threading.  The use of target registers can typically be
7588     exposed only during reload, thus hoisting loads out of loops and
7589     doing inter-block scheduling needs a separate optimization pass.
7590
7591`-fbranch-target-load-optimize2'
7592     Perform branch target register load optimization after prologue /
7593     epilogue threading.
7594
7595`-fbtr-bb-exclusive'
7596     When performing branch target register load optimization, don't
7597     reuse branch target registers in within any basic block.
7598
7599`-fstack-protector'
7600     Emit extra code to check for buffer overflows, such as stack
7601     smashing attacks.  This is done by adding a guard variable to
7602     functions with vulnerable objects.  This includes functions that
7603     call alloca, and functions with buffers larger than 8 bytes.  The
7604     guards are initialized when a function is entered and then checked
7605     when the function exits.  If a guard check fails, an error message
7606     is printed and the program exits.
7607
7608`-fstack-protector-all'
7609     Like `-fstack-protector' except that all functions are protected.
7610
7611`-fsection-anchors'
7612     Try to reduce the number of symbolic address calculations by using
7613     shared "anchor" symbols to address nearby objects.  This
7614     transformation can help to reduce the number of GOT entries and
7615     GOT accesses on some targets.
7616
7617     For example, the implementation of the following function `foo':
7618
7619          static int a, b, c;
7620          int foo (void) { return a + b + c; }
7621
7622     would usually calculate the addresses of all three variables, but
7623     if you compile it with `-fsection-anchors', it will access the
7624     variables from a common anchor point instead.  The effect is
7625     similar to the following pseudocode (which isn't valid C):
7626
7627          int foo (void)
7628          {
7629            register int *xr = &x;
7630            return xr[&a - &x] + xr[&b - &x] + xr[&c - &x];
7631          }
7632
7633     Not all targets support this option.
7634
7635`-fremove-local-statics'
7636     Converts function-local static variables to automatic variables
7637     when it is safe to do so.  This transformation can reduce the
7638     number of instructions executed due to automatic variables being
7639     cheaper to read/write than static variables.
7640
7641`-fpromote-loop-indices'
7642     Converts loop indices that have a type shorter than the word size
7643     to word-sized quantities.  This transformation can reduce the
7644     overhead associated with sign/zero-extension and truncation of
7645     such variables.  Using `-funsafe-loop-optimizations' with this
7646     option may result in more effective optimization.
7647
7648`--param NAME=VALUE'
7649     In some places, GCC uses various constants to control the amount of
7650     optimization that is done.  For example, GCC will not inline
7651     functions that contain more that a certain number of instructions.
7652     You can control some of these constants on the command-line using
7653     the `--param' option.
7654
7655     The names of specific parameters, and the meaning of the values,
7656     are tied to the internals of the compiler, and are subject to
7657     change without notice in future releases.
7658
7659     In each case, the VALUE is an integer.  The allowable choices for
7660     NAME are given in the following table:
7661
7662    `struct-reorg-cold-struct-ratio'
7663          The threshold ratio (as a percentage) between a structure
7664          frequency and the frequency of the hottest structure in the
7665          program.  This parameter is used by struct-reorg optimization
7666          enabled by `-fipa-struct-reorg'.  We say that if the ratio of
7667          a structure frequency, calculated by profiling, to the
7668          hottest structure frequency in the program is less than this
7669          parameter, then structure reorganization is not applied to
7670          this structure.  The default is 10.
7671
7672    `predictable-branch-outcome'
7673          When branch is predicted to be taken with probability lower
7674          than this threshold (in percent), then it is considered well
7675          predictable. The default is 10.
7676
7677    `max-crossjump-edges'
7678          The maximum number of incoming edges to consider for
7679          crossjumping.  The algorithm used by `-fcrossjumping' is
7680          O(N^2) in the number of edges incoming to each block.
7681          Increasing values mean more aggressive optimization, making
7682          the compile time increase with probably small improvement in
7683          executable size.
7684
7685    `min-crossjump-insns'
7686          The minimum number of instructions which must be matched at
7687          the end of two blocks before crossjumping will be performed
7688          on them.  This value is ignored in the case where all
7689          instructions in the block being crossjumped from are matched.
7690          The default value is 5.
7691
7692    `max-grow-copy-bb-insns'
7693          The maximum code size expansion factor when copying basic
7694          blocks instead of jumping.  The expansion is relative to a
7695          jump instruction.  The default value is 8.
7696
7697    `max-goto-duplication-insns'
7698          The maximum number of instructions to duplicate to a block
7699          that jumps to a computed goto.  To avoid O(N^2) behavior in a
7700          number of passes, GCC factors computed gotos early in the
7701          compilation process, and unfactors them as late as possible.
7702          Only computed jumps at the end of a basic blocks with no more
7703          than max-goto-duplication-insns are unfactored.  The default
7704          value is 8.
7705
7706    `max-delay-slot-insn-search'
7707          The maximum number of instructions to consider when looking
7708          for an instruction to fill a delay slot.  If more than this
7709          arbitrary number of instructions is searched, the time
7710          savings from filling the delay slot will be minimal so stop
7711          searching.  Increasing values mean more aggressive
7712          optimization, making the compile time increase with probably
7713          small improvement in executable run time.
7714
7715    `max-delay-slot-live-search'
7716          When trying to fill delay slots, the maximum number of
7717          instructions to consider when searching for a block with
7718          valid live register information.  Increasing this arbitrarily
7719          chosen value means more aggressive optimization, increasing
7720          the compile time.  This parameter should be removed when the
7721          delay slot code is rewritten to maintain the control-flow
7722          graph.
7723
7724    `max-gcse-memory'
7725          The approximate maximum amount of memory that will be
7726          allocated in order to perform the global common subexpression
7727          elimination optimization.  If more memory than specified is
7728          required, the optimization will not be done.
7729
7730    `max-gcse-insertion-ratio'
7731          If the ratio of expression insertions to deletions is larger
7732          than this value for any expression, then RTL PRE will insert
7733          or remove the expression and thus leave partially redundant
7734          computations in the instruction stream.  The default value is
7735          20.
7736
7737    `max-pending-list-length'
7738          The maximum number of pending dependencies scheduling will
7739          allow before flushing the current state and starting over.
7740          Large functions with few branches or calls can create
7741          excessively large lists which needlessly consume memory and
7742          resources.
7743
7744    `max-inline-insns-single'
7745          Several parameters control the tree inliner used in gcc.
7746          This number sets the maximum number of instructions (counted
7747          in GCC's internal representation) in a single function that
7748          the tree inliner will consider for inlining.  This only
7749          affects functions declared inline and methods implemented in
7750          a class declaration (C++).  The default value is 400.
7751
7752    `max-inline-insns-auto'
7753          When you use `-finline-functions' (included in `-O3'), a lot
7754          of functions that would otherwise not be considered for
7755          inlining by the compiler will be investigated.  To those
7756          functions, a different (more restrictive) limit compared to
7757          functions declared inline can be applied.  The default value
7758          is 40.
7759
7760    `large-function-insns'
7761          The limit specifying really large functions.  For functions
7762          larger than this limit after inlining, inlining is
7763          constrained by `--param large-function-growth'.  This
7764          parameter is useful primarily to avoid extreme compilation
7765          time caused by non-linear algorithms used by the backend.
7766          The default value is 2700.
7767
7768    `large-function-growth'
7769          Specifies maximal growth of large function caused by inlining
7770          in percents.  The default value is 100 which limits large
7771          function growth to 2.0 times the original size.
7772
7773    `large-unit-insns'
7774          The limit specifying large translation unit.  Growth caused
7775          by inlining of units larger than this limit is limited by
7776          `--param inline-unit-growth'.  For small units this might be
7777          too tight (consider unit consisting of function A that is
7778          inline and B that just calls A three time.  If B is small
7779          relative to A, the growth of unit is 300\% and yet such
7780          inlining is very sane.  For very large units consisting of
7781          small inlineable functions however the overall unit growth
7782          limit is needed to avoid exponential explosion of code size.
7783          Thus for smaller units, the size is increased to `--param
7784          large-unit-insns' before applying `--param
7785          inline-unit-growth'.  The default is 10000
7786
7787    `inline-unit-growth'
7788          Specifies maximal overall growth of the compilation unit
7789          caused by inlining.  The default value is 30 which limits
7790          unit growth to 1.3 times the original size.
7791
7792    `ipcp-unit-growth'
7793          Specifies maximal overall growth of the compilation unit
7794          caused by interprocedural constant propagation.  The default
7795          value is 10 which limits unit growth to 1.1 times the
7796          original size.
7797
7798    `large-stack-frame'
7799          The limit specifying large stack frames.  While inlining the
7800          algorithm is trying to not grow past this limit too much.
7801          Default value is 256 bytes.
7802
7803    `large-stack-frame-growth'
7804          Specifies maximal growth of large stack frames caused by
7805          inlining in percents.  The default value is 1000 which limits
7806          large stack frame growth to 11 times the original size.
7807
7808    `max-inline-insns-recursive'
7809    `max-inline-insns-recursive-auto'
7810          Specifies maximum number of instructions out-of-line copy of
7811          self recursive inline function can grow into by performing
7812          recursive inlining.
7813
7814          For functions declared inline `--param
7815          max-inline-insns-recursive' is taken into account.  For
7816          function not declared inline, recursive inlining happens only
7817          when `-finline-functions' (included in `-O3') is enabled and
7818          `--param max-inline-insns-recursive-auto' is used.  The
7819          default value is 450.
7820
7821    `max-inline-recursive-depth'
7822    `max-inline-recursive-depth-auto'
7823          Specifies maximum recursion depth used by the recursive
7824          inlining.
7825
7826          For functions declared inline `--param
7827          max-inline-recursive-depth' is taken into account.  For
7828          function not declared inline, recursive inlining happens only
7829          when `-finline-functions' (included in `-O3') is enabled and
7830          `--param max-inline-recursive-depth-auto' is used.  The
7831          default value is 8.
7832
7833    `min-inline-recursive-probability'
7834          Recursive inlining is profitable only for function having
7835          deep recursion in average and can hurt for function having
7836          little recursion depth by increasing the prologue size or
7837          complexity of function body to other optimizers.
7838
7839          When profile feedback is available (see `-fprofile-generate')
7840          the actual recursion depth can be guessed from probability
7841          that function will recurse via given call expression.  This
7842          parameter limits inlining only to call expression whose
7843          probability exceeds given threshold (in percents).  The
7844          default value is 10.
7845
7846    `early-inlining-insns'
7847          Specify growth that early inliner can make.  In effect it
7848          increases amount of inlining for code having large
7849          abstraction penalty.  The default value is 10.
7850
7851    `max-early-inliner-iterations'
7852    `max-early-inliner-iterations'
7853          Limit of iterations of early inliner.  This basically bounds
7854          number of nested indirect calls early inliner can resolve.
7855          Deeper chains are still handled by late inlining.
7856
7857    `comdat-sharing-probability'
7858    `comdat-sharing-probability'
7859          Probability (in percent) that C++ inline function with comdat
7860          visibility will be shared across multiple compilation units.
7861          The default value is 20.
7862
7863    `min-vect-loop-bound'
7864          The minimum number of iterations under which a loop will not
7865          get vectorized when `-ftree-vectorize' is used.  The number
7866          of iterations after vectorization needs to be greater than
7867          the value specified by this option to allow vectorization.
7868          The default value is 0.
7869
7870    `gcse-cost-distance-ratio'
7871          Scaling factor in calculation of maximum distance an
7872          expression can be moved by GCSE optimizations.  This is
7873          currently supported only in the code hoisting pass.  The
7874          bigger the ratio, the more aggressive code hoisting will be
7875          with simple expressions, i.e., the expressions which have cost
7876          less than `gcse-unrestricted-cost'.  Specifying 0 will disable
7877          hoisting of simple expressions.  The default value is 10.
7878
7879    `gcse-unrestricted-cost'
7880          Cost, roughly measured as the cost of a single typical machine
7881          instruction, at which GCSE optimizations will not constrain
7882          the distance an expression can travel.  This is currently
7883          supported only in the code hoisting pass.  The lesser the
7884          cost, the more aggressive code hoisting will be.  Specifying
7885          0 will allow all expressions to travel unrestricted distances.
7886          The default value is 3.
7887
7888    `max-hoist-depth'
7889          The depth of search in the dominator tree for expressions to
7890          hoist.  This is used to avoid quadratic behavior in hoisting
7891          algorithm.  The value of 0 will avoid limiting the search,
7892          but may slow down compilation of huge functions.  The default
7893          value is 30.
7894
7895    `max-unrolled-insns'
7896          The maximum number of instructions that a loop should have if
7897          that loop is unrolled, and if the loop is unrolled, it
7898          determines how many times the loop code is unrolled.
7899
7900    `max-average-unrolled-insns'
7901          The maximum number of instructions biased by probabilities of
7902          their execution that a loop should have if that loop is
7903          unrolled, and if the loop is unrolled, it determines how many
7904          times the loop code is unrolled.
7905
7906    `max-unroll-times'
7907          The maximum number of unrollings of a single loop.
7908
7909    `max-peeled-insns'
7910          The maximum number of instructions that a loop should have if
7911          that loop is peeled, and if the loop is peeled, it determines
7912          how many times the loop code is peeled.
7913
7914    `max-peel-times'
7915          The maximum number of peelings of a single loop.
7916
7917    `max-completely-peeled-insns'
7918          The maximum number of insns of a completely peeled loop.
7919
7920    `max-completely-peel-times'
7921          The maximum number of iterations of a loop to be suitable for
7922          complete peeling.
7923
7924    `max-completely-peel-loop-nest-depth'
7925          The maximum depth of a loop nest suitable for complete
7926          peeling.
7927
7928    `max-unswitch-insns'
7929          The maximum number of insns of an unswitched loop.
7930
7931    `max-unswitch-level'
7932          The maximum number of branches unswitched in a single loop.
7933
7934    `lim-expensive'
7935          The minimum cost of an expensive expression in the loop
7936          invariant motion.
7937
7938    `iv-consider-all-candidates-bound'
7939          Bound on number of candidates for induction variables below
7940          that all candidates are considered for each use in induction
7941          variable optimizations.  Only the most relevant candidates
7942          are considered if there are more candidates, to avoid
7943          quadratic time complexity.
7944
7945    `iv-max-considered-uses'
7946          The induction variable optimizations give up on loops that
7947          contain more induction variable uses.
7948
7949    `iv-always-prune-cand-set-bound'
7950          If number of candidates in the set is smaller than this value,
7951          we always try to remove unnecessary ivs from the set during
7952          its optimization when a new iv is added to the set.
7953
7954    `scev-max-expr-size'
7955          Bound on size of expressions used in the scalar evolutions
7956          analyzer.  Large expressions slow the analyzer.
7957
7958    `scev-max-expr-complexity'
7959          Bound on the complexity of the expressions in the scalar
7960          evolutions analyzer.  Complex expressions slow the analyzer.
7961
7962    `omega-max-vars'
7963          The maximum number of variables in an Omega constraint system.
7964          The default value is 128.
7965
7966    `omega-max-geqs'
7967          The maximum number of inequalities in an Omega constraint
7968          system.  The default value is 256.
7969
7970    `omega-max-eqs'
7971          The maximum number of equalities in an Omega constraint
7972          system.  The default value is 128.
7973
7974    `omega-max-wild-cards'
7975          The maximum number of wildcard variables that the Omega
7976          solver will be able to insert.  The default value is 18.
7977
7978    `omega-hash-table-size'
7979          The size of the hash table in the Omega solver.  The default
7980          value is 550.
7981
7982    `omega-max-keys'
7983          The maximal number of keys used by the Omega solver.  The
7984          default value is 500.
7985
7986    `omega-eliminate-redundant-constraints'
7987          When set to 1, use expensive methods to eliminate all
7988          redundant constraints.  The default value is 0.
7989
7990    `vect-max-version-for-alignment-checks'
7991          The maximum number of runtime checks that can be performed
7992          when doing loop versioning for alignment in the vectorizer.
7993          See option ftree-vect-loop-version for more information.
7994
7995    `vect-max-version-for-alias-checks'
7996          The maximum number of runtime checks that can be performed
7997          when doing loop versioning for alias in the vectorizer.  See
7998          option ftree-vect-loop-version for more information.
7999
8000    `max-iterations-to-track'
8001          The maximum number of iterations of a loop the brute force
8002          algorithm for analysis of # of iterations of the loop tries
8003          to evaluate.
8004
8005    `hot-bb-count-fraction'
8006          Select fraction of the maximal count of repetitions of basic
8007          block in program given basic block needs to have to be
8008          considered hot.
8009
8010    `hot-bb-frequency-fraction'
8011          Select fraction of the entry block frequency of executions of
8012          basic block in function given basic block needs to have to be
8013          considered hot
8014
8015    `max-predicted-iterations'
8016          The maximum number of loop iterations we predict statically.
8017          This is useful in cases where function contain single loop
8018          with known bound and other loop with unknown.  We predict the
8019          known number of iterations correctly, while the unknown
8020          number of iterations average to roughly 10.  This means that
8021          the loop without bounds would appear artificially cold
8022          relative to the other one.
8023
8024    `align-threshold'
8025          Select fraction of the maximal frequency of executions of
8026          basic block in function given basic block will get aligned.
8027
8028    `align-loop-iterations'
8029          A loop expected to iterate at lest the selected number of
8030          iterations will get aligned.
8031
8032    `tracer-dynamic-coverage'
8033    `tracer-dynamic-coverage-feedback'
8034          This value is used to limit superblock formation once the
8035          given percentage of executed instructions is covered.  This
8036          limits unnecessary code size expansion.
8037
8038          The `tracer-dynamic-coverage-feedback' is used only when
8039          profile feedback is available.  The real profiles (as opposed
8040          to statically estimated ones) are much less balanced allowing
8041          the threshold to be larger value.
8042
8043    `tracer-max-code-growth'
8044          Stop tail duplication once code growth has reached given
8045          percentage.  This is rather hokey argument, as most of the
8046          duplicates will be eliminated later in cross jumping, so it
8047          may be set to much higher values than is the desired code
8048          growth.
8049
8050    `tracer-min-branch-ratio'
8051          Stop reverse growth when the reverse probability of best edge
8052          is less than this threshold (in percent).
8053
8054    `tracer-min-branch-ratio'
8055    `tracer-min-branch-ratio-feedback'
8056          Stop forward growth if the best edge do have probability
8057          lower than this threshold.
8058
8059          Similarly to `tracer-dynamic-coverage' two values are
8060          present, one for compilation for profile feedback and one for
8061          compilation without.  The value for compilation with profile
8062          feedback needs to be more conservative (higher) in order to
8063          make tracer effective.
8064
8065    `max-cse-path-length'
8066          Maximum number of basic blocks on path that cse considers.
8067          The default is 10.
8068
8069    `max-cse-insns'
8070          The maximum instructions CSE process before flushing. The
8071          default is 1000.
8072
8073    `ggc-min-expand'
8074          GCC uses a garbage collector to manage its own memory
8075          allocation.  This parameter specifies the minimum percentage
8076          by which the garbage collector's heap should be allowed to
8077          expand between collections.  Tuning this may improve
8078          compilation speed; it has no effect on code generation.
8079
8080          The default is 30% + 70% * (RAM/1GB) with an upper bound of
8081          100% when RAM >= 1GB.  If `getrlimit' is available, the
8082          notion of "RAM" is the smallest of actual RAM and
8083          `RLIMIT_DATA' or `RLIMIT_AS'.  If GCC is not able to
8084          calculate RAM on a particular platform, the lower bound of
8085          30% is used.  Setting this parameter and `ggc-min-heapsize'
8086          to zero causes a full collection to occur at every
8087          opportunity.  This is extremely slow, but can be useful for
8088          debugging.
8089
8090    `ggc-min-heapsize'
8091          Minimum size of the garbage collector's heap before it begins
8092          bothering to collect garbage.  The first collection occurs
8093          after the heap expands by `ggc-min-expand'% beyond
8094          `ggc-min-heapsize'.  Again, tuning this may improve
8095          compilation speed, and has no effect on code generation.
8096
8097          The default is the smaller of RAM/8, RLIMIT_RSS, or a limit
8098          which tries to ensure that RLIMIT_DATA or RLIMIT_AS are not
8099          exceeded, but with a lower bound of 4096 (four megabytes) and
8100          an upper bound of 131072 (128 megabytes).  If GCC is not able
8101          to calculate RAM on a particular platform, the lower bound is
8102          used.  Setting this parameter very large effectively disables
8103          garbage collection.  Setting this parameter and
8104          `ggc-min-expand' to zero causes a full collection to occur at
8105          every opportunity.
8106
8107    `max-reload-search-insns'
8108          The maximum number of instruction reload should look backward
8109          for equivalent register.  Increasing values mean more
8110          aggressive optimization, making the compile time increase
8111          with probably slightly better performance.  The default value
8112          is 100.
8113
8114    `max-cselib-memory-locations'
8115          The maximum number of memory locations cselib should take
8116          into account.  Increasing values mean more aggressive
8117          optimization, making the compile time increase with probably
8118          slightly better performance.  The default value is 500.
8119
8120    `reorder-blocks-duplicate'
8121    `reorder-blocks-duplicate-feedback'
8122          Used by basic block reordering pass to decide whether to use
8123          unconditional branch or duplicate the code on its
8124          destination.  Code is duplicated when its estimated size is
8125          smaller than this value multiplied by the estimated size of
8126          unconditional jump in the hot spots of the program.
8127
8128          The `reorder-block-duplicate-feedback' is used only when
8129          profile feedback is available and may be set to higher values
8130          than `reorder-block-duplicate' since information about the
8131          hot spots is more accurate.
8132
8133    `max-sched-ready-insns'
8134          The maximum number of instructions ready to be issued the
8135          scheduler should consider at any given time during the first
8136          scheduling pass.  Increasing values mean more thorough
8137          searches, making the compilation time increase with probably
8138          little benefit.  The default value is 100.
8139
8140    `max-sched-region-blocks'
8141          The maximum number of blocks in a region to be considered for
8142          interblock scheduling.  The default value is 10.
8143
8144    `max-pipeline-region-blocks'
8145          The maximum number of blocks in a region to be considered for
8146          pipelining in the selective scheduler.  The default value is
8147          15.
8148
8149    `max-sched-region-insns'
8150          The maximum number of insns in a region to be considered for
8151          interblock scheduling.  The default value is 100.
8152
8153    `max-pipeline-region-insns'
8154          The maximum number of insns in a region to be considered for
8155          pipelining in the selective scheduler.  The default value is
8156          200.
8157
8158    `min-spec-prob'
8159          The minimum probability (in percents) of reaching a source
8160          block for interblock speculative scheduling.  The default
8161          value is 40.
8162
8163    `max-sched-extend-regions-iters'
8164          The maximum number of iterations through CFG to extend
8165          regions.  0 - disable region extension, N - do at most N
8166          iterations.  The default value is 0.
8167
8168    `max-sched-insn-conflict-delay'
8169          The maximum conflict delay for an insn to be considered for
8170          speculative motion.  The default value is 3.
8171
8172    `sched-spec-prob-cutoff'
8173          The minimal probability of speculation success (in percents),
8174          so that speculative insn will be scheduled.  The default
8175          value is 40.
8176
8177    `sched-mem-true-dep-cost'
8178          Minimal distance (in CPU cycles) between store and load
8179          targeting same memory locations.  The default value is 1.
8180
8181    `selsched-max-lookahead'
8182          The maximum size of the lookahead window of selective
8183          scheduling.  It is a depth of search for available
8184          instructions.  The default value is 50.
8185
8186    `selsched-max-sched-times'
8187          The maximum number of times that an instruction will be
8188          scheduled during selective scheduling.  This is the limit on
8189          the number of iterations through which the instruction may be
8190          pipelined.  The default value is 2.
8191
8192    `selsched-max-insns-to-rename'
8193          The maximum number of best instructions in the ready list
8194          that are considered for renaming in the selective scheduler.
8195          The default value is 2.
8196
8197    `max-last-value-rtl'
8198          The maximum size measured as number of RTLs that can be
8199          recorded in an expression in combiner for a pseudo register
8200          as last known value of that register.  The default is 10000.
8201
8202    `integer-share-limit'
8203          Small integer constants can use a shared data structure,
8204          reducing the compiler's memory usage and increasing its
8205          speed.  This sets the maximum value of a shared integer
8206          constant.  The default value is 256.
8207
8208    `min-virtual-mappings'
8209          Specifies the minimum number of virtual mappings in the
8210          incremental SSA updater that should be registered to trigger
8211          the virtual mappings heuristic defined by
8212          virtual-mappings-ratio.  The default value is 100.
8213
8214    `virtual-mappings-ratio'
8215          If the number of virtual mappings is virtual-mappings-ratio
8216          bigger than the number of virtual symbols to be updated, then
8217          the incremental SSA updater switches to a full update for
8218          those symbols.  The default ratio is 3.
8219
8220    `ssp-buffer-size'
8221          The minimum size of buffers (i.e. arrays) that will receive
8222          stack smashing protection when `-fstack-protection' is used.
8223
8224    `max-jump-thread-duplication-stmts'
8225          Maximum number of statements allowed in a block that needs to
8226          be duplicated when threading jumps.
8227
8228    `max-fields-for-field-sensitive'
8229          Maximum number of fields in a structure we will treat in a
8230          field sensitive manner during pointer analysis.  The default
8231          is zero for -O0, and -O1 and 100 for -Os, -O2, and -O3.
8232
8233    `prefetch-latency'
8234          Estimate on average number of instructions that are executed
8235          before prefetch finishes.  The distance we prefetch ahead is
8236          proportional to this constant.  Increasing this number may
8237          also lead to less streams being prefetched (see
8238          `simultaneous-prefetches').
8239
8240    `simultaneous-prefetches'
8241          Maximum number of prefetches that can run at the same time.
8242
8243    `l1-cache-line-size'
8244          The size of cache line in L1 cache, in bytes.
8245
8246    `l1-cache-size'
8247          The size of L1 cache, in kilobytes.
8248
8249    `l2-cache-size'
8250          The size of L2 cache, in kilobytes.
8251
8252    `min-insn-to-prefetch-ratio'
8253          The minimum ratio between the number of instructions and the
8254          number of prefetches to enable prefetching in a loop.
8255
8256    `prefetch-min-insn-to-mem-ratio'
8257          The minimum ratio between the number of instructions and the
8258          number of memory references to enable prefetching in a loop.
8259
8260    `use-canonical-types'
8261          Whether the compiler should use the "canonical" type system.
8262          By default, this should always be 1, which uses a more
8263          efficient internal mechanism for comparing types in C++ and
8264          Objective-C++.  However, if bugs in the canonical type system
8265          are causing compilation failures, set this value to 0 to
8266          disable canonical types.
8267
8268    `switch-conversion-max-branch-ratio'
8269          Switch initialization conversion will refuse to create arrays
8270          that are bigger than `switch-conversion-max-branch-ratio'
8271          times the number of branches in the switch.
8272
8273    `max-partial-antic-length'
8274          Maximum length of the partial antic set computed during the
8275          tree partial redundancy elimination optimization
8276          (`-ftree-pre') when optimizing at `-O3' and above.  For some
8277          sorts of source code the enhanced partial redundancy
8278          elimination optimization can run away, consuming all of the
8279          memory available on the host machine.  This parameter sets a
8280          limit on the length of the sets that are computed, which
8281          prevents the runaway behavior.  Setting a value of 0 for this
8282          parameter will allow an unlimited set length.
8283
8284    `sccvn-max-scc-size'
8285          Maximum size of a strongly connected component (SCC) during
8286          SCCVN processing.  If this limit is hit, SCCVN processing for
8287          the whole function will not be done and optimizations
8288          depending on it will be disabled.  The default maximum SCC
8289          size is 10000.
8290
8291    `ira-max-loops-num'
8292          IRA uses a regional register allocation by default.  If a
8293          function contains loops more than number given by the
8294          parameter, only at most given number of the most frequently
8295          executed loops will form regions for the regional register
8296          allocation.  The default value of the parameter is 100.
8297
8298    `ira-max-conflict-table-size'
8299          Although IRA uses a sophisticated algorithm of compression
8300          conflict table, the table can be still big for huge
8301          functions.  If the conflict table for a function could be
8302          more than size in MB given by the parameter, the conflict
8303          table is not built and faster, simpler, and lower quality
8304          register allocation algorithm will be used.  The algorithm do
8305          not use pseudo-register conflicts.  The default value of the
8306          parameter is 2000.
8307
8308    `ira-loop-reserved-regs'
8309          IRA can be used to evaluate more accurate register pressure
8310          in loops for decision to move loop invariants (see `-O3').
8311          The number of available registers reserved for some other
8312          purposes is described by this parameter.  The default value
8313          of the parameter is 2 which is minimal number of registers
8314          needed for execution of typical instruction.  This value is
8315          the best found from numerous experiments.
8316
8317    `loop-invariant-max-bbs-in-loop'
8318          Loop invariant motion can be very expensive, both in compile
8319          time and in amount of needed compile time memory, with very
8320          large loops.  Loops with more basic blocks than this
8321          parameter won't have loop invariant motion optimization
8322          performed on them.  The default value of the parameter is
8323          1000 for -O1 and 10000 for -O2 and above.
8324
8325    `max-vartrack-size'
8326          Sets a maximum number of hash table slots to use during
8327          variable tracking dataflow analysis of any function.  If this
8328          limit is exceeded with variable tracking at assignments
8329          enabled, analysis for that function is retried without it,
8330          after removing all debug insns from the function.  If the
8331          limit is exceeded even without debug insns, var tracking
8332          analysis is completely disabled for the function.  Setting
8333          the parameter to zero makes it unlimited.
8334
8335    `min-nondebug-insn-uid'
8336          Use uids starting at this parameter for nondebug insns.  The
8337          range below the parameter is reserved exclusively for debug
8338          insns created by `-fvar-tracking-assignments', but debug
8339          insns may get (non-overlapping) uids above it if the reserved
8340          range is exhausted.
8341
8342    `ipa-sra-ptr-growth-factor'
8343          IPA-SRA will replace a pointer to an aggregate with one or
8344          more new parameters only when their cumulative size is less
8345          or equal to `ipa-sra-ptr-growth-factor' times the size of the
8346          original pointer parameter.
8347
8348    `graphite-max-nb-scop-params'
8349          To avoid exponential effects in the Graphite loop transforms,
8350          the number of parameters in a Static Control Part (SCoP) is
8351          bounded.  The default value is 10 parameters.  A variable
8352          whose value is unknown at compile time and defined outside a
8353          SCoP is a parameter of the SCoP.
8354
8355    `graphite-max-bbs-per-function'
8356          To avoid exponential effects in the detection of SCoPs, the
8357          size of the functions analyzed by Graphite is bounded.  The
8358          default value is 100 basic blocks.
8359
8360    `loop-block-tile-size'
8361          Loop blocking or strip mining transforms, enabled with
8362          `-floop-block' or `-floop-strip-mine', strip mine each loop
8363          in the loop nest by a given number of iterations.  The strip
8364          length can be changed using the `loop-block-tile-size'
8365          parameter.  The default value is 51 iterations.
8366
8367    `devirt-type-list-size'
8368          IPA-CP attempts to track all possible types passed to a
8369          function's parameter in order to perform devirtualization.
8370          `devirt-type-list-size' is the maximum number of types it
8371          stores per a single formal parameter of a function.
8372
8373    `lto-partitions'
8374          Specify desired number of partitions produced during WHOPR
8375          compilation.  The number of partitions should exceed the
8376          number of CPUs used for compilation.  The default value is 32.
8377
8378    `lto-minpartition'
8379          Size of minimal partition for WHOPR (in estimated
8380          instructions).  This prevents expenses of splitting very
8381          small programs into too many partitions.
8382
8383    `cxx-max-namespaces-for-diagnostic-help'
8384          The maximum number of namespaces to consult for suggestions
8385          when C++ name lookup fails for an identifier.  The default is
8386          1000.
8387
8388    `if-to-switch-threshold'
8389          If-chain to switch conversion, enabled by
8390          `-ftree-if-to-switch-conversion' convert chains of ifs of
8391          sufficient length into switches.  The parameter
8392          `if-to-switch-threshold' can be used to set the minimal
8393          required length.  The default value is 3.
8394
8395
8396
8397File: gcc.info,  Node: Preprocessor Options,  Next: Assembler Options,  Prev: Optimize Options,  Up: Invoking GCC
8398
83993.11 Options Controlling the Preprocessor
8400=========================================
8401
8402These options control the C preprocessor, which is run on each C source
8403file before actual compilation.
8404
8405 If you use the `-E' option, nothing is done except preprocessing.
8406Some of these options make sense only together with `-E' because they
8407cause the preprocessor output to be unsuitable for actual compilation.
8408
8409`-Wp,OPTION'
8410     You can use `-Wp,OPTION' to bypass the compiler driver and pass
8411     OPTION directly through to the preprocessor.  If OPTION contains
8412     commas, it is split into multiple options at the commas.  However,
8413     many options are modified, translated or interpreted by the
8414     compiler driver before being passed to the preprocessor, and `-Wp'
8415     forcibly bypasses this phase.  The preprocessor's direct interface
8416     is undocumented and subject to change, so whenever possible you
8417     should avoid using `-Wp' and let the driver handle the options
8418     instead.
8419
8420`-Xpreprocessor OPTION'
8421     Pass OPTION as an option to the preprocessor.  You can use this to
8422     supply system-specific preprocessor options which GCC does not
8423     know how to recognize.
8424
8425     If you want to pass an option that takes an argument, you must use
8426     `-Xpreprocessor' twice, once for the option and once for the
8427     argument.
8428
8429`-D NAME'
8430     Predefine NAME as a macro, with definition `1'.
8431
8432`-D NAME=DEFINITION'
8433     The contents of DEFINITION are tokenized and processed as if they
8434     appeared during translation phase three in a `#define' directive.
8435     In particular, the definition will be truncated by embedded
8436     newline characters.
8437
8438     If you are invoking the preprocessor from a shell or shell-like
8439     program you may need to use the shell's quoting syntax to protect
8440     characters such as spaces that have a meaning in the shell syntax.
8441
8442     If you wish to define a function-like macro on the command line,
8443     write its argument list with surrounding parentheses before the
8444     equals sign (if any).  Parentheses are meaningful to most shells,
8445     so you will need to quote the option.  With `sh' and `csh',
8446     `-D'NAME(ARGS...)=DEFINITION'' works.
8447
8448     `-D' and `-U' options are processed in the order they are given on
8449     the command line.  All `-imacros FILE' and `-include FILE' options
8450     are processed after all `-D' and `-U' options.
8451
8452`-U NAME'
8453     Cancel any previous definition of NAME, either built in or
8454     provided with a `-D' option.
8455
8456`-undef'
8457     Do not predefine any system-specific or GCC-specific macros.  The
8458     standard predefined macros remain defined.
8459
8460`-I DIR'
8461     Add the directory DIR to the list of directories to be searched
8462     for header files.  Directories named by `-I' are searched before
8463     the standard system include directories.  If the directory DIR is
8464     a standard system include directory, the option is ignored to
8465     ensure that the default search order for system directories and
8466     the special treatment of system headers are not defeated .  If DIR
8467     begins with `=', then the `=' will be replaced by the sysroot
8468     prefix; see `--sysroot' and `-isysroot'.
8469
8470`-o FILE'
8471     Write output to FILE.  This is the same as specifying FILE as the
8472     second non-option argument to `cpp'.  `gcc' has a different
8473     interpretation of a second non-option argument, so you must use
8474     `-o' to specify the output file.
8475
8476`-Wall'
8477     Turns on all optional warnings which are desirable for normal code.
8478     At present this is `-Wcomment', `-Wtrigraphs', `-Wmultichar' and a
8479     warning about integer promotion causing a change of sign in `#if'
8480     expressions.  Note that many of the preprocessor's warnings are on
8481     by default and have no options to control them.
8482
8483`-Wcomment'
8484`-Wcomments'
8485     Warn whenever a comment-start sequence `/*' appears in a `/*'
8486     comment, or whenever a backslash-newline appears in a `//' comment.
8487     (Both forms have the same effect.)
8488
8489`-Wtrigraphs'
8490     Most trigraphs in comments cannot affect the meaning of the
8491     program.  However, a trigraph that would form an escaped newline
8492     (`??/' at the end of a line) can, by changing where the comment
8493     begins or ends.  Therefore, only trigraphs that would form escaped
8494     newlines produce warnings inside a comment.
8495
8496     This option is implied by `-Wall'.  If `-Wall' is not given, this
8497     option is still enabled unless trigraphs are enabled.  To get
8498     trigraph conversion without warnings, but get the other `-Wall'
8499     warnings, use `-trigraphs -Wall -Wno-trigraphs'.
8500
8501`-Wtraditional'
8502     Warn about certain constructs that behave differently in
8503     traditional and ISO C.  Also warn about ISO C constructs that have
8504     no traditional C equivalent, and problematic constructs which
8505     should be avoided.
8506
8507`-Wundef'
8508     Warn whenever an identifier which is not a macro is encountered in
8509     an `#if' directive, outside of `defined'.  Such identifiers are
8510     replaced with zero.
8511
8512`-Wunused-macros'
8513     Warn about macros defined in the main file that are unused.  A
8514     macro is "used" if it is expanded or tested for existence at least
8515     once.  The preprocessor will also warn if the macro has not been
8516     used at the time it is redefined or undefined.
8517
8518     Built-in macros, macros defined on the command line, and macros
8519     defined in include files are not warned about.
8520
8521     _Note:_ If a macro is actually used, but only used in skipped
8522     conditional blocks, then CPP will report it as unused.  To avoid
8523     the warning in such a case, you might improve the scope of the
8524     macro's definition by, for example, moving it into the first
8525     skipped block.  Alternatively, you could provide a dummy use with
8526     something like:
8527
8528          #if defined the_macro_causing_the_warning
8529          #endif
8530
8531`-Wendif-labels'
8532     Warn whenever an `#else' or an `#endif' are followed by text.
8533     This usually happens in code of the form
8534
8535          #if FOO
8536          ...
8537          #else FOO
8538          ...
8539          #endif FOO
8540
8541     The second and third `FOO' should be in comments, but often are not
8542     in older programs.  This warning is on by default.
8543
8544`-Werror'
8545     Make all warnings into hard errors.  Source code which triggers
8546     warnings will be rejected.
8547
8548`-Wsystem-headers'
8549     Issue warnings for code in system headers.  These are normally
8550     unhelpful in finding bugs in your own code, therefore suppressed.
8551     If you are responsible for the system library, you may want to see
8552     them.
8553
8554`-w'
8555     Suppress all warnings, including those which GNU CPP issues by
8556     default.
8557
8558`-pedantic'
8559     Issue all the mandatory diagnostics listed in the C standard.
8560     Some of them are left out by default, since they trigger
8561     frequently on harmless code.
8562
8563`-pedantic-errors'
8564     Issue all the mandatory diagnostics, and make all mandatory
8565     diagnostics into errors.  This includes mandatory diagnostics that
8566     GCC issues without `-pedantic' but treats as warnings.
8567
8568`-M'
8569     Instead of outputting the result of preprocessing, output a rule
8570     suitable for `make' describing the dependencies of the main source
8571     file.  The preprocessor outputs one `make' rule containing the
8572     object file name for that source file, a colon, and the names of
8573     all the included files, including those coming from `-include' or
8574     `-imacros' command line options.
8575
8576     Unless specified explicitly (with `-MT' or `-MQ'), the object file
8577     name consists of the name of the source file with any suffix
8578     replaced with object file suffix and with any leading directory
8579     parts removed.  If there are many included files then the rule is
8580     split into several lines using `\'-newline.  The rule has no
8581     commands.
8582
8583     This option does not suppress the preprocessor's debug output,
8584     such as `-dM'.  To avoid mixing such debug output with the
8585     dependency rules you should explicitly specify the dependency
8586     output file with `-MF', or use an environment variable like
8587     `DEPENDENCIES_OUTPUT' (*note Environment Variables::).  Debug
8588     output will still be sent to the regular output stream as normal.
8589
8590     Passing `-M' to the driver implies `-E', and suppresses warnings
8591     with an implicit `-w'.
8592
8593`-MM'
8594     Like `-M' but do not mention header files that are found in system
8595     header directories, nor header files that are included, directly
8596     or indirectly, from such a header.
8597
8598     This implies that the choice of angle brackets or double quotes in
8599     an `#include' directive does not in itself determine whether that
8600     header will appear in `-MM' dependency output.  This is a slight
8601     change in semantics from GCC versions 3.0 and earlier.
8602
8603`-MF FILE'
8604     When used with `-M' or `-MM', specifies a file to write the
8605     dependencies to.  If no `-MF' switch is given the preprocessor
8606     sends the rules to the same place it would have sent preprocessed
8607     output.
8608
8609     When used with the driver options `-MD' or `-MMD', `-MF' overrides
8610     the default dependency output file.
8611
8612`-MG'
8613     In conjunction with an option such as `-M' requesting dependency
8614     generation, `-MG' assumes missing header files are generated files
8615     and adds them to the dependency list without raising an error.
8616     The dependency filename is taken directly from the `#include'
8617     directive without prepending any path.  `-MG' also suppresses
8618     preprocessed output, as a missing header file renders this useless.
8619
8620     This feature is used in automatic updating of makefiles.
8621
8622`-MP'
8623     This option instructs CPP to add a phony target for each dependency
8624     other than the main file, causing each to depend on nothing.  These
8625     dummy rules work around errors `make' gives if you remove header
8626     files without updating the `Makefile' to match.
8627
8628     This is typical output:
8629
8630          test.o: test.c test.h
8631
8632          test.h:
8633
8634`-MT TARGET'
8635     Change the target of the rule emitted by dependency generation.  By
8636     default CPP takes the name of the main input file, deletes any
8637     directory components and any file suffix such as `.c', and appends
8638     the platform's usual object suffix.  The result is the target.
8639
8640     An `-MT' option will set the target to be exactly the string you
8641     specify.  If you want multiple targets, you can specify them as a
8642     single argument to `-MT', or use multiple `-MT' options.
8643
8644     For example, `-MT '$(objpfx)foo.o'' might give
8645
8646          $(objpfx)foo.o: foo.c
8647
8648`-MQ TARGET'
8649     Same as `-MT', but it quotes any characters which are special to
8650     Make.  `-MQ '$(objpfx)foo.o'' gives
8651
8652          $$(objpfx)foo.o: foo.c
8653
8654     The default target is automatically quoted, as if it were given
8655     with `-MQ'.
8656
8657`-MD'
8658     `-MD' is equivalent to `-M -MF FILE', except that `-E' is not
8659     implied.  The driver determines FILE based on whether an `-o'
8660     option is given.  If it is, the driver uses its argument but with
8661     a suffix of `.d', otherwise it takes the name of the input file,
8662     removes any directory components and suffix, and applies a `.d'
8663     suffix.
8664
8665     If `-MD' is used in conjunction with `-E', any `-o' switch is
8666     understood to specify the dependency output file (*note -MF:
8667     dashMF.), but if used without `-E', each `-o' is understood to
8668     specify a target object file.
8669
8670     Since `-E' is not implied, `-MD' can be used to generate a
8671     dependency output file as a side-effect of the compilation process.
8672
8673`-MMD'
8674     Like `-MD' except mention only user header files, not system
8675     header files.
8676
8677`-fpch-deps'
8678     When using precompiled headers (*note Precompiled Headers::), this
8679     flag will cause the dependency-output flags to also list the files
8680     from the precompiled header's dependencies.  If not specified only
8681     the precompiled header would be listed and not the files that were
8682     used to create it because those files are not consulted when a
8683     precompiled header is used.
8684
8685`-fpch-preprocess'
8686     This option allows use of a precompiled header (*note Precompiled
8687     Headers::) together with `-E'.  It inserts a special `#pragma',
8688     `#pragma GCC pch_preprocess "FILENAME"' in the output to mark the
8689     place where the precompiled header was found, and its FILENAME.
8690     When `-fpreprocessed' is in use, GCC recognizes this `#pragma' and
8691     loads the PCH.
8692
8693     This option is off by default, because the resulting preprocessed
8694     output is only really suitable as input to GCC.  It is switched on
8695     by `-save-temps'.
8696
8697     You should not write this `#pragma' in your own code, but it is
8698     safe to edit the filename if the PCH file is available in a
8699     different location.  The filename may be absolute or it may be
8700     relative to GCC's current directory.
8701
8702`-x c'
8703`-x c++'
8704`-x objective-c'
8705`-x assembler-with-cpp'
8706     Specify the source language: C, C++, Objective-C, or assembly.
8707     This has nothing to do with standards conformance or extensions;
8708     it merely selects which base syntax to expect.  If you give none
8709     of these options, cpp will deduce the language from the extension
8710     of the source file: `.c', `.cc', `.m', or `.S'.  Some other common
8711     extensions for C++ and assembly are also recognized.  If cpp does
8712     not recognize the extension, it will treat the file as C; this is
8713     the most generic mode.
8714
8715     _Note:_ Previous versions of cpp accepted a `-lang' option which
8716     selected both the language and the standards conformance level.
8717     This option has been removed, because it conflicts with the `-l'
8718     option.
8719
8720`-std=STANDARD'
8721`-ansi'
8722     Specify the standard to which the code should conform.  Currently
8723     CPP knows about C and C++ standards; others may be added in the
8724     future.
8725
8726     STANDARD may be one of:
8727    `c90'
8728    `c89'
8729    `iso9899:1990'
8730          The ISO C standard from 1990.  `c90' is the customary
8731          shorthand for this version of the standard.
8732
8733          The `-ansi' option is equivalent to `-std=c90'.
8734
8735    `iso9899:199409'
8736          The 1990 C standard, as amended in 1994.
8737
8738    `iso9899:1999'
8739    `c99'
8740    `iso9899:199x'
8741    `c9x'
8742          The revised ISO C standard, published in December 1999.
8743          Before publication, this was known as C9X.
8744
8745    `c1x'
8746          The next version of the ISO C standard, still under
8747          development.
8748
8749    `gnu90'
8750    `gnu89'
8751          The 1990 C standard plus GNU extensions.  This is the default.
8752
8753    `gnu99'
8754    `gnu9x'
8755          The 1999 C standard plus GNU extensions.
8756
8757    `gnu1x'
8758          The next version of the ISO C standard, still under
8759          development, plus GNU extensions.
8760
8761    `c++98'
8762          The 1998 ISO C++ standard plus amendments.
8763
8764    `gnu++98'
8765          The same as `-std=c++98' plus GNU extensions.  This is the
8766          default for C++ code.
8767
8768`-I-'
8769     Split the include path.  Any directories specified with `-I'
8770     options before `-I-' are searched only for headers requested with
8771     `#include "FILE"'; they are not searched for `#include <FILE>'.
8772     If additional directories are specified with `-I' options after
8773     the `-I-', those directories are searched for all `#include'
8774     directives.
8775
8776     In addition, `-I-' inhibits the use of the directory of the current
8777     file directory as the first search directory for `#include "FILE"'.
8778     This option has been deprecated.
8779
8780`-nostdinc'
8781     Do not search the standard system directories for header files.
8782     Only the directories you have specified with `-I' options (and the
8783     directory of the current file, if appropriate) are searched.
8784
8785`-nostdinc++'
8786     Do not search for header files in the C++-specific standard
8787     directories, but do still search the other standard directories.
8788     (This option is used when building the C++ library.)
8789
8790`-include FILE'
8791     Process FILE as if `#include "file"' appeared as the first line of
8792     the primary source file.  However, the first directory searched
8793     for FILE is the preprocessor's working directory _instead of_ the
8794     directory containing the main source file.  If not found there, it
8795     is searched for in the remainder of the `#include "..."' search
8796     chain as normal.
8797
8798     If multiple `-include' options are given, the files are included
8799     in the order they appear on the command line.
8800
8801`-imacros FILE'
8802     Exactly like `-include', except that any output produced by
8803     scanning FILE is thrown away.  Macros it defines remain defined.
8804     This allows you to acquire all the macros from a header without
8805     also processing its declarations.
8806
8807     All files specified by `-imacros' are processed before all files
8808     specified by `-include'.
8809
8810`-idirafter DIR'
8811     Search DIR for header files, but do it _after_ all directories
8812     specified with `-I' and the standard system directories have been
8813     exhausted.  DIR is treated as a system include directory.  If DIR
8814     begins with `=', then the `=' will be replaced by the sysroot
8815     prefix; see `--sysroot' and `-isysroot'.
8816
8817`-iprefix PREFIX'
8818     Specify PREFIX as the prefix for subsequent `-iwithprefix'
8819     options.  If the prefix represents a directory, you should include
8820     the final `/'.
8821
8822`-iwithprefix DIR'
8823`-iwithprefixbefore DIR'
8824     Append DIR to the prefix specified previously with `-iprefix', and
8825     add the resulting directory to the include search path.
8826     `-iwithprefixbefore' puts it in the same place `-I' would;
8827     `-iwithprefix' puts it where `-idirafter' would.
8828
8829`-isysroot DIR'
8830     This option is like the `--sysroot' option, but applies only to
8831     header files (except for Darwin targets, where it applies to both
8832     header files and libraries).  See the `--sysroot' option for more
8833     information.
8834
8835`-imultilib DIR'
8836     Use DIR as a subdirectory of the directory containing
8837     target-specific C++ headers.
8838
8839`-isystem DIR'
8840     Search DIR for header files, after all directories specified by
8841     `-I' but before the standard system directories.  Mark it as a
8842     system directory, so that it gets the same special treatment as is
8843     applied to the standard system directories.  If DIR begins with
8844     `=', then the `=' will be replaced by the sysroot prefix; see
8845     `--sysroot' and `-isysroot'.
8846
8847`-iquote DIR'
8848     Search DIR only for header files requested with `#include "FILE"';
8849     they are not searched for `#include <FILE>', before all
8850     directories specified by `-I' and before the standard system
8851     directories.  If DIR begins with `=', then the `=' will be replaced
8852     by the sysroot prefix; see `--sysroot' and `-isysroot'.
8853
8854`-fdirectives-only'
8855     When preprocessing, handle directives, but do not expand macros.
8856
8857     The option's behavior depends on the `-E' and `-fpreprocessed'
8858     options.
8859
8860     With `-E', preprocessing is limited to the handling of directives
8861     such as `#define', `#ifdef', and `#error'.  Other preprocessor
8862     operations, such as macro expansion and trigraph conversion are
8863     not performed.  In addition, the `-dD' option is implicitly
8864     enabled.
8865
8866     With `-fpreprocessed', predefinition of command line and most
8867     builtin macros is disabled.  Macros such as `__LINE__', which are
8868     contextually dependent, are handled normally.  This enables
8869     compilation of files previously preprocessed with `-E
8870     -fdirectives-only'.
8871
8872     With both `-E' and `-fpreprocessed', the rules for
8873     `-fpreprocessed' take precedence.  This enables full preprocessing
8874     of files previously preprocessed with `-E -fdirectives-only'.
8875
8876`-fdollars-in-identifiers'
8877     Accept `$' in identifiers.
8878
8879`-fextended-identifiers'
8880     Accept universal character names in identifiers.  This option is
8881     experimental; in a future version of GCC, it will be enabled by
8882     default for C99 and C++.
8883
8884`-fpreprocessed'
8885     Indicate to the preprocessor that the input file has already been
8886     preprocessed.  This suppresses things like macro expansion,
8887     trigraph conversion, escaped newline splicing, and processing of
8888     most directives.  The preprocessor still recognizes and removes
8889     comments, so that you can pass a file preprocessed with `-C' to
8890     the compiler without problems.  In this mode the integrated
8891     preprocessor is little more than a tokenizer for the front ends.
8892
8893     `-fpreprocessed' is implicit if the input file has one of the
8894     extensions `.i', `.ii' or `.mi'.  These are the extensions that
8895     GCC uses for preprocessed files created by `-save-temps'.
8896
8897`-ftabstop=WIDTH'
8898     Set the distance between tab stops.  This helps the preprocessor
8899     report correct column numbers in warnings or errors, even if tabs
8900     appear on the line.  If the value is less than 1 or greater than
8901     100, the option is ignored.  The default is 8.
8902
8903`-fexec-charset=CHARSET'
8904     Set the execution character set, used for string and character
8905     constants.  The default is UTF-8.  CHARSET can be any encoding
8906     supported by the system's `iconv' library routine.
8907
8908`-fwide-exec-charset=CHARSET'
8909     Set the wide execution character set, used for wide string and
8910     character constants.  The default is UTF-32 or UTF-16, whichever
8911     corresponds to the width of `wchar_t'.  As with `-fexec-charset',
8912     CHARSET can be any encoding supported by the system's `iconv'
8913     library routine; however, you will have problems with encodings
8914     that do not fit exactly in `wchar_t'.
8915
8916`-finput-charset=CHARSET'
8917     Set the input character set, used for translation from the
8918     character set of the input file to the source character set used
8919     by GCC.  If the locale does not specify, or GCC cannot get this
8920     information from the locale, the default is UTF-8.  This can be
8921     overridden by either the locale or this command line option.
8922     Currently the command line option takes precedence if there's a
8923     conflict.  CHARSET can be any encoding supported by the system's
8924     `iconv' library routine.
8925
8926`-fworking-directory'
8927     Enable generation of linemarkers in the preprocessor output that
8928     will let the compiler know the current working directory at the
8929     time of preprocessing.  When this option is enabled, the
8930     preprocessor will emit, after the initial linemarker, a second
8931     linemarker with the current working directory followed by two
8932     slashes.  GCC will use this directory, when it's present in the
8933     preprocessed input, as the directory emitted as the current
8934     working directory in some debugging information formats.  This
8935     option is implicitly enabled if debugging information is enabled,
8936     but this can be inhibited with the negated form
8937     `-fno-working-directory'.  If the `-P' flag is present in the
8938     command line, this option has no effect, since no `#line'
8939     directives are emitted whatsoever.
8940
8941`-fno-show-column'
8942     Do not print column numbers in diagnostics.  This may be necessary
8943     if diagnostics are being scanned by a program that does not
8944     understand the column numbers, such as `dejagnu'.
8945
8946`-A PREDICATE=ANSWER'
8947     Make an assertion with the predicate PREDICATE and answer ANSWER.
8948     This form is preferred to the older form `-A PREDICATE(ANSWER)',
8949     which is still supported, because it does not use shell special
8950     characters.
8951
8952`-A -PREDICATE=ANSWER'
8953     Cancel an assertion with the predicate PREDICATE and answer ANSWER.
8954
8955`-dCHARS'
8956     CHARS is a sequence of one or more of the following characters,
8957     and must not be preceded by a space.  Other characters are
8958     interpreted by the compiler proper, or reserved for future
8959     versions of GCC, and so are silently ignored.  If you specify
8960     characters whose behavior conflicts, the result is undefined.
8961
8962    `M'
8963          Instead of the normal output, generate a list of `#define'
8964          directives for all the macros defined during the execution of
8965          the preprocessor, including predefined macros.  This gives
8966          you a way of finding out what is predefined in your version
8967          of the preprocessor.  Assuming you have no file `foo.h', the
8968          command
8969
8970               touch foo.h; cpp -dM foo.h
8971
8972          will show all the predefined macros.
8973
8974          If you use `-dM' without the `-E' option, `-dM' is
8975          interpreted as a synonym for `-fdump-rtl-mach'.  *Note
8976          Debugging Options: (gcc)Debugging Options.
8977
8978    `D'
8979          Like `M' except in two respects: it does _not_ include the
8980          predefined macros, and it outputs _both_ the `#define'
8981          directives and the result of preprocessing.  Both kinds of
8982          output go to the standard output file.
8983
8984    `N'
8985          Like `D', but emit only the macro names, not their expansions.
8986
8987    `I'
8988          Output `#include' directives in addition to the result of
8989          preprocessing.
8990
8991    `U'
8992          Like `D' except that only macros that are expanded, or whose
8993          definedness is tested in preprocessor directives, are output;
8994          the output is delayed until the use or test of the macro; and
8995          `#undef' directives are also output for macros tested but
8996          undefined at the time.
8997
8998`-P'
8999     Inhibit generation of linemarkers in the output from the
9000     preprocessor.  This might be useful when running the preprocessor
9001     on something that is not C code, and will be sent to a program
9002     which might be confused by the linemarkers.
9003
9004`-C'
9005     Do not discard comments.  All comments are passed through to the
9006     output file, except for comments in processed directives, which
9007     are deleted along with the directive.
9008
9009     You should be prepared for side effects when using `-C'; it causes
9010     the preprocessor to treat comments as tokens in their own right.
9011     For example, comments appearing at the start of what would be a
9012     directive line have the effect of turning that line into an
9013     ordinary source line, since the first token on the line is no
9014     longer a `#'.
9015
9016`-CC'
9017     Do not discard comments, including during macro expansion.  This is
9018     like `-C', except that comments contained within macros are also
9019     passed through to the output file where the macro is expanded.
9020
9021     In addition to the side-effects of the `-C' option, the `-CC'
9022     option causes all C++-style comments inside a macro to be
9023     converted to C-style comments.  This is to prevent later use of
9024     that macro from inadvertently commenting out the remainder of the
9025     source line.
9026
9027     The `-CC' option is generally used to support lint comments.
9028
9029`-traditional-cpp'
9030     Try to imitate the behavior of old-fashioned C preprocessors, as
9031     opposed to ISO C preprocessors.
9032
9033`-trigraphs'
9034     Process trigraph sequences.  These are three-character sequences,
9035     all starting with `??', that are defined by ISO C to stand for
9036     single characters.  For example, `??/' stands for `\', so `'??/n''
9037     is a character constant for a newline.  By default, GCC ignores
9038     trigraphs, but in standard-conforming modes it converts them.  See
9039     the `-std' and `-ansi' options.
9040
9041     The nine trigraphs and their replacements are
9042
9043          Trigraph:       ??(  ??)  ??<  ??>  ??=  ??/  ??'  ??!  ??-
9044          Replacement:      [    ]    {    }    #    \    ^    |    ~
9045
9046`-remap'
9047     Enable special code to work around file systems which only permit
9048     very short file names, such as MS-DOS.
9049
9050`--help'
9051`--target-help'
9052     Print text describing all the command line options instead of
9053     preprocessing anything.
9054
9055`-v'
9056     Verbose mode.  Print out GNU CPP's version number at the beginning
9057     of execution, and report the final form of the include path.
9058
9059`-H'
9060     Print the name of each header file used, in addition to other
9061     normal activities.  Each name is indented to show how deep in the
9062     `#include' stack it is.  Precompiled header files are also
9063     printed, even if they are found to be invalid; an invalid
9064     precompiled header file is printed with `...x' and a valid one
9065     with `...!' .
9066
9067`-version'
9068`--version'
9069     Print out GNU CPP's version number.  With one dash, proceed to
9070     preprocess as normal.  With two dashes, exit immediately.
9071
9072
9073File: gcc.info,  Node: Assembler Options,  Next: Link Options,  Prev: Preprocessor Options,  Up: Invoking GCC
9074
90753.12 Passing Options to the Assembler
9076=====================================
9077
9078You can pass options to the assembler.
9079
9080`-Wa,OPTION'
9081     Pass OPTION as an option to the assembler.  If OPTION contains
9082     commas, it is split into multiple options at the commas.
9083
9084`-Xassembler OPTION'
9085     Pass OPTION as an option to the assembler.  You can use this to
9086     supply system-specific assembler options which GCC does not know
9087     how to recognize.
9088
9089     If you want to pass an option that takes an argument, you must use
9090     `-Xassembler' twice, once for the option and once for the argument.
9091
9092
9093
9094File: gcc.info,  Node: Link Options,  Next: Directory Options,  Prev: Assembler Options,  Up: Invoking GCC
9095
90963.13 Options for Linking
9097========================
9098
9099These options come into play when the compiler links object files into
9100an executable output file.  They are meaningless if the compiler is not
9101doing a link step.
9102
9103`OBJECT-FILE-NAME'
9104     A file name that does not end in a special recognized suffix is
9105     considered to name an object file or library.  (Object files are
9106     distinguished from libraries by the linker according to the file
9107     contents.)  If linking is done, these object files are used as
9108     input to the linker.
9109
9110`-c'
9111`-S'
9112`-E'
9113     If any of these options is used, then the linker is not run, and
9114     object file names should not be used as arguments.  *Note Overall
9115     Options::.
9116
9117`-lLIBRARY'
9118`-l LIBRARY'
9119     Search the library named LIBRARY when linking.  (The second
9120     alternative with the library as a separate argument is only for
9121     POSIX compliance and is not recommended.)
9122
9123     It makes a difference where in the command you write this option;
9124     the linker searches and processes libraries and object files in
9125     the order they are specified.  Thus, `foo.o -lz bar.o' searches
9126     library `z' after file `foo.o' but before `bar.o'.  If `bar.o'
9127     refers to functions in `z', those functions may not be loaded.
9128
9129     The linker searches a standard list of directories for the library,
9130     which is actually a file named `libLIBRARY.a'.  The linker then
9131     uses this file as if it had been specified precisely by name.
9132
9133     The directories searched include several standard system
9134     directories plus any that you specify with `-L'.
9135
9136     Normally the files found this way are library files--archive files
9137     whose members are object files.  The linker handles an archive
9138     file by scanning through it for members which define symbols that
9139     have so far been referenced but not defined.  But if the file that
9140     is found is an ordinary object file, it is linked in the usual
9141     fashion.  The only difference between using an `-l' option and
9142     specifying a file name is that `-l' surrounds LIBRARY with `lib'
9143     and `.a' and searches several directories.
9144
9145`-lobjc'
9146     You need this special case of the `-l' option in order to link an
9147     Objective-C or Objective-C++ program.
9148
9149`-nostartfiles'
9150     Do not use the standard system startup files when linking.  The
9151     standard system libraries are used normally, unless `-nostdlib' or
9152     `-nodefaultlibs' is used.
9153
9154`-nodefaultlibs'
9155     Do not use the standard system libraries when linking.  Only the
9156     libraries you specify will be passed to the linker, options
9157     specifying linkage of the system libraries, such as
9158     `-static-libgcc' or `-shared-libgcc', will be ignored.  The
9159     standard startup files are used normally, unless `-nostartfiles'
9160     is used.  The compiler may generate calls to `memcmp', `memset',
9161     `memcpy' and `memmove'.  These entries are usually resolved by
9162     entries in libc.  These entry points should be supplied through
9163     some other mechanism when this option is specified.
9164
9165`-nostdlib'
9166     Do not use the standard system startup files or libraries when
9167     linking.  No startup files and only the libraries you specify will
9168     be passed to the linker, options specifying linkage of the system
9169     libraries, such as `-static-libgcc' or `-shared-libgcc', will be
9170     ignored.  The compiler may generate calls to `memcmp', `memset',
9171     `memcpy' and `memmove'.  These entries are usually resolved by
9172     entries in libc.  These entry points should be supplied through
9173     some other mechanism when this option is specified.
9174
9175     One of the standard libraries bypassed by `-nostdlib' and
9176     `-nodefaultlibs' is `libgcc.a', a library of internal subroutines
9177     that GCC uses to overcome shortcomings of particular machines, or
9178     special needs for some languages.  (*Note Interfacing to GCC
9179     Output: (gccint)Interface, for more discussion of `libgcc.a'.)  In
9180     most cases, you need `libgcc.a' even when you want to avoid other
9181     standard libraries.  In other words, when you specify `-nostdlib'
9182     or `-nodefaultlibs' you should usually specify `-lgcc' as well.
9183     This ensures that you have no unresolved references to internal GCC
9184     library subroutines.  (For example, `__main', used to ensure C++
9185     constructors will be called; *note `collect2': (gccint)Collect2.)
9186
9187`-pie'
9188     Produce a position independent executable on targets which support
9189     it.  For predictable results, you must also specify the same set
9190     of options that were used to generate code (`-fpie', `-fPIE', or
9191     model suboptions) when you specify this option.
9192
9193`-rdynamic'
9194     Pass the flag `-export-dynamic' to the ELF linker, on targets that
9195     support it. This instructs the linker to add all symbols, not only
9196     used ones, to the dynamic symbol table. This option is needed for
9197     some uses of `dlopen' or to allow obtaining backtraces from within
9198     a program.
9199
9200`-s'
9201     Remove all symbol table and relocation information from the
9202     executable.
9203
9204`-static'
9205     On systems that support dynamic linking, this prevents linking
9206     with the shared libraries.  On other systems, this option has no
9207     effect.
9208
9209`-shared'
9210     Produce a shared object which can then be linked with other
9211     objects to form an executable.  Not all systems support this
9212     option.  For predictable results, you must also specify the same
9213     set of options that were used to generate code (`-fpic', `-fPIC',
9214     or model suboptions) when you specify this option.(1)
9215
9216`-shared-libgcc'
9217`-static-libgcc'
9218     On systems that provide `libgcc' as a shared library, these options
9219     force the use of either the shared or static version respectively.
9220     If no shared version of `libgcc' was built when the compiler was
9221     configured, these options have no effect.
9222
9223     There are several situations in which an application should use the
9224     shared `libgcc' instead of the static version.  The most common of
9225     these is when the application wishes to throw and catch exceptions
9226     across different shared libraries.  In that case, each of the
9227     libraries as well as the application itself should use the shared
9228     `libgcc'.
9229
9230     Therefore, the G++ and GCJ drivers automatically add
9231     `-shared-libgcc' whenever you build a shared library or a main
9232     executable, because C++ and Java programs typically use
9233     exceptions, so this is the right thing to do.
9234
9235     If, instead, you use the GCC driver to create shared libraries,
9236     you may find that they will not always be linked with the shared
9237     `libgcc'.  If GCC finds, at its configuration time, that you have
9238     a non-GNU linker or a GNU linker that does not support option
9239     `--eh-frame-hdr', it will link the shared version of `libgcc' into
9240     shared libraries by default.  Otherwise, it will take advantage of
9241     the linker and optimize away the linking with the shared version
9242     of `libgcc', linking with the static version of libgcc by default.
9243     This allows exceptions to propagate through such shared libraries,
9244     without incurring relocation costs at library load time.
9245
9246     However, if a library or main executable is supposed to throw or
9247     catch exceptions, you must link it using the G++ or GCJ driver, as
9248     appropriate for the languages used in the program, or using the
9249     option `-shared-libgcc', such that it is linked with the shared
9250     `libgcc'.
9251
9252`-static-libstdc++'
9253     When the `g++' program is used to link a C++ program, it will
9254     normally automatically link against `libstdc++'.  If `libstdc++'
9255     is available as a shared library, and the `-static' option is not
9256     used, then this will link against the shared version of
9257     `libstdc++'.  That is normally fine.  However, it is sometimes
9258     useful to freeze the version of `libstdc++' used by the program
9259     without going all the way to a fully static link.  The
9260     `-static-libstdc++' option directs the `g++' driver to link
9261     `libstdc++' statically, without necessarily linking other
9262     libraries statically.
9263
9264`-symbolic'
9265     Bind references to global symbols when building a shared object.
9266     Warn about any unresolved references (unless overridden by the
9267     link editor option `-Xlinker -z -Xlinker defs').  Only a few
9268     systems support this option.
9269
9270`-T SCRIPT'
9271     Use SCRIPT as the linker script.  This option is supported by most
9272     systems using the GNU linker.  On some targets, such as bare-board
9273     targets without an operating system, the `-T' option may be
9274     required when linking to avoid references to undefined symbols.
9275
9276`-Xlinker OPTION'
9277     Pass OPTION as an option to the linker.  You can use this to
9278     supply system-specific linker options which GCC does not know how
9279     to recognize.
9280
9281     If you want to pass an option that takes a separate argument, you
9282     must use `-Xlinker' twice, once for the option and once for the
9283     argument.  For example, to pass `-assert definitions', you must
9284     write `-Xlinker -assert -Xlinker definitions'.  It does not work
9285     to write `-Xlinker "-assert definitions"', because this passes the
9286     entire string as a single argument, which is not what the linker
9287     expects.
9288
9289     When using the GNU linker, it is usually more convenient to pass
9290     arguments to linker options using the `OPTION=VALUE' syntax than
9291     as separate arguments.  For example, you can specify `-Xlinker
9292     -Map=output.map' rather than `-Xlinker -Map -Xlinker output.map'.
9293     Other linkers may not support this syntax for command-line options.
9294
9295`-Wl,OPTION'
9296     Pass OPTION as an option to the linker.  If OPTION contains
9297     commas, it is split into multiple options at the commas.  You can
9298     use this syntax to pass an argument to the option.  For example,
9299     `-Wl,-Map,output.map' passes `-Map output.map' to the linker.
9300     When using the GNU linker, you can also get the same effect with
9301     `-Wl,-Map=output.map'.
9302
9303`-u SYMBOL'
9304     Pretend the symbol SYMBOL is undefined, to force linking of
9305     library modules to define it.  You can use `-u' multiple times with
9306     different symbols to force loading of additional library modules.
9307
9308 ---------- Footnotes ----------
9309
9310 (1) On some systems, `gcc -shared' needs to build supplementary stub
9311code for constructors to work.  On multi-libbed systems, `gcc -shared'
9312must select the correct support libraries to link against.  Failing to
9313supply the correct flags may lead to subtle defects.  Supplying them in
9314cases where they are not necessary is innocuous.
9315
9316
9317File: gcc.info,  Node: Directory Options,  Next: Spec Files,  Prev: Link Options,  Up: Invoking GCC
9318
93193.14 Options for Directory Search
9320=================================
9321
9322These options specify directories to search for header files, for
9323libraries and for parts of the compiler:
9324
9325`-IDIR'
9326     Add the directory DIR to the head of the list of directories to be
9327     searched for header files.  This can be used to override a system
9328     header file, substituting your own version, since these
9329     directories are searched before the system header file
9330     directories.  However, you should not use this option to add
9331     directories that contain vendor-supplied system header files (use
9332     `-isystem' for that).  If you use more than one `-I' option, the
9333     directories are scanned in left-to-right order; the standard
9334     system directories come after.
9335
9336     If a standard system include directory, or a directory specified
9337     with `-isystem', is also specified with `-I', the `-I' option will
9338     be ignored.  The directory will still be searched but as a system
9339     directory at its normal position in the system include chain.
9340     This is to ensure that GCC's procedure to fix buggy system headers
9341     and the ordering for the include_next directive are not
9342     inadvertently changed.  If you really need to change the search
9343     order for system directories, use the `-nostdinc' and/or
9344     `-isystem' options.
9345
9346`-iplugindir=DIR'
9347     Set the directory to search for plugins which are passed by
9348     `-fplugin=NAME' instead of `-fplugin=PATH/NAME.so'.  This option
9349     is not meant to be used by the user, but only passed by the driver.
9350
9351`-iquoteDIR'
9352     Add the directory DIR to the head of the list of directories to be
9353     searched for header files only for the case of `#include "FILE"';
9354     they are not searched for `#include <FILE>', otherwise just like
9355     `-I'.
9356
9357`-LDIR'
9358     Add directory DIR to the list of directories to be searched for
9359     `-l'.
9360
9361`-BPREFIX'
9362     This option specifies where to find the executables, libraries,
9363     include files, and data files of the compiler itself.
9364
9365     The compiler driver program runs one or more of the subprograms
9366     `cpp', `cc1', `as' and `ld'.  It tries PREFIX as a prefix for each
9367     program it tries to run, both with and without `MACHINE/VERSION/'
9368     (*note Target Options::).
9369
9370     For each subprogram to be run, the compiler driver first tries the
9371     `-B' prefix, if any.  If that name is not found, or if `-B' was
9372     not specified, the driver tries two standard prefixes, which are
9373     `/usr/lib/gcc/' and `/usr/local/lib/gcc/'.  If neither of those
9374     results in a file name that is found, the unmodified program name
9375     is searched for using the directories specified in your `PATH'
9376     environment variable.
9377
9378     The compiler will check to see if the path provided by the `-B'
9379     refers to a directory, and if necessary it will add a directory
9380     separator character at the end of the path.
9381
9382     `-B' prefixes that effectively specify directory names also apply
9383     to libraries in the linker, because the compiler translates these
9384     options into `-L' options for the linker.  They also apply to
9385     includes files in the preprocessor, because the compiler
9386     translates these options into `-isystem' options for the
9387     preprocessor.  In this case, the compiler appends `include' to the
9388     prefix.
9389
9390     The run-time support file `libgcc.a' can also be searched for using
9391     the `-B' prefix, if needed.  If it is not found there, the two
9392     standard prefixes above are tried, and that is all.  The file is
9393     left out of the link if it is not found by those means.
9394
9395     Another way to specify a prefix much like the `-B' prefix is to use
9396     the environment variable `GCC_EXEC_PREFIX'.  *Note Environment
9397     Variables::.
9398
9399     As a special kludge, if the path provided by `-B' is
9400     `[dir/]stageN/', where N is a number in the range 0 to 9, then it
9401     will be replaced by `[dir/]include'.  This is to help with
9402     boot-strapping the compiler.
9403
9404`-specs=FILE'
9405     Process FILE after the compiler reads in the standard `specs'
9406     file, in order to override the defaults that the `gcc' driver
9407     program uses when determining what switches to pass to `cc1',
9408     `cc1plus', `as', `ld', etc.  More than one `-specs=FILE' can be
9409     specified on the command line, and they are processed in order,
9410     from left to right.
9411
9412`--sysroot=DIR'
9413     Use DIR as the logical root directory for headers and libraries.
9414     For example, if the compiler would normally search for headers in
9415     `/usr/include' and libraries in `/usr/lib', it will instead search
9416     `DIR/usr/include' and `DIR/usr/lib'.
9417
9418     If you use both this option and the `-isysroot' option, then the
9419     `--sysroot' option will apply to libraries, but the `-isysroot'
9420     option will apply to header files.
9421
9422     The GNU linker (beginning with version 2.16) has the necessary
9423     support for this option.  If your linker does not support this
9424     option, the header file aspect of `--sysroot' will still work, but
9425     the library aspect will not.
9426
9427`-I-'
9428     This option has been deprecated.  Please use `-iquote' instead for
9429     `-I' directories before the `-I-' and remove the `-I-'.  Any
9430     directories you specify with `-I' options before the `-I-' option
9431     are searched only for the case of `#include "FILE"'; they are not
9432     searched for `#include <FILE>'.
9433
9434     If additional directories are specified with `-I' options after
9435     the `-I-', these directories are searched for all `#include'
9436     directives.  (Ordinarily _all_ `-I' directories are used this way.)
9437
9438     In addition, the `-I-' option inhibits the use of the current
9439     directory (where the current input file came from) as the first
9440     search directory for `#include "FILE"'.  There is no way to
9441     override this effect of `-I-'.  With `-I.' you can specify
9442     searching the directory which was current when the compiler was
9443     invoked.  That is not exactly the same as what the preprocessor
9444     does by default, but it is often satisfactory.
9445
9446     `-I-' does not inhibit the use of the standard system directories
9447     for header files.  Thus, `-I-' and `-nostdinc' are independent.
9448
9449
9450File: gcc.info,  Node: Spec Files,  Next: Target Options,  Prev: Directory Options,  Up: Invoking GCC
9451
94523.15 Specifying subprocesses and the switches to pass to them
9453=============================================================
9454
9455`gcc' is a driver program.  It performs its job by invoking a sequence
9456of other programs to do the work of compiling, assembling and linking.
9457GCC interprets its command-line parameters and uses these to deduce
9458which programs it should invoke, and which command-line options it
9459ought to place on their command lines.  This behavior is controlled by
9460"spec strings".  In most cases there is one spec string for each
9461program that GCC can invoke, but a few programs have multiple spec
9462strings to control their behavior.  The spec strings built into GCC can
9463be overridden by using the `-specs=' command-line switch to specify a
9464spec file.
9465
9466 "Spec files" are plaintext files that are used to construct spec
9467strings.  They consist of a sequence of directives separated by blank
9468lines.  The type of directive is determined by the first non-whitespace
9469character on the line and it can be one of the following:
9470
9471`%COMMAND'
9472     Issues a COMMAND to the spec file processor.  The commands that can
9473     appear here are:
9474
9475    `%include <FILE>'
9476          Search for FILE and insert its text at the current point in
9477          the specs file.
9478
9479    `%include_noerr <FILE>'
9480          Just like `%include', but do not generate an error message if
9481          the include file cannot be found.
9482
9483    `%rename OLD_NAME NEW_NAME'
9484          Rename the spec string OLD_NAME to NEW_NAME.
9485
9486
9487`*[SPEC_NAME]:'
9488     This tells the compiler to create, override or delete the named
9489     spec string.  All lines after this directive up to the next
9490     directive or blank line are considered to be the text for the spec
9491     string.  If this results in an empty string then the spec will be
9492     deleted.  (Or, if the spec did not exist, then nothing will
9493     happened.)  Otherwise, if the spec does not currently exist a new
9494     spec will be created.  If the spec does exist then its contents
9495     will be overridden by the text of this directive, unless the first
9496     character of that text is the `+' character, in which case the
9497     text will be appended to the spec.
9498
9499`[SUFFIX]:'
9500     Creates a new `[SUFFIX] spec' pair.  All lines after this directive
9501     and up to the next directive or blank line are considered to make
9502     up the spec string for the indicated suffix.  When the compiler
9503     encounters an input file with the named suffix, it will processes
9504     the spec string in order to work out how to compile that file.
9505     For example:
9506
9507          .ZZ:
9508          z-compile -input %i
9509
9510     This says that any input file whose name ends in `.ZZ' should be
9511     passed to the program `z-compile', which should be invoked with the
9512     command-line switch `-input' and with the result of performing the
9513     `%i' substitution.  (See below.)
9514
9515     As an alternative to providing a spec string, the text that
9516     follows a suffix directive can be one of the following:
9517
9518    `@LANGUAGE'
9519          This says that the suffix is an alias for a known LANGUAGE.
9520          This is similar to using the `-x' command-line switch to GCC
9521          to specify a language explicitly.  For example:
9522
9523               .ZZ:
9524               @c++
9525
9526          Says that .ZZ files are, in fact, C++ source files.
9527
9528    `#NAME'
9529          This causes an error messages saying:
9530
9531               NAME compiler not installed on this system.
9532
9533     GCC already has an extensive list of suffixes built into it.  This
9534     directive will add an entry to the end of the list of suffixes, but
9535     since the list is searched from the end backwards, it is
9536     effectively possible to override earlier entries using this
9537     technique.
9538
9539
9540 GCC has the following spec strings built into it.  Spec files can
9541override these strings or create their own.  Note that individual
9542targets can also add their own spec strings to this list.
9543
9544     asm          Options to pass to the assembler
9545     asm_final    Options to pass to the assembler post-processor
9546     cpp          Options to pass to the C preprocessor
9547     cc1          Options to pass to the C compiler
9548     cc1plus      Options to pass to the C++ compiler
9549     endfile      Object files to include at the end of the link
9550     link         Options to pass to the linker
9551     lib          Libraries to include on the command line to the linker
9552     libgcc       Decides which GCC support library to pass to the linker
9553     linker       Sets the name of the linker
9554     predefines   Defines to be passed to the C preprocessor
9555     signed_char  Defines to pass to CPP to say whether `char' is signed
9556                  by default
9557     startfile    Object files to include at the start of the link
9558
9559 Here is a small example of a spec file:
9560
9561     %rename lib                 old_lib
9562
9563     *lib:
9564     --start-group -lgcc -lc -leval1 --end-group %(old_lib)
9565
9566 This example renames the spec called `lib' to `old_lib' and then
9567overrides the previous definition of `lib' with a new one.  The new
9568definition adds in some extra command-line options before including the
9569text of the old definition.
9570
9571 "Spec strings" are a list of command-line options to be passed to their
9572corresponding program.  In addition, the spec strings can contain
9573`%'-prefixed sequences to substitute variable text or to conditionally
9574insert text into the command line.  Using these constructs it is
9575possible to generate quite complex command lines.
9576
9577 Here is a table of all defined `%'-sequences for spec strings.  Note
9578that spaces are not generated automatically around the results of
9579expanding these sequences.  Therefore you can concatenate them together
9580or combine them with constant text in a single argument.
9581
9582`%%'
9583     Substitute one `%' into the program name or argument.
9584
9585`%i'
9586     Substitute the name of the input file being processed.
9587
9588`%b'
9589     Substitute the basename of the input file being processed.  This
9590     is the substring up to (and not including) the last period and not
9591     including the directory.
9592
9593`%B'
9594     This is the same as `%b', but include the file suffix (text after
9595     the last period).
9596
9597`%d'
9598     Marks the argument containing or following the `%d' as a temporary
9599     file name, so that that file will be deleted if GCC exits
9600     successfully.  Unlike `%g', this contributes no text to the
9601     argument.
9602
9603`%gSUFFIX'
9604     Substitute a file name that has suffix SUFFIX and is chosen once
9605     per compilation, and mark the argument in the same way as `%d'.
9606     To reduce exposure to denial-of-service attacks, the file name is
9607     now chosen in a way that is hard to predict even when previously
9608     chosen file names are known.  For example, `%g.s ... %g.o ... %g.s'
9609     might turn into `ccUVUUAU.s ccXYAXZ12.o ccUVUUAU.s'.  SUFFIX
9610     matches the regexp `[.A-Za-z]*' or the special string `%O', which
9611     is treated exactly as if `%O' had been preprocessed.  Previously,
9612     `%g' was simply substituted with a file name chosen once per
9613     compilation, without regard to any appended suffix (which was
9614     therefore treated just like ordinary text), making such attacks
9615     more likely to succeed.
9616
9617`%uSUFFIX'
9618     Like `%g', but generates a new temporary file name even if
9619     `%uSUFFIX' was already seen.
9620
9621`%USUFFIX'
9622     Substitutes the last file name generated with `%uSUFFIX',
9623     generating a new one if there is no such last file name.  In the
9624     absence of any `%uSUFFIX', this is just like `%gSUFFIX', except
9625     they don't share the same suffix _space_, so `%g.s ... %U.s ...
9626     %g.s ... %U.s' would involve the generation of two distinct file
9627     names, one for each `%g.s' and another for each `%U.s'.
9628     Previously, `%U' was simply substituted with a file name chosen
9629     for the previous `%u', without regard to any appended suffix.
9630
9631`%jSUFFIX'
9632     Substitutes the name of the `HOST_BIT_BUCKET', if any, and if it is
9633     writable, and if save-temps is off; otherwise, substitute the name
9634     of a temporary file, just like `%u'.  This temporary file is not
9635     meant for communication between processes, but rather as a junk
9636     disposal mechanism.
9637
9638`%|SUFFIX'
9639`%mSUFFIX'
9640     Like `%g', except if `-pipe' is in effect.  In that case `%|'
9641     substitutes a single dash and `%m' substitutes nothing at all.
9642     These are the two most common ways to instruct a program that it
9643     should read from standard input or write to standard output.  If
9644     you need something more elaborate you can use an `%{pipe:`X'}'
9645     construct: see for example `f/lang-specs.h'.
9646
9647`%.SUFFIX'
9648     Substitutes .SUFFIX for the suffixes of a matched switch's args
9649     when it is subsequently output with `%*'.  SUFFIX is terminated by
9650     the next space or %.
9651
9652`%w'
9653     Marks the argument containing or following the `%w' as the
9654     designated output file of this compilation.  This puts the argument
9655     into the sequence of arguments that `%o' will substitute later.
9656
9657`%o'
9658     Substitutes the names of all the output files, with spaces
9659     automatically placed around them.  You should write spaces around
9660     the `%o' as well or the results are undefined.  `%o' is for use in
9661     the specs for running the linker.  Input files whose names have no
9662     recognized suffix are not compiled at all, but they are included
9663     among the output files, so they will be linked.
9664
9665`%O'
9666     Substitutes the suffix for object files.  Note that this is
9667     handled specially when it immediately follows `%g, %u, or %U',
9668     because of the need for those to form complete file names.  The
9669     handling is such that `%O' is treated exactly as if it had already
9670     been substituted, except that `%g, %u, and %U' do not currently
9671     support additional SUFFIX characters following `%O' as they would
9672     following, for example, `.o'.
9673
9674`%p'
9675     Substitutes the standard macro predefinitions for the current
9676     target machine.  Use this when running `cpp'.
9677
9678`%P'
9679     Like `%p', but puts `__' before and after the name of each
9680     predefined macro, except for macros that start with `__' or with
9681     `_L', where L is an uppercase letter.  This is for ISO C.
9682
9683`%I'
9684     Substitute any of `-iprefix' (made from `GCC_EXEC_PREFIX'),
9685     `-isysroot' (made from `TARGET_SYSTEM_ROOT'), `-isystem' (made
9686     from `COMPILER_PATH' and `-B' options) and `-imultilib' as
9687     necessary.
9688
9689`%s'
9690     Current argument is the name of a library or startup file of some
9691     sort.  Search for that file in a standard list of directories and
9692     substitute the full name found.  The current working directory is
9693     included in the list of directories scanned.
9694
9695`%T'
9696     Current argument is the name of a linker script.  Search for that
9697     file in the current list of directories to scan for libraries. If
9698     the file is located insert a `--script' option into the command
9699     line followed by the full path name found.  If the file is not
9700     found then generate an error message.  Note: the current working
9701     directory is not searched.
9702
9703`%eSTR'
9704     Print STR as an error message.  STR is terminated by a newline.
9705     Use this when inconsistent options are detected.
9706
9707`%(NAME)'
9708     Substitute the contents of spec string NAME at this point.
9709
9710`%[NAME]'
9711     Like `%(...)' but put `__' around `-D' arguments.
9712
9713`%x{OPTION}'
9714     Accumulate an option for `%X'.
9715
9716`%X'
9717     Output the accumulated linker options specified by `-Wl' or a `%x'
9718     spec string.
9719
9720`%Y'
9721     Output the accumulated assembler options specified by `-Wa'.
9722
9723`%Z'
9724     Output the accumulated preprocessor options specified by `-Wp'.
9725
9726`%a'
9727     Process the `asm' spec.  This is used to compute the switches to
9728     be passed to the assembler.
9729
9730`%A'
9731     Process the `asm_final' spec.  This is a spec string for passing
9732     switches to an assembler post-processor, if such a program is
9733     needed.
9734
9735`%l'
9736     Process the `link' spec.  This is the spec for computing the
9737     command line passed to the linker.  Typically it will make use of
9738     the `%L %G %S %D and %E' sequences.
9739
9740`%D'
9741     Dump out a `-L' option for each directory that GCC believes might
9742     contain startup files.  If the target supports multilibs then the
9743     current multilib directory will be prepended to each of these
9744     paths.
9745
9746`%L'
9747     Process the `lib' spec.  This is a spec string for deciding which
9748     libraries should be included on the command line to the linker.
9749
9750`%G'
9751     Process the `libgcc' spec.  This is a spec string for deciding
9752     which GCC support library should be included on the command line
9753     to the linker.
9754
9755`%S'
9756     Process the `startfile' spec.  This is a spec for deciding which
9757     object files should be the first ones passed to the linker.
9758     Typically this might be a file named `crt0.o'.
9759
9760`%E'
9761     Process the `endfile' spec.  This is a spec string that specifies
9762     the last object files that will be passed to the linker.
9763
9764`%C'
9765     Process the `cpp' spec.  This is used to construct the arguments
9766     to be passed to the C preprocessor.
9767
9768`%1'
9769     Process the `cc1' spec.  This is used to construct the options to
9770     be passed to the actual C compiler (`cc1').
9771
9772`%2'
9773     Process the `cc1plus' spec.  This is used to construct the options
9774     to be passed to the actual C++ compiler (`cc1plus').
9775
9776`%*'
9777     Substitute the variable part of a matched option.  See below.
9778     Note that each comma in the substituted string is replaced by a
9779     single space.
9780
9781`%<`S''
9782     Remove all occurrences of `-S' from the command line.  Note--this
9783     command is position dependent.  `%' commands in the spec string
9784     before this one will see `-S', `%' commands in the spec string
9785     after this one will not.
9786
9787`%:FUNCTION(ARGS)'
9788     Call the named function FUNCTION, passing it ARGS.  ARGS is first
9789     processed as a nested spec string, then split into an argument
9790     vector in the usual fashion.  The function returns a string which
9791     is processed as if it had appeared literally as part of the
9792     current spec.
9793
9794     The following built-in spec functions are provided:
9795
9796    ``getenv''
9797          The `getenv' spec function takes two arguments: an environment
9798          variable name and a string.  If the environment variable is
9799          not defined, a fatal error is issued.  Otherwise, the return
9800          value is the value of the environment variable concatenated
9801          with the string.  For example, if `TOPDIR' is defined as
9802          `/path/to/top', then:
9803
9804               %:getenv(TOPDIR /include)
9805
9806          expands to `/path/to/top/include'.
9807
9808    ``if-exists''
9809          The `if-exists' spec function takes one argument, an absolute
9810          pathname to a file.  If the file exists, `if-exists' returns
9811          the pathname.  Here is a small example of its usage:
9812
9813               *startfile:
9814               crt0%O%s %:if-exists(crti%O%s) crtbegin%O%s
9815
9816    ``if-exists-else''
9817          The `if-exists-else' spec function is similar to the
9818          `if-exists' spec function, except that it takes two
9819          arguments.  The first argument is an absolute pathname to a
9820          file.  If the file exists, `if-exists-else' returns the
9821          pathname.  If it does not exist, it returns the second
9822          argument.  This way, `if-exists-else' can be used to select
9823          one file or another, based on the existence of the first.
9824          Here is a small example of its usage:
9825
9826               *startfile:
9827               crt0%O%s %:if-exists(crti%O%s) \
9828               %:if-exists-else(crtbeginT%O%s crtbegin%O%s)
9829
9830    ``replace-outfile''
9831          The `replace-outfile' spec function takes two arguments.  It
9832          looks for the first argument in the outfiles array and
9833          replaces it with the second argument.  Here is a small
9834          example of its usage:
9835
9836               %{fgnu-runtime:%:replace-outfile(-lobjc -lobjc-gnu)}
9837
9838    ``remove-outfile''
9839          The `remove-outfile' spec function takes one argument.  It
9840          looks for the first argument in the outfiles array and
9841          removes it.  Here is a small example its usage:
9842
9843               %:remove-outfile(-lm)
9844
9845    ``pass-through-libs''
9846          The `pass-through-libs' spec function takes any number of
9847          arguments.  It finds any `-l' options and any non-options
9848          ending in ".a" (which it assumes are the names of linker
9849          input library archive files) and returns a result containing
9850          all the found arguments each prepended by
9851          `-plugin-opt=-pass-through=' and joined by spaces.  This list
9852          is intended to be passed to the LTO linker plugin.
9853
9854               %:pass-through-libs(%G %L %G)
9855
9856    ``print-asm-header''
9857          The `print-asm-header' function takes no arguments and simply
9858          prints a banner like:
9859
9860               Assembler options
9861               =================
9862
9863               Use "-Wa,OPTION" to pass "OPTION" to the assembler.
9864
9865          It is used to separate compiler options from assembler options
9866          in the `--target-help' output.
9867
9868`%{`S'}'
9869     Substitutes the `-S' switch, if that switch was given to GCC.  If
9870     that switch was not specified, this substitutes nothing.  Note that
9871     the leading dash is omitted when specifying this option, and it is
9872     automatically inserted if the substitution is performed.  Thus the
9873     spec string `%{foo}' would match the command-line option `-foo'
9874     and would output the command line option `-foo'.
9875
9876`%W{`S'}'
9877     Like %{`S'} but mark last argument supplied within as a file to be
9878     deleted on failure.
9879
9880`%{`S'*}'
9881     Substitutes all the switches specified to GCC whose names start
9882     with `-S', but which also take an argument.  This is used for
9883     switches like `-o', `-D', `-I', etc.  GCC considers `-o foo' as
9884     being one switch whose names starts with `o'.  %{o*} would
9885     substitute this text, including the space.  Thus two arguments
9886     would be generated.
9887
9888`%{`S'*&`T'*}'
9889     Like %{`S'*}, but preserve order of `S' and `T' options (the order
9890     of `S' and `T' in the spec is not significant).  There can be any
9891     number of ampersand-separated variables; for each the wild card is
9892     optional.  Useful for CPP as `%{D*&U*&A*}'.
9893
9894`%{`S':`X'}'
9895     Substitutes `X', if the `-S' switch was given to GCC.
9896
9897`%{!`S':`X'}'
9898     Substitutes `X', if the `-S' switch was _not_ given to GCC.
9899
9900`%{`S'*:`X'}'
9901     Substitutes `X' if one or more switches whose names start with
9902     `-S' are specified to GCC.  Normally `X' is substituted only once,
9903     no matter how many such switches appeared.  However, if `%*'
9904     appears somewhere in `X', then `X' will be substituted once for
9905     each matching switch, with the `%*' replaced by the part of that
9906     switch that matched the `*'.
9907
9908`%{.`S':`X'}'
9909     Substitutes `X', if processing a file with suffix `S'.
9910
9911`%{!.`S':`X'}'
9912     Substitutes `X', if _not_ processing a file with suffix `S'.
9913
9914`%{,`S':`X'}'
9915     Substitutes `X', if processing a file for language `S'.
9916
9917`%{!,`S':`X'}'
9918     Substitutes `X', if not processing a file for language `S'.
9919
9920`%{`S'|`P':`X'}'
9921     Substitutes `X' if either `-S' or `-P' was given to GCC.  This may
9922     be combined with `!', `.', `,', and `*' sequences as well,
9923     although they have a stronger binding than the `|'.  If `%*'
9924     appears in `X', all of the alternatives must be starred, and only
9925     the first matching alternative is substituted.
9926
9927     For example, a spec string like this:
9928
9929          %{.c:-foo} %{!.c:-bar} %{.c|d:-baz} %{!.c|d:-boggle}
9930
9931     will output the following command-line options from the following
9932     input command-line options:
9933
9934          fred.c        -foo -baz
9935          jim.d         -bar -boggle
9936          -d fred.c     -foo -baz -boggle
9937          -d jim.d      -bar -baz -boggle
9938
9939`%{S:X; T:Y; :D}'
9940     If `S' was given to GCC, substitutes `X'; else if `T' was given to
9941     GCC, substitutes `Y'; else substitutes `D'.  There can be as many
9942     clauses as you need.  This may be combined with `.', `,', `!',
9943     `|', and `*' as needed.
9944
9945
9946 The conditional text `X' in a %{`S':`X'} or similar construct may
9947contain other nested `%' constructs or spaces, or even newlines.  They
9948are processed as usual, as described above.  Trailing white space in
9949`X' is ignored.  White space may also appear anywhere on the left side
9950of the colon in these constructs, except between `.' or `*' and the
9951corresponding word.
9952
9953 The `-O', `-f', `-m', and `-W' switches are handled specifically in
9954these constructs.  If another value of `-O' or the negated form of a
9955`-f', `-m', or `-W' switch is found later in the command line, the
9956earlier switch value is ignored, except with {`S'*} where `S' is just
9957one letter, which passes all matching options.
9958
9959 The character `|' at the beginning of the predicate text is used to
9960indicate that a command should be piped to the following command, but
9961only if `-pipe' is specified.
9962
9963 It is built into GCC which switches take arguments and which do not.
9964(You might think it would be useful to generalize this to allow each
9965compiler's spec to say which switches take arguments.  But this cannot
9966be done in a consistent fashion.  GCC cannot even decide which input
9967files have been specified without knowing which switches take arguments,
9968and it must know which input files to compile in order to tell which
9969compilers to run).
9970
9971 GCC also knows implicitly that arguments starting in `-l' are to be
9972treated as compiler output files, and passed to the linker in their
9973proper position among the other output files.
9974
9975
9976File: gcc.info,  Node: Target Options,  Next: Submodel Options,  Prev: Spec Files,  Up: Invoking GCC
9977
99783.16 Specifying Target Machine and Compiler Version
9979===================================================
9980
9981The usual way to run GCC is to run the executable called `gcc', or
9982`MACHINE-gcc' when cross-compiling, or `MACHINE-gcc-VERSION' to run a
9983version other than the one that was installed last.
9984
9985
9986File: gcc.info,  Node: Submodel Options,  Next: Code Gen Options,  Prev: Target Options,  Up: Invoking GCC
9987
99883.17 Hardware Models and Configurations
9989=======================================
9990
9991Each target machine types can have its own special options, starting
9992with `-m', to choose among various hardware models or
9993configurations--for example, 68010 vs 68020, floating coprocessor or
9994none.  A single installed version of the compiler can compile for any
9995model or configuration, according to the options specified.
9996
9997 Some configurations of the compiler also support additional special
9998options, usually for compatibility with other compilers on the same
9999platform.
10000
10001* Menu:
10002
10003* ARC Options::
10004* ARM Options::
10005* AVR Options::
10006* Blackfin Options::
10007* CRIS Options::
10008* CRX Options::
10009* Darwin Options::
10010* DEC Alpha Options::
10011* DEC Alpha/VMS Options::
10012* FR30 Options::
10013* FRV Options::
10014* GNU/Linux Options::
10015* H8/300 Options::
10016* HPPA Options::
10017* i386 and x86-64 Options::
10018* i386 and x86-64 Windows Options::
10019* IA-64 Options::
10020* IA-64/VMS Options::
10021* LM32 Options::
10022* M32C Options::
10023* M32R/D Options::
10024* M680x0 Options::
10025* M68hc1x Options::
10026* MCore Options::
10027* MeP Options::
10028* MicroBlaze Options::
10029* MIPS Options::
10030* MMIX Options::
10031* MN10300 Options::
10032* PDP-11 Options::
10033* picoChip Options::
10034* PowerPC Options::
10035* RS/6000 and PowerPC Options::
10036* RX Options::
10037* S/390 and zSeries Options::
10038* Score Options::
10039* SH Options::
10040* Solaris 2 Options::
10041* SPARC Options::
10042* SPU Options::
10043* System V Options::
10044* V850 Options::
10045* VAX Options::
10046* VxWorks Options::
10047* x86-64 Options::
10048* Xstormy16 Options::
10049* Xtensa Options::
10050* zSeries Options::
10051
10052
10053File: gcc.info,  Node: ARC Options,  Next: ARM Options,  Up: Submodel Options
10054
100553.17.1 ARC Options
10056------------------
10057
10058These options are defined for ARC implementations:
10059
10060`-EL'
10061     Compile code for little endian mode.  This is the default.
10062
10063`-EB'
10064     Compile code for big endian mode.
10065
10066`-mmangle-cpu'
10067     Prepend the name of the CPU to all public symbol names.  In
10068     multiple-processor systems, there are many ARC variants with
10069     different instruction and register set characteristics.  This flag
10070     prevents code compiled for one CPU to be linked with code compiled
10071     for another.  No facility exists for handling variants that are
10072     "almost identical".  This is an all or nothing option.
10073
10074`-mcpu=CPU'
10075     Compile code for ARC variant CPU.  Which variants are supported
10076     depend on the configuration.  All variants support `-mcpu=base',
10077     this is the default.
10078
10079`-mtext=TEXT-SECTION'
10080`-mdata=DATA-SECTION'
10081`-mrodata=READONLY-DATA-SECTION'
10082     Put functions, data, and readonly data in TEXT-SECTION,
10083     DATA-SECTION, and READONLY-DATA-SECTION respectively by default.
10084     This can be overridden with the `section' attribute.  *Note
10085     Variable Attributes::.
10086
10087
10088
10089File: gcc.info,  Node: ARM Options,  Next: AVR Options,  Prev: ARC Options,  Up: Submodel Options
10090
100913.17.2 ARM Options
10092------------------
10093
10094These `-m' options are defined for Advanced RISC Machines (ARM)
10095architectures:
10096
10097`-mabi=NAME'
10098     Generate code for the specified ABI.  Permissible values are:
10099     `apcs-gnu', `atpcs', `aapcs', `aapcs-linux' and `iwmmxt'.
10100
10101`-mapcs-frame'
10102     Generate a stack frame that is compliant with the ARM Procedure
10103     Call Standard for all functions, even if this is not strictly
10104     necessary for correct execution of the code.  Specifying
10105     `-fomit-frame-pointer' with this option will cause the stack
10106     frames not to be generated for leaf functions.  The default is
10107     `-mno-apcs-frame'.
10108
10109`-mapcs'
10110     This is a synonym for `-mapcs-frame'.
10111
10112`-mthumb-interwork'
10113     Generate code which supports calling between the ARM and Thumb
10114     instruction sets.  Without this option the two instruction sets
10115     cannot be reliably used inside one program.  The default is
10116     `-mno-thumb-interwork', since slightly larger code is generated
10117     when `-mthumb-interwork' is specified.
10118
10119`-mno-sched-prolog'
10120     Prevent the reordering of instructions in the function prolog, or
10121     the merging of those instruction with the instructions in the
10122     function's body.  This means that all functions will start with a
10123     recognizable set of instructions (or in fact one of a choice from
10124     a small set of different function prologues), and this information
10125     can be used to locate the start if functions inside an executable
10126     piece of code.  The default is `-msched-prolog'.
10127
10128`-mfloat-abi=NAME'
10129     Specifies which floating-point ABI to use.  Permissible values
10130     are: `soft', `softfp' and `hard'.
10131
10132     Specifying `soft' causes GCC to generate output containing library
10133     calls for floating-point operations.  `softfp' allows the
10134     generation of code using hardware floating-point instructions, but
10135     still uses the soft-float calling conventions.  `hard' allows
10136     generation of floating-point instructions and uses FPU-specific
10137     calling conventions.
10138
10139     The default depends on the specific target configuration.  Note
10140     that the hard-float and soft-float ABIs are not link-compatible;
10141     you must compile your entire program with the same ABI, and link
10142     with a compatible set of libraries.
10143
10144`-mhard-float'
10145     Equivalent to `-mfloat-abi=hard'.
10146
10147`-msoft-float'
10148     Equivalent to `-mfloat-abi=soft'.
10149
10150`-mlittle-endian'
10151     Generate code for a processor running in little-endian mode.  This
10152     is the default for all standard configurations.
10153
10154`-mbig-endian'
10155     Generate code for a processor running in big-endian mode; the
10156     default is to compile code for a little-endian processor.
10157
10158`-mwords-little-endian'
10159     This option only applies when generating code for big-endian
10160     processors.  Generate code for a little-endian word order but a
10161     big-endian byte order.  That is, a byte order of the form
10162     `32107654'.  Note: this option should only be used if you require
10163     compatibility with code for big-endian ARM processors generated by
10164     versions of the compiler prior to 2.8.
10165
10166`-mcpu=NAME'
10167     This specifies the name of the target ARM processor.  GCC uses
10168     this name to determine what kind of instructions it can emit when
10169     generating assembly code.  Permissible names are: `arm2', `arm250',
10170     `arm3', `arm6', `arm60', `arm600', `arm610', `arm620', `arm7',
10171     `arm7m', `arm7d', `arm7dm', `arm7di', `arm7dmi', `arm70', `arm700',
10172     `arm700i', `arm710', `arm710c', `arm7100', `arm720', `arm7500',
10173     `arm7500fe', `arm7tdmi', `arm7tdmi-s', `arm710t', `arm720t',
10174     `arm740t', `strongarm', `strongarm110', `strongarm1100',
10175     `strongarm1110', `arm8', `arm810', `arm9', `arm9e', `arm920',
10176     `arm920t', `arm922t', `arm946e-s', `arm966e-s', `arm968e-s',
10177     `arm926ej-s', `arm940t', `arm9tdmi', `arm10tdmi', `arm1020t',
10178     `arm1026ej-s', `arm10e', `arm1020e', `arm1022e', `arm1136j-s',
10179     `arm1136jf-s', `mpcore', `mpcorenovfp', `arm1156t2-s',
10180     `arm1156t2f-s', `arm1176jz-s', `arm1176jzf-s', `cortex-a5',
10181     `cortex-a8', `cortex-a9', `cortex-a15', `cortex-r4', `cortex-r4f',
10182     `cortex-r5', `cortex-m4', `cortex-m3', `cortex-m1', `cortex-m0',
10183     `xscale', `iwmmxt', `iwmmxt2', `ep9312'.
10184
10185`-mtune=NAME'
10186     This option is very similar to the `-mcpu=' option, except that
10187     instead of specifying the actual target processor type, and hence
10188     restricting which instructions can be used, it specifies that GCC
10189     should tune the performance of the code as if the target were of
10190     the type specified in this option, but still choosing the
10191     instructions that it will generate based on the CPU specified by a
10192     `-mcpu=' option.  For some ARM implementations better performance
10193     can be obtained by using this option.
10194
10195`-march=NAME'
10196     This specifies the name of the target ARM architecture.  GCC uses
10197     this name to determine what kind of instructions it can emit when
10198     generating assembly code.  This option can be used in conjunction
10199     with or instead of the `-mcpu=' option.  Permissible names are:
10200     `armv2', `armv2a', `armv3', `armv3m', `armv4', `armv4t', `armv5',
10201     `armv5t', `armv5e', `armv5te', `armv6', `armv6j', `armv6t2',
10202     `armv6z', `armv6zk', `armv6-m', `armv7', `armv7-a', `armv7-r',
10203     `armv7-m', `iwmmxt', `iwmmxt2', `ep9312'.
10204
10205`-mfpu=NAME'
10206`-mfpe=NUMBER'
10207`-mfp=NUMBER'
10208     This specifies what floating point hardware (or hardware
10209     emulation) is available on the target.  Permissible names are:
10210     `fpa', `fpe2', `fpe3', `maverick', `vfp', `vfpv3', `vfpv3-fp16',
10211     `vfpv3-d16', `vfpv3-d16-fp16', `vfpv3xd', `vfpv3xd-fp16', `neon',
10212     `neon-fp16', `vfpv4', `vfpv4-d16', `fpv4-sp-d16' and `neon-vfpv4'.
10213     `-mfp' and `-mfpe' are synonyms for `-mfpu'=`fpe'NUMBER, for
10214     compatibility with older versions of GCC.
10215
10216     If `-msoft-float' is specified this specifies the format of
10217     floating point values.
10218
10219     If the selected floating-point hardware includes the NEON extension
10220     (e.g. `-mfpu'=`neon'), note that floating-point operations will
10221     not be used by GCC's auto-vectorization pass unless
10222     `-funsafe-math-optimizations' is also specified.  This is because
10223     NEON hardware does not fully implement the IEEE 754 standard for
10224     floating-point arithmetic (in particular denormal values are
10225     treated as zero), so the use of NEON instructions may lead to a
10226     loss of precision.
10227
10228`-mfp16-format=NAME'
10229     Specify the format of the `__fp16' half-precision floating-point
10230     type.  Permissible names are `none', `ieee', and `alternative';
10231     the default is `none', in which case the `__fp16' type is not
10232     defined.  *Note Half-Precision::, for more information.
10233
10234`-mstructure-size-boundary=N'
10235     The size of all structures and unions will be rounded up to a
10236     multiple of the number of bits set by this option.  Permissible
10237     values are 8, 32 and 64.  The default value varies for different
10238     toolchains.  For the COFF targeted toolchain the default value is
10239     8.  A value of 64 is only allowed if the underlying ABI supports
10240     it.
10241
10242     Specifying the larger number can produce faster, more efficient
10243     code, but can also increase the size of the program.  Different
10244     values are potentially incompatible.  Code compiled with one value
10245     cannot necessarily expect to work with code or libraries compiled
10246     with another value, if they exchange information using structures
10247     or unions.
10248
10249`-mabort-on-noreturn'
10250     Generate a call to the function `abort' at the end of a `noreturn'
10251     function.  It will be executed if the function tries to return.
10252
10253`-mlong-calls'
10254`-mno-long-calls'
10255     Tells the compiler to perform function calls by first loading the
10256     address of the function into a register and then performing a
10257     subroutine call on this register.  This switch is needed if the
10258     target function will lie outside of the 64 megabyte addressing
10259     range of the offset based version of subroutine call instruction.
10260
10261     Even if this switch is enabled, not all function calls will be
10262     turned into long calls.  The heuristic is that static functions,
10263     functions which have the `short-call' attribute, functions that
10264     are inside the scope of a `#pragma no_long_calls' directive and
10265     functions whose definitions have already been compiled within the
10266     current compilation unit, will not be turned into long calls.  The
10267     exception to this rule is that weak function definitions,
10268     functions with the `long-call' attribute or the `section'
10269     attribute, and functions that are within the scope of a `#pragma
10270     long_calls' directive, will always be turned into long calls.
10271
10272     This feature is not enabled by default.  Specifying
10273     `-mno-long-calls' will restore the default behavior, as will
10274     placing the function calls within the scope of a `#pragma
10275     long_calls_off' directive.  Note these switches have no effect on
10276     how the compiler generates code to handle function calls via
10277     function pointers.
10278
10279`-msingle-pic-base'
10280     Treat the register used for PIC addressing as read-only, rather
10281     than loading it in the prologue for each function.  The run-time
10282     system is responsible for initializing this register with an
10283     appropriate value before execution begins.
10284
10285`-mpic-register=REG'
10286     Specify the register to be used for PIC addressing.  The default
10287     is R10 unless stack-checking is enabled, when R9 is used.
10288
10289`-mcirrus-fix-invalid-insns'
10290     Insert NOPs into the instruction stream to in order to work around
10291     problems with invalid Maverick instruction combinations.  This
10292     option is only valid if the `-mcpu=ep9312' option has been used to
10293     enable generation of instructions for the Cirrus Maverick floating
10294     point co-processor.  This option is not enabled by default, since
10295     the problem is only present in older Maverick implementations.
10296     The default can be re-enabled by use of the
10297     `-mno-cirrus-fix-invalid-insns' switch.
10298
10299`-mpoke-function-name'
10300     Write the name of each function into the text section, directly
10301     preceding the function prologue.  The generated code is similar to
10302     this:
10303
10304               t0
10305                   .ascii "arm_poke_function_name", 0
10306                   .align
10307               t1
10308                   .word 0xff000000 + (t1 - t0)
10309               arm_poke_function_name
10310                   mov     ip, sp
10311                   stmfd   sp!, {fp, ip, lr, pc}
10312                   sub     fp, ip, #4
10313
10314     When performing a stack backtrace, code can inspect the value of
10315     `pc' stored at `fp + 0'.  If the trace function then looks at
10316     location `pc - 12' and the top 8 bits are set, then we know that
10317     there is a function name embedded immediately preceding this
10318     location and has length `((pc[-3]) & 0xff000000)'.
10319
10320`-mthumb'
10321     Generate code for the Thumb instruction set.  The default is to
10322     use the 32-bit ARM instruction set.  This option automatically
10323     enables either 16-bit Thumb-1 or mixed 16/32-bit Thumb-2
10324     instructions based on the `-mcpu=NAME' and `-march=NAME' options.
10325     This option is not passed to the assembler. If you want to force
10326     assembler files to be interpreted as Thumb code, either add a
10327     `.thumb' directive to the source or pass the `-mthumb' option
10328     directly to the assembler by prefixing it with `-Wa'.
10329
10330`-mtpcs-frame'
10331     Generate a stack frame that is compliant with the Thumb Procedure
10332     Call Standard for all non-leaf functions.  (A leaf function is one
10333     that does not call any other functions.)  The default is
10334     `-mno-tpcs-frame'.
10335
10336`-mtpcs-leaf-frame'
10337     Generate a stack frame that is compliant with the Thumb Procedure
10338     Call Standard for all leaf functions.  (A leaf function is one
10339     that does not call any other functions.)  The default is
10340     `-mno-apcs-leaf-frame'.
10341
10342`-mcallee-super-interworking'
10343     Gives all externally visible functions in the file being compiled
10344     an ARM instruction set header which switches to Thumb mode before
10345     executing the rest of the function.  This allows these functions
10346     to be called from non-interworking code.  This option is not valid
10347     in AAPCS configurations because interworking is enabled by default.
10348
10349`-mcaller-super-interworking'
10350     Allows calls via function pointers (including virtual functions) to
10351     execute correctly regardless of whether the target code has been
10352     compiled for interworking or not.  There is a small overhead in
10353     the cost of executing a function pointer if this option is
10354     enabled.  This option is not valid in AAPCS configurations because
10355     interworking is enabled by default.
10356
10357`-mtp=NAME'
10358     Specify the access model for the thread local storage pointer.
10359     The valid models are `soft', which generates calls to
10360     `__aeabi_read_tp', `cp15', which fetches the thread pointer from
10361     `cp15' directly (supported in the arm6k architecture), and `auto',
10362     which uses the best available method for the selected processor.
10363     The default setting is `auto'.
10364
10365`-mtls-dialect=DIALECT'
10366     Specify the dialect to use for accessing thread local storage.  Two
10367     dialects are supported - `gnu' and `gnu2'.  The `gnu' dialect
10368     selects the original GNU scheme for supporting local and global
10369     dynamic TLS models.  The `gnu2' dialect selects the GNU descriptor
10370     scheme, which provides better performance for shared libraries.
10371     The GNU descriptor scheme is compatible with the original scheme,
10372     but does require new assembler, linker and library support.
10373     Initial and local exec TLS models are unaffected by this option
10374     and always use the original scheme.
10375
10376`-mword-relocations'
10377     Only generate absolute relocations on word sized values (i.e.
10378     R_ARM_ABS32).  This is enabled by default on targets (uClinux,
10379     SymbianOS) where the runtime loader imposes this restriction, and
10380     when `-fpic' or `-fPIC' is specified.
10381
10382`-mfix-cortex-m3-ldrd'
10383     Some Cortex-M3 cores can cause data corruption when `ldrd'
10384     instructions with overlapping destination and base registers are
10385     used.  This option avoids generating these instructions.  This
10386     option is enabled by default when `-mcpu=cortex-m3' is specified.
10387
10388
10389
10390File: gcc.info,  Node: AVR Options,  Next: Blackfin Options,  Prev: ARM Options,  Up: Submodel Options
10391
103923.17.3 AVR Options
10393------------------
10394
10395These options are defined for AVR implementations:
10396
10397`-mmcu=MCU'
10398     Specify ATMEL AVR instruction set or MCU type.
10399
10400     Instruction set avr1 is for the minimal AVR core, not supported by
10401     the C compiler, only for assembler programs (MCU types: at90s1200,
10402     attiny10, attiny11, attiny12, attiny15, attiny28).
10403
10404     Instruction set avr2 (default) is for the classic AVR core with up
10405     to 8K program memory space (MCU types: at90s2313, at90s2323,
10406     attiny22, at90s2333, at90s2343, at90s4414, at90s4433, at90s4434,
10407     at90s8515, at90c8534, at90s8535).
10408
10409     Instruction set avr3 is for the classic AVR core with up to 128K
10410     program memory space (MCU types: atmega103, atmega603, at43usb320,
10411     at76c711).
10412
10413     Instruction set avr4 is for the enhanced AVR core with up to 8K
10414     program memory space (MCU types: atmega8, atmega83, atmega85).
10415
10416     Instruction set avr5 is for the enhanced AVR core with up to 128K
10417     program memory space (MCU types: atmega16, atmega161, atmega163,
10418     atmega32, atmega323, atmega64, atmega128, at43usb355, at94k).
10419
10420`-mno-interrupts'
10421     Generated code is not compatible with hardware interrupts.  Code
10422     size will be smaller.
10423
10424`-mcall-prologues'
10425     Functions prologues/epilogues expanded as call to appropriate
10426     subroutines.  Code size will be smaller.
10427
10428`-mtiny-stack'
10429     Change only the low 8 bits of the stack pointer.
10430
10431`-mint8'
10432     Assume int to be 8 bit integer.  This affects the sizes of all
10433     types: A char will be 1 byte, an int will be 1 byte, a long will
10434     be 2 bytes and long long will be 4 bytes.  Please note that this
10435     option does not comply to the C standards, but it will provide you
10436     with smaller code size.
10437
10438
10439File: gcc.info,  Node: Blackfin Options,  Next: CRIS Options,  Prev: AVR Options,  Up: Submodel Options
10440
104413.17.4 Blackfin Options
10442-----------------------
10443
10444`-mcpu=CPU[-SIREVISION]'
10445     Specifies the name of the target Blackfin processor.  Currently,
10446     CPU can be one of `bf512', `bf514', `bf516', `bf518', `bf522',
10447     `bf523', `bf524', `bf525', `bf526', `bf527', `bf531', `bf532',
10448     `bf533', `bf534', `bf536', `bf537', `bf538', `bf539', `bf542',
10449     `bf544', `bf547', `bf548', `bf549', `bf542m', `bf544m', `bf547m',
10450     `bf548m', `bf549m', `bf561'.  The optional SIREVISION specifies
10451     the silicon revision of the target Blackfin processor.  Any
10452     workarounds available for the targeted silicon revision will be
10453     enabled.  If SIREVISION is `none', no workarounds are enabled.  If
10454     SIREVISION is `any', all workarounds for the targeted processor
10455     will be enabled.  The `__SILICON_REVISION__' macro is defined to
10456     two hexadecimal digits representing the major and minor numbers in
10457     the silicon revision.  If SIREVISION is `none', the
10458     `__SILICON_REVISION__' is not defined.  If SIREVISION is `any', the
10459     `__SILICON_REVISION__' is defined to be `0xffff'.  If this
10460     optional SIREVISION is not used, GCC assumes the latest known
10461     silicon revision of the targeted Blackfin processor.
10462
10463     Support for `bf561' is incomplete.  For `bf561', Only the
10464     processor macro is defined.  Without this option, `bf532' is used
10465     as the processor by default.  The corresponding predefined
10466     processor macros for CPU is to be defined.  And for `bfin-elf'
10467     toolchain, this causes the hardware BSP provided by libgloss to be
10468     linked in if `-msim' is not given.
10469
10470`-msim'
10471     Specifies that the program will be run on the simulator.  This
10472     causes the simulator BSP provided by libgloss to be linked in.
10473     This option has effect only for `bfin-elf' toolchain.  Certain
10474     other options, such as `-mid-shared-library' and `-mfdpic', imply
10475     `-msim'.
10476
10477`-momit-leaf-frame-pointer'
10478     Don't keep the frame pointer in a register for leaf functions.
10479     This avoids the instructions to save, set up and restore frame
10480     pointers and makes an extra register available in leaf functions.
10481     The option `-fomit-frame-pointer' removes the frame pointer for
10482     all functions which might make debugging harder.
10483
10484`-mspecld-anomaly'
10485     When enabled, the compiler will ensure that the generated code
10486     does not contain speculative loads after jump instructions. If
10487     this option is used, `__WORKAROUND_SPECULATIVE_LOADS' is defined.
10488
10489`-mno-specld-anomaly'
10490     Don't generate extra code to prevent speculative loads from
10491     occurring.
10492
10493`-mcsync-anomaly'
10494     When enabled, the compiler will ensure that the generated code
10495     does not contain CSYNC or SSYNC instructions too soon after
10496     conditional branches.  If this option is used,
10497     `__WORKAROUND_SPECULATIVE_SYNCS' is defined.
10498
10499`-mno-csync-anomaly'
10500     Don't generate extra code to prevent CSYNC or SSYNC instructions
10501     from occurring too soon after a conditional branch.
10502
10503`-mlow-64k'
10504     When enabled, the compiler is free to take advantage of the
10505     knowledge that the entire program fits into the low 64k of memory.
10506
10507`-mno-low-64k'
10508     Assume that the program is arbitrarily large.  This is the default.
10509
10510`-mstack-check-l1'
10511     Do stack checking using information placed into L1 scratchpad
10512     memory by the uClinux kernel.
10513
10514`-mid-shared-library'
10515     Generate code that supports shared libraries via the library ID
10516     method.  This allows for execute in place and shared libraries in
10517     an environment without virtual memory management.  This option
10518     implies `-fPIC'.  With a `bfin-elf' target, this option implies
10519     `-msim'.
10520
10521`-mno-id-shared-library'
10522     Generate code that doesn't assume ID based shared libraries are
10523     being used.  This is the default.
10524
10525`-mleaf-id-shared-library'
10526     Generate code that supports shared libraries via the library ID
10527     method, but assumes that this library or executable won't link
10528     against any other ID shared libraries.  That allows the compiler
10529     to use faster code for jumps and calls.
10530
10531`-mno-leaf-id-shared-library'
10532     Do not assume that the code being compiled won't link against any
10533     ID shared libraries.  Slower code will be generated for jump and
10534     call insns.
10535
10536`-mshared-library-id=n'
10537     Specified the identification number of the ID based shared library
10538     being compiled.  Specifying a value of 0 will generate more
10539     compact code, specifying other values will force the allocation of
10540     that number to the current library but is no more space or time
10541     efficient than omitting this option.
10542
10543`-msep-data'
10544     Generate code that allows the data segment to be located in a
10545     different area of memory from the text segment.  This allows for
10546     execute in place in an environment without virtual memory
10547     management by eliminating relocations against the text section.
10548
10549`-mno-sep-data'
10550     Generate code that assumes that the data segment follows the text
10551     segment.  This is the default.
10552
10553`-mlong-calls'
10554`-mno-long-calls'
10555     Tells the compiler to perform function calls by first loading the
10556     address of the function into a register and then performing a
10557     subroutine call on this register.  This switch is needed if the
10558     target function will lie outside of the 24 bit addressing range of
10559     the offset based version of subroutine call instruction.
10560
10561     This feature is not enabled by default.  Specifying
10562     `-mno-long-calls' will restore the default behavior.  Note these
10563     switches have no effect on how the compiler generates code to
10564     handle function calls via function pointers.
10565
10566`-mfast-fp'
10567     Link with the fast floating-point library. This library relaxes
10568     some of the IEEE floating-point standard's rules for checking
10569     inputs against Not-a-Number (NAN), in the interest of performance.
10570
10571`-minline-plt'
10572     Enable inlining of PLT entries in function calls to functions that
10573     are not known to bind locally.  It has no effect without `-mfdpic'.
10574
10575`-mmulticore'
10576     Build standalone application for multicore Blackfin processor.
10577     Proper start files and link scripts will be used to support
10578     multicore.  This option defines `__BFIN_MULTICORE'. It can only be
10579     used with `-mcpu=bf561[-SIREVISION]'. It can be used with
10580     `-mcorea' or `-mcoreb'. If it's used without `-mcorea' or
10581     `-mcoreb', single application/dual core programming model is used.
10582     In this model, the main function of Core B should be named as
10583     coreb_main. If it's used with `-mcorea' or `-mcoreb', one
10584     application per core programming model is used.  If this option is
10585     not used, single core application programming model is used.
10586
10587`-mcorea'
10588     Build standalone application for Core A of BF561 when using one
10589     application per core programming model. Proper start files and
10590     link scripts will be used to support Core A. This option defines
10591     `__BFIN_COREA'. It must be used with `-mmulticore'.
10592
10593`-mcoreb'
10594     Build standalone application for Core B of BF561 when using one
10595     application per core programming model. Proper start files and
10596     link scripts will be used to support Core B. This option defines
10597     `__BFIN_COREB'. When this option is used, coreb_main should be
10598     used instead of main. It must be used with `-mmulticore'.
10599
10600`-msdram'
10601     Build standalone application for SDRAM. Proper start files and
10602     link scripts will be used to put the application into SDRAM.
10603     Loader should initialize SDRAM before loading the application into
10604     SDRAM. This option defines `__BFIN_SDRAM'.
10605
10606`-micplb'
10607     Assume that ICPLBs are enabled at runtime.  This has an effect on
10608     certain anomaly workarounds.  For Linux targets, the default is to
10609     assume ICPLBs are enabled; for standalone applications the default
10610     is off.
10611
10612
10613File: gcc.info,  Node: CRIS Options,  Next: CRX Options,  Prev: Blackfin Options,  Up: Submodel Options
10614
106153.17.5 CRIS Options
10616-------------------
10617
10618These options are defined specifically for the CRIS ports.
10619
10620`-march=ARCHITECTURE-TYPE'
10621`-mcpu=ARCHITECTURE-TYPE'
10622     Generate code for the specified architecture.  The choices for
10623     ARCHITECTURE-TYPE are `v3', `v8' and `v10' for respectively
10624     ETRAX 4, ETRAX 100, and ETRAX 100 LX.  Default is `v0' except for
10625     cris-axis-linux-gnu, where the default is `v10'.
10626
10627`-mtune=ARCHITECTURE-TYPE'
10628     Tune to ARCHITECTURE-TYPE everything applicable about the generated
10629     code, except for the ABI and the set of available instructions.
10630     The choices for ARCHITECTURE-TYPE are the same as for
10631     `-march=ARCHITECTURE-TYPE'.
10632
10633`-mmax-stack-frame=N'
10634     Warn when the stack frame of a function exceeds N bytes.
10635
10636`-metrax4'
10637`-metrax100'
10638     The options `-metrax4' and `-metrax100' are synonyms for
10639     `-march=v3' and `-march=v8' respectively.
10640
10641`-mmul-bug-workaround'
10642`-mno-mul-bug-workaround'
10643     Work around a bug in the `muls' and `mulu' instructions for CPU
10644     models where it applies.  This option is active by default.
10645
10646`-mpdebug'
10647     Enable CRIS-specific verbose debug-related information in the
10648     assembly code.  This option also has the effect to turn off the
10649     `#NO_APP' formatted-code indicator to the assembler at the
10650     beginning of the assembly file.
10651
10652`-mcc-init'
10653     Do not use condition-code results from previous instruction;
10654     always emit compare and test instructions before use of condition
10655     codes.
10656
10657`-mno-side-effects'
10658     Do not emit instructions with side-effects in addressing modes
10659     other than post-increment.
10660
10661`-mstack-align'
10662`-mno-stack-align'
10663`-mdata-align'
10664`-mno-data-align'
10665`-mconst-align'
10666`-mno-const-align'
10667     These options (no-options) arranges (eliminate arrangements) for
10668     the stack-frame, individual data and constants to be aligned for
10669     the maximum single data access size for the chosen CPU model.  The
10670     default is to arrange for 32-bit alignment.  ABI details such as
10671     structure layout are not affected by these options.
10672
10673`-m32-bit'
10674`-m16-bit'
10675`-m8-bit'
10676     Similar to the stack- data- and const-align options above, these
10677     options arrange for stack-frame, writable data and constants to
10678     all be 32-bit, 16-bit or 8-bit aligned.  The default is 32-bit
10679     alignment.
10680
10681`-mno-prologue-epilogue'
10682`-mprologue-epilogue'
10683     With `-mno-prologue-epilogue', the normal function prologue and
10684     epilogue that sets up the stack-frame are omitted and no return
10685     instructions or return sequences are generated in the code.  Use
10686     this option only together with visual inspection of the compiled
10687     code: no warnings or errors are generated when call-saved
10688     registers must be saved, or storage for local variable needs to be
10689     allocated.
10690
10691`-mno-gotplt'
10692`-mgotplt'
10693     With `-fpic' and `-fPIC', don't generate (do generate) instruction
10694     sequences that load addresses for functions from the PLT part of
10695     the GOT rather than (traditional on other architectures) calls to
10696     the PLT.  The default is `-mgotplt'.
10697
10698`-melf'
10699     Legacy no-op option only recognized with the cris-axis-elf and
10700     cris-axis-linux-gnu targets.
10701
10702`-mlinux'
10703     Legacy no-op option only recognized with the cris-axis-linux-gnu
10704     target.
10705
10706`-sim'
10707     This option, recognized for the cris-axis-elf arranges to link
10708     with input-output functions from a simulator library.  Code,
10709     initialized data and zero-initialized data are allocated
10710     consecutively.
10711
10712`-sim2'
10713     Like `-sim', but pass linker options to locate initialized data at
10714     0x40000000 and zero-initialized data at 0x80000000.
10715
10716
10717File: gcc.info,  Node: CRX Options,  Next: Darwin Options,  Prev: CRIS Options,  Up: Submodel Options
10718
107193.17.6 CRX Options
10720------------------
10721
10722These options are defined specifically for the CRX ports.
10723
10724`-mmac'
10725     Enable the use of multiply-accumulate instructions. Disabled by
10726     default.
10727
10728`-mpush-args'
10729     Push instructions will be used to pass outgoing arguments when
10730     functions are called. Enabled by default.
10731
10732
10733File: gcc.info,  Node: Darwin Options,  Next: DEC Alpha Options,  Prev: CRX Options,  Up: Submodel Options
10734
107353.17.7 Darwin Options
10736---------------------
10737
10738These options are defined for all architectures running the Darwin
10739operating system.
10740
10741 FSF GCC on Darwin does not create "fat" object files; it will create
10742an object file for the single architecture that it was built to target.
10743Apple's GCC on Darwin does create "fat" files if multiple `-arch'
10744options are used; it does so by running the compiler or linker multiple
10745times and joining the results together with `lipo'.
10746
10747 The subtype of the file created (like `ppc7400' or `ppc970' or `i686')
10748is determined by the flags that specify the ISA that GCC is targetting,
10749like `-mcpu' or `-march'.  The `-force_cpusubtype_ALL' option can be
10750used to override this.
10751
10752 The Darwin tools vary in their behavior when presented with an ISA
10753mismatch.  The assembler, `as', will only permit instructions to be
10754used that are valid for the subtype of the file it is generating, so
10755you cannot put 64-bit instructions in a `ppc750' object file.  The
10756linker for shared libraries, `/usr/bin/libtool', will fail and print an
10757error if asked to create a shared library with a less restrictive
10758subtype than its input files (for instance, trying to put a `ppc970'
10759object file in a `ppc7400' library).  The linker for executables, `ld',
10760will quietly give the executable the most restrictive subtype of any of
10761its input files.
10762
10763`-FDIR'
10764     Add the framework directory DIR to the head of the list of
10765     directories to be searched for header files.  These directories are
10766     interleaved with those specified by `-I' options and are scanned
10767     in a left-to-right order.
10768
10769     A framework directory is a directory with frameworks in it.  A
10770     framework is a directory with a `"Headers"' and/or
10771     `"PrivateHeaders"' directory contained directly in it that ends in
10772     `".framework"'.  The name of a framework is the name of this
10773     directory excluding the `".framework"'.  Headers associated with
10774     the framework are found in one of those two directories, with
10775     `"Headers"' being searched first.  A subframework is a framework
10776     directory that is in a framework's `"Frameworks"' directory.
10777     Includes of subframework headers can only appear in a header of a
10778     framework that contains the subframework, or in a sibling
10779     subframework header.  Two subframeworks are siblings if they occur
10780     in the same framework.  A subframework should not have the same
10781     name as a framework, a warning will be issued if this is violated.
10782     Currently a subframework cannot have subframeworks, in the future,
10783     the mechanism may be extended to support this.  The standard
10784     frameworks can be found in `"/System/Library/Frameworks"' and
10785     `"/Library/Frameworks"'.  An example include looks like `#include
10786     <Framework/header.h>', where `Framework' denotes the name of the
10787     framework and header.h is found in the `"PrivateHeaders"' or
10788     `"Headers"' directory.
10789
10790`-iframeworkDIR'
10791     Like `-F' except the directory is a treated as a system directory.
10792     The main difference between this `-iframework' and `-F' is that
10793     with `-iframework' the compiler does not warn about constructs
10794     contained within header files found via DIR.  This option is valid
10795     only for the C family of languages.
10796
10797`-gused'
10798     Emit debugging information for symbols that are used.  For STABS
10799     debugging format, this enables `-feliminate-unused-debug-symbols'.
10800     This is by default ON.
10801
10802`-gfull'
10803     Emit debugging information for all symbols and types.
10804
10805`-mmacosx-version-min=VERSION'
10806     The earliest version of MacOS X that this executable will run on
10807     is VERSION.  Typical values of VERSION include `10.1', `10.2', and
10808     `10.3.9'.
10809
10810     If the compiler was built to use the system's headers by default,
10811     then the default for this option is the system version on which the
10812     compiler is running, otherwise the default is to make choices which
10813     are compatible with as many systems and code bases as possible.
10814
10815`-mkernel'
10816     Enable kernel development mode.  The `-mkernel' option sets
10817     `-static', `-fno-common', `-fno-cxa-atexit', `-fno-exceptions',
10818     `-fno-non-call-exceptions', `-fapple-kext', `-fno-weak' and
10819     `-fno-rtti' where applicable.  This mode also sets `-mno-altivec',
10820     `-msoft-float', `-fno-builtin' and `-mlong-branch' for PowerPC
10821     targets.
10822
10823`-mone-byte-bool'
10824     Override the defaults for `bool' so that `sizeof(bool)==1'.  By
10825     default `sizeof(bool)' is `4' when compiling for Darwin/PowerPC
10826     and `1' when compiling for Darwin/x86, so this option has no
10827     effect on x86.
10828
10829     *Warning:* The `-mone-byte-bool' switch causes GCC to generate
10830     code that is not binary compatible with code generated without
10831     that switch.  Using this switch may require recompiling all other
10832     modules in a program, including system libraries.  Use this switch
10833     to conform to a non-default data model.
10834
10835`-mfix-and-continue'
10836`-ffix-and-continue'
10837`-findirect-data'
10838     Generate code suitable for fast turn around development.  Needed to
10839     enable gdb to dynamically load `.o' files into already running
10840     programs.  `-findirect-data' and `-ffix-and-continue' are provided
10841     for backwards compatibility.
10842
10843`-all_load'
10844     Loads all members of static archive libraries.  See man ld(1) for
10845     more information.
10846
10847`-arch_errors_fatal'
10848     Cause the errors having to do with files that have the wrong
10849     architecture to be fatal.
10850
10851`-bind_at_load'
10852     Causes the output file to be marked such that the dynamic linker
10853     will bind all undefined references when the file is loaded or
10854     launched.
10855
10856`-bundle'
10857     Produce a Mach-o bundle format file.  See man ld(1) for more
10858     information.
10859
10860`-bundle_loader EXECUTABLE'
10861     This option specifies the EXECUTABLE that will be loading the build
10862     output file being linked.  See man ld(1) for more information.
10863
10864`-dynamiclib'
10865     When passed this option, GCC will produce a dynamic library
10866     instead of an executable when linking, using the Darwin `libtool'
10867     command.
10868
10869`-force_cpusubtype_ALL'
10870     This causes GCC's output file to have the ALL subtype, instead of
10871     one controlled by the `-mcpu' or `-march' option.
10872
10873`-allowable_client  CLIENT_NAME'
10874`-client_name'
10875`-compatibility_version'
10876`-current_version'
10877`-dead_strip'
10878`-dependency-file'
10879`-dylib_file'
10880`-dylinker_install_name'
10881`-dynamic'
10882`-exported_symbols_list'
10883`-filelist'
10884`-flat_namespace'
10885`-force_flat_namespace'
10886`-headerpad_max_install_names'
10887`-image_base'
10888`-init'
10889`-install_name'
10890`-keep_private_externs'
10891`-multi_module'
10892`-multiply_defined'
10893`-multiply_defined_unused'
10894`-noall_load'
10895`-no_dead_strip_inits_and_terms'
10896`-nofixprebinding'
10897`-nomultidefs'
10898`-noprebind'
10899`-noseglinkedit'
10900`-pagezero_size'
10901`-prebind'
10902`-prebind_all_twolevel_modules'
10903`-private_bundle'
10904`-read_only_relocs'
10905`-sectalign'
10906`-sectobjectsymbols'
10907`-whyload'
10908`-seg1addr'
10909`-sectcreate'
10910`-sectobjectsymbols'
10911`-sectorder'
10912`-segaddr'
10913`-segs_read_only_addr'
10914`-segs_read_write_addr'
10915`-seg_addr_table'
10916`-seg_addr_table_filename'
10917`-seglinkedit'
10918`-segprot'
10919`-segs_read_only_addr'
10920`-segs_read_write_addr'
10921`-single_module'
10922`-static'
10923`-sub_library'
10924`-sub_umbrella'
10925`-twolevel_namespace'
10926`-umbrella'
10927`-undefined'
10928`-unexported_symbols_list'
10929`-weak_reference_mismatches'
10930`-whatsloaded'
10931     These options are passed to the Darwin linker.  The Darwin linker
10932     man page describes them in detail.
10933
10934
10935File: gcc.info,  Node: DEC Alpha Options,  Next: DEC Alpha/VMS Options,  Prev: Darwin Options,  Up: Submodel Options
10936
109373.17.8 DEC Alpha Options
10938------------------------
10939
10940These `-m' options are defined for the DEC Alpha implementations:
10941
10942`-mno-soft-float'
10943`-msoft-float'
10944     Use (do not use) the hardware floating-point instructions for
10945     floating-point operations.  When `-msoft-float' is specified,
10946     functions in `libgcc.a' will be used to perform floating-point
10947     operations.  Unless they are replaced by routines that emulate the
10948     floating-point operations, or compiled in such a way as to call
10949     such emulations routines, these routines will issue floating-point
10950     operations.   If you are compiling for an Alpha without
10951     floating-point operations, you must ensure that the library is
10952     built so as not to call them.
10953
10954     Note that Alpha implementations without floating-point operations
10955     are required to have floating-point registers.
10956
10957`-mfp-reg'
10958`-mno-fp-regs'
10959     Generate code that uses (does not use) the floating-point register
10960     set.  `-mno-fp-regs' implies `-msoft-float'.  If the floating-point
10961     register set is not used, floating point operands are passed in
10962     integer registers as if they were integers and floating-point
10963     results are passed in `$0' instead of `$f0'.  This is a
10964     non-standard calling sequence, so any function with a
10965     floating-point argument or return value called by code compiled
10966     with `-mno-fp-regs' must also be compiled with that option.
10967
10968     A typical use of this option is building a kernel that does not
10969     use, and hence need not save and restore, any floating-point
10970     registers.
10971
10972`-mieee'
10973     The Alpha architecture implements floating-point hardware
10974     optimized for maximum performance.  It is mostly compliant with
10975     the IEEE floating point standard.  However, for full compliance,
10976     software assistance is required.  This option generates code fully
10977     IEEE compliant code _except_ that the INEXACT-FLAG is not
10978     maintained (see below).  If this option is turned on, the
10979     preprocessor macro `_IEEE_FP' is defined during compilation.  The
10980     resulting code is less efficient but is able to correctly support
10981     denormalized numbers and exceptional IEEE values such as
10982     not-a-number and plus/minus infinity.  Other Alpha compilers call
10983     this option `-ieee_with_no_inexact'.
10984
10985`-mieee-with-inexact'
10986     This is like `-mieee' except the generated code also maintains the
10987     IEEE INEXACT-FLAG.  Turning on this option causes the generated
10988     code to implement fully-compliant IEEE math.  In addition to
10989     `_IEEE_FP', `_IEEE_FP_EXACT' is defined as a preprocessor macro.
10990     On some Alpha implementations the resulting code may execute
10991     significantly slower than the code generated by default.  Since
10992     there is very little code that depends on the INEXACT-FLAG, you
10993     should normally not specify this option.  Other Alpha compilers
10994     call this option `-ieee_with_inexact'.
10995
10996`-mfp-trap-mode=TRAP-MODE'
10997     This option controls what floating-point related traps are enabled.
10998     Other Alpha compilers call this option `-fptm TRAP-MODE'.  The
10999     trap mode can be set to one of four values:
11000
11001    `n'
11002          This is the default (normal) setting.  The only traps that
11003          are enabled are the ones that cannot be disabled in software
11004          (e.g., division by zero trap).
11005
11006    `u'
11007          In addition to the traps enabled by `n', underflow traps are
11008          enabled as well.
11009
11010    `su'
11011          Like `u', but the instructions are marked to be safe for
11012          software completion (see Alpha architecture manual for
11013          details).
11014
11015    `sui'
11016          Like `su', but inexact traps are enabled as well.
11017
11018`-mfp-rounding-mode=ROUNDING-MODE'
11019     Selects the IEEE rounding mode.  Other Alpha compilers call this
11020     option `-fprm ROUNDING-MODE'.  The ROUNDING-MODE can be one of:
11021
11022    `n'
11023          Normal IEEE rounding mode.  Floating point numbers are
11024          rounded towards the nearest machine number or towards the
11025          even machine number in case of a tie.
11026
11027    `m'
11028          Round towards minus infinity.
11029
11030    `c'
11031          Chopped rounding mode.  Floating point numbers are rounded
11032          towards zero.
11033
11034    `d'
11035          Dynamic rounding mode.  A field in the floating point control
11036          register (FPCR, see Alpha architecture reference manual)
11037          controls the rounding mode in effect.  The C library
11038          initializes this register for rounding towards plus infinity.
11039          Thus, unless your program modifies the FPCR, `d' corresponds
11040          to round towards plus infinity.
11041
11042`-mtrap-precision=TRAP-PRECISION'
11043     In the Alpha architecture, floating point traps are imprecise.
11044     This means without software assistance it is impossible to recover
11045     from a floating trap and program execution normally needs to be
11046     terminated.  GCC can generate code that can assist operating
11047     system trap handlers in determining the exact location that caused
11048     a floating point trap.  Depending on the requirements of an
11049     application, different levels of precisions can be selected:
11050
11051    `p'
11052          Program precision.  This option is the default and means a
11053          trap handler can only identify which program caused a
11054          floating point exception.
11055
11056    `f'
11057          Function precision.  The trap handler can determine the
11058          function that caused a floating point exception.
11059
11060    `i'
11061          Instruction precision.  The trap handler can determine the
11062          exact instruction that caused a floating point exception.
11063
11064     Other Alpha compilers provide the equivalent options called
11065     `-scope_safe' and `-resumption_safe'.
11066
11067`-mieee-conformant'
11068     This option marks the generated code as IEEE conformant.  You must
11069     not use this option unless you also specify `-mtrap-precision=i'
11070     and either `-mfp-trap-mode=su' or `-mfp-trap-mode=sui'.  Its only
11071     effect is to emit the line `.eflag 48' in the function prologue of
11072     the generated assembly file.  Under DEC Unix, this has the effect
11073     that IEEE-conformant math library routines will be linked in.
11074
11075`-mbuild-constants'
11076     Normally GCC examines a 32- or 64-bit integer constant to see if
11077     it can construct it from smaller constants in two or three
11078     instructions.  If it cannot, it will output the constant as a
11079     literal and generate code to load it from the data segment at
11080     runtime.
11081
11082     Use this option to require GCC to construct _all_ integer constants
11083     using code, even if it takes more instructions (the maximum is
11084     six).
11085
11086     You would typically use this option to build a shared library
11087     dynamic loader.  Itself a shared library, it must relocate itself
11088     in memory before it can find the variables and constants in its
11089     own data segment.
11090
11091`-malpha-as'
11092`-mgas'
11093     Select whether to generate code to be assembled by the
11094     vendor-supplied assembler (`-malpha-as') or by the GNU assembler
11095     `-mgas'.
11096
11097`-mbwx'
11098`-mno-bwx'
11099`-mcix'
11100`-mno-cix'
11101`-mfix'
11102`-mno-fix'
11103`-mmax'
11104`-mno-max'
11105     Indicate whether GCC should generate code to use the optional BWX,
11106     CIX, FIX and MAX instruction sets.  The default is to use the
11107     instruction sets supported by the CPU type specified via `-mcpu='
11108     option or that of the CPU on which GCC was built if none was
11109     specified.
11110
11111`-mfloat-vax'
11112`-mfloat-ieee'
11113     Generate code that uses (does not use) VAX F and G floating point
11114     arithmetic instead of IEEE single and double precision.
11115
11116`-mexplicit-relocs'
11117`-mno-explicit-relocs'
11118     Older Alpha assemblers provided no way to generate symbol
11119     relocations except via assembler macros.  Use of these macros does
11120     not allow optimal instruction scheduling.  GNU binutils as of
11121     version 2.12 supports a new syntax that allows the compiler to
11122     explicitly mark which relocations should apply to which
11123     instructions.  This option is mostly useful for debugging, as GCC
11124     detects the capabilities of the assembler when it is built and
11125     sets the default accordingly.
11126
11127`-msmall-data'
11128`-mlarge-data'
11129     When `-mexplicit-relocs' is in effect, static data is accessed via
11130     "gp-relative" relocations.  When `-msmall-data' is used, objects 8
11131     bytes long or smaller are placed in a "small data area" (the
11132     `.sdata' and `.sbss' sections) and are accessed via 16-bit
11133     relocations off of the `$gp' register.  This limits the size of
11134     the small data area to 64KB, but allows the variables to be
11135     directly accessed via a single instruction.
11136
11137     The default is `-mlarge-data'.  With this option the data area is
11138     limited to just below 2GB.  Programs that require more than 2GB of
11139     data must use `malloc' or `mmap' to allocate the data in the heap
11140     instead of in the program's data segment.
11141
11142     When generating code for shared libraries, `-fpic' implies
11143     `-msmall-data' and `-fPIC' implies `-mlarge-data'.
11144
11145`-msmall-text'
11146`-mlarge-text'
11147     When `-msmall-text' is used, the compiler assumes that the code of
11148     the entire program (or shared library) fits in 4MB, and is thus
11149     reachable with a branch instruction.  When `-msmall-data' is used,
11150     the compiler can assume that all local symbols share the same
11151     `$gp' value, and thus reduce the number of instructions required
11152     for a function call from 4 to 1.
11153
11154     The default is `-mlarge-text'.
11155
11156`-mcpu=CPU_TYPE'
11157     Set the instruction set and instruction scheduling parameters for
11158     machine type CPU_TYPE.  You can specify either the `EV' style name
11159     or the corresponding chip number.  GCC supports scheduling
11160     parameters for the EV4, EV5 and EV6 family of processors and will
11161     choose the default values for the instruction set from the
11162     processor you specify.  If you do not specify a processor type,
11163     GCC will default to the processor on which the compiler was built.
11164
11165     Supported values for CPU_TYPE are
11166
11167    `ev4'
11168    `ev45'
11169    `21064'
11170          Schedules as an EV4 and has no instruction set extensions.
11171
11172    `ev5'
11173    `21164'
11174          Schedules as an EV5 and has no instruction set extensions.
11175
11176    `ev56'
11177    `21164a'
11178          Schedules as an EV5 and supports the BWX extension.
11179
11180    `pca56'
11181    `21164pc'
11182    `21164PC'
11183          Schedules as an EV5 and supports the BWX and MAX extensions.
11184
11185    `ev6'
11186    `21264'
11187          Schedules as an EV6 and supports the BWX, FIX, and MAX
11188          extensions.
11189
11190    `ev67'
11191    `21264a'
11192          Schedules as an EV6 and supports the BWX, CIX, FIX, and MAX
11193          extensions.
11194
11195     Native Linux/GNU toolchains also support the value `native', which
11196     selects the best architecture option for the host processor.
11197     `-mcpu=native' has no effect if GCC does not recognize the
11198     processor.
11199
11200`-mtune=CPU_TYPE'
11201     Set only the instruction scheduling parameters for machine type
11202     CPU_TYPE.  The instruction set is not changed.
11203
11204     Native Linux/GNU toolchains also support the value `native', which
11205     selects the best architecture option for the host processor.
11206     `-mtune=native' has no effect if GCC does not recognize the
11207     processor.
11208
11209`-mmemory-latency=TIME'
11210     Sets the latency the scheduler should assume for typical memory
11211     references as seen by the application.  This number is highly
11212     dependent on the memory access patterns used by the application
11213     and the size of the external cache on the machine.
11214
11215     Valid options for TIME are
11216
11217    `NUMBER'
11218          A decimal number representing clock cycles.
11219
11220    `L1'
11221    `L2'
11222    `L3'
11223    `main'
11224          The compiler contains estimates of the number of clock cycles
11225          for "typical" EV4 & EV5 hardware for the Level 1, 2 & 3 caches
11226          (also called Dcache, Scache, and Bcache), as well as to main
11227          memory.  Note that L3 is only valid for EV5.
11228
11229
11230
11231File: gcc.info,  Node: DEC Alpha/VMS Options,  Next: FR30 Options,  Prev: DEC Alpha Options,  Up: Submodel Options
11232
112333.17.9 DEC Alpha/VMS Options
11234----------------------------
11235
11236These `-m' options are defined for the DEC Alpha/VMS implementations:
11237
11238`-mvms-return-codes'
11239     Return VMS condition codes from main.  The default is to return
11240     POSIX style condition (e.g. error) codes.
11241
11242`-mdebug-main=PREFIX'
11243     Flag the first routine whose name starts with PREFIX as the main
11244     routine for the debugger.
11245
11246`-mmalloc64'
11247     Default to 64bit memory allocation routines.
11248
11249
11250File: gcc.info,  Node: FR30 Options,  Next: FRV Options,  Prev: DEC Alpha/VMS Options,  Up: Submodel Options
11251
112523.17.10 FR30 Options
11253--------------------
11254
11255These options are defined specifically for the FR30 port.
11256
11257`-msmall-model'
11258     Use the small address space model.  This can produce smaller code,
11259     but it does assume that all symbolic values and addresses will fit
11260     into a 20-bit range.
11261
11262`-mno-lsim'
11263     Assume that run-time support has been provided and so there is no
11264     need to include the simulator library (`libsim.a') on the linker
11265     command line.
11266
11267
11268
11269File: gcc.info,  Node: FRV Options,  Next: GNU/Linux Options,  Prev: FR30 Options,  Up: Submodel Options
11270
112713.17.11 FRV Options
11272-------------------
11273
11274`-mgpr-32'
11275     Only use the first 32 general purpose registers.
11276
11277`-mgpr-64'
11278     Use all 64 general purpose registers.
11279
11280`-mfpr-32'
11281     Use only the first 32 floating point registers.
11282
11283`-mfpr-64'
11284     Use all 64 floating point registers
11285
11286`-mhard-float'
11287     Use hardware instructions for floating point operations.
11288
11289`-msoft-float'
11290     Use library routines for floating point operations.
11291
11292`-malloc-cc'
11293     Dynamically allocate condition code registers.
11294
11295`-mfixed-cc'
11296     Do not try to dynamically allocate condition code registers, only
11297     use `icc0' and `fcc0'.
11298
11299`-mdword'
11300     Change ABI to use double word insns.
11301
11302`-mno-dword'
11303     Do not use double word instructions.
11304
11305`-mdouble'
11306     Use floating point double instructions.
11307
11308`-mno-double'
11309     Do not use floating point double instructions.
11310
11311`-mmedia'
11312     Use media instructions.
11313
11314`-mno-media'
11315     Do not use media instructions.
11316
11317`-mmuladd'
11318     Use multiply and add/subtract instructions.
11319
11320`-mno-muladd'
11321     Do not use multiply and add/subtract instructions.
11322
11323`-mfdpic'
11324     Select the FDPIC ABI, that uses function descriptors to represent
11325     pointers to functions.  Without any PIC/PIE-related options, it
11326     implies `-fPIE'.  With `-fpic' or `-fpie', it assumes GOT entries
11327     and small data are within a 12-bit range from the GOT base
11328     address; with `-fPIC' or `-fPIE', GOT offsets are computed with 32
11329     bits.  With a `bfin-elf' target, this option implies `-msim'.
11330
11331`-minline-plt'
11332     Enable inlining of PLT entries in function calls to functions that
11333     are not known to bind locally.  It has no effect without `-mfdpic'.
11334     It's enabled by default if optimizing for speed and compiling for
11335     shared libraries (i.e., `-fPIC' or `-fpic'), or when an
11336     optimization option such as `-O3' or above is present in the
11337     command line.
11338
11339`-mTLS'
11340     Assume a large TLS segment when generating thread-local code.
11341
11342`-mtls'
11343     Do not assume a large TLS segment when generating thread-local
11344     code.
11345
11346`-mgprel-ro'
11347     Enable the use of `GPREL' relocations in the FDPIC ABI for data
11348     that is known to be in read-only sections.  It's enabled by
11349     default, except for `-fpic' or `-fpie': even though it may help
11350     make the global offset table smaller, it trades 1 instruction for
11351     4.  With `-fPIC' or `-fPIE', it trades 3 instructions for 4, one
11352     of which may be shared by multiple symbols, and it avoids the need
11353     for a GOT entry for the referenced symbol, so it's more likely to
11354     be a win.  If it is not, `-mno-gprel-ro' can be used to disable it.
11355
11356`-multilib-library-pic'
11357     Link with the (library, not FD) pic libraries.  It's implied by
11358     `-mlibrary-pic', as well as by `-fPIC' and `-fpic' without
11359     `-mfdpic'.  You should never have to use it explicitly.
11360
11361`-mlinked-fp'
11362     Follow the EABI requirement of always creating a frame pointer
11363     whenever a stack frame is allocated.  This option is enabled by
11364     default and can be disabled with `-mno-linked-fp'.
11365
11366`-mlong-calls'
11367     Use indirect addressing to call functions outside the current
11368     compilation unit.  This allows the functions to be placed anywhere
11369     within the 32-bit address space.
11370
11371`-malign-labels'
11372     Try to align labels to an 8-byte boundary by inserting nops into
11373     the previous packet.  This option only has an effect when VLIW
11374     packing is enabled.  It doesn't create new packets; it merely adds
11375     nops to existing ones.
11376
11377`-mlibrary-pic'
11378     Generate position-independent EABI code.
11379
11380`-macc-4'
11381     Use only the first four media accumulator registers.
11382
11383`-macc-8'
11384     Use all eight media accumulator registers.
11385
11386`-mpack'
11387     Pack VLIW instructions.
11388
11389`-mno-pack'
11390     Do not pack VLIW instructions.
11391
11392`-mno-eflags'
11393     Do not mark ABI switches in e_flags.
11394
11395`-mcond-move'
11396     Enable the use of conditional-move instructions (default).
11397
11398     This switch is mainly for debugging the compiler and will likely
11399     be removed in a future version.
11400
11401`-mno-cond-move'
11402     Disable the use of conditional-move instructions.
11403
11404     This switch is mainly for debugging the compiler and will likely
11405     be removed in a future version.
11406
11407`-mscc'
11408     Enable the use of conditional set instructions (default).
11409
11410     This switch is mainly for debugging the compiler and will likely
11411     be removed in a future version.
11412
11413`-mno-scc'
11414     Disable the use of conditional set instructions.
11415
11416     This switch is mainly for debugging the compiler and will likely
11417     be removed in a future version.
11418
11419`-mcond-exec'
11420     Enable the use of conditional execution (default).
11421
11422     This switch is mainly for debugging the compiler and will likely
11423     be removed in a future version.
11424
11425`-mno-cond-exec'
11426     Disable the use of conditional execution.
11427
11428     This switch is mainly for debugging the compiler and will likely
11429     be removed in a future version.
11430
11431`-mvliw-branch'
11432     Run a pass to pack branches into VLIW instructions (default).
11433
11434     This switch is mainly for debugging the compiler and will likely
11435     be removed in a future version.
11436
11437`-mno-vliw-branch'
11438     Do not run a pass to pack branches into VLIW instructions.
11439
11440     This switch is mainly for debugging the compiler and will likely
11441     be removed in a future version.
11442
11443`-mmulti-cond-exec'
11444     Enable optimization of `&&' and `||' in conditional execution
11445     (default).
11446
11447     This switch is mainly for debugging the compiler and will likely
11448     be removed in a future version.
11449
11450`-mno-multi-cond-exec'
11451     Disable optimization of `&&' and `||' in conditional execution.
11452
11453     This switch is mainly for debugging the compiler and will likely
11454     be removed in a future version.
11455
11456`-mnested-cond-exec'
11457     Enable nested conditional execution optimizations (default).
11458
11459     This switch is mainly for debugging the compiler and will likely
11460     be removed in a future version.
11461
11462`-mno-nested-cond-exec'
11463     Disable nested conditional execution optimizations.
11464
11465     This switch is mainly for debugging the compiler and will likely
11466     be removed in a future version.
11467
11468`-moptimize-membar'
11469     This switch removes redundant `membar' instructions from the
11470     compiler generated code.  It is enabled by default.
11471
11472`-mno-optimize-membar'
11473     This switch disables the automatic removal of redundant `membar'
11474     instructions from the generated code.
11475
11476`-mtomcat-stats'
11477     Cause gas to print out tomcat statistics.
11478
11479`-mcpu=CPU'
11480     Select the processor type for which to generate code.  Possible
11481     values are `frv', `fr550', `tomcat', `fr500', `fr450', `fr405',
11482     `fr400', `fr300' and `simple'.
11483
11484
11485
11486File: gcc.info,  Node: GNU/Linux Options,  Next: H8/300 Options,  Prev: FRV Options,  Up: Submodel Options
11487
114883.17.12 GNU/Linux Options
11489-------------------------
11490
11491These `-m' options are defined for GNU/Linux targets:
11492
11493`-mglibc'
11494     Use the GNU C library.  This is the default except on
11495     `*-*-linux-*uclibc*' and `*-*-linux-*android*' targets.
11496
11497`-muclibc'
11498     Use uClibc C library.  This is the default on `*-*-linux-*uclibc*'
11499     targets.
11500
11501`-mbionic'
11502     Use Bionic C library.  This is the default on
11503     `*-*-linux-*android*' targets.
11504
11505`-mandroid'
11506     Compile code compatible with Android platform.  This is the
11507     default on `*-*-linux-*android*' targets.
11508
11509     When compiling, this option enables `-mbionic', `-fPIC',
11510     `-fno-exceptions' and `-fno-rtti' by default.  When linking, this
11511     option makes the GCC driver pass Android-specific options to the
11512     linker.  Finally, this option causes the preprocessor macro
11513     `__ANDROID__' to be defined.
11514
11515`-tno-android-cc'
11516     Disable compilation effects of `-mandroid', i.e., do not enable
11517     `-mbionic', `-fPIC', `-fno-exceptions' and `-fno-rtti' by default.
11518
11519`-tno-android-ld'
11520     Disable linking effects of `-mandroid', i.e., pass standard Linux
11521     linking options to the linker.
11522
11523
11524
11525File: gcc.info,  Node: H8/300 Options,  Next: HPPA Options,  Prev: GNU/Linux Options,  Up: Submodel Options
11526
115273.17.13 H8/300 Options
11528----------------------
11529
11530These `-m' options are defined for the H8/300 implementations:
11531
11532`-mrelax'
11533     Shorten some address references at link time, when possible; uses
11534     the linker option `-relax'.  *Note `ld' and the H8/300:
11535     (ld)H8/300, for a fuller description.
11536
11537`-mh'
11538     Generate code for the H8/300H.
11539
11540`-ms'
11541     Generate code for the H8S.
11542
11543`-mn'
11544     Generate code for the H8S and H8/300H in the normal mode.  This
11545     switch must be used either with `-mh' or `-ms'.
11546
11547`-ms2600'
11548     Generate code for the H8S/2600.  This switch must be used with
11549     `-ms'.
11550
11551`-mint32'
11552     Make `int' data 32 bits by default.
11553
11554`-malign-300'
11555     On the H8/300H and H8S, use the same alignment rules as for the
11556     H8/300.  The default for the H8/300H and H8S is to align longs and
11557     floats on 4 byte boundaries.  `-malign-300' causes them to be
11558     aligned on 2 byte boundaries.  This option has no effect on the
11559     H8/300.
11560
11561
11562File: gcc.info,  Node: HPPA Options,  Next: i386 and x86-64 Options,  Prev: H8/300 Options,  Up: Submodel Options
11563
115643.17.14 HPPA Options
11565--------------------
11566
11567These `-m' options are defined for the HPPA family of computers:
11568
11569`-march=ARCHITECTURE-TYPE'
11570     Generate code for the specified architecture.  The choices for
11571     ARCHITECTURE-TYPE are `1.0' for PA 1.0, `1.1' for PA 1.1, and
11572     `2.0' for PA 2.0 processors.  Refer to `/usr/lib/sched.models' on
11573     an HP-UX system to determine the proper architecture option for
11574     your machine.  Code compiled for lower numbered architectures will
11575     run on higher numbered architectures, but not the other way around.
11576
11577`-mpa-risc-1-0'
11578`-mpa-risc-1-1'
11579`-mpa-risc-2-0'
11580     Synonyms for `-march=1.0', `-march=1.1', and `-march=2.0'
11581     respectively.
11582
11583`-mbig-switch'
11584     Generate code suitable for big switch tables.  Use this option
11585     only if the assembler/linker complain about out of range branches
11586     within a switch table.
11587
11588`-mjump-in-delay'
11589     Fill delay slots of function calls with unconditional jump
11590     instructions by modifying the return pointer for the function call
11591     to be the target of the conditional jump.
11592
11593`-mdisable-fpregs'
11594     Prevent floating point registers from being used in any manner.
11595     This is necessary for compiling kernels which perform lazy context
11596     switching of floating point registers.  If you use this option and
11597     attempt to perform floating point operations, the compiler will
11598     abort.
11599
11600`-mdisable-indexing'
11601     Prevent the compiler from using indexing address modes.  This
11602     avoids some rather obscure problems when compiling MIG generated
11603     code under MACH.
11604
11605`-mno-space-regs'
11606     Generate code that assumes the target has no space registers.
11607     This allows GCC to generate faster indirect calls and use unscaled
11608     index address modes.
11609
11610     Such code is suitable for level 0 PA systems and kernels.
11611
11612`-mfast-indirect-calls'
11613     Generate code that assumes calls never cross space boundaries.
11614     This allows GCC to emit code which performs faster indirect calls.
11615
11616     This option will not work in the presence of shared libraries or
11617     nested functions.
11618
11619`-mfixed-range=REGISTER-RANGE'
11620     Generate code treating the given register range as fixed registers.
11621     A fixed register is one that the register allocator can not use.
11622     This is useful when compiling kernel code.  A register range is
11623     specified as two registers separated by a dash.  Multiple register
11624     ranges can be specified separated by a comma.
11625
11626`-mlong-load-store'
11627     Generate 3-instruction load and store sequences as sometimes
11628     required by the HP-UX 10 linker.  This is equivalent to the `+k'
11629     option to the HP compilers.
11630
11631`-mportable-runtime'
11632     Use the portable calling conventions proposed by HP for ELF
11633     systems.
11634
11635`-mgas'
11636     Enable the use of assembler directives only GAS understands.
11637
11638`-mschedule=CPU-TYPE'
11639     Schedule code according to the constraints for the machine type
11640     CPU-TYPE.  The choices for CPU-TYPE are `700' `7100', `7100LC',
11641     `7200', `7300' and `8000'.  Refer to `/usr/lib/sched.models' on an
11642     HP-UX system to determine the proper scheduling option for your
11643     machine.  The default scheduling is `8000'.
11644
11645`-mlinker-opt'
11646     Enable the optimization pass in the HP-UX linker.  Note this makes
11647     symbolic debugging impossible.  It also triggers a bug in the
11648     HP-UX 8 and HP-UX 9 linkers in which they give bogus error
11649     messages when linking some programs.
11650
11651`-msoft-float'
11652     Generate output containing library calls for floating point.
11653     *Warning:* the requisite libraries are not available for all HPPA
11654     targets.  Normally the facilities of the machine's usual C
11655     compiler are used, but this cannot be done directly in
11656     cross-compilation.  You must make your own arrangements to provide
11657     suitable library functions for cross-compilation.
11658
11659     `-msoft-float' changes the calling convention in the output file;
11660     therefore, it is only useful if you compile _all_ of a program with
11661     this option.  In particular, you need to compile `libgcc.a', the
11662     library that comes with GCC, with `-msoft-float' in order for this
11663     to work.
11664
11665`-msio'
11666     Generate the predefine, `_SIO', for server IO.  The default is
11667     `-mwsio'.  This generates the predefines, `__hp9000s700',
11668     `__hp9000s700__' and `_WSIO', for workstation IO.  These options
11669     are available under HP-UX and HI-UX.
11670
11671`-mgnu-ld'
11672     Use GNU ld specific options.  This passes `-shared' to ld when
11673     building a shared library.  It is the default when GCC is
11674     configured, explicitly or implicitly, with the GNU linker.  This
11675     option does not have any affect on which ld is called, it only
11676     changes what parameters are passed to that ld.  The ld that is
11677     called is determined by the `--with-ld' configure option, GCC's
11678     program search path, and finally by the user's `PATH'.  The linker
11679     used by GCC can be printed using `which `gcc
11680     -print-prog-name=ld`'.  This option is only available on the 64
11681     bit HP-UX GCC, i.e. configured with `hppa*64*-*-hpux*'.
11682
11683`-mhp-ld'
11684     Use HP ld specific options.  This passes `-b' to ld when building
11685     a shared library and passes `+Accept TypeMismatch' to ld on all
11686     links.  It is the default when GCC is configured, explicitly or
11687     implicitly, with the HP linker.  This option does not have any
11688     affect on which ld is called, it only changes what parameters are
11689     passed to that ld.  The ld that is called is determined by the
11690     `--with-ld' configure option, GCC's program search path, and
11691     finally by the user's `PATH'.  The linker used by GCC can be
11692     printed using `which `gcc -print-prog-name=ld`'.  This option is
11693     only available on the 64 bit HP-UX GCC, i.e. configured with
11694     `hppa*64*-*-hpux*'.
11695
11696`-mlong-calls'
11697     Generate code that uses long call sequences.  This ensures that a
11698     call is always able to reach linker generated stubs.  The default
11699     is to generate long calls only when the distance from the call
11700     site to the beginning of the function or translation unit, as the
11701     case may be, exceeds a predefined limit set by the branch type
11702     being used.  The limits for normal calls are 7,600,000 and 240,000
11703     bytes, respectively for the PA 2.0 and PA 1.X architectures.
11704     Sibcalls are always limited at 240,000 bytes.
11705
11706     Distances are measured from the beginning of functions when using
11707     the `-ffunction-sections' option, or when using the `-mgas' and
11708     `-mno-portable-runtime' options together under HP-UX with the SOM
11709     linker.
11710
11711     It is normally not desirable to use this option as it will degrade
11712     performance.  However, it may be useful in large applications,
11713     particularly when partial linking is used to build the application.
11714
11715     The types of long calls used depends on the capabilities of the
11716     assembler and linker, and the type of code being generated.  The
11717     impact on systems that support long absolute calls, and long pic
11718     symbol-difference or pc-relative calls should be relatively small.
11719     However, an indirect call is used on 32-bit ELF systems in pic code
11720     and it is quite long.
11721
11722`-munix=UNIX-STD'
11723     Generate compiler predefines and select a startfile for the
11724     specified UNIX standard.  The choices for UNIX-STD are `93', `95'
11725     and `98'.  `93' is supported on all HP-UX versions.  `95' is
11726     available on HP-UX 10.10 and later.  `98' is available on HP-UX
11727     11.11 and later.  The default values are `93' for HP-UX 10.00,
11728     `95' for HP-UX 10.10 though to 11.00, and `98' for HP-UX 11.11 and
11729     later.
11730
11731     `-munix=93' provides the same predefines as GCC 3.3 and 3.4.
11732     `-munix=95' provides additional predefines for `XOPEN_UNIX' and
11733     `_XOPEN_SOURCE_EXTENDED', and the startfile `unix95.o'.
11734     `-munix=98' provides additional predefines for `_XOPEN_UNIX',
11735     `_XOPEN_SOURCE_EXTENDED', `_INCLUDE__STDC_A1_SOURCE' and
11736     `_INCLUDE_XOPEN_SOURCE_500', and the startfile `unix98.o'.
11737
11738     It is _important_ to note that this option changes the interfaces
11739     for various library routines.  It also affects the operational
11740     behavior of the C library.  Thus, _extreme_ care is needed in
11741     using this option.
11742
11743     Library code that is intended to operate with more than one UNIX
11744     standard must test, set and restore the variable
11745     __XPG4_EXTENDED_MASK as appropriate.  Most GNU software doesn't
11746     provide this capability.
11747
11748`-nolibdld'
11749     Suppress the generation of link options to search libdld.sl when
11750     the `-static' option is specified on HP-UX 10 and later.
11751
11752`-static'
11753     The HP-UX implementation of setlocale in libc has a dependency on
11754     libdld.sl.  There isn't an archive version of libdld.sl.  Thus,
11755     when the `-static' option is specified, special link options are
11756     needed to resolve this dependency.
11757
11758     On HP-UX 10 and later, the GCC driver adds the necessary options to
11759     link with libdld.sl when the `-static' option is specified.  This
11760     causes the resulting binary to be dynamic.  On the 64-bit port,
11761     the linkers generate dynamic binaries by default in any case.  The
11762     `-nolibdld' option can be used to prevent the GCC driver from
11763     adding these link options.
11764
11765`-threads'
11766     Add support for multithreading with the "dce thread" library under
11767     HP-UX.  This option sets flags for both the preprocessor and
11768     linker.
11769
11770
11771File: gcc.info,  Node: i386 and x86-64 Options,  Next: i386 and x86-64 Windows Options,  Prev: HPPA Options,  Up: Submodel Options
11772
117733.17.15 Intel 386 and AMD x86-64 Options
11774----------------------------------------
11775
11776These `-m' options are defined for the i386 and x86-64 family of
11777computers:
11778
11779`-mtune=CPU-TYPE'
11780     Tune to CPU-TYPE everything applicable about the generated code,
11781     except for the ABI and the set of available instructions.  The
11782     choices for CPU-TYPE are:
11783    _generic_
11784          Produce code optimized for the most common IA32/AMD64/EM64T
11785          processors.  If you know the CPU on which your code will run,
11786          then you should use the corresponding `-mtune' option instead
11787          of `-mtune=generic'.  But, if you do not know exactly what
11788          CPU users of your application will have, then you should use
11789          this option.
11790
11791          As new processors are deployed in the marketplace, the
11792          behavior of this option will change.  Therefore, if you
11793          upgrade to a newer version of GCC, the code generated option
11794          will change to reflect the processors that were most common
11795          when that version of GCC was released.
11796
11797          There is no `-march=generic' option because `-march'
11798          indicates the instruction set the compiler can use, and there
11799          is no generic instruction set applicable to all processors.
11800          In contrast, `-mtune' indicates the processor (or, in this
11801          case, collection of processors) for which the code is
11802          optimized.
11803
11804    _native_
11805          This selects the CPU to tune for at compilation time by
11806          determining the processor type of the compiling machine.
11807          Using `-mtune=native' will produce code optimized for the
11808          local machine under the constraints of the selected
11809          instruction set.  Using `-march=native' will enable all
11810          instruction subsets supported by the local machine (hence the
11811          result might not run on different machines).
11812
11813    _i386_
11814          Original Intel's i386 CPU.
11815
11816    _i486_
11817          Intel's i486 CPU.  (No scheduling is implemented for this
11818          chip.)
11819
11820    _i586, pentium_
11821          Intel Pentium CPU with no MMX support.
11822
11823    _pentium-mmx_
11824          Intel PentiumMMX CPU based on Pentium core with MMX
11825          instruction set support.
11826
11827    _pentiumpro_
11828          Intel PentiumPro CPU.
11829
11830    _i686_
11831          Same as `generic', but when used as `march' option, PentiumPro
11832          instruction set will be used, so the code will run on all
11833          i686 family chips.
11834
11835    _pentium2_
11836          Intel Pentium2 CPU based on PentiumPro core with MMX
11837          instruction set support.
11838
11839    _pentium3, pentium3m_
11840          Intel Pentium3 CPU based on PentiumPro core with MMX and SSE
11841          instruction set support.
11842
11843    _pentium-m_
11844          Low power version of Intel Pentium3 CPU with MMX, SSE and
11845          SSE2 instruction set support.  Used by Centrino notebooks.
11846
11847    _pentium4, pentium4m_
11848          Intel Pentium4 CPU with MMX, SSE and SSE2 instruction set
11849          support.
11850
11851    _prescott_
11852          Improved version of Intel Pentium4 CPU with MMX, SSE, SSE2
11853          and SSE3 instruction set support.
11854
11855    _nocona_
11856          Improved version of Intel Pentium4 CPU with 64-bit
11857          extensions, MMX, SSE, SSE2 and SSE3 instruction set support.
11858
11859    _core2_
11860          Intel Core2 CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3
11861          and SSSE3 instruction set support.
11862
11863    _corei7_
11864          Intel Core i7 CPU with 64-bit extensions, MMX, SSE, SSE2,
11865          SSE3, SSSE3, SSE4.1 and SSE4.2 instruction set support.
11866
11867    _corei7-avx_
11868          Intel Core i7 CPU with 64-bit extensions, MMX, SSE, SSE2,
11869          SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AES and PCLMUL instruction
11870          set support.
11871
11872    _atom_
11873          Intel Atom CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3
11874          and SSSE3 instruction set support.
11875
11876    _k6_
11877          AMD K6 CPU with MMX instruction set support.
11878
11879    _k6-2, k6-3_
11880          Improved versions of AMD K6 CPU with MMX and 3DNow!
11881          instruction set support.
11882
11883    _athlon, athlon-tbird_
11884          AMD Athlon CPU with MMX, 3dNOW!, enhanced 3DNow! and SSE
11885          prefetch instructions support.
11886
11887    _athlon-4, athlon-xp, athlon-mp_
11888          Improved AMD Athlon CPU with MMX, 3DNow!, enhanced 3DNow! and
11889          full SSE instruction set support.
11890
11891    _k8, opteron, athlon64, athlon-fx_
11892          AMD K8 core based CPUs with x86-64 instruction set support.
11893          (This supersets MMX, SSE, SSE2, 3DNow!, enhanced 3DNow! and
11894          64-bit instruction set extensions.)
11895
11896    _k8-sse3, opteron-sse3, athlon64-sse3_
11897          Improved versions of k8, opteron and athlon64 with SSE3
11898          instruction set support.
11899
11900    _amdfam10, barcelona_
11901          AMD Family 10h core based CPUs with x86-64 instruction set
11902          support.  (This supersets MMX, SSE, SSE2, SSE3, SSE4A,
11903          3DNow!, enhanced 3DNow!, ABM and 64-bit instruction set
11904          extensions.)
11905
11906    _winchip-c6_
11907          IDT Winchip C6 CPU, dealt in same way as i486 with additional
11908          MMX instruction set support.
11909
11910    _winchip2_
11911          IDT Winchip2 CPU, dealt in same way as i486 with additional
11912          MMX and 3DNow!  instruction set support.
11913
11914    _c3_
11915          Via C3 CPU with MMX and 3DNow! instruction set support.  (No
11916          scheduling is implemented for this chip.)
11917
11918    _c3-2_
11919          Via C3-2 CPU with MMX and SSE instruction set support.  (No
11920          scheduling is implemented for this chip.)
11921
11922    _geode_
11923          Embedded AMD CPU with MMX and 3DNow! instruction set support.
11924
11925     While picking a specific CPU-TYPE will schedule things
11926     appropriately for that particular chip, the compiler will not
11927     generate any code that does not run on the i386 without the
11928     `-march=CPU-TYPE' option being used.
11929
11930`-march=CPU-TYPE'
11931     Generate instructions for the machine type CPU-TYPE.  The choices
11932     for CPU-TYPE are the same as for `-mtune'.  Moreover, specifying
11933     `-march=CPU-TYPE' implies `-mtune=CPU-TYPE'.
11934
11935`-mcpu=CPU-TYPE'
11936     A deprecated synonym for `-mtune'.
11937
11938`-mfpmath=UNIT'
11939     Generate floating point arithmetics for selected unit UNIT.  The
11940     choices for UNIT are:
11941
11942    `387'
11943          Use the standard 387 floating point coprocessor present
11944          majority of chips and emulated otherwise.  Code compiled with
11945          this option will run almost everywhere.  The temporary
11946          results are computed in 80bit precision instead of precision
11947          specified by the type resulting in slightly different results
11948          compared to most of other chips.  See `-ffloat-store' for
11949          more detailed description.
11950
11951          This is the default choice for i386 compiler.
11952
11953    `sse'
11954          Use scalar floating point instructions present in the SSE
11955          instruction set.  This instruction set is supported by
11956          Pentium3 and newer chips, in the AMD line by Athlon-4,
11957          Athlon-xp and Athlon-mp chips.  The earlier version of SSE
11958          instruction set supports only single precision arithmetics,
11959          thus the double and extended precision arithmetics is still
11960          done using 387.  Later version, present only in Pentium4 and
11961          the future AMD x86-64 chips supports double precision
11962          arithmetics too.
11963
11964          For the i386 compiler, you need to use `-march=CPU-TYPE',
11965          `-msse' or `-msse2' switches to enable SSE extensions and
11966          make this option effective.  For the x86-64 compiler, these
11967          extensions are enabled by default.
11968
11969          The resulting code should be considerably faster in the
11970          majority of cases and avoid the numerical instability
11971          problems of 387 code, but may break some existing code that
11972          expects temporaries to be 80bit.
11973
11974          This is the default choice for the x86-64 compiler.
11975
11976    `sse,387'
11977    `sse+387'
11978    `both'
11979          Attempt to utilize both instruction sets at once.  This
11980          effectively double the amount of available registers and on
11981          chips with separate execution units for 387 and SSE the
11982          execution resources too.  Use this option with care, as it is
11983          still experimental, because the GCC register allocator does
11984          not model separate functional units well resulting in
11985          instable performance.
11986
11987`-masm=DIALECT'
11988     Output asm instructions using selected DIALECT.  Supported choices
11989     are `intel' or `att' (the default one).  Darwin does not support
11990     `intel'.
11991
11992`-mieee-fp'
11993`-mno-ieee-fp'
11994     Control whether or not the compiler uses IEEE floating point
11995     comparisons.  These handle correctly the case where the result of a
11996     comparison is unordered.
11997
11998`-msoft-float'
11999     Generate output containing library calls for floating point.
12000     *Warning:* the requisite libraries are not part of GCC.  Normally
12001     the facilities of the machine's usual C compiler are used, but
12002     this can't be done directly in cross-compilation.  You must make
12003     your own arrangements to provide suitable library functions for
12004     cross-compilation.
12005
12006     On machines where a function returns floating point results in the
12007     80387 register stack, some floating point opcodes may be emitted
12008     even if `-msoft-float' is used.
12009
12010`-mno-fp-ret-in-387'
12011     Do not use the FPU registers for return values of functions.
12012
12013     The usual calling convention has functions return values of types
12014     `float' and `double' in an FPU register, even if there is no FPU.
12015     The idea is that the operating system should emulate an FPU.
12016
12017     The option `-mno-fp-ret-in-387' causes such values to be returned
12018     in ordinary CPU registers instead.
12019
12020`-mno-fancy-math-387'
12021     Some 387 emulators do not support the `sin', `cos' and `sqrt'
12022     instructions for the 387.  Specify this option to avoid generating
12023     those instructions.  This option is the default on FreeBSD,
12024     OpenBSD and NetBSD.  This option is overridden when `-march'
12025     indicates that the target CPU will always have an FPU and so the
12026     instruction will not need emulation.  As of revision 2.6.1, these
12027     instructions are not generated unless you also use the
12028     `-funsafe-math-optimizations' switch.
12029
12030`-malign-double'
12031`-mno-align-double'
12032     Control whether GCC aligns `double', `long double', and `long
12033     long' variables on a two word boundary or a one word boundary.
12034     Aligning `double' variables on a two word boundary will produce
12035     code that runs somewhat faster on a `Pentium' at the expense of
12036     more memory.
12037
12038     On x86-64, `-malign-double' is enabled by default.
12039
12040     *Warning:* if you use the `-malign-double' switch, structures
12041     containing the above types will be aligned differently than the
12042     published application binary interface specifications for the 386
12043     and will not be binary compatible with structures in code compiled
12044     without that switch.
12045
12046`-m96bit-long-double'
12047`-m128bit-long-double'
12048     These switches control the size of `long double' type.  The i386
12049     application binary interface specifies the size to be 96 bits, so
12050     `-m96bit-long-double' is the default in 32 bit mode.
12051
12052     Modern architectures (Pentium and newer) would prefer `long double'
12053     to be aligned to an 8 or 16 byte boundary.  In arrays or structures
12054     conforming to the ABI, this would not be possible.  So specifying a
12055     `-m128bit-long-double' will align `long double' to a 16 byte
12056     boundary by padding the `long double' with an additional 32 bit
12057     zero.
12058
12059     In the x86-64 compiler, `-m128bit-long-double' is the default
12060     choice as its ABI specifies that `long double' is to be aligned on
12061     16 byte boundary.
12062
12063     Notice that neither of these options enable any extra precision
12064     over the x87 standard of 80 bits for a `long double'.
12065
12066     *Warning:* if you override the default value for your target ABI,
12067     the structures and arrays containing `long double' variables will
12068     change their size as well as function calling convention for
12069     function taking `long double' will be modified.  Hence they will
12070     not be binary compatible with arrays or structures in code
12071     compiled without that switch.
12072
12073`-mlarge-data-threshold=NUMBER'
12074     When `-mcmodel=medium' is specified, the data greater than
12075     THRESHOLD are placed in large data section.  This value must be the
12076     same across all object linked into the binary and defaults to
12077     65535.
12078
12079`-mrtd'
12080     Use a different function-calling convention, in which functions
12081     that take a fixed number of arguments return with the `ret' NUM
12082     instruction, which pops their arguments while returning.  This
12083     saves one instruction in the caller since there is no need to pop
12084     the arguments there.
12085
12086     You can specify that an individual function is called with this
12087     calling sequence with the function attribute `stdcall'.  You can
12088     also override the `-mrtd' option by using the function attribute
12089     `cdecl'.  *Note Function Attributes::.
12090
12091     *Warning:* this calling convention is incompatible with the one
12092     normally used on Unix, so you cannot use it if you need to call
12093     libraries compiled with the Unix compiler.
12094
12095     Also, you must provide function prototypes for all functions that
12096     take variable numbers of arguments (including `printf'); otherwise
12097     incorrect code will be generated for calls to those functions.
12098
12099     In addition, seriously incorrect code will result if you call a
12100     function with too many arguments.  (Normally, extra arguments are
12101     harmlessly ignored.)
12102
12103`-mregparm=NUM'
12104     Control how many registers are used to pass integer arguments.  By
12105     default, no registers are used to pass arguments, and at most 3
12106     registers can be used.  You can control this behavior for a
12107     specific function by using the function attribute `regparm'.
12108     *Note Function Attributes::.
12109
12110     *Warning:* if you use this switch, and NUM is nonzero, then you
12111     must build all modules with the same value, including any
12112     libraries.  This includes the system libraries and startup modules.
12113
12114`-msseregparm'
12115     Use SSE register passing conventions for float and double arguments
12116     and return values.  You can control this behavior for a specific
12117     function by using the function attribute `sseregparm'.  *Note
12118     Function Attributes::.
12119
12120     *Warning:* if you use this switch then you must build all modules
12121     with the same value, including any libraries.  This includes the
12122     system libraries and startup modules.
12123
12124`-mvect8-ret-in-mem'
12125     Return 8-byte vectors in memory instead of MMX registers.  This is
12126     the default on Solaris 8 and 9 and VxWorks to match the ABI of the
12127     Sun Studio compilers until version 12.  Later compiler versions
12128     (starting with Studio 12 Update 1) follow the ABI used by other
12129     x86 targets, which is the default on Solaris 10 and later.  _Only_
12130     use this option if you need to remain compatible with existing
12131     code produced by those previous compiler versions or older
12132     versions of GCC.
12133
12134`-mpc32'
12135`-mpc64'
12136`-mpc80'
12137     Set 80387 floating-point precision to 32, 64 or 80 bits.  When
12138     `-mpc32' is specified, the significands of results of
12139     floating-point operations are rounded to 24 bits (single
12140     precision); `-mpc64' rounds the significands of results of
12141     floating-point operations to 53 bits (double precision) and
12142     `-mpc80' rounds the significands of results of floating-point
12143     operations to 64 bits (extended double precision), which is the
12144     default.  When this option is used, floating-point operations in
12145     higher precisions are not available to the programmer without
12146     setting the FPU control word explicitly.
12147
12148     Setting the rounding of floating-point operations to less than the
12149     default 80 bits can speed some programs by 2% or more.  Note that
12150     some mathematical libraries assume that extended precision (80
12151     bit) floating-point operations are enabled by default; routines in
12152     such libraries could suffer significant loss of accuracy,
12153     typically through so-called "catastrophic cancellation", when this
12154     option is used to set the precision to less than extended
12155     precision.
12156
12157`-mstackrealign'
12158     Realign the stack at entry.  On the Intel x86, the `-mstackrealign'
12159     option will generate an alternate prologue and epilogue that
12160     realigns the runtime stack if necessary.  This supports mixing
12161     legacy codes that keep a 4-byte aligned stack with modern codes
12162     that keep a 16-byte stack for SSE compatibility.  See also the
12163     attribute `force_align_arg_pointer', applicable to individual
12164     functions.
12165
12166`-mpreferred-stack-boundary=NUM'
12167     Attempt to keep the stack boundary aligned to a 2 raised to NUM
12168     byte boundary.  If `-mpreferred-stack-boundary' is not specified,
12169     the default is 4 (16 bytes or 128 bits).
12170
12171`-mincoming-stack-boundary=NUM'
12172     Assume the incoming stack is aligned to a 2 raised to NUM byte
12173     boundary.  If `-mincoming-stack-boundary' is not specified, the
12174     one specified by `-mpreferred-stack-boundary' will be used.
12175
12176     On Pentium and PentiumPro, `double' and `long double' values
12177     should be aligned to an 8 byte boundary (see `-malign-double') or
12178     suffer significant run time performance penalties.  On Pentium
12179     III, the Streaming SIMD Extension (SSE) data type `__m128' may not
12180     work properly if it is not 16 byte aligned.
12181
12182     To ensure proper alignment of this values on the stack, the stack
12183     boundary must be as aligned as that required by any value stored
12184     on the stack.  Further, every function must be generated such that
12185     it keeps the stack aligned.  Thus calling a function compiled with
12186     a higher preferred stack boundary from a function compiled with a
12187     lower preferred stack boundary will most likely misalign the
12188     stack.  It is recommended that libraries that use callbacks always
12189     use the default setting.
12190
12191     This extra alignment does consume extra stack space, and generally
12192     increases code size.  Code that is sensitive to stack space usage,
12193     such as embedded systems and operating system kernels, may want to
12194     reduce the preferred alignment to `-mpreferred-stack-boundary=2'.
12195
12196`-mmmx'
12197`-mno-mmx'
12198`-msse'
12199`-mno-sse'
12200`-msse2'
12201`-mno-sse2'
12202`-msse3'
12203`-mno-sse3'
12204`-mssse3'
12205`-mno-ssse3'
12206`-msse4.1'
12207`-mno-sse4.1'
12208`-msse4.2'
12209`-mno-sse4.2'
12210`-msse4'
12211`-mno-sse4'
12212`-mavx'
12213`-mno-avx'
12214`-maes'
12215`-mno-aes'
12216`-mpclmul'
12217`-mno-pclmul'
12218`-mfsgsbase'
12219`-mno-fsgsbase'
12220`-mrdrnd'
12221`-mno-rdrnd'
12222`-mf16c'
12223`-mno-f16c'
12224`-msse4a'
12225`-mno-sse4a'
12226`-mfma4'
12227`-mno-fma4'
12228`-mxop'
12229`-mno-xop'
12230`-mlwp'
12231`-mno-lwp'
12232`-m3dnow'
12233`-mno-3dnow'
12234`-mpopcnt'
12235`-mno-popcnt'
12236`-mabm'
12237`-mno-abm'
12238`-mbmi'
12239`-mno-bmi'
12240`-mtbm'
12241`-mno-tbm'
12242     These switches enable or disable the use of instructions in the
12243     MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, AVX, AES, PCLMUL, FSGSBASE,
12244     RDRND, F16C, SSE4A, FMA4, XOP, LWP, ABM, BMI, or 3DNow! extended
12245     instruction sets.  These extensions are also available as built-in
12246     functions: see *note X86 Built-in Functions::, for details of the
12247     functions enabled and disabled by these switches.
12248
12249     To have SSE/SSE2 instructions generated automatically from
12250     floating-point code (as opposed to 387 instructions), see
12251     `-mfpmath=sse'.
12252
12253     GCC depresses SSEx instructions when `-mavx' is used. Instead, it
12254     generates new AVX instructions or AVX equivalence for all SSEx
12255     instructions when needed.
12256
12257     These options will enable GCC to use these extended instructions in
12258     generated code, even without `-mfpmath=sse'.  Applications which
12259     perform runtime CPU detection must compile separate files for each
12260     supported architecture, using the appropriate flags.  In
12261     particular, the file containing the CPU detection code should be
12262     compiled without these options.
12263
12264`-mfused-madd'
12265`-mno-fused-madd'
12266     Do (don't) generate code that uses the fused multiply/add or
12267     multiply/subtract instructions.  The default is to use these
12268     instructions.
12269
12270`-mcld'
12271     This option instructs GCC to emit a `cld' instruction in the
12272     prologue of functions that use string instructions.  String
12273     instructions depend on the DF flag to select between autoincrement
12274     or autodecrement mode.  While the ABI specifies the DF flag to be
12275     cleared on function entry, some operating systems violate this
12276     specification by not clearing the DF flag in their exception
12277     dispatchers.  The exception handler can be invoked with the DF flag
12278     set which leads to wrong direction mode, when string instructions
12279     are used.  This option can be enabled by default on 32-bit x86
12280     targets by configuring GCC with the `--enable-cld' configure
12281     option.  Generation of `cld' instructions can be suppressed with
12282     the `-mno-cld' compiler option in this case.
12283
12284`-mvzeroupper'
12285     This option instructs GCC to emit a `vzeroupper' instruction
12286     before a transfer of control flow out of the function to minimize
12287     AVX to SSE transition penalty as well as remove unnecessary
12288     zeroupper intrinsics.
12289
12290`-mcx16'
12291     This option will enable GCC to use CMPXCHG16B instruction in
12292     generated code.  CMPXCHG16B allows for atomic operations on
12293     128-bit double quadword (or oword) data types.  This is useful for
12294     high resolution counters that could be updated by multiple
12295     processors (or cores).  This instruction is generated as part of
12296     atomic built-in functions: see *note Atomic Builtins:: for details.
12297
12298`-msahf'
12299     This option will enable GCC to use SAHF instruction in generated
12300     64-bit code.  Early Intel CPUs with Intel 64 lacked LAHF and SAHF
12301     instructions supported by AMD64 until introduction of Pentium 4 G1
12302     step in December 2005.  LAHF and SAHF are load and store
12303     instructions, respectively, for certain status flags.  In 64-bit
12304     mode, SAHF instruction is used to optimize `fmod', `drem' or
12305     `remainder' built-in functions: see *note Other Builtins:: for
12306     details.
12307
12308`-mmovbe'
12309     This option will enable GCC to use movbe instruction to implement
12310     `__builtin_bswap32' and `__builtin_bswap64'.
12311
12312`-mcrc32'
12313     This option will enable built-in functions,
12314     `__builtin_ia32_crc32qi', `__builtin_ia32_crc32hi'.
12315     `__builtin_ia32_crc32si' and `__builtin_ia32_crc32di' to generate
12316     the crc32 machine instruction.
12317
12318`-mrecip'
12319     This option will enable GCC to use RCPSS and RSQRTSS instructions
12320     (and their vectorized variants RCPPS and RSQRTPS) with an
12321     additional Newton-Raphson step to increase precision instead of
12322     DIVSS and SQRTSS (and their vectorized variants) for single
12323     precision floating point arguments.  These instructions are
12324     generated only when `-funsafe-math-optimizations' is enabled
12325     together with `-finite-math-only' and `-fno-trapping-math'.  Note
12326     that while the throughput of the sequence is higher than the
12327     throughput of the non-reciprocal instruction, the precision of the
12328     sequence can be decreased by up to 2 ulp (i.e. the inverse of 1.0
12329     equals 0.99999994).
12330
12331     Note that GCC implements 1.0f/sqrtf(x) in terms of RSQRTSS (or
12332     RSQRTPS) already with `-ffast-math' (or the above option
12333     combination), and doesn't need `-mrecip'.
12334
12335`-mveclibabi=TYPE'
12336     Specifies the ABI type to use for vectorizing intrinsics using an
12337     external library.  Supported types are `svml' for the Intel short
12338     vector math library and `acml' for the AMD math core library style
12339     of interfacing.  GCC will currently emit calls to `vmldExp2',
12340     `vmldLn2', `vmldLog102', `vmldLog102', `vmldPow2', `vmldTanh2',
12341     `vmldTan2', `vmldAtan2', `vmldAtanh2', `vmldCbrt2', `vmldSinh2',
12342     `vmldSin2', `vmldAsinh2', `vmldAsin2', `vmldCosh2', `vmldCos2',
12343     `vmldAcosh2', `vmldAcos2', `vmlsExp4', `vmlsLn4', `vmlsLog104',
12344     `vmlsLog104', `vmlsPow4', `vmlsTanh4', `vmlsTan4', `vmlsAtan4',
12345     `vmlsAtanh4', `vmlsCbrt4', `vmlsSinh4', `vmlsSin4', `vmlsAsinh4',
12346     `vmlsAsin4', `vmlsCosh4', `vmlsCos4', `vmlsAcosh4' and `vmlsAcos4'
12347     for corresponding function type when `-mveclibabi=svml' is used
12348     and `__vrd2_sin', `__vrd2_cos', `__vrd2_exp', `__vrd2_log',
12349     `__vrd2_log2', `__vrd2_log10', `__vrs4_sinf', `__vrs4_cosf',
12350     `__vrs4_expf', `__vrs4_logf', `__vrs4_log2f', `__vrs4_log10f' and
12351     `__vrs4_powf' for corresponding function type when
12352     `-mveclibabi=acml' is used. Both `-ftree-vectorize' and
12353     `-funsafe-math-optimizations' have to be enabled. A SVML or ACML
12354     ABI compatible library will have to be specified at link time.
12355
12356`-mabi=NAME'
12357     Generate code for the specified calling convention.  Permissible
12358     values are: `sysv' for the ABI used on GNU/Linux and other systems
12359     and `ms' for the Microsoft ABI.  The default is to use the
12360     Microsoft ABI when targeting Windows.  On all other systems, the
12361     default is the SYSV ABI.  You can control this behavior for a
12362     specific function by using the function attribute
12363     `ms_abi'/`sysv_abi'.  *Note Function Attributes::.
12364
12365`-mpush-args'
12366`-mno-push-args'
12367     Use PUSH operations to store outgoing parameters.  This method is
12368     shorter and usually equally fast as method using SUB/MOV
12369     operations and is enabled by default.  In some cases disabling it
12370     may improve performance because of improved scheduling and reduced
12371     dependencies.
12372
12373`-maccumulate-outgoing-args'
12374     If enabled, the maximum amount of space required for outgoing
12375     arguments will be computed in the function prologue.  This is
12376     faster on most modern CPUs because of reduced dependencies,
12377     improved scheduling and reduced stack usage when preferred stack
12378     boundary is not equal to 2.  The drawback is a notable increase in
12379     code size.  This switch implies `-mno-push-args'.
12380
12381`-mthreads'
12382     Support thread-safe exception handling on `Mingw32'.  Code that
12383     relies on thread-safe exception handling must compile and link all
12384     code with the `-mthreads' option.  When compiling, `-mthreads'
12385     defines `-D_MT'; when linking, it links in a special thread helper
12386     library `-lmingwthrd' which cleans up per thread exception
12387     handling data.
12388
12389`-mno-align-stringops'
12390     Do not align destination of inlined string operations.  This
12391     switch reduces code size and improves performance in case the
12392     destination is already aligned, but GCC doesn't know about it.
12393
12394`-minline-all-stringops'
12395     By default GCC inlines string operations only when destination is
12396     known to be aligned at least to 4 byte boundary.  This enables
12397     more inlining, increase code size, but may improve performance of
12398     code that depends on fast memcpy, strlen and memset for short
12399     lengths.
12400
12401`-minline-stringops-dynamically'
12402     For string operation of unknown size, inline runtime checks so for
12403     small blocks inline code is used, while for large blocks library
12404     call is used.
12405
12406`-mstringop-strategy=ALG'
12407     Overwrite internal decision heuristic about particular algorithm
12408     to inline string operation with.  The allowed values are
12409     `rep_byte', `rep_4byte', `rep_8byte' for expanding using i386
12410     `rep' prefix of specified size, `byte_loop', `loop',
12411     `unrolled_loop' for expanding inline loop, `libcall' for always
12412     expanding library call.
12413
12414`-momit-leaf-frame-pointer'
12415     Don't keep the frame pointer in a register for leaf functions.
12416     This avoids the instructions to save, set up and restore frame
12417     pointers and makes an extra register available in leaf functions.
12418     The option `-fomit-frame-pointer' removes the frame pointer for
12419     all functions which might make debugging harder.
12420
12421`-mtls-direct-seg-refs'
12422`-mno-tls-direct-seg-refs'
12423     Controls whether TLS variables may be accessed with offsets from
12424     the TLS segment register (`%gs' for 32-bit, `%fs' for 64-bit), or
12425     whether the thread base pointer must be added.  Whether or not this
12426     is legal depends on the operating system, and whether it maps the
12427     segment to cover the entire TLS area.
12428
12429     For systems that use GNU libc, the default is on.
12430
12431`-msse2avx'
12432`-mno-sse2avx'
12433     Specify that the assembler should encode SSE instructions with VEX
12434     prefix.  The option `-mavx' turns this on by default.
12435
12436`-mfentry'
12437`-mno-fentry'
12438     If profiling is active `-pg' put the profiling counter call before
12439     prologue.  Note: On x86 architectures the attribute
12440     `ms_hook_prologue' isn't possible at the moment for `-mfentry' and
12441     `-pg'.
12442
12443`-m8bit-idiv'
12444`-mno-8bit-idiv'
12445     On some processors, like Intel Atom, 8bit unsigned integer divide
12446     is much faster than 32bit/64bit integer divide.  This option will
12447     generate a runt-time check.  If both dividend and divisor are
12448     within range of 0 to 255, 8bit unsigned integer divide will be
12449     used instead of 32bit/64bit integer divide.
12450
12451
12452 These `-m' switches are supported in addition to the above on AMD
12453x86-64 processors in 64-bit environments.
12454
12455`-m32'
12456`-m64'
12457     Generate code for a 32-bit or 64-bit environment.  The 32-bit
12458     environment sets int, long and pointer to 32 bits and generates
12459     code that runs on any i386 system.  The 64-bit environment sets
12460     int to 32 bits and long and pointer to 64 bits and generates code
12461     for AMD's x86-64 architecture. For darwin only the -m64 option
12462     turns off the `-fno-pic' and `-mdynamic-no-pic' options.
12463
12464`-mno-red-zone'
12465     Do not use a so called red zone for x86-64 code.  The red zone is
12466     mandated by the x86-64 ABI, it is a 128-byte area beyond the
12467     location of the stack pointer that will not be modified by signal
12468     or interrupt handlers and therefore can be used for temporary data
12469     without adjusting the stack pointer.  The flag `-mno-red-zone'
12470     disables this red zone.
12471
12472`-mcmodel=small'
12473     Generate code for the small code model: the program and its
12474     symbols must be linked in the lower 2 GB of the address space.
12475     Pointers are 64 bits.  Programs can be statically or dynamically
12476     linked.  This is the default code model.
12477
12478`-mcmodel=kernel'
12479     Generate code for the kernel code model.  The kernel runs in the
12480     negative 2 GB of the address space.  This model has to be used for
12481     Linux kernel code.
12482
12483`-mcmodel=medium'
12484     Generate code for the medium model: The program is linked in the
12485     lower 2 GB of the address space.  Small symbols are also placed
12486     there.  Symbols with sizes larger than `-mlarge-data-threshold'
12487     are put into large data or bss sections and can be located above
12488     2GB.  Programs can be statically or dynamically linked.
12489
12490`-mcmodel=large'
12491     Generate code for the large model: This model makes no assumptions
12492     about addresses and sizes of sections.
12493
12494
12495File: gcc.info,  Node: i386 and x86-64 Windows Options,  Next: IA-64 Options,  Prev: i386 and x86-64 Options,  Up: Submodel Options
12496
124973.17.16 i386 and x86-64 Windows Options
12498---------------------------------------
12499
12500These additional options are available for Windows targets:
12501
12502`-mconsole'
12503     This option is available for Cygwin and MinGW targets.  It
12504     specifies that a console application is to be generated, by
12505     instructing the linker to set the PE header subsystem type
12506     required for console applications.  This is the default behavior
12507     for Cygwin and MinGW targets.
12508
12509`-mdll'
12510     This option is available for Cygwin and MinGW targets.  It
12511     specifies that a DLL - a dynamic link library - is to be
12512     generated, enabling the selection of the required runtime startup
12513     object and entry point.
12514
12515`-mnop-fun-dllimport'
12516     This option is available for Cygwin and MinGW targets.  It
12517     specifies that the dllimport attribute should be ignored.
12518
12519`-mthread'
12520     This option is available for MinGW targets. It specifies that
12521     MinGW-specific thread support is to be used.
12522
12523`-municode'
12524     This option is available for mingw-w64 targets.  It specifies that
12525     the UNICODE macro is getting pre-defined and that the unicode
12526     capable runtime startup code is chosen.
12527
12528`-mwin32'
12529     This option is available for Cygwin and MinGW targets.  It
12530     specifies that the typical Windows pre-defined macros are to be
12531     set in the pre-processor, but does not influence the choice of
12532     runtime library/startup code.
12533
12534`-mwindows'
12535     This option is available for Cygwin and MinGW targets.  It
12536     specifies that a GUI application is to be generated by instructing
12537     the linker to set the PE header subsystem type appropriately.
12538
12539`-fno-set-stack-executable'
12540     This option is available for MinGW targets. It specifies that the
12541     executable flag for stack used by nested functions isn't set. This
12542     is necessary for binaries running in kernel mode of Windows, as
12543     there the user32 API, which is used to set executable privileges,
12544     isn't available.
12545
12546`-mpe-aligned-commons'
12547     This option is available for Cygwin and MinGW targets.  It
12548     specifies that the GNU extension to the PE file format that
12549     permits the correct alignment of COMMON variables should be used
12550     when generating code.  It will be enabled by default if GCC
12551     detects that the target assembler found during configuration
12552     supports the feature.
12553
12554 See also under *note i386 and x86-64 Options:: for standard options.
12555
12556
12557File: gcc.info,  Node: IA-64 Options,  Next: IA-64/VMS Options,  Prev: i386 and x86-64 Windows Options,  Up: Submodel Options
12558
125593.17.17 IA-64 Options
12560---------------------
12561
12562These are the `-m' options defined for the Intel IA-64 architecture.
12563
12564`-mbig-endian'
12565     Generate code for a big endian target.  This is the default for
12566     HP-UX.
12567
12568`-mlittle-endian'
12569     Generate code for a little endian target.  This is the default for
12570     AIX5 and GNU/Linux.
12571
12572`-mgnu-as'
12573`-mno-gnu-as'
12574     Generate (or don't) code for the GNU assembler.  This is the
12575     default.
12576
12577`-mgnu-ld'
12578`-mno-gnu-ld'
12579     Generate (or don't) code for the GNU linker.  This is the default.
12580
12581`-mno-pic'
12582     Generate code that does not use a global pointer register.  The
12583     result is not position independent code, and violates the IA-64
12584     ABI.
12585
12586`-mvolatile-asm-stop'
12587`-mno-volatile-asm-stop'
12588     Generate (or don't) a stop bit immediately before and after
12589     volatile asm statements.
12590
12591`-mregister-names'
12592`-mno-register-names'
12593     Generate (or don't) `in', `loc', and `out' register names for the
12594     stacked registers.  This may make assembler output more readable.
12595
12596`-mno-sdata'
12597`-msdata'
12598     Disable (or enable) optimizations that use the small data section.
12599     This may be useful for working around optimizer bugs.
12600
12601`-mconstant-gp'
12602     Generate code that uses a single constant global pointer value.
12603     This is useful when compiling kernel code.
12604
12605`-mauto-pic'
12606     Generate code that is self-relocatable.  This implies
12607     `-mconstant-gp'.  This is useful when compiling firmware code.
12608
12609`-minline-float-divide-min-latency'
12610     Generate code for inline divides of floating point values using
12611     the minimum latency algorithm.
12612
12613`-minline-float-divide-max-throughput'
12614     Generate code for inline divides of floating point values using
12615     the maximum throughput algorithm.
12616
12617`-mno-inline-float-divide'
12618     Do not generate inline code for divides of floating point values.
12619
12620`-minline-int-divide-min-latency'
12621     Generate code for inline divides of integer values using the
12622     minimum latency algorithm.
12623
12624`-minline-int-divide-max-throughput'
12625     Generate code for inline divides of integer values using the
12626     maximum throughput algorithm.
12627
12628`-mno-inline-int-divide'
12629     Do not generate inline code for divides of integer values.
12630
12631`-minline-sqrt-min-latency'
12632     Generate code for inline square roots using the minimum latency
12633     algorithm.
12634
12635`-minline-sqrt-max-throughput'
12636     Generate code for inline square roots using the maximum throughput
12637     algorithm.
12638
12639`-mno-inline-sqrt'
12640     Do not generate inline code for sqrt.
12641
12642`-mfused-madd'
12643`-mno-fused-madd'
12644     Do (don't) generate code that uses the fused multiply/add or
12645     multiply/subtract instructions.  The default is to use these
12646     instructions.
12647
12648`-mno-dwarf2-asm'
12649`-mdwarf2-asm'
12650     Don't (or do) generate assembler code for the DWARF2 line number
12651     debugging info.  This may be useful when not using the GNU
12652     assembler.
12653
12654`-mearly-stop-bits'
12655`-mno-early-stop-bits'
12656     Allow stop bits to be placed earlier than immediately preceding the
12657     instruction that triggered the stop bit.  This can improve
12658     instruction scheduling, but does not always do so.
12659
12660`-mfixed-range=REGISTER-RANGE'
12661     Generate code treating the given register range as fixed registers.
12662     A fixed register is one that the register allocator can not use.
12663     This is useful when compiling kernel code.  A register range is
12664     specified as two registers separated by a dash.  Multiple register
12665     ranges can be specified separated by a comma.
12666
12667`-mtls-size=TLS-SIZE'
12668     Specify bit size of immediate TLS offsets.  Valid values are 14,
12669     22, and 64.
12670
12671`-mtune=CPU-TYPE'
12672     Tune the instruction scheduling for a particular CPU, Valid values
12673     are itanium, itanium1, merced, itanium2, and mckinley.
12674
12675`-milp32'
12676`-mlp64'
12677     Generate code for a 32-bit or 64-bit environment.  The 32-bit
12678     environment sets int, long and pointer to 32 bits.  The 64-bit
12679     environment sets int to 32 bits and long and pointer to 64 bits.
12680     These are HP-UX specific flags.
12681
12682`-mno-sched-br-data-spec'
12683`-msched-br-data-spec'
12684     (Dis/En)able data speculative scheduling before reload.  This will
12685     result in generation of the ld.a instructions and the
12686     corresponding check instructions (ld.c / chk.a).  The default is
12687     'disable'.
12688
12689`-msched-ar-data-spec'
12690`-mno-sched-ar-data-spec'
12691     (En/Dis)able data speculative scheduling after reload.  This will
12692     result in generation of the ld.a instructions and the
12693     corresponding check instructions (ld.c / chk.a).  The default is
12694     'enable'.
12695
12696`-mno-sched-control-spec'
12697`-msched-control-spec'
12698     (Dis/En)able control speculative scheduling.  This feature is
12699     available only during region scheduling (i.e. before reload).
12700     This will result in generation of the ld.s instructions and the
12701     corresponding check instructions chk.s .  The default is 'disable'.
12702
12703`-msched-br-in-data-spec'
12704`-mno-sched-br-in-data-spec'
12705     (En/Dis)able speculative scheduling of the instructions that are
12706     dependent on the data speculative loads before reload.  This is
12707     effective only with `-msched-br-data-spec' enabled.  The default
12708     is 'enable'.
12709
12710`-msched-ar-in-data-spec'
12711`-mno-sched-ar-in-data-spec'
12712     (En/Dis)able speculative scheduling of the instructions that are
12713     dependent on the data speculative loads after reload.  This is
12714     effective only with `-msched-ar-data-spec' enabled.  The default
12715     is 'enable'.
12716
12717`-msched-in-control-spec'
12718`-mno-sched-in-control-spec'
12719     (En/Dis)able speculative scheduling of the instructions that are
12720     dependent on the control speculative loads.  This is effective
12721     only with `-msched-control-spec' enabled.  The default is 'enable'.
12722
12723`-mno-sched-prefer-non-data-spec-insns'
12724`-msched-prefer-non-data-spec-insns'
12725     If enabled, data speculative instructions will be chosen for
12726     schedule only if there are no other choices at the moment.  This
12727     will make the use of the data speculation much more conservative.
12728     The default is 'disable'.
12729
12730`-mno-sched-prefer-non-control-spec-insns'
12731`-msched-prefer-non-control-spec-insns'
12732     If enabled, control speculative instructions will be chosen for
12733     schedule only if there are no other choices at the moment.  This
12734     will make the use of the control speculation much more
12735     conservative.  The default is 'disable'.
12736
12737`-mno-sched-count-spec-in-critical-path'
12738`-msched-count-spec-in-critical-path'
12739     If enabled, speculative dependencies will be considered during
12740     computation of the instructions priorities.  This will make the
12741     use of the speculation a bit more conservative.  The default is
12742     'disable'.
12743
12744`-msched-spec-ldc'
12745     Use a simple data speculation check.  This option is on by default.
12746
12747`-msched-control-spec-ldc'
12748     Use a simple check for control speculation.  This option is on by
12749     default.
12750
12751`-msched-stop-bits-after-every-cycle'
12752     Place a stop bit after every cycle when scheduling.  This option
12753     is on by default.
12754
12755`-msched-fp-mem-deps-zero-cost'
12756     Assume that floating-point stores and loads are not likely to
12757     cause a conflict when placed into the same instruction group.
12758     This option is disabled by default.
12759
12760`-msel-sched-dont-check-control-spec'
12761     Generate checks for control speculation in selective scheduling.
12762     This flag is disabled by default.
12763
12764`-msched-max-memory-insns=MAX-INSNS'
12765     Limit on the number of memory insns per instruction group, giving
12766     lower priority to subsequent memory insns attempting to schedule
12767     in the same instruction group. Frequently useful to prevent cache
12768     bank conflicts.  The default value is 1.
12769
12770`-msched-max-memory-insns-hard-limit'
12771     Disallow more than `msched-max-memory-insns' in instruction group.
12772     Otherwise, limit is `soft' meaning that we would prefer non-memory
12773     operations when limit is reached but may still schedule memory
12774     operations.
12775
12776
12777
12778File: gcc.info,  Node: IA-64/VMS Options,  Next: LM32 Options,  Prev: IA-64 Options,  Up: Submodel Options
12779
127803.17.18 IA-64/VMS Options
12781-------------------------
12782
12783These `-m' options are defined for the IA-64/VMS implementations:
12784
12785`-mvms-return-codes'
12786     Return VMS condition codes from main. The default is to return
12787     POSIX style condition (e.g. error) codes.
12788
12789`-mdebug-main=PREFIX'
12790     Flag the first routine whose name starts with PREFIX as the main
12791     routine for the debugger.
12792
12793`-mmalloc64'
12794     Default to 64bit memory allocation routines.
12795
12796
12797File: gcc.info,  Node: LM32 Options,  Next: M32C Options,  Prev: IA-64/VMS Options,  Up: Submodel Options
12798
127993.17.19 LM32 Options
12800--------------------
12801
12802These `-m' options are defined for the Lattice Mico32 architecture:
12803
12804`-mbarrel-shift-enabled'
12805     Enable barrel-shift instructions.
12806
12807`-mdivide-enabled'
12808     Enable divide and modulus instructions.
12809
12810`-mmultiply-enabled'
12811     Enable multiply instructions.
12812
12813`-msign-extend-enabled'
12814     Enable sign extend instructions.
12815
12816`-muser-enabled'
12817     Enable user-defined instructions.
12818
12819
12820
12821File: gcc.info,  Node: M32C Options,  Next: M32R/D Options,  Prev: LM32 Options,  Up: Submodel Options
12822
128233.17.20 M32C Options
12824--------------------
12825
12826`-mcpu=NAME'
12827     Select the CPU for which code is generated.  NAME may be one of
12828     `r8c' for the R8C/Tiny series, `m16c' for the M16C (up to /60)
12829     series, `m32cm' for the M16C/80 series, or `m32c' for the M32C/80
12830     series.
12831
12832`-msim'
12833     Specifies that the program will be run on the simulator.  This
12834     causes an alternate runtime library to be linked in which
12835     supports, for example, file I/O.  You must not use this option
12836     when generating programs that will run on real hardware; you must
12837     provide your own runtime library for whatever I/O functions are
12838     needed.
12839
12840`-memregs=NUMBER'
12841     Specifies the number of memory-based pseudo-registers GCC will use
12842     during code generation.  These pseudo-registers will be used like
12843     real registers, so there is a tradeoff between GCC's ability to
12844     fit the code into available registers, and the performance penalty
12845     of using memory instead of registers.  Note that all modules in a
12846     program must be compiled with the same value for this option.
12847     Because of that, you must not use this option with the default
12848     runtime libraries gcc builds.
12849
12850
12851
12852File: gcc.info,  Node: M32R/D Options,  Next: M680x0 Options,  Prev: M32C Options,  Up: Submodel Options
12853
128543.17.21 M32R/D Options
12855----------------------
12856
12857These `-m' options are defined for Renesas M32R/D architectures:
12858
12859`-m32r2'
12860     Generate code for the M32R/2.
12861
12862`-m32rx'
12863     Generate code for the M32R/X.
12864
12865`-m32r'
12866     Generate code for the M32R.  This is the default.
12867
12868`-mmodel=small'
12869     Assume all objects live in the lower 16MB of memory (so that their
12870     addresses can be loaded with the `ld24' instruction), and assume
12871     all subroutines are reachable with the `bl' instruction.  This is
12872     the default.
12873
12874     The addressability of a particular object can be set with the
12875     `model' attribute.
12876
12877`-mmodel=medium'
12878     Assume objects may be anywhere in the 32-bit address space (the
12879     compiler will generate `seth/add3' instructions to load their
12880     addresses), and assume all subroutines are reachable with the `bl'
12881     instruction.
12882
12883`-mmodel=large'
12884     Assume objects may be anywhere in the 32-bit address space (the
12885     compiler will generate `seth/add3' instructions to load their
12886     addresses), and assume subroutines may not be reachable with the
12887     `bl' instruction (the compiler will generate the much slower
12888     `seth/add3/jl' instruction sequence).
12889
12890`-msdata=none'
12891     Disable use of the small data area.  Variables will be put into
12892     one of `.data', `bss', or `.rodata' (unless the `section'
12893     attribute has been specified).  This is the default.
12894
12895     The small data area consists of sections `.sdata' and `.sbss'.
12896     Objects may be explicitly put in the small data area with the
12897     `section' attribute using one of these sections.
12898
12899`-msdata=sdata'
12900     Put small global and static data in the small data area, but do not
12901     generate special code to reference them.
12902
12903`-msdata=use'
12904     Put small global and static data in the small data area, and
12905     generate special instructions to reference them.
12906
12907`-G NUM'
12908     Put global and static objects less than or equal to NUM bytes into
12909     the small data or bss sections instead of the normal data or bss
12910     sections.  The default value of NUM is 8.  The `-msdata' option
12911     must be set to one of `sdata' or `use' for this option to have any
12912     effect.
12913
12914     All modules should be compiled with the same `-G NUM' value.
12915     Compiling with different values of NUM may or may not work; if it
12916     doesn't the linker will give an error message--incorrect code will
12917     not be generated.
12918
12919`-mdebug'
12920     Makes the M32R specific code in the compiler display some
12921     statistics that might help in debugging programs.
12922
12923`-malign-loops'
12924     Align all loops to a 32-byte boundary.
12925
12926`-mno-align-loops'
12927     Do not enforce a 32-byte alignment for loops.  This is the default.
12928
12929`-missue-rate=NUMBER'
12930     Issue NUMBER instructions per cycle.  NUMBER can only be 1 or 2.
12931
12932`-mbranch-cost=NUMBER'
12933     NUMBER can only be 1 or 2.  If it is 1 then branches will be
12934     preferred over conditional code, if it is 2, then the opposite will
12935     apply.
12936
12937`-mflush-trap=NUMBER'
12938     Specifies the trap number to use to flush the cache.  The default
12939     is 12.  Valid numbers are between 0 and 15 inclusive.
12940
12941`-mno-flush-trap'
12942     Specifies that the cache cannot be flushed by using a trap.
12943
12944`-mflush-func=NAME'
12945     Specifies the name of the operating system function to call to
12946     flush the cache.  The default is __flush_cache_, but a function
12947     call will only be used if a trap is not available.
12948
12949`-mno-flush-func'
12950     Indicates that there is no OS function for flushing the cache.
12951
12952
12953
12954File: gcc.info,  Node: M680x0 Options,  Next: M68hc1x Options,  Prev: M32R/D Options,  Up: Submodel Options
12955
129563.17.22 M680x0 Options
12957----------------------
12958
12959These are the `-m' options defined for M680x0 and ColdFire processors.
12960The default settings depend on which architecture was selected when the
12961compiler was configured; the defaults for the most common choices are
12962given below.
12963
12964`-march=ARCH'
12965     Generate code for a specific M680x0 or ColdFire instruction set
12966     architecture.  Permissible values of ARCH for M680x0 architectures
12967     are: `68000', `68010', `68020', `68030', `68040', `68060' and
12968     `cpu32'.  ColdFire architectures are selected according to
12969     Freescale's ISA classification and the permissible values are:
12970     `isaa', `isaaplus', `isab' and `isac'.
12971
12972     gcc defines a macro `__mcfARCH__' whenever it is generating code
12973     for a ColdFire target.  The ARCH in this macro is one of the
12974     `-march' arguments given above.
12975
12976     When used together, `-march' and `-mtune' select code that runs on
12977     a family of similar processors but that is optimized for a
12978     particular microarchitecture.
12979
12980`-mcpu=CPU'
12981     Generate code for a specific M680x0 or ColdFire processor.  The
12982     M680x0 CPUs are: `68000', `68010', `68020', `68030', `68040',
12983     `68060', `68302', `68332' and `cpu32'.  The ColdFire CPUs are
12984     given by the table below, which also classifies the CPUs into
12985     families:
12986
12987     *Family*      *`-mcpu' arguments*
12988     `51'          `51' `51ac' `51ag' `51cn' `51em' `51je' `51jf' `51jg'
12989                   `51jm' `51mm' `51qe' `51qm'
12990     `5206'        `5202' `5204' `5206'
12991     `5206e'       `5206e'
12992     `5208'        `5207' `5208'
12993     `5211a'       `5210a' `5211a'
12994     `5213'        `5211' `5212' `5213'
12995     `5216'        `5214' `5216'
12996     `52235'       `52230' `52231' `52232' `52233' `52234' `52235'
12997     `5225'        `5224' `5225'
12998     `52259'       `52252' `52254' `52255' `52256' `52258' `52259'
12999     `5235'        `5232' `5233' `5234' `5235' `523x'
13000     `5249'        `5249'
13001     `5250'        `5250'
13002     `5271'        `5270' `5271'
13003     `5272'        `5272'
13004     `5275'        `5274' `5275'
13005     `5282'        `5280' `5281' `5282' `528x'
13006     `53017'       `53011' `53012' `53013' `53014' `53015' `53016'
13007                   `53017'
13008     `5307'        `5307'
13009     `5329'        `5327' `5328' `5329' `532x'
13010     `5373'        `5372' `5373' `537x'
13011     `5407'        `5407'
13012     `5475'        `5470' `5471' `5472' `5473' `5474' `5475' `547x'
13013                   `5480' `5481' `5482' `5483' `5484' `5485'
13014
13015     `-mcpu=CPU' overrides `-march=ARCH' if ARCH is compatible with
13016     CPU.  Other combinations of `-mcpu' and `-march' are rejected.
13017
13018     gcc defines the macro `__mcf_cpu_CPU' when ColdFire target CPU is
13019     selected.  It also defines `__mcf_family_FAMILY', where the value
13020     of FAMILY is given by the table above.
13021
13022`-mtune=TUNE'
13023     Tune the code for a particular microarchitecture, within the
13024     constraints set by `-march' and `-mcpu'.  The M680x0
13025     microarchitectures are: `68000', `68010', `68020', `68030',
13026     `68040', `68060' and `cpu32'.  The ColdFire microarchitectures
13027     are: `cfv1', `cfv2', `cfv3', `cfv4' and `cfv4e'.
13028
13029     You can also use `-mtune=68020-40' for code that needs to run
13030     relatively well on 68020, 68030 and 68040 targets.
13031     `-mtune=68020-60' is similar but includes 68060 targets as well.
13032     These two options select the same tuning decisions as `-m68020-40'
13033     and `-m68020-60' respectively.
13034
13035     gcc defines the macros `__mcARCH' and `__mcARCH__' when tuning for
13036     680x0 architecture ARCH.  It also defines `mcARCH' unless either
13037     `-ansi' or a non-GNU `-std' option is used.  If gcc is tuning for
13038     a range of architectures, as selected by `-mtune=68020-40' or
13039     `-mtune=68020-60', it defines the macros for every architecture in
13040     the range.
13041
13042     gcc also defines the macro `__mUARCH__' when tuning for ColdFire
13043     microarchitecture UARCH, where UARCH is one of the arguments given
13044     above.
13045
13046`-m68000'
13047`-mc68000'
13048     Generate output for a 68000.  This is the default when the
13049     compiler is configured for 68000-based systems.  It is equivalent
13050     to `-march=68000'.
13051
13052     Use this option for microcontrollers with a 68000 or EC000 core,
13053     including the 68008, 68302, 68306, 68307, 68322, 68328 and 68356.
13054
13055`-m68010'
13056     Generate output for a 68010.  This is the default when the
13057     compiler is configured for 68010-based systems.  It is equivalent
13058     to `-march=68010'.
13059
13060`-m68020'
13061`-mc68020'
13062     Generate output for a 68020.  This is the default when the
13063     compiler is configured for 68020-based systems.  It is equivalent
13064     to `-march=68020'.
13065
13066`-m68030'
13067     Generate output for a 68030.  This is the default when the
13068     compiler is configured for 68030-based systems.  It is equivalent
13069     to `-march=68030'.
13070
13071`-m68040'
13072     Generate output for a 68040.  This is the default when the
13073     compiler is configured for 68040-based systems.  It is equivalent
13074     to `-march=68040'.
13075
13076     This option inhibits the use of 68881/68882 instructions that have
13077     to be emulated by software on the 68040.  Use this option if your
13078     68040 does not have code to emulate those instructions.
13079
13080`-m68060'
13081     Generate output for a 68060.  This is the default when the
13082     compiler is configured for 68060-based systems.  It is equivalent
13083     to `-march=68060'.
13084
13085     This option inhibits the use of 68020 and 68881/68882 instructions
13086     that have to be emulated by software on the 68060.  Use this
13087     option if your 68060 does not have code to emulate those
13088     instructions.
13089
13090`-mcpu32'
13091     Generate output for a CPU32.  This is the default when the
13092     compiler is configured for CPU32-based systems.  It is equivalent
13093     to `-march=cpu32'.
13094
13095     Use this option for microcontrollers with a CPU32 or CPU32+ core,
13096     including the 68330, 68331, 68332, 68333, 68334, 68336, 68340,
13097     68341, 68349 and 68360.
13098
13099`-m5200'
13100     Generate output for a 520X ColdFire CPU.  This is the default when
13101     the compiler is configured for 520X-based systems.  It is
13102     equivalent to `-mcpu=5206', and is now deprecated in favor of that
13103     option.
13104
13105     Use this option for microcontroller with a 5200 core, including
13106     the MCF5202, MCF5203, MCF5204 and MCF5206.
13107
13108`-m5206e'
13109     Generate output for a 5206e ColdFire CPU.  The option is now
13110     deprecated in favor of the equivalent `-mcpu=5206e'.
13111
13112`-m528x'
13113     Generate output for a member of the ColdFire 528X family.  The
13114     option is now deprecated in favor of the equivalent `-mcpu=528x'.
13115
13116`-m5307'
13117     Generate output for a ColdFire 5307 CPU.  The option is now
13118     deprecated in favor of the equivalent `-mcpu=5307'.
13119
13120`-m5407'
13121     Generate output for a ColdFire 5407 CPU.  The option is now
13122     deprecated in favor of the equivalent `-mcpu=5407'.
13123
13124`-mcfv4e'
13125     Generate output for a ColdFire V4e family CPU (e.g. 547x/548x).
13126     This includes use of hardware floating point instructions.  The
13127     option is equivalent to `-mcpu=547x', and is now deprecated in
13128     favor of that option.
13129
13130`-m68020-40'
13131     Generate output for a 68040, without using any of the new
13132     instructions.  This results in code which can run relatively
13133     efficiently on either a 68020/68881 or a 68030 or a 68040.  The
13134     generated code does use the 68881 instructions that are emulated
13135     on the 68040.
13136
13137     The option is equivalent to `-march=68020' `-mtune=68020-40'.
13138
13139`-m68020-60'
13140     Generate output for a 68060, without using any of the new
13141     instructions.  This results in code which can run relatively
13142     efficiently on either a 68020/68881 or a 68030 or a 68040.  The
13143     generated code does use the 68881 instructions that are emulated
13144     on the 68060.
13145
13146     The option is equivalent to `-march=68020' `-mtune=68020-60'.
13147
13148`-mhard-float'
13149`-m68881'
13150     Generate floating-point instructions.  This is the default for
13151     68020 and above, and for ColdFire devices that have an FPU.  It
13152     defines the macro `__HAVE_68881__' on M680x0 targets and
13153     `__mcffpu__' on ColdFire targets.
13154
13155`-msoft-float'
13156     Do not generate floating-point instructions; use library calls
13157     instead.  This is the default for 68000, 68010, and 68832 targets.
13158     It is also the default for ColdFire devices that have no FPU.
13159
13160`-mdiv'
13161`-mno-div'
13162     Generate (do not generate) ColdFire hardware divide and remainder
13163     instructions.  If `-march' is used without `-mcpu', the default is
13164     "on" for ColdFire architectures and "off" for M680x0
13165     architectures.  Otherwise, the default is taken from the target CPU
13166     (either the default CPU, or the one specified by `-mcpu').  For
13167     example, the default is "off" for `-mcpu=5206' and "on" for
13168     `-mcpu=5206e'.
13169
13170     gcc defines the macro `__mcfhwdiv__' when this option is enabled.
13171
13172`-mshort'
13173     Consider type `int' to be 16 bits wide, like `short int'.
13174     Additionally, parameters passed on the stack are also aligned to a
13175     16-bit boundary even on targets whose API mandates promotion to
13176     32-bit.
13177
13178`-mno-short'
13179     Do not consider type `int' to be 16 bits wide.  This is the
13180     default.
13181
13182`-mnobitfield'
13183`-mno-bitfield'
13184     Do not use the bit-field instructions.  The `-m68000', `-mcpu32'
13185     and `-m5200' options imply `-mnobitfield'.
13186
13187`-mbitfield'
13188     Do use the bit-field instructions.  The `-m68020' option implies
13189     `-mbitfield'.  This is the default if you use a configuration
13190     designed for a 68020.
13191
13192`-mrtd'
13193     Use a different function-calling convention, in which functions
13194     that take a fixed number of arguments return with the `rtd'
13195     instruction, which pops their arguments while returning.  This
13196     saves one instruction in the caller since there is no need to pop
13197     the arguments there.
13198
13199     This calling convention is incompatible with the one normally used
13200     on Unix, so you cannot use it if you need to call libraries
13201     compiled with the Unix compiler.
13202
13203     Also, you must provide function prototypes for all functions that
13204     take variable numbers of arguments (including `printf'); otherwise
13205     incorrect code will be generated for calls to those functions.
13206
13207     In addition, seriously incorrect code will result if you call a
13208     function with too many arguments.  (Normally, extra arguments are
13209     harmlessly ignored.)
13210
13211     The `rtd' instruction is supported by the 68010, 68020, 68030,
13212     68040, 68060 and CPU32 processors, but not by the 68000 or 5200.
13213
13214`-mno-rtd'
13215     Do not use the calling conventions selected by `-mrtd'.  This is
13216     the default.
13217
13218`-malign-int'
13219`-mno-align-int'
13220     Control whether GCC aligns `int', `long', `long long', `float',
13221     `double', and `long double' variables on a 32-bit boundary
13222     (`-malign-int') or a 16-bit boundary (`-mno-align-int').  Aligning
13223     variables on 32-bit boundaries produces code that runs somewhat
13224     faster on processors with 32-bit busses at the expense of more
13225     memory.
13226
13227     *Warning:* if you use the `-malign-int' switch, GCC will align
13228     structures containing the above types  differently than most
13229     published application binary interface specifications for the m68k.
13230
13231`-mpcrel'
13232     Use the pc-relative addressing mode of the 68000 directly, instead
13233     of using a global offset table.  At present, this option implies
13234     `-fpic', allowing at most a 16-bit offset for pc-relative
13235     addressing.  `-fPIC' is not presently supported with `-mpcrel',
13236     though this could be supported for 68020 and higher processors.
13237
13238`-mno-strict-align'
13239`-mstrict-align'
13240     Do not (do) assume that unaligned memory references will be
13241     handled by the system.
13242
13243`-msep-data'
13244     Generate code that allows the data segment to be located in a
13245     different area of memory from the text segment.  This allows for
13246     execute in place in an environment without virtual memory
13247     management.  This option implies `-fPIC'.
13248
13249`-mno-sep-data'
13250     Generate code that assumes that the data segment follows the text
13251     segment.  This is the default.
13252
13253`-mid-shared-library'
13254     Generate code that supports shared libraries via the library ID
13255     method.  This allows for execute in place and shared libraries in
13256     an environment without virtual memory management.  This option
13257     implies `-fPIC'.
13258
13259`-mno-id-shared-library'
13260     Generate code that doesn't assume ID based shared libraries are
13261     being used.  This is the default.
13262
13263`-mshared-library-id=n'
13264     Specified the identification number of the ID based shared library
13265     being compiled.  Specifying a value of 0 will generate more
13266     compact code, specifying other values will force the allocation of
13267     that number to the current library but is no more space or time
13268     efficient than omitting this option.
13269
13270`-mxgot'
13271`-mno-xgot'
13272     When generating position-independent code for ColdFire, generate
13273     code that works if the GOT has more than 8192 entries.  This code
13274     is larger and slower than code generated without this option.  On
13275     M680x0 processors, this option is not needed; `-fPIC' suffices.
13276
13277     GCC normally uses a single instruction to load values from the GOT.
13278     While this is relatively efficient, it only works if the GOT is
13279     smaller than about 64k.  Anything larger causes the linker to
13280     report an error such as:
13281
13282          relocation truncated to fit: R_68K_GOT16O foobar
13283
13284     If this happens, you should recompile your code with `-mxgot'.  It
13285     should then work with very large GOTs.  However, code generated
13286     with `-mxgot' is less efficient, since it takes 4 instructions to
13287     fetch the value of a global symbol.
13288
13289     Note that some linkers, including newer versions of the GNU linker,
13290     can create multiple GOTs and sort GOT entries.  If you have such a
13291     linker, you should only need to use `-mxgot' when compiling a
13292     single object file that accesses more than 8192 GOT entries.  Very
13293     few do.
13294
13295     These options have no effect unless GCC is generating
13296     position-independent code.
13297
13298
13299
13300File: gcc.info,  Node: M68hc1x Options,  Next: MCore Options,  Prev: M680x0 Options,  Up: Submodel Options
13301
133023.17.23 M68hc1x Options
13303-----------------------
13304
13305These are the `-m' options defined for the 68hc11 and 68hc12
13306microcontrollers.  The default values for these options depends on
13307which style of microcontroller was selected when the compiler was
13308configured; the defaults for the most common choices are given below.
13309
13310`-m6811'
13311`-m68hc11'
13312     Generate output for a 68HC11.  This is the default when the
13313     compiler is configured for 68HC11-based systems.
13314
13315`-m6812'
13316`-m68hc12'
13317     Generate output for a 68HC12.  This is the default when the
13318     compiler is configured for 68HC12-based systems.
13319
13320`-m68S12'
13321`-m68hcs12'
13322     Generate output for a 68HCS12.
13323
13324`-mauto-incdec'
13325     Enable the use of 68HC12 pre and post auto-increment and
13326     auto-decrement addressing modes.
13327
13328`-minmax'
13329`-mnominmax'
13330     Enable the use of 68HC12 min and max instructions.
13331
13332`-mlong-calls'
13333`-mno-long-calls'
13334     Treat all calls as being far away (near).  If calls are assumed to
13335     be far away, the compiler will use the `call' instruction to call
13336     a function and the `rtc' instruction for returning.
13337
13338`-mshort'
13339     Consider type `int' to be 16 bits wide, like `short int'.
13340
13341`-msoft-reg-count=COUNT'
13342     Specify the number of pseudo-soft registers which are used for the
13343     code generation.  The maximum number is 32.  Using more pseudo-soft
13344     register may or may not result in better code depending on the
13345     program.  The default is 4 for 68HC11 and 2 for 68HC12.
13346
13347
13348
13349File: gcc.info,  Node: MCore Options,  Next: MeP Options,  Prev: M68hc1x Options,  Up: Submodel Options
13350
133513.17.24 MCore Options
13352---------------------
13353
13354These are the `-m' options defined for the Motorola M*Core processors.
13355
13356`-mhardlit'
13357`-mno-hardlit'
13358     Inline constants into the code stream if it can be done in two
13359     instructions or less.
13360
13361`-mdiv'
13362`-mno-div'
13363     Use the divide instruction.  (Enabled by default).
13364
13365`-mrelax-immediate'
13366`-mno-relax-immediate'
13367     Allow arbitrary sized immediates in bit operations.
13368
13369`-mwide-bitfields'
13370`-mno-wide-bitfields'
13371     Always treat bit-fields as int-sized.
13372
13373`-m4byte-functions'
13374`-mno-4byte-functions'
13375     Force all functions to be aligned to a four byte boundary.
13376
13377`-mcallgraph-data'
13378`-mno-callgraph-data'
13379     Emit callgraph information.
13380
13381`-mslow-bytes'
13382`-mno-slow-bytes'
13383     Prefer word access when reading byte quantities.
13384
13385`-mlittle-endian'
13386`-mbig-endian'
13387     Generate code for a little endian target.
13388
13389`-m210'
13390`-m340'
13391     Generate code for the 210 processor.
13392
13393`-mno-lsim'
13394     Assume that run-time support has been provided and so omit the
13395     simulator library (`libsim.a)' from the linker command line.
13396
13397`-mstack-increment=SIZE'
13398     Set the maximum amount for a single stack increment operation.
13399     Large values can increase the speed of programs which contain
13400     functions that need a large amount of stack space, but they can
13401     also trigger a segmentation fault if the stack is extended too
13402     much.  The default value is 0x1000.
13403
13404
13405
13406File: gcc.info,  Node: MeP Options,  Next: MicroBlaze Options,  Prev: MCore Options,  Up: Submodel Options
13407
134083.17.25 MeP Options
13409-------------------
13410
13411`-mabsdiff'
13412     Enables the `abs' instruction, which is the absolute difference
13413     between two registers.
13414
13415`-mall-opts'
13416     Enables all the optional instructions - average, multiply, divide,
13417     bit operations, leading zero, absolute difference, min/max, clip,
13418     and saturation.
13419
13420`-maverage'
13421     Enables the `ave' instruction, which computes the average of two
13422     registers.
13423
13424`-mbased=N'
13425     Variables of size N bytes or smaller will be placed in the
13426     `.based' section by default.  Based variables use the `$tp'
13427     register as a base register, and there is a 128 byte limit to the
13428     `.based' section.
13429
13430`-mbitops'
13431     Enables the bit operation instructions - bit test (`btstm'), set
13432     (`bsetm'), clear (`bclrm'), invert (`bnotm'), and test-and-set
13433     (`tas').
13434
13435`-mc=NAME'
13436     Selects which section constant data will be placed in.  NAME may
13437     be `tiny', `near', or `far'.
13438
13439`-mclip'
13440     Enables the `clip' instruction.  Note that `-mclip' is not useful
13441     unless you also provide `-mminmax'.
13442
13443`-mconfig=NAME'
13444     Selects one of the build-in core configurations.  Each MeP chip has
13445     one or more modules in it; each module has a core CPU and a
13446     variety of coprocessors, optional instructions, and peripherals.
13447     The `MeP-Integrator' tool, not part of GCC, provides these
13448     configurations through this option; using this option is the same
13449     as using all the corresponding command line options.  The default
13450     configuration is `default'.
13451
13452`-mcop'
13453     Enables the coprocessor instructions.  By default, this is a 32-bit
13454     coprocessor.  Note that the coprocessor is normally enabled via the
13455     `-mconfig=' option.
13456
13457`-mcop32'
13458     Enables the 32-bit coprocessor's instructions.
13459
13460`-mcop64'
13461     Enables the 64-bit coprocessor's instructions.
13462
13463`-mivc2'
13464     Enables IVC2 scheduling.  IVC2 is a 64-bit VLIW coprocessor.
13465
13466`-mdc'
13467     Causes constant variables to be placed in the `.near' section.
13468
13469`-mdiv'
13470     Enables the `div' and `divu' instructions.
13471
13472`-meb'
13473     Generate big-endian code.
13474
13475`-mel'
13476     Generate little-endian code.
13477
13478`-mio-volatile'
13479     Tells the compiler that any variable marked with the `io'
13480     attribute is to be considered volatile.
13481
13482`-ml'
13483     Causes variables to be assigned to the `.far' section by default.
13484
13485`-mleadz'
13486     Enables the `leadz' (leading zero) instruction.
13487
13488`-mm'
13489     Causes variables to be assigned to the `.near' section by default.
13490
13491`-mminmax'
13492     Enables the `min' and `max' instructions.
13493
13494`-mmult'
13495     Enables the multiplication and multiply-accumulate instructions.
13496
13497`-mno-opts'
13498     Disables all the optional instructions enabled by `-mall-opts'.
13499
13500`-mrepeat'
13501     Enables the `repeat' and `erepeat' instructions, used for
13502     low-overhead looping.
13503
13504`-ms'
13505     Causes all variables to default to the `.tiny' section.  Note that
13506     there is a 65536 byte limit to this section.  Accesses to these
13507     variables use the `%gp' base register.
13508
13509`-msatur'
13510     Enables the saturation instructions.  Note that the compiler does
13511     not currently generate these itself, but this option is included
13512     for compatibility with other tools, like `as'.
13513
13514`-msdram'
13515     Link the SDRAM-based runtime instead of the default ROM-based
13516     runtime.
13517
13518`-msim'
13519     Link the simulator runtime libraries.
13520
13521`-msimnovec'
13522     Link the simulator runtime libraries, excluding built-in support
13523     for reset and exception vectors and tables.
13524
13525`-mtf'
13526     Causes all functions to default to the `.far' section.  Without
13527     this option, functions default to the `.near' section.
13528
13529`-mtiny=N'
13530     Variables that are N bytes or smaller will be allocated to the
13531     `.tiny' section.  These variables use the `$gp' base register.
13532     The default for this option is 4, but note that there's a 65536
13533     byte limit to the `.tiny' section.
13534
13535
13536
13537File: gcc.info,  Node: MicroBlaze Options,  Next: MIPS Options,  Prev: MeP Options,  Up: Submodel Options
13538
135393.17.26 MicroBlaze Options
13540--------------------------
13541
13542`-msoft-float'
13543     Use software emulation for floating point (default).
13544
13545`-mhard-float'
13546     Use hardware floating point instructions.
13547
13548`-mmemcpy'
13549     Do not optimize block moves, use `memcpy'.
13550
13551`-mno-clearbss'
13552     This option is deprecated.  Use `-fno-zero-initialized-in-bss'
13553     instead.
13554
13555`-mcpu=CPU-TYPE'
13556     Use features of and schedule code for given CPU.  Supported values
13557     are in the format `vX.YY.Z', where X is a major version, YY is the
13558     minor version, and Z is compatibility code.  Example values are
13559     `v3.00.a', `v4.00.b', `v5.00.a', `v5.00.b', `v5.00.b', `v6.00.a'.
13560
13561`-mxl-soft-mul'
13562     Use software multiply emulation (default).
13563
13564`-mxl-soft-div'
13565     Use software emulation for divides (default).
13566
13567`-mxl-barrel-shift'
13568     Use the hardware barrel shifter.
13569
13570`-mxl-pattern-compare'
13571     Use pattern compare instructions.
13572
13573`-msmall-divides'
13574     Use table lookup optimization for small signed integer divisions.
13575
13576`-mxl-stack-check'
13577     This option is deprecated.  Use -fstack-check instead.
13578
13579`-mxl-gp-opt'
13580     Use GP relative sdata/sbss sections.
13581
13582`-mxl-multiply-high'
13583     Use multiply high instructions for high part of 32x32 multiply.
13584
13585`-mxl-float-convert'
13586     Use hardware floating point conversion instructions.
13587
13588`-mxl-float-sqrt'
13589     Use hardware floating point square root instruction.
13590
13591`-mxl-mode-APP-MODEL'
13592     Select application model APP-MODEL.  Valid models are
13593    `executable'
13594          normal executable (default), uses startup code `crt0.o'.
13595
13596    `xmdstub'
13597          for use with Xilinx Microprocessor Debugger (XMD) based
13598          software intrusive debug agent called xmdstub. This uses
13599          startup file `crt1.o' and sets the start address of the
13600          program to be 0x800.
13601
13602    `bootstrap'
13603          for applications that are loaded using a bootloader.  This
13604          model uses startup file `crt2.o' which does not contain a
13605          processor reset vector handler. This is suitable for
13606          transferring control on a processor reset to the bootloader
13607          rather than the application.
13608
13609    `novectors'
13610          for applications that do not require any of the MicroBlaze
13611          vectors. This option may be useful for applications running
13612          within a monitoring application. This model uses `crt3.o' as
13613          a startup file.
13614
13615     Option `-xl-mode-APP-MODEL' is a deprecated alias for
13616     `-mxl-mode-APP-MODEL'.
13617
13618
13619
13620File: gcc.info,  Node: MIPS Options,  Next: MMIX Options,  Prev: MicroBlaze Options,  Up: Submodel Options
13621
136223.17.27 MIPS Options
13623--------------------
13624
13625`-EB'
13626     Generate big-endian code.
13627
13628`-EL'
13629     Generate little-endian code.  This is the default for `mips*el-*-*'
13630     configurations.
13631
13632`-march=ARCH'
13633     Generate code that will run on ARCH, which can be the name of a
13634     generic MIPS ISA, or the name of a particular processor.  The ISA
13635     names are: `mips1', `mips2', `mips3', `mips4', `mips32',
13636     `mips32r2', `mips64' and `mips64r2'.  The processor names are:
13637     `4kc', `4km', `4kp', `4ksc', `4kec', `4kem', `4kep', `4ksd',
13638     `5kc', `5kf', `20kc', `24kc', `24kf2_1', `24kf1_1', `24kec',
13639     `24kef2_1', `24kef1_1', `34kc', `34kf2_1', `34kf1_1', `74kc',
13640     `74kf2_1', `74kf1_1', `74kf3_2', `1004kc', `1004kf2_1',
13641     `1004kf1_1', `loongson2e', `loongson2f', `loongson3a', `m4k',
13642     `m14ke', `m14kec', `octeon', `orion', `r2000', `r3000', `r3900',
13643     `r4000', `r4400', `r4600', `r4650', `r6000', `r8000', `rm7000',
13644     `rm9000', `r10000', `r12000', `r14000', `r16000', `sb1', `sr71000',
13645     `vr4100', `vr4111', `vr4120', `vr4130', `vr4300', `vr5000',
13646     `vr5400', `vr5500' and `xlr'.  The special value `from-abi'
13647     selects the most compatible architecture for the selected ABI
13648     (that is, `mips1' for 32-bit ABIs and `mips3' for 64-bit ABIs).
13649
13650     Native Linux/GNU toolchains also support the value `native', which
13651     selects the best architecture option for the host processor.
13652     `-march=native' has no effect if GCC does not recognize the
13653     processor.
13654
13655     In processor names, a final `000' can be abbreviated as `k' (for
13656     example, `-march=r2k').  Prefixes are optional, and `vr' may be
13657     written `r'.
13658
13659     Names of the form `Nf2_1' refer to processors with FPUs clocked at
13660     half the rate of the core, names of the form `Nf1_1' refer to
13661     processors with FPUs clocked at the same rate as the core, and
13662     names of the form `Nf3_2' refer to processors with FPUs clocked a
13663     ratio of 3:2 with respect to the core.  For compatibility reasons,
13664     `Nf' is accepted as a synonym for `Nf2_1' while `Nx' and `Bfx' are
13665     accepted as synonyms for `Nf1_1'.
13666
13667     GCC defines two macros based on the value of this option.  The
13668     first is `_MIPS_ARCH', which gives the name of target
13669     architecture, as a string.  The second has the form
13670     `_MIPS_ARCH_FOO', where FOO is the capitalized value of
13671     `_MIPS_ARCH'.  For example, `-march=r2000' will set `_MIPS_ARCH'
13672     to `"r2000"' and define the macro `_MIPS_ARCH_R2000'.
13673
13674     Note that the `_MIPS_ARCH' macro uses the processor names given
13675     above.  In other words, it will have the full prefix and will not
13676     abbreviate `000' as `k'.  In the case of `from-abi', the macro
13677     names the resolved architecture (either `"mips1"' or `"mips3"').
13678     It names the default architecture when no `-march' option is given.
13679
13680`-mtune=ARCH'
13681     Optimize for ARCH.  Among other things, this option controls the
13682     way instructions are scheduled, and the perceived cost of
13683     arithmetic operations.  The list of ARCH values is the same as for
13684     `-march'.
13685
13686     When this option is not used, GCC will optimize for the processor
13687     specified by `-march'.  By using `-march' and `-mtune' together,
13688     it is possible to generate code that will run on a family of
13689     processors, but optimize the code for one particular member of
13690     that family.
13691
13692     `-mtune' defines the macros `_MIPS_TUNE' and `_MIPS_TUNE_FOO',
13693     which work in the same way as the `-march' ones described above.
13694
13695`-mips1'
13696     Equivalent to `-march=mips1'.
13697
13698`-mips2'
13699     Equivalent to `-march=mips2'.
13700
13701`-mips3'
13702     Equivalent to `-march=mips3'.
13703
13704`-mips4'
13705     Equivalent to `-march=mips4'.
13706
13707`-mips32'
13708     Equivalent to `-march=mips32'.
13709
13710`-mips32r2'
13711     Equivalent to `-march=mips32r2'.
13712
13713`-mips64'
13714     Equivalent to `-march=mips64'.
13715
13716`-mips64r2'
13717     Equivalent to `-march=mips64r2'.
13718
13719`-mips16'
13720`-mips16e'
13721`-mno-mips16'
13722     Generate (do not generate) MIPS16 code.  If GCC is targetting a
13723     MIPS32 or MIPS64 architecture, it will make use of the MIPS16e ASE.
13724     `-mips16e' is a deprecated alias for `-mips16'.
13725
13726     MIPS16 code generation can also be controlled on a per-function
13727     basis by means of `mips16' and `nomips16' attributes.  *Note
13728     Function Attributes::, for more information.
13729
13730`-mflip-mips16'
13731     Generate MIPS16 code on alternating functions.  This option is
13732     provided for regression testing of mixed MIPS16/non-MIPS16 code
13733     generation, and is not intended for ordinary use in compiling user
13734     code.
13735
13736`-minterlink-mips16'
13737`-mno-interlink-mips16'
13738     Require (do not require) that non-MIPS16 code be link-compatible
13739     with MIPS16 code.
13740
13741     For example, non-MIPS16 code cannot jump directly to MIPS16 code;
13742     it must either use a call or an indirect jump.
13743     `-minterlink-mips16' therefore disables direct jumps unless GCC
13744     knows that the target of the jump is not MIPS16.
13745
13746`-mabi=32'
13747`-mabi=o64'
13748`-mabi=n32'
13749`-mabi=64'
13750`-mabi=eabi'
13751     Generate code for the given ABI.
13752
13753     Note that the EABI has a 32-bit and a 64-bit variant.  GCC normally
13754     generates 64-bit code when you select a 64-bit architecture, but
13755     you can use `-mgp32' to get 32-bit code instead.
13756
13757     For information about the O64 ABI, see
13758     `http://gcc.gnu.org/projects/mipso64-abi.html'.
13759
13760     GCC supports a variant of the o32 ABI in which floating-point
13761     registers are 64 rather than 32 bits wide.  You can select this
13762     combination with `-mabi=32' `-mfp64'.  This ABI relies on the
13763     `mthc1' and `mfhc1' instructions and is therefore only supported
13764     for MIPS32R2 processors.
13765
13766     The register assignments for arguments and return values remain the
13767     same, but each scalar value is passed in a single 64-bit register
13768     rather than a pair of 32-bit registers.  For example, scalar
13769     floating-point values are returned in `$f0' only, not a
13770     `$f0'/`$f1' pair.  The set of call-saved registers also remains
13771     the same, but all 64 bits are saved.
13772
13773`-mabicalls'
13774`-mno-abicalls'
13775     Generate (do not generate) code that is suitable for SVR4-style
13776     dynamic objects.  `-mabicalls' is the default for SVR4-based
13777     systems.
13778
13779`-mshared'
13780`-mno-shared'
13781     Generate (do not generate) code that is fully position-independent,
13782     and that can therefore be linked into shared libraries.  This
13783     option only affects `-mabicalls'.
13784
13785     All `-mabicalls' code has traditionally been position-independent,
13786     regardless of options like `-fPIC' and `-fpic'.  However, as an
13787     extension, the GNU toolchain allows executables to use absolute
13788     accesses for locally-binding symbols.  It can also use shorter GP
13789     initialization sequences and generate direct calls to
13790     locally-defined functions.  This mode is selected by `-mno-shared'.
13791
13792     `-mno-shared' depends on binutils 2.16 or higher and generates
13793     objects that can only be linked by the GNU linker.  However, the
13794     option does not affect the ABI of the final executable; it only
13795     affects the ABI of relocatable objects.  Using `-mno-shared' will
13796     generally make executables both smaller and quicker.
13797
13798     `-mshared' is the default.
13799
13800`-mplt'
13801`-mno-plt'
13802     Assume (do not assume) that the static and dynamic linkers support
13803     PLTs and copy relocations.  This option only affects `-mno-shared
13804     -mabicalls'.  For the n64 ABI, this option has no effect without
13805     `-msym32'.
13806
13807     You can make `-mplt' the default by configuring GCC with
13808     `--with-mips-plt'.  The default is `-mno-plt' otherwise.
13809
13810`-mxgot'
13811`-mno-xgot'
13812     Lift (do not lift) the usual restrictions on the size of the global
13813     offset table.
13814
13815     GCC normally uses a single instruction to load values from the GOT.
13816     While this is relatively efficient, it will only work if the GOT
13817     is smaller than about 64k.  Anything larger will cause the linker
13818     to report an error such as:
13819
13820          relocation truncated to fit: R_MIPS_GOT16 foobar
13821
13822     If this happens, you should recompile your code with `-mxgot'.  It
13823     should then work with very large GOTs, although it will also be
13824     less efficient, since it will take three instructions to fetch the
13825     value of a global symbol.
13826
13827     Note that some linkers can create multiple GOTs.  If you have such
13828     a linker, you should only need to use `-mxgot' when a single object
13829     file accesses more than 64k's worth of GOT entries.  Very few do.
13830
13831     These options have no effect unless GCC is generating position
13832     independent code.
13833
13834`-mgp32'
13835     Assume that general-purpose registers are 32 bits wide.
13836
13837`-mgp64'
13838     Assume that general-purpose registers are 64 bits wide.
13839
13840`-mfp32'
13841     Assume that floating-point registers are 32 bits wide.
13842
13843`-mfp64'
13844     Assume that floating-point registers are 64 bits wide.
13845
13846`-mhard-float'
13847     Use floating-point coprocessor instructions.
13848
13849`-msoft-float'
13850     Do not use floating-point coprocessor instructions.  Implement
13851     floating-point calculations using library calls instead.
13852
13853`-msingle-float'
13854     Assume that the floating-point coprocessor only supports
13855     single-precision operations.
13856
13857`-mdouble-float'
13858     Assume that the floating-point coprocessor supports
13859     double-precision operations.  This is the default.
13860
13861`-mllsc'
13862`-mno-llsc'
13863     Use (do not use) `ll', `sc', and `sync' instructions to implement
13864     atomic memory built-in functions.  When neither option is
13865     specified, GCC will use the instructions if the target architecture
13866     supports them.
13867
13868     `-mllsc' is useful if the runtime environment can emulate the
13869     instructions and `-mno-llsc' can be useful when compiling for
13870     nonstandard ISAs.  You can make either option the default by
13871     configuring GCC with `--with-llsc' and `--without-llsc'
13872     respectively.  `--with-llsc' is the default for some
13873     configurations; see the installation documentation for details.
13874
13875`-mdsp'
13876`-mno-dsp'
13877     Use (do not use) revision 1 of the MIPS DSP ASE.  *Note MIPS DSP
13878     Built-in Functions::.  This option defines the preprocessor macro
13879     `__mips_dsp'.  It also defines `__mips_dsp_rev' to 1.
13880
13881`-mdspr2'
13882`-mno-dspr2'
13883     Use (do not use) revision 2 of the MIPS DSP ASE.  *Note MIPS DSP
13884     Built-in Functions::.  This option defines the preprocessor macros
13885     `__mips_dsp' and `__mips_dspr2'.  It also defines `__mips_dsp_rev'
13886     to 2.
13887
13888`-msmartmips'
13889`-mno-smartmips'
13890     Use (do not use) the MIPS SmartMIPS ASE.
13891
13892`-mpaired-single'
13893`-mno-paired-single'
13894     Use (do not use) paired-single floating-point instructions.  *Note
13895     MIPS Paired-Single Support::.  This option requires hardware
13896     floating-point support to be enabled.
13897
13898`-mdmx'
13899`-mno-mdmx'
13900     Use (do not use) MIPS Digital Media Extension instructions.  This
13901     option can only be used when generating 64-bit code and requires
13902     hardware floating-point support to be enabled.
13903
13904`-mips3d'
13905`-mno-mips3d'
13906     Use (do not use) the MIPS-3D ASE.  *Note MIPS-3D Built-in
13907     Functions::.  The option `-mips3d' implies `-mpaired-single'.
13908
13909`-mmt'
13910`-mno-mt'
13911     Use (do not use) MT Multithreading instructions.
13912
13913`-mlong64'
13914     Force `long' types to be 64 bits wide.  See `-mlong32' for an
13915     explanation of the default and the way that the pointer size is
13916     determined.
13917
13918`-mlong32'
13919     Force `long', `int', and pointer types to be 32 bits wide.
13920
13921     The default size of `int's, `long's and pointers depends on the
13922     ABI.  All the supported ABIs use 32-bit `int's.  The n64 ABI uses
13923     64-bit `long's, as does the 64-bit EABI; the others use 32-bit
13924     `long's.  Pointers are the same size as `long's, or the same size
13925     as integer registers, whichever is smaller.
13926
13927`-msym32'
13928`-mno-sym32'
13929     Assume (do not assume) that all symbols have 32-bit values,
13930     regardless of the selected ABI.  This option is useful in
13931     combination with `-mabi=64' and `-mno-abicalls' because it allows
13932     GCC to generate shorter and faster references to symbolic
13933     addresses.
13934
13935`-G NUM'
13936     Put definitions of externally-visible data in a small data section
13937     if that data is no bigger than NUM bytes.  GCC can then access the
13938     data more efficiently; see `-mgpopt' for details.
13939
13940     The default `-G' option depends on the configuration.
13941
13942`-mlocal-sdata'
13943`-mno-local-sdata'
13944     Extend (do not extend) the `-G' behavior to local data too, such
13945     as to static variables in C.  `-mlocal-sdata' is the default for
13946     all configurations.
13947
13948     If the linker complains that an application is using too much
13949     small data, you might want to try rebuilding the less
13950     performance-critical parts with `-mno-local-sdata'.  You might
13951     also want to build large libraries with `-mno-local-sdata', so
13952     that the libraries leave more room for the main program.
13953
13954`-mextern-sdata'
13955`-mno-extern-sdata'
13956     Assume (do not assume) that externally-defined data will be in a
13957     small data section if that data is within the `-G' limit.
13958     `-mextern-sdata' is the default for all configurations.
13959
13960     If you compile a module MOD with `-mextern-sdata' `-G NUM'
13961     `-mgpopt', and MOD references a variable VAR that is no bigger
13962     than NUM bytes, you must make sure that VAR is placed in a small
13963     data section.  If VAR is defined by another module, you must
13964     either compile that module with a high-enough `-G' setting or
13965     attach a `section' attribute to VAR's definition.  If VAR is
13966     common, you must link the application with a high-enough `-G'
13967     setting.
13968
13969     The easiest way of satisfying these restrictions is to compile and
13970     link every module with the same `-G' option.  However, you may
13971     wish to build a library that supports several different small data
13972     limits.  You can do this by compiling the library with the highest
13973     supported `-G' setting and additionally using `-mno-extern-sdata'
13974     to stop the library from making assumptions about
13975     externally-defined data.
13976
13977`-mgpopt'
13978`-mno-gpopt'
13979     Use (do not use) GP-relative accesses for symbols that are known
13980     to be in a small data section; see `-G', `-mlocal-sdata' and
13981     `-mextern-sdata'.  `-mgpopt' is the default for all configurations.
13982
13983     `-mno-gpopt' is useful for cases where the `$gp' register might
13984     not hold the value of `_gp'.  For example, if the code is part of
13985     a library that might be used in a boot monitor, programs that call
13986     boot monitor routines will pass an unknown value in `$gp'.  (In
13987     such situations, the boot monitor itself would usually be compiled
13988     with `-G0'.)
13989
13990     `-mno-gpopt' implies `-mno-local-sdata' and `-mno-extern-sdata'.
13991
13992`-membedded-data'
13993`-mno-embedded-data'
13994     Allocate variables to the read-only data section first if
13995     possible, then next in the small data section if possible,
13996     otherwise in data.  This gives slightly slower code than the
13997     default, but reduces the amount of RAM required when executing,
13998     and thus may be preferred for some embedded systems.
13999
14000`-muninit-const-in-rodata'
14001`-mno-uninit-const-in-rodata'
14002     Put uninitialized `const' variables in the read-only data section.
14003     This option is only meaningful in conjunction with
14004     `-membedded-data'.
14005
14006`-mcode-readable=SETTING'
14007     Specify whether GCC may generate code that reads from executable
14008     sections.  There are three possible settings:
14009
14010    `-mcode-readable=yes'
14011          Instructions may freely access executable sections.  This is
14012          the default setting.
14013
14014    `-mcode-readable=pcrel'
14015          MIPS16 PC-relative load instructions can access executable
14016          sections, but other instructions must not do so.  This option
14017          is useful on 4KSc and 4KSd processors when the code TLBs have
14018          the Read Inhibit bit set.  It is also useful on processors
14019          that can be configured to have a dual instruction/data SRAM
14020          interface and that, like the M4K, automatically redirect
14021          PC-relative loads to the instruction RAM.
14022
14023    `-mcode-readable=no'
14024          Instructions must not access executable sections.  This
14025          option can be useful on targets that are configured to have a
14026          dual instruction/data SRAM interface but that (unlike the
14027          M4K) do not automatically redirect PC-relative loads to the
14028          instruction RAM.
14029
14030`-msplit-addresses'
14031`-mno-split-addresses'
14032     Enable (disable) use of the `%hi()' and `%lo()' assembler
14033     relocation operators.  This option has been superseded by
14034     `-mexplicit-relocs' but is retained for backwards compatibility.
14035
14036`-mexplicit-relocs'
14037`-mno-explicit-relocs'
14038     Use (do not use) assembler relocation operators when dealing with
14039     symbolic addresses.  The alternative, selected by
14040     `-mno-explicit-relocs', is to use assembler macros instead.
14041
14042     `-mexplicit-relocs' is the default if GCC was configured to use an
14043     assembler that supports relocation operators.
14044
14045`-mcheck-zero-division'
14046`-mno-check-zero-division'
14047     Trap (do not trap) on integer division by zero.
14048
14049     The default is `-mcheck-zero-division'.
14050
14051`-mdivide-traps'
14052`-mdivide-breaks'
14053     MIPS systems check for division by zero by generating either a
14054     conditional trap or a break instruction.  Using traps results in
14055     smaller code, but is only supported on MIPS II and later.  Also,
14056     some versions of the Linux kernel have a bug that prevents trap
14057     from generating the proper signal (`SIGFPE').  Use
14058     `-mdivide-traps' to allow conditional traps on architectures that
14059     support them and `-mdivide-breaks' to force the use of breaks.
14060
14061     The default is usually `-mdivide-traps', but this can be
14062     overridden at configure time using `--with-divide=breaks'.
14063     Divide-by-zero checks can be completely disabled using
14064     `-mno-check-zero-division'.
14065
14066`-mmemcpy'
14067`-mno-memcpy'
14068     Force (do not force) the use of `memcpy()' for non-trivial block
14069     moves.  The default is `-mno-memcpy', which allows GCC to inline
14070     most constant-sized copies.
14071
14072`-mlong-calls'
14073`-mno-long-calls'
14074     Disable (do not disable) use of the `jal' instruction.  Calling
14075     functions using `jal' is more efficient but requires the caller
14076     and callee to be in the same 256 megabyte segment.
14077
14078     This option has no effect on abicalls code.  The default is
14079     `-mno-long-calls'.
14080
14081`-mmad'
14082`-mno-mad'
14083     Enable (disable) use of the `mad', `madu' and `mul' instructions,
14084     as provided by the R4650 ISA.
14085
14086`-mfused-madd'
14087`-mno-fused-madd'
14088     Enable (disable) use of the floating point multiply-accumulate
14089     instructions, when they are available.  The default is
14090     `-mfused-madd'.
14091
14092     On the R8000 CPU when multiply-accumulate instructions are used,
14093     the intermediate product is calculated to infinite precision and
14094     is not subject to the FCSR Flush to Zero bit.  This may be
14095     undesirable in some circumstances.  On other processors the result
14096     is numerically identical to the equivalent computation using
14097     separate multiply, add, subtract and negate instructions.
14098
14099`-nocpp'
14100     Tell the MIPS assembler to not run its preprocessor over user
14101     assembler files (with a `.s' suffix) when assembling them.
14102
14103`-mfix-24k'
14104
14105`-mno-fix-24k'
14106     Work around the 24K E48 (lost data on stores during refill) errata.
14107     The workarounds are implemented by the assembler rather than by
14108     GCC.
14109
14110`-mfix-r4000'
14111`-mno-fix-r4000'
14112     Work around certain R4000 CPU errata:
14113        - A double-word or a variable shift may give an incorrect
14114          result if executed immediately after starting an integer
14115          division.
14116
14117        - A double-word or a variable shift may give an incorrect
14118          result if executed while an integer multiplication is in
14119          progress.
14120
14121        - An integer division may give an incorrect result if started
14122          in a delay slot of a taken branch or a jump.
14123
14124`-mfix-r4400'
14125`-mno-fix-r4400'
14126     Work around certain R4400 CPU errata:
14127        - A double-word or a variable shift may give an incorrect
14128          result if executed immediately after starting an integer
14129          division.
14130
14131`-mfix-r10000'
14132`-mno-fix-r10000'
14133     Work around certain R10000 errata:
14134        - `ll'/`sc' sequences may not behave atomically on revisions
14135          prior to 3.0.  They may deadlock on revisions 2.6 and earlier.
14136
14137     This option can only be used if the target architecture supports
14138     branch-likely instructions.  `-mfix-r10000' is the default when
14139     `-march=r10000' is used; `-mno-fix-r10000' is the default
14140     otherwise.
14141
14142`-mfix-vr4120'
14143`-mno-fix-vr4120'
14144     Work around certain VR4120 errata:
14145        - `dmultu' does not always produce the correct result.
14146
14147        - `div' and `ddiv' do not always produce the correct result if
14148          one of the operands is negative.
14149     The workarounds for the division errata rely on special functions
14150     in `libgcc.a'.  At present, these functions are only provided by
14151     the `mips64vr*-elf' configurations.
14152
14153     Other VR4120 errata require a nop to be inserted between certain
14154     pairs of instructions.  These errata are handled by the assembler,
14155     not by GCC itself.
14156
14157`-mfix-vr4130'
14158     Work around the VR4130 `mflo'/`mfhi' errata.  The workarounds are
14159     implemented by the assembler rather than by GCC, although GCC will
14160     avoid using `mflo' and `mfhi' if the VR4130 `macc', `macchi',
14161     `dmacc' and `dmacchi' instructions are available instead.
14162
14163`-mfix-sb1'
14164`-mno-fix-sb1'
14165     Work around certain SB-1 CPU core errata.  (This flag currently
14166     works around the SB-1 revision 2 "F1" and "F2" floating point
14167     errata.)
14168
14169`-mr10k-cache-barrier=SETTING'
14170     Specify whether GCC should insert cache barriers to avoid the
14171     side-effects of speculation on R10K processors.
14172
14173     In common with many processors, the R10K tries to predict the
14174     outcome of a conditional branch and speculatively executes
14175     instructions from the "taken" branch.  It later aborts these
14176     instructions if the predicted outcome was wrong.  However, on the
14177     R10K, even aborted instructions can have side effects.
14178
14179     This problem only affects kernel stores and, depending on the
14180     system, kernel loads.  As an example, a speculatively-executed
14181     store may load the target memory into cache and mark the cache
14182     line as dirty, even if the store itself is later aborted.  If a
14183     DMA operation writes to the same area of memory before the "dirty"
14184     line is flushed, the cached data will overwrite the DMA-ed data.
14185     See the R10K processor manual for a full description, including
14186     other potential problems.
14187
14188     One workaround is to insert cache barrier instructions before
14189     every memory access that might be speculatively executed and that
14190     might have side effects even if aborted.
14191     `-mr10k-cache-barrier=SETTING' controls GCC's implementation of
14192     this workaround.  It assumes that aborted accesses to any byte in
14193     the following regions will not have side effects:
14194
14195       1. the memory occupied by the current function's stack frame;
14196
14197       2. the memory occupied by an incoming stack argument;
14198
14199       3. the memory occupied by an object with a link-time-constant
14200          address.
14201
14202     It is the kernel's responsibility to ensure that speculative
14203     accesses to these regions are indeed safe.
14204
14205     If the input program contains a function declaration such as:
14206
14207          void foo (void);
14208
14209     then the implementation of `foo' must allow `j foo' and `jal foo'
14210     to be executed speculatively.  GCC honors this restriction for
14211     functions it compiles itself.  It expects non-GCC functions (such
14212     as hand-written assembly code) to do the same.
14213
14214     The option has three forms:
14215
14216    `-mr10k-cache-barrier=load-store'
14217          Insert a cache barrier before a load or store that might be
14218          speculatively executed and that might have side effects even
14219          if aborted.
14220
14221    `-mr10k-cache-barrier=store'
14222          Insert a cache barrier before a store that might be
14223          speculatively executed and that might have side effects even
14224          if aborted.
14225
14226    `-mr10k-cache-barrier=none'
14227          Disable the insertion of cache barriers.  This is the default
14228          setting.
14229
14230`-mflush-func=FUNC'
14231`-mno-flush-func'
14232     Specifies the function to call to flush the I and D caches, or to
14233     not call any such function.  If called, the function must take the
14234     same arguments as the common `_flush_func()', that is, the address
14235     of the memory range for which the cache is being flushed, the size
14236     of the memory range, and the number 3 (to flush both caches).  The
14237     default depends on the target GCC was configured for, but commonly
14238     is either `_flush_func' or `__cpu_flush'.
14239
14240`mbranch-cost=NUM'
14241     Set the cost of branches to roughly NUM "simple" instructions.
14242     This cost is only a heuristic and is not guaranteed to produce
14243     consistent results across releases.  A zero cost redundantly
14244     selects the default, which is based on the `-mtune' setting.
14245
14246`-mbranch-likely'
14247`-mno-branch-likely'
14248     Enable or disable use of Branch Likely instructions, regardless of
14249     the default for the selected architecture.  By default, Branch
14250     Likely instructions may be generated if they are supported by the
14251     selected architecture.  An exception is for the MIPS32 and MIPS64
14252     architectures and processors which implement those architectures;
14253     for those, Branch Likely instructions will not be generated by
14254     default because the MIPS32 and MIPS64 architectures specifically
14255     deprecate their use.
14256
14257`-mfp-exceptions'
14258`-mno-fp-exceptions'
14259     Specifies whether FP exceptions are enabled.  This affects how we
14260     schedule FP instructions for some processors.  The default is that
14261     FP exceptions are enabled.
14262
14263     For instance, on the SB-1, if FP exceptions are disabled, and we
14264     are emitting 64-bit code, then we can use both FP pipes.
14265     Otherwise, we can only use one FP pipe.
14266
14267`-mvr4130-align'
14268`-mno-vr4130-align'
14269     The VR4130 pipeline is two-way superscalar, but can only issue two
14270     instructions together if the first one is 8-byte aligned.  When
14271     this option is enabled, GCC will align pairs of instructions that
14272     it thinks should execute in parallel.
14273
14274     This option only has an effect when optimizing for the VR4130.  It
14275     normally makes code faster, but at the expense of making it bigger.
14276     It is enabled by default at optimization level `-O3'.
14277
14278`-msynci'
14279`-mno-synci'
14280     Enable (disable) generation of `synci' instructions on
14281     architectures that support it.  The `synci' instructions (if
14282     enabled) will be generated when `__builtin___clear_cache()' is
14283     compiled.
14284
14285     This option defaults to `-mno-synci', but the default can be
14286     overridden by configuring with `--with-synci'.
14287
14288     When compiling code for single processor systems, it is generally
14289     safe to use `synci'.  However, on many multi-core (SMP) systems, it
14290     will not invalidate the instruction caches on all cores and may
14291     lead to undefined behavior.
14292
14293`-mrelax-pic-calls'
14294`-mno-relax-pic-calls'
14295     Try to turn PIC calls that are normally dispatched via register
14296     `$25' into direct calls.  This is only possible if the linker can
14297     resolve the destination at link-time and if the destination is
14298     within range for a direct call.
14299
14300     `-mrelax-pic-calls' is the default if GCC was configured to use an
14301     assembler and a linker that supports the `.reloc' assembly
14302     directive and `-mexplicit-relocs' is in effect.  With
14303     `-mno-explicit-relocs', this optimization can be performed by the
14304     assembler and the linker alone without help from the compiler.
14305
14306`-mmcount-ra-address'
14307`-mno-mcount-ra-address'
14308     Emit (do not emit) code that allows `_mcount' to modify the
14309     calling function's return address.  When enabled, this option
14310     extends the usual `_mcount' interface with a new RA-ADDRESS
14311     parameter, which has type `intptr_t *' and is passed in register
14312     `$12'.  `_mcount' can then modify the return address by doing both
14313     of the following:
14314        * Returning the new address in register `$31'.
14315
14316        * Storing the new address in `*RA-ADDRESS', if RA-ADDRESS is
14317          nonnull.
14318
14319     The default is `-mno-mcount-ra-address'.
14320
14321
14322
14323File: gcc.info,  Node: MMIX Options,  Next: MN10300 Options,  Prev: MIPS Options,  Up: Submodel Options
14324
143253.17.28 MMIX Options
14326--------------------
14327
14328These options are defined for the MMIX:
14329
14330`-mlibfuncs'
14331`-mno-libfuncs'
14332     Specify that intrinsic library functions are being compiled,
14333     passing all values in registers, no matter the size.
14334
14335`-mepsilon'
14336`-mno-epsilon'
14337     Generate floating-point comparison instructions that compare with
14338     respect to the `rE' epsilon register.
14339
14340`-mabi=mmixware'
14341`-mabi=gnu'
14342     Generate code that passes function parameters and return values
14343     that (in the called function) are seen as registers `$0' and up,
14344     as opposed to the GNU ABI which uses global registers `$231' and
14345     up.
14346
14347`-mzero-extend'
14348`-mno-zero-extend'
14349     When reading data from memory in sizes shorter than 64 bits, use
14350     (do not use) zero-extending load instructions by default, rather
14351     than sign-extending ones.
14352
14353`-mknuthdiv'
14354`-mno-knuthdiv'
14355     Make the result of a division yielding a remainder have the same
14356     sign as the divisor.  With the default, `-mno-knuthdiv', the sign
14357     of the remainder follows the sign of the dividend.  Both methods
14358     are arithmetically valid, the latter being almost exclusively used.
14359
14360`-mtoplevel-symbols'
14361`-mno-toplevel-symbols'
14362     Prepend (do not prepend) a `:' to all global symbols, so the
14363     assembly code can be used with the `PREFIX' assembly directive.
14364
14365`-melf'
14366     Generate an executable in the ELF format, rather than the default
14367     `mmo' format used by the `mmix' simulator.
14368
14369`-mbranch-predict'
14370`-mno-branch-predict'
14371     Use (do not use) the probable-branch instructions, when static
14372     branch prediction indicates a probable branch.
14373
14374`-mbase-addresses'
14375`-mno-base-addresses'
14376     Generate (do not generate) code that uses _base addresses_.  Using
14377     a base address automatically generates a request (handled by the
14378     assembler and the linker) for a constant to be set up in a global
14379     register.  The register is used for one or more base address
14380     requests within the range 0 to 255 from the value held in the
14381     register.  The generally leads to short and fast code, but the
14382     number of different data items that can be addressed is limited.
14383     This means that a program that uses lots of static data may
14384     require `-mno-base-addresses'.
14385
14386`-msingle-exit'
14387`-mno-single-exit'
14388     Force (do not force) generated code to have a single exit point in
14389     each function.
14390
14391
14392File: gcc.info,  Node: MN10300 Options,  Next: PDP-11 Options,  Prev: MMIX Options,  Up: Submodel Options
14393
143943.17.29 MN10300 Options
14395-----------------------
14396
14397These `-m' options are defined for Matsushita MN10300 architectures:
14398
14399`-mmult-bug'
14400     Generate code to avoid bugs in the multiply instructions for the
14401     MN10300 processors.  This is the default.
14402
14403`-mno-mult-bug'
14404     Do not generate code to avoid bugs in the multiply instructions
14405     for the MN10300 processors.
14406
14407`-mam33'
14408     Generate code which uses features specific to the AM33 processor.
14409
14410`-mno-am33'
14411     Do not generate code which uses features specific to the AM33
14412     processor.  This is the default.
14413
14414`-mam33-2'
14415     Generate code which uses features specific to the AM33/2.0
14416     processor.
14417
14418`-mam34'
14419     Generate code which uses features specific to the AM34 processor.
14420
14421`-mtune=CPU-TYPE'
14422     Use the timing characteristics of the indicated CPU type when
14423     scheduling instructions.  This does not change the targeted
14424     processor type.  The CPU type must be one of `mn10300', `am33',
14425     `am33-2' or `am34'.
14426
14427`-mreturn-pointer-on-d0'
14428     When generating a function which returns a pointer, return the
14429     pointer in both `a0' and `d0'.  Otherwise, the pointer is returned
14430     only in a0, and attempts to call such functions without a prototype
14431     would result in errors.  Note that this option is on by default;
14432     use `-mno-return-pointer-on-d0' to disable it.
14433
14434`-mno-crt0'
14435     Do not link in the C run-time initialization object file.
14436
14437`-mrelax'
14438     Indicate to the linker that it should perform a relaxation
14439     optimization pass to shorten branches, calls and absolute memory
14440     addresses.  This option only has an effect when used on the
14441     command line for the final link step.
14442
14443     This option makes symbolic debugging impossible.
14444
14445`-mliw'
14446     Allow the compiler to generate _Long Instruction Word_
14447     instructions if the target is the `AM33' or later.  This is the
14448     default.  This option defines the preprocessor macro `__LIW__'.
14449
14450`-mnoliw'
14451     Do not allow the compiler to generate _Long Instruction Word_
14452     instructions.  This option defines the preprocessor macro
14453     `__NO_LIW__'.
14454
14455
14456
14457File: gcc.info,  Node: PDP-11 Options,  Next: picoChip Options,  Prev: MN10300 Options,  Up: Submodel Options
14458
144593.17.30 PDP-11 Options
14460----------------------
14461
14462These options are defined for the PDP-11:
14463
14464`-mfpu'
14465     Use hardware FPP floating point.  This is the default.  (FIS
14466     floating point on the PDP-11/40 is not supported.)
14467
14468`-msoft-float'
14469     Do not use hardware floating point.
14470
14471`-mac0'
14472     Return floating-point results in ac0 (fr0 in Unix assembler
14473     syntax).
14474
14475`-mno-ac0'
14476     Return floating-point results in memory.  This is the default.
14477
14478`-m40'
14479     Generate code for a PDP-11/40.
14480
14481`-m45'
14482     Generate code for a PDP-11/45.  This is the default.
14483
14484`-m10'
14485     Generate code for a PDP-11/10.
14486
14487`-mbcopy-builtin'
14488     Use inline `movmemhi' patterns for copying memory.  This is the
14489     default.
14490
14491`-mbcopy'
14492     Do not use inline `movmemhi' patterns for copying memory.
14493
14494`-mint16'
14495`-mno-int32'
14496     Use 16-bit `int'.  This is the default.
14497
14498`-mint32'
14499`-mno-int16'
14500     Use 32-bit `int'.
14501
14502`-mfloat64'
14503`-mno-float32'
14504     Use 64-bit `float'.  This is the default.
14505
14506`-mfloat32'
14507`-mno-float64'
14508     Use 32-bit `float'.
14509
14510`-mabshi'
14511     Use `abshi2' pattern.  This is the default.
14512
14513`-mno-abshi'
14514     Do not use `abshi2' pattern.
14515
14516`-mbranch-expensive'
14517     Pretend that branches are expensive.  This is for experimenting
14518     with code generation only.
14519
14520`-mbranch-cheap'
14521     Do not pretend that branches are expensive.  This is the default.
14522
14523`-munix-asm'
14524     Use Unix assembler syntax.  This is the default when configured for
14525     `pdp11-*-bsd'.
14526
14527`-mdec-asm'
14528     Use DEC assembler syntax.  This is the default when configured for
14529     any PDP-11 target other than `pdp11-*-bsd'.
14530
14531
14532File: gcc.info,  Node: picoChip Options,  Next: PowerPC Options,  Prev: PDP-11 Options,  Up: Submodel Options
14533
145343.17.31 picoChip Options
14535------------------------
14536
14537These `-m' options are defined for picoChip implementations:
14538
14539`-mae=AE_TYPE'
14540     Set the instruction set, register set, and instruction scheduling
14541     parameters for array element type AE_TYPE.  Supported values for
14542     AE_TYPE are `ANY', `MUL', and `MAC'.
14543
14544     `-mae=ANY' selects a completely generic AE type.  Code generated
14545     with this option will run on any of the other AE types.  The code
14546     will not be as efficient as it would be if compiled for a specific
14547     AE type, and some types of operation (e.g., multiplication) will
14548     not work properly on all types of AE.
14549
14550     `-mae=MUL' selects a MUL AE type.  This is the most useful AE type
14551     for compiled code, and is the default.
14552
14553     `-mae=MAC' selects a DSP-style MAC AE.  Code compiled with this
14554     option may suffer from poor performance of byte (char)
14555     manipulation, since the DSP AE does not provide hardware support
14556     for byte load/stores.
14557
14558`-msymbol-as-address'
14559     Enable the compiler to directly use a symbol name as an address in
14560     a load/store instruction, without first loading it into a
14561     register.  Typically, the use of this option will generate larger
14562     programs, which run faster than when the option isn't used.
14563     However, the results vary from program to program, so it is left
14564     as a user option, rather than being permanently enabled.
14565
14566`-mno-inefficient-warnings'
14567     Disables warnings about the generation of inefficient code.  These
14568     warnings can be generated, for example, when compiling code which
14569     performs byte-level memory operations on the MAC AE type.  The MAC
14570     AE has no hardware support for byte-level memory operations, so
14571     all byte load/stores must be synthesized from word load/store
14572     operations.  This is inefficient and a warning will be generated
14573     indicating to the programmer that they should rewrite the code to
14574     avoid byte operations, or to target an AE type which has the
14575     necessary hardware support.  This option enables the warning to be
14576     turned off.
14577
14578
14579
14580File: gcc.info,  Node: PowerPC Options,  Next: RS/6000 and PowerPC Options,  Prev: picoChip Options,  Up: Submodel Options
14581
145823.17.32 PowerPC Options
14583-----------------------
14584
14585These are listed under *Note RS/6000 and PowerPC Options::.
14586
14587
14588File: gcc.info,  Node: RS/6000 and PowerPC Options,  Next: RX Options,  Prev: PowerPC Options,  Up: Submodel Options
14589
145903.17.33 IBM RS/6000 and PowerPC Options
14591---------------------------------------
14592
14593These `-m' options are defined for the IBM RS/6000 and PowerPC:
14594`-mpower'
14595`-mno-power'
14596`-mpower2'
14597`-mno-power2'
14598`-mpowerpc'
14599`-mno-powerpc'
14600`-mpowerpc-gpopt'
14601`-mno-powerpc-gpopt'
14602`-mpowerpc-gfxopt'
14603`-mno-powerpc-gfxopt'
14604`-mpowerpc64'
14605`-mno-powerpc64'
14606`-mmfcrf'
14607`-mno-mfcrf'
14608`-mpopcntb'
14609`-mno-popcntb'
14610`-mpopcntd'
14611`-mno-popcntd'
14612`-mfprnd'
14613`-mno-fprnd'
14614`-mcmpb'
14615`-mno-cmpb'
14616`-mmfpgpr'
14617`-mno-mfpgpr'
14618`-mhard-dfp'
14619`-mno-hard-dfp'
14620     GCC supports two related instruction set architectures for the
14621     RS/6000 and PowerPC.  The "POWER" instruction set are those
14622     instructions supported by the `rios' chip set used in the original
14623     RS/6000 systems and the "PowerPC" instruction set is the
14624     architecture of the Freescale MPC5xx, MPC6xx, MPC8xx
14625     microprocessors, and the IBM 4xx, 6xx, and follow-on
14626     microprocessors.
14627
14628     Neither architecture is a subset of the other.  However there is a
14629     large common subset of instructions supported by both.  An MQ
14630     register is included in processors supporting the POWER
14631     architecture.
14632
14633     You use these options to specify which instructions are available
14634     on the processor you are using.  The default value of these
14635     options is determined when configuring GCC.  Specifying the
14636     `-mcpu=CPU_TYPE' overrides the specification of these options.  We
14637     recommend you use the `-mcpu=CPU_TYPE' option rather than the
14638     options listed above.
14639
14640     The `-mpower' option allows GCC to generate instructions that are
14641     found only in the POWER architecture and to use the MQ register.
14642     Specifying `-mpower2' implies `-power' and also allows GCC to
14643     generate instructions that are present in the POWER2 architecture
14644     but not the original POWER architecture.
14645
14646     The `-mpowerpc' option allows GCC to generate instructions that
14647     are found only in the 32-bit subset of the PowerPC architecture.
14648     Specifying `-mpowerpc-gpopt' implies `-mpowerpc' and also allows
14649     GCC to use the optional PowerPC architecture instructions in the
14650     General Purpose group, including floating-point square root.
14651     Specifying `-mpowerpc-gfxopt' implies `-mpowerpc' and also allows
14652     GCC to use the optional PowerPC architecture instructions in the
14653     Graphics group, including floating-point select.
14654
14655     The `-mmfcrf' option allows GCC to generate the move from
14656     condition register field instruction implemented on the POWER4
14657     processor and other processors that support the PowerPC V2.01
14658     architecture.  The `-mpopcntb' option allows GCC to generate the
14659     popcount and double precision FP reciprocal estimate instruction
14660     implemented on the POWER5 processor and other processors that
14661     support the PowerPC V2.02 architecture.  The `-mpopcntd' option
14662     allows GCC to generate the popcount instruction implemented on the
14663     POWER7 processor and other processors that support the PowerPC
14664     V2.06 architecture.  The `-mfprnd' option allows GCC to generate
14665     the FP round to integer instructions implemented on the POWER5+
14666     processor and other processors that support the PowerPC V2.03
14667     architecture.  The `-mcmpb' option allows GCC to generate the
14668     compare bytes instruction implemented on the POWER6 processor and
14669     other processors that support the PowerPC V2.05 architecture.  The
14670     `-mmfpgpr' option allows GCC to generate the FP move to/from
14671     general purpose register instructions implemented on the POWER6X
14672     processor and other processors that support the extended PowerPC
14673     V2.05 architecture.  The `-mhard-dfp' option allows GCC to
14674     generate the decimal floating point instructions implemented on
14675     some POWER processors.
14676
14677     The `-mpowerpc64' option allows GCC to generate the additional
14678     64-bit instructions that are found in the full PowerPC64
14679     architecture and to treat GPRs as 64-bit, doubleword quantities.
14680     GCC defaults to `-mno-powerpc64'.
14681
14682     If you specify both `-mno-power' and `-mno-powerpc', GCC will use
14683     only the instructions in the common subset of both architectures
14684     plus some special AIX common-mode calls, and will not use the MQ
14685     register.  Specifying both `-mpower' and `-mpowerpc' permits GCC
14686     to use any instruction from either architecture and to allow use
14687     of the MQ register; specify this for the Motorola MPC601.
14688
14689`-mnew-mnemonics'
14690`-mold-mnemonics'
14691     Select which mnemonics to use in the generated assembler code.
14692     With `-mnew-mnemonics', GCC uses the assembler mnemonics defined
14693     for the PowerPC architecture.  With `-mold-mnemonics' it uses the
14694     assembler mnemonics defined for the POWER architecture.
14695     Instructions defined in only one architecture have only one
14696     mnemonic; GCC uses that mnemonic irrespective of which of these
14697     options is specified.
14698
14699     GCC defaults to the mnemonics appropriate for the architecture in
14700     use.  Specifying `-mcpu=CPU_TYPE' sometimes overrides the value of
14701     these option.  Unless you are building a cross-compiler, you
14702     should normally not specify either `-mnew-mnemonics' or
14703     `-mold-mnemonics', but should instead accept the default.
14704
14705`-mcpu=CPU_TYPE'
14706     Set architecture type, register usage, choice of mnemonics, and
14707     instruction scheduling parameters for machine type CPU_TYPE.
14708     Supported values for CPU_TYPE are `401', `403', `405', `405fp',
14709     `440', `440fp', `464', `464fp', `476', `476fp', `505', `601',
14710     `602', `603', `603e', `604', `604e', `620', `630', `740', `7400',
14711     `7450', `750', `801', `821', `823', `860', `970', `8540', `a2',
14712     `e300c2', `e300c3', `e500mc', `e500mc64', `ec603e', `G3', `G4',
14713     `G5', `titan', `power', `power2', `power3', `power4', `power5',
14714     `power5+', `power6', `power6x', `power7', `common', `powerpc',
14715     `powerpc64', `rios', `rios1', `rios2', `rsc', and `rs64'.
14716
14717     `-mcpu=common' selects a completely generic processor.  Code
14718     generated under this option will run on any POWER or PowerPC
14719     processor.  GCC will use only the instructions in the common
14720     subset of both architectures, and will not use the MQ register.
14721     GCC assumes a generic processor model for scheduling purposes.
14722
14723     `-mcpu=power', `-mcpu=power2', `-mcpu=powerpc', and
14724     `-mcpu=powerpc64' specify generic POWER, POWER2, pure 32-bit
14725     PowerPC (i.e., not MPC601), and 64-bit PowerPC architecture machine
14726     types, with an appropriate, generic processor model assumed for
14727     scheduling purposes.
14728
14729     The other options specify a specific processor.  Code generated
14730     under those options will run best on that processor, and may not
14731     run at all on others.
14732
14733     The `-mcpu' options automatically enable or disable the following
14734     options:
14735
14736          -maltivec  -mfprnd  -mhard-float  -mmfcrf  -mmultiple
14737          -mnew-mnemonics  -mpopcntb -mpopcntd  -mpower  -mpower2  -mpowerpc64
14738          -mpowerpc-gpopt  -mpowerpc-gfxopt  -msingle-float -mdouble-float
14739          -msimple-fpu -mstring  -mmulhw  -mdlmzb  -mmfpgpr -mvsx
14740
14741     The particular options set for any particular CPU will vary between
14742     compiler versions, depending on what setting seems to produce
14743     optimal code for that CPU; it doesn't necessarily reflect the
14744     actual hardware's capabilities.  If you wish to set an individual
14745     option to a particular value, you may specify it after the `-mcpu'
14746     option, like `-mcpu=970 -mno-altivec'.
14747
14748     On AIX, the `-maltivec' and `-mpowerpc64' options are not enabled
14749     or disabled by the `-mcpu' option at present because AIX does not
14750     have full support for these options.  You may still enable or
14751     disable them individually if you're sure it'll work in your
14752     environment.
14753
14754`-mtune=CPU_TYPE'
14755     Set the instruction scheduling parameters for machine type
14756     CPU_TYPE, but do not set the architecture type, register usage, or
14757     choice of mnemonics, as `-mcpu=CPU_TYPE' would.  The same values
14758     for CPU_TYPE are used for `-mtune' as for `-mcpu'.  If both are
14759     specified, the code generated will use the architecture,
14760     registers, and mnemonics set by `-mcpu', but the scheduling
14761     parameters set by `-mtune'.
14762
14763`-mcmodel=small'
14764     Generate PowerPC64 code for the small model: The TOC is limited to
14765     64k.
14766
14767`-mcmodel=medium'
14768     Generate PowerPC64 code for the medium model: The TOC and other
14769     static data may be up to a total of 4G in size.
14770
14771`-mcmodel=large'
14772     Generate PowerPC64 code for the large model: The TOC may be up to
14773     4G in size.  Other data and code is only limited by the 64-bit
14774     address space.
14775
14776`-maltivec'
14777`-mno-altivec'
14778     Generate code that uses (does not use) AltiVec instructions, and
14779     also enable the use of built-in functions that allow more direct
14780     access to the AltiVec instruction set.  You may also need to set
14781     `-mabi=altivec' to adjust the current ABI with AltiVec ABI
14782     enhancements.
14783
14784`-mvrsave'
14785`-mno-vrsave'
14786     Generate VRSAVE instructions when generating AltiVec code.
14787
14788`-mgen-cell-microcode'
14789     Generate Cell microcode instructions
14790
14791`-mwarn-cell-microcode'
14792     Warning when a Cell microcode instruction is going to emitted.  An
14793     example of a Cell microcode instruction is a variable shift.
14794
14795`-msecure-plt'
14796     Generate code that allows ld and ld.so to build executables and
14797     shared libraries with non-exec .plt and .got sections.  This is a
14798     PowerPC 32-bit SYSV ABI option.
14799
14800`-mbss-plt'
14801     Generate code that uses a BSS .plt section that ld.so fills in, and
14802     requires .plt and .got sections that are both writable and
14803     executable.  This is a PowerPC 32-bit SYSV ABI option.
14804
14805`-misel'
14806`-mno-isel'
14807     This switch enables or disables the generation of ISEL
14808     instructions.
14809
14810`-misel=YES/NO'
14811     This switch has been deprecated.  Use `-misel' and `-mno-isel'
14812     instead.
14813
14814`-mspe'
14815`-mno-spe'
14816     This switch enables or disables the generation of SPE simd
14817     instructions.
14818
14819`-mpaired'
14820`-mno-paired'
14821     This switch enables or disables the generation of PAIRED simd
14822     instructions.
14823
14824`-mspe=YES/NO'
14825     This option has been deprecated.  Use `-mspe' and `-mno-spe'
14826     instead.
14827
14828`-mvsx'
14829`-mno-vsx'
14830     Generate code that uses (does not use) vector/scalar (VSX)
14831     instructions, and also enable the use of built-in functions that
14832     allow more direct access to the VSX instruction set.
14833
14834`-mfloat-gprs=YES/SINGLE/DOUBLE/NO'
14835`-mfloat-gprs'
14836     This switch enables or disables the generation of floating point
14837     operations on the general purpose registers for architectures that
14838     support it.
14839
14840     The argument YES or SINGLE enables the use of single-precision
14841     floating point operations.
14842
14843     The argument DOUBLE enables the use of single and double-precision
14844     floating point operations.
14845
14846     The argument NO disables floating point operations on the general
14847     purpose registers.
14848
14849     This option is currently only available on the MPC854x.
14850
14851`-m32'
14852`-m64'
14853     Generate code for 32-bit or 64-bit environments of Darwin and SVR4
14854     targets (including GNU/Linux).  The 32-bit environment sets int,
14855     long and pointer to 32 bits and generates code that runs on any
14856     PowerPC variant.  The 64-bit environment sets int to 32 bits and
14857     long and pointer to 64 bits, and generates code for PowerPC64, as
14858     for `-mpowerpc64'.
14859
14860`-mfull-toc'
14861`-mno-fp-in-toc'
14862`-mno-sum-in-toc'
14863`-mminimal-toc'
14864     Modify generation of the TOC (Table Of Contents), which is created
14865     for every executable file.  The `-mfull-toc' option is selected by
14866     default.  In that case, GCC will allocate at least one TOC entry
14867     for each unique non-automatic variable reference in your program.
14868     GCC will also place floating-point constants in the TOC.  However,
14869     only 16,384 entries are available in the TOC.
14870
14871     If you receive a linker error message that saying you have
14872     overflowed the available TOC space, you can reduce the amount of
14873     TOC space used with the `-mno-fp-in-toc' and `-mno-sum-in-toc'
14874     options.  `-mno-fp-in-toc' prevents GCC from putting floating-point
14875     constants in the TOC and `-mno-sum-in-toc' forces GCC to generate
14876     code to calculate the sum of an address and a constant at run-time
14877     instead of putting that sum into the TOC.  You may specify one or
14878     both of these options.  Each causes GCC to produce very slightly
14879     slower and larger code at the expense of conserving TOC space.
14880
14881     If you still run out of space in the TOC even when you specify
14882     both of these options, specify `-mminimal-toc' instead.  This
14883     option causes GCC to make only one TOC entry for every file.  When
14884     you specify this option, GCC will produce code that is slower and
14885     larger but which uses extremely little TOC space.  You may wish to
14886     use this option only on files that contain less frequently
14887     executed code.
14888
14889`-maix64'
14890`-maix32'
14891     Enable 64-bit AIX ABI and calling convention: 64-bit pointers,
14892     64-bit `long' type, and the infrastructure needed to support them.
14893     Specifying `-maix64' implies `-mpowerpc64' and `-mpowerpc', while
14894     `-maix32' disables the 64-bit ABI and implies `-mno-powerpc64'.
14895     GCC defaults to `-maix32'.
14896
14897`-mxl-compat'
14898`-mno-xl-compat'
14899     Produce code that conforms more closely to IBM XL compiler
14900     semantics when using AIX-compatible ABI.  Pass floating-point
14901     arguments to prototyped functions beyond the register save area
14902     (RSA) on the stack in addition to argument FPRs.  Do not assume
14903     that most significant double in 128-bit long double value is
14904     properly rounded when comparing values and converting to double.
14905     Use XL symbol names for long double support routines.
14906
14907     The AIX calling convention was extended but not initially
14908     documented to handle an obscure K&R C case of calling a function
14909     that takes the address of its arguments with fewer arguments than
14910     declared.  IBM XL compilers access floating point arguments which
14911     do not fit in the RSA from the stack when a subroutine is compiled
14912     without optimization.  Because always storing floating-point
14913     arguments on the stack is inefficient and rarely needed, this
14914     option is not enabled by default and only is necessary when
14915     calling subroutines compiled by IBM XL compilers without
14916     optimization.
14917
14918`-mpe'
14919     Support "IBM RS/6000 SP" "Parallel Environment" (PE).  Link an
14920     application written to use message passing with special startup
14921     code to enable the application to run.  The system must have PE
14922     installed in the standard location (`/usr/lpp/ppe.poe/'), or the
14923     `specs' file must be overridden with the `-specs=' option to
14924     specify the appropriate directory location.  The Parallel
14925     Environment does not support threads, so the `-mpe' option and the
14926     `-pthread' option are incompatible.
14927
14928`-malign-natural'
14929`-malign-power'
14930     On AIX, 32-bit Darwin, and 64-bit PowerPC GNU/Linux, the option
14931     `-malign-natural' overrides the ABI-defined alignment of larger
14932     types, such as floating-point doubles, on their natural size-based
14933     boundary.  The option `-malign-power' instructs GCC to follow the
14934     ABI-specified alignment rules.  GCC defaults to the standard
14935     alignment defined in the ABI.
14936
14937     On 64-bit Darwin, natural alignment is the default, and
14938     `-malign-power' is not supported.
14939
14940`-msoft-float'
14941`-mhard-float'
14942     Generate code that does not use (uses) the floating-point register
14943     set.  Software floating point emulation is provided if you use the
14944     `-msoft-float' option, and pass the option to GCC when linking.
14945
14946`-msingle-float'
14947`-mdouble-float'
14948     Generate code for single or double-precision floating point
14949     operations.  `-mdouble-float' implies `-msingle-float'.
14950
14951`-msimple-fpu'
14952     Do not generate sqrt and div instructions for hardware floating
14953     point unit.
14954
14955`-mfpu'
14956     Specify type of floating point unit.  Valid values are SP_LITE
14957     (equivalent to -msingle-float -msimple-fpu), DP_LITE (equivalent
14958     to -mdouble-float -msimple-fpu), SP_FULL (equivalent to
14959     -msingle-float), and DP_FULL (equivalent to -mdouble-float).
14960
14961`-mxilinx-fpu'
14962     Perform optimizations for floating point unit on Xilinx PPC
14963     405/440.
14964
14965`-mmultiple'
14966`-mno-multiple'
14967     Generate code that uses (does not use) the load multiple word
14968     instructions and the store multiple word instructions.  These
14969     instructions are generated by default on POWER systems, and not
14970     generated on PowerPC systems.  Do not use `-mmultiple' on little
14971     endian PowerPC systems, since those instructions do not work when
14972     the processor is in little endian mode.  The exceptions are PPC740
14973     and PPC750 which permit the instructions usage in little endian
14974     mode.
14975
14976`-mstring'
14977`-mno-string'
14978     Generate code that uses (does not use) the load string instructions
14979     and the store string word instructions to save multiple registers
14980     and do small block moves.  These instructions are generated by
14981     default on POWER systems, and not generated on PowerPC systems.
14982     Do not use `-mstring' on little endian PowerPC systems, since those
14983     instructions do not work when the processor is in little endian
14984     mode.  The exceptions are PPC740 and PPC750 which permit the
14985     instructions usage in little endian mode.
14986
14987`-mupdate'
14988`-mno-update'
14989     Generate code that uses (does not use) the load or store
14990     instructions that update the base register to the address of the
14991     calculated memory location.  These instructions are generated by
14992     default.  If you use `-mno-update', there is a small window
14993     between the time that the stack pointer is updated and the address
14994     of the previous frame is stored, which means code that walks the
14995     stack frame across interrupts or signals may get corrupted data.
14996
14997`-mavoid-indexed-addresses'
14998`-mno-avoid-indexed-addresses'
14999     Generate code that tries to avoid (not avoid) the use of indexed
15000     load or store instructions. These instructions can incur a
15001     performance penalty on Power6 processors in certain situations,
15002     such as when stepping through large arrays that cross a 16M
15003     boundary.  This option is enabled by default when targetting
15004     Power6 and disabled otherwise.
15005
15006`-mfused-madd'
15007`-mno-fused-madd'
15008     Generate code that uses (does not use) the floating point multiply
15009     and accumulate instructions.  These instructions are generated by
15010     default if hardware floating point is used.  The machine dependent
15011     `-mfused-madd' option is now mapped to the machine independent
15012     `-ffp-contract=fast' option, and `-mno-fused-madd' is mapped to
15013     `-ffp-contract=off'.
15014
15015`-mmulhw'
15016`-mno-mulhw'
15017     Generate code that uses (does not use) the half-word multiply and
15018     multiply-accumulate instructions on the IBM 405, 440, 464 and 476
15019     processors.  These instructions are generated by default when
15020     targetting those processors.
15021
15022`-mdlmzb'
15023`-mno-dlmzb'
15024     Generate code that uses (does not use) the string-search `dlmzb'
15025     instruction on the IBM 405, 440, 464 and 476 processors.  This
15026     instruction is generated by default when targetting those
15027     processors.
15028
15029`-mno-bit-align'
15030`-mbit-align'
15031     On System V.4 and embedded PowerPC systems do not (do) force
15032     structures and unions that contain bit-fields to be aligned to the
15033     base type of the bit-field.
15034
15035     For example, by default a structure containing nothing but 8
15036     `unsigned' bit-fields of length 1 would be aligned to a 4 byte
15037     boundary and have a size of 4 bytes.  By using `-mno-bit-align',
15038     the structure would be aligned to a 1 byte boundary and be one
15039     byte in size.
15040
15041`-mno-strict-align'
15042`-mstrict-align'
15043     On System V.4 and embedded PowerPC systems do not (do) assume that
15044     unaligned memory references will be handled by the system.
15045
15046`-mrelocatable'
15047`-mno-relocatable'
15048     Generate code that allows (does not allow) a static executable to
15049     be relocated to a different address at runtime.  A simple embedded
15050     PowerPC system loader should relocate the entire contents of
15051     `.got2' and 4-byte locations listed in the `.fixup' section, a
15052     table of 32-bit addresses generated by this option.  For this to
15053     work, all objects linked together must be compiled with
15054     `-mrelocatable' or `-mrelocatable-lib'.  `-mrelocatable' code
15055     aligns the stack to an 8 byte boundary.
15056
15057`-mrelocatable-lib'
15058`-mno-relocatable-lib'
15059     Like `-mrelocatable', `-mrelocatable-lib' generates a `.fixup'
15060     section to allow static executables to be relocated at runtime,
15061     but `-mrelocatable-lib' does not use the smaller stack alignment
15062     of `-mrelocatable'.  Objects compiled with `-mrelocatable-lib' may
15063     be linked with objects compiled with any combination of the
15064     `-mrelocatable' options.
15065
15066`-mno-toc'
15067`-mtoc'
15068     On System V.4 and embedded PowerPC systems do not (do) assume that
15069     register 2 contains a pointer to a global area pointing to the
15070     addresses used in the program.
15071
15072`-mlittle'
15073`-mlittle-endian'
15074     On System V.4 and embedded PowerPC systems compile code for the
15075     processor in little endian mode.  The `-mlittle-endian' option is
15076     the same as `-mlittle'.
15077
15078`-mbig'
15079`-mbig-endian'
15080     On System V.4 and embedded PowerPC systems compile code for the
15081     processor in big endian mode.  The `-mbig-endian' option is the
15082     same as `-mbig'.
15083
15084`-mdynamic-no-pic'
15085     On Darwin and Mac OS X systems, compile code so that it is not
15086     relocatable, but that its external references are relocatable.  The
15087     resulting code is suitable for applications, but not shared
15088     libraries.
15089
15090`-msingle-pic-base'
15091     Treat the register used for PIC addressing as read-only, rather
15092     than loading it in the prologue for each function.  The run-time
15093     system is responsible for initializing this register with an
15094     appropriate value before execution begins.
15095
15096`-mprioritize-restricted-insns=PRIORITY'
15097     This option controls the priority that is assigned to
15098     dispatch-slot restricted instructions during the second scheduling
15099     pass.  The argument PRIORITY takes the value 0/1/2 to assign
15100     NO/HIGHEST/SECOND-HIGHEST priority to dispatch slot restricted
15101     instructions.
15102
15103`-msched-costly-dep=DEPENDENCE_TYPE'
15104     This option controls which dependences are considered costly by
15105     the target during instruction scheduling.  The argument
15106     DEPENDENCE_TYPE takes one of the following values: NO: no
15107     dependence is costly, ALL: all dependences are costly,
15108     TRUE_STORE_TO_LOAD: a true dependence from store to load is costly,
15109     STORE_TO_LOAD: any dependence from store to load is costly,
15110     NUMBER: any dependence which latency >= NUMBER is costly.
15111
15112`-minsert-sched-nops=SCHEME'
15113     This option controls which nop insertion scheme will be used during
15114     the second scheduling pass.  The argument SCHEME takes one of the
15115     following values: NO: Don't insert nops.  PAD: Pad with nops any
15116     dispatch group which has vacant issue slots, according to the
15117     scheduler's grouping.  REGROUP_EXACT: Insert nops to force costly
15118     dependent insns into separate groups.  Insert exactly as many nops
15119     as needed to force an insn to a new group, according to the
15120     estimated processor grouping.  NUMBER: Insert nops to force costly
15121     dependent insns into separate groups.  Insert NUMBER nops to force
15122     an insn to a new group.
15123
15124`-mcall-sysv'
15125     On System V.4 and embedded PowerPC systems compile code using
15126     calling conventions that adheres to the March 1995 draft of the
15127     System V Application Binary Interface, PowerPC processor
15128     supplement.  This is the default unless you configured GCC using
15129     `powerpc-*-eabiaix'.
15130
15131`-mcall-sysv-eabi'
15132`-mcall-eabi'
15133     Specify both `-mcall-sysv' and `-meabi' options.
15134
15135`-mcall-sysv-noeabi'
15136     Specify both `-mcall-sysv' and `-mno-eabi' options.
15137
15138`-mcall-aixdesc'
15139     On System V.4 and embedded PowerPC systems compile code for the AIX
15140     operating system.
15141
15142`-mcall-linux'
15143     On System V.4 and embedded PowerPC systems compile code for the
15144     Linux-based GNU system.
15145
15146`-mcall-gnu'
15147     On System V.4 and embedded PowerPC systems compile code for the
15148     Hurd-based GNU system.
15149
15150`-mcall-freebsd'
15151     On System V.4 and embedded PowerPC systems compile code for the
15152     FreeBSD operating system.
15153
15154`-mcall-netbsd'
15155     On System V.4 and embedded PowerPC systems compile code for the
15156     NetBSD operating system.
15157
15158`-mcall-openbsd'
15159     On System V.4 and embedded PowerPC systems compile code for the
15160     OpenBSD operating system.
15161
15162`-maix-struct-return'
15163     Return all structures in memory (as specified by the AIX ABI).
15164
15165`-msvr4-struct-return'
15166     Return structures smaller than 8 bytes in registers (as specified
15167     by the SVR4 ABI).
15168
15169`-mabi=ABI-TYPE'
15170     Extend the current ABI with a particular extension, or remove such
15171     extension.  Valid values are ALTIVEC, NO-ALTIVEC, SPE, NO-SPE,
15172     IBMLONGDOUBLE, IEEELONGDOUBLE.
15173
15174`-mabi=spe'
15175     Extend the current ABI with SPE ABI extensions.  This does not
15176     change the default ABI, instead it adds the SPE ABI extensions to
15177     the current ABI.
15178
15179`-mabi=no-spe'
15180     Disable Booke SPE ABI extensions for the current ABI.
15181
15182`-mabi=ibmlongdouble'
15183     Change the current ABI to use IBM extended precision long double.
15184     This is a PowerPC 32-bit SYSV ABI option.
15185
15186`-mabi=ieeelongdouble'
15187     Change the current ABI to use IEEE extended precision long double.
15188     This is a PowerPC 32-bit Linux ABI option.
15189
15190`-mprototype'
15191`-mno-prototype'
15192     On System V.4 and embedded PowerPC systems assume that all calls to
15193     variable argument functions are properly prototyped.  Otherwise,
15194     the compiler must insert an instruction before every non
15195     prototyped call to set or clear bit 6 of the condition code
15196     register (CR) to indicate whether floating point values were
15197     passed in the floating point registers in case the function takes
15198     a variable arguments.  With `-mprototype', only calls to
15199     prototyped variable argument functions will set or clear the bit.
15200
15201`-msim'
15202     On embedded PowerPC systems, assume that the startup module is
15203     called `sim-crt0.o' and that the standard C libraries are
15204     `libsim.a' and `libc.a'.  This is the default for
15205     `powerpc-*-eabisim' configurations.
15206
15207`-mmvme'
15208     On embedded PowerPC systems, assume that the startup module is
15209     called `crt0.o' and the standard C libraries are `libmvme.a' and
15210     `libc.a'.
15211
15212`-mads'
15213     On embedded PowerPC systems, assume that the startup module is
15214     called `crt0.o' and the standard C libraries are `libads.a' and
15215     `libc.a'.
15216
15217`-myellowknife'
15218     On embedded PowerPC systems, assume that the startup module is
15219     called `crt0.o' and the standard C libraries are `libyk.a' and
15220     `libc.a'.
15221
15222`-mvxworks'
15223     On System V.4 and embedded PowerPC systems, specify that you are
15224     compiling for a VxWorks system.
15225
15226`-memb'
15227     On embedded PowerPC systems, set the PPC_EMB bit in the ELF flags
15228     header to indicate that `eabi' extended relocations are used.
15229
15230`-meabi'
15231`-mno-eabi'
15232     On System V.4 and embedded PowerPC systems do (do not) adhere to
15233     the Embedded Applications Binary Interface (eabi) which is a set of
15234     modifications to the System V.4 specifications.  Selecting `-meabi'
15235     means that the stack is aligned to an 8 byte boundary, and the
15236     `-msdata' option can use both `r2' and `r13' to point to two
15237     separate small data areas.  Selecting `-mno-eabi' means that the
15238     stack is aligned to a 16 byte boundary, and the `-msdata' option
15239     will only use `r13' to point to a single small data area.  The
15240     `-meabi' option is on by default if you configured GCC using one
15241     of the `powerpc*-*-eabi*' options.
15242
15243`-msdata=eabi'
15244     On System V.4 and embedded PowerPC systems, put small initialized
15245     `const' global and static data in the `.sdata2' section, which is
15246     pointed to by register `r2'.  Put small initialized non-`const'
15247     global and static data in the `.sdata' section, which is pointed
15248     to by register `r13'.  Put small uninitialized global and static
15249     data in the `.sbss' section, which is adjacent to the `.sdata'
15250     section.  The `-msdata=eabi' option is incompatible with the
15251     `-mrelocatable' option.  The `-msdata=eabi' option also sets the
15252     `-memb' option.
15253
15254`-msdata=sysv'
15255     On System V.4 and embedded PowerPC systems, put small global and
15256     static data in the `.sdata' section, which is pointed to by
15257     register `r13'.  Put small uninitialized global and static data in
15258     the `.sbss' section, which is adjacent to the `.sdata' section.
15259     The `-msdata=sysv' option is incompatible with the `-mrelocatable'
15260     option.
15261
15262`-msdata=default'
15263`-msdata'
15264     On System V.4 and embedded PowerPC systems, if `-meabi' is used,
15265     compile code the same as `-msdata=eabi', otherwise compile code the
15266     same as `-msdata=sysv'.
15267
15268`-msdata=data'
15269     On System V.4 and embedded PowerPC systems, put small global data
15270     in the `.sdata' section.  Put small uninitialized global data in
15271     the `.sbss' section.  Do not use register `r13' to address small
15272     data however.  This is the default behavior unless other `-msdata'
15273     options are used.
15274
15275`-msdata=none'
15276`-mno-sdata'
15277     On embedded PowerPC systems, put all initialized global and static
15278     data in the `.data' section, and all uninitialized data in the
15279     `.bss' section.
15280
15281`-mblock-move-inline-limit=NUM'
15282     Inline all block moves (such as calls to `memcpy' or structure
15283     copies) less than or equal to NUM bytes.  The minimum value for
15284     NUM is 32 bytes on 32-bit targets and 64 bytes on 64-bit targets.
15285     The default value is target-specific.
15286
15287`-G NUM'
15288     On embedded PowerPC systems, put global and static items less than
15289     or equal to NUM bytes into the small data or bss sections instead
15290     of the normal data or bss section.  By default, NUM is 8.  The `-G
15291     NUM' switch is also passed to the linker.  All modules should be
15292     compiled with the same `-G NUM' value.
15293
15294`-mregnames'
15295`-mno-regnames'
15296     On System V.4 and embedded PowerPC systems do (do not) emit
15297     register names in the assembly language output using symbolic
15298     forms.
15299
15300`-mlongcall'
15301`-mno-longcall'
15302     By default assume that all calls are far away so that a longer more
15303     expensive calling sequence is required.  This is required for calls
15304     further than 32 megabytes (33,554,432 bytes) from the current
15305     location.  A short call will be generated if the compiler knows
15306     the call cannot be that far away.  This setting can be overridden
15307     by the `shortcall' function attribute, or by `#pragma longcall(0)'.
15308
15309     Some linkers are capable of detecting out-of-range calls and
15310     generating glue code on the fly.  On these systems, long calls are
15311     unnecessary and generate slower code.  As of this writing, the AIX
15312     linker can do this, as can the GNU linker for PowerPC/64.  It is
15313     planned to add this feature to the GNU linker for 32-bit PowerPC
15314     systems as well.
15315
15316     On Darwin/PPC systems, `#pragma longcall' will generate "jbsr
15317     callee, L42", plus a "branch island" (glue code).  The two target
15318     addresses represent the callee and the "branch island".  The
15319     Darwin/PPC linker will prefer the first address and generate a "bl
15320     callee" if the PPC "bl" instruction will reach the callee directly;
15321     otherwise, the linker will generate "bl L42" to call the "branch
15322     island".  The "branch island" is appended to the body of the
15323     calling function; it computes the full 32-bit address of the callee
15324     and jumps to it.
15325
15326     On Mach-O (Darwin) systems, this option directs the compiler emit
15327     to the glue for every direct call, and the Darwin linker decides
15328     whether to use or discard it.
15329
15330     In the future, we may cause GCC to ignore all longcall
15331     specifications when the linker is known to generate glue.
15332
15333`-mtls-markers'
15334`-mno-tls-markers'
15335     Mark (do not mark) calls to `__tls_get_addr' with a relocation
15336     specifying the function argument.  The relocation allows ld to
15337     reliably associate function call with argument setup instructions
15338     for TLS optimization, which in turn allows gcc to better schedule
15339     the sequence.
15340
15341`-pthread'
15342     Adds support for multithreading with the "pthreads" library.  This
15343     option sets flags for both the preprocessor and linker.
15344
15345`-mrecip'
15346`-mno-recip'
15347     This option will enable GCC to use the reciprocal estimate and
15348     reciprocal square root estimate instructions with additional
15349     Newton-Raphson steps to increase precision instead of doing a
15350     divide or square root and divide for floating point arguments.
15351     You should use the `-ffast-math' option when using `-mrecip' (or at
15352     least `-funsafe-math-optimizations', `-finite-math-only',
15353     `-freciprocal-math' and `-fno-trapping-math').  Note that while
15354     the throughput of the sequence is generally higher than the
15355     throughput of the non-reciprocal instruction, the precision of the
15356     sequence can be decreased by up to 2 ulp (i.e. the inverse of 1.0
15357     equals 0.99999994) for reciprocal square roots.
15358
15359`-mrecip=OPT'
15360     This option allows to control which reciprocal estimate
15361     instructions may be used.  OPT is a comma separated list of
15362     options, that may be preceded by a `!' to invert the option:
15363     `all': enable all estimate instructions, `default': enable the
15364     default instructions, equivalent to `-mrecip', `none': disable all
15365     estimate instructions, equivalent to `-mno-recip'; `div': enable
15366     the reciprocal approximation instructions for both single and
15367     double precision; `divf': enable the single precision reciprocal
15368     approximation instructions; `divd': enable the double precision
15369     reciprocal approximation instructions; `rsqrt': enable the
15370     reciprocal square root approximation instructions for both single
15371     and double precision; `rsqrtf': enable the single precision
15372     reciprocal square root approximation instructions; `rsqrtd':
15373     enable the double precision reciprocal square root approximation
15374     instructions;
15375
15376     So for example, `-mrecip=all,!rsqrtd' would enable the all of the
15377     reciprocal estimate instructions, except for the `FRSQRTE',
15378     `XSRSQRTEDP', and `XVRSQRTEDP' instructions which handle the
15379     double precision reciprocal square root calculations.
15380
15381`-mrecip-precision'
15382`-mno-recip-precision'
15383     Assume (do not assume) that the reciprocal estimate instructions
15384     provide higher precision estimates than is mandated by the powerpc
15385     ABI.  Selecting `-mcpu=power6' or `-mcpu=power7' automatically
15386     selects `-mrecip-precision'.  The double precision square root
15387     estimate instructions are not generated by default on low
15388     precision machines, since they do not provide an estimate that
15389     converges after three steps.
15390
15391`-mveclibabi=TYPE'
15392     Specifies the ABI type to use for vectorizing intrinsics using an
15393     external library.  The only type supported at present is `mass',
15394     which specifies to use IBM's Mathematical Acceleration Subsystem
15395     (MASS) libraries for vectorizing intrinsics using external
15396     libraries.  GCC will currently emit calls to `acosd2', `acosf4',
15397     `acoshd2', `acoshf4', `asind2', `asinf4', `asinhd2', `asinhf4',
15398     `atan2d2', `atan2f4', `atand2', `atanf4', `atanhd2', `atanhf4',
15399     `cbrtd2', `cbrtf4', `cosd2', `cosf4', `coshd2', `coshf4',
15400     `erfcd2', `erfcf4', `erfd2', `erff4', `exp2d2', `exp2f4', `expd2',
15401     `expf4', `expm1d2', `expm1f4', `hypotd2', `hypotf4', `lgammad2',
15402     `lgammaf4', `log10d2', `log10f4', `log1pd2', `log1pf4', `log2d2',
15403     `log2f4', `logd2', `logf4', `powd2', `powf4', `sind2', `sinf4',
15404     `sinhd2', `sinhf4', `sqrtd2', `sqrtf4', `tand2', `tanf4',
15405     `tanhd2', and `tanhf4' when generating code for power7.  Both
15406     `-ftree-vectorize' and `-funsafe-math-optimizations' have to be
15407     enabled.  The MASS libraries will have to be specified at link
15408     time.
15409
15410`-mfriz'
15411`-mno-friz'
15412     Generate (do not generate) the `friz' instruction when the
15413     `-funsafe-math-optimizations' option is used to optimize rounding
15414     a floating point value to 64-bit integer and back to floating
15415     point.  The `friz' instruction does not return the same value if
15416     the floating point number is too large to fit in an integer.
15417
15418
15419File: gcc.info,  Node: RX Options,  Next: S/390 and zSeries Options,  Prev: RS/6000 and PowerPC Options,  Up: Submodel Options
15420
154213.17.34 RX Options
15422------------------
15423
15424These command line options are defined for RX targets:
15425
15426`-m64bit-doubles'
15427`-m32bit-doubles'
15428     Make the `double' data type be 64-bits (`-m64bit-doubles') or
15429     32-bits (`-m32bit-doubles') in size.  The default is
15430     `-m32bit-doubles'.  _Note_ RX floating point hardware only works
15431     on 32-bit values, which is why the default is `-m32bit-doubles'.
15432
15433`-fpu'
15434`-nofpu'
15435     Enables (`-fpu') or disables (`-nofpu') the use of RX floating
15436     point hardware.  The default is enabled for the RX600 series and
15437     disabled for the RX200 series.
15438
15439     Floating point instructions will only be generated for 32-bit
15440     floating point values however, so if the `-m64bit-doubles' option
15441     is in use then the FPU hardware will not be used for doubles.
15442
15443     _Note_ If the `-fpu' option is enabled then
15444     `-funsafe-math-optimizations' is also enabled automatically.  This
15445     is because the RX FPU instructions are themselves unsafe.
15446
15447`-mcpu=NAME'
15448     Selects the type of RX CPU to be targeted.  Currently three types
15449     are supported, the generic RX600 and RX200 series hardware and the
15450     specific RX610 CPU.  The default is RX600.
15451
15452     The only difference between RX600 and RX610 is that the RX610 does
15453     not support the `MVTIPL' instruction.
15454
15455     The RX200 series does not have a hardware floating point unit and
15456     so `-nofpu' is enabled by default when this type is selected.
15457
15458`-mbig-endian-data'
15459`-mlittle-endian-data'
15460     Store data (but not code) in the big-endian format.  The default is
15461     `-mlittle-endian-data', i.e. to store data in the little endian
15462     format.
15463
15464`-msmall-data-limit=N'
15465     Specifies the maximum size in bytes of global and static variables
15466     which can be placed into the small data area.  Using the small data
15467     area can lead to smaller and faster code, but the size of area is
15468     limited and it is up to the programmer to ensure that the area does
15469     not overflow.  Also when the small data area is used one of the
15470     RX's registers (`r13') is reserved for use pointing to this area,
15471     so it is no longer available for use by the compiler.  This could
15472     result in slower and/or larger code if variables which once could
15473     have been held in `r13' are now pushed onto the stack.
15474
15475     Note, common variables (variables which have not been initialised)
15476     and constants are not placed into the small data area as they are
15477     assigned to other sections in the output executable.
15478
15479     The default value is zero, which disables this feature.  Note, this
15480     feature is not enabled by default with higher optimization levels
15481     (`-O2' etc) because of the potentially detrimental effects of
15482     reserving register `r13'.  It is up to the programmer to
15483     experiment and discover whether this feature is of benefit to their
15484     program.
15485
15486`-msim'
15487`-mno-sim'
15488     Use the simulator runtime.  The default is to use the libgloss
15489     board specific runtime.
15490
15491`-mas100-syntax'
15492`-mno-as100-syntax'
15493     When generating assembler output use a syntax that is compatible
15494     with Renesas's AS100 assembler.  This syntax can also be handled
15495     by the GAS assembler but it has some restrictions so generating it
15496     is not the default option.
15497
15498`-mmax-constant-size=N'
15499     Specifies the maximum size, in bytes, of a constant that can be
15500     used as an operand in a RX instruction.  Although the RX
15501     instruction set does allow constants of up to 4 bytes in length to
15502     be used in instructions, a longer value equates to a longer
15503     instruction.  Thus in some circumstances it can be beneficial to
15504     restrict the size of constants that are used in instructions.
15505     Constants that are too big are instead placed into a constant pool
15506     and referenced via register indirection.
15507
15508     The value N can be between 0 and 4.  A value of 0 (the default) or
15509     4 means that constants of any size are allowed.
15510
15511`-mrelax'
15512     Enable linker relaxation.  Linker relaxation is a process whereby
15513     the linker will attempt to reduce the size of a program by finding
15514     shorter versions of various instructions.  Disabled by default.
15515
15516`-mint-register=N'
15517     Specify the number of registers to reserve for fast interrupt
15518     handler functions.  The value N can be between 0 and 4.  A value
15519     of 1 means that register `r13' will be reserved for the exclusive
15520     use of fast interrupt handlers.  A value of 2 reserves `r13' and
15521     `r12'.  A value of 3 reserves `r13', `r12' and `r11', and a value
15522     of 4 reserves `r13' through `r10'.  A value of 0, the default,
15523     does not reserve any registers.
15524
15525`-msave-acc-in-interrupts'
15526     Specifies that interrupt handler functions should preserve the
15527     accumulator register.  This is only necessary if normal code might
15528     use the accumulator register, for example because it performs
15529     64-bit multiplications.  The default is to ignore the accumulator
15530     as this makes the interrupt handlers faster.
15531
15532
15533 _Note:_ The generic GCC command line `-ffixed-REG' has special
15534significance to the RX port when used with the `interrupt' function
15535attribute.  This attribute indicates a function intended to process
15536fast interrupts.  GCC will will ensure that it only uses the registers
15537`r10', `r11', `r12' and/or `r13' and only provided that the normal use
15538of the corresponding registers have been restricted via the
15539`-ffixed-REG' or `-mint-register' command line options.
15540
15541
15542File: gcc.info,  Node: S/390 and zSeries Options,  Next: Score Options,  Prev: RX Options,  Up: Submodel Options
15543
155443.17.35 S/390 and zSeries Options
15545---------------------------------
15546
15547These are the `-m' options defined for the S/390 and zSeries
15548architecture.
15549
15550`-mhard-float'
15551`-msoft-float'
15552     Use (do not use) the hardware floating-point instructions and
15553     registers for floating-point operations.  When `-msoft-float' is
15554     specified, functions in `libgcc.a' will be used to perform
15555     floating-point operations.  When `-mhard-float' is specified, the
15556     compiler generates IEEE floating-point instructions.  This is the
15557     default.
15558
15559`-mhard-dfp'
15560`-mno-hard-dfp'
15561     Use (do not use) the hardware decimal-floating-point instructions
15562     for decimal-floating-point operations.  When `-mno-hard-dfp' is
15563     specified, functions in `libgcc.a' will be used to perform
15564     decimal-floating-point operations.  When `-mhard-dfp' is
15565     specified, the compiler generates decimal-floating-point hardware
15566     instructions.  This is the default for `-march=z9-ec' or higher.
15567
15568`-mlong-double-64'
15569`-mlong-double-128'
15570     These switches control the size of `long double' type. A size of
15571     64bit makes the `long double' type equivalent to the `double'
15572     type. This is the default.
15573
15574`-mbackchain'
15575`-mno-backchain'
15576     Store (do not store) the address of the caller's frame as
15577     backchain pointer into the callee's stack frame.  A backchain may
15578     be needed to allow debugging using tools that do not understand
15579     DWARF-2 call frame information.  When `-mno-packed-stack' is in
15580     effect, the backchain pointer is stored at the bottom of the stack
15581     frame; when `-mpacked-stack' is in effect, the backchain is placed
15582     into the topmost word of the 96/160 byte register save area.
15583
15584     In general, code compiled with `-mbackchain' is call-compatible
15585     with code compiled with `-mmo-backchain'; however, use of the
15586     backchain for debugging purposes usually requires that the whole
15587     binary is built with `-mbackchain'.  Note that the combination of
15588     `-mbackchain', `-mpacked-stack' and `-mhard-float' is not
15589     supported.  In order to build a linux kernel use `-msoft-float'.
15590
15591     The default is to not maintain the backchain.
15592
15593`-mpacked-stack'
15594`-mno-packed-stack'
15595     Use (do not use) the packed stack layout.  When
15596     `-mno-packed-stack' is specified, the compiler uses the all fields
15597     of the 96/160 byte register save area only for their default
15598     purpose; unused fields still take up stack space.  When
15599     `-mpacked-stack' is specified, register save slots are densely
15600     packed at the top of the register save area; unused space is
15601     reused for other purposes, allowing for more efficient use of the
15602     available stack space.  However, when `-mbackchain' is also in
15603     effect, the topmost word of the save area is always used to store
15604     the backchain, and the return address register is always saved two
15605     words below the backchain.
15606
15607     As long as the stack frame backchain is not used, code generated
15608     with `-mpacked-stack' is call-compatible with code generated with
15609     `-mno-packed-stack'.  Note that some non-FSF releases of GCC 2.95
15610     for S/390 or zSeries generated code that uses the stack frame
15611     backchain at run time, not just for debugging purposes.  Such code
15612     is not call-compatible with code compiled with `-mpacked-stack'.
15613     Also, note that the combination of `-mbackchain', `-mpacked-stack'
15614     and `-mhard-float' is not supported.  In order to build a linux
15615     kernel use `-msoft-float'.
15616
15617     The default is to not use the packed stack layout.
15618
15619`-msmall-exec'
15620`-mno-small-exec'
15621     Generate (or do not generate) code using the `bras' instruction to
15622     do subroutine calls.  This only works reliably if the total
15623     executable size does not exceed 64k.  The default is to use the
15624     `basr' instruction instead, which does not have this limitation.
15625
15626`-m64'
15627`-m31'
15628     When `-m31' is specified, generate code compliant to the GNU/Linux
15629     for S/390 ABI.  When `-m64' is specified, generate code compliant
15630     to the GNU/Linux for zSeries ABI.  This allows GCC in particular
15631     to generate 64-bit instructions.  For the `s390' targets, the
15632     default is `-m31', while the `s390x' targets default to `-m64'.
15633
15634`-mzarch'
15635`-mesa'
15636     When `-mzarch' is specified, generate code using the instructions
15637     available on z/Architecture.  When `-mesa' is specified, generate
15638     code using the instructions available on ESA/390.  Note that
15639     `-mesa' is not possible with `-m64'.  When generating code
15640     compliant to the GNU/Linux for S/390 ABI, the default is `-mesa'.
15641     When generating code compliant to the GNU/Linux for zSeries ABI,
15642     the default is `-mzarch'.
15643
15644`-mmvcle'
15645`-mno-mvcle'
15646     Generate (or do not generate) code using the `mvcle' instruction
15647     to perform block moves.  When `-mno-mvcle' is specified, use a
15648     `mvc' loop instead.  This is the default unless optimizing for
15649     size.
15650
15651`-mdebug'
15652`-mno-debug'
15653     Print (or do not print) additional debug information when
15654     compiling.  The default is to not print debug information.
15655
15656`-march=CPU-TYPE'
15657     Generate code that will run on CPU-TYPE, which is the name of a
15658     system representing a certain processor type.  Possible values for
15659     CPU-TYPE are `g5', `g6', `z900', `z990', `z9-109', `z9-ec' and
15660     `z10'.  When generating code using the instructions available on
15661     z/Architecture, the default is `-march=z900'.  Otherwise, the
15662     default is `-march=g5'.
15663
15664`-mtune=CPU-TYPE'
15665     Tune to CPU-TYPE everything applicable about the generated code,
15666     except for the ABI and the set of available instructions.  The
15667     list of CPU-TYPE values is the same as for `-march'.  The default
15668     is the value used for `-march'.
15669
15670`-mtpf-trace'
15671`-mno-tpf-trace'
15672     Generate code that adds (does not add) in TPF OS specific branches
15673     to trace routines in the operating system.  This option is off by
15674     default, even when compiling for the TPF OS.
15675
15676`-mfused-madd'
15677`-mno-fused-madd'
15678     Generate code that uses (does not use) the floating point multiply
15679     and accumulate instructions.  These instructions are generated by
15680     default if hardware floating point is used.
15681
15682`-mwarn-framesize=FRAMESIZE'
15683     Emit a warning if the current function exceeds the given frame
15684     size.  Because this is a compile time check it doesn't need to be
15685     a real problem when the program runs.  It is intended to identify
15686     functions which most probably cause a stack overflow.  It is
15687     useful to be used in an environment with limited stack size e.g.
15688     the linux kernel.
15689
15690`-mwarn-dynamicstack'
15691     Emit a warning if the function calls alloca or uses dynamically
15692     sized arrays.  This is generally a bad idea with a limited stack
15693     size.
15694
15695`-mstack-guard=STACK-GUARD'
15696`-mstack-size=STACK-SIZE'
15697     If these options are provided the s390 back end emits additional
15698     instructions in the function prologue which trigger a trap if the
15699     stack size is STACK-GUARD bytes above the STACK-SIZE (remember
15700     that the stack on s390 grows downward).  If the STACK-GUARD option
15701     is omitted the smallest power of 2 larger than the frame size of
15702     the compiled function is chosen.  These options are intended to be
15703     used to help debugging stack overflow problems.  The additionally
15704     emitted code causes only little overhead and hence can also be
15705     used in production like systems without greater performance
15706     degradation.  The given values have to be exact powers of 2 and
15707     STACK-SIZE has to be greater than STACK-GUARD without exceeding
15708     64k.  In order to be efficient the extra code makes the assumption
15709     that the stack starts at an address aligned to the value given by
15710     STACK-SIZE.  The STACK-GUARD option can only be used in
15711     conjunction with STACK-SIZE.
15712
15713
15714File: gcc.info,  Node: Score Options,  Next: SH Options,  Prev: S/390 and zSeries Options,  Up: Submodel Options
15715
157163.17.36 Score Options
15717---------------------
15718
15719These options are defined for Score implementations:
15720
15721`-meb'
15722     Compile code for big endian mode.  This is the default.
15723
15724`-mel'
15725     Compile code for little endian mode.
15726
15727`-mnhwloop'
15728     Disable generate bcnz instruction.
15729
15730`-muls'
15731     Enable generate unaligned load and store instruction.
15732
15733`-mmac'
15734     Enable the use of multiply-accumulate instructions. Disabled by
15735     default.
15736
15737`-mscore5'
15738     Specify the SCORE5 as the target architecture.
15739
15740`-mscore5u'
15741     Specify the SCORE5U of the target architecture.
15742
15743`-mscore7'
15744     Specify the SCORE7 as the target architecture. This is the default.
15745
15746`-mscore7d'
15747     Specify the SCORE7D as the target architecture.
15748
15749
15750File: gcc.info,  Node: SH Options,  Next: Solaris 2 Options,  Prev: Score Options,  Up: Submodel Options
15751
157523.17.37 SH Options
15753------------------
15754
15755These `-m' options are defined for the SH implementations:
15756
15757`-m1'
15758     Generate code for the SH1.
15759
15760`-m2'
15761     Generate code for the SH2.
15762
15763`-m2e'
15764     Generate code for the SH2e.
15765
15766`-m2a-nofpu'
15767     Generate code for the SH2a without FPU, or for a SH2a-FPU in such
15768     a way that the floating-point unit is not used.
15769
15770`-m2a-single-only'
15771     Generate code for the SH2a-FPU, in such a way that no
15772     double-precision floating point operations are used.
15773
15774`-m2a-single'
15775     Generate code for the SH2a-FPU assuming the floating-point unit is
15776     in single-precision mode by default.
15777
15778`-m2a'
15779     Generate code for the SH2a-FPU assuming the floating-point unit is
15780     in double-precision mode by default.
15781
15782`-m3'
15783     Generate code for the SH3.
15784
15785`-m3e'
15786     Generate code for the SH3e.
15787
15788`-m4-nofpu'
15789     Generate code for the SH4 without a floating-point unit.
15790
15791`-m4-single-only'
15792     Generate code for the SH4 with a floating-point unit that only
15793     supports single-precision arithmetic.
15794
15795`-m4-single'
15796     Generate code for the SH4 assuming the floating-point unit is in
15797     single-precision mode by default.
15798
15799`-m4'
15800     Generate code for the SH4.
15801
15802`-m4a-nofpu'
15803     Generate code for the SH4al-dsp, or for a SH4a in such a way that
15804     the floating-point unit is not used.
15805
15806`-m4a-single-only'
15807     Generate code for the SH4a, in such a way that no double-precision
15808     floating point operations are used.
15809
15810`-m4a-single'
15811     Generate code for the SH4a assuming the floating-point unit is in
15812     single-precision mode by default.
15813
15814`-m4a'
15815     Generate code for the SH4a.
15816
15817`-m4al'
15818     Same as `-m4a-nofpu', except that it implicitly passes `-dsp' to
15819     the assembler.  GCC doesn't generate any DSP instructions at the
15820     moment.
15821
15822`-mb'
15823     Compile code for the processor in big endian mode.
15824
15825`-ml'
15826     Compile code for the processor in little endian mode.
15827
15828`-mdalign'
15829     Align doubles at 64-bit boundaries.  Note that this changes the
15830     calling conventions, and thus some functions from the standard C
15831     library will not work unless you recompile it first with
15832     `-mdalign'.
15833
15834`-mrelax'
15835     Shorten some address references at link time, when possible; uses
15836     the linker option `-relax'.
15837
15838`-mbigtable'
15839     Use 32-bit offsets in `switch' tables.  The default is to use
15840     16-bit offsets.
15841
15842`-mbitops'
15843     Enable the use of bit manipulation instructions on SH2A.
15844
15845`-mfmovd'
15846     Enable the use of the instruction `fmovd'.  Check `-mdalign' for
15847     alignment constraints.
15848
15849`-mhitachi'
15850     Comply with the calling conventions defined by Renesas.
15851
15852`-mrenesas'
15853     Comply with the calling conventions defined by Renesas.
15854
15855`-mno-renesas'
15856     Comply with the calling conventions defined for GCC before the
15857     Renesas conventions were available.  This option is the default
15858     for all targets of the SH toolchain except for `sh-symbianelf'.
15859
15860`-mnomacsave'
15861     Mark the `MAC' register as call-clobbered, even if `-mhitachi' is
15862     given.
15863
15864`-mieee'
15865     Increase IEEE-compliance of floating-point code.  At the moment,
15866     this is equivalent to `-fno-finite-math-only'.  When generating 16
15867     bit SH opcodes, getting IEEE-conforming results for comparisons of
15868     NANs / infinities incurs extra overhead in every floating point
15869     comparison, therefore the default is set to `-ffinite-math-only'.
15870
15871`-minline-ic_invalidate'
15872     Inline code to invalidate instruction cache entries after setting
15873     up nested function trampolines.  This option has no effect if
15874     -musermode is in effect and the selected code generation option
15875     (e.g. -m4) does not allow the use of the icbi instruction.  If the
15876     selected code generation option does not allow the use of the icbi
15877     instruction, and -musermode is not in effect, the inlined code will
15878     manipulate the instruction cache address array directly with an
15879     associative write.  This not only requires privileged mode, but it
15880     will also fail if the cache line had been mapped via the TLB and
15881     has become unmapped.
15882
15883`-misize'
15884     Dump instruction size and location in the assembly code.
15885
15886`-mpadstruct'
15887     This option is deprecated.  It pads structures to multiple of 4
15888     bytes, which is incompatible with the SH ABI.
15889
15890`-mspace'
15891     Optimize for space instead of speed.  Implied by `-Os'.
15892
15893`-mprefergot'
15894     When generating position-independent code, emit function calls
15895     using the Global Offset Table instead of the Procedure Linkage
15896     Table.
15897
15898`-musermode'
15899     Don't generate privileged mode only code; implies
15900     -mno-inline-ic_invalidate if the inlined code would not work in
15901     user mode.  This is the default when the target is `sh-*-linux*'.
15902
15903`-multcost=NUMBER'
15904     Set the cost to assume for a multiply insn.
15905
15906`-mdiv=STRATEGY'
15907     Set the division strategy to use for SHmedia code.  STRATEGY must
15908     be one of: call, call2, fp, inv, inv:minlat, inv20u, inv20l,
15909     inv:call, inv:call2, inv:fp .  "fp" performs the operation in
15910     floating point.  This has a very high latency, but needs only a
15911     few instructions, so it might be a good choice if your code has
15912     enough easily exploitable ILP to allow the compiler to schedule
15913     the floating point instructions together with other instructions.
15914     Division by zero causes a floating point exception.  "inv" uses
15915     integer operations to calculate the inverse of the divisor, and
15916     then multiplies the dividend with the inverse.  This strategy
15917     allows cse and hoisting of the inverse calculation.  Division by
15918     zero calculates an unspecified result, but does not trap.
15919     "inv:minlat" is a variant of "inv" where if no cse / hoisting
15920     opportunities have been found, or if the entire operation has been
15921     hoisted to the same place, the last stages of the inverse
15922     calculation are intertwined with the final multiply to reduce the
15923     overall latency, at the expense of using a few more instructions,
15924     and thus offering fewer scheduling opportunities with other code.
15925     "call" calls a library function that usually implements the
15926     inv:minlat strategy.  This gives high code density for
15927     m5-*media-nofpu compilations.  "call2" uses a different entry
15928     point of the same library function, where it assumes that a
15929     pointer to a lookup table has already been set up, which exposes
15930     the pointer load to cse / code hoisting optimizations.
15931     "inv:call", "inv:call2" and "inv:fp" all use the "inv" algorithm
15932     for initial code generation, but if the code stays unoptimized,
15933     revert to the "call", "call2", or "fp" strategies, respectively.
15934     Note that the potentially-trapping side effect of division by zero
15935     is carried by a separate instruction, so it is possible that all
15936     the integer instructions are hoisted out, but the marker for the
15937     side effect stays where it is.  A recombination to fp operations
15938     or a call is not possible in that case.  "inv20u" and "inv20l" are
15939     variants of the "inv:minlat" strategy.  In the case that the
15940     inverse calculation was nor separated from the multiply, they speed
15941     up division where the dividend fits into 20 bits (plus sign where
15942     applicable), by inserting a test to skip a number of operations in
15943     this case; this test slows down the case of larger dividends.
15944     inv20u assumes the case of a such a small dividend to be unlikely,
15945     and inv20l assumes it to be likely.
15946
15947`-maccumulate-outgoing-args'
15948     Reserve space once for outgoing arguments in the function prologue
15949     rather than around each call.  Generally beneficial for
15950     performance and size.  Also needed for unwinding to avoid changing
15951     the stack frame around conditional code.
15952
15953`-mdivsi3_libfunc=NAME'
15954     Set the name of the library function used for 32 bit signed
15955     division to NAME.  This only affect the name used in the call and
15956     inv:call division strategies, and the compiler will still expect
15957     the same sets of input/output/clobbered registers as if this
15958     option was not present.
15959
15960`-mfixed-range=REGISTER-RANGE'
15961     Generate code treating the given register range as fixed registers.
15962     A fixed register is one that the register allocator can not use.
15963     This is useful when compiling kernel code.  A register range is
15964     specified as two registers separated by a dash.  Multiple register
15965     ranges can be specified separated by a comma.
15966
15967`-madjust-unroll'
15968     Throttle unrolling to avoid thrashing target registers.  This
15969     option only has an effect if the gcc code base supports the
15970     TARGET_ADJUST_UNROLL_MAX target hook.
15971
15972`-mindexed-addressing'
15973     Enable the use of the indexed addressing mode for
15974     SHmedia32/SHcompact.  This is only safe if the hardware and/or OS
15975     implement 32 bit wrap-around semantics for the indexed addressing
15976     mode.  The architecture allows the implementation of processors
15977     with 64 bit MMU, which the OS could use to get 32 bit addressing,
15978     but since no current hardware implementation supports this or any
15979     other way to make the indexed addressing mode safe to use in the
15980     32 bit ABI, the default is -mno-indexed-addressing.
15981
15982`-mgettrcost=NUMBER'
15983     Set the cost assumed for the gettr instruction to NUMBER.  The
15984     default is 2 if `-mpt-fixed' is in effect, 100 otherwise.
15985
15986`-mpt-fixed'
15987     Assume pt* instructions won't trap.  This will generally generate
15988     better scheduled code, but is unsafe on current hardware.  The
15989     current architecture definition says that ptabs and ptrel trap
15990     when the target anded with 3 is 3.  This has the unintentional
15991     effect of making it unsafe to schedule ptabs / ptrel before a
15992     branch, or hoist it out of a loop.  For example,
15993     __do_global_ctors, a part of libgcc that runs constructors at
15994     program startup, calls functions in a list which is delimited by
15995     -1.  With the -mpt-fixed option, the ptabs will be done before
15996     testing against -1.  That means that all the constructors will be
15997     run a bit quicker, but when the loop comes to the end of the list,
15998     the program crashes because ptabs loads -1 into a target register.
15999     Since this option is unsafe for any hardware implementing the
16000     current architecture specification, the default is -mno-pt-fixed.
16001     Unless the user specifies a specific cost with `-mgettrcost',
16002     -mno-pt-fixed also implies `-mgettrcost=100'; this deters register
16003     allocation using target registers for storing ordinary integers.
16004
16005`-minvalid-symbols'
16006     Assume symbols might be invalid.  Ordinary function symbols
16007     generated by the compiler will always be valid to load with
16008     movi/shori/ptabs or movi/shori/ptrel, but with assembler and/or
16009     linker tricks it is possible to generate symbols that will cause
16010     ptabs / ptrel to trap.  This option is only meaningful when
16011     `-mno-pt-fixed' is in effect.  It will then prevent
16012     cross-basic-block cse, hoisting and most scheduling of symbol
16013     loads.  The default is `-mno-invalid-symbols'.
16014
16015
16016File: gcc.info,  Node: Solaris 2 Options,  Next: SPARC Options,  Prev: SH Options,  Up: Submodel Options
16017
160183.17.38 Solaris 2 Options
16019-------------------------
16020
16021These `-m' options are supported on Solaris 2:
16022
16023`-mimpure-text'
16024     `-mimpure-text', used in addition to `-shared', tells the compiler
16025     to not pass `-z text' to the linker when linking a shared object.
16026     Using this option, you can link position-dependent code into a
16027     shared object.
16028
16029     `-mimpure-text' suppresses the "relocations remain against
16030     allocatable but non-writable sections" linker error message.
16031     However, the necessary relocations will trigger copy-on-write, and
16032     the shared object is not actually shared across processes.
16033     Instead of using `-mimpure-text', you should compile all source
16034     code with `-fpic' or `-fPIC'.
16035
16036
16037 These switches are supported in addition to the above on Solaris 2:
16038
16039`-threads'
16040     Add support for multithreading using the Solaris threads library.
16041     This option sets flags for both the preprocessor and linker.  This
16042     option does not affect the thread safety of object code produced
16043     by the compiler or that of libraries supplied with it.
16044
16045`-pthreads'
16046     Add support for multithreading using the POSIX threads library.
16047     This option sets flags for both the preprocessor and linker.  This
16048     option does not affect the thread safety of object code produced
16049     by the compiler or that of libraries supplied with it.
16050
16051`-pthread'
16052     This is a synonym for `-pthreads'.
16053
16054
16055File: gcc.info,  Node: SPARC Options,  Next: SPU Options,  Prev: Solaris 2 Options,  Up: Submodel Options
16056
160573.17.39 SPARC Options
16058---------------------
16059
16060These `-m' options are supported on the SPARC:
16061
16062`-mno-app-regs'
16063`-mapp-regs'
16064     Specify `-mapp-regs' to generate output using the global registers
16065     2 through 4, which the SPARC SVR4 ABI reserves for applications.
16066     This is the default.
16067
16068     To be fully SVR4 ABI compliant at the cost of some performance
16069     loss, specify `-mno-app-regs'.  You should compile libraries and
16070     system software with this option.
16071
16072`-mfpu'
16073`-mhard-float'
16074     Generate output containing floating point instructions.  This is
16075     the default.
16076
16077`-mno-fpu'
16078`-msoft-float'
16079     Generate output containing library calls for floating point.
16080     *Warning:* the requisite libraries are not available for all SPARC
16081     targets.  Normally the facilities of the machine's usual C
16082     compiler are used, but this cannot be done directly in
16083     cross-compilation.  You must make your own arrangements to provide
16084     suitable library functions for cross-compilation.  The embedded
16085     targets `sparc-*-aout' and `sparclite-*-*' do provide software
16086     floating point support.
16087
16088     `-msoft-float' changes the calling convention in the output file;
16089     therefore, it is only useful if you compile _all_ of a program with
16090     this option.  In particular, you need to compile `libgcc.a', the
16091     library that comes with GCC, with `-msoft-float' in order for this
16092     to work.
16093
16094`-mhard-quad-float'
16095     Generate output containing quad-word (long double) floating point
16096     instructions.
16097
16098`-msoft-quad-float'
16099     Generate output containing library calls for quad-word (long
16100     double) floating point instructions.  The functions called are
16101     those specified in the SPARC ABI.  This is the default.
16102
16103     As of this writing, there are no SPARC implementations that have
16104     hardware support for the quad-word floating point instructions.
16105     They all invoke a trap handler for one of these instructions, and
16106     then the trap handler emulates the effect of the instruction.
16107     Because of the trap handler overhead, this is much slower than
16108     calling the ABI library routines.  Thus the `-msoft-quad-float'
16109     option is the default.
16110
16111`-mno-unaligned-doubles'
16112`-munaligned-doubles'
16113     Assume that doubles have 8 byte alignment.  This is the default.
16114
16115     With `-munaligned-doubles', GCC assumes that doubles have 8 byte
16116     alignment only if they are contained in another type, or if they
16117     have an absolute address.  Otherwise, it assumes they have 4 byte
16118     alignment.  Specifying this option avoids some rare compatibility
16119     problems with code generated by other compilers.  It is not the
16120     default because it results in a performance loss, especially for
16121     floating point code.
16122
16123`-mno-faster-structs'
16124`-mfaster-structs'
16125     With `-mfaster-structs', the compiler assumes that structures
16126     should have 8 byte alignment.  This enables the use of pairs of
16127     `ldd' and `std' instructions for copies in structure assignment,
16128     in place of twice as many `ld' and `st' pairs.  However, the use
16129     of this changed alignment directly violates the SPARC ABI.  Thus,
16130     it's intended only for use on targets where the developer
16131     acknowledges that their resulting code will not be directly in
16132     line with the rules of the ABI.
16133
16134`-mcpu=CPU_TYPE'
16135     Set the instruction set, register set, and instruction scheduling
16136     parameters for machine type CPU_TYPE.  Supported values for
16137     CPU_TYPE are `v7', `cypress', `v8', `supersparc', `hypersparc',
16138     `leon', `sparclite', `f930', `f934', `sparclite86x', `sparclet',
16139     `tsc701', `v9', `ultrasparc', `ultrasparc3', `niagara' and
16140     `niagara2'.
16141
16142     Default instruction scheduling parameters are used for values that
16143     select an architecture and not an implementation.  These are `v7',
16144     `v8', `sparclite', `sparclet', `v9'.
16145
16146     Here is a list of each supported architecture and their supported
16147     implementations.
16148
16149              v7:             cypress
16150              v8:             supersparc, hypersparc, leon
16151              sparclite:      f930, f934, sparclite86x
16152              sparclet:       tsc701
16153              v9:             ultrasparc, ultrasparc3, niagara, niagara2
16154
16155     By default (unless configured otherwise), GCC generates code for
16156     the V7 variant of the SPARC architecture.  With `-mcpu=cypress',
16157     the compiler additionally optimizes it for the Cypress CY7C602
16158     chip, as used in the SPARCStation/SPARCServer 3xx series.  This is
16159     also appropriate for the older SPARCStation 1, 2, IPX etc.
16160
16161     With `-mcpu=v8', GCC generates code for the V8 variant of the SPARC
16162     architecture.  The only difference from V7 code is that the
16163     compiler emits the integer multiply and integer divide
16164     instructions which exist in SPARC-V8 but not in SPARC-V7.  With
16165     `-mcpu=supersparc', the compiler additionally optimizes it for the
16166     SuperSPARC chip, as used in the SPARCStation 10, 1000 and 2000
16167     series.
16168
16169     With `-mcpu=sparclite', GCC generates code for the SPARClite
16170     variant of the SPARC architecture.  This adds the integer
16171     multiply, integer divide step and scan (`ffs') instructions which
16172     exist in SPARClite but not in SPARC-V7.  With `-mcpu=f930', the
16173     compiler additionally optimizes it for the Fujitsu MB86930 chip,
16174     which is the original SPARClite, with no FPU.  With `-mcpu=f934',
16175     the compiler additionally optimizes it for the Fujitsu MB86934
16176     chip, which is the more recent SPARClite with FPU.
16177
16178     With `-mcpu=sparclet', GCC generates code for the SPARClet variant
16179     of the SPARC architecture.  This adds the integer multiply,
16180     multiply/accumulate, integer divide step and scan (`ffs')
16181     instructions which exist in SPARClet but not in SPARC-V7.  With
16182     `-mcpu=tsc701', the compiler additionally optimizes it for the
16183     TEMIC SPARClet chip.
16184
16185     With `-mcpu=v9', GCC generates code for the V9 variant of the SPARC
16186     architecture.  This adds 64-bit integer and floating-point move
16187     instructions, 3 additional floating-point condition code registers
16188     and conditional move instructions.  With `-mcpu=ultrasparc', the
16189     compiler additionally optimizes it for the Sun UltraSPARC I/II/IIi
16190     chips.  With `-mcpu=ultrasparc3', the compiler additionally
16191     optimizes it for the Sun UltraSPARC III/III+/IIIi/IIIi+/IV/IV+
16192     chips.  With `-mcpu=niagara', the compiler additionally optimizes
16193     it for Sun UltraSPARC T1 chips.  With `-mcpu=niagara2', the
16194     compiler additionally optimizes it for Sun UltraSPARC T2 chips.
16195
16196`-mtune=CPU_TYPE'
16197     Set the instruction scheduling parameters for machine type
16198     CPU_TYPE, but do not set the instruction set or register set that
16199     the option `-mcpu=CPU_TYPE' would.
16200
16201     The same values for `-mcpu=CPU_TYPE' can be used for
16202     `-mtune=CPU_TYPE', but the only useful values are those that
16203     select a particular CPU implementation.  Those are `cypress',
16204     `supersparc', `hypersparc', `leon', `f930', `f934',
16205     `sparclite86x', `tsc701', `ultrasparc', `ultrasparc3', `niagara',
16206     and `niagara2'.
16207
16208`-mv8plus'
16209`-mno-v8plus'
16210     With `-mv8plus', GCC generates code for the SPARC-V8+ ABI.  The
16211     difference from the V8 ABI is that the global and out registers are
16212     considered 64-bit wide.  This is enabled by default on Solaris in
16213     32-bit mode for all SPARC-V9 processors.
16214
16215`-mvis'
16216`-mno-vis'
16217     With `-mvis', GCC generates code that takes advantage of the
16218     UltraSPARC Visual Instruction Set extensions.  The default is
16219     `-mno-vis'.
16220
16221 These `-m' options are supported in addition to the above on SPARC-V9
16222processors in 64-bit environments:
16223
16224`-mlittle-endian'
16225     Generate code for a processor running in little-endian mode.  It
16226     is only available for a few configurations and most notably not on
16227     Solaris and Linux.
16228
16229`-m32'
16230`-m64'
16231     Generate code for a 32-bit or 64-bit environment.  The 32-bit
16232     environment sets int, long and pointer to 32 bits.  The 64-bit
16233     environment sets int to 32 bits and long and pointer to 64 bits.
16234
16235`-mcmodel=medlow'
16236     Generate code for the Medium/Low code model: 64-bit addresses,
16237     programs must be linked in the low 32 bits of memory.  Programs
16238     can be statically or dynamically linked.
16239
16240`-mcmodel=medmid'
16241     Generate code for the Medium/Middle code model: 64-bit addresses,
16242     programs must be linked in the low 44 bits of memory, the text and
16243     data segments must be less than 2GB in size and the data segment
16244     must be located within 2GB of the text segment.
16245
16246`-mcmodel=medany'
16247     Generate code for the Medium/Anywhere code model: 64-bit
16248     addresses, programs may be linked anywhere in memory, the text and
16249     data segments must be less than 2GB in size and the data segment
16250     must be located within 2GB of the text segment.
16251
16252`-mcmodel=embmedany'
16253     Generate code for the Medium/Anywhere code model for embedded
16254     systems: 64-bit addresses, the text and data segments must be less
16255     than 2GB in size, both starting anywhere in memory (determined at
16256     link time).  The global register %g4 points to the base of the
16257     data segment.  Programs are statically linked and PIC is not
16258     supported.
16259
16260`-mstack-bias'
16261`-mno-stack-bias'
16262     With `-mstack-bias', GCC assumes that the stack pointer, and frame
16263     pointer if present, are offset by -2047 which must be added back
16264     when making stack frame references.  This is the default in 64-bit
16265     mode.  Otherwise, assume no such offset is present.
16266
16267
16268File: gcc.info,  Node: SPU Options,  Next: System V Options,  Prev: SPARC Options,  Up: Submodel Options
16269
162703.17.40 SPU Options
16271-------------------
16272
16273These `-m' options are supported on the SPU:
16274
16275`-mwarn-reloc'
16276`-merror-reloc'
16277     The loader for SPU does not handle dynamic relocations.  By
16278     default, GCC will give an error when it generates code that
16279     requires a dynamic relocation.  `-mno-error-reloc' disables the
16280     error, `-mwarn-reloc' will generate a warning instead.
16281
16282`-msafe-dma'
16283`-munsafe-dma'
16284     Instructions which initiate or test completion of DMA must not be
16285     reordered with respect to loads and stores of the memory which is
16286     being accessed.  Users typically address this problem using the
16287     volatile keyword, but that can lead to inefficient code in places
16288     where the memory is known to not change.  Rather than mark the
16289     memory as volatile we treat the DMA instructions as potentially
16290     effecting all memory.  With `-munsafe-dma' users must use the
16291     volatile keyword to protect memory accesses.
16292
16293`-mbranch-hints'
16294     By default, GCC will generate a branch hint instruction to avoid
16295     pipeline stalls for always taken or probably taken branches.  A
16296     hint will not be generated closer than 8 instructions away from
16297     its branch.  There is little reason to disable them, except for
16298     debugging purposes, or to make an object a little bit smaller.
16299
16300`-msmall-mem'
16301`-mlarge-mem'
16302     By default, GCC generates code assuming that addresses are never
16303     larger than 18 bits.  With `-mlarge-mem' code is generated that
16304     assumes a full 32 bit address.
16305
16306`-mstdmain'
16307     By default, GCC links against startup code that assumes the
16308     SPU-style main function interface (which has an unconventional
16309     parameter list).  With `-mstdmain', GCC will link your program
16310     against startup code that assumes a C99-style interface to `main',
16311     including a local copy of `argv' strings.
16312
16313`-mfixed-range=REGISTER-RANGE'
16314     Generate code treating the given register range as fixed registers.
16315     A fixed register is one that the register allocator can not use.
16316     This is useful when compiling kernel code.  A register range is
16317     specified as two registers separated by a dash.  Multiple register
16318     ranges can be specified separated by a comma.
16319
16320`-mea32'
16321`-mea64'
16322     Compile code assuming that pointers to the PPU address space
16323     accessed via the `__ea' named address space qualifier are either
16324     32 or 64 bits wide.  The default is 32 bits.  As this is an ABI
16325     changing option, all object code in an executable must be compiled
16326     with the same setting.
16327
16328`-maddress-space-conversion'
16329`-mno-address-space-conversion'
16330     Allow/disallow treating the `__ea' address space as superset of
16331     the generic address space.  This enables explicit type casts
16332     between `__ea' and generic pointer as well as implicit conversions
16333     of generic pointers to `__ea' pointers.  The default is to allow
16334     address space pointer conversions.
16335
16336`-mcache-size=CACHE-SIZE'
16337     This option controls the version of libgcc that the compiler links
16338     to an executable and selects a software-managed cache for
16339     accessing variables in the `__ea' address space with a particular
16340     cache size.  Possible options for CACHE-SIZE are `8', `16', `32',
16341     `64' and `128'.  The default cache size is 64KB.
16342
16343`-matomic-updates'
16344`-mno-atomic-updates'
16345     This option controls the version of libgcc that the compiler links
16346     to an executable and selects whether atomic updates to the
16347     software-managed cache of PPU-side variables are used.  If you use
16348     atomic updates, changes to a PPU variable from SPU code using the
16349     `__ea' named address space qualifier will not interfere with
16350     changes to other PPU variables residing in the same cache line
16351     from PPU code.  If you do not use atomic updates, such
16352     interference may occur; however, writing back cache lines will be
16353     more efficient.  The default behavior is to use atomic updates.
16354
16355`-mdual-nops'
16356`-mdual-nops=N'
16357     By default, GCC will insert nops to increase dual issue when it
16358     expects it to increase performance.  N can be a value from 0 to
16359     10.  A smaller N will insert fewer nops.  10 is the default, 0 is
16360     the same as `-mno-dual-nops'.  Disabled with `-Os'.
16361
16362`-mhint-max-nops=N'
16363     Maximum number of nops to insert for a branch hint.  A branch hint
16364     must be at least 8 instructions away from the branch it is
16365     effecting.  GCC will insert up to N nops to enforce this,
16366     otherwise it will not generate the branch hint.
16367
16368`-mhint-max-distance=N'
16369     The encoding of the branch hint instruction limits the hint to be
16370     within 256 instructions of the branch it is effecting.  By
16371     default, GCC makes sure it is within 125.
16372
16373`-msafe-hints'
16374     Work around a hardware bug which causes the SPU to stall
16375     indefinitely.  By default, GCC will insert the `hbrp' instruction
16376     to make sure this stall won't happen.
16377
16378
16379
16380File: gcc.info,  Node: System V Options,  Next: V850 Options,  Prev: SPU Options,  Up: Submodel Options
16381
163823.17.41 Options for System V
16383----------------------------
16384
16385These additional options are available on System V Release 4 for
16386compatibility with other compilers on those systems:
16387
16388`-G'
16389     Create a shared object.  It is recommended that `-symbolic' or
16390     `-shared' be used instead.
16391
16392`-Qy'
16393     Identify the versions of each tool used by the compiler, in a
16394     `.ident' assembler directive in the output.
16395
16396`-Qn'
16397     Refrain from adding `.ident' directives to the output file (this is
16398     the default).
16399
16400`-YP,DIRS'
16401     Search the directories DIRS, and no others, for libraries
16402     specified with `-l'.
16403
16404`-Ym,DIR'
16405     Look in the directory DIR to find the M4 preprocessor.  The
16406     assembler uses this option.
16407
16408
16409File: gcc.info,  Node: V850 Options,  Next: VAX Options,  Prev: System V Options,  Up: Submodel Options
16410
164113.17.42 V850 Options
16412--------------------
16413
16414These `-m' options are defined for V850 implementations:
16415
16416`-mlong-calls'
16417`-mno-long-calls'
16418     Treat all calls as being far away (near).  If calls are assumed to
16419     be far away, the compiler will always load the functions address
16420     up into a register, and call indirect through the pointer.
16421
16422`-mno-ep'
16423`-mep'
16424     Do not optimize (do optimize) basic blocks that use the same index
16425     pointer 4 or more times to copy pointer into the `ep' register, and
16426     use the shorter `sld' and `sst' instructions.  The `-mep' option
16427     is on by default if you optimize.
16428
16429`-mno-prolog-function'
16430`-mprolog-function'
16431     Do not use (do use) external functions to save and restore
16432     registers at the prologue and epilogue of a function.  The
16433     external functions are slower, but use less code space if more
16434     than one function saves the same number of registers.  The
16435     `-mprolog-function' option is on by default if you optimize.
16436
16437`-mspace'
16438     Try to make the code as small as possible.  At present, this just
16439     turns on the `-mep' and `-mprolog-function' options.
16440
16441`-mtda=N'
16442     Put static or global variables whose size is N bytes or less into
16443     the tiny data area that register `ep' points to.  The tiny data
16444     area can hold up to 256 bytes in total (128 bytes for byte
16445     references).
16446
16447`-msda=N'
16448     Put static or global variables whose size is N bytes or less into
16449     the small data area that register `gp' points to.  The small data
16450     area can hold up to 64 kilobytes.
16451
16452`-mzda=N'
16453     Put static or global variables whose size is N bytes or less into
16454     the first 32 kilobytes of memory.
16455
16456`-mv850'
16457     Specify that the target processor is the V850.
16458
16459`-mbig-switch'
16460     Generate code suitable for big switch tables.  Use this option
16461     only if the assembler/linker complain about out of range branches
16462     within a switch table.
16463
16464`-mapp-regs'
16465     This option will cause r2 and r5 to be used in the code generated
16466     by the compiler.  This setting is the default.
16467
16468`-mno-app-regs'
16469     This option will cause r2 and r5 to be treated as fixed registers.
16470
16471`-mv850e2v3'
16472     Specify that the target processor is the V850E2V3.  The
16473     preprocessor constants `__v850e2v3__' will be defined if this
16474     option is used.
16475
16476`-mv850e2'
16477     Specify that the target processor is the V850E2.  The preprocessor
16478     constants `__v850e2__' will be defined if
16479
16480`-mv850e1'
16481     Specify that the target processor is the V850E1.  The preprocessor
16482     constants `__v850e1__' and `__v850e__' will be defined if
16483
16484`-mv850es'
16485     Specify that the target processor is the V850ES.  This is an alias
16486     for the `-mv850e1' option.
16487
16488`-mv850e'
16489     Specify that the target processor is the V850E.  The preprocessor
16490     constant `__v850e__' will be defined if this option is used.
16491
16492     If neither `-mv850' nor `-mv850e' nor `-mv850e1' nor `-mv850e2'
16493     nor `-mv850e2v3' are defined then a default target processor will
16494     be chosen and the relevant `__v850*__' preprocessor constant will
16495     be defined.
16496
16497     The preprocessor constants `__v850' and `__v851__' are always
16498     defined, regardless of which processor variant is the target.
16499
16500`-mdisable-callt'
16501     This option will suppress generation of the CALLT instruction for
16502     the v850e, v850e1, v850e2 and v850e2v3 flavors of the v850
16503     architecture.  The default is `-mno-disable-callt' which allows
16504     the CALLT instruction to be used.
16505
16506
16507
16508File: gcc.info,  Node: VAX Options,  Next: VxWorks Options,  Prev: V850 Options,  Up: Submodel Options
16509
165103.17.43 VAX Options
16511-------------------
16512
16513These `-m' options are defined for the VAX:
16514
16515`-munix'
16516     Do not output certain jump instructions (`aobleq' and so on) that
16517     the Unix assembler for the VAX cannot handle across long ranges.
16518
16519`-mgnu'
16520     Do output those jump instructions, on the assumption that you will
16521     assemble with the GNU assembler.
16522
16523`-mg'
16524     Output code for g-format floating point numbers instead of
16525     d-format.
16526
16527
16528File: gcc.info,  Node: VxWorks Options,  Next: x86-64 Options,  Prev: VAX Options,  Up: Submodel Options
16529
165303.17.44 VxWorks Options
16531-----------------------
16532
16533The options in this section are defined for all VxWorks targets.
16534Options specific to the target hardware are listed with the other
16535options for that target.
16536
16537`-mrtp'
16538     GCC can generate code for both VxWorks kernels and real time
16539     processes (RTPs).  This option switches from the former to the
16540     latter.  It also defines the preprocessor macro `__RTP__'.
16541
16542`-non-static'
16543     Link an RTP executable against shared libraries rather than static
16544     libraries.  The options `-static' and `-shared' can also be used
16545     for RTPs (*note Link Options::); `-static' is the default.
16546
16547`-Bstatic'
16548`-Bdynamic'
16549     These options are passed down to the linker.  They are defined for
16550     compatibility with Diab.
16551
16552`-Xbind-lazy'
16553     Enable lazy binding of function calls.  This option is equivalent
16554     to `-Wl,-z,now' and is defined for compatibility with Diab.
16555
16556`-Xbind-now'
16557     Disable lazy binding of function calls.  This option is the
16558     default and is defined for compatibility with Diab.
16559
16560
16561File: gcc.info,  Node: x86-64 Options,  Next: Xstormy16 Options,  Prev: VxWorks Options,  Up: Submodel Options
16562
165633.17.45 x86-64 Options
16564----------------------
16565
16566These are listed under *Note i386 and x86-64 Options::.
16567
16568
16569File: gcc.info,  Node: Xstormy16 Options,  Next: Xtensa Options,  Prev: x86-64 Options,  Up: Submodel Options
16570
165713.17.46 Xstormy16 Options
16572-------------------------
16573
16574These options are defined for Xstormy16:
16575
16576`-msim'
16577     Choose startup files and linker script suitable for the simulator.
16578
16579
16580File: gcc.info,  Node: Xtensa Options,  Next: zSeries Options,  Prev: Xstormy16 Options,  Up: Submodel Options
16581
165823.17.47 Xtensa Options
16583----------------------
16584
16585These options are supported for Xtensa targets:
16586
16587`-mconst16'
16588`-mno-const16'
16589     Enable or disable use of `CONST16' instructions for loading
16590     constant values.  The `CONST16' instruction is currently not a
16591     standard option from Tensilica.  When enabled, `CONST16'
16592     instructions are always used in place of the standard `L32R'
16593     instructions.  The use of `CONST16' is enabled by default only if
16594     the `L32R' instruction is not available.
16595
16596`-mfused-madd'
16597`-mno-fused-madd'
16598     Enable or disable use of fused multiply/add and multiply/subtract
16599     instructions in the floating-point option.  This has no effect if
16600     the floating-point option is not also enabled.  Disabling fused
16601     multiply/add and multiply/subtract instructions forces the
16602     compiler to use separate instructions for the multiply and
16603     add/subtract operations.  This may be desirable in some cases
16604     where strict IEEE 754-compliant results are required: the fused
16605     multiply add/subtract instructions do not round the intermediate
16606     result, thereby producing results with _more_ bits of precision
16607     than specified by the IEEE standard.  Disabling fused multiply
16608     add/subtract instructions also ensures that the program output is
16609     not sensitive to the compiler's ability to combine multiply and
16610     add/subtract operations.
16611
16612`-mserialize-volatile'
16613`-mno-serialize-volatile'
16614     When this option is enabled, GCC inserts `MEMW' instructions before
16615     `volatile' memory references to guarantee sequential consistency.
16616     The default is `-mserialize-volatile'.  Use
16617     `-mno-serialize-volatile' to omit the `MEMW' instructions.
16618
16619`-mforce-no-pic'
16620     For targets, like GNU/Linux, where all user-mode Xtensa code must
16621     be position-independent code (PIC), this option disables PIC for
16622     compiling kernel code.
16623
16624`-mtext-section-literals'
16625`-mno-text-section-literals'
16626     Control the treatment of literal pools.  The default is
16627     `-mno-text-section-literals', which places literals in a separate
16628     section in the output file.  This allows the literal pool to be
16629     placed in a data RAM/ROM, and it also allows the linker to combine
16630     literal pools from separate object files to remove redundant
16631     literals and improve code size.  With `-mtext-section-literals',
16632     the literals are interspersed in the text section in order to keep
16633     them as close as possible to their references.  This may be
16634     necessary for large assembly files.
16635
16636`-mtarget-align'
16637`-mno-target-align'
16638     When this option is enabled, GCC instructs the assembler to
16639     automatically align instructions to reduce branch penalties at the
16640     expense of some code density.  The assembler attempts to widen
16641     density instructions to align branch targets and the instructions
16642     following call instructions.  If there are not enough preceding
16643     safe density instructions to align a target, no widening will be
16644     performed.  The default is `-mtarget-align'.  These options do not
16645     affect the treatment of auto-aligned instructions like `LOOP',
16646     which the assembler will always align, either by widening density
16647     instructions or by inserting no-op instructions.
16648
16649`-mlongcalls'
16650`-mno-longcalls'
16651     When this option is enabled, GCC instructs the assembler to
16652     translate direct calls to indirect calls unless it can determine
16653     that the target of a direct call is in the range allowed by the
16654     call instruction.  This translation typically occurs for calls to
16655     functions in other source files.  Specifically, the assembler
16656     translates a direct `CALL' instruction into an `L32R' followed by
16657     a `CALLX' instruction.  The default is `-mno-longcalls'.  This
16658     option should be used in programs where the call target can
16659     potentially be out of range.  This option is implemented in the
16660     assembler, not the compiler, so the assembly code generated by GCC
16661     will still show direct call instructions--look at the disassembled
16662     object code to see the actual instructions.  Note that the
16663     assembler will use an indirect call for every cross-file call, not
16664     just those that really will be out of range.
16665
16666
16667File: gcc.info,  Node: zSeries Options,  Prev: Xtensa Options,  Up: Submodel Options
16668
166693.17.48 zSeries Options
16670-----------------------
16671
16672These are listed under *Note S/390 and zSeries Options::.
16673
16674
16675File: gcc.info,  Node: Code Gen Options,  Next: Environment Variables,  Prev: Submodel Options,  Up: Invoking GCC
16676
166773.18 Options for Code Generation Conventions
16678============================================
16679
16680These machine-independent options control the interface conventions
16681used in code generation.
16682
16683 Most of them have both positive and negative forms; the negative form
16684of `-ffoo' would be `-fno-foo'.  In the table below, only one of the
16685forms is listed--the one which is not the default.  You can figure out
16686the other form by either removing `no-' or adding it.
16687
16688`-fbounds-check'
16689     For front-ends that support it, generate additional code to check
16690     that indices used to access arrays are within the declared range.
16691     This is currently only supported by the Java and Fortran
16692     front-ends, where this option defaults to true and false
16693     respectively.
16694
16695`-ftrapv'
16696     This option generates traps for signed overflow on addition,
16697     subtraction, multiplication operations.
16698
16699`-fwrapv'
16700     This option instructs the compiler to assume that signed arithmetic
16701     overflow of addition, subtraction and multiplication wraps around
16702     using twos-complement representation.  This flag enables some
16703     optimizations and disables others.  This option is enabled by
16704     default for the Java front-end, as required by the Java language
16705     specification.
16706
16707`-fexceptions'
16708     Enable exception handling.  Generates extra code needed to
16709     propagate exceptions.  For some targets, this implies GCC will
16710     generate frame unwind information for all functions, which can
16711     produce significant data size overhead, although it does not
16712     affect execution.  If you do not specify this option, GCC will
16713     enable it by default for languages like C++ which normally require
16714     exception handling, and disable it for languages like C that do
16715     not normally require it.  However, you may need to enable this
16716     option when compiling C code that needs to interoperate properly
16717     with exception handlers written in C++.  You may also wish to
16718     disable this option if you are compiling older C++ programs that
16719     don't use exception handling.
16720
16721`-fnon-call-exceptions'
16722     Generate code that allows trapping instructions to throw
16723     exceptions.  Note that this requires platform-specific runtime
16724     support that does not exist everywhere.  Moreover, it only allows
16725     _trapping_ instructions to throw exceptions, i.e. memory
16726     references or floating point instructions.  It does not allow
16727     exceptions to be thrown from arbitrary signal handlers such as
16728     `SIGALRM'.
16729
16730`-funwind-tables'
16731     Similar to `-fexceptions', except that it will just generate any
16732     needed static data, but will not affect the generated code in any
16733     other way.  You will normally not enable this option; instead, a
16734     language processor that needs this handling would enable it on
16735     your behalf.
16736
16737`-fasynchronous-unwind-tables'
16738     Generate unwind table in dwarf2 format, if supported by target
16739     machine.  The table is exact at each instruction boundary, so it
16740     can be used for stack unwinding from asynchronous events (such as
16741     debugger or garbage collector).
16742
16743`-fpcc-struct-return'
16744     Return "short" `struct' and `union' values in memory like longer
16745     ones, rather than in registers.  This convention is less
16746     efficient, but it has the advantage of allowing intercallability
16747     between GCC-compiled files and files compiled with other
16748     compilers, particularly the Portable C Compiler (pcc).
16749
16750     The precise convention for returning structures in memory depends
16751     on the target configuration macros.
16752
16753     Short structures and unions are those whose size and alignment
16754     match that of some integer type.
16755
16756     *Warning:* code compiled with the `-fpcc-struct-return' switch is
16757     not binary compatible with code compiled with the
16758     `-freg-struct-return' switch.  Use it to conform to a non-default
16759     application binary interface.
16760
16761`-freg-struct-return'
16762     Return `struct' and `union' values in registers when possible.
16763     This is more efficient for small structures than
16764     `-fpcc-struct-return'.
16765
16766     If you specify neither `-fpcc-struct-return' nor
16767     `-freg-struct-return', GCC defaults to whichever convention is
16768     standard for the target.  If there is no standard convention, GCC
16769     defaults to `-fpcc-struct-return', except on targets where GCC is
16770     the principal compiler.  In those cases, we can choose the
16771     standard, and we chose the more efficient register return
16772     alternative.
16773
16774     *Warning:* code compiled with the `-freg-struct-return' switch is
16775     not binary compatible with code compiled with the
16776     `-fpcc-struct-return' switch.  Use it to conform to a non-default
16777     application binary interface.
16778
16779`-fshort-enums'
16780     Allocate to an `enum' type only as many bytes as it needs for the
16781     declared range of possible values.  Specifically, the `enum' type
16782     will be equivalent to the smallest integer type which has enough
16783     room.
16784
16785     *Warning:* the `-fshort-enums' switch causes GCC to generate code
16786     that is not binary compatible with code generated without that
16787     switch.  Use it to conform to a non-default application binary
16788     interface.
16789
16790`-fshort-double'
16791     Use the same size for `double' as for `float'.
16792
16793     *Warning:* the `-fshort-double' switch causes GCC to generate code
16794     that is not binary compatible with code generated without that
16795     switch.  Use it to conform to a non-default application binary
16796     interface.
16797
16798`-fshort-wchar'
16799     Override the underlying type for `wchar_t' to be `short unsigned
16800     int' instead of the default for the target.  This option is useful
16801     for building programs to run under WINE.
16802
16803     *Warning:* the `-fshort-wchar' switch causes GCC to generate code
16804     that is not binary compatible with code generated without that
16805     switch.  Use it to conform to a non-default application binary
16806     interface.
16807
16808`-fno-common'
16809     In C code, controls the placement of uninitialized global
16810     variables.  Unix C compilers have traditionally permitted multiple
16811     definitions of such variables in different compilation units by
16812     placing the variables in a common block.  This is the behavior
16813     specified by `-fcommon', and is the default for GCC on most
16814     targets.  On the other hand, this behavior is not required by ISO
16815     C, and on some targets may carry a speed or code size penalty on
16816     variable references.  The `-fno-common' option specifies that the
16817     compiler should place uninitialized global variables in the data
16818     section of the object file, rather than generating them as common
16819     blocks.  This has the effect that if the same variable is declared
16820     (without `extern') in two different compilations, you will get a
16821     multiple-definition error when you link them.  In this case, you
16822     must compile with `-fcommon' instead.  Compiling with
16823     `-fno-common' is useful on targets for which it provides better
16824     performance, or if you wish to verify that the program will work
16825     on other systems which always treat uninitialized variable
16826     declarations this way.
16827
16828`-fno-ident'
16829     Ignore the `#ident' directive.
16830
16831`-finhibit-size-directive'
16832     Don't output a `.size' assembler directive, or anything else that
16833     would cause trouble if the function is split in the middle, and the
16834     two halves are placed at locations far apart in memory.  This
16835     option is used when compiling `crtstuff.c'; you should not need to
16836     use it for anything else.
16837
16838`-fverbose-asm'
16839     Put extra commentary information in the generated assembly code to
16840     make it more readable.  This option is generally only of use to
16841     those who actually need to read the generated assembly code
16842     (perhaps while debugging the compiler itself).
16843
16844     `-fno-verbose-asm', the default, causes the extra information to
16845     be omitted and is useful when comparing two assembler files.
16846
16847`-frecord-gcc-switches'
16848     This switch causes the command line that was used to invoke the
16849     compiler to be recorded into the object file that is being created.
16850     This switch is only implemented on some targets and the exact
16851     format of the recording is target and binary file format
16852     dependent, but it usually takes the form of a section containing
16853     ASCII text.  This switch is related to the `-fverbose-asm' switch,
16854     but that switch only records information in the assembler output
16855     file as comments, so it never reaches the object file.
16856
16857`-fpic'
16858     Generate position-independent code (PIC) suitable for use in a
16859     shared library, if supported for the target machine.  Such code
16860     accesses all constant addresses through a global offset table
16861     (GOT).  The dynamic loader resolves the GOT entries when the
16862     program starts (the dynamic loader is not part of GCC; it is part
16863     of the operating system).  If the GOT size for the linked
16864     executable exceeds a machine-specific maximum size, you get an
16865     error message from the linker indicating that `-fpic' does not
16866     work; in that case, recompile with `-fPIC' instead.  (These
16867     maximums are 8k on the SPARC and 32k on the m68k and RS/6000.  The
16868     386 has no such limit.)
16869
16870     Position-independent code requires special support, and therefore
16871     works only on certain machines.  For the 386, GCC supports PIC for
16872     System V but not for the Sun 386i.  Code generated for the IBM
16873     RS/6000 is always position-independent.
16874
16875     When this flag is set, the macros `__pic__' and `__PIC__' are
16876     defined to 1.
16877
16878`-fPIC'
16879     If supported for the target machine, emit position-independent
16880     code, suitable for dynamic linking and avoiding any limit on the
16881     size of the global offset table.  This option makes a difference
16882     on the m68k, PowerPC and SPARC.
16883
16884     Position-independent code requires special support, and therefore
16885     works only on certain machines.
16886
16887     When this flag is set, the macros `__pic__' and `__PIC__' are
16888     defined to 2.
16889
16890`-fpie'
16891`-fPIE'
16892     These options are similar to `-fpic' and `-fPIC', but generated
16893     position independent code can be only linked into executables.
16894     Usually these options are used when `-pie' GCC option will be used
16895     during linking.
16896
16897     `-fpie' and `-fPIE' both define the macros `__pie__' and
16898     `__PIE__'.  The macros have the value 1 for `-fpie' and 2 for
16899     `-fPIE'.
16900
16901`-fno-jump-tables'
16902     Do not use jump tables for switch statements even where it would be
16903     more efficient than other code generation strategies.  This option
16904     is of use in conjunction with `-fpic' or `-fPIC' for building code
16905     which forms part of a dynamic linker and cannot reference the
16906     address of a jump table.  On some targets, jump tables do not
16907     require a GOT and this option is not needed.
16908
16909`-ffixed-REG'
16910     Treat the register named REG as a fixed register; generated code
16911     should never refer to it (except perhaps as a stack pointer, frame
16912     pointer or in some other fixed role).
16913
16914     REG must be the name of a register.  The register names accepted
16915     are machine-specific and are defined in the `REGISTER_NAMES' macro
16916     in the machine description macro file.
16917
16918     This flag does not have a negative form, because it specifies a
16919     three-way choice.
16920
16921`-fcall-used-REG'
16922     Treat the register named REG as an allocable register that is
16923     clobbered by function calls.  It may be allocated for temporaries
16924     or variables that do not live across a call.  Functions compiled
16925     this way will not save and restore the register REG.
16926
16927     It is an error to used this flag with the frame pointer or stack
16928     pointer.  Use of this flag for other registers that have fixed
16929     pervasive roles in the machine's execution model will produce
16930     disastrous results.
16931
16932     This flag does not have a negative form, because it specifies a
16933     three-way choice.
16934
16935`-fcall-saved-REG'
16936     Treat the register named REG as an allocable register saved by
16937     functions.  It may be allocated even for temporaries or variables
16938     that live across a call.  Functions compiled this way will save
16939     and restore the register REG if they use it.
16940
16941     It is an error to used this flag with the frame pointer or stack
16942     pointer.  Use of this flag for other registers that have fixed
16943     pervasive roles in the machine's execution model will produce
16944     disastrous results.
16945
16946     A different sort of disaster will result from the use of this flag
16947     for a register in which function values may be returned.
16948
16949     This flag does not have a negative form, because it specifies a
16950     three-way choice.
16951
16952`-fpack-struct[=N]'
16953     Without a value specified, pack all structure members together
16954     without holes.  When a value is specified (which must be a small
16955     power of two), pack structure members according to this value,
16956     representing the maximum alignment (that is, objects with default
16957     alignment requirements larger than this will be output potentially
16958     unaligned at the next fitting location.
16959
16960     *Warning:* the `-fpack-struct' switch causes GCC to generate code
16961     that is not binary compatible with code generated without that
16962     switch.  Additionally, it makes the code suboptimal.  Use it to
16963     conform to a non-default application binary interface.
16964
16965`-finstrument-functions'
16966     Generate instrumentation calls for entry and exit to functions.
16967     Just after function entry and just before function exit, the
16968     following profiling functions will be called with the address of
16969     the current function and its call site.  (On some platforms,
16970     `__builtin_return_address' does not work beyond the current
16971     function, so the call site information may not be available to the
16972     profiling functions otherwise.)
16973
16974          void __cyg_profile_func_enter (void *this_fn,
16975                                         void *call_site);
16976          void __cyg_profile_func_exit  (void *this_fn,
16977                                         void *call_site);
16978
16979     The first argument is the address of the start of the current
16980     function, which may be looked up exactly in the symbol table.
16981
16982     This instrumentation is also done for functions expanded inline in
16983     other functions.  The profiling calls will indicate where,
16984     conceptually, the inline function is entered and exited.  This
16985     means that addressable versions of such functions must be
16986     available.  If all your uses of a function are expanded inline,
16987     this may mean an additional expansion of code size.  If you use
16988     `extern inline' in your C code, an addressable version of such
16989     functions must be provided.  (This is normally the case anyways,
16990     but if you get lucky and the optimizer always expands the
16991     functions inline, you might have gotten away without providing
16992     static copies.)
16993
16994     A function may be given the attribute `no_instrument_function', in
16995     which case this instrumentation will not be done.  This can be
16996     used, for example, for the profiling functions listed above,
16997     high-priority interrupt routines, and any functions from which the
16998     profiling functions cannot safely be called (perhaps signal
16999     handlers, if the profiling routines generate output or allocate
17000     memory).
17001
17002`-finstrument-functions-exclude-file-list=FILE,FILE,...'
17003     Set the list of functions that are excluded from instrumentation
17004     (see the description of `-finstrument-functions').  If the file
17005     that contains a function definition matches with one of FILE, then
17006     that function is not instrumented.  The match is done on
17007     substrings: if the FILE parameter is a substring of the file name,
17008     it is considered to be a match.
17009
17010     For example:
17011
17012          -finstrument-functions-exclude-file-list=/bits/stl,include/sys
17013
17014     will exclude any inline function defined in files whose pathnames
17015     contain `/bits/stl' or `include/sys'.
17016
17017     If, for some reason, you want to include letter `','' in one of
17018     SYM, write `'\,''. For example,
17019     `-finstrument-functions-exclude-file-list='\,\,tmp'' (note the
17020     single quote surrounding the option).
17021
17022`-finstrument-functions-exclude-function-list=SYM,SYM,...'
17023     This is similar to `-finstrument-functions-exclude-file-list', but
17024     this option sets the list of function names to be excluded from
17025     instrumentation.  The function name to be matched is its
17026     user-visible name, such as `vector<int> blah(const vector<int>
17027     &)', not the internal mangled name (e.g.,
17028     `_Z4blahRSt6vectorIiSaIiEE').  The match is done on substrings: if
17029     the SYM parameter is a substring of the function name, it is
17030     considered to be a match.  For C99 and C++ extended identifiers,
17031     the function name must be given in UTF-8, not using universal
17032     character names.
17033
17034`-finstrument-function-calls'
17035     Generate instrumentation calls immediately before and after each
17036     function call. The following profiling functions will be called
17037     with the address of the function that is called between them. Use
17038     `__builtin_return_address(0)' inside the profiling functions to
17039     get the addresses from where they are called.
17040
17041          void __cyg_profile_call_enter  (void *fn);
17042          void __cyg_profile_call_exit   (void *fn);
17043
17044     Additionally instrumentation calls are inserted at the beginning of
17045     each function. The argument is the address of the function where
17046     the insertion occurred.
17047
17048          void __cyg_profile_call_inside (void *fn);
17049
17050     If an instrumented function gets inlined, calling
17051     `__builtin_return_address(0)' from inside
17052     `__cyg_profile_call_inside' will return an address that is in the
17053     address range of the function where it was inlined into. This can
17054     be used to detect if inlining occurred for the function that
17055     contains `__cyg_profile_call_inside'.
17056
17057`-fstack-check'
17058     Generate code to verify that you do not go beyond the boundary of
17059     the stack.  You should specify this flag if you are running in an
17060     environment with multiple threads, but only rarely need to specify
17061     it in a single-threaded environment since stack overflow is
17062     automatically detected on nearly all systems if there is only one
17063     stack.
17064
17065     Note that this switch does not actually cause checking to be done;
17066     the operating system or the language runtime must do that.  The
17067     switch causes generation of code to ensure that they see the stack
17068     being extended.
17069
17070     You can additionally specify a string parameter: `no' means no
17071     checking, `generic' means force the use of old-style checking,
17072     `specific' means use the best checking method and is equivalent to
17073     bare `-fstack-check'.
17074
17075     Old-style checking is a generic mechanism that requires no specific
17076     target support in the compiler but comes with the following
17077     drawbacks:
17078
17079       1. Modified allocation strategy for large objects: they will
17080          always be allocated dynamically if their size exceeds a fixed
17081          threshold.
17082
17083       2. Fixed limit on the size of the static frame of functions:
17084          when it is topped by a particular function, stack checking is
17085          not reliable and a warning is issued by the compiler.
17086
17087       3. Inefficiency: because of both the modified allocation
17088          strategy and the generic implementation, the performances of
17089          the code are hampered.
17090
17091     Note that old-style stack checking is also the fallback method for
17092     `specific' if no target support has been added in the compiler.
17093
17094`-fstack-limit-register=REG'
17095`-fstack-limit-symbol=SYM'
17096`-fno-stack-limit'
17097     Generate code to ensure that the stack does not grow beyond a
17098     certain value, either the value of a register or the address of a
17099     symbol.  If the stack would grow beyond the value, a signal is
17100     raised.  For most targets, the signal is raised before the stack
17101     overruns the boundary, so it is possible to catch the signal
17102     without taking special precautions.
17103
17104     For instance, if the stack starts at absolute address `0x80000000'
17105     and grows downwards, you can use the flags
17106     `-fstack-limit-symbol=__stack_limit' and
17107     `-Wl,--defsym,__stack_limit=0x7ffe0000' to enforce a stack limit
17108     of 128KB.  Note that this may only work with the GNU linker.
17109
17110`-fsplit-stack'
17111     Generate code to automatically split the stack before it overflows.
17112     The resulting program has a discontiguous stack which can only
17113     overflow if the program is unable to allocate any more memory.
17114     This is most useful when running threaded programs, as it is no
17115     longer necessary to calculate a good stack size to use for each
17116     thread.  This is currently only implemented for the i386 and
17117     x86_64 backends running GNU/Linux.
17118
17119     When code compiled with `-fsplit-stack' calls code compiled
17120     without `-fsplit-stack', there may not be much stack space
17121     available for the latter code to run.  If compiling all code,
17122     including library code, with `-fsplit-stack' is not an option,
17123     then the linker can fix up these calls so that the code compiled
17124     without `-fsplit-stack' always has a large stack.  Support for
17125     this is implemented in the gold linker in GNU binutils release 2.21
17126     and later.
17127
17128`-fleading-underscore'
17129     This option and its counterpart, `-fno-leading-underscore',
17130     forcibly change the way C symbols are represented in the object
17131     file.  One use is to help link with legacy assembly code.
17132
17133     *Warning:* the `-fleading-underscore' switch causes GCC to
17134     generate code that is not binary compatible with code generated
17135     without that switch.  Use it to conform to a non-default
17136     application binary interface.  Not all targets provide complete
17137     support for this switch.
17138
17139`-ftls-model=MODEL'
17140     Alter the thread-local storage model to be used (*note
17141     Thread-Local::).  The MODEL argument should be one of
17142     `global-dynamic', `local-dynamic', `initial-exec' or `local-exec'.
17143
17144     The default without `-fpic' is `initial-exec'; with `-fpic' the
17145     default is `global-dynamic'.
17146
17147`-fvisibility=DEFAULT|INTERNAL|HIDDEN|PROTECTED'
17148     Set the default ELF image symbol visibility to the specified
17149     option--all symbols will be marked with this unless overridden
17150     within the code.  Using this feature can very substantially
17151     improve linking and load times of shared object libraries, produce
17152     more optimized code, provide near-perfect API export and prevent
17153     symbol clashes.  It is *strongly* recommended that you use this in
17154     any shared objects you distribute.
17155
17156     Despite the nomenclature, `default' always means public; i.e.,
17157     available to be linked against from outside the shared object.
17158     `protected' and `internal' are pretty useless in real-world usage
17159     so the only other commonly used option will be `hidden'.  The
17160     default if `-fvisibility' isn't specified is `default', i.e., make
17161     every symbol public--this causes the same behavior as previous
17162     versions of GCC.
17163
17164     A good explanation of the benefits offered by ensuring ELF symbols
17165     have the correct visibility is given by "How To Write Shared
17166     Libraries" by Ulrich Drepper (which can be found at
17167     `http://people.redhat.com/~drepper/')--however a superior solution
17168     made possible by this option to marking things hidden when the
17169     default is public is to make the default hidden and mark things
17170     public.  This is the norm with DLL's on Windows and with
17171     `-fvisibility=hidden' and `__attribute__
17172     ((visibility("default")))' instead of `__declspec(dllexport)' you
17173     get almost identical semantics with identical syntax.  This is a
17174     great boon to those working with cross-platform projects.
17175
17176     For those adding visibility support to existing code, you may find
17177     `#pragma GCC visibility' of use.  This works by you enclosing the
17178     declarations you wish to set visibility for with (for example)
17179     `#pragma GCC visibility push(hidden)' and `#pragma GCC visibility
17180     pop'.  Bear in mind that symbol visibility should be viewed *as
17181     part of the API interface contract* and thus all new code should
17182     always specify visibility when it is not the default; i.e.,
17183     declarations only for use within the local DSO should *always* be
17184     marked explicitly as hidden as so to avoid PLT indirection
17185     overheads--making this abundantly clear also aids readability and
17186     self-documentation of the code.  Note that due to ISO C++
17187     specification requirements, operator new and operator delete must
17188     always be of default visibility.
17189
17190     Be aware that headers from outside your project, in particular
17191     system headers and headers from any other library you use, may not
17192     be expecting to be compiled with visibility other than the
17193     default.  You may need to explicitly say `#pragma GCC visibility
17194     push(default)' before including any such headers.
17195
17196     `extern' declarations are not affected by `-fvisibility', so a lot
17197     of code can be recompiled with `-fvisibility=hidden' with no
17198     modifications.  However, this means that calls to `extern'
17199     functions with no explicit visibility will use the PLT, so it is
17200     more effective to use `__attribute ((visibility))' and/or `#pragma
17201     GCC visibility' to tell the compiler which `extern' declarations
17202     should be treated as hidden.
17203
17204     Note that `-fvisibility' does affect C++ vague linkage entities.
17205     This means that, for instance, an exception class that will be
17206     thrown between DSOs must be explicitly marked with default
17207     visibility so that the `type_info' nodes will be unified between
17208     the DSOs.
17209
17210     An overview of these techniques, their benefits and how to use them
17211     is at `http://gcc.gnu.org/wiki/Visibility'.
17212
17213`-fstrict-volatile-bitfields'
17214     This option should be used if accesses to volatile bitfields (or
17215     other structure fields, although the compiler usually honors those
17216     types anyway) should use a single access of the width of the
17217     field's type, aligned to a natural alignment if possible.  For
17218     example, targets with memory-mapped peripheral registers might
17219     require all such accesses to be 16 bits wide; with this flag the
17220     user could declare all peripheral bitfields as "unsigned short"
17221     (assuming short is 16 bits on these targets) to force GCC to use
17222     16 bit accesses instead of, perhaps, a more efficient 32 bit
17223     access.
17224
17225     If this option is disabled, the compiler will use the most
17226     efficient instruction.  In the previous example, that might be a
17227     32-bit load instruction, even though that will access bytes that
17228     do not contain any portion of the bitfield, or memory-mapped
17229     registers unrelated to the one being updated.
17230
17231     If the target requires strict alignment, and honoring the field
17232     type would require violating this alignment, a warning is issued.
17233     If the field has `packed' attribute, the access is done without
17234     honoring the field type.  If the field doesn't have `packed'
17235     attribute, the access is done honoring the field type.  In both
17236     cases, GCC assumes that the user knows something about the target
17237     hardware that it is unaware of.
17238
17239     The default value of this option is determined by the application
17240     binary interface for the target processor.
17241
17242
17243
17244File: gcc.info,  Node: Environment Variables,  Next: Precompiled Headers,  Prev: Code Gen Options,  Up: Invoking GCC
17245
172463.19 Environment Variables Affecting GCC
17247========================================
17248
17249This section describes several environment variables that affect how GCC
17250operates.  Some of them work by specifying directories or prefixes to
17251use when searching for various kinds of files.  Some are used to
17252specify other aspects of the compilation environment.
17253
17254 Note that you can also specify places to search using options such as
17255`-B', `-I' and `-L' (*note Directory Options::).  These take precedence
17256over places specified using environment variables, which in turn take
17257precedence over those specified by the configuration of GCC.  *Note
17258Controlling the Compilation Driver `gcc': (gccint)Driver.
17259
17260`LANG'
17261`LC_CTYPE'
17262`LC_MESSAGES'
17263`LC_ALL'
17264     These environment variables control the way that GCC uses
17265     localization information that allow GCC to work with different
17266     national conventions.  GCC inspects the locale categories
17267     `LC_CTYPE' and `LC_MESSAGES' if it has been configured to do so.
17268     These locale categories can be set to any value supported by your
17269     installation.  A typical value is `en_GB.UTF-8' for English in the
17270     United Kingdom encoded in UTF-8.
17271
17272     The `LC_CTYPE' environment variable specifies character
17273     classification.  GCC uses it to determine the character boundaries
17274     in a string; this is needed for some multibyte encodings that
17275     contain quote and escape characters that would otherwise be
17276     interpreted as a string end or escape.
17277
17278     The `LC_MESSAGES' environment variable specifies the language to
17279     use in diagnostic messages.
17280
17281     If the `LC_ALL' environment variable is set, it overrides the value
17282     of `LC_CTYPE' and `LC_MESSAGES'; otherwise, `LC_CTYPE' and
17283     `LC_MESSAGES' default to the value of the `LANG' environment
17284     variable.  If none of these variables are set, GCC defaults to
17285     traditional C English behavior.
17286
17287`TMPDIR'
17288     If `TMPDIR' is set, it specifies the directory to use for temporary
17289     files.  GCC uses temporary files to hold the output of one stage of
17290     compilation which is to be used as input to the next stage: for
17291     example, the output of the preprocessor, which is the input to the
17292     compiler proper.
17293
17294`GCC_EXEC_PREFIX'
17295     If `GCC_EXEC_PREFIX' is set, it specifies a prefix to use in the
17296     names of the subprograms executed by the compiler.  No slash is
17297     added when this prefix is combined with the name of a subprogram,
17298     but you can specify a prefix that ends with a slash if you wish.
17299
17300     If `GCC_EXEC_PREFIX' is not set, GCC will attempt to figure out an
17301     appropriate prefix to use based on the pathname it was invoked
17302     with.
17303
17304     If GCC cannot find the subprogram using the specified prefix, it
17305     tries looking in the usual places for the subprogram.
17306
17307     The default value of `GCC_EXEC_PREFIX' is `PREFIX/lib/gcc/' where
17308     PREFIX is the prefix to the installed compiler. In many cases
17309     PREFIX is the value of `prefix' when you ran the `configure'
17310     script.
17311
17312     Other prefixes specified with `-B' take precedence over this
17313     prefix.
17314
17315     This prefix is also used for finding files such as `crt0.o' that
17316     are used for linking.
17317
17318     In addition, the prefix is used in an unusual way in finding the
17319     directories to search for header files.  For each of the standard
17320     directories whose name normally begins with `/usr/local/lib/gcc'
17321     (more precisely, with the value of `GCC_INCLUDE_DIR'), GCC tries
17322     replacing that beginning with the specified prefix to produce an
17323     alternate directory name.  Thus, with `-Bfoo/', GCC will search
17324     `foo/bar' where it would normally search `/usr/local/lib/bar'.
17325     These alternate directories are searched first; the standard
17326     directories come next. If a standard directory begins with the
17327     configured PREFIX then the value of PREFIX is replaced by
17328     `GCC_EXEC_PREFIX' when looking for header files.
17329
17330`COMPILER_PATH'
17331     The value of `COMPILER_PATH' is a colon-separated list of
17332     directories, much like `PATH'.  GCC tries the directories thus
17333     specified when searching for subprograms, if it can't find the
17334     subprograms using `GCC_EXEC_PREFIX'.
17335
17336`LIBRARY_PATH'
17337     The value of `LIBRARY_PATH' is a colon-separated list of
17338     directories, much like `PATH'.  When configured as a native
17339     compiler, GCC tries the directories thus specified when searching
17340     for special linker files, if it can't find them using
17341     `GCC_EXEC_PREFIX'.  Linking using GCC also uses these directories
17342     when searching for ordinary libraries for the `-l' option (but
17343     directories specified with `-L' come first).
17344
17345`LANG'
17346     This variable is used to pass locale information to the compiler.
17347     One way in which this information is used is to determine the
17348     character set to be used when character literals, string literals
17349     and comments are parsed in C and C++.  When the compiler is
17350     configured to allow multibyte characters, the following values for
17351     `LANG' are recognized:
17352
17353    `C-JIS'
17354          Recognize JIS characters.
17355
17356    `C-SJIS'
17357          Recognize SJIS characters.
17358
17359    `C-EUCJP'
17360          Recognize EUCJP characters.
17361
17362     If `LANG' is not defined, or if it has some other value, then the
17363     compiler will use mblen and mbtowc as defined by the default
17364     locale to recognize and translate multibyte characters.
17365
17366Some additional environments variables affect the behavior of the
17367preprocessor.
17368
17369`CPATH'
17370`C_INCLUDE_PATH'
17371`CPLUS_INCLUDE_PATH'
17372`OBJC_INCLUDE_PATH'
17373     Each variable's value is a list of directories separated by a
17374     special character, much like `PATH', in which to look for header
17375     files.  The special character, `PATH_SEPARATOR', is
17376     target-dependent and determined at GCC build time.  For Microsoft
17377     Windows-based targets it is a semicolon, and for almost all other
17378     targets it is a colon.
17379
17380     `CPATH' specifies a list of directories to be searched as if
17381     specified with `-I', but after any paths given with `-I' options
17382     on the command line.  This environment variable is used regardless
17383     of which language is being preprocessed.
17384
17385     The remaining environment variables apply only when preprocessing
17386     the particular language indicated.  Each specifies a list of
17387     directories to be searched as if specified with `-isystem', but
17388     after any paths given with `-isystem' options on the command line.
17389
17390     In all these variables, an empty element instructs the compiler to
17391     search its current working directory.  Empty elements can appear
17392     at the beginning or end of a path.  For instance, if the value of
17393     `CPATH' is `:/special/include', that has the same effect as
17394     `-I. -I/special/include'.
17395
17396`DEPENDENCIES_OUTPUT'
17397     If this variable is set, its value specifies how to output
17398     dependencies for Make based on the non-system header files
17399     processed by the compiler.  System header files are ignored in the
17400     dependency output.
17401
17402     The value of `DEPENDENCIES_OUTPUT' can be just a file name, in
17403     which case the Make rules are written to that file, guessing the
17404     target name from the source file name.  Or the value can have the
17405     form `FILE TARGET', in which case the rules are written to file
17406     FILE using TARGET as the target name.
17407
17408     In other words, this environment variable is equivalent to
17409     combining the options `-MM' and `-MF' (*note Preprocessor
17410     Options::), with an optional `-MT' switch too.
17411
17412`SUNPRO_DEPENDENCIES'
17413     This variable is the same as `DEPENDENCIES_OUTPUT' (see above),
17414     except that system header files are not ignored, so it implies
17415     `-M' rather than `-MM'.  However, the dependence on the main input
17416     file is omitted.  *Note Preprocessor Options::.
17417
17418
17419File: gcc.info,  Node: Precompiled Headers,  Prev: Environment Variables,  Up: Invoking GCC
17420
174213.20 Using Precompiled Headers
17422==============================
17423
17424Often large projects have many header files that are included in every
17425source file.  The time the compiler takes to process these header files
17426over and over again can account for nearly all of the time required to
17427build the project.  To make builds faster, GCC allows users to
17428`precompile' a header file; then, if builds can use the precompiled
17429header file they will be much faster.
17430
17431 To create a precompiled header file, simply compile it as you would any
17432other file, if necessary using the `-x' option to make the driver treat
17433it as a C or C++ header file.  You will probably want to use a tool
17434like `make' to keep the precompiled header up-to-date when the headers
17435it contains change.
17436
17437 A precompiled header file will be searched for when `#include' is seen
17438in the compilation.  As it searches for the included file (*note Search
17439Path: (cpp)Search Path.) the compiler looks for a precompiled header in
17440each directory just before it looks for the include file in that
17441directory.  The name searched for is the name specified in the
17442`#include' with `.gch' appended.  If the precompiled header file can't
17443be used, it is ignored.
17444
17445 For instance, if you have `#include "all.h"', and you have `all.h.gch'
17446in the same directory as `all.h', then the precompiled header file will
17447be used if possible, and the original header will be used otherwise.
17448
17449 Alternatively, you might decide to put the precompiled header file in a
17450directory and use `-I' to ensure that directory is searched before (or
17451instead of) the directory containing the original header.  Then, if you
17452want to check that the precompiled header file is always used, you can
17453put a file of the same name as the original header in this directory
17454containing an `#error' command.
17455
17456 This also works with `-include'.  So yet another way to use
17457precompiled headers, good for projects not designed with precompiled
17458header files in mind, is to simply take most of the header files used by
17459a project, include them from another header file, precompile that header
17460file, and `-include' the precompiled header.  If the header files have
17461guards against multiple inclusion, they will be skipped because they've
17462already been included (in the precompiled header).
17463
17464 If you need to precompile the same header file for different
17465languages, targets, or compiler options, you can instead make a
17466_directory_ named like `all.h.gch', and put each precompiled header in
17467the directory, perhaps using `-o'.  It doesn't matter what you call the
17468files in the directory, every precompiled header in the directory will
17469be considered.  The first precompiled header encountered in the
17470directory that is valid for this compilation will be used; they're
17471searched in no particular order.
17472
17473 There are many other possibilities, limited only by your imagination,
17474good sense, and the constraints of your build system.
17475
17476 A precompiled header file can be used only when these conditions apply:
17477
17478   * Only one precompiled header can be used in a particular
17479     compilation.
17480
17481   * A precompiled header can't be used once the first C token is seen.
17482     You can have preprocessor directives before a precompiled header;
17483     you can even include a precompiled header from inside another
17484     header, so long as there are no C tokens before the `#include'.
17485
17486   * The precompiled header file must be produced for the same language
17487     as the current compilation.  You can't use a C precompiled header
17488     for a C++ compilation.
17489
17490   * The precompiled header file must have been produced by the same
17491     compiler binary as the current compilation is using.
17492
17493   * Any macros defined before the precompiled header is included must
17494     either be defined in the same way as when the precompiled header
17495     was generated, or must not affect the precompiled header, which
17496     usually means that they don't appear in the precompiled header at
17497     all.
17498
17499     The `-D' option is one way to define a macro before a precompiled
17500     header is included; using a `#define' can also do it.  There are
17501     also some options that define macros implicitly, like `-O' and
17502     `-Wdeprecated'; the same rule applies to macros defined this way.
17503
17504   * If debugging information is output when using the precompiled
17505     header, using `-g' or similar, the same kind of debugging
17506     information must have been output when building the precompiled
17507     header.  However, a precompiled header built using `-g' can be
17508     used in a compilation when no debugging information is being
17509     output.
17510
17511   * The same `-m' options must generally be used when building and
17512     using the precompiled header.  *Note Submodel Options::, for any
17513     cases where this rule is relaxed.
17514
17515   * Each of the following options must be the same when building and
17516     using the precompiled header:
17517
17518          -fexceptions
17519
17520   * Some other command-line options starting with `-f', `-p', or `-O'
17521     must be defined in the same way as when the precompiled header was
17522     generated.  At present, it's not clear which options are safe to
17523     change and which are not; the safest choice is to use exactly the
17524     same options when generating and using the precompiled header.
17525     The following are known to be safe:
17526
17527          -fmessage-length=  -fpreprocessed  -fsched-interblock
17528          -fsched-spec  -fsched-spec-load  -fsched-spec-load-dangerous
17529          -fsched-verbose=NUMBER  -fschedule-insns  -fvisibility=
17530          -pedantic-errors
17531
17532
17533 For all of these except the last, the compiler will automatically
17534ignore the precompiled header if the conditions aren't met.  If you
17535find an option combination that doesn't work and doesn't cause the
17536precompiled header to be ignored, please consider filing a bug report,
17537see *note Bugs::.
17538
17539 If you do use differing options when generating and using the
17540precompiled header, the actual behavior will be a mixture of the
17541behavior for the options.  For instance, if you use `-g' to generate
17542the precompiled header but not when using it, you may or may not get
17543debugging information for routines in the precompiled header.
17544
17545
17546File: gcc.info,  Node: C Implementation,  Next: C Extensions,  Prev: Invoking GCC,  Up: Top
17547
175484 C Implementation-defined behavior
17549***********************************
17550
17551A conforming implementation of ISO C is required to document its choice
17552of behavior in each of the areas that are designated "implementation
17553defined".  The following lists all such areas, along with the section
17554numbers from the ISO/IEC 9899:1990 and ISO/IEC 9899:1999 standards.
17555Some areas are only implementation-defined in one version of the
17556standard.
17557
17558 Some choices depend on the externally determined ABI for the platform
17559(including standard character encodings) which GCC follows; these are
17560listed as "determined by ABI" below.  *Note Binary Compatibility:
17561Compatibility, and `http://gcc.gnu.org/readings.html'.  Some choices
17562are documented in the preprocessor manual.  *Note
17563Implementation-defined behavior: (cpp)Implementation-defined behavior.
17564Some choices are made by the library and operating system (or other
17565environment when compiling for a freestanding environment); refer to
17566their documentation for details.
17567
17568* Menu:
17569
17570* Translation implementation::
17571* Environment implementation::
17572* Identifiers implementation::
17573* Characters implementation::
17574* Integers implementation::
17575* Floating point implementation::
17576* Arrays and pointers implementation::
17577* Hints implementation::
17578* Structures unions enumerations and bit-fields implementation::
17579* Qualifiers implementation::
17580* Declarators implementation::
17581* Statements implementation::
17582* Preprocessing directives implementation::
17583* Library functions implementation::
17584* Architecture implementation::
17585* Locale-specific behavior implementation::
17586
17587
17588File: gcc.info,  Node: Translation implementation,  Next: Environment implementation,  Up: C Implementation
17589
175904.1 Translation
17591===============
17592
17593   * `How a diagnostic is identified (C90 3.7, C99 3.10, C90 and C99
17594     5.1.1.3).'
17595
17596     Diagnostics consist of all the output sent to stderr by GCC.
17597
17598   * `Whether each nonempty sequence of white-space characters other
17599     than new-line is retained or replaced by one space character in
17600     translation phase 3 (C90 and C99 5.1.1.2).'
17601
17602     *Note Implementation-defined behavior: (cpp)Implementation-defined
17603     behavior.
17604
17605
17606
17607File: gcc.info,  Node: Environment implementation,  Next: Identifiers implementation,  Prev: Translation implementation,  Up: C Implementation
17608
176094.2 Environment
17610===============
17611
17612The behavior of most of these points are dependent on the implementation
17613of the C library, and are not defined by GCC itself.
17614
17615   * `The mapping between physical source file multibyte characters and
17616     the source character set in translation phase 1 (C90 and C99
17617     5.1.1.2).'
17618
17619     *Note Implementation-defined behavior: (cpp)Implementation-defined
17620     behavior.
17621
17622
17623
17624File: gcc.info,  Node: Identifiers implementation,  Next: Characters implementation,  Prev: Environment implementation,  Up: C Implementation
17625
176264.3 Identifiers
17627===============
17628
17629   * `Which additional multibyte characters may appear in identifiers
17630     and their correspondence to universal character names (C99 6.4.2).'
17631
17632     *Note Implementation-defined behavior: (cpp)Implementation-defined
17633     behavior.
17634
17635   * `The number of significant initial characters in an identifier
17636     (C90 6.1.2, C90 and C99 5.2.4.1, C99 6.4.2).'
17637
17638     For internal names, all characters are significant.  For external
17639     names, the number of significant characters are defined by the
17640     linker; for almost all targets, all characters are significant.
17641
17642   * `Whether case distinctions are significant in an identifier with
17643     external linkage (C90 6.1.2).'
17644
17645     This is a property of the linker.  C99 requires that case
17646     distinctions are always significant in identifiers with external
17647     linkage and systems without this property are not supported by GCC.
17648
17649
17650
17651File: gcc.info,  Node: Characters implementation,  Next: Integers implementation,  Prev: Identifiers implementation,  Up: C Implementation
17652
176534.4 Characters
17654==============
17655
17656   * `The number of bits in a byte (C90 3.4, C99 3.6).'
17657
17658     Determined by ABI.
17659
17660   * `The values of the members of the execution character set (C90 and
17661     C99 5.2.1).'
17662
17663     Determined by ABI.
17664
17665   * `The unique value of the member of the execution character set
17666     produced for each of the standard alphabetic escape sequences (C90
17667     and C99 5.2.2).'
17668
17669     Determined by ABI.
17670
17671   * `The value of a `char' object into which has been stored any
17672     character other than a member of the basic execution character set
17673     (C90 6.1.2.5, C99 6.2.5).'
17674
17675     Determined by ABI.
17676
17677   * `Which of `signed char' or `unsigned char' has the same range,
17678     representation, and behavior as "plain" `char' (C90 6.1.2.5, C90
17679     6.2.1.1, C99 6.2.5, C99 6.3.1.1).'
17680
17681     Determined by ABI.  The options `-funsigned-char' and
17682     `-fsigned-char' change the default.  *Note Options Controlling C
17683     Dialect: C Dialect Options.
17684
17685   * `The mapping of members of the source character set (in character
17686     constants and string literals) to members of the execution
17687     character set (C90 6.1.3.4, C99 6.4.4.4, C90 and C99 5.1.1.2).'
17688
17689     Determined by ABI.
17690
17691   * `The value of an integer character constant containing more than
17692     one character or containing a character or escape sequence that
17693     does not map to a single-byte execution character (C90 6.1.3.4,
17694     C99 6.4.4.4).'
17695
17696     *Note Implementation-defined behavior: (cpp)Implementation-defined
17697     behavior.
17698
17699   * `The value of a wide character constant containing more than one
17700     multibyte character, or containing a multibyte character or escape
17701     sequence not represented in the extended execution character set
17702     (C90 6.1.3.4, C99 6.4.4.4).'
17703
17704     *Note Implementation-defined behavior: (cpp)Implementation-defined
17705     behavior.
17706
17707   * `The current locale used to convert a wide character constant
17708     consisting of a single multibyte character that maps to a member
17709     of the extended execution character set into a corresponding wide
17710     character code (C90 6.1.3.4, C99 6.4.4.4).'
17711
17712     *Note Implementation-defined behavior: (cpp)Implementation-defined
17713     behavior.
17714
17715   * `The current locale used to convert a wide string literal into
17716     corresponding wide character codes (C90 6.1.4, C99 6.4.5).'
17717
17718     *Note Implementation-defined behavior: (cpp)Implementation-defined
17719     behavior.
17720
17721   * `The value of a string literal containing a multibyte character or
17722     escape sequence not represented in the execution character set
17723     (C90 6.1.4, C99 6.4.5).'
17724
17725     *Note Implementation-defined behavior: (cpp)Implementation-defined
17726     behavior.
17727
17728
17729File: gcc.info,  Node: Integers implementation,  Next: Floating point implementation,  Prev: Characters implementation,  Up: C Implementation
17730
177314.5 Integers
17732============
17733
17734   * `Any extended integer types that exist in the implementation (C99
17735     6.2.5).'
17736
17737     GCC does not support any extended integer types.
17738
17739   * `Whether signed integer types are represented using sign and
17740     magnitude, two's complement, or one's complement, and whether the
17741     extraordinary value is a trap representation or an ordinary value
17742     (C99 6.2.6.2).'
17743
17744     GCC supports only two's complement integer types, and all bit
17745     patterns are ordinary values.
17746
17747   * `The rank of any extended integer type relative to another extended
17748     integer type with the same precision (C99 6.3.1.1).'
17749
17750     GCC does not support any extended integer types.
17751
17752   * `The result of, or the signal raised by, converting an integer to a
17753     signed integer type when the value cannot be represented in an
17754     object of that type (C90 6.2.1.2, C99 6.3.1.3).'
17755
17756     For conversion to a type of width N, the value is reduced modulo
17757     2^N to be within range of the type; no signal is raised.
17758
17759   * `The results of some bitwise operations on signed integers (C90
17760     6.3, C99 6.5).'
17761
17762     Bitwise operators act on the representation of the value including
17763     both the sign and value bits, where the sign bit is considered
17764     immediately above the highest-value value bit.  Signed `>>' acts
17765     on negative numbers by sign extension.
17766
17767     GCC does not use the latitude given in C99 only to treat certain
17768     aspects of signed `<<' as undefined, but this is subject to change.
17769
17770   * `The sign of the remainder on integer division (C90 6.3.5).'
17771
17772     GCC always follows the C99 requirement that the result of division
17773     is truncated towards zero.
17774
17775
17776
17777File: gcc.info,  Node: Floating point implementation,  Next: Arrays and pointers implementation,  Prev: Integers implementation,  Up: C Implementation
17778
177794.6 Floating point
17780==================
17781
17782   * `The accuracy of the floating-point operations and of the library
17783     functions in `<math.h>' and `<complex.h>' that return
17784     floating-point results (C90 and C99 5.2.4.2.2).'
17785
17786     The accuracy is unknown.
17787
17788   * `The rounding behaviors characterized by non-standard values of
17789     `FLT_ROUNDS'  (C90 and C99 5.2.4.2.2).'
17790
17791     GCC does not use such values.
17792
17793   * `The evaluation methods characterized by non-standard negative
17794     values of `FLT_EVAL_METHOD' (C99 5.2.4.2.2).'
17795
17796     GCC does not use such values.
17797
17798   * `The direction of rounding when an integer is converted to a
17799     floating-point number that cannot exactly represent the original
17800     value (C90 6.2.1.3, C99 6.3.1.4).'
17801
17802     C99 Annex F is followed.
17803
17804   * `The direction of rounding when a floating-point number is
17805     converted to a narrower floating-point number (C90 6.2.1.4, C99
17806     6.3.1.5).'
17807
17808     C99 Annex F is followed.
17809
17810   * `How the nearest representable value or the larger or smaller
17811     representable value immediately adjacent to the nearest
17812     representable value is chosen for certain floating constants (C90
17813     6.1.3.1, C99 6.4.4.2).'
17814
17815     C99 Annex F is followed.
17816
17817   * `Whether and how floating expressions are contracted when not
17818     disallowed by the `FP_CONTRACT' pragma (C99 6.5).'
17819
17820     Expressions are currently only contracted if
17821     `-funsafe-math-optimizations' or `-ffast-math' are used.  This is
17822     subject to change.
17823
17824   * `The default state for the `FENV_ACCESS' pragma (C99 7.6.1).'
17825
17826     This pragma is not implemented, but the default is to "off" unless
17827     `-frounding-math' is used in which case it is "on".
17828
17829   * `Additional floating-point exceptions, rounding modes,
17830     environments, and classifications, and their macro names (C99 7.6,
17831     C99 7.12).'
17832
17833     This is dependent on the implementation of the C library, and is
17834     not defined by GCC itself.
17835
17836   * `The default state for the `FP_CONTRACT' pragma (C99 7.12.2).'
17837
17838     This pragma is not implemented.  Expressions are currently only
17839     contracted if `-funsafe-math-optimizations' or `-ffast-math' are
17840     used.  This is subject to change.
17841
17842   * `Whether the "inexact" floating-point exception can be raised when
17843     the rounded result actually does equal the mathematical result in
17844     an IEC 60559 conformant implementation (C99 F.9).'
17845
17846     This is dependent on the implementation of the C library, and is
17847     not defined by GCC itself.
17848
17849   * `Whether the "underflow" (and "inexact") floating-point exception
17850     can be raised when a result is tiny but not inexact in an IEC
17851     60559 conformant implementation (C99 F.9).'
17852
17853     This is dependent on the implementation of the C library, and is
17854     not defined by GCC itself.
17855
17856
17857
17858File: gcc.info,  Node: Arrays and pointers implementation,  Next: Hints implementation,  Prev: Floating point implementation,  Up: C Implementation
17859
178604.7 Arrays and pointers
17861=======================
17862
17863   * `The result of converting a pointer to an integer or vice versa
17864     (C90 6.3.4, C99 6.3.2.3).'
17865
17866     A cast from pointer to integer discards most-significant bits if
17867     the pointer representation is larger than the integer type,
17868     sign-extends(1) if the pointer representation is smaller than the
17869     integer type, otherwise the bits are unchanged.
17870
17871     A cast from integer to pointer discards most-significant bits if
17872     the pointer representation is smaller than the integer type,
17873     extends according to the signedness of the integer type if the
17874     pointer representation is larger than the integer type, otherwise
17875     the bits are unchanged.
17876
17877     When casting from pointer to integer and back again, the resulting
17878     pointer must reference the same object as the original pointer,
17879     otherwise the behavior is undefined.  That is, one may not use
17880     integer arithmetic to avoid the undefined behavior of pointer
17881     arithmetic as proscribed in C99 6.5.6/8.
17882
17883   * `The size of the result of subtracting two pointers to elements of
17884     the same array (C90 6.3.6, C99 6.5.6).'
17885
17886     The value is as specified in the standard and the type is
17887     determined by the ABI.
17888
17889
17890 ---------- Footnotes ----------
17891
17892 (1) Future versions of GCC may zero-extend, or use a target-defined
17893`ptr_extend' pattern.  Do not rely on sign extension.
17894
17895
17896File: gcc.info,  Node: Hints implementation,  Next: Structures unions enumerations and bit-fields implementation,  Prev: Arrays and pointers implementation,  Up: C Implementation
17897
178984.8 Hints
17899=========
17900
17901   * `The extent to which suggestions made by using the `register'
17902     storage-class specifier are effective (C90 6.5.1, C99 6.7.1).'
17903
17904     The `register' specifier affects code generation only in these
17905     ways:
17906
17907        * When used as part of the register variable extension, see
17908          *note Explicit Reg Vars::.
17909
17910        * When `-O0' is in use, the compiler allocates distinct stack
17911          memory for all variables that do not have the `register'
17912          storage-class specifier; if `register' is specified, the
17913          variable may have a shorter lifespan than the code would
17914          indicate and may never be placed in memory.
17915
17916        * On some rare x86 targets, `setjmp' doesn't save the registers
17917          in all circumstances.  In those cases, GCC doesn't allocate
17918          any variables in registers unless they are marked `register'.
17919
17920
17921   * `The extent to which suggestions made by using the inline function
17922     specifier are effective (C99 6.7.4).'
17923
17924     GCC will not inline any functions if the `-fno-inline' option is
17925     used or if `-O0' is used.  Otherwise, GCC may still be unable to
17926     inline a function for many reasons; the `-Winline' option may be
17927     used to determine if a function has not been inlined and why not.
17928
17929
17930
17931File: gcc.info,  Node: Structures unions enumerations and bit-fields implementation,  Next: Qualifiers implementation,  Prev: Hints implementation,  Up: C Implementation
17932
179334.9 Structures, unions, enumerations, and bit-fields
17934====================================================
17935
17936   * `A member of a union object is accessed using a member of a
17937     different type (C90 6.3.2.3).'
17938
17939     The relevant bytes of the representation of the object are treated
17940     as an object of the type used for the access.  *Note
17941     Type-punning::.  This may be a trap representation.
17942
17943   * `Whether a "plain" `int' bit-field is treated as a `signed int'
17944     bit-field or as an `unsigned int' bit-field (C90 6.5.2, C90
17945     6.5.2.1, C99 6.7.2, C99 6.7.2.1).'
17946
17947     By default it is treated as `signed int' but this may be changed
17948     by the `-funsigned-bitfields' option.
17949
17950   * `Allowable bit-field types other than `_Bool', `signed int', and
17951     `unsigned int' (C99 6.7.2.1).'
17952
17953     No other types are permitted in strictly conforming mode.
17954
17955   * `Whether a bit-field can straddle a storage-unit boundary (C90
17956     6.5.2.1, C99 6.7.2.1).'
17957
17958     Determined by ABI.
17959
17960   * `The order of allocation of bit-fields within a unit (C90 6.5.2.1,
17961     C99 6.7.2.1).'
17962
17963     Determined by ABI.
17964
17965   * `The alignment of non-bit-field members of structures (C90
17966     6.5.2.1, C99 6.7.2.1).'
17967
17968     Determined by ABI.
17969
17970   * `The integer type compatible with each enumerated type (C90
17971     6.5.2.2, C99 6.7.2.2).'
17972
17973     Normally, the type is `unsigned int' if there are no negative
17974     values in the enumeration, otherwise `int'.  If `-fshort-enums' is
17975     specified, then if there are negative values it is the first of
17976     `signed char', `short' and `int' that can represent all the
17977     values, otherwise it is the first of `unsigned char', `unsigned
17978     short' and `unsigned int' that can represent all the values.
17979
17980     On some targets, `-fshort-enums' is the default; this is
17981     determined by the ABI.
17982
17983
17984
17985File: gcc.info,  Node: Qualifiers implementation,  Next: Declarators implementation,  Prev: Structures unions enumerations and bit-fields implementation,  Up: C Implementation
17986
179874.10 Qualifiers
17988===============
17989
17990   * `What constitutes an access to an object that has
17991     volatile-qualified type (C90 6.5.3, C99 6.7.3).'
17992
17993     Such an object is normally accessed by pointers and used for
17994     accessing hardware.  In most expressions, it is intuitively
17995     obvious what is a read and what is a write.  For example
17996
17997          volatile int *dst = SOMEVALUE;
17998          volatile int *src = SOMEOTHERVALUE;
17999          *dst = *src;
18000
18001     will cause a read of the volatile object pointed to by SRC and
18002     store the value into the volatile object pointed to by DST.  There
18003     is no guarantee that these reads and writes are atomic, especially
18004     for objects larger than `int'.
18005
18006     However, if the volatile storage is not being modified, and the
18007     value of the volatile storage is not used, then the situation is
18008     less obvious.  For example
18009
18010          volatile int *src = SOMEVALUE;
18011          *src;
18012
18013     According to the C standard, such an expression is an rvalue whose
18014     type is the unqualified version of its original type, i.e. `int'.
18015     Whether GCC interprets this as a read of the volatile object being
18016     pointed to or only as a request to evaluate the expression for its
18017     side-effects depends on this type.
18018
18019     If it is a scalar type, or on most targets an aggregate type whose
18020     only member object is of a scalar type, or a union type whose
18021     member objects are of scalar types, the expression is interpreted
18022     by GCC as a read of the volatile object; in the other cases, the
18023     expression is only evaluated for its side-effects.
18024
18025
18026
18027File: gcc.info,  Node: Declarators implementation,  Next: Statements implementation,  Prev: Qualifiers implementation,  Up: C Implementation
18028
180294.11 Declarators
18030================
18031
18032   * `The maximum number of declarators that may modify an arithmetic,
18033     structure or union type (C90 6.5.4).'
18034
18035     GCC is only limited by available memory.
18036
18037
18038
18039File: gcc.info,  Node: Statements implementation,  Next: Preprocessing directives implementation,  Prev: Declarators implementation,  Up: C Implementation
18040
180414.12 Statements
18042===============
18043
18044   * `The maximum number of `case' values in a `switch' statement (C90
18045     6.6.4.2).'
18046
18047     GCC is only limited by available memory.
18048
18049
18050
18051File: gcc.info,  Node: Preprocessing directives implementation,  Next: Library functions implementation,  Prev: Statements implementation,  Up: C Implementation
18052
180534.13 Preprocessing directives
18054=============================
18055
18056*Note Implementation-defined behavior: (cpp)Implementation-defined
18057behavior, for details of these aspects of implementation-defined
18058behavior.
18059
18060   * `How sequences in both forms of header names are mapped to headers
18061     or external source file names (C90 6.1.7, C99 6.4.7).'
18062
18063   * `Whether the value of a character constant in a constant expression
18064     that controls conditional inclusion matches the value of the same
18065     character constant in the execution character set (C90 6.8.1, C99
18066     6.10.1).'
18067
18068   * `Whether the value of a single-character character constant in a
18069     constant expression that controls conditional inclusion may have a
18070     negative value (C90 6.8.1, C99 6.10.1).'
18071
18072   * `The places that are searched for an included `<>' delimited
18073     header, and how the places are specified or the header is
18074     identified (C90 6.8.2, C99 6.10.2).'
18075
18076   * `How the named source file is searched for in an included `""'
18077     delimited header (C90 6.8.2, C99 6.10.2).'
18078
18079   * `The method by which preprocessing tokens (possibly resulting from
18080     macro expansion) in a `#include' directive are combined into a
18081     header name (C90 6.8.2, C99 6.10.2).'
18082
18083   * `The nesting limit for `#include' processing (C90 6.8.2, C99
18084     6.10.2).'
18085
18086   * `Whether the `#' operator inserts a `\' character before the `\'
18087     character that begins a universal character name in a character
18088     constant or string literal (C99 6.10.3.2).'
18089
18090   * `The behavior on each recognized non-`STDC #pragma' directive (C90
18091     6.8.6, C99 6.10.6).'
18092
18093     *Note Pragmas: (cpp)Pragmas, for details of pragmas accepted by
18094     GCC on all targets.  *Note Pragmas Accepted by GCC: Pragmas, for
18095     details of target-specific pragmas.
18096
18097   * `The definitions for `__DATE__' and `__TIME__' when respectively,
18098     the date and time of translation are not available (C90 6.8.8, C99
18099     6.10.8).'
18100
18101
18102
18103File: gcc.info,  Node: Library functions implementation,  Next: Architecture implementation,  Prev: Preprocessing directives implementation,  Up: C Implementation
18104
181054.14 Library functions
18106======================
18107
18108The behavior of most of these points are dependent on the implementation
18109of the C library, and are not defined by GCC itself.
18110
18111   * `The null pointer constant to which the macro `NULL' expands (C90
18112     7.1.6, C99 7.17).'
18113
18114     In `<stddef.h>', `NULL' expands to `((void *)0)'.  GCC does not
18115     provide the other headers which define `NULL' and some library
18116     implementations may use other definitions in those headers.
18117
18118
18119
18120File: gcc.info,  Node: Architecture implementation,  Next: Locale-specific behavior implementation,  Prev: Library functions implementation,  Up: C Implementation
18121
181224.15 Architecture
18123=================
18124
18125   * `The values or expressions assigned to the macros specified in the
18126     headers `<float.h>', `<limits.h>', and `<stdint.h>' (C90 and C99
18127     5.2.4.2, C99 7.18.2, C99 7.18.3).'
18128
18129     Determined by ABI.
18130
18131   * `The number, order, and encoding of bytes in any object (when not
18132     explicitly specified in this International Standard) (C99
18133     6.2.6.1).'
18134
18135     Determined by ABI.
18136
18137   * `The value of the result of the `sizeof' operator (C90 6.3.3.4,
18138     C99 6.5.3.4).'
18139
18140     Determined by ABI.
18141
18142
18143
18144File: gcc.info,  Node: Locale-specific behavior implementation,  Prev: Architecture implementation,  Up: C Implementation
18145
181464.16 Locale-specific behavior
18147=============================
18148
18149The behavior of these points are dependent on the implementation of the
18150C library, and are not defined by GCC itself.
18151
18152
18153File: gcc.info,  Node: C++ Implementation,  Next: C++ Extensions,  Prev: C Extensions,  Up: Top
18154
181555 C++ Implementation-defined behavior
18156*************************************
18157
18158A conforming implementation of ISO C++ is required to document its
18159choice of behavior in each of the areas that are designated
18160"implementation defined".  The following lists all such areas, along
18161with the section numbers from the ISO/IEC 14822:1998 and ISO/IEC
1816214822:2003 standards.  Some areas are only implementation-defined in
18163one version of the standard.
18164
18165 Some choices depend on the externally determined ABI for the platform
18166(including standard character encodings) which GCC follows; these are
18167listed as "determined by ABI" below.  *Note Binary Compatibility:
18168Compatibility, and `http://gcc.gnu.org/readings.html'.  Some choices
18169are documented in the preprocessor manual.  *Note
18170Implementation-defined behavior: (cpp)Implementation-defined behavior.
18171Some choices are documented in the corresponding document for the C
18172language.  *Note C Implementation::.  Some choices are made by the
18173library and operating system (or other environment when compiling for a
18174freestanding environment); refer to their documentation for details.
18175
18176* Menu:
18177
18178* Conditionally-supported behavior::
18179* Exception handling::
18180
18181
18182File: gcc.info,  Node: Conditionally-supported behavior,  Next: Exception handling,  Up: C++ Implementation
18183
181845.1 Conditionally-supported behavior
18185====================================
18186
18187`Each implementation shall include documentation that identifies all
18188conditionally-supported constructs that it does not support (C++0x
181891.4).'
18190
18191   * `Whether an argument of class type with a non-trivial copy
18192     constructor or destructor can be passed to ... (C++0x 5.2.2).'
18193
18194     Such argument passing is not supported.
18195
18196
18197
18198File: gcc.info,  Node: Exception handling,  Prev: Conditionally-supported behavior,  Up: C++ Implementation
18199
182005.2 Exception handling
18201======================
18202
18203   * `In the situation where no matching handler is found, it is
18204     implementation-defined whether or not the stack is unwound before
18205     std::terminate() is called (C++98 15.5.1).'
18206
18207     The stack is not unwound before std::terminate is called.
18208
18209
18210
18211File: gcc.info,  Node: C Extensions,  Next: C++ Implementation,  Prev: C Implementation,  Up: Top
18212
182136 Extensions to the C Language Family
18214*************************************
18215
18216GNU C provides several language features not found in ISO standard C.
18217(The `-pedantic' option directs GCC to print a warning message if any
18218of these features is used.)  To test for the availability of these
18219features in conditional compilation, check for a predefined macro
18220`__GNUC__', which is always defined under GCC.
18221
18222 These extensions are available in C and Objective-C.  Most of them are
18223also available in C++.  *Note Extensions to the C++ Language: C++
18224Extensions, for extensions that apply _only_ to C++.
18225
18226 Some features that are in ISO C99 but not C90 or C++ are also, as
18227extensions, accepted by GCC in C90 mode and in C++.
18228
18229* Menu:
18230
18231* Statement Exprs::     Putting statements and declarations inside expressions.
18232* Local Labels::        Labels local to a block.
18233* Labels as Values::    Getting pointers to labels, and computed gotos.
18234* Nested Functions::    As in Algol and Pascal, lexical scoping of functions.
18235* Constructing Calls::  Dispatching a call to another function.
18236* Typeof::              `typeof': referring to the type of an expression.
18237* Conditionals::        Omitting the middle operand of a `?:' expression.
18238* Long Long::           Double-word integers---`long long int'.
18239* __int128::			128-bit integers---`__int128'.
18240* Complex::             Data types for complex numbers.
18241* Floating Types::      Additional Floating Types.
18242* Half-Precision::      Half-Precision Floating Point.
18243* Decimal Float::       Decimal Floating Types.
18244* Hex Floats::          Hexadecimal floating-point constants.
18245* Fixed-Point::         Fixed-Point Types.
18246* Named Address Spaces::Named address spaces.
18247* Zero Length::         Zero-length arrays.
18248* Variable Length::     Arrays whose length is computed at run time.
18249* Empty Structures::    Structures with no members.
18250* Variadic Macros::     Macros with a variable number of arguments.
18251* Escaped Newlines::    Slightly looser rules for escaped newlines.
18252* Subscripting::        Any array can be subscripted, even if not an lvalue.
18253* Pointer Arith::       Arithmetic on `void'-pointers and function pointers.
18254* Initializers::        Non-constant initializers.
18255* Compound Literals::   Compound literals give structures, unions
18256                        or arrays as values.
18257* Designated Inits::    Labeling elements of initializers.
18258* Cast to Union::       Casting to union type from any member of the union.
18259* Case Ranges::         `case 1 ... 9' and such.
18260* Mixed Declarations::  Mixing declarations and code.
18261* Function Attributes:: Declaring that functions have no side effects,
18262                        or that they can never return.
18263* Attribute Syntax::    Formal syntax for attributes.
18264* Function Prototypes:: Prototype declarations and old-style definitions.
18265* C++ Comments::        C++ comments are recognized.
18266* Dollar Signs::        Dollar sign is allowed in identifiers.
18267* Character Escapes::   `\e' stands for the character <ESC>.
18268* Variable Attributes:: Specifying attributes of variables.
18269* Type Attributes::     Specifying attributes of types.
18270* Alignment::           Inquiring about the alignment of a type or variable.
18271* Inline::              Defining inline functions (as fast as macros).
18272* Volatiles::           What constitutes an access to a volatile object.
18273* Extended Asm::        Assembler instructions with C expressions as operands.
18274                        (With them you can define ``built-in'' functions.)
18275* Constraints::         Constraints for asm operands
18276* Asm Labels::          Specifying the assembler name to use for a C symbol.
18277* Explicit Reg Vars::   Defining variables residing in specified registers.
18278* Alternate Keywords::  `__const__', `__asm__', etc., for header files.
18279* Incomplete Enums::    `enum foo;', with details to follow.
18280* Function Names::      Printable strings which are the name of the current
18281                        function.
18282* Return Address::      Getting the return or frame address of a function.
18283* Vector Extensions::   Using vector instructions through built-in functions.
18284* Offsetof::            Special syntax for implementing `offsetof'.
18285* Atomic Builtins::     Built-in functions for atomic memory access.
18286* Object Size Checking:: Built-in functions for limited buffer overflow
18287                        checking.
18288* Other Builtins::      Other built-in functions.
18289* Target Builtins::     Built-in functions specific to particular targets.
18290* Target Format Checks:: Format checks specific to particular targets.
18291* Pragmas::             Pragmas accepted by GCC.
18292* Unnamed Fields::      Unnamed struct/union fields within structs/unions.
18293* Thread-Local::        Per-thread variables.
18294* Binary constants::    Binary constants using the `0b' prefix.
18295
18296
18297File: gcc.info,  Node: Statement Exprs,  Next: Local Labels,  Up: C Extensions
18298
182996.1 Statements and Declarations in Expressions
18300==============================================
18301
18302A compound statement enclosed in parentheses may appear as an expression
18303in GNU C.  This allows you to use loops, switches, and local variables
18304within an expression.
18305
18306 Recall that a compound statement is a sequence of statements surrounded
18307by braces; in this construct, parentheses go around the braces.  For
18308example:
18309
18310     ({ int y = foo (); int z;
18311        if (y > 0) z = y;
18312        else z = - y;
18313        z; })
18314
18315is a valid (though slightly more complex than necessary) expression for
18316the absolute value of `foo ()'.
18317
18318 The last thing in the compound statement should be an expression
18319followed by a semicolon; the value of this subexpression serves as the
18320value of the entire construct.  (If you use some other kind of statement
18321last within the braces, the construct has type `void', and thus
18322effectively no value.)
18323
18324 This feature is especially useful in making macro definitions "safe"
18325(so that they evaluate each operand exactly once).  For example, the
18326"maximum" function is commonly defined as a macro in standard C as
18327follows:
18328
18329     #define max(a,b) ((a) > (b) ? (a) : (b))
18330
18331But this definition computes either A or B twice, with bad results if
18332the operand has side effects.  In GNU C, if you know the type of the
18333operands (here taken as `int'), you can define the macro safely as
18334follows:
18335
18336     #define maxint(a,b) \
18337       ({int _a = (a), _b = (b); _a > _b ? _a : _b; })
18338
18339 Embedded statements are not allowed in constant expressions, such as
18340the value of an enumeration constant, the width of a bit-field, or the
18341initial value of a static variable.
18342
18343 If you don't know the type of the operand, you can still do this, but
18344you must use `typeof' (*note Typeof::).
18345
18346 In G++, the result value of a statement expression undergoes array and
18347function pointer decay, and is returned by value to the enclosing
18348expression.  For instance, if `A' is a class, then
18349
18350             A a;
18351
18352             ({a;}).Foo ()
18353
18354will construct a temporary `A' object to hold the result of the
18355statement expression, and that will be used to invoke `Foo'.  Therefore
18356the `this' pointer observed by `Foo' will not be the address of `a'.
18357
18358 Any temporaries created within a statement within a statement
18359expression will be destroyed at the statement's end.  This makes
18360statement expressions inside macros slightly different from function
18361calls.  In the latter case temporaries introduced during argument
18362evaluation will be destroyed at the end of the statement that includes
18363the function call.  In the statement expression case they will be
18364destroyed during the statement expression.  For instance,
18365
18366     #define macro(a)  ({__typeof__(a) b = (a); b + 3; })
18367     template<typename T> T function(T a) { T b = a; return b + 3; }
18368
18369     void foo ()
18370     {
18371       macro (X ());
18372       function (X ());
18373     }
18374
18375will have different places where temporaries are destroyed.  For the
18376`macro' case, the temporary `X' will be destroyed just after the
18377initialization of `b'.  In the `function' case that temporary will be
18378destroyed when the function returns.
18379
18380 These considerations mean that it is probably a bad idea to use
18381statement-expressions of this form in header files that are designed to
18382work with C++.  (Note that some versions of the GNU C Library contained
18383header files using statement-expression that lead to precisely this
18384bug.)
18385
18386 Jumping into a statement expression with `goto' or using a `switch'
18387statement outside the statement expression with a `case' or `default'
18388label inside the statement expression is not permitted.  Jumping into a
18389statement expression with a computed `goto' (*note Labels as Values::)
18390yields undefined behavior.  Jumping out of a statement expression is
18391permitted, but if the statement expression is part of a larger
18392expression then it is unspecified which other subexpressions of that
18393expression have been evaluated except where the language definition
18394requires certain subexpressions to be evaluated before or after the
18395statement expression.  In any case, as with a function call the
18396evaluation of a statement expression is not interleaved with the
18397evaluation of other parts of the containing expression.  For example,
18398
18399       foo (), (({ bar1 (); goto a; 0; }) + bar2 ()), baz();
18400
18401will call `foo' and `bar1' and will not call `baz' but may or may not
18402call `bar2'.  If `bar2' is called, it will be called after `foo' and
18403before `bar1'
18404
18405
18406File: gcc.info,  Node: Local Labels,  Next: Labels as Values,  Prev: Statement Exprs,  Up: C Extensions
18407
184086.2 Locally Declared Labels
18409===========================
18410
18411GCC allows you to declare "local labels" in any nested block scope.  A
18412local label is just like an ordinary label, but you can only reference
18413it (with a `goto' statement, or by taking its address) within the block
18414in which it was declared.
18415
18416 A local label declaration looks like this:
18417
18418     __label__ LABEL;
18419
18420or
18421
18422     __label__ LABEL1, LABEL2, /* ... */;
18423
18424 Local label declarations must come at the beginning of the block,
18425before any ordinary declarations or statements.
18426
18427 The label declaration defines the label _name_, but does not define
18428the label itself.  You must do this in the usual way, with `LABEL:',
18429within the statements of the statement expression.
18430
18431 The local label feature is useful for complex macros.  If a macro
18432contains nested loops, a `goto' can be useful for breaking out of them.
18433However, an ordinary label whose scope is the whole function cannot be
18434used: if the macro can be expanded several times in one function, the
18435label will be multiply defined in that function.  A local label avoids
18436this problem.  For example:
18437
18438     #define SEARCH(value, array, target)              \
18439     do {                                              \
18440       __label__ found;                                \
18441       typeof (target) _SEARCH_target = (target);      \
18442       typeof (*(array)) *_SEARCH_array = (array);     \
18443       int i, j;                                       \
18444       int value;                                      \
18445       for (i = 0; i < max; i++)                       \
18446         for (j = 0; j < max; j++)                     \
18447           if (_SEARCH_array[i][j] == _SEARCH_target)  \
18448             { (value) = i; goto found; }              \
18449       (value) = -1;                                   \
18450      found:;                                          \
18451     } while (0)
18452
18453 This could also be written using a statement-expression:
18454
18455     #define SEARCH(array, target)                     \
18456     ({                                                \
18457       __label__ found;                                \
18458       typeof (target) _SEARCH_target = (target);      \
18459       typeof (*(array)) *_SEARCH_array = (array);     \
18460       int i, j;                                       \
18461       int value;                                      \
18462       for (i = 0; i < max; i++)                       \
18463         for (j = 0; j < max; j++)                     \
18464           if (_SEARCH_array[i][j] == _SEARCH_target)  \
18465             { value = i; goto found; }                \
18466       value = -1;                                     \
18467      found:                                           \
18468       value;                                          \
18469     })
18470
18471 Local label declarations also make the labels they declare visible to
18472nested functions, if there are any.  *Note Nested Functions::, for
18473details.
18474
18475
18476File: gcc.info,  Node: Labels as Values,  Next: Nested Functions,  Prev: Local Labels,  Up: C Extensions
18477
184786.3 Labels as Values
18479====================
18480
18481You can get the address of a label defined in the current function (or
18482a containing function) with the unary operator `&&'.  The value has
18483type `void *'.  This value is a constant and can be used wherever a
18484constant of that type is valid.  For example:
18485
18486     void *ptr;
18487     /* ... */
18488     ptr = &&foo;
18489
18490 To use these values, you need to be able to jump to one.  This is done
18491with the computed goto statement(1), `goto *EXP;'.  For example,
18492
18493     goto *ptr;
18494
18495Any expression of type `void *' is allowed.
18496
18497 One way of using these constants is in initializing a static array that
18498will serve as a jump table:
18499
18500     static void *array[] = { &&foo, &&bar, &&hack };
18501
18502 Then you can select a label with indexing, like this:
18503
18504     goto *array[i];
18505
18506Note that this does not check whether the subscript is in bounds--array
18507indexing in C never does that.
18508
18509 Such an array of label values serves a purpose much like that of the
18510`switch' statement.  The `switch' statement is cleaner, so use that
18511rather than an array unless the problem does not fit a `switch'
18512statement very well.
18513
18514 Another use of label values is in an interpreter for threaded code.
18515The labels within the interpreter function can be stored in the
18516threaded code for super-fast dispatching.
18517
18518 You may not use this mechanism to jump to code in a different function.
18519If you do that, totally unpredictable things will happen.  The best way
18520to avoid this is to store the label address only in automatic variables
18521and never pass it as an argument.
18522
18523 An alternate way to write the above example is
18524
18525     static const int array[] = { &&foo - &&foo, &&bar - &&foo,
18526                                  &&hack - &&foo };
18527     goto *(&&foo + array[i]);
18528
18529This is more friendly to code living in shared libraries, as it reduces
18530the number of dynamic relocations that are needed, and by consequence,
18531allows the data to be read-only.
18532
18533 The `&&foo' expressions for the same label might have different values
18534if the containing function is inlined or cloned.  If a program relies
18535on them being always the same,
18536`__attribute__((__noinline__,__noclone__))' should be used to prevent
18537inlining and cloning.  If `&&foo' is used in a static variable
18538initializer, inlining and cloning is forbidden.
18539
18540 ---------- Footnotes ----------
18541
18542 (1) The analogous feature in Fortran is called an assigned goto, but
18543that name seems inappropriate in C, where one can do more than simply
18544store label addresses in label variables.
18545
18546
18547File: gcc.info,  Node: Nested Functions,  Next: Constructing Calls,  Prev: Labels as Values,  Up: C Extensions
18548
185496.4 Nested Functions
18550====================
18551
18552A "nested function" is a function defined inside another function.
18553(Nested functions are not supported for GNU C++.)  The nested function's
18554name is local to the block where it is defined.  For example, here we
18555define a nested function named `square', and call it twice:
18556
18557     foo (double a, double b)
18558     {
18559       double square (double z) { return z * z; }
18560
18561       return square (a) + square (b);
18562     }
18563
18564 The nested function can access all the variables of the containing
18565function that are visible at the point of its definition.  This is
18566called "lexical scoping".  For example, here we show a nested function
18567which uses an inherited variable named `offset':
18568
18569     bar (int *array, int offset, int size)
18570     {
18571       int access (int *array, int index)
18572         { return array[index + offset]; }
18573       int i;
18574       /* ... */
18575       for (i = 0; i < size; i++)
18576         /* ... */ access (array, i) /* ... */
18577     }
18578
18579 Nested function definitions are permitted within functions in the
18580places where variable definitions are allowed; that is, in any block,
18581mixed with the other declarations and statements in the block.
18582
18583 It is possible to call the nested function from outside the scope of
18584its name by storing its address or passing the address to another
18585function:
18586
18587     hack (int *array, int size)
18588     {
18589       void store (int index, int value)
18590         { array[index] = value; }
18591
18592       intermediate (store, size);
18593     }
18594
18595 Here, the function `intermediate' receives the address of `store' as
18596an argument.  If `intermediate' calls `store', the arguments given to
18597`store' are used to store into `array'.  But this technique works only
18598so long as the containing function (`hack', in this example) does not
18599exit.
18600
18601 If you try to call the nested function through its address after the
18602containing function has exited, all hell will break loose.  If you try
18603to call it after a containing scope level has exited, and if it refers
18604to some of the variables that are no longer in scope, you may be lucky,
18605but it's not wise to take the risk.  If, however, the nested function
18606does not refer to anything that has gone out of scope, you should be
18607safe.
18608
18609 GCC implements taking the address of a nested function using a
18610technique called "trampolines".  This technique was described in
18611`Lexical Closures for C++' (Thomas M. Breuel, USENIX C++ Conference
18612Proceedings, October 17-21, 1988).
18613
18614 A nested function can jump to a label inherited from a containing
18615function, provided the label was explicitly declared in the containing
18616function (*note Local Labels::).  Such a jump returns instantly to the
18617containing function, exiting the nested function which did the `goto'
18618and any intermediate functions as well.  Here is an example:
18619
18620     bar (int *array, int offset, int size)
18621     {
18622       __label__ failure;
18623       int access (int *array, int index)
18624         {
18625           if (index > size)
18626             goto failure;
18627           return array[index + offset];
18628         }
18629       int i;
18630       /* ... */
18631       for (i = 0; i < size; i++)
18632         /* ... */ access (array, i) /* ... */
18633       /* ... */
18634       return 0;
18635
18636      /* Control comes here from `access'
18637         if it detects an error.  */
18638      failure:
18639       return -1;
18640     }
18641
18642 A nested function always has no linkage.  Declaring one with `extern'
18643or `static' is erroneous.  If you need to declare the nested function
18644before its definition, use `auto' (which is otherwise meaningless for
18645function declarations).
18646
18647     bar (int *array, int offset, int size)
18648     {
18649       __label__ failure;
18650       auto int access (int *, int);
18651       /* ... */
18652       int access (int *array, int index)
18653         {
18654           if (index > size)
18655             goto failure;
18656           return array[index + offset];
18657         }
18658       /* ... */
18659     }
18660
18661
18662File: gcc.info,  Node: Constructing Calls,  Next: Typeof,  Prev: Nested Functions,  Up: C Extensions
18663
186646.5 Constructing Function Calls
18665===============================
18666
18667Using the built-in functions described below, you can record the
18668arguments a function received, and call another function with the same
18669arguments, without knowing the number or types of the arguments.
18670
18671 You can also record the return value of that function call, and later
18672return that value, without knowing what data type the function tried to
18673return (as long as your caller expects that data type).
18674
18675 However, these built-in functions may interact badly with some
18676sophisticated features or other extensions of the language.  It is,
18677therefore, not recommended to use them outside very simple functions
18678acting as mere forwarders for their arguments.
18679
18680 -- Built-in Function: void * __builtin_apply_args ()
18681     This built-in function returns a pointer to data describing how to
18682     perform a call with the same arguments as were passed to the
18683     current function.
18684
18685     The function saves the arg pointer register, structure value
18686     address, and all registers that might be used to pass arguments to
18687     a function into a block of memory allocated on the stack.  Then it
18688     returns the address of that block.
18689
18690 -- Built-in Function: void * __builtin_apply (void (*FUNCTION)(), void
18691          *ARGUMENTS, size_t SIZE)
18692     This built-in function invokes FUNCTION with a copy of the
18693     parameters described by ARGUMENTS and SIZE.
18694
18695     The value of ARGUMENTS should be the value returned by
18696     `__builtin_apply_args'.  The argument SIZE specifies the size of
18697     the stack argument data, in bytes.
18698
18699     This function returns a pointer to data describing how to return
18700     whatever value was returned by FUNCTION.  The data is saved in a
18701     block of memory allocated on the stack.
18702
18703     It is not always simple to compute the proper value for SIZE.  The
18704     value is used by `__builtin_apply' to compute the amount of data
18705     that should be pushed on the stack and copied from the incoming
18706     argument area.
18707
18708 -- Built-in Function: void __builtin_return (void *RESULT)
18709     This built-in function returns the value described by RESULT from
18710     the containing function.  You should specify, for RESULT, a value
18711     returned by `__builtin_apply'.
18712
18713 -- Built-in Function:  __builtin_va_arg_pack ()
18714     This built-in function represents all anonymous arguments of an
18715     inline function.  It can be used only in inline functions which
18716     will be always inlined, never compiled as a separate function,
18717     such as those using `__attribute__ ((__always_inline__))' or
18718     `__attribute__ ((__gnu_inline__))' extern inline functions.  It
18719     must be only passed as last argument to some other function with
18720     variable arguments.  This is useful for writing small wrapper
18721     inlines for variable argument functions, when using preprocessor
18722     macros is undesirable.  For example:
18723          extern int myprintf (FILE *f, const char *format, ...);
18724          extern inline __attribute__ ((__gnu_inline__)) int
18725          myprintf (FILE *f, const char *format, ...)
18726          {
18727            int r = fprintf (f, "myprintf: ");
18728            if (r < 0)
18729              return r;
18730            int s = fprintf (f, format, __builtin_va_arg_pack ());
18731            if (s < 0)
18732              return s;
18733            return r + s;
18734          }
18735
18736 -- Built-in Function: size_t __builtin_va_arg_pack_len ()
18737     This built-in function returns the number of anonymous arguments of
18738     an inline function.  It can be used only in inline functions which
18739     will be always inlined, never compiled as a separate function, such
18740     as those using `__attribute__ ((__always_inline__))' or
18741     `__attribute__ ((__gnu_inline__))' extern inline functions.  For
18742     example following will do link or runtime checking of open
18743     arguments for optimized code:
18744          #ifdef __OPTIMIZE__
18745          extern inline __attribute__((__gnu_inline__)) int
18746          myopen (const char *path, int oflag, ...)
18747          {
18748            if (__builtin_va_arg_pack_len () > 1)
18749              warn_open_too_many_arguments ();
18750
18751            if (__builtin_constant_p (oflag))
18752              {
18753                if ((oflag & O_CREAT) != 0 && __builtin_va_arg_pack_len () < 1)
18754                  {
18755                    warn_open_missing_mode ();
18756                    return __open_2 (path, oflag);
18757                  }
18758                return open (path, oflag, __builtin_va_arg_pack ());
18759              }
18760
18761            if (__builtin_va_arg_pack_len () < 1)
18762              return __open_2 (path, oflag);
18763
18764            return open (path, oflag, __builtin_va_arg_pack ());
18765          }
18766          #endif
18767
18768
18769File: gcc.info,  Node: Typeof,  Next: Conditionals,  Prev: Constructing Calls,  Up: C Extensions
18770
187716.6 Referring to a Type with `typeof'
18772=====================================
18773
18774Another way to refer to the type of an expression is with `typeof'.
18775The syntax of using of this keyword looks like `sizeof', but the
18776construct acts semantically like a type name defined with `typedef'.
18777
18778 There are two ways of writing the argument to `typeof': with an
18779expression or with a type.  Here is an example with an expression:
18780
18781     typeof (x[0](1))
18782
18783This assumes that `x' is an array of pointers to functions; the type
18784described is that of the values of the functions.
18785
18786 Here is an example with a typename as the argument:
18787
18788     typeof (int *)
18789
18790Here the type described is that of pointers to `int'.
18791
18792 If you are writing a header file that must work when included in ISO C
18793programs, write `__typeof__' instead of `typeof'.  *Note Alternate
18794Keywords::.
18795
18796 A `typeof'-construct can be used anywhere a typedef name could be
18797used.  For example, you can use it in a declaration, in a cast, or
18798inside of `sizeof' or `typeof'.
18799
18800 The operand of `typeof' is evaluated for its side effects if and only
18801if it is an expression of variably modified type or the name of such a
18802type.
18803
18804 `typeof' is often useful in conjunction with the
18805statements-within-expressions feature.  Here is how the two together can
18806be used to define a safe "maximum" macro that operates on any
18807arithmetic type and evaluates each of its arguments exactly once:
18808
18809     #define max(a,b) \
18810       ({ typeof (a) _a = (a); \
18811           typeof (b) _b = (b); \
18812         _a > _b ? _a : _b; })
18813
18814 The reason for using names that start with underscores for the local
18815variables is to avoid conflicts with variable names that occur within
18816the expressions that are substituted for `a' and `b'.  Eventually we
18817hope to design a new form of declaration syntax that allows you to
18818declare variables whose scopes start only after their initializers;
18819this will be a more reliable way to prevent such conflicts.
18820
18821Some more examples of the use of `typeof':
18822
18823   * This declares `y' with the type of what `x' points to.
18824
18825          typeof (*x) y;
18826
18827   * This declares `y' as an array of such values.
18828
18829          typeof (*x) y[4];
18830
18831   * This declares `y' as an array of pointers to characters:
18832
18833          typeof (typeof (char *)[4]) y;
18834
18835     It is equivalent to the following traditional C declaration:
18836
18837          char *y[4];
18838
18839     To see the meaning of the declaration using `typeof', and why it
18840     might be a useful way to write, rewrite it with these macros:
18841
18842          #define pointer(T)  typeof(T *)
18843          #define array(T, N) typeof(T [N])
18844
18845     Now the declaration can be rewritten this way:
18846
18847          array (pointer (char), 4) y;
18848
18849     Thus, `array (pointer (char), 4)' is the type of arrays of 4
18850     pointers to `char'.
18851
18852 _Compatibility Note:_ In addition to `typeof', GCC 2 supported a more
18853limited extension which permitted one to write
18854
18855     typedef T = EXPR;
18856
18857with the effect of declaring T to have the type of the expression EXPR.
18858This extension does not work with GCC 3 (versions between 3.0 and 3.2
18859will crash; 3.2.1 and later give an error).  Code which relies on it
18860should be rewritten to use `typeof':
18861
18862     typedef typeof(EXPR) T;
18863
18864This will work with all versions of GCC.
18865
18866
18867File: gcc.info,  Node: Conditionals,  Next: Long Long,  Prev: Typeof,  Up: C Extensions
18868
188696.7 Conditionals with Omitted Operands
18870======================================
18871
18872The middle operand in a conditional expression may be omitted.  Then if
18873the first operand is nonzero, its value is the value of the conditional
18874expression.
18875
18876 Therefore, the expression
18877
18878     x ? : y
18879
18880has the value of `x' if that is nonzero; otherwise, the value of `y'.
18881
18882 This example is perfectly equivalent to
18883
18884     x ? x : y
18885
18886In this simple case, the ability to omit the middle operand is not
18887especially useful.  When it becomes useful is when the first operand
18888does, or may (if it is a macro argument), contain a side effect.  Then
18889repeating the operand in the middle would perform the side effect
18890twice.  Omitting the middle operand uses the value already computed
18891without the undesirable effects of recomputing it.
18892
18893
18894File: gcc.info,  Node: __int128,  Next: Complex,  Prev: Long Long,  Up: C Extensions
18895
188966.8 128-bits integers
18897=====================
18898
18899As an extension the integer scalar type `__int128' is supported for
18900targets having an integer mode wide enough to hold 128-bit.  Simply
18901write `__int128' for a signed 128-bit integer, or `unsigned __int128'
18902for an unsigned 128-bit integer.  There is no support in GCC to express
18903an integer constant of type `__int128' for targets having `long long'
18904integer with less then 128 bit width.
18905
18906
18907File: gcc.info,  Node: Long Long,  Next: __int128,  Prev: Conditionals,  Up: C Extensions
18908
189096.9 Double-Word Integers
18910========================
18911
18912ISO C99 supports data types for integers that are at least 64 bits wide,
18913and as an extension GCC supports them in C90 mode and in C++.  Simply
18914write `long long int' for a signed integer, or `unsigned long long int'
18915for an unsigned integer.  To make an integer constant of type `long
18916long int', add the suffix `LL' to the integer.  To make an integer
18917constant of type `unsigned long long int', add the suffix `ULL' to the
18918integer.
18919
18920 You can use these types in arithmetic like any other integer types.
18921Addition, subtraction, and bitwise boolean operations on these types
18922are open-coded on all types of machines.  Multiplication is open-coded
18923if the machine supports fullword-to-doubleword a widening multiply
18924instruction.  Division and shifts are open-coded only on machines that
18925provide special support.  The operations that are not open-coded use
18926special library routines that come with GCC.
18927
18928 There may be pitfalls when you use `long long' types for function
18929arguments, unless you declare function prototypes.  If a function
18930expects type `int' for its argument, and you pass a value of type `long
18931long int', confusion will result because the caller and the subroutine
18932will disagree about the number of bytes for the argument.  Likewise, if
18933the function expects `long long int' and you pass `int'.  The best way
18934to avoid such problems is to use prototypes.
18935
18936
18937File: gcc.info,  Node: Complex,  Next: Floating Types,  Prev: __int128,  Up: C Extensions
18938
189396.10 Complex Numbers
18940====================
18941
18942ISO C99 supports complex floating data types, and as an extension GCC
18943supports them in C90 mode and in C++, and supports complex integer data
18944types which are not part of ISO C99.  You can declare complex types
18945using the keyword `_Complex'.  As an extension, the older GNU keyword
18946`__complex__' is also supported.
18947
18948 For example, `_Complex double x;' declares `x' as a variable whose
18949real part and imaginary part are both of type `double'.  `_Complex
18950short int y;' declares `y' to have real and imaginary parts of type
18951`short int'; this is not likely to be useful, but it shows that the set
18952of complex types is complete.
18953
18954 To write a constant with a complex data type, use the suffix `i' or
18955`j' (either one; they are equivalent).  For example, `2.5fi' has type
18956`_Complex float' and `3i' has type `_Complex int'.  Such a constant
18957always has a pure imaginary value, but you can form any complex value
18958you like by adding one to a real constant.  This is a GNU extension; if
18959you have an ISO C99 conforming C library (such as GNU libc), and want
18960to construct complex constants of floating type, you should include
18961`<complex.h>' and use the macros `I' or `_Complex_I' instead.
18962
18963 To extract the real part of a complex-valued expression EXP, write
18964`__real__ EXP'.  Likewise, use `__imag__' to extract the imaginary
18965part.  This is a GNU extension; for values of floating type, you should
18966use the ISO C99 functions `crealf', `creal', `creall', `cimagf',
18967`cimag' and `cimagl', declared in `<complex.h>' and also provided as
18968built-in functions by GCC.
18969
18970 The operator `~' performs complex conjugation when used on a value
18971with a complex type.  This is a GNU extension; for values of floating
18972type, you should use the ISO C99 functions `conjf', `conj' and `conjl',
18973declared in `<complex.h>' and also provided as built-in functions by
18974GCC.
18975
18976 GCC can allocate complex automatic variables in a noncontiguous
18977fashion; it's even possible for the real part to be in a register while
18978the imaginary part is on the stack (or vice-versa).  Only the DWARF2
18979debug info format can represent this, so use of DWARF2 is recommended.
18980If you are using the stabs debug info format, GCC describes a
18981noncontiguous complex variable as if it were two separate variables of
18982noncomplex type.  If the variable's actual name is `foo', the two
18983fictitious variables are named `foo$real' and `foo$imag'.  You can
18984examine and set these two fictitious variables with your debugger.
18985
18986
18987File: gcc.info,  Node: Floating Types,  Next: Half-Precision,  Prev: Complex,  Up: C Extensions
18988
189896.11 Additional Floating Types
18990==============================
18991
18992As an extension, the GNU C compiler supports additional floating types,
18993`__float80' and `__float128' to support 80bit (`XFmode') and 128 bit
18994(`TFmode') floating types.  Support for additional types includes the
18995arithmetic operators: add, subtract, multiply, divide; unary arithmetic
18996operators; relational operators; equality operators; and conversions to
18997and from integer and other floating types.  Use a suffix `w' or `W' in
18998a literal constant of type `__float80' and `q' or `Q' for `_float128'.
18999You can declare complex types using the corresponding internal complex
19000type, `XCmode' for `__float80' type and `TCmode' for `__float128' type:
19001
19002     typedef _Complex float __attribute__((mode(TC))) _Complex128;
19003     typedef _Complex float __attribute__((mode(XC))) _Complex80;
19004
19005 Not all targets support additional floating point types.  `__float80'
19006and `__float128' types are supported on i386, x86_64 and ia64 targets.
19007The `__float128' type is supported on hppa HP-UX targets.
19008
19009
19010File: gcc.info,  Node: Half-Precision,  Next: Decimal Float,  Prev: Floating Types,  Up: C Extensions
19011
190126.12 Half-Precision Floating Point
19013==================================
19014
19015On ARM targets, GCC supports half-precision (16-bit) floating point via
19016the `__fp16' type.  You must enable this type explicitly with the
19017`-mfp16-format' command-line option in order to use it.
19018
19019 ARM supports two incompatible representations for half-precision
19020floating-point values.  You must choose one of the representations and
19021use it consistently in your program.
19022
19023 Specifying `-mfp16-format=ieee' selects the IEEE 754-2008 format.
19024This format can represent normalized values in the range of 2^-14 to
1902565504.  There are 11 bits of significand precision, approximately 3
19026decimal digits.
19027
19028 Specifying `-mfp16-format=alternative' selects the ARM alternative
19029format.  This representation is similar to the IEEE format, but does
19030not support infinities or NaNs.  Instead, the range of exponents is
19031extended, so that this format can represent normalized values in the
19032range of 2^-14 to 131008.
19033
19034 The `__fp16' type is a storage format only.  For purposes of
19035arithmetic and other operations, `__fp16' values in C or C++
19036expressions are automatically promoted to `float'.  In addition, you
19037cannot declare a function with a return value or parameters of type
19038`__fp16'.
19039
19040 Note that conversions from `double' to `__fp16' involve an
19041intermediate conversion to `float'.  Because of rounding, this can
19042sometimes produce a different result than a direct conversion.
19043
19044 ARM provides hardware support for conversions between `__fp16' and
19045`float' values as an extension to VFP and NEON (Advanced SIMD).  GCC
19046generates code using these hardware instructions if you compile with
19047options to select an FPU that provides them; for example,
19048`-mfpu=neon-fp16 -mfloat-abi=softfp', in addition to the
19049`-mfp16-format' option to select a half-precision format.
19050
19051 Language-level support for the `__fp16' data type is independent of
19052whether GCC generates code using hardware floating-point instructions.
19053In cases where hardware support is not specified, GCC implements
19054conversions between `__fp16' and `float' values as library calls.
19055
19056
19057File: gcc.info,  Node: Decimal Float,  Next: Hex Floats,  Prev: Half-Precision,  Up: C Extensions
19058
190596.13 Decimal Floating Types
19060===========================
19061
19062As an extension, the GNU C compiler supports decimal floating types as
19063defined in the N1312 draft of ISO/IEC WDTR24732.  Support for decimal
19064floating types in GCC will evolve as the draft technical report changes.
19065Calling conventions for any target might also change.  Not all targets
19066support decimal floating types.
19067
19068 The decimal floating types are `_Decimal32', `_Decimal64', and
19069`_Decimal128'.  They use a radix of ten, unlike the floating types
19070`float', `double', and `long double' whose radix is not specified by
19071the C standard but is usually two.
19072
19073 Support for decimal floating types includes the arithmetic operators
19074add, subtract, multiply, divide; unary arithmetic operators; relational
19075operators; equality operators; and conversions to and from integer and
19076other floating types.  Use a suffix `df' or `DF' in a literal constant
19077of type `_Decimal32', `dd' or `DD' for `_Decimal64', and `dl' or `DL'
19078for `_Decimal128'.
19079
19080 GCC support of decimal float as specified by the draft technical report
19081is incomplete:
19082
19083   * When the value of a decimal floating type cannot be represented in
19084     the integer type to which it is being converted, the result is
19085     undefined rather than the result value specified by the draft
19086     technical report.
19087
19088   * GCC does not provide the C library functionality associated with
19089     `math.h', `fenv.h', `stdio.h', `stdlib.h', and `wchar.h', which
19090     must come from a separate C library implementation.  Because of
19091     this the GNU C compiler does not define macro `__STDC_DEC_FP__' to
19092     indicate that the implementation conforms to the technical report.
19093
19094 Types `_Decimal32', `_Decimal64', and `_Decimal128' are supported by
19095the DWARF2 debug information format.
19096
19097
19098File: gcc.info,  Node: Hex Floats,  Next: Fixed-Point,  Prev: Decimal Float,  Up: C Extensions
19099
191006.14 Hex Floats
19101===============
19102
19103ISO C99 supports floating-point numbers written not only in the usual
19104decimal notation, such as `1.55e1', but also numbers such as `0x1.fp3'
19105written in hexadecimal format.  As a GNU extension, GCC supports this
19106in C90 mode (except in some cases when strictly conforming) and in C++.
19107In that format the `0x' hex introducer and the `p' or `P' exponent
19108field are mandatory.  The exponent is a decimal number that indicates
19109the power of 2 by which the significant part will be multiplied.  Thus
19110`0x1.f' is 1 15/16, `p3' multiplies it by 8, and the value of `0x1.fp3'
19111is the same as `1.55e1'.
19112
19113 Unlike for floating-point numbers in the decimal notation the exponent
19114is always required in the hexadecimal notation.  Otherwise the compiler
19115would not be able to resolve the ambiguity of, e.g., `0x1.f'.  This
19116could mean `1.0f' or `1.9375' since `f' is also the extension for
19117floating-point constants of type `float'.
19118
19119
19120File: gcc.info,  Node: Fixed-Point,  Next: Named Address Spaces,  Prev: Hex Floats,  Up: C Extensions
19121
191226.15 Fixed-Point Types
19123======================
19124
19125As an extension, the GNU C compiler supports fixed-point types as
19126defined in the N1169 draft of ISO/IEC DTR 18037.  Support for
19127fixed-point types in GCC will evolve as the draft technical report
19128changes.  Calling conventions for any target might also change.  Not
19129all targets support fixed-point types.
19130
19131 The fixed-point types are `short _Fract', `_Fract', `long _Fract',
19132`long long _Fract', `unsigned short _Fract', `unsigned _Fract',
19133`unsigned long _Fract', `unsigned long long _Fract', `_Sat short
19134_Fract', `_Sat _Fract', `_Sat long _Fract', `_Sat long long _Fract',
19135`_Sat unsigned short _Fract', `_Sat unsigned _Fract', `_Sat unsigned
19136long _Fract', `_Sat unsigned long long _Fract', `short _Accum',
19137`_Accum', `long _Accum', `long long _Accum', `unsigned short _Accum',
19138`unsigned _Accum', `unsigned long _Accum', `unsigned long long _Accum',
19139`_Sat short _Accum', `_Sat _Accum', `_Sat long _Accum', `_Sat long long
19140_Accum', `_Sat unsigned short _Accum', `_Sat unsigned _Accum', `_Sat
19141unsigned long _Accum', `_Sat unsigned long long _Accum'.
19142
19143 Fixed-point data values contain fractional and optional integral parts.
19144The format of fixed-point data varies and depends on the target machine.
19145
19146 Support for fixed-point types includes:
19147   * prefix and postfix increment and decrement operators (`++', `--')
19148
19149   * unary arithmetic operators (`+', `-', `!')
19150
19151   * binary arithmetic operators (`+', `-', `*', `/')
19152
19153   * binary shift operators (`<<', `>>')
19154
19155   * relational operators (`<', `<=', `>=', `>')
19156
19157   * equality operators (`==', `!=')
19158
19159   * assignment operators (`+=', `-=', `*=', `/=', `<<=', `>>=')
19160
19161   * conversions to and from integer, floating-point, or fixed-point
19162     types
19163
19164 Use a suffix in a fixed-point literal constant:
19165   * `hr' or `HR' for `short _Fract' and `_Sat short _Fract'
19166
19167   * `r' or `R' for `_Fract' and `_Sat _Fract'
19168
19169   * `lr' or `LR' for `long _Fract' and `_Sat long _Fract'
19170
19171   * `llr' or `LLR' for `long long _Fract' and `_Sat long long _Fract'
19172
19173   * `uhr' or `UHR' for `unsigned short _Fract' and `_Sat unsigned
19174     short _Fract'
19175
19176   * `ur' or `UR' for `unsigned _Fract' and `_Sat unsigned _Fract'
19177
19178   * `ulr' or `ULR' for `unsigned long _Fract' and `_Sat unsigned long
19179     _Fract'
19180
19181   * `ullr' or `ULLR' for `unsigned long long _Fract' and `_Sat
19182     unsigned long long _Fract'
19183
19184   * `hk' or `HK' for `short _Accum' and `_Sat short _Accum'
19185
19186   * `k' or `K' for `_Accum' and `_Sat _Accum'
19187
19188   * `lk' or `LK' for `long _Accum' and `_Sat long _Accum'
19189
19190   * `llk' or `LLK' for `long long _Accum' and `_Sat long long _Accum'
19191
19192   * `uhk' or `UHK' for `unsigned short _Accum' and `_Sat unsigned
19193     short _Accum'
19194
19195   * `uk' or `UK' for `unsigned _Accum' and `_Sat unsigned _Accum'
19196
19197   * `ulk' or `ULK' for `unsigned long _Accum' and `_Sat unsigned long
19198     _Accum'
19199
19200   * `ullk' or `ULLK' for `unsigned long long _Accum' and `_Sat
19201     unsigned long long _Accum'
19202
19203 GCC support of fixed-point types as specified by the draft technical
19204report is incomplete:
19205
19206   * Pragmas to control overflow and rounding behaviors are not
19207     implemented.
19208
19209 Fixed-point types are supported by the DWARF2 debug information format.
19210
19211
19212File: gcc.info,  Node: Named Address Spaces,  Next: Zero Length,  Prev: Fixed-Point,  Up: C Extensions
19213
192146.16 Named address spaces
19215=========================
19216
19217As an extension, the GNU C compiler supports named address spaces as
19218defined in the N1275 draft of ISO/IEC DTR 18037.  Support for named
19219address spaces in GCC will evolve as the draft technical report changes.
19220Calling conventions for any target might also change.  At present, only
19221the SPU and M32C targets support other address spaces.  On the SPU
19222target, for example, variables may be declared as belonging to another
19223address space by qualifying the type with the `__ea' address space
19224identifier:
19225
19226     extern int __ea i;
19227
19228 When the variable `i' is accessed, the compiler will generate special
19229code to access this variable.  It may use runtime library support, or
19230generate special machine instructions to access that address space.
19231
19232 The `__ea' identifier may be used exactly like any other C type
19233qualifier (e.g., `const' or `volatile').  See the N1275 document for
19234more details.
19235
19236 On the M32C target, with the R8C and M16C cpu variants, variables
19237qualified with `__far' are accessed using 32-bit addresses in order to
19238access memory beyond the first 64k bytes.  If `__far' is used with the
19239M32CM or M32C cpu variants, it has no effect.
19240
19241
19242File: gcc.info,  Node: Zero Length,  Next: Variable Length,  Prev: Named Address Spaces,  Up: C Extensions
19243
192446.17 Arrays of Length Zero
19245==========================
19246
19247Zero-length arrays are allowed in GNU C.  They are very useful as the
19248last element of a structure which is really a header for a
19249variable-length object:
19250
19251     struct line {
19252       int length;
19253       char contents[0];
19254     };
19255
19256     struct line *thisline = (struct line *)
19257       malloc (sizeof (struct line) + this_length);
19258     thisline->length = this_length;
19259
19260 In ISO C90, you would have to give `contents' a length of 1, which
19261means either you waste space or complicate the argument to `malloc'.
19262
19263 In ISO C99, you would use a "flexible array member", which is slightly
19264different in syntax and semantics:
19265
19266   * Flexible array members are written as `contents[]' without the `0'.
19267
19268   * Flexible array members have incomplete type, and so the `sizeof'
19269     operator may not be applied.  As a quirk of the original
19270     implementation of zero-length arrays, `sizeof' evaluates to zero.
19271
19272   * Flexible array members may only appear as the last member of a
19273     `struct' that is otherwise non-empty.
19274
19275   * A structure containing a flexible array member, or a union
19276     containing such a structure (possibly recursively), may not be a
19277     member of a structure or an element of an array.  (However, these
19278     uses are permitted by GCC as extensions.)
19279
19280 GCC versions before 3.0 allowed zero-length arrays to be statically
19281initialized, as if they were flexible arrays.  In addition to those
19282cases that were useful, it also allowed initializations in situations
19283that would corrupt later data.  Non-empty initialization of zero-length
19284arrays is now treated like any case where there are more initializer
19285elements than the array holds, in that a suitable warning about "excess
19286elements in array" is given, and the excess elements (all of them, in
19287this case) are ignored.
19288
19289 Instead GCC allows static initialization of flexible array members.
19290This is equivalent to defining a new structure containing the original
19291structure followed by an array of sufficient size to contain the data.
19292I.e. in the following, `f1' is constructed as if it were declared like
19293`f2'.
19294
19295     struct f1 {
19296       int x; int y[];
19297     } f1 = { 1, { 2, 3, 4 } };
19298
19299     struct f2 {
19300       struct f1 f1; int data[3];
19301     } f2 = { { 1 }, { 2, 3, 4 } };
19302
19303The convenience of this extension is that `f1' has the desired type,
19304eliminating the need to consistently refer to `f2.f1'.
19305
19306 This has symmetry with normal static arrays, in that an array of
19307unknown size is also written with `[]'.
19308
19309 Of course, this extension only makes sense if the extra data comes at
19310the end of a top-level object, as otherwise we would be overwriting
19311data at subsequent offsets.  To avoid undue complication and confusion
19312with initialization of deeply nested arrays, we simply disallow any
19313non-empty initialization except when the structure is the top-level
19314object.  For example:
19315
19316     struct foo { int x; int y[]; };
19317     struct bar { struct foo z; };
19318
19319     struct foo a = { 1, { 2, 3, 4 } };        // Valid.
19320     struct bar b = { { 1, { 2, 3, 4 } } };    // Invalid.
19321     struct bar c = { { 1, { } } };            // Valid.
19322     struct foo d[1] = { { 1 { 2, 3, 4 } } };  // Invalid.
19323
19324
19325File: gcc.info,  Node: Empty Structures,  Next: Variadic Macros,  Prev: Variable Length,  Up: C Extensions
19326
193276.18 Structures With No Members
19328===============================
19329
19330GCC permits a C structure to have no members:
19331
19332     struct empty {
19333     };
19334
19335 The structure will have size zero.  In C++, empty structures are part
19336of the language.  G++ treats empty structures as if they had a single
19337member of type `char'.
19338
19339
19340File: gcc.info,  Node: Variable Length,  Next: Empty Structures,  Prev: Zero Length,  Up: C Extensions
19341
193426.19 Arrays of Variable Length
19343==============================
19344
19345Variable-length automatic arrays are allowed in ISO C99, and as an
19346extension GCC accepts them in C90 mode and in C++.  These arrays are
19347declared like any other automatic arrays, but with a length that is not
19348a constant expression.  The storage is allocated at the point of
19349declaration and deallocated when the brace-level is exited.  For
19350example:
19351
19352     FILE *
19353     concat_fopen (char *s1, char *s2, char *mode)
19354     {
19355       char str[strlen (s1) + strlen (s2) + 1];
19356       strcpy (str, s1);
19357       strcat (str, s2);
19358       return fopen (str, mode);
19359     }
19360
19361 Jumping or breaking out of the scope of the array name deallocates the
19362storage.  Jumping into the scope is not allowed; you get an error
19363message for it.
19364
19365 You can use the function `alloca' to get an effect much like
19366variable-length arrays.  The function `alloca' is available in many
19367other C implementations (but not in all).  On the other hand,
19368variable-length arrays are more elegant.
19369
19370 There are other differences between these two methods.  Space allocated
19371with `alloca' exists until the containing _function_ returns.  The
19372space for a variable-length array is deallocated as soon as the array
19373name's scope ends.  (If you use both variable-length arrays and
19374`alloca' in the same function, deallocation of a variable-length array
19375will also deallocate anything more recently allocated with `alloca'.)
19376
19377 You can also use variable-length arrays as arguments to functions:
19378
19379     struct entry
19380     tester (int len, char data[len][len])
19381     {
19382       /* ... */
19383     }
19384
19385 The length of an array is computed once when the storage is allocated
19386and is remembered for the scope of the array in case you access it with
19387`sizeof'.
19388
19389 If you want to pass the array first and the length afterward, you can
19390use a forward declaration in the parameter list--another GNU extension.
19391
19392     struct entry
19393     tester (int len; char data[len][len], int len)
19394     {
19395       /* ... */
19396     }
19397
19398 The `int len' before the semicolon is a "parameter forward
19399declaration", and it serves the purpose of making the name `len' known
19400when the declaration of `data' is parsed.
19401
19402 You can write any number of such parameter forward declarations in the
19403parameter list.  They can be separated by commas or semicolons, but the
19404last one must end with a semicolon, which is followed by the "real"
19405parameter declarations.  Each forward declaration must match a "real"
19406declaration in parameter name and data type.  ISO C99 does not support
19407parameter forward declarations.
19408
19409
19410File: gcc.info,  Node: Variadic Macros,  Next: Escaped Newlines,  Prev: Empty Structures,  Up: C Extensions
19411
194126.20 Macros with a Variable Number of Arguments.
19413================================================
19414
19415In the ISO C standard of 1999, a macro can be declared to accept a
19416variable number of arguments much as a function can.  The syntax for
19417defining the macro is similar to that of a function.  Here is an
19418example:
19419
19420     #define debug(format, ...) fprintf (stderr, format, __VA_ARGS__)
19421
19422 Here `...' is a "variable argument".  In the invocation of such a
19423macro, it represents the zero or more tokens until the closing
19424parenthesis that ends the invocation, including any commas.  This set of
19425tokens replaces the identifier `__VA_ARGS__' in the macro body wherever
19426it appears.  See the CPP manual for more information.
19427
19428 GCC has long supported variadic macros, and used a different syntax
19429that allowed you to give a name to the variable arguments just like any
19430other argument.  Here is an example:
19431
19432     #define debug(format, args...) fprintf (stderr, format, args)
19433
19434 This is in all ways equivalent to the ISO C example above, but arguably
19435more readable and descriptive.
19436
19437 GNU CPP has two further variadic macro extensions, and permits them to
19438be used with either of the above forms of macro definition.
19439
19440 In standard C, you are not allowed to leave the variable argument out
19441entirely; but you are allowed to pass an empty argument.  For example,
19442this invocation is invalid in ISO C, because there is no comma after
19443the string:
19444
19445     debug ("A message")
19446
19447 GNU CPP permits you to completely omit the variable arguments in this
19448way.  In the above examples, the compiler would complain, though since
19449the expansion of the macro still has the extra comma after the format
19450string.
19451
19452 To help solve this problem, CPP behaves specially for variable
19453arguments used with the token paste operator, `##'.  If instead you
19454write
19455
19456     #define debug(format, ...) fprintf (stderr, format, ## __VA_ARGS__)
19457
19458 and if the variable arguments are omitted or empty, the `##' operator
19459causes the preprocessor to remove the comma before it.  If you do
19460provide some variable arguments in your macro invocation, GNU CPP does
19461not complain about the paste operation and instead places the variable
19462arguments after the comma.  Just like any other pasted macro argument,
19463these arguments are not macro expanded.
19464
19465
19466File: gcc.info,  Node: Escaped Newlines,  Next: Subscripting,  Prev: Variadic Macros,  Up: C Extensions
19467
194686.21 Slightly Looser Rules for Escaped Newlines
19469===============================================
19470
19471Recently, the preprocessor has relaxed its treatment of escaped
19472newlines.  Previously, the newline had to immediately follow a
19473backslash.  The current implementation allows whitespace in the form of
19474spaces, horizontal and vertical tabs, and form feeds between the
19475backslash and the subsequent newline.  The preprocessor issues a
19476warning, but treats it as a valid escaped newline and combines the two
19477lines to form a single logical line.  This works within comments and
19478tokens, as well as between tokens.  Comments are _not_ treated as
19479whitespace for the purposes of this relaxation, since they have not yet
19480been replaced with spaces.
19481
19482
19483File: gcc.info,  Node: Subscripting,  Next: Pointer Arith,  Prev: Escaped Newlines,  Up: C Extensions
19484
194856.22 Non-Lvalue Arrays May Have Subscripts
19486==========================================
19487
19488In ISO C99, arrays that are not lvalues still decay to pointers, and
19489may be subscripted, although they may not be modified or used after the
19490next sequence point and the unary `&' operator may not be applied to
19491them.  As an extension, GCC allows such arrays to be subscripted in C90
19492mode, though otherwise they do not decay to pointers outside C99 mode.
19493For example, this is valid in GNU C though not valid in C90:
19494
19495     struct foo {int a[4];};
19496
19497     struct foo f();
19498
19499     bar (int index)
19500     {
19501       return f().a[index];
19502     }
19503
19504
19505File: gcc.info,  Node: Pointer Arith,  Next: Initializers,  Prev: Subscripting,  Up: C Extensions
19506
195076.23 Arithmetic on `void'- and Function-Pointers
19508================================================
19509
19510In GNU C, addition and subtraction operations are supported on pointers
19511to `void' and on pointers to functions.  This is done by treating the
19512size of a `void' or of a function as 1.
19513
19514 A consequence of this is that `sizeof' is also allowed on `void' and
19515on function types, and returns 1.
19516
19517 The option `-Wpointer-arith' requests a warning if these extensions
19518are used.
19519
19520
19521File: gcc.info,  Node: Initializers,  Next: Compound Literals,  Prev: Pointer Arith,  Up: C Extensions
19522
195236.24 Non-Constant Initializers
19524==============================
19525
19526As in standard C++ and ISO C99, the elements of an aggregate
19527initializer for an automatic variable are not required to be constant
19528expressions in GNU C.  Here is an example of an initializer with
19529run-time varying elements:
19530
19531     foo (float f, float g)
19532     {
19533       float beat_freqs[2] = { f-g, f+g };
19534       /* ... */
19535     }
19536
19537
19538File: gcc.info,  Node: Compound Literals,  Next: Designated Inits,  Prev: Initializers,  Up: C Extensions
19539
195406.25 Compound Literals
19541======================
19542
19543ISO C99 supports compound literals.  A compound literal looks like a
19544cast containing an initializer.  Its value is an object of the type
19545specified in the cast, containing the elements specified in the
19546initializer; it is an lvalue.  As an extension, GCC supports compound
19547literals in C90 mode and in C++.
19548
19549 Usually, the specified type is a structure.  Assume that `struct foo'
19550and `structure' are declared as shown:
19551
19552     struct foo {int a; char b[2];} structure;
19553
19554Here is an example of constructing a `struct foo' with a compound
19555literal:
19556
19557     structure = ((struct foo) {x + y, 'a', 0});
19558
19559This is equivalent to writing the following:
19560
19561     {
19562       struct foo temp = {x + y, 'a', 0};
19563       structure = temp;
19564     }
19565
19566 You can also construct an array.  If all the elements of the compound
19567literal are (made up of) simple constant expressions, suitable for use
19568in initializers of objects of static storage duration, then the compound
19569literal can be coerced to a pointer to its first element and used in
19570such an initializer, as shown here:
19571
19572     char **foo = (char *[]) { "x", "y", "z" };
19573
19574 Compound literals for scalar types and union types are is also
19575allowed, but then the compound literal is equivalent to a cast.
19576
19577 As a GNU extension, GCC allows initialization of objects with static
19578storage duration by compound literals (which is not possible in ISO
19579C99, because the initializer is not a constant).  It is handled as if
19580the object was initialized only with the bracket enclosed list if the
19581types of the compound literal and the object match.  The initializer
19582list of the compound literal must be constant.  If the object being
19583initialized has array type of unknown size, the size is determined by
19584compound literal size.
19585
19586     static struct foo x = (struct foo) {1, 'a', 'b'};
19587     static int y[] = (int []) {1, 2, 3};
19588     static int z[] = (int [3]) {1};
19589
19590The above lines are equivalent to the following:
19591     static struct foo x = {1, 'a', 'b'};
19592     static int y[] = {1, 2, 3};
19593     static int z[] = {1, 0, 0};
19594
19595
19596File: gcc.info,  Node: Designated Inits,  Next: Cast to Union,  Prev: Compound Literals,  Up: C Extensions
19597
195986.26 Designated Initializers
19599============================
19600
19601Standard C90 requires the elements of an initializer to appear in a
19602fixed order, the same as the order of the elements in the array or
19603structure being initialized.
19604
19605 In ISO C99 you can give the elements in any order, specifying the array
19606indices or structure field names they apply to, and GNU C allows this as
19607an extension in C90 mode as well.  This extension is not implemented in
19608GNU C++.
19609
19610 To specify an array index, write `[INDEX] =' before the element value.
19611For example,
19612
19613     int a[6] = { [4] = 29, [2] = 15 };
19614
19615is equivalent to
19616
19617     int a[6] = { 0, 0, 15, 0, 29, 0 };
19618
19619The index values must be constant expressions, even if the array being
19620initialized is automatic.
19621
19622 An alternative syntax for this which has been obsolete since GCC 2.5
19623but GCC still accepts is to write `[INDEX]' before the element value,
19624with no `='.
19625
19626 To initialize a range of elements to the same value, write `[FIRST ...
19627LAST] = VALUE'.  This is a GNU extension.  For example,
19628
19629     int widths[] = { [0 ... 9] = 1, [10 ... 99] = 2, [100] = 3 };
19630
19631If the value in it has side-effects, the side-effects will happen only
19632once, not for each initialized field by the range initializer.
19633
19634Note that the length of the array is the highest value specified plus
19635one.
19636
19637 In a structure initializer, specify the name of a field to initialize
19638with `.FIELDNAME =' before the element value.  For example, given the
19639following structure,
19640
19641     struct point { int x, y; };
19642
19643the following initialization
19644
19645     struct point p = { .y = yvalue, .x = xvalue };
19646
19647is equivalent to
19648
19649     struct point p = { xvalue, yvalue };
19650
19651 Another syntax which has the same meaning, obsolete since GCC 2.5, is
19652`FIELDNAME:', as shown here:
19653
19654     struct point p = { y: yvalue, x: xvalue };
19655
19656 The `[INDEX]' or `.FIELDNAME' is known as a "designator".  You can
19657also use a designator (or the obsolete colon syntax) when initializing
19658a union, to specify which element of the union should be used.  For
19659example,
19660
19661     union foo { int i; double d; };
19662
19663     union foo f = { .d = 4 };
19664
19665will convert 4 to a `double' to store it in the union using the second
19666element.  By contrast, casting 4 to type `union foo' would store it
19667into the union as the integer `i', since it is an integer.  (*Note Cast
19668to Union::.)
19669
19670 You can combine this technique of naming elements with ordinary C
19671initialization of successive elements.  Each initializer element that
19672does not have a designator applies to the next consecutive element of
19673the array or structure.  For example,
19674
19675     int a[6] = { [1] = v1, v2, [4] = v4 };
19676
19677is equivalent to
19678
19679     int a[6] = { 0, v1, v2, 0, v4, 0 };
19680
19681 Labeling the elements of an array initializer is especially useful
19682when the indices are characters or belong to an `enum' type.  For
19683example:
19684
19685     int whitespace[256]
19686       = { [' '] = 1, ['\t'] = 1, ['\h'] = 1,
19687           ['\f'] = 1, ['\n'] = 1, ['\r'] = 1 };
19688
19689 You can also write a series of `.FIELDNAME' and `[INDEX]' designators
19690before an `=' to specify a nested subobject to initialize; the list is
19691taken relative to the subobject corresponding to the closest
19692surrounding brace pair.  For example, with the `struct point'
19693declaration above:
19694
19695     struct point ptarray[10] = { [2].y = yv2, [2].x = xv2, [0].x = xv0 };
19696
19697If the same field is initialized multiple times, it will have value from
19698the last initialization.  If any such overridden initialization has
19699side-effect, it is unspecified whether the side-effect happens or not.
19700Currently, GCC will discard them and issue a warning.
19701
19702
19703File: gcc.info,  Node: Case Ranges,  Next: Mixed Declarations,  Prev: Cast to Union,  Up: C Extensions
19704
197056.27 Case Ranges
19706================
19707
19708You can specify a range of consecutive values in a single `case' label,
19709like this:
19710
19711     case LOW ... HIGH:
19712
19713This has the same effect as the proper number of individual `case'
19714labels, one for each integer value from LOW to HIGH, inclusive.
19715
19716 This feature is especially useful for ranges of ASCII character codes:
19717
19718     case 'A' ... 'Z':
19719
19720 *Be careful:* Write spaces around the `...', for otherwise it may be
19721parsed wrong when you use it with integer values.  For example, write
19722this:
19723
19724     case 1 ... 5:
19725
19726rather than this:
19727
19728     case 1...5:
19729
19730
19731File: gcc.info,  Node: Cast to Union,  Next: Case Ranges,  Prev: Designated Inits,  Up: C Extensions
19732
197336.28 Cast to a Union Type
19734=========================
19735
19736A cast to union type is similar to other casts, except that the type
19737specified is a union type.  You can specify the type either with `union
19738TAG' or with a typedef name.  A cast to union is actually a constructor
19739though, not a cast, and hence does not yield an lvalue like normal
19740casts.  (*Note Compound Literals::.)
19741
19742 The types that may be cast to the union type are those of the members
19743of the union.  Thus, given the following union and variables:
19744
19745     union foo { int i; double d; };
19746     int x;
19747     double y;
19748
19749both `x' and `y' can be cast to type `union foo'.
19750
19751 Using the cast as the right-hand side of an assignment to a variable of
19752union type is equivalent to storing in a member of the union:
19753
19754     union foo u;
19755     /* ... */
19756     u = (union foo) x  ==  u.i = x
19757     u = (union foo) y  ==  u.d = y
19758
19759 You can also use the union cast as a function argument:
19760
19761     void hack (union foo);
19762     /* ... */
19763     hack ((union foo) x);
19764
19765
19766File: gcc.info,  Node: Mixed Declarations,  Next: Function Attributes,  Prev: Case Ranges,  Up: C Extensions
19767
197686.29 Mixed Declarations and Code
19769================================
19770
19771ISO C99 and ISO C++ allow declarations and code to be freely mixed
19772within compound statements.  As an extension, GCC also allows this in
19773C90 mode.  For example, you could do:
19774
19775     int i;
19776     /* ... */
19777     i++;
19778     int j = i + 2;
19779
19780 Each identifier is visible from where it is declared until the end of
19781the enclosing block.
19782
19783
19784File: gcc.info,  Node: Function Attributes,  Next: Attribute Syntax,  Prev: Mixed Declarations,  Up: C Extensions
19785
197866.30 Declaring Attributes of Functions
19787======================================
19788
19789In GNU C, you declare certain things about functions called in your
19790program which help the compiler optimize function calls and check your
19791code more carefully.
19792
19793 The keyword `__attribute__' allows you to specify special attributes
19794when making a declaration.  This keyword is followed by an attribute
19795specification inside double parentheses.  The following attributes are
19796currently defined for functions on all targets: `aligned',
19797`alloc_size', `noreturn', `returns_twice', `noinline', `noclone',
19798`always_inline', `flatten', `pure', `const', `nothrow', `sentinel',
19799`format', `format_arg', `no_instrument_function', `no_split_stack',
19800`section', `constructor', `destructor', `used', `unused', `deprecated',
19801`weak', `malloc', `alias', `ifunc', `warn_unused_result', `nonnull',
19802`gnu_inline', `externally_visible', `hot', `cold', `artificial',
19803`error' and `warning'.  Several other attributes are defined for
19804functions on particular target systems.  Other attributes, including
19805`section' are supported for variables declarations (*note Variable
19806Attributes::) and for types (*note Type Attributes::).
19807
19808 GCC plugins may provide their own attributes.
19809
19810 You may also specify attributes with `__' preceding and following each
19811keyword.  This allows you to use them in header files without being
19812concerned about a possible macro of the same name.  For example, you
19813may use `__noreturn__' instead of `noreturn'.
19814
19815 *Note Attribute Syntax::, for details of the exact syntax for using
19816attributes.
19817
19818`alias ("TARGET")'
19819     The `alias' attribute causes the declaration to be emitted as an
19820     alias for another symbol, which must be specified.  For instance,
19821
19822          void __f () { /* Do something. */; }
19823          void f () __attribute__ ((weak, alias ("__f")));
19824
19825     defines `f' to be a weak alias for `__f'.  In C++, the mangled
19826     name for the target must be used.  It is an error if `__f' is not
19827     defined in the same translation unit.
19828
19829     Not all target machines support this attribute.
19830
19831`aligned (ALIGNMENT)'
19832     This attribute specifies a minimum alignment for the function,
19833     measured in bytes.
19834
19835     You cannot use this attribute to decrease the alignment of a
19836     function, only to increase it.  However, when you explicitly
19837     specify a function alignment this will override the effect of the
19838     `-falign-functions' (*note Optimize Options::) option for this
19839     function.
19840
19841     Note that the effectiveness of `aligned' attributes may be limited
19842     by inherent limitations in your linker.  On many systems, the
19843     linker is only able to arrange for functions to be aligned up to a
19844     certain maximum alignment.  (For some linkers, the maximum
19845     supported alignment may be very very small.)  See your linker
19846     documentation for further information.
19847
19848     The `aligned' attribute can also be used for variables and fields
19849     (*note Variable Attributes::.)
19850
19851`alloc_size'
19852     The `alloc_size' attribute is used to tell the compiler that the
19853     function return value points to memory, where the size is given by
19854     one or two of the functions parameters.  GCC uses this information
19855     to improve the correctness of `__builtin_object_size'.
19856
19857     The function parameter(s) denoting the allocated size are
19858     specified by one or two integer arguments supplied to the
19859     attribute.  The allocated size is either the value of the single
19860     function argument specified or the product of the two function
19861     arguments specified.  Argument numbering starts at one.
19862
19863     For instance,
19864
19865          void* my_calloc(size_t, size_t) __attribute__((alloc_size(1,2)))
19866          void my_realloc(void*, size_t) __attribute__((alloc_size(2)))
19867
19868     declares that my_calloc will return memory of the size given by
19869     the product of parameter 1 and 2 and that my_realloc will return
19870     memory of the size given by parameter 2.
19871
19872`always_inline'
19873     Generally, functions are not inlined unless optimization is
19874     specified.  For functions declared inline, this attribute inlines
19875     the function even if no optimization level was specified.
19876
19877`gnu_inline'
19878     This attribute should be used with a function which is also
19879     declared with the `inline' keyword.  It directs GCC to treat the
19880     function as if it were defined in gnu90 mode even when compiling
19881     in C99 or gnu99 mode.
19882
19883     If the function is declared `extern', then this definition of the
19884     function is used only for inlining.  In no case is the function
19885     compiled as a standalone function, not even if you take its address
19886     explicitly.  Such an address becomes an external reference, as if
19887     you had only declared the function, and had not defined it.  This
19888     has almost the effect of a macro.  The way to use this is to put a
19889     function definition in a header file with this attribute, and put
19890     another copy of the function, without `extern', in a library file.
19891     The definition in the header file will cause most calls to the
19892     function to be inlined.  If any uses of the function remain, they
19893     will refer to the single copy in the library.  Note that the two
19894     definitions of the functions need not be precisely the same,
19895     although if they do not have the same effect your program may
19896     behave oddly.
19897
19898     In C, if the function is neither `extern' nor `static', then the
19899     function is compiled as a standalone function, as well as being
19900     inlined where possible.
19901
19902     This is how GCC traditionally handled functions declared `inline'.
19903     Since ISO C99 specifies a different semantics for `inline', this
19904     function attribute is provided as a transition measure and as a
19905     useful feature in its own right.  This attribute is available in
19906     GCC 4.1.3 and later.  It is available if either of the
19907     preprocessor macros `__GNUC_GNU_INLINE__' or
19908     `__GNUC_STDC_INLINE__' are defined.  *Note An Inline Function is
19909     As Fast As a Macro: Inline.
19910
19911     In C++, this attribute does not depend on `extern' in any way, but
19912     it still requires the `inline' keyword to enable its special
19913     behavior.
19914
19915`artificial'
19916     This attribute is useful for small inline wrappers which if
19917     possible should appear during debugging as a unit, depending on
19918     the debug info format it will either mean marking the function as
19919     artificial or using the caller location for all instructions
19920     within the inlined body.
19921
19922`bank_switch'
19923     When added to an interrupt handler with the M32C port, causes the
19924     prologue and epilogue to use bank switching to preserve the
19925     registers rather than saving them on the stack.
19926
19927`flatten'
19928     Generally, inlining into a function is limited.  For a function
19929     marked with this attribute, every call inside this function will
19930     be inlined, if possible.  Whether the function itself is
19931     considered for inlining depends on its size and the current
19932     inlining parameters.
19933
19934`error ("MESSAGE")'
19935     If this attribute is used on a function declaration and a call to
19936     such a function is not eliminated through dead code elimination or
19937     other optimizations, an error which will include MESSAGE will be
19938     diagnosed.  This is useful for compile time checking, especially
19939     together with `__builtin_constant_p' and inline functions where
19940     checking the inline function arguments is not possible through
19941     `extern char [(condition) ? 1 : -1];' tricks.  While it is
19942     possible to leave the function undefined and thus invoke a link
19943     failure, when using this attribute the problem will be diagnosed
19944     earlier and with exact location of the call even in presence of
19945     inline functions or when not emitting debugging information.
19946
19947`warning ("MESSAGE")'
19948     If this attribute is used on a function declaration and a call to
19949     such a function is not eliminated through dead code elimination or
19950     other optimizations, a warning which will include MESSAGE will be
19951     diagnosed.  This is useful for compile time checking, especially
19952     together with `__builtin_constant_p' and inline functions.  While
19953     it is possible to define the function with a message in
19954     `.gnu.warning*' section, when using this attribute the problem
19955     will be diagnosed earlier and with exact location of the call even
19956     in presence of inline functions or when not emitting debugging
19957     information.
19958
19959`cdecl'
19960     On the Intel 386, the `cdecl' attribute causes the compiler to
19961     assume that the calling function will pop off the stack space used
19962     to pass arguments.  This is useful to override the effects of the
19963     `-mrtd' switch.
19964
19965`const'
19966     Many functions do not examine any values except their arguments,
19967     and have no effects except the return value.  Basically this is
19968     just slightly more strict class than the `pure' attribute below,
19969     since function is not allowed to read global memory.
19970
19971     Note that a function that has pointer arguments and examines the
19972     data pointed to must _not_ be declared `const'.  Likewise, a
19973     function that calls a non-`const' function usually must not be
19974     `const'.  It does not make sense for a `const' function to return
19975     `void'.
19976
19977     The attribute `const' is not implemented in GCC versions earlier
19978     than 2.5.  An alternative way to declare that a function has no
19979     side effects, which works in the current version and in some older
19980     versions, is as follows:
19981
19982          typedef int intfn ();
19983
19984          extern const intfn square;
19985
19986     This approach does not work in GNU C++ from 2.6.0 on, since the
19987     language specifies that the `const' must be attached to the return
19988     value.
19989
19990`constructor'
19991`destructor'
19992`constructor (PRIORITY)'
19993`destructor (PRIORITY)'
19994     The `constructor' attribute causes the function to be called
19995     automatically before execution enters `main ()'.  Similarly, the
19996     `destructor' attribute causes the function to be called
19997     automatically after `main ()' has completed or `exit ()' has been
19998     called.  Functions with these attributes are useful for
19999     initializing data that will be used implicitly during the
20000     execution of the program.
20001
20002     You may provide an optional integer priority to control the order
20003     in which constructor and destructor functions are run.  A
20004     constructor with a smaller priority number runs before a
20005     constructor with a larger priority number; the opposite
20006     relationship holds for destructors.  So, if you have a constructor
20007     that allocates a resource and a destructor that deallocates the
20008     same resource, both functions typically have the same priority.
20009     The priorities for constructor and destructor functions are the
20010     same as those specified for namespace-scope C++ objects (*note C++
20011     Attributes::).
20012
20013     These attributes are not currently implemented for Objective-C.
20014
20015`deprecated'
20016`deprecated (MSG)'
20017     The `deprecated' attribute results in a warning if the function is
20018     used anywhere in the source file.  This is useful when identifying
20019     functions that are expected to be removed in a future version of a
20020     program.  The warning also includes the location of the declaration
20021     of the deprecated function, to enable users to easily find further
20022     information about why the function is deprecated, or what they
20023     should do instead.  Note that the warnings only occurs for uses:
20024
20025          int old_fn () __attribute__ ((deprecated));
20026          int old_fn ();
20027          int (*fn_ptr)() = old_fn;
20028
20029     results in a warning on line 3 but not line 2.  The optional msg
20030     argument, which must be a string, will be printed in the warning if
20031     present.
20032
20033     The `deprecated' attribute can also be used for variables and
20034     types (*note Variable Attributes::, *note Type Attributes::.)
20035
20036`disinterrupt'
20037     On MeP targets, this attribute causes the compiler to emit
20038     instructions to disable interrupts for the duration of the given
20039     function.
20040
20041`dllexport'
20042     On Microsoft Windows targets and Symbian OS targets the
20043     `dllexport' attribute causes the compiler to provide a global
20044     pointer to a pointer in a DLL, so that it can be referenced with
20045     the `dllimport' attribute.  On Microsoft Windows targets, the
20046     pointer name is formed by combining `_imp__' and the function or
20047     variable name.
20048
20049     You can use `__declspec(dllexport)' as a synonym for
20050     `__attribute__ ((dllexport))' for compatibility with other
20051     compilers.
20052
20053     On systems that support the `visibility' attribute, this attribute
20054     also implies "default" visibility.  It is an error to explicitly
20055     specify any other visibility.
20056
20057     In previous versions of GCC, the `dllexport' attribute was ignored
20058     for inlined functions, unless the `-fkeep-inline-functions' flag
20059     had been used.  The default behaviour now is to emit all
20060     dllexported inline functions; however, this can cause object
20061     file-size bloat, in which case the old behaviour can be restored
20062     by using `-fno-keep-inline-dllexport'.
20063
20064     The attribute is also ignored for undefined symbols.
20065
20066     When applied to C++ classes, the attribute marks defined
20067     non-inlined member functions and static data members as exports.
20068     Static consts initialized in-class are not marked unless they are
20069     also defined out-of-class.
20070
20071     For Microsoft Windows targets there are alternative methods for
20072     including the symbol in the DLL's export table such as using a
20073     `.def' file with an `EXPORTS' section or, with GNU ld, using the
20074     `--export-all' linker flag.
20075
20076`dllimport'
20077     On Microsoft Windows and Symbian OS targets, the `dllimport'
20078     attribute causes the compiler to reference a function or variable
20079     via a global pointer to a pointer that is set up by the DLL
20080     exporting the symbol.  The attribute implies `extern'.  On
20081     Microsoft Windows targets, the pointer name is formed by combining
20082     `_imp__' and the function or variable name.
20083
20084     You can use `__declspec(dllimport)' as a synonym for
20085     `__attribute__ ((dllimport))' for compatibility with other
20086     compilers.
20087
20088     On systems that support the `visibility' attribute, this attribute
20089     also implies "default" visibility.  It is an error to explicitly
20090     specify any other visibility.
20091
20092     Currently, the attribute is ignored for inlined functions.  If the
20093     attribute is applied to a symbol _definition_, an error is
20094     reported.  If a symbol previously declared `dllimport' is later
20095     defined, the attribute is ignored in subsequent references, and a
20096     warning is emitted.  The attribute is also overridden by a
20097     subsequent declaration as `dllexport'.
20098
20099     When applied to C++ classes, the attribute marks non-inlined
20100     member functions and static data members as imports.  However, the
20101     attribute is ignored for virtual methods to allow creation of
20102     vtables using thunks.
20103
20104     On the SH Symbian OS target the `dllimport' attribute also has
20105     another affect--it can cause the vtable and run-time type
20106     information for a class to be exported.  This happens when the
20107     class has a dllimport'ed constructor or a non-inline, non-pure
20108     virtual function and, for either of those two conditions, the
20109     class also has an inline constructor or destructor and has a key
20110     function that is defined in the current translation unit.
20111
20112     For Microsoft Windows based targets the use of the `dllimport'
20113     attribute on functions is not necessary, but provides a small
20114     performance benefit by eliminating a thunk in the DLL.  The use of
20115     the `dllimport' attribute on imported variables was required on
20116     older versions of the GNU linker, but can now be avoided by
20117     passing the `--enable-auto-import' switch to the GNU linker.  As
20118     with functions, using the attribute for a variable eliminates a
20119     thunk in the DLL.
20120
20121     One drawback to using this attribute is that a pointer to a
20122     _variable_ marked as `dllimport' cannot be used as a constant
20123     address. However, a pointer to a _function_ with the `dllimport'
20124     attribute can be used as a constant initializer; in this case, the
20125     address of a stub function in the import lib is referenced.  On
20126     Microsoft Windows targets, the attribute can be disabled for
20127     functions by setting the `-mnop-fun-dllimport' flag.
20128
20129`eightbit_data'
20130     Use this attribute on the H8/300, H8/300H, and H8S to indicate
20131     that the specified variable should be placed into the eight bit
20132     data section.  The compiler will generate more efficient code for
20133     certain operations on data in the eight bit data area.  Note the
20134     eight bit data area is limited to 256 bytes of data.
20135
20136     You must use GAS and GLD from GNU binutils version 2.7 or later for
20137     this attribute to work correctly.
20138
20139`exception_handler'
20140     Use this attribute on the Blackfin to indicate that the specified
20141     function is an exception handler.  The compiler will generate
20142     function entry and exit sequences suitable for use in an exception
20143     handler when this attribute is present.
20144
20145`externally_visible'
20146     This attribute, attached to a global variable or function,
20147     nullifies the effect of the `-fwhole-program' command-line option,
20148     so the object remains visible outside the current compilation
20149     unit. If `-fwhole-program' is used together with `-flto' and
20150     `gold' is used as the linker plugin, `externally_visible'
20151     attributes are automatically added to functions (not variable yet
20152     due to a current `gold' issue) that are accessed outside of LTO
20153     objects according to resolution file produced by `gold'.  For
20154     other linkers that cannot generate resolution file, explicit
20155     `externally_visible' attributes are still necessary.
20156
20157`far'
20158     On 68HC11 and 68HC12 the `far' attribute causes the compiler to
20159     use a calling convention that takes care of switching memory banks
20160     when entering and leaving a function.  This calling convention is
20161     also the default when using the `-mlong-calls' option.
20162
20163     On 68HC12 the compiler will use the `call' and `rtc' instructions
20164     to call and return from a function.
20165
20166     On 68HC11 the compiler will generate a sequence of instructions to
20167     invoke a board-specific routine to switch the memory bank and call
20168     the real function.  The board-specific routine simulates a `call'.
20169     At the end of a function, it will jump to a board-specific routine
20170     instead of using `rts'.  The board-specific return routine
20171     simulates the `rtc'.
20172
20173     On MeP targets this causes the compiler to use a calling convention
20174     which assumes the called function is too far away for the built-in
20175     addressing modes.
20176
20177`fast_interrupt'
20178     Use this attribute on the M32C and RX ports to indicate that the
20179     specified function is a fast interrupt handler.  This is just like
20180     the `interrupt' attribute, except that `freit' is used to return
20181     instead of `reit'.
20182
20183`fastcall'
20184     On the Intel 386, the `fastcall' attribute causes the compiler to
20185     pass the first argument (if of integral type) in the register ECX
20186     and the second argument (if of integral type) in the register EDX.
20187     Subsequent and other typed arguments are passed on the stack.  The
20188     called function will pop the arguments off the stack.  If the
20189     number of arguments is variable all arguments are pushed on the
20190     stack.
20191
20192`thiscall'
20193     On the Intel 386, the `thiscall' attribute causes the compiler to
20194     pass the first argument (if of integral type) in the register ECX.
20195     Subsequent and other typed arguments are passed on the stack. The
20196     called function will pop the arguments off the stack.  If the
20197     number of arguments is variable all arguments are pushed on the
20198     stack.  The `thiscall' attribute is intended for C++ non-static
20199     member functions.  As gcc extension this calling convention can be
20200     used for C-functions and for static member methods.
20201
20202`format (ARCHETYPE, STRING-INDEX, FIRST-TO-CHECK)'
20203     The `format' attribute specifies that a function takes `printf',
20204     `scanf', `strftime' or `strfmon' style arguments which should be
20205     type-checked against a format string.  For example, the
20206     declaration:
20207
20208          extern int
20209          my_printf (void *my_object, const char *my_format, ...)
20210                __attribute__ ((format (printf, 2, 3)));
20211
20212     causes the compiler to check the arguments in calls to `my_printf'
20213     for consistency with the `printf' style format string argument
20214     `my_format'.
20215
20216     The parameter ARCHETYPE determines how the format string is
20217     interpreted, and should be `printf', `scanf', `strftime',
20218     `gnu_printf', `gnu_scanf', `gnu_strftime' or `strfmon'.  (You can
20219     also use `__printf__', `__scanf__', `__strftime__' or
20220     `__strfmon__'.)  On MinGW targets, `ms_printf', `ms_scanf', and
20221     `ms_strftime' are also present.  ARCHTYPE values such as `printf'
20222     refer to the formats accepted by the system's C run-time library,
20223     while `gnu_' values always refer to the formats accepted by the
20224     GNU C Library.  On Microsoft Windows targets, `ms_' values refer
20225     to the formats accepted by the `msvcrt.dll' library.  The
20226     parameter STRING-INDEX specifies which argument is the format
20227     string argument (starting from 1), while FIRST-TO-CHECK is the
20228     number of the first argument to check against the format string.
20229     For functions where the arguments are not available to be checked
20230     (such as `vprintf'), specify the third parameter as zero.  In this
20231     case the compiler only checks the format string for consistency.
20232     For `strftime' formats, the third parameter is required to be zero.
20233     Since non-static C++ methods have an implicit `this' argument, the
20234     arguments of such methods should be counted from two, not one, when
20235     giving values for STRING-INDEX and FIRST-TO-CHECK.
20236
20237     In the example above, the format string (`my_format') is the second
20238     argument of the function `my_print', and the arguments to check
20239     start with the third argument, so the correct parameters for the
20240     format attribute are 2 and 3.
20241
20242     The `format' attribute allows you to identify your own functions
20243     which take format strings as arguments, so that GCC can check the
20244     calls to these functions for errors.  The compiler always (unless
20245     `-ffreestanding' or `-fno-builtin' is used) checks formats for the
20246     standard library functions `printf', `fprintf', `sprintf',
20247     `scanf', `fscanf', `sscanf', `strftime', `vprintf', `vfprintf' and
20248     `vsprintf' whenever such warnings are requested (using
20249     `-Wformat'), so there is no need to modify the header file
20250     `stdio.h'.  In C99 mode, the functions `snprintf', `vsnprintf',
20251     `vscanf', `vfscanf' and `vsscanf' are also checked.  Except in
20252     strictly conforming C standard modes, the X/Open function
20253     `strfmon' is also checked as are `printf_unlocked' and
20254     `fprintf_unlocked'.  *Note Options Controlling C Dialect: C
20255     Dialect Options.
20256
20257     For Objective-C dialects, `NSString' (or `__NSString__') is
20258     recognized in the same context.  Declarations including these
20259     format attributes will be parsed for correct syntax, however the
20260     result of checking of such format strings is not yet defined, and
20261     will not be carried out by this version of the compiler.
20262
20263     The target may also provide additional types of format checks.
20264     *Note Format Checks Specific to Particular Target Machines: Target
20265     Format Checks.
20266
20267`format_arg (STRING-INDEX)'
20268     The `format_arg' attribute specifies that a function takes a format
20269     string for a `printf', `scanf', `strftime' or `strfmon' style
20270     function and modifies it (for example, to translate it into
20271     another language), so the result can be passed to a `printf',
20272     `scanf', `strftime' or `strfmon' style function (with the
20273     remaining arguments to the format function the same as they would
20274     have been for the unmodified string).  For example, the
20275     declaration:
20276
20277          extern char *
20278          my_dgettext (char *my_domain, const char *my_format)
20279                __attribute__ ((format_arg (2)));
20280
20281     causes the compiler to check the arguments in calls to a `printf',
20282     `scanf', `strftime' or `strfmon' type function, whose format
20283     string argument is a call to the `my_dgettext' function, for
20284     consistency with the format string argument `my_format'.  If the
20285     `format_arg' attribute had not been specified, all the compiler
20286     could tell in such calls to format functions would be that the
20287     format string argument is not constant; this would generate a
20288     warning when `-Wformat-nonliteral' is used, but the calls could
20289     not be checked without the attribute.
20290
20291     The parameter STRING-INDEX specifies which argument is the format
20292     string argument (starting from one).  Since non-static C++ methods
20293     have an implicit `this' argument, the arguments of such methods
20294     should be counted from two.
20295
20296     The `format-arg' attribute allows you to identify your own
20297     functions which modify format strings, so that GCC can check the
20298     calls to `printf', `scanf', `strftime' or `strfmon' type function
20299     whose operands are a call to one of your own function.  The
20300     compiler always treats `gettext', `dgettext', and `dcgettext' in
20301     this manner except when strict ISO C support is requested by
20302     `-ansi' or an appropriate `-std' option, or `-ffreestanding' or
20303     `-fno-builtin' is used.  *Note Options Controlling C Dialect: C
20304     Dialect Options.
20305
20306     For Objective-C dialects, the `format-arg' attribute may refer to
20307     an `NSString' reference for compatibility with the `format'
20308     attribute above.
20309
20310     The target may also allow additional types in `format-arg'
20311     attributes.  *Note Format Checks Specific to Particular Target
20312     Machines: Target Format Checks.
20313
20314`function_vector'
20315     Use this attribute on the H8/300, H8/300H, and H8S to indicate
20316     that the specified function should be called through the function
20317     vector.  Calling a function through the function vector will
20318     reduce code size, however; the function vector has a limited size
20319     (maximum 128 entries on the H8/300 and 64 entries on the H8/300H
20320     and H8S) and shares space with the interrupt vector.
20321
20322     In SH2A target, this attribute declares a function to be called
20323     using the TBR relative addressing mode.  The argument to this
20324     attribute is the entry number of the same function in a vector
20325     table containing all the TBR relative addressable functions.  For
20326     the successful jump, register TBR should contain the start address
20327     of this TBR relative vector table.  In the startup routine of the
20328     user application, user needs to care of this TBR register
20329     initialization.  The TBR relative vector table can have at max 256
20330     function entries.  The jumps to these functions will be generated
20331     using a SH2A specific, non delayed branch instruction JSR/N
20332     @(disp8,TBR).  You must use GAS and GLD from GNU binutils version
20333     2.7 or later for this attribute to work correctly.
20334
20335     Please refer the example of M16C target, to see the use of this
20336     attribute while declaring a function,
20337
20338     In an application, for a function being called once, this
20339     attribute will save at least 8 bytes of code; and if other
20340     successive calls are being made to the same function, it will save
20341     2 bytes of code per each of these calls.
20342
20343     On M16C/M32C targets, the `function_vector' attribute declares a
20344     special page subroutine call function. Use of this attribute
20345     reduces the code size by 2 bytes for each call generated to the
20346     subroutine. The argument to the attribute is the vector number
20347     entry from the special page vector table which contains the 16
20348     low-order bits of the subroutine's entry address. Each vector
20349     table has special page number (18 to 255) which are used in `jsrs'
20350     instruction.  Jump addresses of the routines are generated by
20351     adding 0x0F0000 (in case of M16C targets) or 0xFF0000 (in case of
20352     M32C targets), to the 2 byte addresses set in the vector table.
20353     Therefore you need to ensure that all the special page vector
20354     routines should get mapped within the address range 0x0F0000 to
20355     0x0FFFFF (for M16C) and 0xFF0000 to 0xFFFFFF (for M32C).
20356
20357     In the following example 2 bytes will be saved for each call to
20358     function `foo'.
20359
20360          void foo (void) __attribute__((function_vector(0x18)));
20361          void foo (void)
20362          {
20363          }
20364
20365          void bar (void)
20366          {
20367              foo();
20368          }
20369
20370     If functions are defined in one file and are called in another
20371     file, then be sure to write this declaration in both files.
20372
20373     This attribute is ignored for R8C target.
20374
20375`interrupt'
20376     Use this attribute on the ARM, AVR, CRX, M32C, M32R/D, m68k, MeP,
20377     MIPS, RX and Xstormy16 ports to indicate that the specified
20378     function is an interrupt handler.  The compiler will generate
20379     function entry and exit sequences suitable for use in an interrupt
20380     handler when this attribute is present.
20381
20382     Note, interrupt handlers for the Blackfin, H8/300, H8/300H, H8S,
20383     MicroBlaze, and SH processors can be specified via the
20384     `interrupt_handler' attribute.
20385
20386     Note, on the AVR, interrupts will be enabled inside the function.
20387
20388     Note, for the ARM, you can specify the kind of interrupt to be
20389     handled by adding an optional parameter to the interrupt attribute
20390     like this:
20391
20392          void f () __attribute__ ((interrupt ("IRQ")));
20393
20394     Permissible values for this parameter are: IRQ, FIQ, SWI, ABORT
20395     and UNDEF.
20396
20397     On ARMv7-M the interrupt type is ignored, and the attribute means
20398     the function may be called with a word aligned stack pointer.
20399
20400     On MIPS targets, you can use the following attributes to modify
20401     the behavior of an interrupt handler:
20402    `use_shadow_register_set'
20403          Assume that the handler uses a shadow register set, instead of
20404          the main general-purpose registers.
20405
20406    `keep_interrupts_masked'
20407          Keep interrupts masked for the whole function.  Without this
20408          attribute, GCC tries to reenable interrupts for as much of
20409          the function as it can.
20410
20411    `use_debug_exception_return'
20412          Return using the `deret' instruction.  Interrupt handlers
20413          that don't have this attribute return using `eret' instead.
20414
20415     You can use any combination of these attributes, as shown below:
20416          void __attribute__ ((interrupt)) v0 ();
20417          void __attribute__ ((interrupt, use_shadow_register_set)) v1 ();
20418          void __attribute__ ((interrupt, keep_interrupts_masked)) v2 ();
20419          void __attribute__ ((interrupt, use_debug_exception_return)) v3 ();
20420          void __attribute__ ((interrupt, use_shadow_register_set,
20421                               keep_interrupts_masked)) v4 ();
20422          void __attribute__ ((interrupt, use_shadow_register_set,
20423                               use_debug_exception_return)) v5 ();
20424          void __attribute__ ((interrupt, keep_interrupts_masked,
20425                               use_debug_exception_return)) v6 ();
20426          void __attribute__ ((interrupt, use_shadow_register_set,
20427                               keep_interrupts_masked,
20428                               use_debug_exception_return)) v7 ();
20429
20430`ifunc ("RESOLVER")'
20431     The `ifunc' attribute is used to mark a function as an indirect
20432     function using the STT_GNU_IFUNC symbol type extension to the ELF
20433     standard.  This allows the resolution of the symbol value to be
20434     determined dynamically at load time, and an optimized version of
20435     the routine can be selected for the particular processor or other
20436     system characteristics determined then.  To use this attribute,
20437     first define the implementation functions available, and a
20438     resolver function that returns a pointer to the selected
20439     implementation function.  The implementation functions'
20440     declarations must match the API of the function being implemented,
20441     the resolver's declaration is be a function returning pointer to
20442     void function returning void:
20443
20444          void *my_memcpy (void *dst, const void *src, size_t len)
20445          {
20446            ...
20447          }
20448
20449          static void (*resolve_memcpy (void)) (void)
20450          {
20451            return my_memcpy; // we'll just always select this routine
20452          }
20453
20454     The exported header file declaring the function the user calls
20455     would contain:
20456
20457          extern void *memcpy (void *, const void *, size_t);
20458
20459     allowing the user to call this as a regular function, unaware of
20460     the implementation.  Finally, the indirect function needs to be
20461     defined in the same translation unit as the resolver function:
20462
20463          void *memcpy (void *, const void *, size_t)
20464               __attribute__ ((ifunc ("resolve_memcpy")));
20465
20466     Indirect functions cannot be weak, and require a recent binutils
20467     (at least version 2.20.1), and GNU C library (at least version
20468     2.11.1).
20469
20470`interrupt_handler'
20471     Use this attribute on the Blackfin, m68k, H8/300, H8/300H, H8S,
20472     and SH to indicate that the specified function is an interrupt
20473     handler.  The compiler will generate function entry and exit
20474     sequences suitable for use in an interrupt handler when this
20475     attribute is present.
20476
20477`interrupt_thread'
20478     Use this attribute on fido, a subarchitecture of the m68k, to
20479     indicate that the specified function is an interrupt handler that
20480     is designed to run as a thread.  The compiler omits generate
20481     prologue/epilogue sequences and replaces the return instruction
20482     with a `sleep' instruction.  This attribute is available only on
20483     fido.
20484
20485`isr'
20486     Use this attribute on ARM to write Interrupt Service Routines.
20487     This is an alias to the `interrupt' attribute above.
20488
20489`kspisusp'
20490     When used together with `interrupt_handler', `exception_handler'
20491     or `nmi_handler', code will be generated to load the stack pointer
20492     from the USP register in the function prologue.
20493
20494`l1_text'
20495     This attribute specifies a function to be placed into L1
20496     Instruction SRAM. The function will be put into a specific section
20497     named `.l1.text'.  With `-mfdpic', function calls with a such
20498     function as the callee or caller will use inlined PLT.
20499
20500`l2'
20501     On the Blackfin, this attribute specifies a function to be placed
20502     into L2 SRAM. The function will be put into a specific section
20503     named `.l1.text'. With `-mfdpic', callers of such functions will
20504     use an inlined PLT.
20505
20506`leaf'
20507     Calls to external functions with this attribute must return to the
20508     current compilation unit only by return or by exception handling.
20509     In particular, leaf functions are not allowed to call callback
20510     function passed to it from the current compilation unit or
20511     directly call functions exported by the unit or longjmp into the
20512     unit.  Leaf function might still call functions from other
20513     compilation units and thus they are not necessarily leaf in the
20514     sense that they contain no function calls at all.
20515
20516     The attribute is intended for library functions to improve
20517     dataflow analysis.  The compiler takes the hint that any data not
20518     escaping the current compilation unit can not be used or modified
20519     by the leaf function.  For example, the `sin' function is a leaf
20520     function, but `qsort' is not.
20521
20522     Note that leaf functions might invoke signals and signal handlers
20523     might be defined in the current compilation unit and use static
20524     variables.  The only compliant way to write such a signal handler
20525     is to declare such variables `volatile'.
20526
20527     The attribute has no effect on functions defined within the
20528     current compilation unit.  This is to allow easy merging of
20529     multiple compilation units into one, for example, by using the
20530     link time optimization.  For this reason the attribute is not
20531     allowed on types to annotate indirect calls.
20532
20533`long_call/short_call'
20534     This attribute specifies how a particular function is called on
20535     ARM.  Both attributes override the `-mlong-calls' (*note ARM
20536     Options::) command-line switch and `#pragma long_calls' settings.
20537     The `long_call' attribute indicates that the function might be far
20538     away from the call site and require a different (more expensive)
20539     calling sequence.   The `short_call' attribute always places the
20540     offset to the function from the call site into the `BL'
20541     instruction directly.
20542
20543`longcall/shortcall'
20544     On the Blackfin, RS/6000 and PowerPC, the `longcall' attribute
20545     indicates that the function might be far away from the call site
20546     and require a different (more expensive) calling sequence.  The
20547     `shortcall' attribute indicates that the function is always close
20548     enough for the shorter calling sequence to be used.  These
20549     attributes override both the `-mlongcall' switch and, on the
20550     RS/6000 and PowerPC, the `#pragma longcall' setting.
20551
20552     *Note RS/6000 and PowerPC Options::, for more information on
20553     whether long calls are necessary.
20554
20555`long_call/near/far'
20556     These attributes specify how a particular function is called on
20557     MIPS.  The attributes override the `-mlong-calls' (*note MIPS
20558     Options::) command-line switch.  The `long_call' and `far'
20559     attributes are synonyms, and cause the compiler to always call the
20560     function by first loading its address into a register, and then
20561     using the contents of that register.  The `near' attribute has the
20562     opposite effect; it specifies that non-PIC calls should be made
20563     using the more efficient `jal' instruction.
20564
20565`malloc'
20566     The `malloc' attribute is used to tell the compiler that a function
20567     may be treated as if any non-`NULL' pointer it returns cannot
20568     alias any other pointer valid when the function returns.  This
20569     will often improve optimization.  Standard functions with this
20570     property include `malloc' and `calloc'.  `realloc'-like functions
20571     have this property as long as the old pointer is never referred to
20572     (including comparing it to the new pointer) after the function
20573     returns a non-`NULL' value.
20574
20575`mips16/nomips16'
20576     On MIPS targets, you can use the `mips16' and `nomips16' function
20577     attributes to locally select or turn off MIPS16 code generation.
20578     A function with the `mips16' attribute is emitted as MIPS16 code,
20579     while MIPS16 code generation is disabled for functions with the
20580     `nomips16' attribute.  These attributes override the `-mips16' and
20581     `-mno-mips16' options on the command line (*note MIPS Options::).
20582
20583     When compiling files containing mixed MIPS16 and non-MIPS16 code,
20584     the preprocessor symbol `__mips16' reflects the setting on the
20585     command line, not that within individual functions.  Mixed MIPS16
20586     and non-MIPS16 code may interact badly with some GCC extensions
20587     such as `__builtin_apply' (*note Constructing Calls::).
20588
20589`model (MODEL-NAME)'
20590     On the M32R/D, use this attribute to set the addressability of an
20591     object, and of the code generated for a function.  The identifier
20592     MODEL-NAME is one of `small', `medium', or `large', representing
20593     each of the code models.
20594
20595     Small model objects live in the lower 16MB of memory (so that their
20596     addresses can be loaded with the `ld24' instruction), and are
20597     callable with the `bl' instruction.
20598
20599     Medium model objects may live anywhere in the 32-bit address space
20600     (the compiler will generate `seth/add3' instructions to load their
20601     addresses), and are callable with the `bl' instruction.
20602
20603     Large model objects may live anywhere in the 32-bit address space
20604     (the compiler will generate `seth/add3' instructions to load their
20605     addresses), and may not be reachable with the `bl' instruction
20606     (the compiler will generate the much slower `seth/add3/jl'
20607     instruction sequence).
20608
20609     On IA-64, use this attribute to set the addressability of an
20610     object.  At present, the only supported identifier for MODEL-NAME
20611     is `small', indicating addressability via "small" (22-bit)
20612     addresses (so that their addresses can be loaded with the `addl'
20613     instruction).  Caveat: such addressing is by definition not
20614     position independent and hence this attribute must not be used for
20615     objects defined by shared libraries.
20616
20617`ms_abi/sysv_abi'
20618     On 64-bit x86_64-*-* targets, you can use an ABI attribute to
20619     indicate which calling convention should be used for a function.
20620     The `ms_abi' attribute tells the compiler to use the Microsoft
20621     ABI, while the `sysv_abi' attribute tells the compiler to use the
20622     ABI used on GNU/Linux and other systems.  The default is to use
20623     the Microsoft ABI when targeting Windows.  On all other systems,
20624     the default is the AMD ABI.
20625
20626     Note, the `ms_abi' attribute for Windows targets currently requires
20627     the `-maccumulate-outgoing-args' option.
20628
20629`callee_pop_aggregate_return (NUMBER)'
20630     On 32-bit i?86-*-* targets, you can control by those attribute for
20631     aggregate return in memory, if the caller is responsible to pop
20632     the hidden pointer together with the rest of the arguments -
20633     NUMBER equal to zero -, or if the callee is responsible to pop
20634     hidden pointer - NUMBER equal to one.
20635
20636     For i?86-netware, the caller pops the stack for the hidden
20637     arguments pointing to aggregate return value.  This differs from
20638     the default i386 ABI which assumes that the callee pops the stack
20639     for hidden pointer.
20640
20641`ms_hook_prologue'
20642     On 32 bit i[34567]86-*-* targets and 64 bit x86_64-*-* targets,
20643     you can use this function attribute to make gcc generate the
20644     "hot-patching" function prologue used in Win32 API functions in
20645     Microsoft Windows XP Service Pack 2 and newer.
20646
20647`naked'
20648     Use this attribute on the ARM, AVR, MCORE, RX and SPU ports to
20649     indicate that the specified function does not need
20650     prologue/epilogue sequences generated by the compiler.  It is up
20651     to the programmer to provide these sequences. The only statements
20652     that can be safely included in naked functions are `asm'
20653     statements that do not have operands.  All other statements,
20654     including declarations of local variables, `if' statements, and so
20655     forth, should be avoided.  Naked functions should be used to
20656     implement the body of an assembly function, while allowing the
20657     compiler to construct the requisite function declaration for the
20658     assembler.
20659
20660`near'
20661     On 68HC11 and 68HC12 the `near' attribute causes the compiler to
20662     use the normal calling convention based on `jsr' and `rts'.  This
20663     attribute can be used to cancel the effect of the `-mlong-calls'
20664     option.
20665
20666     On MeP targets this attribute causes the compiler to assume the
20667     called function is close enough to use the normal calling
20668     convention, overriding the `-mtf' command line option.
20669
20670`nesting'
20671     Use this attribute together with `interrupt_handler',
20672     `exception_handler' or `nmi_handler' to indicate that the function
20673     entry code should enable nested interrupts or exceptions.
20674
20675`nmi_handler'
20676     Use this attribute on the Blackfin to indicate that the specified
20677     function is an NMI handler.  The compiler will generate function
20678     entry and exit sequences suitable for use in an NMI handler when
20679     this attribute is present.
20680
20681`no_instrument_function'
20682     If `-finstrument-functions' is given, profiling function calls will
20683     be generated at entry and exit of most user-compiled functions.
20684     Functions with this attribute will not be so instrumented.
20685
20686`no_split_stack'
20687     If `-fsplit-stack' is given, functions will have a small prologue
20688     which decides whether to split the stack.  Functions with the
20689     `no_split_stack' attribute will not have that prologue, and thus
20690     may run with only a small amount of stack space available.
20691
20692`noinline'
20693     This function attribute prevents a function from being considered
20694     for inlining.  If the function does not have side-effects, there
20695     are optimizations other than inlining that causes function calls
20696     to be optimized away, although the function call is live.  To keep
20697     such calls from being optimized away, put
20698          asm ("");
20699     (*note Extended Asm::) in the called function, to serve as a
20700     special side-effect.
20701
20702`noclone'
20703     This function attribute prevents a function from being considered
20704     for cloning - a mechanism which produces specialized copies of
20705     functions and which is (currently) performed by interprocedural
20706     constant propagation.
20707
20708`nonnull (ARG-INDEX, ...)'
20709     The `nonnull' attribute specifies that some function parameters
20710     should be non-null pointers.  For instance, the declaration:
20711
20712          extern void *
20713          my_memcpy (void *dest, const void *src, size_t len)
20714                  __attribute__((nonnull (1, 2)));
20715
20716     causes the compiler to check that, in calls to `my_memcpy',
20717     arguments DEST and SRC are non-null.  If the compiler determines
20718     that a null pointer is passed in an argument slot marked as
20719     non-null, and the `-Wnonnull' option is enabled, a warning is
20720     issued.  The compiler may also choose to make optimizations based
20721     on the knowledge that certain function arguments will not be null.
20722
20723     If no argument index list is given to the `nonnull' attribute, all
20724     pointer arguments are marked as non-null.  To illustrate, the
20725     following declaration is equivalent to the previous example:
20726
20727          extern void *
20728          my_memcpy (void *dest, const void *src, size_t len)
20729                  __attribute__((nonnull));
20730
20731`noreturn'
20732     A few standard library functions, such as `abort' and `exit',
20733     cannot return.  GCC knows this automatically.  Some programs define
20734     their own functions that never return.  You can declare them
20735     `noreturn' to tell the compiler this fact.  For example,
20736
20737          void fatal () __attribute__ ((noreturn));
20738
20739          void
20740          fatal (/* ... */)
20741          {
20742            /* ... */ /* Print error message. */ /* ... */
20743            exit (1);
20744          }
20745
20746     The `noreturn' keyword tells the compiler to assume that `fatal'
20747     cannot return.  It can then optimize without regard to what would
20748     happen if `fatal' ever did return.  This makes slightly better
20749     code.  More importantly, it helps avoid spurious warnings of
20750     uninitialized variables.
20751
20752     The `noreturn' keyword does not affect the exceptional path when
20753     that applies: a `noreturn'-marked function may still return to the
20754     caller by throwing an exception or calling `longjmp'.
20755
20756     Do not assume that registers saved by the calling function are
20757     restored before calling the `noreturn' function.
20758
20759     It does not make sense for a `noreturn' function to have a return
20760     type other than `void'.
20761
20762     The attribute `noreturn' is not implemented in GCC versions
20763     earlier than 2.5.  An alternative way to declare that a function
20764     does not return, which works in the current version and in some
20765     older versions, is as follows:
20766
20767          typedef void voidfn ();
20768
20769          volatile voidfn fatal;
20770
20771     This approach does not work in GNU C++.
20772
20773`nothrow'
20774     The `nothrow' attribute is used to inform the compiler that a
20775     function cannot throw an exception.  For example, most functions in
20776     the standard C library can be guaranteed not to throw an exception
20777     with the notable exceptions of `qsort' and `bsearch' that take
20778     function pointer arguments.  The `nothrow' attribute is not
20779     implemented in GCC versions earlier than 3.3.
20780
20781`optimize'
20782     The `optimize' attribute is used to specify that a function is to
20783     be compiled with different optimization options than specified on
20784     the command line.  Arguments can either be numbers or strings.
20785     Numbers are assumed to be an optimization level.  Strings that
20786     begin with `O' are assumed to be an optimization option, while
20787     other options are assumed to be used with a `-f' prefix.  You can
20788     also use the `#pragma GCC optimize' pragma to set the optimization
20789     options that affect more than one function.  *Note Function
20790     Specific Option Pragmas::, for details about the `#pragma GCC
20791     optimize' pragma.
20792
20793     This can be used for instance to have frequently executed functions
20794     compiled with more aggressive optimization options that produce
20795     faster and larger code, while other functions can be called with
20796     less aggressive options.
20797
20798`pcs'
20799     The `pcs' attribute can be used to control the calling convention
20800     used for a function on ARM.  The attribute takes an argument that
20801     specifies the calling convention to use.
20802
20803     When compiling using the AAPCS ABI (or a variant of that) then
20804     valid values for the argument are `"aapcs"' and `"aapcs-vfp"'.  In
20805     order to use a variant other than `"aapcs"' then the compiler must
20806     be permitted to use the appropriate co-processor registers (i.e.,
20807     the VFP registers must be available in order to use `"aapcs-vfp"').
20808     For example,
20809
20810          /* Argument passed in r0, and result returned in r0+r1.  */
20811          double f2d (float) __attribute__((pcs("aapcs")));
20812
20813     Variadic functions always use the `"aapcs"' calling convention and
20814     the compiler will reject attempts to specify an alternative.
20815
20816`pure'
20817     Many functions have no effects except the return value and their
20818     return value depends only on the parameters and/or global
20819     variables.  Such a function can be subject to common subexpression
20820     elimination and loop optimization just as an arithmetic operator
20821     would be.  These functions should be declared with the attribute
20822     `pure'.  For example,
20823
20824          int square (int) __attribute__ ((pure));
20825
20826     says that the hypothetical function `square' is safe to call fewer
20827     times than the program says.
20828
20829     Some of common examples of pure functions are `strlen' or `memcmp'.
20830     Interesting non-pure functions are functions with infinite loops
20831     or those depending on volatile memory or other system resource,
20832     that may change between two consecutive calls (such as `feof' in a
20833     multithreading environment).
20834
20835     The attribute `pure' is not implemented in GCC versions earlier
20836     than 2.96.
20837
20838`hot'
20839     The `hot' attribute is used to inform the compiler that a function
20840     is a hot spot of the compiled program.  The function is optimized
20841     more aggressively and on many target it is placed into special
20842     subsection of the text section so all hot functions appears close
20843     together improving locality.
20844
20845     When profile feedback is available, via `-fprofile-use', hot
20846     functions are automatically detected and this attribute is ignored.
20847
20848     The `hot' attribute is not implemented in GCC versions earlier
20849     than 4.3.
20850
20851`cold'
20852     The `cold' attribute is used to inform the compiler that a
20853     function is unlikely executed.  The function is optimized for size
20854     rather than speed and on many targets it is placed into special
20855     subsection of the text section so all cold functions appears close
20856     together improving code locality of non-cold parts of program.
20857     The paths leading to call of cold functions within code are marked
20858     as unlikely by the branch prediction mechanism. It is thus useful
20859     to mark functions used to handle unlikely conditions, such as
20860     `perror', as cold to improve optimization of hot functions that do
20861     call marked functions in rare occasions.
20862
20863     When profile feedback is available, via `-fprofile-use', hot
20864     functions are automatically detected and this attribute is ignored.
20865
20866     The `cold' attribute is not implemented in GCC versions earlier
20867     than 4.3.
20868
20869`regparm (NUMBER)'
20870     On the Intel 386, the `regparm' attribute causes the compiler to
20871     pass arguments number one to NUMBER if they are of integral type
20872     in registers EAX, EDX, and ECX instead of on the stack.  Functions
20873     that take a variable number of arguments will continue to be
20874     passed all of their arguments on the stack.
20875
20876     Beware that on some ELF systems this attribute is unsuitable for
20877     global functions in shared libraries with lazy binding (which is
20878     the default).  Lazy binding will send the first call via resolving
20879     code in the loader, which might assume EAX, EDX and ECX can be
20880     clobbered, as per the standard calling conventions.  Solaris 8 is
20881     affected by this.  GNU systems with GLIBC 2.1 or higher, and
20882     FreeBSD, are believed to be safe since the loaders there save EAX,
20883     EDX and ECX.  (Lazy binding can be disabled with the linker or the
20884     loader if desired, to avoid the problem.)
20885
20886`sseregparm'
20887     On the Intel 386 with SSE support, the `sseregparm' attribute
20888     causes the compiler to pass up to 3 floating point arguments in
20889     SSE registers instead of on the stack.  Functions that take a
20890     variable number of arguments will continue to pass all of their
20891     floating point arguments on the stack.
20892
20893`force_align_arg_pointer'
20894     On the Intel x86, the `force_align_arg_pointer' attribute may be
20895     applied to individual function definitions, generating an alternate
20896     prologue and epilogue that realigns the runtime stack if necessary.
20897     This supports mixing legacy codes that run with a 4-byte aligned
20898     stack with modern codes that keep a 16-byte stack for SSE
20899     compatibility.
20900
20901`resbank'
20902     On the SH2A target, this attribute enables the high-speed register
20903     saving and restoration using a register bank for
20904     `interrupt_handler' routines.  Saving to the bank is performed
20905     automatically after the CPU accepts an interrupt that uses a
20906     register bank.
20907
20908     The nineteen 32-bit registers comprising general register R0 to
20909     R14, control register GBR, and system registers MACH, MACL, and PR
20910     and the vector table address offset are saved into a register
20911     bank.  Register banks are stacked in first-in last-out (FILO)
20912     sequence.  Restoration from the bank is executed by issuing a
20913     RESBANK instruction.
20914
20915`returns_twice'
20916     The `returns_twice' attribute tells the compiler that a function
20917     may return more than one time.  The compiler will ensure that all
20918     registers are dead before calling such a function and will emit a
20919     warning about the variables that may be clobbered after the second
20920     return from the function.  Examples of such functions are `setjmp'
20921     and `vfork'.  The `longjmp'-like counterpart of such function, if
20922     any, might need to be marked with the `noreturn' attribute.
20923
20924`saveall'
20925     Use this attribute on the Blackfin, H8/300, H8/300H, and H8S to
20926     indicate that all registers except the stack pointer should be
20927     saved in the prologue regardless of whether they are used or not.
20928
20929`save_volatiles'
20930     Use this attribute on the MicroBlaze to indicate that the function
20931     is an interrupt handler.  All volatile registers (in addition to
20932     non-volatile registers) will be saved in the function prologue.
20933     If the function is a leaf function, only volatiles used by the
20934     function are saved.  A normal function return is generated instead
20935     of a return from interrupt.
20936
20937`section ("SECTION-NAME")'
20938     Normally, the compiler places the code it generates in the `text'
20939     section.  Sometimes, however, you need additional sections, or you
20940     need certain particular functions to appear in special sections.
20941     The `section' attribute specifies that a function lives in a
20942     particular section.  For example, the declaration:
20943
20944          extern void foobar (void) __attribute__ ((section ("bar")));
20945
20946     puts the function `foobar' in the `bar' section.
20947
20948     Some file formats do not support arbitrary sections so the
20949     `section' attribute is not available on all platforms.  If you
20950     need to map the entire contents of a module to a particular
20951     section, consider using the facilities of the linker instead.
20952
20953`sentinel'
20954     This function attribute ensures that a parameter in a function
20955     call is an explicit `NULL'.  The attribute is only valid on
20956     variadic functions.  By default, the sentinel is located at
20957     position zero, the last parameter of the function call.  If an
20958     optional integer position argument P is supplied to the attribute,
20959     the sentinel must be located at position P counting backwards from
20960     the end of the argument list.
20961
20962          __attribute__ ((sentinel))
20963          is equivalent to
20964          __attribute__ ((sentinel(0)))
20965
20966     The attribute is automatically set with a position of 0 for the
20967     built-in functions `execl' and `execlp'.  The built-in function
20968     `execle' has the attribute set with a position of 1.
20969
20970     A valid `NULL' in this context is defined as zero with any pointer
20971     type.  If your system defines the `NULL' macro with an integer type
20972     then you need to add an explicit cast.  GCC replaces `stddef.h'
20973     with a copy that redefines NULL appropriately.
20974
20975     The warnings for missing or incorrect sentinels are enabled with
20976     `-Wformat'.
20977
20978`short_call'
20979     See long_call/short_call.
20980
20981`shortcall'
20982     See longcall/shortcall.
20983
20984`signal'
20985     Use this attribute on the AVR to indicate that the specified
20986     function is a signal handler.  The compiler will generate function
20987     entry and exit sequences suitable for use in a signal handler when
20988     this attribute is present.  Interrupts will be disabled inside the
20989     function.
20990
20991`sp_switch'
20992     Use this attribute on the SH to indicate an `interrupt_handler'
20993     function should switch to an alternate stack.  It expects a string
20994     argument that names a global variable holding the address of the
20995     alternate stack.
20996
20997          void *alt_stack;
20998          void f () __attribute__ ((interrupt_handler,
20999                                    sp_switch ("alt_stack")));
21000
21001`stdcall'
21002     On the Intel 386, the `stdcall' attribute causes the compiler to
21003     assume that the called function will pop off the stack space used
21004     to pass arguments, unless it takes a variable number of arguments.
21005
21006`syscall_linkage'
21007     This attribute is used to modify the IA64 calling convention by
21008     marking all input registers as live at all function exits.  This
21009     makes it possible to restart a system call after an interrupt
21010     without having to save/restore the input registers.  This also
21011     prevents kernel data from leaking into application code.
21012
21013`target'
21014     The `target' attribute is used to specify that a function is to be
21015     compiled with different target options than specified on the
21016     command line.  This can be used for instance to have functions
21017     compiled with a different ISA (instruction set architecture) than
21018     the default.  You can also use the `#pragma GCC target' pragma to
21019     set more than one function to be compiled with specific target
21020     options.  *Note Function Specific Option Pragmas::, for details
21021     about the `#pragma GCC target' pragma.
21022
21023     For instance on a 386, you could compile one function with
21024     `target("sse4.1,arch=core2")' and another with
21025     `target("sse4a,arch=amdfam10")' that would be equivalent to
21026     compiling the first function with `-msse4.1' and `-march=core2'
21027     options, and the second function with `-msse4a' and
21028     `-march=amdfam10' options.  It is up to the user to make sure that
21029     a function is only invoked on a machine that supports the
21030     particular ISA it was compiled for (for example by using `cpuid'
21031     on 386 to determine what feature bits and architecture family are
21032     used).
21033
21034          int core2_func (void) __attribute__ ((__target__ ("arch=core2")));
21035          int sse3_func (void) __attribute__ ((__target__ ("sse3")));
21036
21037     On the 386, the following options are allowed:
21038
21039    `abm'
21040    `no-abm'
21041          Enable/disable the generation of the advanced bit
21042          instructions.
21043
21044    `aes'
21045    `no-aes'
21046          Enable/disable the generation of the AES instructions.
21047
21048    `mmx'
21049    `no-mmx'
21050          Enable/disable the generation of the MMX instructions.
21051
21052    `pclmul'
21053    `no-pclmul'
21054          Enable/disable the generation of the PCLMUL instructions.
21055
21056    `popcnt'
21057    `no-popcnt'
21058          Enable/disable the generation of the POPCNT instruction.
21059
21060    `sse'
21061    `no-sse'
21062          Enable/disable the generation of the SSE instructions.
21063
21064    `sse2'
21065    `no-sse2'
21066          Enable/disable the generation of the SSE2 instructions.
21067
21068    `sse3'
21069    `no-sse3'
21070          Enable/disable the generation of the SSE3 instructions.
21071
21072    `sse4'
21073    `no-sse4'
21074          Enable/disable the generation of the SSE4 instructions (both
21075          SSE4.1 and SSE4.2).
21076
21077    `sse4.1'
21078    `no-sse4.1'
21079          Enable/disable the generation of the sse4.1 instructions.
21080
21081    `sse4.2'
21082    `no-sse4.2'
21083          Enable/disable the generation of the sse4.2 instructions.
21084
21085    `sse4a'
21086    `no-sse4a'
21087          Enable/disable the generation of the SSE4A instructions.
21088
21089    `fma4'
21090    `no-fma4'
21091          Enable/disable the generation of the FMA4 instructions.
21092
21093    `xop'
21094    `no-xop'
21095          Enable/disable the generation of the XOP instructions.
21096
21097    `lwp'
21098    `no-lwp'
21099          Enable/disable the generation of the LWP instructions.
21100
21101    `ssse3'
21102    `no-ssse3'
21103          Enable/disable the generation of the SSSE3 instructions.
21104
21105    `cld'
21106    `no-cld'
21107          Enable/disable the generation of the CLD before string moves.
21108
21109    `fancy-math-387'
21110    `no-fancy-math-387'
21111          Enable/disable the generation of the `sin', `cos', and `sqrt'
21112          instructions on the 387 floating point unit.
21113
21114    `fused-madd'
21115    `no-fused-madd'
21116          Enable/disable the generation of the fused multiply/add
21117          instructions.
21118
21119    `ieee-fp'
21120    `no-ieee-fp'
21121          Enable/disable the generation of floating point that depends
21122          on IEEE arithmetic.
21123
21124    `inline-all-stringops'
21125    `no-inline-all-stringops'
21126          Enable/disable inlining of string operations.
21127
21128    `inline-stringops-dynamically'
21129    `no-inline-stringops-dynamically'
21130          Enable/disable the generation of the inline code to do small
21131          string operations and calling the library routines for large
21132          operations.
21133
21134    `align-stringops'
21135    `no-align-stringops'
21136          Do/do not align destination of inlined string operations.
21137
21138    `recip'
21139    `no-recip'
21140          Enable/disable the generation of RCPSS, RCPPS, RSQRTSS and
21141          RSQRTPS instructions followed an additional Newton-Raphson
21142          step instead of doing a floating point division.
21143
21144    `arch=ARCH'
21145          Specify the architecture to generate code for in compiling
21146          the function.
21147
21148    `tune=TUNE'
21149          Specify the architecture to tune for in compiling the
21150          function.
21151
21152    `fpmath=FPMATH'
21153          Specify which floating point unit to use.  The
21154          `target("fpmath=sse,387")' option must be specified as
21155          `target("fpmath=sse+387")' because the comma would separate
21156          different options.
21157
21158     On the PowerPC, the following options are allowed:
21159
21160    `altivec'
21161    `no-altivec'
21162          Generate code that uses (does not use) AltiVec instructions.
21163          In 32-bit code, you cannot enable Altivec instructions unless
21164          `-mabi=altivec' was used on the command line.
21165
21166    `cmpb'
21167    `no-cmpb'
21168          Generate code that uses (does not use) the compare bytes
21169          instruction implemented on the POWER6 processor and other
21170          processors that support the PowerPC V2.05 architecture.
21171
21172    `dlmzb'
21173    `no-dlmzb'
21174          Generate code that uses (does not use) the string-search
21175          `dlmzb' instruction on the IBM 405, 440, 464 and 476
21176          processors.  This instruction is generated by default when
21177          targetting those processors.
21178
21179    `fprnd'
21180    `no-fprnd'
21181          Generate code that uses (does not use) the FP round to integer
21182          instructions implemented on the POWER5+ processor and other
21183          processors that support the PowerPC V2.03 architecture.
21184
21185    `hard-dfp'
21186    `no-hard-dfp'
21187          Generate code that uses (does not use) the decimal floating
21188          point instructions implemented on some POWER processors.
21189
21190    `isel'
21191    `no-isel'
21192          Generate code that uses (does not use) ISEL instruction.
21193
21194    `mfcrf'
21195    `no-mfcrf'
21196          Generate code that uses (does not use) the move from condition
21197          register field instruction implemented on the POWER4
21198          processor and other processors that support the PowerPC V2.01
21199          architecture.
21200
21201    `mfpgpr'
21202    `no-mfpgpr'
21203          Generate code that uses (does not use) the FP move to/from
21204          general purpose register instructions implemented on the
21205          POWER6X processor and other processors that support the
21206          extended PowerPC V2.05 architecture.
21207
21208    `mulhw'
21209    `no-mulhw'
21210          Generate code that uses (does not use) the half-word multiply
21211          and multiply-accumulate instructions on the IBM 405, 440, 464
21212          and 476 processors.  These instructions are generated by
21213          default when targetting those processors.
21214
21215    `multiple'
21216    `no-multiple'
21217          Generate code that uses (does not use) the load multiple word
21218          instructions and the store multiple word instructions.
21219
21220    `update'
21221    `no-update'
21222          Generate code that uses (does not use) the load or store
21223          instructions that update the base register to the address of
21224          the calculated memory location.
21225
21226    `popcntb'
21227    `no-popcntb'
21228          Generate code that uses (does not use) the popcount and double
21229          precision FP reciprocal estimate instruction implemented on
21230          the POWER5 processor and other processors that support the
21231          PowerPC V2.02 architecture.
21232
21233    `popcntd'
21234    `no-popcntd'
21235          Generate code that uses (does not use) the popcount
21236          instruction implemented on the POWER7 processor and other
21237          processors that support the PowerPC V2.06 architecture.
21238
21239    `powerpc-gfxopt'
21240    `no-powerpc-gfxopt'
21241          Generate code that uses (does not use) the optional PowerPC
21242          architecture instructions in the Graphics group, including
21243          floating-point select.
21244
21245    `powerpc-gpopt'
21246    `no-powerpc-gpopt'
21247          Generate code that uses (does not use) the optional PowerPC
21248          architecture instructions in the General Purpose group,
21249          including floating-point square root.
21250
21251    `recip-precision'
21252    `no-recip-precision'
21253          Assume (do not assume) that the reciprocal estimate
21254          instructions provide higher precision estimates than is
21255          mandated by the powerpc ABI.
21256
21257    `string'
21258    `no-string'
21259          Generate code that uses (does not use) the load string
21260          instructions and the store string word instructions to save
21261          multiple registers and do small block moves.
21262
21263    `vsx'
21264    `no-vsx'
21265          Generate code that uses (does not use) vector/scalar (VSX)
21266          instructions, and also enable the use of built-in functions
21267          that allow more direct access to the VSX instruction set.  In
21268          32-bit code, you cannot enable VSX or Altivec instructions
21269          unless `-mabi=altivec' was used on the command line.
21270
21271    `friz'
21272    `no-friz'
21273          Generate (do not generate) the `friz' instruction when the
21274          `-funsafe-math-optimizations' option is used to optimize
21275          rounding a floating point value to 64-bit integer and back to
21276          floating point.  The `friz' instruction does not return the
21277          same value if the floating point number is too large to fit
21278          in an integer.
21279
21280    `avoid-indexed-addresses'
21281    `no-avoid-indexed-addresses'
21282          Generate code that tries to avoid (not avoid) the use of
21283          indexed load or store instructions.
21284
21285    `paired'
21286    `no-paired'
21287          Generate code that uses (does not use) the generation of
21288          PAIRED simd instructions.
21289
21290    `longcall'
21291    `no-longcall'
21292          Generate code that assumes (does not assume) that all calls
21293          are far away so that a longer more expensive calling sequence
21294          is required.
21295
21296    `cpu=CPU'
21297          Specify the architecture to generate code for when compiling
21298          the function.  If you select the `"target("cpu=power7)"'
21299          attribute when generating 32-bit code, VSX and Altivec
21300          instructions are not generated unless you use the
21301          `-mabi=altivec' option on the command line.
21302
21303    `tune=TUNE'
21304          Specify the architecture to tune for when compiling the
21305          function.  If you do not specify the `target("tune=TUNE")'
21306          attribute and you do specify the `target("cpu=CPU")'
21307          attribute, compilation will tune for the CPU architecture,
21308          and not the default tuning specified on the command line.
21309
21310     On the 386/x86_64 and PowerPC backends, you can use either multiple
21311     strings to specify multiple options, or you can separate the option
21312     with a comma (`,').
21313
21314     On the 386/x86_64 and PowerPC backends, the inliner will not
21315     inline a function that has different target options than the
21316     caller, unless the callee has a subset of the target options of
21317     the caller.  For example a function declared with `target("sse3")'
21318     can inline a function with `target("sse2")', since `-msse3'
21319     implies `-msse2'.
21320
21321     The `target' attribute is not implemented in GCC versions earlier
21322     than 4.4 for the i386/x86_64 and 4.6 for the PowerPC backends.  It
21323     is not currently implemented for other backends.
21324
21325`tiny_data'
21326     Use this attribute on the H8/300H and H8S to indicate that the
21327     specified variable should be placed into the tiny data section.
21328     The compiler will generate more efficient code for loads and stores
21329     on data in the tiny data section.  Note the tiny data area is
21330     limited to slightly under 32kbytes of data.
21331
21332`trap_exit'
21333     Use this attribute on the SH for an `interrupt_handler' to return
21334     using `trapa' instead of `rte'.  This attribute expects an integer
21335     argument specifying the trap number to be used.
21336
21337`unused'
21338     This attribute, attached to a function, means that the function is
21339     meant to be possibly unused.  GCC will not produce a warning for
21340     this function.
21341
21342`used'
21343     This attribute, attached to a function, means that code must be
21344     emitted for the function even if it appears that the function is
21345     not referenced.  This is useful, for example, when the function is
21346     referenced only in inline assembly.
21347
21348`version_id'
21349     This IA64 HP-UX attribute, attached to a global variable or
21350     function, renames a symbol to contain a version string, thus
21351     allowing for function level versioning.  HP-UX system header files
21352     may use version level functioning for some system calls.
21353
21354          extern int foo () __attribute__((version_id ("20040821")));
21355
21356     Calls to FOO will be mapped to calls to FOO{20040821}.
21357
21358`visibility ("VISIBILITY_TYPE")'
21359     This attribute affects the linkage of the declaration to which it
21360     is attached.  There are four supported VISIBILITY_TYPE values:
21361     default, hidden, protected or internal visibility.
21362
21363          void __attribute__ ((visibility ("protected")))
21364          f () { /* Do something. */; }
21365          int i __attribute__ ((visibility ("hidden")));
21366
21367     The possible values of VISIBILITY_TYPE correspond to the
21368     visibility settings in the ELF gABI.
21369
21370    "default"
21371          Default visibility is the normal case for the object file
21372          format.  This value is available for the visibility attribute
21373          to override other options that may change the assumed
21374          visibility of entities.
21375
21376          On ELF, default visibility means that the declaration is
21377          visible to other modules and, in shared libraries, means that
21378          the declared entity may be overridden.
21379
21380          On Darwin, default visibility means that the declaration is
21381          visible to other modules.
21382
21383          Default visibility corresponds to "external linkage" in the
21384          language.
21385
21386    "hidden"
21387          Hidden visibility indicates that the entity declared will
21388          have a new form of linkage, which we'll call "hidden
21389          linkage".  Two declarations of an object with hidden linkage
21390          refer to the same object if they are in the same shared
21391          object.
21392
21393    "internal"
21394          Internal visibility is like hidden visibility, but with
21395          additional processor specific semantics.  Unless otherwise
21396          specified by the psABI, GCC defines internal visibility to
21397          mean that a function is _never_ called from another module.
21398          Compare this with hidden functions which, while they cannot
21399          be referenced directly by other modules, can be referenced
21400          indirectly via function pointers.  By indicating that a
21401          function cannot be called from outside the module, GCC may
21402          for instance omit the load of a PIC register since it is known
21403          that the calling function loaded the correct value.
21404
21405    "protected"
21406          Protected visibility is like default visibility except that it
21407          indicates that references within the defining module will
21408          bind to the definition in that module.  That is, the declared
21409          entity cannot be overridden by another module.
21410
21411
21412     All visibilities are supported on many, but not all, ELF targets
21413     (supported when the assembler supports the `.visibility'
21414     pseudo-op).  Default visibility is supported everywhere.  Hidden
21415     visibility is supported on Darwin targets.
21416
21417     The visibility attribute should be applied only to declarations
21418     which would otherwise have external linkage.  The attribute should
21419     be applied consistently, so that the same entity should not be
21420     declared with different settings of the attribute.
21421
21422     In C++, the visibility attribute applies to types as well as
21423     functions and objects, because in C++ types have linkage.  A class
21424     must not have greater visibility than its non-static data member
21425     types and bases, and class members default to the visibility of
21426     their class.  Also, a declaration without explicit visibility is
21427     limited to the visibility of its type.
21428
21429     In C++, you can mark member functions and static member variables
21430     of a class with the visibility attribute.  This is useful if you
21431     know a particular method or static member variable should only be
21432     used from one shared object; then you can mark it hidden while the
21433     rest of the class has default visibility.  Care must be taken to
21434     avoid breaking the One Definition Rule; for example, it is usually
21435     not useful to mark an inline method as hidden without marking the
21436     whole class as hidden.
21437
21438     A C++ namespace declaration can also have the visibility attribute.
21439     This attribute applies only to the particular namespace body, not
21440     to other definitions of the same namespace; it is equivalent to
21441     using `#pragma GCC visibility' before and after the namespace
21442     definition (*note Visibility Pragmas::).
21443
21444     In C++, if a template argument has limited visibility, this
21445     restriction is implicitly propagated to the template instantiation.
21446     Otherwise, template instantiations and specializations default to
21447     the visibility of their template.
21448
21449     If both the template and enclosing class have explicit visibility,
21450     the visibility from the template is used.
21451
21452`vliw'
21453     On MeP, the `vliw' attribute tells the compiler to emit
21454     instructions in VLIW mode instead of core mode.  Note that this
21455     attribute is not allowed unless a VLIW coprocessor has been
21456     configured and enabled through command line options.
21457
21458`warn_unused_result'
21459     The `warn_unused_result' attribute causes a warning to be emitted
21460     if a caller of the function with this attribute does not use its
21461     return value.  This is useful for functions where not checking the
21462     result is either a security problem or always a bug, such as
21463     `realloc'.
21464
21465          int fn () __attribute__ ((warn_unused_result));
21466          int foo ()
21467          {
21468            if (fn () < 0) return -1;
21469            fn ();
21470            return 0;
21471          }
21472
21473     results in warning on line 5.
21474
21475`weak'
21476     The `weak' attribute causes the declaration to be emitted as a weak
21477     symbol rather than a global.  This is primarily useful in defining
21478     library functions which can be overridden in user code, though it
21479     can also be used with non-function declarations.  Weak symbols are
21480     supported for ELF targets, and also for a.out targets when using
21481     the GNU assembler and linker.
21482
21483`weakref'
21484`weakref ("TARGET")'
21485     The `weakref' attribute marks a declaration as a weak reference.
21486     Without arguments, it should be accompanied by an `alias' attribute
21487     naming the target symbol.  Optionally, the TARGET may be given as
21488     an argument to `weakref' itself.  In either case, `weakref'
21489     implicitly marks the declaration as `weak'.  Without a TARGET,
21490     given as an argument to `weakref' or to `alias', `weakref' is
21491     equivalent to `weak'.
21492
21493          static int x() __attribute__ ((weakref ("y")));
21494          /* is equivalent to... */
21495          static int x() __attribute__ ((weak, weakref, alias ("y")));
21496          /* and to... */
21497          static int x() __attribute__ ((weakref));
21498          static int x() __attribute__ ((alias ("y")));
21499
21500     A weak reference is an alias that does not by itself require a
21501     definition to be given for the target symbol.  If the target
21502     symbol is only referenced through weak references, then it becomes
21503     a `weak' undefined symbol.  If it is directly referenced, however,
21504     then such strong references prevail, and a definition will be
21505     required for the symbol, not necessarily in the same translation
21506     unit.
21507
21508     The effect is equivalent to moving all references to the alias to a
21509     separate translation unit, renaming the alias to the aliased
21510     symbol, declaring it as weak, compiling the two separate
21511     translation units and performing a reloadable link on them.
21512
21513     At present, a declaration to which `weakref' is attached can only
21514     be `static'.
21515
21516
21517 You can specify multiple attributes in a declaration by separating them
21518by commas within the double parentheses or by immediately following an
21519attribute declaration with another attribute declaration.
21520
21521 Some people object to the `__attribute__' feature, suggesting that ISO
21522C's `#pragma' should be used instead.  At the time `__attribute__' was
21523designed, there were two reasons for not doing this.
21524
21525  1. It is impossible to generate `#pragma' commands from a macro.
21526
21527  2. There is no telling what the same `#pragma' might mean in another
21528     compiler.
21529
21530 These two reasons applied to almost any application that might have
21531been proposed for `#pragma'.  It was basically a mistake to use
21532`#pragma' for _anything_.
21533
21534 The ISO C99 standard includes `_Pragma', which now allows pragmas to
21535be generated from macros.  In addition, a `#pragma GCC' namespace is
21536now in use for GCC-specific pragmas.  However, it has been found
21537convenient to use `__attribute__' to achieve a natural attachment of
21538attributes to their corresponding declarations, whereas `#pragma GCC'
21539is of use for constructs that do not naturally form part of the
21540grammar.  *Note Miscellaneous Preprocessing Directives: (cpp)Other
21541Directives.
21542
21543
21544File: gcc.info,  Node: Attribute Syntax,  Next: Function Prototypes,  Prev: Function Attributes,  Up: C Extensions
21545
215466.31 Attribute Syntax
21547=====================
21548
21549This section describes the syntax with which `__attribute__' may be
21550used, and the constructs to which attribute specifiers bind, for the C
21551language.  Some details may vary for C++ and Objective-C.  Because of
21552infelicities in the grammar for attributes, some forms described here
21553may not be successfully parsed in all cases.
21554
21555 There are some problems with the semantics of attributes in C++.  For
21556example, there are no manglings for attributes, although they may affect
21557code generation, so problems may arise when attributed types are used in
21558conjunction with templates or overloading.  Similarly, `typeid' does
21559not distinguish between types with different attributes.  Support for
21560attributes in C++ may be restricted in future to attributes on
21561declarations only, but not on nested declarators.
21562
21563 *Note Function Attributes::, for details of the semantics of attributes
21564applying to functions.  *Note Variable Attributes::, for details of the
21565semantics of attributes applying to variables.  *Note Type Attributes::,
21566for details of the semantics of attributes applying to structure, union
21567and enumerated types.
21568
21569 An "attribute specifier" is of the form `__attribute__
21570((ATTRIBUTE-LIST))'.  An "attribute list" is a possibly empty
21571comma-separated sequence of "attributes", where each attribute is one
21572of the following:
21573
21574   * Empty.  Empty attributes are ignored.
21575
21576   * A word (which may be an identifier such as `unused', or a reserved
21577     word such as `const').
21578
21579   * A word, followed by, in parentheses, parameters for the attribute.
21580     These parameters take one of the following forms:
21581
21582        * An identifier.  For example, `mode' attributes use this form.
21583
21584        * An identifier followed by a comma and a non-empty
21585          comma-separated list of expressions.  For example, `format'
21586          attributes use this form.
21587
21588        * A possibly empty comma-separated list of expressions.  For
21589          example, `format_arg' attributes use this form with the list
21590          being a single integer constant expression, and `alias'
21591          attributes use this form with the list being a single string
21592          constant.
21593
21594 An "attribute specifier list" is a sequence of one or more attribute
21595specifiers, not separated by any other tokens.
21596
21597 In GNU C, an attribute specifier list may appear after the colon
21598following a label, other than a `case' or `default' label.  The only
21599attribute it makes sense to use after a label is `unused'.  This
21600feature is intended for code generated by programs which contains labels
21601that may be unused but which is compiled with `-Wall'.  It would not
21602normally be appropriate to use in it human-written code, though it
21603could be useful in cases where the code that jumps to the label is
21604contained within an `#ifdef' conditional.  GNU C++ only permits
21605attributes on labels if the attribute specifier is immediately followed
21606by a semicolon (i.e., the label applies to an empty statement).  If the
21607semicolon is missing, C++ label attributes are ambiguous, as it is
21608permissible for a declaration, which could begin with an attribute
21609list, to be labelled in C++.  Declarations cannot be labelled in C90 or
21610C99, so the ambiguity does not arise there.
21611
21612 An attribute specifier list may appear as part of a `struct', `union'
21613or `enum' specifier.  It may go either immediately after the `struct',
21614`union' or `enum' keyword, or after the closing brace.  The former
21615syntax is preferred.  Where attribute specifiers follow the closing
21616brace, they are considered to relate to the structure, union or
21617enumerated type defined, not to any enclosing declaration the type
21618specifier appears in, and the type defined is not complete until after
21619the attribute specifiers.
21620
21621 Otherwise, an attribute specifier appears as part of a declaration,
21622counting declarations of unnamed parameters and type names, and relates
21623to that declaration (which may be nested in another declaration, for
21624example in the case of a parameter declaration), or to a particular
21625declarator within a declaration.  Where an attribute specifier is
21626applied to a parameter declared as a function or an array, it should
21627apply to the function or array rather than the pointer to which the
21628parameter is implicitly converted, but this is not yet correctly
21629implemented.
21630
21631 Any list of specifiers and qualifiers at the start of a declaration may
21632contain attribute specifiers, whether or not such a list may in that
21633context contain storage class specifiers.  (Some attributes, however,
21634are essentially in the nature of storage class specifiers, and only make
21635sense where storage class specifiers may be used; for example,
21636`section'.)  There is one necessary limitation to this syntax: the
21637first old-style parameter declaration in a function definition cannot
21638begin with an attribute specifier, because such an attribute applies to
21639the function instead by syntax described below (which, however, is not
21640yet implemented in this case).  In some other cases, attribute
21641specifiers are permitted by this grammar but not yet supported by the
21642compiler.  All attribute specifiers in this place relate to the
21643declaration as a whole.  In the obsolescent usage where a type of `int'
21644is implied by the absence of type specifiers, such a list of specifiers
21645and qualifiers may be an attribute specifier list with no other
21646specifiers or qualifiers.
21647
21648 At present, the first parameter in a function prototype must have some
21649type specifier which is not an attribute specifier; this resolves an
21650ambiguity in the interpretation of `void f(int (__attribute__((foo))
21651x))', but is subject to change.  At present, if the parentheses of a
21652function declarator contain only attributes then those attributes are
21653ignored, rather than yielding an error or warning or implying a single
21654parameter of type int, but this is subject to change.
21655
21656 An attribute specifier list may appear immediately before a declarator
21657(other than the first) in a comma-separated list of declarators in a
21658declaration of more than one identifier using a single list of
21659specifiers and qualifiers.  Such attribute specifiers apply only to the
21660identifier before whose declarator they appear.  For example, in
21661
21662     __attribute__((noreturn)) void d0 (void),
21663         __attribute__((format(printf, 1, 2))) d1 (const char *, ...),
21664          d2 (void)
21665
21666the `noreturn' attribute applies to all the functions declared; the
21667`format' attribute only applies to `d1'.
21668
21669 An attribute specifier list may appear immediately before the comma,
21670`=' or semicolon terminating the declaration of an identifier other
21671than a function definition.  Such attribute specifiers apply to the
21672declared object or function.  Where an assembler name for an object or
21673function is specified (*note Asm Labels::), the attribute must follow
21674the `asm' specification.
21675
21676 An attribute specifier list may, in future, be permitted to appear
21677after the declarator in a function definition (before any old-style
21678parameter declarations or the function body).
21679
21680 Attribute specifiers may be mixed with type qualifiers appearing inside
21681the `[]' of a parameter array declarator, in the C99 construct by which
21682such qualifiers are applied to the pointer to which the array is
21683implicitly converted.  Such attribute specifiers apply to the pointer,
21684not to the array, but at present this is not implemented and they are
21685ignored.
21686
21687 An attribute specifier list may appear at the start of a nested
21688declarator.  At present, there are some limitations in this usage: the
21689attributes correctly apply to the declarator, but for most individual
21690attributes the semantics this implies are not implemented.  When
21691attribute specifiers follow the `*' of a pointer declarator, they may
21692be mixed with any type qualifiers present.  The following describes the
21693formal semantics of this syntax.  It will make the most sense if you
21694are familiar with the formal specification of declarators in the ISO C
21695standard.
21696
21697 Consider (as in C99 subclause 6.7.5 paragraph 4) a declaration `T D1',
21698where `T' contains declaration specifiers that specify a type TYPE
21699(such as `int') and `D1' is a declarator that contains an identifier
21700IDENT.  The type specified for IDENT for derived declarators whose type
21701does not include an attribute specifier is as in the ISO C standard.
21702
21703 If `D1' has the form `( ATTRIBUTE-SPECIFIER-LIST D )', and the
21704declaration `T D' specifies the type "DERIVED-DECLARATOR-TYPE-LIST
21705TYPE" for IDENT, then `T D1' specifies the type
21706"DERIVED-DECLARATOR-TYPE-LIST ATTRIBUTE-SPECIFIER-LIST TYPE" for IDENT.
21707
21708 If `D1' has the form `* TYPE-QUALIFIER-AND-ATTRIBUTE-SPECIFIER-LIST
21709D', and the declaration `T D' specifies the type
21710"DERIVED-DECLARATOR-TYPE-LIST TYPE" for IDENT, then `T D1' specifies
21711the type "DERIVED-DECLARATOR-TYPE-LIST
21712TYPE-QUALIFIER-AND-ATTRIBUTE-SPECIFIER-LIST pointer to TYPE" for IDENT.
21713
21714 For example,
21715
21716     void (__attribute__((noreturn)) ****f) (void);
21717
21718specifies the type "pointer to pointer to pointer to pointer to
21719non-returning function returning `void'".  As another example,
21720
21721     char *__attribute__((aligned(8))) *f;
21722
21723specifies the type "pointer to 8-byte-aligned pointer to `char'".  Note
21724again that this does not work with most attributes; for example, the
21725usage of `aligned' and `noreturn' attributes given above is not yet
21726supported.
21727
21728 For compatibility with existing code written for compiler versions that
21729did not implement attributes on nested declarators, some laxity is
21730allowed in the placing of attributes.  If an attribute that only applies
21731to types is applied to a declaration, it will be treated as applying to
21732the type of that declaration.  If an attribute that only applies to
21733declarations is applied to the type of a declaration, it will be treated
21734as applying to that declaration; and, for compatibility with code
21735placing the attributes immediately before the identifier declared, such
21736an attribute applied to a function return type will be treated as
21737applying to the function type, and such an attribute applied to an array
21738element type will be treated as applying to the array type.  If an
21739attribute that only applies to function types is applied to a
21740pointer-to-function type, it will be treated as applying to the pointer
21741target type; if such an attribute is applied to a function return type
21742that is not a pointer-to-function type, it will be treated as applying
21743to the function type.
21744
21745
21746File: gcc.info,  Node: Function Prototypes,  Next: C++ Comments,  Prev: Attribute Syntax,  Up: C Extensions
21747
217486.32 Prototypes and Old-Style Function Definitions
21749==================================================
21750
21751GNU C extends ISO C to allow a function prototype to override a later
21752old-style non-prototype definition.  Consider the following example:
21753
21754     /* Use prototypes unless the compiler is old-fashioned.  */
21755     #ifdef __STDC__
21756     #define P(x) x
21757     #else
21758     #define P(x) ()
21759     #endif
21760
21761     /* Prototype function declaration.  */
21762     int isroot P((uid_t));
21763
21764     /* Old-style function definition.  */
21765     int
21766     isroot (x)   /* ??? lossage here ??? */
21767          uid_t x;
21768     {
21769       return x == 0;
21770     }
21771
21772 Suppose the type `uid_t' happens to be `short'.  ISO C does not allow
21773this example, because subword arguments in old-style non-prototype
21774definitions are promoted.  Therefore in this example the function
21775definition's argument is really an `int', which does not match the
21776prototype argument type of `short'.
21777
21778 This restriction of ISO C makes it hard to write code that is portable
21779to traditional C compilers, because the programmer does not know
21780whether the `uid_t' type is `short', `int', or `long'.  Therefore, in
21781cases like these GNU C allows a prototype to override a later old-style
21782definition.  More precisely, in GNU C, a function prototype argument
21783type overrides the argument type specified by a later old-style
21784definition if the former type is the same as the latter type before
21785promotion.  Thus in GNU C the above example is equivalent to the
21786following:
21787
21788     int isroot (uid_t);
21789
21790     int
21791     isroot (uid_t x)
21792     {
21793       return x == 0;
21794     }
21795
21796GNU C++ does not support old-style function definitions, so this
21797extension is irrelevant.
21798
21799
21800File: gcc.info,  Node: C++ Comments,  Next: Dollar Signs,  Prev: Function Prototypes,  Up: C Extensions
21801
218026.33 C++ Style Comments
21803=======================
21804
21805In GNU C, you may use C++ style comments, which start with `//' and
21806continue until the end of the line.  Many other C implementations allow
21807such comments, and they are included in the 1999 C standard.  However,
21808C++ style comments are not recognized if you specify an `-std' option
21809specifying a version of ISO C before C99, or `-ansi' (equivalent to
21810`-std=c90').
21811
21812
21813File: gcc.info,  Node: Dollar Signs,  Next: Character Escapes,  Prev: C++ Comments,  Up: C Extensions
21814
218156.34 Dollar Signs in Identifier Names
21816=====================================
21817
21818In GNU C, you may normally use dollar signs in identifier names.  This
21819is because many traditional C implementations allow such identifiers.
21820However, dollar signs in identifiers are not supported on a few target
21821machines, typically because the target assembler does not allow them.
21822
21823
21824File: gcc.info,  Node: Character Escapes,  Next: Variable Attributes,  Prev: Dollar Signs,  Up: C Extensions
21825
218266.35 The Character <ESC> in Constants
21827=====================================
21828
21829You can use the sequence `\e' in a string or character constant to
21830stand for the ASCII character <ESC>.
21831
21832
21833File: gcc.info,  Node: Variable Attributes,  Next: Type Attributes,  Prev: Character Escapes,  Up: C Extensions
21834
218356.36 Specifying Attributes of Variables
21836=======================================
21837
21838The keyword `__attribute__' allows you to specify special attributes of
21839variables or structure fields.  This keyword is followed by an
21840attribute specification inside double parentheses.  Some attributes are
21841currently defined generically for variables.  Other attributes are
21842defined for variables on particular target systems.  Other attributes
21843are available for functions (*note Function Attributes::) and for types
21844(*note Type Attributes::).  Other front ends might define more
21845attributes (*note Extensions to the C++ Language: C++ Extensions.).
21846
21847 You may also specify attributes with `__' preceding and following each
21848keyword.  This allows you to use them in header files without being
21849concerned about a possible macro of the same name.  For example, you
21850may use `__aligned__' instead of `aligned'.
21851
21852 *Note Attribute Syntax::, for details of the exact syntax for using
21853attributes.
21854
21855`aligned (ALIGNMENT)'
21856     This attribute specifies a minimum alignment for the variable or
21857     structure field, measured in bytes.  For example, the declaration:
21858
21859          int x __attribute__ ((aligned (16))) = 0;
21860
21861     causes the compiler to allocate the global variable `x' on a
21862     16-byte boundary.  On a 68040, this could be used in conjunction
21863     with an `asm' expression to access the `move16' instruction which
21864     requires 16-byte aligned operands.
21865
21866     You can also specify the alignment of structure fields.  For
21867     example, to create a double-word aligned `int' pair, you could
21868     write:
21869
21870          struct foo { int x[2] __attribute__ ((aligned (8))); };
21871
21872     This is an alternative to creating a union with a `double' member
21873     that forces the union to be double-word aligned.
21874
21875     As in the preceding examples, you can explicitly specify the
21876     alignment (in bytes) that you wish the compiler to use for a given
21877     variable or structure field.  Alternatively, you can leave out the
21878     alignment factor and just ask the compiler to align a variable or
21879     field to the default alignment for the target architecture you are
21880     compiling for.  The default alignment is sufficient for all scalar
21881     types, but may not be enough for all vector types on a target
21882     which supports vector operations.  The default alignment is fixed
21883     for a particular target ABI.
21884
21885     Gcc also provides a target specific macro `__BIGGEST_ALIGNMENT__',
21886     which is the largest alignment ever used for any data type on the
21887     target machine you are compiling for.  For example, you could
21888     write:
21889
21890          short array[3] __attribute__ ((aligned (__BIGGEST_ALIGNMENT__)));
21891
21892     The compiler automatically sets the alignment for the declared
21893     variable or field to `__BIGGEST_ALIGNMENT__'.  Doing this can
21894     often make copy operations more efficient, because the compiler can
21895     use whatever instructions copy the biggest chunks of memory when
21896     performing copies to or from the variables or fields that you have
21897     aligned this way.  Note that the value of `__BIGGEST_ALIGNMENT__'
21898     may change depending on command line options.
21899
21900     When used on a struct, or struct member, the `aligned' attribute
21901     can only increase the alignment; in order to decrease it, the
21902     `packed' attribute must be specified as well.  When used as part
21903     of a typedef, the `aligned' attribute can both increase and
21904     decrease alignment, and specifying the `packed' attribute will
21905     generate a warning.
21906
21907     Note that the effectiveness of `aligned' attributes may be limited
21908     by inherent limitations in your linker.  On many systems, the
21909     linker is only able to arrange for variables to be aligned up to a
21910     certain maximum alignment.  (For some linkers, the maximum
21911     supported alignment may be very very small.)  If your linker is
21912     only able to align variables up to a maximum of 8 byte alignment,
21913     then specifying `aligned(16)' in an `__attribute__' will still
21914     only provide you with 8 byte alignment.  See your linker
21915     documentation for further information.
21916
21917     The `aligned' attribute can also be used for functions (*note
21918     Function Attributes::.)
21919
21920`cleanup (CLEANUP_FUNCTION)'
21921     The `cleanup' attribute runs a function when the variable goes out
21922     of scope.  This attribute can only be applied to auto function
21923     scope variables; it may not be applied to parameters or variables
21924     with static storage duration.  The function must take one
21925     parameter, a pointer to a type compatible with the variable.  The
21926     return value of the function (if any) is ignored.
21927
21928     If `-fexceptions' is enabled, then CLEANUP_FUNCTION will be run
21929     during the stack unwinding that happens during the processing of
21930     the exception.  Note that the `cleanup' attribute does not allow
21931     the exception to be caught, only to perform an action.  It is
21932     undefined what happens if CLEANUP_FUNCTION does not return
21933     normally.
21934
21935`common'
21936`nocommon'
21937     The `common' attribute requests GCC to place a variable in
21938     "common" storage.  The `nocommon' attribute requests the
21939     opposite--to allocate space for it directly.
21940
21941     These attributes override the default chosen by the `-fno-common'
21942     and `-fcommon' flags respectively.
21943
21944`deprecated'
21945`deprecated (MSG)'
21946     The `deprecated' attribute results in a warning if the variable is
21947     used anywhere in the source file.  This is useful when identifying
21948     variables that are expected to be removed in a future version of a
21949     program.  The warning also includes the location of the declaration
21950     of the deprecated variable, to enable users to easily find further
21951     information about why the variable is deprecated, or what they
21952     should do instead.  Note that the warning only occurs for uses:
21953
21954          extern int old_var __attribute__ ((deprecated));
21955          extern int old_var;
21956          int new_fn () { return old_var; }
21957
21958     results in a warning on line 3 but not line 2.  The optional msg
21959     argument, which must be a string, will be printed in the warning if
21960     present.
21961
21962     The `deprecated' attribute can also be used for functions and
21963     types (*note Function Attributes::, *note Type Attributes::.)
21964
21965`mode (MODE)'
21966     This attribute specifies the data type for the
21967     declaration--whichever type corresponds to the mode MODE.  This in
21968     effect lets you request an integer or floating point type
21969     according to its width.
21970
21971     You may also specify a mode of `byte' or `__byte__' to indicate
21972     the mode corresponding to a one-byte integer, `word' or `__word__'
21973     for the mode of a one-word integer, and `pointer' or `__pointer__'
21974     for the mode used to represent pointers.
21975
21976`packed'
21977     The `packed' attribute specifies that a variable or structure field
21978     should have the smallest possible alignment--one byte for a
21979     variable, and one bit for a field, unless you specify a larger
21980     value with the `aligned' attribute.
21981
21982     Here is a structure in which the field `x' is packed, so that it
21983     immediately follows `a':
21984
21985          struct foo
21986          {
21987            char a;
21988            int x[2] __attribute__ ((packed));
21989          };
21990
21991     _Note:_ The 4.1, 4.2 and 4.3 series of GCC ignore the `packed'
21992     attribute on bit-fields of type `char'.  This has been fixed in
21993     GCC 4.4 but the change can lead to differences in the structure
21994     layout.  See the documentation of `-Wpacked-bitfield-compat' for
21995     more information.
21996
21997`section ("SECTION-NAME")'
21998     Normally, the compiler places the objects it generates in sections
21999     like `data' and `bss'.  Sometimes, however, you need additional
22000     sections, or you need certain particular variables to appear in
22001     special sections, for example to map to special hardware.  The
22002     `section' attribute specifies that a variable (or function) lives
22003     in a particular section.  For example, this small program uses
22004     several specific section names:
22005
22006          struct duart a __attribute__ ((section ("DUART_A"))) = { 0 };
22007          struct duart b __attribute__ ((section ("DUART_B"))) = { 0 };
22008          char stack[10000] __attribute__ ((section ("STACK"))) = { 0 };
22009          int init_data __attribute__ ((section ("INITDATA")));
22010
22011          main()
22012          {
22013            /* Initialize stack pointer */
22014            init_sp (stack + sizeof (stack));
22015
22016            /* Initialize initialized data */
22017            memcpy (&init_data, &data, &edata - &data);
22018
22019            /* Turn on the serial ports */
22020            init_duart (&a);
22021            init_duart (&b);
22022          }
22023
22024     Use the `section' attribute with _global_ variables and not
22025     _local_ variables, as shown in the example.
22026
22027     You may use the `section' attribute with initialized or
22028     uninitialized global variables but the linker requires each object
22029     be defined once, with the exception that uninitialized variables
22030     tentatively go in the `common' (or `bss') section and can be
22031     multiply "defined".  Using the `section' attribute will change
22032     what section the variable goes into and may cause the linker to
22033     issue an error if an uninitialized variable has multiple
22034     definitions.  You can force a variable to be initialized with the
22035     `-fno-common' flag or the `nocommon' attribute.
22036
22037     Some file formats do not support arbitrary sections so the
22038     `section' attribute is not available on all platforms.  If you
22039     need to map the entire contents of a module to a particular
22040     section, consider using the facilities of the linker instead.
22041
22042`shared'
22043     On Microsoft Windows, in addition to putting variable definitions
22044     in a named section, the section can also be shared among all
22045     running copies of an executable or DLL.  For example, this small
22046     program defines shared data by putting it in a named section
22047     `shared' and marking the section shareable:
22048
22049          int foo __attribute__((section ("shared"), shared)) = 0;
22050
22051          int
22052          main()
22053          {
22054            /* Read and write foo.  All running
22055               copies see the same value.  */
22056            return 0;
22057          }
22058
22059     You may only use the `shared' attribute along with `section'
22060     attribute with a fully initialized global definition because of
22061     the way linkers work.  See `section' attribute for more
22062     information.
22063
22064     The `shared' attribute is only available on Microsoft Windows.
22065
22066`tls_model ("TLS_MODEL")'
22067     The `tls_model' attribute sets thread-local storage model (*note
22068     Thread-Local::) of a particular `__thread' variable, overriding
22069     `-ftls-model=' command-line switch on a per-variable basis.  The
22070     TLS_MODEL argument should be one of `global-dynamic',
22071     `local-dynamic', `initial-exec' or `local-exec'.
22072
22073     Not all targets support this attribute.
22074
22075`unused'
22076     This attribute, attached to a variable, means that the variable is
22077     meant to be possibly unused.  GCC will not produce a warning for
22078     this variable.
22079
22080`used'
22081     This attribute, attached to a variable, means that the variable
22082     must be emitted even if it appears that the variable is not
22083     referenced.
22084
22085`vector_size (BYTES)'
22086     This attribute specifies the vector size for the variable,
22087     measured in bytes.  For example, the declaration:
22088
22089          int foo __attribute__ ((vector_size (16)));
22090
22091     causes the compiler to set the mode for `foo', to be 16 bytes,
22092     divided into `int' sized units.  Assuming a 32-bit int (a vector of
22093     4 units of 4 bytes), the corresponding mode of `foo' will be V4SI.
22094
22095     This attribute is only applicable to integral and float scalars,
22096     although arrays, pointers, and function return values are allowed
22097     in conjunction with this construct.
22098
22099     Aggregates with this attribute are invalid, even if they are of
22100     the same size as a corresponding scalar.  For example, the
22101     declaration:
22102
22103          struct S { int a; };
22104          struct S  __attribute__ ((vector_size (16))) foo;
22105
22106     is invalid even if the size of the structure is the same as the
22107     size of the `int'.
22108
22109`selectany'
22110     The `selectany' attribute causes an initialized global variable to
22111     have link-once semantics.  When multiple definitions of the
22112     variable are encountered by the linker, the first is selected and
22113     the remainder are discarded.  Following usage by the Microsoft
22114     compiler, the linker is told _not_ to warn about size or content
22115     differences of the multiple definitions.
22116
22117     Although the primary usage of this attribute is for POD types, the
22118     attribute can also be applied to global C++ objects that are
22119     initialized by a constructor.  In this case, the static
22120     initialization and destruction code for the object is emitted in
22121     each translation defining the object, but the calls to the
22122     constructor and destructor are protected by a link-once guard
22123     variable.
22124
22125     The `selectany' attribute is only available on Microsoft Windows
22126     targets.  You can use `__declspec (selectany)' as a synonym for
22127     `__attribute__ ((selectany))' for compatibility with other
22128     compilers.
22129
22130`weak'
22131     The `weak' attribute is described in *note Function Attributes::.
22132
22133`dllimport'
22134     The `dllimport' attribute is described in *note Function
22135     Attributes::.
22136
22137`dllexport'
22138     The `dllexport' attribute is described in *note Function
22139     Attributes::.
22140
22141
221426.36.1 Blackfin Variable Attributes
22143-----------------------------------
22144
22145Three attributes are currently defined for the Blackfin.
22146
22147`l1_data'
22148`l1_data_A'
22149`l1_data_B'
22150     Use these attributes on the Blackfin to place the variable into L1
22151     Data SRAM.  Variables with `l1_data' attribute will be put into
22152     the specific section named `.l1.data'. Those with `l1_data_A'
22153     attribute will be put into the specific section named
22154     `.l1.data.A'. Those with `l1_data_B' attribute will be put into
22155     the specific section named `.l1.data.B'.
22156
22157`l2'
22158     Use this attribute on the Blackfin to place the variable into L2
22159     SRAM.  Variables with `l2' attribute will be put into the specific
22160     section named `.l2.data'.
22161
221626.36.2 M32R/D Variable Attributes
22163---------------------------------
22164
22165One attribute is currently defined for the M32R/D.
22166
22167`model (MODEL-NAME)'
22168     Use this attribute on the M32R/D to set the addressability of an
22169     object.  The identifier MODEL-NAME is one of `small', `medium', or
22170     `large', representing each of the code models.
22171
22172     Small model objects live in the lower 16MB of memory (so that their
22173     addresses can be loaded with the `ld24' instruction).
22174
22175     Medium and large model objects may live anywhere in the 32-bit
22176     address space (the compiler will generate `seth/add3' instructions
22177     to load their addresses).
22178
221796.36.3 MeP Variable Attributes
22180------------------------------
22181
22182The MeP target has a number of addressing modes and busses.  The `near'
22183space spans the standard memory space's first 16 megabytes (24 bits).
22184The `far' space spans the entire 32-bit memory space.  The `based'
22185space is a 128 byte region in the memory space which is addressed
22186relative to the `$tp' register.  The `tiny' space is a 65536 byte
22187region relative to the `$gp' register.  In addition to these memory
22188regions, the MeP target has a separate 16-bit control bus which is
22189specified with `cb' attributes.
22190
22191`based'
22192     Any variable with the `based' attribute will be assigned to the
22193     `.based' section, and will be accessed with relative to the `$tp'
22194     register.
22195
22196`tiny'
22197     Likewise, the `tiny' attribute assigned variables to the `.tiny'
22198     section, relative to the `$gp' register.
22199
22200`near'
22201     Variables with the `near' attribute are assumed to have addresses
22202     that fit in a 24-bit addressing mode.  This is the default for
22203     large variables (`-mtiny=4' is the default) but this attribute can
22204     override `-mtiny=' for small variables, or override `-ml'.
22205
22206`far'
22207     Variables with the `far' attribute are addressed using a full
22208     32-bit address.  Since this covers the entire memory space, this
22209     allows modules to make no assumptions about where variables might
22210     be stored.
22211
22212`io'
22213`io (ADDR)'
22214     Variables with the `io' attribute are used to address
22215     memory-mapped peripherals.  If an address is specified, the
22216     variable is assigned that address, else it is not assigned an
22217     address (it is assumed some other module will assign an address).
22218     Example:
22219
22220          int timer_count __attribute__((io(0x123)));
22221
22222`cb'
22223`cb (ADDR)'
22224     Variables with the `cb' attribute are used to access the control
22225     bus, using special instructions.  `addr' indicates the control bus
22226     address.  Example:
22227
22228          int cpu_clock __attribute__((cb(0x123)));
22229
22230
222316.36.4 i386 Variable Attributes
22232-------------------------------
22233
22234Two attributes are currently defined for i386 configurations:
22235`ms_struct' and `gcc_struct'
22236
22237`ms_struct'
22238`gcc_struct'
22239     If `packed' is used on a structure, or if bit-fields are used it
22240     may be that the Microsoft ABI packs them differently than GCC
22241     would normally pack them.  Particularly when moving packed data
22242     between functions compiled with GCC and the native Microsoft
22243     compiler (either via function call or as data in a file), it may
22244     be necessary to access either format.
22245
22246     Currently `-m[no-]ms-bitfields' is provided for the Microsoft
22247     Windows X86 compilers to match the native Microsoft compiler.
22248
22249     The Microsoft structure layout algorithm is fairly simple with the
22250     exception of the bitfield packing:
22251
22252     The padding and alignment of members of structures and whether a
22253     bit field can straddle a storage-unit boundary
22254
22255       1. Structure members are stored sequentially in the order in
22256          which they are declared: the first member has the lowest
22257          memory address and the last member the highest.
22258
22259       2. Every data object has an alignment-requirement. The
22260          alignment-requirement for all data except structures, unions,
22261          and arrays is either the size of the object or the current
22262          packing size (specified with either the aligned attribute or
22263          the pack pragma), whichever is less. For structures,  unions,
22264          and arrays, the alignment-requirement is the largest
22265          alignment-requirement of its members.  Every object is
22266          allocated an offset so that:
22267
22268          offset %  alignment-requirement == 0
22269
22270       3. Adjacent bit fields are packed into the same 1-, 2-, or
22271          4-byte allocation unit if the integral types are the same
22272          size and if the next bit field fits into the current
22273          allocation unit without crossing the boundary imposed by the
22274          common alignment requirements of the bit fields.
22275
22276     Handling of zero-length bitfields:
22277
22278     MSVC interprets zero-length bitfields in the following ways:
22279
22280       1. If a zero-length bitfield is inserted between two bitfields
22281          that would normally be coalesced, the bitfields will not be
22282          coalesced.
22283
22284          For example:
22285
22286               struct
22287                {
22288                  unsigned long bf_1 : 12;
22289                  unsigned long : 0;
22290                  unsigned long bf_2 : 12;
22291                } t1;
22292
22293          The size of `t1' would be 8 bytes with the zero-length
22294          bitfield.  If the zero-length bitfield were removed, `t1''s
22295          size would be 4 bytes.
22296
22297       2. If a zero-length bitfield is inserted after a bitfield,
22298          `foo', and the alignment of the zero-length bitfield is
22299          greater than the member that follows it, `bar', `bar' will be
22300          aligned as the type of the zero-length bitfield.
22301
22302          For example:
22303
22304               struct
22305                {
22306                  char foo : 4;
22307                  short : 0;
22308                  char bar;
22309                } t2;
22310
22311               struct
22312                {
22313                  char foo : 4;
22314                  short : 0;
22315                  double bar;
22316                } t3;
22317
22318          For `t2', `bar' will be placed at offset 2, rather than
22319          offset 1.  Accordingly, the size of `t2' will be 4.  For
22320          `t3', the zero-length bitfield will not affect the alignment
22321          of `bar' or, as a result, the size of the structure.
22322
22323          Taking this into account, it is important to note the
22324          following:
22325
22326            1. If a zero-length bitfield follows a normal bitfield, the
22327               type of the zero-length bitfield may affect the
22328               alignment of the structure as whole. For example, `t2'
22329               has a size of 4 bytes, since the zero-length bitfield
22330               follows a normal bitfield, and is of type short.
22331
22332            2. Even if a zero-length bitfield is not followed by a
22333               normal bitfield, it may still affect the alignment of
22334               the structure:
22335
22336                    struct
22337                     {
22338                       char foo : 6;
22339                       long : 0;
22340                     } t4;
22341
22342               Here, `t4' will take up 4 bytes.
22343
22344       3. Zero-length bitfields following non-bitfield members are
22345          ignored:
22346
22347               struct
22348                {
22349                  char foo;
22350                  long : 0;
22351                  char bar;
22352                } t5;
22353
22354          Here, `t5' will take up 2 bytes.
22355
223566.36.5 PowerPC Variable Attributes
22357----------------------------------
22358
22359Three attributes currently are defined for PowerPC configurations:
22360`altivec', `ms_struct' and `gcc_struct'.
22361
22362 For full documentation of the struct attributes please see the
22363documentation in *note i386 Variable Attributes::.
22364
22365 For documentation of `altivec' attribute please see the documentation
22366in *note PowerPC Type Attributes::.
22367
223686.36.6 SPU Variable Attributes
22369------------------------------
22370
22371The SPU supports the `spu_vector' attribute for variables.  For
22372documentation of this attribute please see the documentation in *note
22373SPU Type Attributes::.
22374
223756.36.7 Xstormy16 Variable Attributes
22376------------------------------------
22377
22378One attribute is currently defined for xstormy16 configurations:
22379`below100'.
22380
22381`below100'
22382     If a variable has the `below100' attribute (`BELOW100' is allowed
22383     also), GCC will place the variable in the first 0x100 bytes of
22384     memory and use special opcodes to access it.  Such variables will
22385     be placed in either the `.bss_below100' section or the
22386     `.data_below100' section.
22387
22388
223896.36.8 AVR Variable Attributes
22390------------------------------
22391
22392`progmem'
22393     The `progmem' attribute is used on the AVR to place data in the
22394     Program Memory address space. The AVR is a Harvard Architecture
22395     processor and data normally resides in the Data Memory address
22396     space.
22397
22398
22399File: gcc.info,  Node: Type Attributes,  Next: Alignment,  Prev: Variable Attributes,  Up: C Extensions
22400
224016.37 Specifying Attributes of Types
22402===================================
22403
22404The keyword `__attribute__' allows you to specify special attributes of
22405`struct' and `union' types when you define such types.  This keyword is
22406followed by an attribute specification inside double parentheses.
22407Seven attributes are currently defined for types: `aligned', `packed',
22408`transparent_union', `unused', `deprecated', `visibility', and
22409`may_alias'.  Other attributes are defined for functions (*note
22410Function Attributes::) and for variables (*note Variable Attributes::).
22411
22412 You may also specify any one of these attributes with `__' preceding
22413and following its keyword.  This allows you to use these attributes in
22414header files without being concerned about a possible macro of the same
22415name.  For example, you may use `__aligned__' instead of `aligned'.
22416
22417 You may specify type attributes in an enum, struct or union type
22418declaration or definition, or for other types in a `typedef'
22419declaration.
22420
22421 For an enum, struct or union type, you may specify attributes either
22422between the enum, struct or union tag and the name of the type, or just
22423past the closing curly brace of the _definition_.  The former syntax is
22424preferred.
22425
22426 *Note Attribute Syntax::, for details of the exact syntax for using
22427attributes.
22428
22429`aligned (ALIGNMENT)'
22430     This attribute specifies a minimum alignment (in bytes) for
22431     variables of the specified type.  For example, the declarations:
22432
22433          struct S { short f[3]; } __attribute__ ((aligned (8)));
22434          typedef int more_aligned_int __attribute__ ((aligned (8)));
22435
22436     force the compiler to insure (as far as it can) that each variable
22437     whose type is `struct S' or `more_aligned_int' will be allocated
22438     and aligned _at least_ on a 8-byte boundary.  On a SPARC, having
22439     all variables of type `struct S' aligned to 8-byte boundaries
22440     allows the compiler to use the `ldd' and `std' (doubleword load and
22441     store) instructions when copying one variable of type `struct S' to
22442     another, thus improving run-time efficiency.
22443
22444     Note that the alignment of any given `struct' or `union' type is
22445     required by the ISO C standard to be at least a perfect multiple of
22446     the lowest common multiple of the alignments of all of the members
22447     of the `struct' or `union' in question.  This means that you _can_
22448     effectively adjust the alignment of a `struct' or `union' type by
22449     attaching an `aligned' attribute to any one of the members of such
22450     a type, but the notation illustrated in the example above is a
22451     more obvious, intuitive, and readable way to request the compiler
22452     to adjust the alignment of an entire `struct' or `union' type.
22453
22454     As in the preceding example, you can explicitly specify the
22455     alignment (in bytes) that you wish the compiler to use for a given
22456     `struct' or `union' type.  Alternatively, you can leave out the
22457     alignment factor and just ask the compiler to align a type to the
22458     maximum useful alignment for the target machine you are compiling
22459     for.  For example, you could write:
22460
22461          struct S { short f[3]; } __attribute__ ((aligned));
22462
22463     Whenever you leave out the alignment factor in an `aligned'
22464     attribute specification, the compiler automatically sets the
22465     alignment for the type to the largest alignment which is ever used
22466     for any data type on the target machine you are compiling for.
22467     Doing this can often make copy operations more efficient, because
22468     the compiler can use whatever instructions copy the biggest chunks
22469     of memory when performing copies to or from the variables which
22470     have types that you have aligned this way.
22471
22472     In the example above, if the size of each `short' is 2 bytes, then
22473     the size of the entire `struct S' type is 6 bytes.  The smallest
22474     power of two which is greater than or equal to that is 8, so the
22475     compiler sets the alignment for the entire `struct S' type to 8
22476     bytes.
22477
22478     Note that although you can ask the compiler to select a
22479     time-efficient alignment for a given type and then declare only
22480     individual stand-alone objects of that type, the compiler's
22481     ability to select a time-efficient alignment is primarily useful
22482     only when you plan to create arrays of variables having the
22483     relevant (efficiently aligned) type.  If you declare or use arrays
22484     of variables of an efficiently-aligned type, then it is likely
22485     that your program will also be doing pointer arithmetic (or
22486     subscripting, which amounts to the same thing) on pointers to the
22487     relevant type, and the code that the compiler generates for these
22488     pointer arithmetic operations will often be more efficient for
22489     efficiently-aligned types than for other types.
22490
22491     The `aligned' attribute can only increase the alignment; but you
22492     can decrease it by specifying `packed' as well.  See below.
22493
22494     Note that the effectiveness of `aligned' attributes may be limited
22495     by inherent limitations in your linker.  On many systems, the
22496     linker is only able to arrange for variables to be aligned up to a
22497     certain maximum alignment.  (For some linkers, the maximum
22498     supported alignment may be very very small.)  If your linker is
22499     only able to align variables up to a maximum of 8 byte alignment,
22500     then specifying `aligned(16)' in an `__attribute__' will still
22501     only provide you with 8 byte alignment.  See your linker
22502     documentation for further information.
22503
22504`packed'
22505     This attribute, attached to `struct' or `union' type definition,
22506     specifies that each member (other than zero-width bitfields) of
22507     the structure or union is placed to minimize the memory required.
22508     When attached to an `enum' definition, it indicates that the
22509     smallest integral type should be used.
22510
22511     Specifying this attribute for `struct' and `union' types is
22512     equivalent to specifying the `packed' attribute on each of the
22513     structure or union members.  Specifying the `-fshort-enums' flag
22514     on the line is equivalent to specifying the `packed' attribute on
22515     all `enum' definitions.
22516
22517     In the following example `struct my_packed_struct''s members are
22518     packed closely together, but the internal layout of its `s' member
22519     is not packed--to do that, `struct my_unpacked_struct' would need
22520     to be packed too.
22521
22522          struct my_unpacked_struct
22523           {
22524              char c;
22525              int i;
22526           };
22527
22528          struct __attribute__ ((__packed__)) my_packed_struct
22529            {
22530               char c;
22531               int  i;
22532               struct my_unpacked_struct s;
22533            };
22534
22535     You may only specify this attribute on the definition of an `enum',
22536     `struct' or `union', not on a `typedef' which does not also define
22537     the enumerated type, structure or union.
22538
22539`transparent_union'
22540     This attribute, attached to a `union' type definition, indicates
22541     that any function parameter having that union type causes calls to
22542     that function to be treated in a special way.
22543
22544     First, the argument corresponding to a transparent union type can
22545     be of any type in the union; no cast is required.  Also, if the
22546     union contains a pointer type, the corresponding argument can be a
22547     null pointer constant or a void pointer expression; and if the
22548     union contains a void pointer type, the corresponding argument can
22549     be any pointer expression.  If the union member type is a pointer,
22550     qualifiers like `const' on the referenced type must be respected,
22551     just as with normal pointer conversions.
22552
22553     Second, the argument is passed to the function using the calling
22554     conventions of the first member of the transparent union, not the
22555     calling conventions of the union itself.  All members of the union
22556     must have the same machine representation; this is necessary for
22557     this argument passing to work properly.
22558
22559     Transparent unions are designed for library functions that have
22560     multiple interfaces for compatibility reasons.  For example,
22561     suppose the `wait' function must accept either a value of type
22562     `int *' to comply with Posix, or a value of type `union wait *' to
22563     comply with the 4.1BSD interface.  If `wait''s parameter were
22564     `void *', `wait' would accept both kinds of arguments, but it
22565     would also accept any other pointer type and this would make
22566     argument type checking less useful.  Instead, `<sys/wait.h>' might
22567     define the interface as follows:
22568
22569          typedef union __attribute__ ((__transparent_union__))
22570            {
22571              int *__ip;
22572              union wait *__up;
22573            } wait_status_ptr_t;
22574
22575          pid_t wait (wait_status_ptr_t);
22576
22577     This interface allows either `int *' or `union wait *' arguments
22578     to be passed, using the `int *' calling convention.  The program
22579     can call `wait' with arguments of either type:
22580
22581          int w1 () { int w; return wait (&w); }
22582          int w2 () { union wait w; return wait (&w); }
22583
22584     With this interface, `wait''s implementation might look like this:
22585
22586          pid_t wait (wait_status_ptr_t p)
22587          {
22588            return waitpid (-1, p.__ip, 0);
22589          }
22590
22591`unused'
22592     When attached to a type (including a `union' or a `struct'), this
22593     attribute means that variables of that type are meant to appear
22594     possibly unused.  GCC will not produce a warning for any variables
22595     of that type, even if the variable appears to do nothing.  This is
22596     often the case with lock or thread classes, which are usually
22597     defined and then not referenced, but contain constructors and
22598     destructors that have nontrivial bookkeeping functions.
22599
22600`deprecated'
22601`deprecated (MSG)'
22602     The `deprecated' attribute results in a warning if the type is
22603     used anywhere in the source file.  This is useful when identifying
22604     types that are expected to be removed in a future version of a
22605     program.  If possible, the warning also includes the location of
22606     the declaration of the deprecated type, to enable users to easily
22607     find further information about why the type is deprecated, or what
22608     they should do instead.  Note that the warnings only occur for
22609     uses and then only if the type is being applied to an identifier
22610     that itself is not being declared as deprecated.
22611
22612          typedef int T1 __attribute__ ((deprecated));
22613          T1 x;
22614          typedef T1 T2;
22615          T2 y;
22616          typedef T1 T3 __attribute__ ((deprecated));
22617          T3 z __attribute__ ((deprecated));
22618
22619     results in a warning on line 2 and 3 but not lines 4, 5, or 6.  No
22620     warning is issued for line 4 because T2 is not explicitly
22621     deprecated.  Line 5 has no warning because T3 is explicitly
22622     deprecated.  Similarly for line 6.  The optional msg argument,
22623     which must be a string, will be printed in the warning if present.
22624
22625     The `deprecated' attribute can also be used for functions and
22626     variables (*note Function Attributes::, *note Variable
22627     Attributes::.)
22628
22629`may_alias'
22630     Accesses through pointers to types with this attribute are not
22631     subject to type-based alias analysis, but are instead assumed to
22632     be able to alias any other type of objects.  In the context of
22633     6.5/7 an lvalue expression dereferencing such a pointer is treated
22634     like having a character type.  See `-fstrict-aliasing' for more
22635     information on aliasing issues.  This extension exists to support
22636     some vector APIs, in which pointers to one vector type are
22637     permitted to alias pointers to a different vector type.
22638
22639     Note that an object of a type with this attribute does not have any
22640     special semantics.
22641
22642     Example of use:
22643
22644          typedef short __attribute__((__may_alias__)) short_a;
22645
22646          int
22647          main (void)
22648          {
22649            int a = 0x12345678;
22650            short_a *b = (short_a *) &a;
22651
22652            b[1] = 0;
22653
22654            if (a == 0x12345678)
22655              abort();
22656
22657            exit(0);
22658          }
22659
22660     If you replaced `short_a' with `short' in the variable
22661     declaration, the above program would abort when compiled with
22662     `-fstrict-aliasing', which is on by default at `-O2' or above in
22663     recent GCC versions.
22664
22665`visibility'
22666     In C++, attribute visibility (*note Function Attributes::) can
22667     also be applied to class, struct, union and enum types.  Unlike
22668     other type attributes, the attribute must appear between the
22669     initial keyword and the name of the type; it cannot appear after
22670     the body of the type.
22671
22672     Note that the type visibility is applied to vague linkage entities
22673     associated with the class (vtable, typeinfo node, etc.).  In
22674     particular, if a class is thrown as an exception in one shared
22675     object and caught in another, the class must have default
22676     visibility.  Otherwise the two shared objects will be unable to
22677     use the same typeinfo node and exception handling will break.
22678
22679
226806.37.1 ARM Type Attributes
22681--------------------------
22682
22683On those ARM targets that support `dllimport' (such as Symbian OS), you
22684can use the `notshared' attribute to indicate that the virtual table
22685and other similar data for a class should not be exported from a DLL.
22686For example:
22687
22688     class __declspec(notshared) C {
22689     public:
22690       __declspec(dllimport) C();
22691       virtual void f();
22692     }
22693
22694     __declspec(dllexport)
22695     C::C() {}
22696
22697 In this code, `C::C' is exported from the current DLL, but the virtual
22698table for `C' is not exported.  (You can use `__attribute__' instead of
22699`__declspec' if you prefer, but most Symbian OS code uses `__declspec'.)
22700
227016.37.2 MeP Type Attributes
22702--------------------------
22703
22704Many of the MeP variable attributes may be applied to types as well.
22705Specifically, the `based', `tiny', `near', and `far' attributes may be
22706applied to either.  The `io' and `cb' attributes may not be applied to
22707types.
22708
227096.37.3 i386 Type Attributes
22710---------------------------
22711
22712Two attributes are currently defined for i386 configurations:
22713`ms_struct' and `gcc_struct'.
22714
22715`ms_struct'
22716`gcc_struct'
22717     If `packed' is used on a structure, or if bit-fields are used it
22718     may be that the Microsoft ABI packs them differently than GCC
22719     would normally pack them.  Particularly when moving packed data
22720     between functions compiled with GCC and the native Microsoft
22721     compiler (either via function call or as data in a file), it may
22722     be necessary to access either format.
22723
22724     Currently `-m[no-]ms-bitfields' is provided for the Microsoft
22725     Windows X86 compilers to match the native Microsoft compiler.
22726
22727 To specify multiple attributes, separate them by commas within the
22728double parentheses: for example, `__attribute__ ((aligned (16),
22729packed))'.
22730
227316.37.4 PowerPC Type Attributes
22732------------------------------
22733
22734Three attributes currently are defined for PowerPC configurations:
22735`altivec', `ms_struct' and `gcc_struct'.
22736
22737 For full documentation of the `ms_struct' and `gcc_struct' attributes
22738please see the documentation in *note i386 Type Attributes::.
22739
22740 The `altivec' attribute allows one to declare AltiVec vector data
22741types supported by the AltiVec Programming Interface Manual.  The
22742attribute requires an argument to specify one of three vector types:
22743`vector__', `pixel__' (always followed by unsigned short), and `bool__'
22744(always followed by unsigned).
22745
22746     __attribute__((altivec(vector__)))
22747     __attribute__((altivec(pixel__))) unsigned short
22748     __attribute__((altivec(bool__))) unsigned
22749
22750 These attributes mainly are intended to support the `__vector',
22751`__pixel', and `__bool' AltiVec keywords.
22752
227536.37.5 SPU Type Attributes
22754--------------------------
22755
22756The SPU supports the `spu_vector' attribute for types.  This attribute
22757allows one to declare vector data types supported by the
22758Sony/Toshiba/IBM SPU Language Extensions Specification.  It is intended
22759to support the `__vector' keyword.
22760
22761
22762File: gcc.info,  Node: Alignment,  Next: Inline,  Prev: Type Attributes,  Up: C Extensions
22763
227646.38 Inquiring on Alignment of Types or Variables
22765=================================================
22766
22767The keyword `__alignof__' allows you to inquire about how an object is
22768aligned, or the minimum alignment usually required by a type.  Its
22769syntax is just like `sizeof'.
22770
22771 For example, if the target machine requires a `double' value to be
22772aligned on an 8-byte boundary, then `__alignof__ (double)' is 8.  This
22773is true on many RISC machines.  On more traditional machine designs,
22774`__alignof__ (double)' is 4 or even 2.
22775
22776 Some machines never actually require alignment; they allow reference
22777to any data type even at an odd address.  For these machines,
22778`__alignof__' reports the smallest alignment that GCC will give the
22779data type, usually as mandated by the target ABI.
22780
22781 If the operand of `__alignof__' is an lvalue rather than a type, its
22782value is the required alignment for its type, taking into account any
22783minimum alignment specified with GCC's `__attribute__' extension (*note
22784Variable Attributes::).  For example, after this declaration:
22785
22786     struct foo { int x; char y; } foo1;
22787
22788the value of `__alignof__ (foo1.y)' is 1, even though its actual
22789alignment is probably 2 or 4, the same as `__alignof__ (int)'.
22790
22791 It is an error to ask for the alignment of an incomplete type.
22792
22793
22794File: gcc.info,  Node: Inline,  Next: Volatiles,  Prev: Alignment,  Up: C Extensions
22795
227966.39 An Inline Function is As Fast As a Macro
22797=============================================
22798
22799By declaring a function inline, you can direct GCC to make calls to
22800that function faster.  One way GCC can achieve this is to integrate
22801that function's code into the code for its callers.  This makes
22802execution faster by eliminating the function-call overhead; in
22803addition, if any of the actual argument values are constant, their
22804known values may permit simplifications at compile time so that not all
22805of the inline function's code needs to be included.  The effect on code
22806size is less predictable; object code may be larger or smaller with
22807function inlining, depending on the particular case.  You can also
22808direct GCC to try to integrate all "simple enough" functions into their
22809callers with the option `-finline-functions'.
22810
22811 GCC implements three different semantics of declaring a function
22812inline.  One is available with `-std=gnu89' or `-fgnu89-inline' or when
22813`gnu_inline' attribute is present on all inline declarations, another
22814when `-std=c99', `-std=c1x', `-std=gnu99' or `-std=gnu1x' (without
22815`-fgnu89-inline'), and the third is used when compiling C++.
22816
22817 To declare a function inline, use the `inline' keyword in its
22818declaration, like this:
22819
22820     static inline int
22821     inc (int *a)
22822     {
22823       return (*a)++;
22824     }
22825
22826 If you are writing a header file to be included in ISO C90 programs,
22827write `__inline__' instead of `inline'.  *Note Alternate Keywords::.
22828
22829 The three types of inlining behave similarly in two important cases:
22830when the `inline' keyword is used on a `static' function, like the
22831example above, and when a function is first declared without using the
22832`inline' keyword and then is defined with `inline', like this:
22833
22834     extern int inc (int *a);
22835     inline int
22836     inc (int *a)
22837     {
22838       return (*a)++;
22839     }
22840
22841 In both of these common cases, the program behaves the same as if you
22842had not used the `inline' keyword, except for its speed.
22843
22844 When a function is both inline and `static', if all calls to the
22845function are integrated into the caller, and the function's address is
22846never used, then the function's own assembler code is never referenced.
22847In this case, GCC does not actually output assembler code for the
22848function, unless you specify the option `-fkeep-inline-functions'.
22849Some calls cannot be integrated for various reasons (in particular,
22850calls that precede the function's definition cannot be integrated, and
22851neither can recursive calls within the definition).  If there is a
22852nonintegrated call, then the function is compiled to assembler code as
22853usual.  The function must also be compiled as usual if the program
22854refers to its address, because that can't be inlined.
22855
22856 Note that certain usages in a function definition can make it
22857unsuitable for inline substitution.  Among these usages are: use of
22858varargs, use of alloca, use of variable sized data types (*note
22859Variable Length::), use of computed goto (*note Labels as Values::),
22860use of nonlocal goto, and nested functions (*note Nested Functions::).
22861Using `-Winline' will warn when a function marked `inline' could not be
22862substituted, and will give the reason for the failure.
22863
22864 As required by ISO C++, GCC considers member functions defined within
22865the body of a class to be marked inline even if they are not explicitly
22866declared with the `inline' keyword.  You can override this with
22867`-fno-default-inline'; *note Options Controlling C++ Dialect: C++
22868Dialect Options.
22869
22870 GCC does not inline any functions when not optimizing unless you
22871specify the `always_inline' attribute for the function, like this:
22872
22873     /* Prototype.  */
22874     inline void foo (const char) __attribute__((always_inline));
22875
22876 The remainder of this section is specific to GNU C90 inlining.
22877
22878 When an inline function is not `static', then the compiler must assume
22879that there may be calls from other source files; since a global symbol
22880can be defined only once in any program, the function must not be
22881defined in the other source files, so the calls therein cannot be
22882integrated.  Therefore, a non-`static' inline function is always
22883compiled on its own in the usual fashion.
22884
22885 If you specify both `inline' and `extern' in the function definition,
22886then the definition is used only for inlining.  In no case is the
22887function compiled on its own, not even if you refer to its address
22888explicitly.  Such an address becomes an external reference, as if you
22889had only declared the function, and had not defined it.
22890
22891 This combination of `inline' and `extern' has almost the effect of a
22892macro.  The way to use it is to put a function definition in a header
22893file with these keywords, and put another copy of the definition
22894(lacking `inline' and `extern') in a library file.  The definition in
22895the header file will cause most calls to the function to be inlined.
22896If any uses of the function remain, they will refer to the single copy
22897in the library.
22898
22899
22900File: gcc.info,  Node: Volatiles,  Next: Extended Asm,  Prev: Inline,  Up: C Extensions
22901
229026.40 When is a Volatile Object Accessed?
22903========================================
22904
22905C has the concept of volatile objects.  These are normally accessed by
22906pointers and used for accessing hardware or inter-thread communication.
22907The standard encourages compilers to refrain from optimizations
22908concerning accesses to volatile objects, but leaves it implementation
22909defined as to what constitutes a volatile access.  The minimum
22910requirement is that at a sequence point all previous accesses to
22911volatile objects have stabilized and no subsequent accesses have
22912occurred.  Thus an implementation is free to reorder and combine
22913volatile accesses which occur between sequence points, but cannot do so
22914for accesses across a sequence point.  The use of volatile does not
22915allow you to violate the restriction on updating objects multiple times
22916between two sequence points.
22917
22918 Accesses to non-volatile objects are not ordered with respect to
22919volatile accesses.  You cannot use a volatile object as a memory
22920barrier to order a sequence of writes to non-volatile memory.  For
22921instance:
22922
22923     int *ptr = SOMETHING;
22924     volatile int vobj;
22925     *ptr = SOMETHING;
22926     vobj = 1;
22927
22928 Unless *PTR and VOBJ can be aliased, it is not guaranteed that the
22929write to *PTR will have occurred by the time the update of VOBJ has
22930happened.  If you need this guarantee, you must use a stronger memory
22931barrier such as:
22932
22933     int *ptr = SOMETHING;
22934     volatile int vobj;
22935     *ptr = SOMETHING;
22936     asm volatile ("" : : : "memory");
22937     vobj = 1;
22938
22939 A scalar volatile object is read when it is accessed in a void context:
22940
22941     volatile int *src = SOMEVALUE;
22942     *src;
22943
22944 Such expressions are rvalues, and GCC implements this as a read of the
22945volatile object being pointed to.
22946
22947 Assignments are also expressions and have an rvalue.  However when
22948assigning to a scalar volatile, the volatile object is not reread,
22949regardless of whether the assignment expression's rvalue is used or
22950not.  If the assignment's rvalue is used, the value is that assigned to
22951the volatile object.  For instance, there is no read of VOBJ in all the
22952following cases:
22953
22954     int obj;
22955     volatile int vobj;
22956     vobj = SOMETHING;
22957     obj = vobj = SOMETHING;
22958     obj ? vobj = ONETHING : vobj = ANOTHERTHING;
22959     obj = (SOMETHING, vobj = ANOTHERTHING);
22960
22961 If you need to read the volatile object after an assignment has
22962occurred, you must use a separate expression with an intervening
22963sequence point.
22964
22965 As bitfields are not individually addressable, volatile bitfields may
22966be implicitly read when written to, or when adjacent bitfields are
22967accessed.  Bitfield operations may be optimized such that adjacent
22968bitfields are only partially accessed, if they straddle a storage unit
22969boundary.  For these reasons it is unwise to use volatile bitfields to
22970access hardware.
22971
22972
22973File: gcc.info,  Node: Extended Asm,  Next: Constraints,  Prev: Volatiles,  Up: C Extensions
22974
229756.41 Assembler Instructions with C Expression Operands
22976======================================================
22977
22978In an assembler instruction using `asm', you can specify the operands
22979of the instruction using C expressions.  This means you need not guess
22980which registers or memory locations will contain the data you want to
22981use.
22982
22983 You must specify an assembler instruction template much like what
22984appears in a machine description, plus an operand constraint string for
22985each operand.
22986
22987 For example, here is how to use the 68881's `fsinx' instruction:
22988
22989     asm ("fsinx %1,%0" : "=f" (result) : "f" (angle));
22990
22991Here `angle' is the C expression for the input operand while `result'
22992is that of the output operand.  Each has `"f"' as its operand
22993constraint, saying that a floating point register is required.  The `='
22994in `=f' indicates that the operand is an output; all output operands'
22995constraints must use `='.  The constraints use the same language used
22996in the machine description (*note Constraints::).
22997
22998 Each operand is described by an operand-constraint string followed by
22999the C expression in parentheses.  A colon separates the assembler
23000template from the first output operand and another separates the last
23001output operand from the first input, if any.  Commas separate the
23002operands within each group.  The total number of operands is currently
23003limited to 30; this limitation may be lifted in some future version of
23004GCC.
23005
23006 If there are no output operands but there are input operands, you must
23007place two consecutive colons surrounding the place where the output
23008operands would go.
23009
23010 As of GCC version 3.1, it is also possible to specify input and output
23011operands using symbolic names which can be referenced within the
23012assembler code.  These names are specified inside square brackets
23013preceding the constraint string, and can be referenced inside the
23014assembler code using `%[NAME]' instead of a percentage sign followed by
23015the operand number.  Using named operands the above example could look
23016like:
23017
23018     asm ("fsinx %[angle],%[output]"
23019          : [output] "=f" (result)
23020          : [angle] "f" (angle));
23021
23022Note that the symbolic operand names have no relation whatsoever to
23023other C identifiers.  You may use any name you like, even those of
23024existing C symbols, but you must ensure that no two operands within the
23025same assembler construct use the same symbolic name.
23026
23027 Output operand expressions must be lvalues; the compiler can check
23028this.  The input operands need not be lvalues.  The compiler cannot
23029check whether the operands have data types that are reasonable for the
23030instruction being executed.  It does not parse the assembler instruction
23031template and does not know what it means or even whether it is valid
23032assembler input.  The extended `asm' feature is most often used for
23033machine instructions the compiler itself does not know exist.  If the
23034output expression cannot be directly addressed (for example, it is a
23035bit-field), your constraint must allow a register.  In that case, GCC
23036will use the register as the output of the `asm', and then store that
23037register into the output.
23038
23039 The ordinary output operands must be write-only; GCC will assume that
23040the values in these operands before the instruction are dead and need
23041not be generated.  Extended asm supports input-output or read-write
23042operands.  Use the constraint character `+' to indicate such an operand
23043and list it with the output operands.  You should only use read-write
23044operands when the constraints for the operand (or the operand in which
23045only some of the bits are to be changed) allow a register.
23046
23047 You may, as an alternative, logically split its function into two
23048separate operands, one input operand and one write-only output operand.
23049The connection between them is expressed by constraints which say they
23050need to be in the same location when the instruction executes.  You can
23051use the same C expression for both operands, or different expressions.
23052For example, here we write the (fictitious) `combine' instruction with
23053`bar' as its read-only source operand and `foo' as its read-write
23054destination:
23055
23056     asm ("combine %2,%0" : "=r" (foo) : "0" (foo), "g" (bar));
23057
23058The constraint `"0"' for operand 1 says that it must occupy the same
23059location as operand 0.  A number in constraint is allowed only in an
23060input operand and it must refer to an output operand.
23061
23062 Only a number in the constraint can guarantee that one operand will be
23063in the same place as another.  The mere fact that `foo' is the value of
23064both operands is not enough to guarantee that they will be in the same
23065place in the generated assembler code.  The following would not work
23066reliably:
23067
23068     asm ("combine %2,%0" : "=r" (foo) : "r" (foo), "g" (bar));
23069
23070 Various optimizations or reloading could cause operands 0 and 1 to be
23071in different registers; GCC knows no reason not to do so.  For example,
23072the compiler might find a copy of the value of `foo' in one register and
23073use it for operand 1, but generate the output operand 0 in a different
23074register (copying it afterward to `foo''s own address).  Of course,
23075since the register for operand 1 is not even mentioned in the assembler
23076code, the result will not work, but GCC can't tell that.
23077
23078 As of GCC version 3.1, one may write `[NAME]' instead of the operand
23079number for a matching constraint.  For example:
23080
23081     asm ("cmoveq %1,%2,%[result]"
23082          : [result] "=r"(result)
23083          : "r" (test), "r"(new), "[result]"(old));
23084
23085 Sometimes you need to make an `asm' operand be a specific register,
23086but there's no matching constraint letter for that register _by
23087itself_.  To force the operand into that register, use a local variable
23088for the operand and specify the register in the variable declaration.
23089*Note Explicit Reg Vars::.  Then for the `asm' operand, use any
23090register constraint letter that matches the register:
23091
23092     register int *p1 asm ("r0") = ...;
23093     register int *p2 asm ("r1") = ...;
23094     register int *result asm ("r0");
23095     asm ("sysint" : "=r" (result) : "0" (p1), "r" (p2));
23096
23097 In the above example, beware that a register that is call-clobbered by
23098the target ABI will be overwritten by any function call in the
23099assignment, including library calls for arithmetic operators.  Also a
23100register may be clobbered when generating some operations, like
23101variable shift, memory copy or memory move on x86.  Assuming it is a
23102call-clobbered register, this may happen to `r0' above by the
23103assignment to `p2'.  If you have to use such a register, use temporary
23104variables for expressions between the register assignment and use:
23105
23106     int t1 = ...;
23107     register int *p1 asm ("r0") = ...;
23108     register int *p2 asm ("r1") = t1;
23109     register int *result asm ("r0");
23110     asm ("sysint" : "=r" (result) : "0" (p1), "r" (p2));
23111
23112 Some instructions clobber specific hard registers.  To describe this,
23113write a third colon after the input operands, followed by the names of
23114the clobbered hard registers (given as strings).  Here is a realistic
23115example for the VAX:
23116
23117     asm volatile ("movc3 %0,%1,%2"
23118                   : /* no outputs */
23119                   : "g" (from), "g" (to), "g" (count)
23120                   : "r0", "r1", "r2", "r3", "r4", "r5");
23121
23122 You may not write a clobber description in a way that overlaps with an
23123input or output operand.  For example, you may not have an operand
23124describing a register class with one member if you mention that register
23125in the clobber list.  Variables declared to live in specific registers
23126(*note Explicit Reg Vars::), and used as asm input or output operands
23127must have no part mentioned in the clobber description.  There is no
23128way for you to specify that an input operand is modified without also
23129specifying it as an output operand.  Note that if all the output
23130operands you specify are for this purpose (and hence unused), you will
23131then also need to specify `volatile' for the `asm' construct, as
23132described below, to prevent GCC from deleting the `asm' statement as
23133unused.
23134
23135 If you refer to a particular hardware register from the assembler code,
23136you will probably have to list the register after the third colon to
23137tell the compiler the register's value is modified.  In some assemblers,
23138the register names begin with `%'; to produce one `%' in the assembler
23139code, you must write `%%' in the input.
23140
23141 If your assembler instruction can alter the condition code register,
23142add `cc' to the list of clobbered registers.  GCC on some machines
23143represents the condition codes as a specific hardware register; `cc'
23144serves to name this register.  On other machines, the condition code is
23145handled differently, and specifying `cc' has no effect.  But it is
23146valid no matter what the machine.
23147
23148 If your assembler instructions access memory in an unpredictable
23149fashion, add `memory' to the list of clobbered registers.  This will
23150cause GCC to not keep memory values cached in registers across the
23151assembler instruction and not optimize stores or loads to that memory.
23152You will also want to add the `volatile' keyword if the memory affected
23153is not listed in the inputs or outputs of the `asm', as the `memory'
23154clobber does not count as a side-effect of the `asm'.  If you know how
23155large the accessed memory is, you can add it as input or output but if
23156this is not known, you should add `memory'.  As an example, if you
23157access ten bytes of a string, you can use a memory input like:
23158
23159     {"m"( ({ struct { char x[10]; } *p = (void *)ptr ; *p; }) )}.
23160
23161 Note that in the following example the memory input is necessary,
23162otherwise GCC might optimize the store to `x' away:
23163     int foo ()
23164     {
23165       int x = 42;
23166       int *y = &x;
23167       int result;
23168       asm ("magic stuff accessing an 'int' pointed to by '%1'"
23169             "=&d" (r) : "a" (y), "m" (*y));
23170       return result;
23171     }
23172
23173 You can put multiple assembler instructions together in a single `asm'
23174template, separated by the characters normally used in assembly code
23175for the system.  A combination that works in most places is a newline
23176to break the line, plus a tab character to move to the instruction field
23177(written as `\n\t').  Sometimes semicolons can be used, if the
23178assembler allows semicolons as a line-breaking character.  Note that
23179some assembler dialects use semicolons to start a comment.  The input
23180operands are guaranteed not to use any of the clobbered registers, and
23181neither will the output operands' addresses, so you can read and write
23182the clobbered registers as many times as you like.  Here is an example
23183of multiple instructions in a template; it assumes the subroutine
23184`_foo' accepts arguments in registers 9 and 10:
23185
23186     asm ("movl %0,r9\n\tmovl %1,r10\n\tcall _foo"
23187          : /* no outputs */
23188          : "g" (from), "g" (to)
23189          : "r9", "r10");
23190
23191 Unless an output operand has the `&' constraint modifier, GCC may
23192allocate it in the same register as an unrelated input operand, on the
23193assumption the inputs are consumed before the outputs are produced.
23194This assumption may be false if the assembler code actually consists of
23195more than one instruction.  In such a case, use `&' for each output
23196operand that may not overlap an input.  *Note Modifiers::.
23197
23198 If you want to test the condition code produced by an assembler
23199instruction, you must include a branch and a label in the `asm'
23200construct, as follows:
23201
23202     asm ("clr %0\n\tfrob %1\n\tbeq 0f\n\tmov #1,%0\n0:"
23203          : "g" (result)
23204          : "g" (input));
23205
23206This assumes your assembler supports local labels, as the GNU assembler
23207and most Unix assemblers do.
23208
23209 Speaking of labels, jumps from one `asm' to another are not supported.
23210The compiler's optimizers do not know about these jumps, and therefore
23211they cannot take account of them when deciding how to optimize.  *Note
23212Extended asm with goto::.
23213
23214 Usually the most convenient way to use these `asm' instructions is to
23215encapsulate them in macros that look like functions.  For example,
23216
23217     #define sin(x)       \
23218     ({ double __value, __arg = (x);   \
23219        asm ("fsinx %1,%0": "=f" (__value): "f" (__arg));  \
23220        __value; })
23221
23222Here the variable `__arg' is used to make sure that the instruction
23223operates on a proper `double' value, and to accept only those arguments
23224`x' which can convert automatically to a `double'.
23225
23226 Another way to make sure the instruction operates on the correct data
23227type is to use a cast in the `asm'.  This is different from using a
23228variable `__arg' in that it converts more different types.  For
23229example, if the desired type were `int', casting the argument to `int'
23230would accept a pointer with no complaint, while assigning the argument
23231to an `int' variable named `__arg' would warn about using a pointer
23232unless the caller explicitly casts it.
23233
23234 If an `asm' has output operands, GCC assumes for optimization purposes
23235the instruction has no side effects except to change the output
23236operands.  This does not mean instructions with a side effect cannot be
23237used, but you must be careful, because the compiler may eliminate them
23238if the output operands aren't used, or move them out of loops, or
23239replace two with one if they constitute a common subexpression.  Also,
23240if your instruction does have a side effect on a variable that otherwise
23241appears not to change, the old value of the variable may be reused later
23242if it happens to be found in a register.
23243
23244 You can prevent an `asm' instruction from being deleted by writing the
23245keyword `volatile' after the `asm'.  For example:
23246
23247     #define get_and_set_priority(new)              \
23248     ({ int __old;                                  \
23249        asm volatile ("get_and_set_priority %0, %1" \
23250                      : "=g" (__old) : "g" (new));  \
23251        __old; })
23252
23253The `volatile' keyword indicates that the instruction has important
23254side-effects.  GCC will not delete a volatile `asm' if it is reachable.
23255(The instruction can still be deleted if GCC can prove that
23256control-flow will never reach the location of the instruction.)  Note
23257that even a volatile `asm' instruction can be moved relative to other
23258code, including across jump instructions.  For example, on many targets
23259there is a system register which can be set to control the rounding
23260mode of floating point operations.  You might try setting it with a
23261volatile `asm', like this PowerPC example:
23262
23263            asm volatile("mtfsf 255,%0" : : "f" (fpenv));
23264            sum = x + y;
23265
23266This will not work reliably, as the compiler may move the addition back
23267before the volatile `asm'.  To make it work you need to add an
23268artificial dependency to the `asm' referencing a variable in the code
23269you don't want moved, for example:
23270
23271         asm volatile ("mtfsf 255,%1" : "=X"(sum): "f"(fpenv));
23272         sum = x + y;
23273
23274 Similarly, you can't expect a sequence of volatile `asm' instructions
23275to remain perfectly consecutive.  If you want consecutive output, use a
23276single `asm'.  Also, GCC will perform some optimizations across a
23277volatile `asm' instruction; GCC does not "forget everything" when it
23278encounters a volatile `asm' instruction the way some other compilers do.
23279
23280 An `asm' instruction without any output operands will be treated
23281identically to a volatile `asm' instruction.
23282
23283 It is a natural idea to look for a way to give access to the condition
23284code left by the assembler instruction.  However, when we attempted to
23285implement this, we found no way to make it work reliably.  The problem
23286is that output operands might need reloading, which would result in
23287additional following "store" instructions.  On most machines, these
23288instructions would alter the condition code before there was time to
23289test it.  This problem doesn't arise for ordinary "test" and "compare"
23290instructions because they don't have any output operands.
23291
23292 For reasons similar to those described above, it is not possible to
23293give an assembler instruction access to the condition code left by
23294previous instructions.
23295
23296 As of GCC version 4.5, `asm goto' may be used to have the assembly
23297jump to one or more C labels.  In this form, a fifth section after the
23298clobber list contains a list of all C labels to which the assembly may
23299jump.  Each label operand is implicitly self-named.  The `asm' is also
23300assumed to fall through to the next statement.
23301
23302 This form of `asm' is restricted to not have outputs.  This is due to
23303a internal restriction in the compiler that control transfer
23304instructions cannot have outputs.  This restriction on `asm goto' may
23305be lifted in some future version of the compiler.  In the mean time,
23306`asm goto' may include a memory clobber, and so leave outputs in memory.
23307
23308     int frob(int x)
23309     {
23310       int y;
23311       asm goto ("frob %%r5, %1; jc %l[error]; mov (%2), %%r5"
23312                 : : "r"(x), "r"(&y) : "r5", "memory" : error);
23313       return y;
23314      error:
23315       return -1;
23316     }
23317
23318 In this (inefficient) example, the `frob' instruction sets the carry
23319bit to indicate an error.  The `jc' instruction detects this and
23320branches to the `error' label.  Finally, the output of the `frob'
23321instruction (`%r5') is stored into the memory for variable `y', which
23322is later read by the `return' statement.
23323
23324     void doit(void)
23325     {
23326       int i = 0;
23327       asm goto ("mfsr %%r1, 123; jmp %%r1;"
23328                 ".pushsection doit_table;"
23329                 ".long %l0, %l1, %l2, %l3;"
23330                 ".popsection"
23331                 : : : "r1" : label1, label2, label3, label4);
23332       __builtin_unreachable ();
23333
23334      label1:
23335       f1();
23336       return;
23337      label2:
23338       f2();
23339       return;
23340      label3:
23341       i = 1;
23342      label4:
23343       f3(i);
23344     }
23345
23346 In this (also inefficient) example, the `mfsr' instruction reads an
23347address from some out-of-band machine register, and the following `jmp'
23348instruction branches to that address.  The address read by the `mfsr'
23349instruction is assumed to have been previously set via some
23350application-specific mechanism to be one of the four values stored in
23351the `doit_table' section.  Finally, the `asm' is followed by a call to
23352`__builtin_unreachable' to indicate that the `asm' does not in fact
23353fall through.
23354
23355     #define TRACE1(NUM)                         \
23356       do {                                      \
23357         asm goto ("0: nop;"                     \
23358                   ".pushsection trace_table;"   \
23359                   ".long 0b, %l0;"              \
23360                   ".popsection"                 \
23361                   : : : : trace#NUM);           \
23362         if (0) { trace#NUM: trace(); }          \
23363       } while (0)
23364     #define TRACE  TRACE1(__COUNTER__)
23365
23366 In this example (which in fact inspired the `asm goto' feature) we
23367want on rare occasions to call the `trace' function; on other occasions
23368we'd like to keep the overhead to the absolute minimum.  The normal
23369code path consists of a single `nop' instruction.  However, we record
23370the address of this `nop' together with the address of a label that
23371calls the `trace' function.  This allows the `nop' instruction to be
23372patched at runtime to be an unconditional branch to the stored label.
23373It is assumed that an optimizing compiler will move the labeled block
23374out of line, to optimize the fall through path from the `asm'.
23375
23376 If you are writing a header file that should be includable in ISO C
23377programs, write `__asm__' instead of `asm'.  *Note Alternate Keywords::.
23378
233796.41.1 Size of an `asm'
23380-----------------------
23381
23382Some targets require that GCC track the size of each instruction used in
23383order to generate correct code.  Because the final length of an `asm'
23384is only known by the assembler, GCC must make an estimate as to how big
23385it will be.  The estimate is formed by counting the number of
23386statements in the pattern of the `asm' and multiplying that by the
23387length of the longest instruction on that processor.  Statements in the
23388`asm' are identified by newline characters and whatever statement
23389separator characters are supported by the assembler; on most processors
23390this is the ``;'' character.
23391
23392 Normally, GCC's estimate is perfectly adequate to ensure that correct
23393code is generated, but it is possible to confuse the compiler if you use
23394pseudo instructions or assembler macros that expand into multiple real
23395instructions or if you use assembler directives that expand to more
23396space in the object file than would be needed for a single instruction.
23397If this happens then the assembler will produce a diagnostic saying that
23398a label is unreachable.
23399
234006.41.2 i386 floating point asm operands
23401---------------------------------------
23402
23403There are several rules on the usage of stack-like regs in asm_operands
23404insns.  These rules apply only to the operands that are stack-like regs:
23405
23406  1. Given a set of input regs that die in an asm_operands, it is
23407     necessary to know which are implicitly popped by the asm, and
23408     which must be explicitly popped by gcc.
23409
23410     An input reg that is implicitly popped by the asm must be
23411     explicitly clobbered, unless it is constrained to match an output
23412     operand.
23413
23414  2. For any input reg that is implicitly popped by an asm, it is
23415     necessary to know how to adjust the stack to compensate for the
23416     pop.  If any non-popped input is closer to the top of the
23417     reg-stack than the implicitly popped reg, it would not be possible
23418     to know what the stack looked like--it's not clear how the rest of
23419     the stack "slides up".
23420
23421     All implicitly popped input regs must be closer to the top of the
23422     reg-stack than any input that is not implicitly popped.
23423
23424     It is possible that if an input dies in an insn, reload might use
23425     the input reg for an output reload.  Consider this example:
23426
23427          asm ("foo" : "=t" (a) : "f" (b));
23428
23429     This asm says that input B is not popped by the asm, and that the
23430     asm pushes a result onto the reg-stack, i.e., the stack is one
23431     deeper after the asm than it was before.  But, it is possible that
23432     reload will think that it can use the same reg for both the input
23433     and the output, if input B dies in this insn.
23434
23435     If any input operand uses the `f' constraint, all output reg
23436     constraints must use the `&' earlyclobber.
23437
23438     The asm above would be written as
23439
23440          asm ("foo" : "=&t" (a) : "f" (b));
23441
23442  3. Some operands need to be in particular places on the stack.  All
23443     output operands fall in this category--there is no other way to
23444     know which regs the outputs appear in unless the user indicates
23445     this in the constraints.
23446
23447     Output operands must specifically indicate which reg an output
23448     appears in after an asm.  `=f' is not allowed: the operand
23449     constraints must select a class with a single reg.
23450
23451  4. Output operands may not be "inserted" between existing stack regs.
23452     Since no 387 opcode uses a read/write operand, all output operands
23453     are dead before the asm_operands, and are pushed by the
23454     asm_operands.  It makes no sense to push anywhere but the top of
23455     the reg-stack.
23456
23457     Output operands must start at the top of the reg-stack: output
23458     operands may not "skip" a reg.
23459
23460  5. Some asm statements may need extra stack space for internal
23461     calculations.  This can be guaranteed by clobbering stack registers
23462     unrelated to the inputs and outputs.
23463
23464
23465 Here are a couple of reasonable asms to want to write.  This asm takes
23466one input, which is internally popped, and produces two outputs.
23467
23468     asm ("fsincos" : "=t" (cos), "=u" (sin) : "0" (inp));
23469
23470 This asm takes two inputs, which are popped by the `fyl2xp1' opcode,
23471and replaces them with one output.  The user must code the `st(1)'
23472clobber for reg-stack.c to know that `fyl2xp1' pops both inputs.
23473
23474     asm ("fyl2xp1" : "=t" (result) : "0" (x), "u" (y) : "st(1)");
23475
23476
23477File: gcc.info,  Node: Constraints,  Next: Asm Labels,  Prev: Extended Asm,  Up: C Extensions
23478
234796.42 Constraints for `asm' Operands
23480===================================
23481
23482Here are specific details on what constraint letters you can use with
23483`asm' operands.  Constraints can say whether an operand may be in a
23484register, and which kinds of register; whether the operand can be a
23485memory reference, and which kinds of address; whether the operand may
23486be an immediate constant, and which possible values it may have.
23487Constraints can also require two operands to match.  Side-effects
23488aren't allowed in operands of inline `asm', unless `<' or `>'
23489constraints are used, because there is no guarantee that the
23490side-effects will happen exactly once in an instruction that can update
23491the addressing register.
23492
23493* Menu:
23494
23495* Simple Constraints::  Basic use of constraints.
23496* Multi-Alternative::   When an insn has two alternative constraint-patterns.
23497* Modifiers::           More precise control over effects of constraints.
23498* Machine Constraints:: Special constraints for some particular machines.
23499
23500
23501File: gcc.info,  Node: Simple Constraints,  Next: Multi-Alternative,  Up: Constraints
23502
235036.42.1 Simple Constraints
23504-------------------------
23505
23506The simplest kind of constraint is a string full of letters, each of
23507which describes one kind of operand that is permitted.  Here are the
23508letters that are allowed:
23509
23510whitespace
23511     Whitespace characters are ignored and can be inserted at any
23512     position except the first.  This enables each alternative for
23513     different operands to be visually aligned in the machine
23514     description even if they have different number of constraints and
23515     modifiers.
23516
23517`m'
23518     A memory operand is allowed, with any kind of address that the
23519     machine supports in general.  Note that the letter used for the
23520     general memory constraint can be re-defined by a back end using
23521     the `TARGET_MEM_CONSTRAINT' macro.
23522
23523`o'
23524     A memory operand is allowed, but only if the address is
23525     "offsettable".  This means that adding a small integer (actually,
23526     the width in bytes of the operand, as determined by its machine
23527     mode) may be added to the address and the result is also a valid
23528     memory address.
23529
23530     For example, an address which is constant is offsettable; so is an
23531     address that is the sum of a register and a constant (as long as a
23532     slightly larger constant is also within the range of
23533     address-offsets supported by the machine); but an autoincrement or
23534     autodecrement address is not offsettable.  More complicated
23535     indirect/indexed addresses may or may not be offsettable depending
23536     on the other addressing modes that the machine supports.
23537
23538     Note that in an output operand which can be matched by another
23539     operand, the constraint letter `o' is valid only when accompanied
23540     by both `<' (if the target machine has predecrement addressing)
23541     and `>' (if the target machine has preincrement addressing).
23542
23543`V'
23544     A memory operand that is not offsettable.  In other words,
23545     anything that would fit the `m' constraint but not the `o'
23546     constraint.
23547
23548`<'
23549     A memory operand with autodecrement addressing (either
23550     predecrement or postdecrement) is allowed.  In inline `asm' this
23551     constraint is only allowed if the operand is used exactly once in
23552     an instruction that can handle the side-effects.  Not using an
23553     operand with `<' in constraint string in the inline `asm' pattern
23554     at all or using it in multiple instructions isn't valid, because
23555     the side-effects wouldn't be performed or would be performed more
23556     than once.  Furthermore, on some targets the operand with `<' in
23557     constraint string must be accompanied by special instruction
23558     suffixes like `%U0' instruction suffix on PowerPC or `%P0' on
23559     IA-64.
23560
23561`>'
23562     A memory operand with autoincrement addressing (either
23563     preincrement or postincrement) is allowed.  In inline `asm' the
23564     same restrictions as for `<' apply.
23565
23566`r'
23567     A register operand is allowed provided that it is in a general
23568     register.
23569
23570`i'
23571     An immediate integer operand (one with constant value) is allowed.
23572     This includes symbolic constants whose values will be known only at
23573     assembly time or later.
23574
23575`n'
23576     An immediate integer operand with a known numeric value is allowed.
23577     Many systems cannot support assembly-time constants for operands
23578     less than a word wide.  Constraints for these operands should use
23579     `n' rather than `i'.
23580
23581`I', `J', `K', ... `P'
23582     Other letters in the range `I' through `P' may be defined in a
23583     machine-dependent fashion to permit immediate integer operands with
23584     explicit integer values in specified ranges.  For example, on the
23585     68000, `I' is defined to stand for the range of values 1 to 8.
23586     This is the range permitted as a shift count in the shift
23587     instructions.
23588
23589`E'
23590     An immediate floating operand (expression code `const_double') is
23591     allowed, but only if the target floating point format is the same
23592     as that of the host machine (on which the compiler is running).
23593
23594`F'
23595     An immediate floating operand (expression code `const_double' or
23596     `const_vector') is allowed.
23597
23598`G', `H'
23599     `G' and `H' may be defined in a machine-dependent fashion to
23600     permit immediate floating operands in particular ranges of values.
23601
23602`s'
23603     An immediate integer operand whose value is not an explicit
23604     integer is allowed.
23605
23606     This might appear strange; if an insn allows a constant operand
23607     with a value not known at compile time, it certainly must allow
23608     any known value.  So why use `s' instead of `i'?  Sometimes it
23609     allows better code to be generated.
23610
23611     For example, on the 68000 in a fullword instruction it is possible
23612     to use an immediate operand; but if the immediate value is between
23613     -128 and 127, better code results from loading the value into a
23614     register and using the register.  This is because the load into
23615     the register can be done with a `moveq' instruction.  We arrange
23616     for this to happen by defining the letter `K' to mean "any integer
23617     outside the range -128 to 127", and then specifying `Ks' in the
23618     operand constraints.
23619
23620`g'
23621     Any register, memory or immediate integer operand is allowed,
23622     except for registers that are not general registers.
23623
23624`X'
23625     Any operand whatsoever is allowed.
23626
23627`0', `1', `2', ... `9'
23628     An operand that matches the specified operand number is allowed.
23629     If a digit is used together with letters within the same
23630     alternative, the digit should come last.
23631
23632     This number is allowed to be more than a single digit.  If multiple
23633     digits are encountered consecutively, they are interpreted as a
23634     single decimal integer.  There is scant chance for ambiguity,
23635     since to-date it has never been desirable that `10' be interpreted
23636     as matching either operand 1 _or_ operand 0.  Should this be
23637     desired, one can use multiple alternatives instead.
23638
23639     This is called a "matching constraint" and what it really means is
23640     that the assembler has only a single operand that fills two roles
23641     which `asm' distinguishes.  For example, an add instruction uses
23642     two input operands and an output operand, but on most CISC
23643     machines an add instruction really has only two operands, one of
23644     them an input-output operand:
23645
23646          addl #35,r12
23647
23648     Matching constraints are used in these circumstances.  More
23649     precisely, the two operands that match must include one input-only
23650     operand and one output-only operand.  Moreover, the digit must be a
23651     smaller number than the number of the operand that uses it in the
23652     constraint.
23653
23654`p'
23655     An operand that is a valid memory address is allowed.  This is for
23656     "load address" and "push address" instructions.
23657
23658     `p' in the constraint must be accompanied by `address_operand' as
23659     the predicate in the `match_operand'.  This predicate interprets
23660     the mode specified in the `match_operand' as the mode of the memory
23661     reference for which the address would be valid.
23662
23663OTHER-LETTERS
23664     Other letters can be defined in machine-dependent fashion to stand
23665     for particular classes of registers or other arbitrary operand
23666     types.  `d', `a' and `f' are defined on the 68000/68020 to stand
23667     for data, address and floating point registers.
23668
23669
23670File: gcc.info,  Node: Multi-Alternative,  Next: Modifiers,  Prev: Simple Constraints,  Up: Constraints
23671
236726.42.2 Multiple Alternative Constraints
23673---------------------------------------
23674
23675Sometimes a single instruction has multiple alternative sets of possible
23676operands.  For example, on the 68000, a logical-or instruction can
23677combine register or an immediate value into memory, or it can combine
23678any kind of operand into a register; but it cannot combine one memory
23679location into another.
23680
23681 These constraints are represented as multiple alternatives.  An
23682alternative can be described by a series of letters for each operand.
23683The overall constraint for an operand is made from the letters for this
23684operand from the first alternative, a comma, the letters for this
23685operand from the second alternative, a comma, and so on until the last
23686alternative.
23687
23688 If all the operands fit any one alternative, the instruction is valid.
23689Otherwise, for each alternative, the compiler counts how many
23690instructions must be added to copy the operands so that that
23691alternative applies.  The alternative requiring the least copying is
23692chosen.  If two alternatives need the same amount of copying, the one
23693that comes first is chosen.  These choices can be altered with the `?'
23694and `!' characters:
23695
23696`?'
23697     Disparage slightly the alternative that the `?' appears in, as a
23698     choice when no alternative applies exactly.  The compiler regards
23699     this alternative as one unit more costly for each `?' that appears
23700     in it.
23701
23702`!'
23703     Disparage severely the alternative that the `!' appears in.  This
23704     alternative can still be used if it fits without reloading, but if
23705     reloading is needed, some other alternative will be used.
23706
23707
23708File: gcc.info,  Node: Modifiers,  Next: Machine Constraints,  Prev: Multi-Alternative,  Up: Constraints
23709
237106.42.3 Constraint Modifier Characters
23711-------------------------------------
23712
23713Here are constraint modifier characters.
23714
23715`='
23716     Means that this operand is write-only for this instruction: the
23717     previous value is discarded and replaced by output data.
23718
23719`+'
23720     Means that this operand is both read and written by the
23721     instruction.
23722
23723     When the compiler fixes up the operands to satisfy the constraints,
23724     it needs to know which operands are inputs to the instruction and
23725     which are outputs from it.  `=' identifies an output; `+'
23726     identifies an operand that is both input and output; all other
23727     operands are assumed to be input only.
23728
23729     If you specify `=' or `+' in a constraint, you put it in the first
23730     character of the constraint string.
23731
23732`&'
23733     Means (in a particular alternative) that this operand is an
23734     "earlyclobber" operand, which is modified before the instruction is
23735     finished using the input operands.  Therefore, this operand may
23736     not lie in a register that is used as an input operand or as part
23737     of any memory address.
23738
23739     `&' applies only to the alternative in which it is written.  In
23740     constraints with multiple alternatives, sometimes one alternative
23741     requires `&' while others do not.  See, for example, the `movdf'
23742     insn of the 68000.
23743
23744     An input operand can be tied to an earlyclobber operand if its only
23745     use as an input occurs before the early result is written.  Adding
23746     alternatives of this form often allows GCC to produce better code
23747     when only some of the inputs can be affected by the earlyclobber.
23748     See, for example, the `mulsi3' insn of the ARM.
23749
23750     `&' does not obviate the need to write `='.
23751
23752`%'
23753     Declares the instruction to be commutative for this operand and the
23754     following operand.  This means that the compiler may interchange
23755     the two operands if that is the cheapest way to make all operands
23756     fit the constraints.  GCC can only handle one commutative pair in
23757     an asm; if you use more, the compiler may fail.  Note that you
23758     need not use the modifier if the two alternatives are strictly
23759     identical; this would only waste time in the reload pass.  The
23760     modifier is not operational after register allocation, so the
23761     result of `define_peephole2' and `define_split's performed after
23762     reload cannot rely on `%' to make the intended insn match.
23763
23764`#'
23765     Says that all following characters, up to the next comma, are to be
23766     ignored as a constraint.  They are significant only for choosing
23767     register preferences.
23768
23769`*'
23770     Says that the following character should be ignored when choosing
23771     register preferences.  `*' has no effect on the meaning of the
23772     constraint as a constraint, and no effect on reloading.
23773
23774
23775
23776File: gcc.info,  Node: Machine Constraints,  Prev: Modifiers,  Up: Constraints
23777
237786.42.4 Constraints for Particular Machines
23779------------------------------------------
23780
23781Whenever possible, you should use the general-purpose constraint letters
23782in `asm' arguments, since they will convey meaning more readily to
23783people reading your code.  Failing that, use the constraint letters
23784that usually have very similar meanings across architectures.  The most
23785commonly used constraints are `m' and `r' (for memory and
23786general-purpose registers respectively; *note Simple Constraints::), and
23787`I', usually the letter indicating the most common immediate-constant
23788format.
23789
23790 Each architecture defines additional constraints.  These constraints
23791are used by the compiler itself for instruction generation, as well as
23792for `asm' statements; therefore, some of the constraints are not
23793particularly useful for `asm'.  Here is a summary of some of the
23794machine-dependent constraints available on some particular machines; it
23795includes both constraints that are useful for `asm' and constraints
23796that aren't.  The compiler source file mentioned in the table heading
23797for each architecture is the definitive reference for the meanings of
23798that architecture's constraints.
23799
23800_ARM family--`config/arm/arm.h'_
23801
23802    `f'
23803          Floating-point register
23804
23805    `w'
23806          VFP floating-point register
23807
23808    `F'
23809          One of the floating-point constants 0.0, 0.5, 1.0, 2.0, 3.0,
23810          4.0, 5.0 or 10.0
23811
23812    `G'
23813          Floating-point constant that would satisfy the constraint `F'
23814          if it were negated
23815
23816    `I'
23817          Integer that is valid as an immediate operand in a data
23818          processing instruction.  That is, an integer in the range 0
23819          to 255 rotated by a multiple of 2
23820
23821    `J'
23822          Integer in the range -4095 to 4095
23823
23824    `K'
23825          Integer that satisfies constraint `I' when inverted (ones
23826          complement)
23827
23828    `L'
23829          Integer that satisfies constraint `I' when negated (twos
23830          complement)
23831
23832    `M'
23833          Integer in the range 0 to 32
23834
23835    `Q'
23836          A memory reference where the exact address is in a single
23837          register (``m'' is preferable for `asm' statements)
23838
23839    `R'
23840          An item in the constant pool
23841
23842    `S'
23843          A symbol in the text segment of the current file
23844
23845    `Uv'
23846          A memory reference suitable for VFP load/store insns
23847          (reg+constant offset)
23848
23849    `Uy'
23850          A memory reference suitable for iWMMXt load/store
23851          instructions.
23852
23853    `Uq'
23854          A memory reference suitable for the ARMv4 ldrsb instruction.
23855
23856_AVR family--`config/avr/constraints.md'_
23857
23858    `l'
23859          Registers from r0 to r15
23860
23861    `a'
23862          Registers from r16 to r23
23863
23864    `d'
23865          Registers from r16 to r31
23866
23867    `w'
23868          Registers from r24 to r31.  These registers can be used in
23869          `adiw' command
23870
23871    `e'
23872          Pointer register (r26-r31)
23873
23874    `b'
23875          Base pointer register (r28-r31)
23876
23877    `q'
23878          Stack pointer register (SPH:SPL)
23879
23880    `t'
23881          Temporary register r0
23882
23883    `x'
23884          Register pair X (r27:r26)
23885
23886    `y'
23887          Register pair Y (r29:r28)
23888
23889    `z'
23890          Register pair Z (r31:r30)
23891
23892    `I'
23893          Constant greater than -1, less than 64
23894
23895    `J'
23896          Constant greater than -64, less than 1
23897
23898    `K'
23899          Constant integer 2
23900
23901    `L'
23902          Constant integer 0
23903
23904    `M'
23905          Constant that fits in 8 bits
23906
23907    `N'
23908          Constant integer -1
23909
23910    `O'
23911          Constant integer 8, 16, or 24
23912
23913    `P'
23914          Constant integer 1
23915
23916    `G'
23917          A floating point constant 0.0
23918
23919    `R'
23920          Integer constant in the range -6 ... 5.
23921
23922    `Q'
23923          A memory address based on Y or Z pointer with displacement.
23924
23925_CRX Architecture--`config/crx/crx.h'_
23926
23927    `b'
23928          Registers from r0 to r14 (registers without stack pointer)
23929
23930    `l'
23931          Register r16 (64-bit accumulator lo register)
23932
23933    `h'
23934          Register r17 (64-bit accumulator hi register)
23935
23936    `k'
23937          Register pair r16-r17. (64-bit accumulator lo-hi pair)
23938
23939    `I'
23940          Constant that fits in 3 bits
23941
23942    `J'
23943          Constant that fits in 4 bits
23944
23945    `K'
23946          Constant that fits in 5 bits
23947
23948    `L'
23949          Constant that is one of -1, 4, -4, 7, 8, 12, 16, 20, 32, 48
23950
23951    `G'
23952          Floating point constant that is legal for store immediate
23953
23954_Hewlett-Packard PA-RISC--`config/pa/pa.h'_
23955
23956    `a'
23957          General register 1
23958
23959    `f'
23960          Floating point register
23961
23962    `q'
23963          Shift amount register
23964
23965    `x'
23966          Floating point register (deprecated)
23967
23968    `y'
23969          Upper floating point register (32-bit), floating point
23970          register (64-bit)
23971
23972    `Z'
23973          Any register
23974
23975    `I'
23976          Signed 11-bit integer constant
23977
23978    `J'
23979          Signed 14-bit integer constant
23980
23981    `K'
23982          Integer constant that can be deposited with a `zdepi'
23983          instruction
23984
23985    `L'
23986          Signed 5-bit integer constant
23987
23988    `M'
23989          Integer constant 0
23990
23991    `N'
23992          Integer constant that can be loaded with a `ldil' instruction
23993
23994    `O'
23995          Integer constant whose value plus one is a power of 2
23996
23997    `P'
23998          Integer constant that can be used for `and' operations in
23999          `depi' and `extru' instructions
24000
24001    `S'
24002          Integer constant 31
24003
24004    `U'
24005          Integer constant 63
24006
24007    `G'
24008          Floating-point constant 0.0
24009
24010    `A'
24011          A `lo_sum' data-linkage-table memory operand
24012
24013    `Q'
24014          A memory operand that can be used as the destination operand
24015          of an integer store instruction
24016
24017    `R'
24018          A scaled or unscaled indexed memory operand
24019
24020    `T'
24021          A memory operand for floating-point loads and stores
24022
24023    `W'
24024          A register indirect memory operand
24025
24026_picoChip family--`picochip.h'_
24027
24028    `k'
24029          Stack register.
24030
24031    `f'
24032          Pointer register.  A register which can be used to access
24033          memory without supplying an offset.  Any other register can
24034          be used to access memory, but will need a constant offset.
24035          In the case of the offset being zero, it is more efficient to
24036          use a pointer register, since this reduces code size.
24037
24038    `t'
24039          A twin register.  A register which may be paired with an
24040          adjacent register to create a 32-bit register.
24041
24042    `a'
24043          Any absolute memory address (e.g., symbolic constant, symbolic
24044          constant + offset).
24045
24046    `I'
24047          4-bit signed integer.
24048
24049    `J'
24050          4-bit unsigned integer.
24051
24052    `K'
24053          8-bit signed integer.
24054
24055    `M'
24056          Any constant whose absolute value is no greater than 4-bits.
24057
24058    `N'
24059          10-bit signed integer
24060
24061    `O'
24062          16-bit signed integer.
24063
24064
24065_PowerPC and IBM RS6000--`config/rs6000/rs6000.h'_
24066
24067    `b'
24068          Address base register
24069
24070    `d'
24071          Floating point register (containing 64-bit value)
24072
24073    `f'
24074          Floating point register (containing 32-bit value)
24075
24076    `v'
24077          Altivec vector register
24078
24079    `wd'
24080          VSX vector register to hold vector double data
24081
24082    `wf'
24083          VSX vector register to hold vector float data
24084
24085    `ws'
24086          VSX vector register to hold scalar float data
24087
24088    `wa'
24089          Any VSX register
24090
24091    `h'
24092          `MQ', `CTR', or `LINK' register
24093
24094    `q'
24095          `MQ' register
24096
24097    `c'
24098          `CTR' register
24099
24100    `l'
24101          `LINK' register
24102
24103    `x'
24104          `CR' register (condition register) number 0
24105
24106    `y'
24107          `CR' register (condition register)
24108
24109    `z'
24110          `XER[CA]' carry bit (part of the XER register)
24111
24112    `I'
24113          Signed 16-bit constant
24114
24115    `J'
24116          Unsigned 16-bit constant shifted left 16 bits (use `L'
24117          instead for `SImode' constants)
24118
24119    `K'
24120          Unsigned 16-bit constant
24121
24122    `L'
24123          Signed 16-bit constant shifted left 16 bits
24124
24125    `M'
24126          Constant larger than 31
24127
24128    `N'
24129          Exact power of 2
24130
24131    `O'
24132          Zero
24133
24134    `P'
24135          Constant whose negation is a signed 16-bit constant
24136
24137    `G'
24138          Floating point constant that can be loaded into a register
24139          with one instruction per word
24140
24141    `H'
24142          Integer/Floating point constant that can be loaded into a
24143          register using three instructions
24144
24145    `m'
24146          Memory operand.  Normally, `m' does not allow addresses that
24147          update the base register.  If `<' or `>' constraint is also
24148          used, they are allowed and therefore on PowerPC targets in
24149          that case it is only safe to use `m<>' in an `asm' statement
24150          if that `asm' statement accesses the operand exactly once.
24151          The `asm' statement must also use `%U<OPNO>' as a placeholder
24152          for the "update" flag in the corresponding load or store
24153          instruction.  For example:
24154
24155               asm ("st%U0 %1,%0" : "=m<>" (mem) : "r" (val));
24156
24157          is correct but:
24158
24159               asm ("st %1,%0" : "=m<>" (mem) : "r" (val));
24160
24161          is not.
24162
24163    `es'
24164          A "stable" memory operand; that is, one which does not
24165          include any automodification of the base register.  This used
24166          to be useful when `m' allowed automodification of the base
24167          register, but as those are now only allowed when `<' or `>'
24168          is used, `es' is basically the same as `m' without `<' and
24169          `>'.
24170
24171    `Q'
24172          Memory operand that is an offset from a register (it is
24173          usually better to use `m' or `es' in `asm' statements)
24174
24175    `Z'
24176          Memory operand that is an indexed or indirect from a register
24177          (it is usually better to use `m' or `es' in `asm' statements)
24178
24179    `R'
24180          AIX TOC entry
24181
24182    `a'
24183          Address operand that is an indexed or indirect from a
24184          register (`p' is preferable for `asm' statements)
24185
24186    `S'
24187          Constant suitable as a 64-bit mask operand
24188
24189    `T'
24190          Constant suitable as a 32-bit mask operand
24191
24192    `U'
24193          System V Release 4 small data area reference
24194
24195    `t'
24196          AND masks that can be performed by two rldic{l, r}
24197          instructions
24198
24199    `W'
24200          Vector constant that does not require memory
24201
24202    `j'
24203          Vector constant that is all zeros.
24204
24205
24206_Intel 386--`config/i386/constraints.md'_
24207
24208    `R'
24209          Legacy register--the eight integer registers available on all
24210          i386 processors (`a', `b', `c', `d', `si', `di', `bp', `sp').
24211
24212    `q'
24213          Any register accessible as `Rl'.  In 32-bit mode, `a', `b',
24214          `c', and `d'; in 64-bit mode, any integer register.
24215
24216    `Q'
24217          Any register accessible as `Rh': `a', `b', `c', and `d'.
24218
24219    `a'
24220          The `a' register.
24221
24222    `b'
24223          The `b' register.
24224
24225    `c'
24226          The `c' register.
24227
24228    `d'
24229          The `d' register.
24230
24231    `S'
24232          The `si' register.
24233
24234    `D'
24235          The `di' register.
24236
24237    `A'
24238          The `a' and `d' registers.  This class is used for
24239          instructions that return double word results in the `ax:dx'
24240          register pair.  Single word values will be allocated either
24241          in `ax' or `dx'.  For example on i386 the following
24242          implements `rdtsc':
24243
24244               unsigned long long rdtsc (void)
24245               {
24246                 unsigned long long tick;
24247                 __asm__ __volatile__("rdtsc":"=A"(tick));
24248                 return tick;
24249               }
24250
24251          This is not correct on x86_64 as it would allocate tick in
24252          either `ax' or `dx'.  You have to use the following variant
24253          instead:
24254
24255               unsigned long long rdtsc (void)
24256               {
24257                 unsigned int tickl, tickh;
24258                 __asm__ __volatile__("rdtsc":"=a"(tickl),"=d"(tickh));
24259                 return ((unsigned long long)tickh << 32)|tickl;
24260               }
24261
24262    `f'
24263          Any 80387 floating-point (stack) register.
24264
24265    `t'
24266          Top of 80387 floating-point stack (`%st(0)').
24267
24268    `u'
24269          Second from top of 80387 floating-point stack (`%st(1)').
24270
24271    `y'
24272          Any MMX register.
24273
24274    `x'
24275          Any SSE register.
24276
24277    `Yz'
24278          First SSE register (`%xmm0').
24279
24280    `I'
24281          Integer constant in the range 0 ... 31, for 32-bit shifts.
24282
24283    `J'
24284          Integer constant in the range 0 ... 63, for 64-bit shifts.
24285
24286    `K'
24287          Signed 8-bit integer constant.
24288
24289    `L'
24290          `0xFF' or `0xFFFF', for andsi as a zero-extending move.
24291
24292    `M'
24293          0, 1, 2, or 3 (shifts for the `lea' instruction).
24294
24295    `N'
24296          Unsigned 8-bit integer constant (for `in' and `out'
24297          instructions).
24298
24299    `G'
24300          Standard 80387 floating point constant.
24301
24302    `C'
24303          Standard SSE floating point constant.
24304
24305    `e'
24306          32-bit signed integer constant, or a symbolic reference known
24307          to fit that range (for immediate operands in sign-extending
24308          x86-64 instructions).
24309
24310    `Z'
24311          32-bit unsigned integer constant, or a symbolic reference
24312          known to fit that range (for immediate operands in
24313          zero-extending x86-64 instructions).
24314
24315
24316_Intel IA-64--`config/ia64/ia64.h'_
24317
24318    `a'
24319          General register `r0' to `r3' for `addl' instruction
24320
24321    `b'
24322          Branch register
24323
24324    `c'
24325          Predicate register (`c' as in "conditional")
24326
24327    `d'
24328          Application register residing in M-unit
24329
24330    `e'
24331          Application register residing in I-unit
24332
24333    `f'
24334          Floating-point register
24335
24336    `m'
24337          Memory operand.  If used together with `<' or `>', the
24338          operand can have postincrement and postdecrement which
24339          require printing with `%Pn' on IA-64.
24340
24341    `G'
24342          Floating-point constant 0.0 or 1.0
24343
24344    `I'
24345          14-bit signed integer constant
24346
24347    `J'
24348          22-bit signed integer constant
24349
24350    `K'
24351          8-bit signed integer constant for logical instructions
24352
24353    `L'
24354          8-bit adjusted signed integer constant for compare pseudo-ops
24355
24356    `M'
24357          6-bit unsigned integer constant for shift counts
24358
24359    `N'
24360          9-bit signed integer constant for load and store
24361          postincrements
24362
24363    `O'
24364          The constant zero
24365
24366    `P'
24367          0 or -1 for `dep' instruction
24368
24369    `Q'
24370          Non-volatile memory for floating-point loads and stores
24371
24372    `R'
24373          Integer constant in the range 1 to 4 for `shladd' instruction
24374
24375    `S'
24376          Memory operand except postincrement and postdecrement.  This
24377          is now roughly the same as `m' when not used together with `<'
24378          or `>'.
24379
24380_FRV--`config/frv/frv.h'_
24381
24382    `a'
24383          Register in the class `ACC_REGS' (`acc0' to `acc7').
24384
24385    `b'
24386          Register in the class `EVEN_ACC_REGS' (`acc0' to `acc7').
24387
24388    `c'
24389          Register in the class `CC_REGS' (`fcc0' to `fcc3' and `icc0'
24390          to `icc3').
24391
24392    `d'
24393          Register in the class `GPR_REGS' (`gr0' to `gr63').
24394
24395    `e'
24396          Register in the class `EVEN_REGS' (`gr0' to `gr63').  Odd
24397          registers are excluded not in the class but through the use
24398          of a machine mode larger than 4 bytes.
24399
24400    `f'
24401          Register in the class `FPR_REGS' (`fr0' to `fr63').
24402
24403    `h'
24404          Register in the class `FEVEN_REGS' (`fr0' to `fr63').  Odd
24405          registers are excluded not in the class but through the use
24406          of a machine mode larger than 4 bytes.
24407
24408    `l'
24409          Register in the class `LR_REG' (the `lr' register).
24410
24411    `q'
24412          Register in the class `QUAD_REGS' (`gr2' to `gr63').
24413          Register numbers not divisible by 4 are excluded not in the
24414          class but through the use of a machine mode larger than 8
24415          bytes.
24416
24417    `t'
24418          Register in the class `ICC_REGS' (`icc0' to `icc3').
24419
24420    `u'
24421          Register in the class `FCC_REGS' (`fcc0' to `fcc3').
24422
24423    `v'
24424          Register in the class `ICR_REGS' (`cc4' to `cc7').
24425
24426    `w'
24427          Register in the class `FCR_REGS' (`cc0' to `cc3').
24428
24429    `x'
24430          Register in the class `QUAD_FPR_REGS' (`fr0' to `fr63').
24431          Register numbers not divisible by 4 are excluded not in the
24432          class but through the use of a machine mode larger than 8
24433          bytes.
24434
24435    `z'
24436          Register in the class `SPR_REGS' (`lcr' and `lr').
24437
24438    `A'
24439          Register in the class `QUAD_ACC_REGS' (`acc0' to `acc7').
24440
24441    `B'
24442          Register in the class `ACCG_REGS' (`accg0' to `accg7').
24443
24444    `C'
24445          Register in the class `CR_REGS' (`cc0' to `cc7').
24446
24447    `G'
24448          Floating point constant zero
24449
24450    `I'
24451          6-bit signed integer constant
24452
24453    `J'
24454          10-bit signed integer constant
24455
24456    `L'
24457          16-bit signed integer constant
24458
24459    `M'
24460          16-bit unsigned integer constant
24461
24462    `N'
24463          12-bit signed integer constant that is negative--i.e. in the
24464          range of -2048 to -1
24465
24466    `O'
24467          Constant zero
24468
24469    `P'
24470          12-bit signed integer constant that is greater than
24471          zero--i.e. in the range of 1 to 2047.
24472
24473
24474_Blackfin family--`config/bfin/constraints.md'_
24475
24476    `a'
24477          P register
24478
24479    `d'
24480          D register
24481
24482    `z'
24483          A call clobbered P register.
24484
24485    `qN'
24486          A single register.  If N is in the range 0 to 7, the
24487          corresponding D register.  If it is `A', then the register P0.
24488
24489    `D'
24490          Even-numbered D register
24491
24492    `W'
24493          Odd-numbered D register
24494
24495    `e'
24496          Accumulator register.
24497
24498    `A'
24499          Even-numbered accumulator register.
24500
24501    `B'
24502          Odd-numbered accumulator register.
24503
24504    `b'
24505          I register
24506
24507    `v'
24508          B register
24509
24510    `f'
24511          M register
24512
24513    `c'
24514          Registers used for circular buffering, i.e. I, B, or L
24515          registers.
24516
24517    `C'
24518          The CC register.
24519
24520    `t'
24521          LT0 or LT1.
24522
24523    `k'
24524          LC0 or LC1.
24525
24526    `u'
24527          LB0 or LB1.
24528
24529    `x'
24530          Any D, P, B, M, I or L register.
24531
24532    `y'
24533          Additional registers typically used only in prologues and
24534          epilogues: RETS, RETN, RETI, RETX, RETE, ASTAT, SEQSTAT and
24535          USP.
24536
24537    `w'
24538          Any register except accumulators or CC.
24539
24540    `Ksh'
24541          Signed 16 bit integer (in the range -32768 to 32767)
24542
24543    `Kuh'
24544          Unsigned 16 bit integer (in the range 0 to 65535)
24545
24546    `Ks7'
24547          Signed 7 bit integer (in the range -64 to 63)
24548
24549    `Ku7'
24550          Unsigned 7 bit integer (in the range 0 to 127)
24551
24552    `Ku5'
24553          Unsigned 5 bit integer (in the range 0 to 31)
24554
24555    `Ks4'
24556          Signed 4 bit integer (in the range -8 to 7)
24557
24558    `Ks3'
24559          Signed 3 bit integer (in the range -3 to 4)
24560
24561    `Ku3'
24562          Unsigned 3 bit integer (in the range 0 to 7)
24563
24564    `PN'
24565          Constant N, where N is a single-digit constant in the range 0
24566          to 4.
24567
24568    `PA'
24569          An integer equal to one of the MACFLAG_XXX constants that is
24570          suitable for use with either accumulator.
24571
24572    `PB'
24573          An integer equal to one of the MACFLAG_XXX constants that is
24574          suitable for use only with accumulator A1.
24575
24576    `M1'
24577          Constant 255.
24578
24579    `M2'
24580          Constant 65535.
24581
24582    `J'
24583          An integer constant with exactly a single bit set.
24584
24585    `L'
24586          An integer constant with all bits set except exactly one.
24587
24588    `H'
24589
24590    `Q'
24591          Any SYMBOL_REF.
24592
24593_M32C--`config/m32c/m32c.c'_
24594
24595    `Rsp'
24596    `Rfb'
24597    `Rsb'
24598          `$sp', `$fb', `$sb'.
24599
24600    `Rcr'
24601          Any control register, when they're 16 bits wide (nothing if
24602          control registers are 24 bits wide)
24603
24604    `Rcl'
24605          Any control register, when they're 24 bits wide.
24606
24607    `R0w'
24608    `R1w'
24609    `R2w'
24610    `R3w'
24611          $r0, $r1, $r2, $r3.
24612
24613    `R02'
24614          $r0 or $r2, or $r2r0 for 32 bit values.
24615
24616    `R13'
24617          $r1 or $r3, or $r3r1 for 32 bit values.
24618
24619    `Rdi'
24620          A register that can hold a 64 bit value.
24621
24622    `Rhl'
24623          $r0 or $r1 (registers with addressable high/low bytes)
24624
24625    `R23'
24626          $r2 or $r3
24627
24628    `Raa'
24629          Address registers
24630
24631    `Raw'
24632          Address registers when they're 16 bits wide.
24633
24634    `Ral'
24635          Address registers when they're 24 bits wide.
24636
24637    `Rqi'
24638          Registers that can hold QI values.
24639
24640    `Rad'
24641          Registers that can be used with displacements ($a0, $a1, $sb).
24642
24643    `Rsi'
24644          Registers that can hold 32 bit values.
24645
24646    `Rhi'
24647          Registers that can hold 16 bit values.
24648
24649    `Rhc'
24650          Registers chat can hold 16 bit values, including all control
24651          registers.
24652
24653    `Rra'
24654          $r0 through R1, plus $a0 and $a1.
24655
24656    `Rfl'
24657          The flags register.
24658
24659    `Rmm'
24660          The memory-based pseudo-registers $mem0 through $mem15.
24661
24662    `Rpi'
24663          Registers that can hold pointers (16 bit registers for r8c,
24664          m16c; 24 bit registers for m32cm, m32c).
24665
24666    `Rpa'
24667          Matches multiple registers in a PARALLEL to form a larger
24668          register.  Used to match function return values.
24669
24670    `Is3'
24671          -8 ... 7
24672
24673    `IS1'
24674          -128 ... 127
24675
24676    `IS2'
24677          -32768 ... 32767
24678
24679    `IU2'
24680          0 ... 65535
24681
24682    `In4'
24683          -8 ... -1 or 1 ... 8
24684
24685    `In5'
24686          -16 ... -1 or 1 ... 16
24687
24688    `In6'
24689          -32 ... -1 or 1 ... 32
24690
24691    `IM2'
24692          -65536 ... -1
24693
24694    `Ilb'
24695          An 8 bit value with exactly one bit set.
24696
24697    `Ilw'
24698          A 16 bit value with exactly one bit set.
24699
24700    `Sd'
24701          The common src/dest memory addressing modes.
24702
24703    `Sa'
24704          Memory addressed using $a0 or $a1.
24705
24706    `Si'
24707          Memory addressed with immediate addresses.
24708
24709    `Ss'
24710          Memory addressed using the stack pointer ($sp).
24711
24712    `Sf'
24713          Memory addressed using the frame base register ($fb).
24714
24715    `Ss'
24716          Memory addressed using the small base register ($sb).
24717
24718    `S1'
24719          $r1h
24720
24721_MeP--`config/mep/constraints.md'_
24722
24723    `a'
24724          The $sp register.
24725
24726    `b'
24727          The $tp register.
24728
24729    `c'
24730          Any control register.
24731
24732    `d'
24733          Either the $hi or the $lo register.
24734
24735    `em'
24736          Coprocessor registers that can be directly loaded ($c0-$c15).
24737
24738    `ex'
24739          Coprocessor registers that can be moved to each other.
24740
24741    `er'
24742          Coprocessor registers that can be moved to core registers.
24743
24744    `h'
24745          The $hi register.
24746
24747    `j'
24748          The $rpc register.
24749
24750    `l'
24751          The $lo register.
24752
24753    `t'
24754          Registers which can be used in $tp-relative addressing.
24755
24756    `v'
24757          The $gp register.
24758
24759    `x'
24760          The coprocessor registers.
24761
24762    `y'
24763          The coprocessor control registers.
24764
24765    `z'
24766          The $0 register.
24767
24768    `A'
24769          User-defined register set A.
24770
24771    `B'
24772          User-defined register set B.
24773
24774    `C'
24775          User-defined register set C.
24776
24777    `D'
24778          User-defined register set D.
24779
24780    `I'
24781          Offsets for $gp-rel addressing.
24782
24783    `J'
24784          Constants that can be used directly with boolean insns.
24785
24786    `K'
24787          Constants that can be moved directly to registers.
24788
24789    `L'
24790          Small constants that can be added to registers.
24791
24792    `M'
24793          Long shift counts.
24794
24795    `N'
24796          Small constants that can be compared to registers.
24797
24798    `O'
24799          Constants that can be loaded into the top half of registers.
24800
24801    `S'
24802          Signed 8-bit immediates.
24803
24804    `T'
24805          Symbols encoded for $tp-rel or $gp-rel addressing.
24806
24807    `U'
24808          Non-constant addresses for loading/saving coprocessor
24809          registers.
24810
24811    `W'
24812          The top half of a symbol's value.
24813
24814    `Y'
24815          A register indirect address without offset.
24816
24817    `Z'
24818          Symbolic references to the control bus.
24819
24820
24821_MicroBlaze--`config/microblaze/constraints.md'_
24822
24823    `d'
24824          A general register (`r0' to `r31').
24825
24826    `z'
24827          A status register (`rmsr', `$fcc1' to `$fcc7').
24828
24829
24830_MIPS--`config/mips/constraints.md'_
24831
24832    `d'
24833          An address register.  This is equivalent to `r' unless
24834          generating MIPS16 code.
24835
24836    `f'
24837          A floating-point register (if available).
24838
24839    `h'
24840          Formerly the `hi' register.  This constraint is no longer
24841          supported.
24842
24843    `l'
24844          The `lo' register.  Use this register to store values that are
24845          no bigger than a word.
24846
24847    `x'
24848          The concatenated `hi' and `lo' registers.  Use this register
24849          to store doubleword values.
24850
24851    `c'
24852          A register suitable for use in an indirect jump.  This will
24853          always be `$25' for `-mabicalls'.
24854
24855    `v'
24856          Register `$3'.  Do not use this constraint in new code; it is
24857          retained only for compatibility with glibc.
24858
24859    `y'
24860          Equivalent to `r'; retained for backwards compatibility.
24861
24862    `z'
24863          A floating-point condition code register.
24864
24865    `I'
24866          A signed 16-bit constant (for arithmetic instructions).
24867
24868    `J'
24869          Integer zero.
24870
24871    `K'
24872          An unsigned 16-bit constant (for logic instructions).
24873
24874    `L'
24875          A signed 32-bit constant in which the lower 16 bits are zero.
24876          Such constants can be loaded using `lui'.
24877
24878    `M'
24879          A constant that cannot be loaded using `lui', `addiu' or
24880          `ori'.
24881
24882    `N'
24883          A constant in the range -65535 to -1 (inclusive).
24884
24885    `O'
24886          A signed 15-bit constant.
24887
24888    `P'
24889          A constant in the range 1 to 65535 (inclusive).
24890
24891    `G'
24892          Floating-point zero.
24893
24894    `R'
24895          An address that can be used in a non-macro load or store.
24896
24897_Motorola 680x0--`config/m68k/constraints.md'_
24898
24899    `a'
24900          Address register
24901
24902    `d'
24903          Data register
24904
24905    `f'
24906          68881 floating-point register, if available
24907
24908    `I'
24909          Integer in the range 1 to 8
24910
24911    `J'
24912          16-bit signed number
24913
24914    `K'
24915          Signed number whose magnitude is greater than 0x80
24916
24917    `L'
24918          Integer in the range -8 to -1
24919
24920    `M'
24921          Signed number whose magnitude is greater than 0x100
24922
24923    `N'
24924          Range 24 to 31, rotatert:SI 8 to 1 expressed as rotate
24925
24926    `O'
24927          16 (for rotate using swap)
24928
24929    `P'
24930          Range 8 to 15, rotatert:HI 8 to 1 expressed as rotate
24931
24932    `R'
24933          Numbers that mov3q can handle
24934
24935    `G'
24936          Floating point constant that is not a 68881 constant
24937
24938    `S'
24939          Operands that satisfy 'm' when -mpcrel is in effect
24940
24941    `T'
24942          Operands that satisfy 's' when -mpcrel is not in effect
24943
24944    `Q'
24945          Address register indirect addressing mode
24946
24947    `U'
24948          Register offset addressing
24949
24950    `W'
24951          const_call_operand
24952
24953    `Cs'
24954          symbol_ref or const
24955
24956    `Ci'
24957          const_int
24958
24959    `C0'
24960          const_int 0
24961
24962    `Cj'
24963          Range of signed numbers that don't fit in 16 bits
24964
24965    `Cmvq'
24966          Integers valid for mvq
24967
24968    `Capsw'
24969          Integers valid for a moveq followed by a swap
24970
24971    `Cmvz'
24972          Integers valid for mvz
24973
24974    `Cmvs'
24975          Integers valid for mvs
24976
24977    `Ap'
24978          push_operand
24979
24980    `Ac'
24981          Non-register operands allowed in clr
24982
24983
24984_Motorola 68HC11 & 68HC12 families--`config/m68hc11/m68hc11.h'_
24985
24986    `a'
24987          Register `a'
24988
24989    `b'
24990          Register `b'
24991
24992    `d'
24993          Register `d'
24994
24995    `q'
24996          An 8-bit register
24997
24998    `t'
24999          Temporary soft register _.tmp
25000
25001    `u'
25002          A soft register _.d1 to _.d31
25003
25004    `w'
25005          Stack pointer register
25006
25007    `x'
25008          Register `x'
25009
25010    `y'
25011          Register `y'
25012
25013    `z'
25014          Pseudo register `z' (replaced by `x' or `y' at the end)
25015
25016    `A'
25017          An address register: x, y or z
25018
25019    `B'
25020          An address register: x or y
25021
25022    `D'
25023          Register pair (x:d) to form a 32-bit value
25024
25025    `L'
25026          Constants in the range -65536 to 65535
25027
25028    `M'
25029          Constants whose 16-bit low part is zero
25030
25031    `N'
25032          Constant integer 1 or -1
25033
25034    `O'
25035          Constant integer 16
25036
25037    `P'
25038          Constants in the range -8 to 2
25039
25040
25041_Moxie--`config/moxie/constraints.md'_
25042
25043    `A'
25044          An absolute address
25045
25046    `B'
25047          An offset address
25048
25049    `W'
25050          A register indirect memory operand
25051
25052    `I'
25053          A constant in the range of 0 to 255.
25054
25055    `N'
25056          A constant in the range of 0 to -255.
25057
25058
25059_PDP-11--`config/pdp11/constraints.md'_
25060
25061    `a'
25062          Floating point registers AC0 through AC3.  These can be
25063          loaded from/to memory with a single instruction.
25064
25065    `d'
25066          Odd numbered general registers (R1, R3, R5).  These are used
25067          for 16-bit multiply operations.
25068
25069    `f'
25070          Any of the floating point registers (AC0 through AC5).
25071
25072    `G'
25073          Floating point constant 0.
25074
25075    `I'
25076          An integer constant that fits in 16 bits.
25077
25078    `J'
25079          An integer constant whose low order 16 bits are zero.
25080
25081    `K'
25082          An integer constant that does not meet the constraints for
25083          codes `I' or `J'.
25084
25085    `L'
25086          The integer constant 1.
25087
25088    `M'
25089          The integer constant -1.
25090
25091    `N'
25092          The integer constant 0.
25093
25094    `O'
25095          Integer constants -4 through -1 and 1 through 4; shifts by
25096          these amounts are handled as multiple single-bit shifts
25097          rather than a single variable-length shift.
25098
25099    `Q'
25100          A memory reference which requires an additional word (address
25101          or offset) after the opcode.
25102
25103    `R'
25104          A memory reference that is encoded within the opcode.
25105
25106
25107_RX--`config/rx/constraints.md'_
25108
25109    `Q'
25110          An address which does not involve register indirect
25111          addressing or pre/post increment/decrement addressing.
25112
25113    `Symbol'
25114          A symbol reference.
25115
25116    `Int08'
25117          A constant in the range -256 to 255, inclusive.
25118
25119    `Sint08'
25120          A constant in the range -128 to 127, inclusive.
25121
25122    `Sint16'
25123          A constant in the range -32768 to 32767, inclusive.
25124
25125    `Sint24'
25126          A constant in the range -8388608 to 8388607, inclusive.
25127
25128    `Uint04'
25129          A constant in the range 0 to 15, inclusive.
25130
25131
25132_SPARC--`config/sparc/sparc.h'_
25133
25134    `f'
25135          Floating-point register on the SPARC-V8 architecture and
25136          lower floating-point register on the SPARC-V9 architecture.
25137
25138    `e'
25139          Floating-point register.  It is equivalent to `f' on the
25140          SPARC-V8 architecture and contains both lower and upper
25141          floating-point registers on the SPARC-V9 architecture.
25142
25143    `c'
25144          Floating-point condition code register.
25145
25146    `d'
25147          Lower floating-point register.  It is only valid on the
25148          SPARC-V9 architecture when the Visual Instruction Set is
25149          available.
25150
25151    `b'
25152          Floating-point register.  It is only valid on the SPARC-V9
25153          architecture when the Visual Instruction Set is available.
25154
25155    `h'
25156          64-bit global or out register for the SPARC-V8+ architecture.
25157
25158    `D'
25159          A vector constant
25160
25161    `I'
25162          Signed 13-bit constant
25163
25164    `J'
25165          Zero
25166
25167    `K'
25168          32-bit constant with the low 12 bits clear (a constant that
25169          can be loaded with the `sethi' instruction)
25170
25171    `L'
25172          A constant in the range supported by `movcc' instructions
25173
25174    `M'
25175          A constant in the range supported by `movrcc' instructions
25176
25177    `N'
25178          Same as `K', except that it verifies that bits that are not
25179          in the lower 32-bit range are all zero.  Must be used instead
25180          of `K' for modes wider than `SImode'
25181
25182    `O'
25183          The constant 4096
25184
25185    `G'
25186          Floating-point zero
25187
25188    `H'
25189          Signed 13-bit constant, sign-extended to 32 or 64 bits
25190
25191    `Q'
25192          Floating-point constant whose integral representation can be
25193          moved into an integer register using a single sethi
25194          instruction
25195
25196    `R'
25197          Floating-point constant whose integral representation can be
25198          moved into an integer register using a single mov instruction
25199
25200    `S'
25201          Floating-point constant whose integral representation can be
25202          moved into an integer register using a high/lo_sum
25203          instruction sequence
25204
25205    `T'
25206          Memory address aligned to an 8-byte boundary
25207
25208    `U'
25209          Even register
25210
25211    `W'
25212          Memory address for `e' constraint registers
25213
25214    `Y'
25215          Vector zero
25216
25217
25218_SPU--`config/spu/spu.h'_
25219
25220    `a'
25221          An immediate which can be loaded with the il/ila/ilh/ilhu
25222          instructions.  const_int is treated as a 64 bit value.
25223
25224    `c'
25225          An immediate for and/xor/or instructions.  const_int is
25226          treated as a 64 bit value.
25227
25228    `d'
25229          An immediate for the `iohl' instruction.  const_int is
25230          treated as a 64 bit value.
25231
25232    `f'
25233          An immediate which can be loaded with `fsmbi'.
25234
25235    `A'
25236          An immediate which can be loaded with the il/ila/ilh/ilhu
25237          instructions.  const_int is treated as a 32 bit value.
25238
25239    `B'
25240          An immediate for most arithmetic instructions.  const_int is
25241          treated as a 32 bit value.
25242
25243    `C'
25244          An immediate for and/xor/or instructions.  const_int is
25245          treated as a 32 bit value.
25246
25247    `D'
25248          An immediate for the `iohl' instruction.  const_int is
25249          treated as a 32 bit value.
25250
25251    `I'
25252          A constant in the range [-64, 63] for shift/rotate
25253          instructions.
25254
25255    `J'
25256          An unsigned 7-bit constant for conversion/nop/channel
25257          instructions.
25258
25259    `K'
25260          A signed 10-bit constant for most arithmetic instructions.
25261
25262    `M'
25263          A signed 16 bit immediate for `stop'.
25264
25265    `N'
25266          An unsigned 16-bit constant for `iohl' and `fsmbi'.
25267
25268    `O'
25269          An unsigned 7-bit constant whose 3 least significant bits are
25270          0.
25271
25272    `P'
25273          An unsigned 3-bit constant for 16-byte rotates and shifts
25274
25275    `R'
25276          Call operand, reg, for indirect calls
25277
25278    `S'
25279          Call operand, symbol, for relative calls.
25280
25281    `T'
25282          Call operand, const_int, for absolute calls.
25283
25284    `U'
25285          An immediate which can be loaded with the il/ila/ilh/ilhu
25286          instructions.  const_int is sign extended to 128 bit.
25287
25288    `W'
25289          An immediate for shift and rotate instructions.  const_int is
25290          treated as a 32 bit value.
25291
25292    `Y'
25293          An immediate for and/xor/or instructions.  const_int is sign
25294          extended as a 128 bit.
25295
25296    `Z'
25297          An immediate for the `iohl' instruction.  const_int is sign
25298          extended to 128 bit.
25299
25300
25301_S/390 and zSeries--`config/s390/s390.h'_
25302
25303    `a'
25304          Address register (general purpose register except r0)
25305
25306    `c'
25307          Condition code register
25308
25309    `d'
25310          Data register (arbitrary general purpose register)
25311
25312    `f'
25313          Floating-point register
25314
25315    `I'
25316          Unsigned 8-bit constant (0-255)
25317
25318    `J'
25319          Unsigned 12-bit constant (0-4095)
25320
25321    `K'
25322          Signed 16-bit constant (-32768-32767)
25323
25324    `L'
25325          Value appropriate as displacement.
25326         `(0..4095)'
25327               for short displacement
25328
25329         `(-524288..524287)'
25330               for long displacement
25331
25332    `M'
25333          Constant integer with a value of 0x7fffffff.
25334
25335    `N'
25336          Multiple letter constraint followed by 4 parameter letters.
25337         `0..9:'
25338               number of the part counting from most to least
25339               significant
25340
25341         `H,Q:'
25342               mode of the part
25343
25344         `D,S,H:'
25345               mode of the containing operand
25346
25347         `0,F:'
25348               value of the other parts (F--all bits set)
25349          The constraint matches if the specified part of a constant
25350          has a value different from its other parts.
25351
25352    `Q'
25353          Memory reference without index register and with short
25354          displacement.
25355
25356    `R'
25357          Memory reference with index register and short displacement.
25358
25359    `S'
25360          Memory reference without index register but with long
25361          displacement.
25362
25363    `T'
25364          Memory reference with index register and long displacement.
25365
25366    `U'
25367          Pointer with short displacement.
25368
25369    `W'
25370          Pointer with long displacement.
25371
25372    `Y'
25373          Shift count operand.
25374
25375
25376_Score family--`config/score/score.h'_
25377
25378    `d'
25379          Registers from r0 to r32.
25380
25381    `e'
25382          Registers from r0 to r16.
25383
25384    `t'
25385          r8--r11 or r22--r27 registers.
25386
25387    `h'
25388          hi register.
25389
25390    `l'
25391          lo register.
25392
25393    `x'
25394          hi + lo register.
25395
25396    `q'
25397          cnt register.
25398
25399    `y'
25400          lcb register.
25401
25402    `z'
25403          scb register.
25404
25405    `a'
25406          cnt + lcb + scb register.
25407
25408    `c'
25409          cr0--cr15 register.
25410
25411    `b'
25412          cp1 registers.
25413
25414    `f'
25415          cp2 registers.
25416
25417    `i'
25418          cp3 registers.
25419
25420    `j'
25421          cp1 + cp2 + cp3 registers.
25422
25423    `I'
25424          High 16-bit constant (32-bit constant with 16 LSBs zero).
25425
25426    `J'
25427          Unsigned 5 bit integer (in the range 0 to 31).
25428
25429    `K'
25430          Unsigned 16 bit integer (in the range 0 to 65535).
25431
25432    `L'
25433          Signed 16 bit integer (in the range -32768 to 32767).
25434
25435    `M'
25436          Unsigned 14 bit integer (in the range 0 to 16383).
25437
25438    `N'
25439          Signed 14 bit integer (in the range -8192 to 8191).
25440
25441    `Z'
25442          Any SYMBOL_REF.
25443
25444_Xstormy16--`config/stormy16/stormy16.h'_
25445
25446    `a'
25447          Register r0.
25448
25449    `b'
25450          Register r1.
25451
25452    `c'
25453          Register r2.
25454
25455    `d'
25456          Register r8.
25457
25458    `e'
25459          Registers r0 through r7.
25460
25461    `t'
25462          Registers r0 and r1.
25463
25464    `y'
25465          The carry register.
25466
25467    `z'
25468          Registers r8 and r9.
25469
25470    `I'
25471          A constant between 0 and 3 inclusive.
25472
25473    `J'
25474          A constant that has exactly one bit set.
25475
25476    `K'
25477          A constant that has exactly one bit clear.
25478
25479    `L'
25480          A constant between 0 and 255 inclusive.
25481
25482    `M'
25483          A constant between -255 and 0 inclusive.
25484
25485    `N'
25486          A constant between -3 and 0 inclusive.
25487
25488    `O'
25489          A constant between 1 and 4 inclusive.
25490
25491    `P'
25492          A constant between -4 and -1 inclusive.
25493
25494    `Q'
25495          A memory reference that is a stack push.
25496
25497    `R'
25498          A memory reference that is a stack pop.
25499
25500    `S'
25501          A memory reference that refers to a constant address of known
25502          value.
25503
25504    `T'
25505          The register indicated by Rx (not implemented yet).
25506
25507    `U'
25508          A constant that is not between 2 and 15 inclusive.
25509
25510    `Z'
25511          The constant 0.
25512
25513
25514_Xtensa--`config/xtensa/constraints.md'_
25515
25516    `a'
25517          General-purpose 32-bit register
25518
25519    `b'
25520          One-bit boolean register
25521
25522    `A'
25523          MAC16 40-bit accumulator register
25524
25525    `I'
25526          Signed 12-bit integer constant, for use in MOVI instructions
25527
25528    `J'
25529          Signed 8-bit integer constant, for use in ADDI instructions
25530
25531    `K'
25532          Integer constant valid for BccI instructions
25533
25534    `L'
25535          Unsigned constant valid for BccUI instructions
25536
25537
25538
25539
25540File: gcc.info,  Node: Asm Labels,  Next: Explicit Reg Vars,  Prev: Constraints,  Up: C Extensions
25541
255426.43 Controlling Names Used in Assembler Code
25543=============================================
25544
25545You can specify the name to be used in the assembler code for a C
25546function or variable by writing the `asm' (or `__asm__') keyword after
25547the declarator as follows:
25548
25549     int foo asm ("myfoo") = 2;
25550
25551This specifies that the name to be used for the variable `foo' in the
25552assembler code should be `myfoo' rather than the usual `_foo'.
25553
25554 On systems where an underscore is normally prepended to the name of a C
25555function or variable, this feature allows you to define names for the
25556linker that do not start with an underscore.
25557
25558 It does not make sense to use this feature with a non-static local
25559variable since such variables do not have assembler names.  If you are
25560trying to put the variable in a particular register, see *note Explicit
25561Reg Vars::.  GCC presently accepts such code with a warning, but will
25562probably be changed to issue an error, rather than a warning, in the
25563future.
25564
25565 You cannot use `asm' in this way in a function _definition_; but you
25566can get the same effect by writing a declaration for the function
25567before its definition and putting `asm' there, like this:
25568
25569     extern func () asm ("FUNC");
25570
25571     func (x, y)
25572          int x, y;
25573     /* ... */
25574
25575 It is up to you to make sure that the assembler names you choose do not
25576conflict with any other assembler symbols.  Also, you must not use a
25577register name; that would produce completely invalid assembler code.
25578GCC does not as yet have the ability to store static variables in
25579registers.  Perhaps that will be added.
25580
25581
25582File: gcc.info,  Node: Explicit Reg Vars,  Next: Alternate Keywords,  Prev: Asm Labels,  Up: C Extensions
25583
255846.44 Variables in Specified Registers
25585=====================================
25586
25587GNU C allows you to put a few global variables into specified hardware
25588registers.  You can also specify the register in which an ordinary
25589register variable should be allocated.
25590
25591   * Global register variables reserve registers throughout the program.
25592     This may be useful in programs such as programming language
25593     interpreters which have a couple of global variables that are
25594     accessed very often.
25595
25596   * Local register variables in specific registers do not reserve the
25597     registers, except at the point where they are used as input or
25598     output operands in an `asm' statement and the `asm' statement
25599     itself is not deleted.  The compiler's data flow analysis is
25600     capable of determining where the specified registers contain live
25601     values, and where they are available for other uses.  Stores into
25602     local register variables may be deleted when they appear to be
25603     dead according to dataflow analysis.  References to local register
25604     variables may be deleted or moved or simplified.
25605
25606     These local variables are sometimes convenient for use with the
25607     extended `asm' feature (*note Extended Asm::), if you want to
25608     write one output of the assembler instruction directly into a
25609     particular register.  (This will work provided the register you
25610     specify fits the constraints specified for that operand in the
25611     `asm'.)
25612
25613* Menu:
25614
25615* Global Reg Vars::
25616* Local Reg Vars::
25617
25618
25619File: gcc.info,  Node: Global Reg Vars,  Next: Local Reg Vars,  Up: Explicit Reg Vars
25620
256216.44.1 Defining Global Register Variables
25622-----------------------------------------
25623
25624You can define a global register variable in GNU C like this:
25625
25626     register int *foo asm ("a5");
25627
25628Here `a5' is the name of the register which should be used.  Choose a
25629register which is normally saved and restored by function calls on your
25630machine, so that library routines will not clobber it.
25631
25632 Naturally the register name is cpu-dependent, so you would need to
25633conditionalize your program according to cpu type.  The register `a5'
25634would be a good choice on a 68000 for a variable of pointer type.  On
25635machines with register windows, be sure to choose a "global" register
25636that is not affected magically by the function call mechanism.
25637
25638 In addition, operating systems on one type of cpu may differ in how
25639they name the registers; then you would need additional conditionals.
25640For example, some 68000 operating systems call this register `%a5'.
25641
25642 Eventually there may be a way of asking the compiler to choose a
25643register automatically, but first we need to figure out how it should
25644choose and how to enable you to guide the choice.  No solution is
25645evident.
25646
25647 Defining a global register variable in a certain register reserves that
25648register entirely for this use, at least within the current compilation.
25649The register will not be allocated for any other purpose in the
25650functions in the current compilation.  The register will not be saved
25651and restored by these functions.  Stores into this register are never
25652deleted even if they would appear to be dead, but references may be
25653deleted or moved or simplified.
25654
25655 It is not safe to access the global register variables from signal
25656handlers, or from more than one thread of control, because the system
25657library routines may temporarily use the register for other things
25658(unless you recompile them specially for the task at hand).
25659
25660 It is not safe for one function that uses a global register variable to
25661call another such function `foo' by way of a third function `lose' that
25662was compiled without knowledge of this variable (i.e. in a different
25663source file in which the variable wasn't declared).  This is because
25664`lose' might save the register and put some other value there.  For
25665example, you can't expect a global register variable to be available in
25666the comparison-function that you pass to `qsort', since `qsort' might
25667have put something else in that register.  (If you are prepared to
25668recompile `qsort' with the same global register variable, you can solve
25669this problem.)
25670
25671 If you want to recompile `qsort' or other source files which do not
25672actually use your global register variable, so that they will not use
25673that register for any other purpose, then it suffices to specify the
25674compiler option `-ffixed-REG'.  You need not actually add a global
25675register declaration to their source code.
25676
25677 A function which can alter the value of a global register variable
25678cannot safely be called from a function compiled without this variable,
25679because it could clobber the value the caller expects to find there on
25680return.  Therefore, the function which is the entry point into the part
25681of the program that uses the global register variable must explicitly
25682save and restore the value which belongs to its caller.
25683
25684 On most machines, `longjmp' will restore to each global register
25685variable the value it had at the time of the `setjmp'.  On some
25686machines, however, `longjmp' will not change the value of global
25687register variables.  To be portable, the function that called `setjmp'
25688should make other arrangements to save the values of the global register
25689variables, and to restore them in a `longjmp'.  This way, the same
25690thing will happen regardless of what `longjmp' does.
25691
25692 All global register variable declarations must precede all function
25693definitions.  If such a declaration could appear after function
25694definitions, the declaration would be too late to prevent the register
25695from being used for other purposes in the preceding functions.
25696
25697 Global register variables may not have initial values, because an
25698executable file has no means to supply initial contents for a register.
25699
25700 On the SPARC, there are reports that g3 ... g7 are suitable registers,
25701but certain library functions, such as `getwd', as well as the
25702subroutines for division and remainder, modify g3 and g4.  g1 and g2
25703are local temporaries.
25704
25705 On the 68000, a2 ... a5 should be suitable, as should d2 ... d7.  Of
25706course, it will not do to use more than a few of those.
25707
25708
25709File: gcc.info,  Node: Local Reg Vars,  Prev: Global Reg Vars,  Up: Explicit Reg Vars
25710
257116.44.2 Specifying Registers for Local Variables
25712-----------------------------------------------
25713
25714You can define a local register variable with a specified register like
25715this:
25716
25717     register int *foo asm ("a5");
25718
25719Here `a5' is the name of the register which should be used.  Note that
25720this is the same syntax used for defining global register variables,
25721but for a local variable it would appear within a function.
25722
25723 Naturally the register name is cpu-dependent, but this is not a
25724problem, since specific registers are most often useful with explicit
25725assembler instructions (*note Extended Asm::).  Both of these things
25726generally require that you conditionalize your program according to cpu
25727type.
25728
25729 In addition, operating systems on one type of cpu may differ in how
25730they name the registers; then you would need additional conditionals.
25731For example, some 68000 operating systems call this register `%a5'.
25732
25733 Defining such a register variable does not reserve the register; it
25734remains available for other uses in places where flow control determines
25735the variable's value is not live.
25736
25737 This option does not guarantee that GCC will generate code that has
25738this variable in the register you specify at all times.  You may not
25739code an explicit reference to this register in the _assembler
25740instruction template_ part of an `asm' statement and assume it will
25741always refer to this variable.  However, using the variable as an `asm'
25742_operand_ guarantees that the specified register is used for the
25743operand.
25744
25745 Stores into local register variables may be deleted when they appear
25746to be dead according to dataflow analysis.  References to local
25747register variables may be deleted or moved or simplified.
25748
25749 As for global register variables, it's recommended that you choose a
25750register which is normally saved and restored by function calls on your
25751machine, so that library routines will not clobber it.  A common
25752pitfall is to initialize multiple call-clobbered registers with
25753arbitrary expressions, where a function call or library call for an
25754arithmetic operator will overwrite a register value from a previous
25755assignment, for example `r0' below:
25756     register int *p1 asm ("r0") = ...;
25757     register int *p2 asm ("r1") = ...;
25758 In those cases, a solution is to use a temporary variable for each
25759arbitrary expression.   *Note Example of asm with clobbered asm reg::.
25760
25761
25762File: gcc.info,  Node: Alternate Keywords,  Next: Incomplete Enums,  Prev: Explicit Reg Vars,  Up: C Extensions
25763
257646.45 Alternate Keywords
25765=======================
25766
25767`-ansi' and the various `-std' options disable certain keywords.  This
25768causes trouble when you want to use GNU C extensions, or a
25769general-purpose header file that should be usable by all programs,
25770including ISO C programs.  The keywords `asm', `typeof' and `inline'
25771are not available in programs compiled with `-ansi' or `-std' (although
25772`inline' can be used in a program compiled with `-std=c99' or
25773`-std=c1x').  The ISO C99 keyword `restrict' is only available when
25774`-std=gnu99' (which will eventually be the default) or `-std=c99' (or
25775the equivalent `-std=iso9899:1999'), or an option for a later standard
25776version, is used.
25777
25778 The way to solve these problems is to put `__' at the beginning and
25779end of each problematical keyword.  For example, use `__asm__' instead
25780of `asm', and `__inline__' instead of `inline'.
25781
25782 Other C compilers won't accept these alternative keywords; if you want
25783to compile with another compiler, you can define the alternate keywords
25784as macros to replace them with the customary keywords.  It looks like
25785this:
25786
25787     #ifndef __GNUC__
25788     #define __asm__ asm
25789     #endif
25790
25791 `-pedantic' and other options cause warnings for many GNU C extensions.
25792You can prevent such warnings within one expression by writing
25793`__extension__' before the expression.  `__extension__' has no effect
25794aside from this.
25795
25796
25797File: gcc.info,  Node: Incomplete Enums,  Next: Function Names,  Prev: Alternate Keywords,  Up: C Extensions
25798
257996.46 Incomplete `enum' Types
25800============================
25801
25802You can define an `enum' tag without specifying its possible values.
25803This results in an incomplete type, much like what you get if you write
25804`struct foo' without describing the elements.  A later declaration
25805which does specify the possible values completes the type.
25806
25807 You can't allocate variables or storage using the type while it is
25808incomplete.  However, you can work with pointers to that type.
25809
25810 This extension may not be very useful, but it makes the handling of
25811`enum' more consistent with the way `struct' and `union' are handled.
25812
25813 This extension is not supported by GNU C++.
25814
25815
25816File: gcc.info,  Node: Function Names,  Next: Return Address,  Prev: Incomplete Enums,  Up: C Extensions
25817
258186.47 Function Names as Strings
25819==============================
25820
25821GCC provides three magic variables which hold the name of the current
25822function, as a string.  The first of these is `__func__', which is part
25823of the C99 standard:
25824
25825 The identifier `__func__' is implicitly declared by the translator as
25826if, immediately following the opening brace of each function
25827definition, the declaration
25828
25829     static const char __func__[] = "function-name";
25830
25831appeared, where function-name is the name of the lexically-enclosing
25832function.  This name is the unadorned name of the function.
25833
25834 `__FUNCTION__' is another name for `__func__'.  Older versions of GCC
25835recognize only this name.  However, it is not standardized.  For
25836maximum portability, we recommend you use `__func__', but provide a
25837fallback definition with the preprocessor:
25838
25839     #if __STDC_VERSION__ < 199901L
25840     # if __GNUC__ >= 2
25841     #  define __func__ __FUNCTION__
25842     # else
25843     #  define __func__ "<unknown>"
25844     # endif
25845     #endif
25846
25847 In C, `__PRETTY_FUNCTION__' is yet another name for `__func__'.
25848However, in C++, `__PRETTY_FUNCTION__' contains the type signature of
25849the function as well as its bare name.  For example, this program:
25850
25851     extern "C" {
25852     extern int printf (char *, ...);
25853     }
25854
25855     class a {
25856      public:
25857       void sub (int i)
25858         {
25859           printf ("__FUNCTION__ = %s\n", __FUNCTION__);
25860           printf ("__PRETTY_FUNCTION__ = %s\n", __PRETTY_FUNCTION__);
25861         }
25862     };
25863
25864     int
25865     main (void)
25866     {
25867       a ax;
25868       ax.sub (0);
25869       return 0;
25870     }
25871
25872gives this output:
25873
25874     __FUNCTION__ = sub
25875     __PRETTY_FUNCTION__ = void a::sub(int)
25876
25877 These identifiers are not preprocessor macros.  In GCC 3.3 and
25878earlier, in C only, `__FUNCTION__' and `__PRETTY_FUNCTION__' were
25879treated as string literals; they could be used to initialize `char'
25880arrays, and they could be concatenated with other string literals.  GCC
258813.4 and later treat them as variables, like `__func__'.  In C++,
25882`__FUNCTION__' and `__PRETTY_FUNCTION__' have always been variables.
25883
25884
25885File: gcc.info,  Node: Return Address,  Next: Vector Extensions,  Prev: Function Names,  Up: C Extensions
25886
258876.48 Getting the Return or Frame Address of a Function
25888======================================================
25889
25890These functions may be used to get information about the callers of a
25891function.
25892
25893 -- Built-in Function: void * __builtin_return_address (unsigned int
25894          LEVEL)
25895     This function returns the return address of the current function,
25896     or of one of its callers.  The LEVEL argument is number of frames
25897     to scan up the call stack.  A value of `0' yields the return
25898     address of the current function, a value of `1' yields the return
25899     address of the caller of the current function, and so forth.  When
25900     inlining the expected behavior is that the function will return
25901     the address of the function that will be returned to.  To work
25902     around this behavior use the `noinline' function attribute.
25903
25904     The LEVEL argument must be a constant integer.
25905
25906     On some machines it may be impossible to determine the return
25907     address of any function other than the current one; in such cases,
25908     or when the top of the stack has been reached, this function will
25909     return `0' or a random value.  In addition,
25910     `__builtin_frame_address' may be used to determine if the top of
25911     the stack has been reached.
25912
25913     Additional post-processing of the returned value may be needed, see
25914     `__builtin_extract_return_address'.
25915
25916     This function should only be used with a nonzero argument for
25917     debugging purposes.
25918
25919 -- Built-in Function: void * __builtin_extract_return_address (void
25920          *ADDR)
25921     The address as returned by `__builtin_return_address' may have to
25922     be fed through this function to get the actual encoded address.
25923     For example, on the 31-bit S/390 platform the highest bit has to
25924     be masked out, or on SPARC platforms an offset has to be added for
25925     the true next instruction to be executed.
25926
25927     If no fixup is needed, this function simply passes through ADDR.
25928
25929 -- Built-in Function: void * __builtin_frob_return_address (void *ADDR)
25930     This function does the reverse of
25931     `__builtin_extract_return_address'.
25932
25933 -- Built-in Function: void * __builtin_frame_address (unsigned int
25934          LEVEL)
25935     This function is similar to `__builtin_return_address', but it
25936     returns the address of the function frame rather than the return
25937     address of the function.  Calling `__builtin_frame_address' with a
25938     value of `0' yields the frame address of the current function, a
25939     value of `1' yields the frame address of the caller of the current
25940     function, and so forth.
25941
25942     The frame is the area on the stack which holds local variables and
25943     saved registers.  The frame address is normally the address of the
25944     first word pushed on to the stack by the function.  However, the
25945     exact definition depends upon the processor and the calling
25946     convention.  If the processor has a dedicated frame pointer
25947     register, and the function has a frame, then
25948     `__builtin_frame_address' will return the value of the frame
25949     pointer register.
25950
25951     On some machines it may be impossible to determine the frame
25952     address of any function other than the current one; in such cases,
25953     or when the top of the stack has been reached, this function will
25954     return `0' if the first frame pointer is properly initialized by
25955     the startup code.
25956
25957     This function should only be used with a nonzero argument for
25958     debugging purposes.
25959
25960
25961File: gcc.info,  Node: Vector Extensions,  Next: Offsetof,  Prev: Return Address,  Up: C Extensions
25962
259636.49 Using vector instructions through built-in functions
25964=========================================================
25965
25966On some targets, the instruction set contains SIMD vector instructions
25967that operate on multiple values contained in one large register at the
25968same time.  For example, on the i386 the MMX, 3DNow! and SSE extensions
25969can be used this way.
25970
25971 The first step in using these extensions is to provide the necessary
25972data types.  This should be done using an appropriate `typedef':
25973
25974     typedef int v4si __attribute__ ((vector_size (16)));
25975
25976 The `int' type specifies the base type, while the attribute specifies
25977the vector size for the variable, measured in bytes.  For example, the
25978declaration above causes the compiler to set the mode for the `v4si'
25979type to be 16 bytes wide and divided into `int' sized units.  For a
2598032-bit `int' this means a vector of 4 units of 4 bytes, and the
25981corresponding mode of `foo' will be V4SI.
25982
25983 The `vector_size' attribute is only applicable to integral and float
25984scalars, although arrays, pointers, and function return values are
25985allowed in conjunction with this construct.
25986
25987 All the basic integer types can be used as base types, both as signed
25988and as unsigned: `char', `short', `int', `long', `long long'.  In
25989addition, `float' and `double' can be used to build floating-point
25990vector types.
25991
25992 Specifying a combination that is not valid for the current architecture
25993will cause GCC to synthesize the instructions using a narrower mode.
25994For example, if you specify a variable of type `V4SI' and your
25995architecture does not allow for this specific SIMD type, GCC will
25996produce code that uses 4 `SIs'.
25997
25998 The types defined in this manner can be used with a subset of normal C
25999operations.  Currently, GCC will allow using the following operators on
26000these types: `+, -, *, /, unary minus, ^, |, &, ~, %'.
26001
26002 The operations behave like C++ `valarrays'.  Addition is defined as
26003the addition of the corresponding elements of the operands.  For
26004example, in the code below, each of the 4 elements in A will be added
26005to the corresponding 4 elements in B and the resulting vector will be
26006stored in C.
26007
26008     typedef int v4si __attribute__ ((vector_size (16)));
26009
26010     v4si a, b, c;
26011
26012     c = a + b;
26013
26014 Subtraction, multiplication, division, and the logical operations
26015operate in a similar manner.  Likewise, the result of using the unary
26016minus or complement operators on a vector type is a vector whose
26017elements are the negative or complemented values of the corresponding
26018elements in the operand.
26019
26020 In C it is possible to use shifting operators `<<', `>>' on
26021integer-type vectors. The operation is defined as following: `{a0, a1,
26022..., an} >> {b0, b1, ..., bn} == {a0 >> b0, a1 >> b1, ..., an >> bn}'.
26023Vector operands must have the same number of elements.  Additionally
26024second operands can be a scalar integer in which case the scalar is
26025converted to the type used by the vector operand (with possible
26026truncation) and each element of this new vector is the scalar's value.
26027Consider the following code.
26028
26029     typedef int v4si __attribute__ ((vector_size (16)));
26030
26031     v4si a, b;
26032
26033     b = a >> 1;     /* b = a >> {1,1,1,1}; */
26034
26035 In C vectors can be subscripted as if the vector were an array with
26036the same number of elements and base type.  Out of bound accesses
26037invoke undefined behavior at runtime.  Warnings for out of bound
26038accesses for vector subscription can be enabled with `-Warray-bounds'.
26039
26040 You can declare variables and use them in function calls and returns,
26041as well as in assignments and some casts.  You can specify a vector
26042type as a return type for a function.  Vector types can also be used as
26043function arguments.  It is possible to cast from one vector type to
26044another, provided they are of the same size (in fact, you can also cast
26045vectors to and from other datatypes of the same size).
26046
26047 You cannot operate between vectors of different lengths or different
26048signedness without a cast.
26049
26050 A port that supports hardware vector operations, usually provides a set
26051of built-in functions that can be used to operate on vectors.  For
26052example, a function to add two vectors and multiply the result by a
26053third could look like this:
26054
26055     v4si f (v4si a, v4si b, v4si c)
26056     {
26057       v4si tmp = __builtin_addv4si (a, b);
26058       return __builtin_mulv4si (tmp, c);
26059     }
26060
26061
26062File: gcc.info,  Node: Offsetof,  Next: Atomic Builtins,  Prev: Vector Extensions,  Up: C Extensions
26063
260646.50 Offsetof
26065=============
26066
26067GCC implements for both C and C++ a syntactic extension to implement
26068the `offsetof' macro.
26069
26070     primary:
26071             "__builtin_offsetof" "(" `typename' "," offsetof_member_designator ")"
26072
26073     offsetof_member_designator:
26074               `identifier'
26075             | offsetof_member_designator "." `identifier'
26076             | offsetof_member_designator "[" `expr' "]"
26077
26078 This extension is sufficient such that
26079
26080     #define offsetof(TYPE, MEMBER)  __builtin_offsetof (TYPE, MEMBER)
26081
26082 is a suitable definition of the `offsetof' macro.  In C++, TYPE may be
26083dependent.  In either case, MEMBER may consist of a single identifier,
26084or a sequence of member accesses and array references.
26085
26086
26087File: gcc.info,  Node: Atomic Builtins,  Next: Object Size Checking,  Prev: Offsetof,  Up: C Extensions
26088
260896.51 Built-in functions for atomic memory access
26090================================================
26091
26092The following builtins are intended to be compatible with those
26093described in the `Intel Itanium Processor-specific Application Binary
26094Interface', section 7.4.  As such, they depart from the normal GCC
26095practice of using the "__builtin_" prefix, and further that they are
26096overloaded such that they work on multiple types.
26097
26098 The definition given in the Intel documentation allows only for the
26099use of the types `int', `long', `long long' as well as their unsigned
26100counterparts.  GCC will allow any integral scalar or pointer type that
26101is 1, 2, 4 or 8 bytes in length.
26102
26103 Not all operations are supported by all target processors.  If a
26104particular operation cannot be implemented on the target processor, a
26105warning will be generated and a call an external function will be
26106generated.  The external function will carry the same name as the
26107builtin, with an additional suffix `_N' where N is the size of the data
26108type.
26109
26110 In most cases, these builtins are considered a "full barrier".  That
26111is, no memory operand will be moved across the operation, either
26112forward or backward.  Further, instructions will be issued as necessary
26113to prevent the processor from speculating loads across the operation
26114and from queuing stores after the operation.
26115
26116 All of the routines are described in the Intel documentation to take
26117"an optional list of variables protected by the memory barrier".  It's
26118not clear what is meant by that; it could mean that _only_ the
26119following variables are protected, or it could mean that these variables
26120should in addition be protected.  At present GCC ignores this list and
26121protects all variables which are globally accessible.  If in the future
26122we make some use of this list, an empty list will continue to mean all
26123globally accessible variables.
26124
26125`TYPE __sync_fetch_and_add (TYPE *ptr, TYPE value, ...)'
26126`TYPE __sync_fetch_and_sub (TYPE *ptr, TYPE value, ...)'
26127`TYPE __sync_fetch_and_or (TYPE *ptr, TYPE value, ...)'
26128`TYPE __sync_fetch_and_and (TYPE *ptr, TYPE value, ...)'
26129`TYPE __sync_fetch_and_xor (TYPE *ptr, TYPE value, ...)'
26130`TYPE __sync_fetch_and_nand (TYPE *ptr, TYPE value, ...)'
26131     These builtins perform the operation suggested by the name, and
26132     returns the value that had previously been in memory.  That is,
26133
26134          { tmp = *ptr; *ptr OP= value; return tmp; }
26135          { tmp = *ptr; *ptr = ~(tmp & value); return tmp; }   // nand
26136
26137     _Note:_ GCC 4.4 and later implement `__sync_fetch_and_nand'
26138     builtin as `*ptr = ~(tmp & value)' instead of `*ptr = ~tmp &
26139     value'.
26140
26141`TYPE __sync_add_and_fetch (TYPE *ptr, TYPE value, ...)'
26142`TYPE __sync_sub_and_fetch (TYPE *ptr, TYPE value, ...)'
26143`TYPE __sync_or_and_fetch (TYPE *ptr, TYPE value, ...)'
26144`TYPE __sync_and_and_fetch (TYPE *ptr, TYPE value, ...)'
26145`TYPE __sync_xor_and_fetch (TYPE *ptr, TYPE value, ...)'
26146`TYPE __sync_nand_and_fetch (TYPE *ptr, TYPE value, ...)'
26147     These builtins perform the operation suggested by the name, and
26148     return the new value.  That is,
26149
26150          { *ptr OP= value; return *ptr; }
26151          { *ptr = ~(*ptr & value); return *ptr; }   // nand
26152
26153     _Note:_ GCC 4.4 and later implement `__sync_nand_and_fetch'
26154     builtin as `*ptr = ~(*ptr & value)' instead of `*ptr = ~*ptr &
26155     value'.
26156
26157`bool __sync_bool_compare_and_swap (TYPE *ptr, TYPE oldval TYPE newval, ...)'
26158`TYPE __sync_val_compare_and_swap (TYPE *ptr, TYPE oldval TYPE newval, ...)'
26159     These builtins perform an atomic compare and swap.  That is, if
26160     the current value of `*PTR' is OLDVAL, then write NEWVAL into
26161     `*PTR'.
26162
26163     The "bool" version returns true if the comparison is successful and
26164     NEWVAL was written.  The "val" version returns the contents of
26165     `*PTR' before the operation.
26166
26167`__sync_synchronize (...)'
26168     This builtin issues a full memory barrier.
26169
26170`TYPE __sync_lock_test_and_set (TYPE *ptr, TYPE value, ...)'
26171     This builtin, as described by Intel, is not a traditional
26172     test-and-set operation, but rather an atomic exchange operation.
26173     It writes VALUE into `*PTR', and returns the previous contents of
26174     `*PTR'.
26175
26176     Many targets have only minimal support for such locks, and do not
26177     support a full exchange operation.  In this case, a target may
26178     support reduced functionality here by which the _only_ valid value
26179     to store is the immediate constant 1.  The exact value actually
26180     stored in `*PTR' is implementation defined.
26181
26182     This builtin is not a full barrier, but rather an "acquire
26183     barrier".  This means that references after the builtin cannot
26184     move to (or be speculated to) before the builtin, but previous
26185     memory stores may not be globally visible yet, and previous memory
26186     loads may not yet be satisfied.
26187
26188`void __sync_lock_release (TYPE *ptr, ...)'
26189     This builtin releases the lock acquired by
26190     `__sync_lock_test_and_set'.  Normally this means writing the
26191     constant 0 to `*PTR'.
26192
26193     This builtin is not a full barrier, but rather a "release barrier".
26194     This means that all previous memory stores are globally visible,
26195     and all previous memory loads have been satisfied, but following
26196     memory reads are not prevented from being speculated to before the
26197     barrier.
26198
26199
26200File: gcc.info,  Node: Object Size Checking,  Next: Other Builtins,  Prev: Atomic Builtins,  Up: C Extensions
26201
262026.52 Object Size Checking Builtins
26203==================================
26204
26205GCC implements a limited buffer overflow protection mechanism that can
26206prevent some buffer overflow attacks.
26207
26208 -- Built-in Function: size_t __builtin_object_size (void * PTR, int
26209          TYPE)
26210     is a built-in construct that returns a constant number of bytes
26211     from PTR to the end of the object PTR pointer points to (if known
26212     at compile time).  `__builtin_object_size' never evaluates its
26213     arguments for side-effects.  If there are any side-effects in
26214     them, it returns `(size_t) -1' for TYPE 0 or 1 and `(size_t) 0'
26215     for TYPE 2 or 3.  If there are multiple objects PTR can point to
26216     and all of them are known at compile time, the returned number is
26217     the maximum of remaining byte counts in those objects if TYPE & 2
26218     is 0 and minimum if nonzero.  If it is not possible to determine
26219     which objects PTR points to at compile time,
26220     `__builtin_object_size' should return `(size_t) -1' for TYPE 0 or
26221     1 and `(size_t) 0' for TYPE 2 or 3.
26222
26223     TYPE is an integer constant from 0 to 3.  If the least significant
26224     bit is clear, objects are whole variables, if it is set, a closest
26225     surrounding subobject is considered the object a pointer points to.
26226     The second bit determines if maximum or minimum of remaining bytes
26227     is computed.
26228
26229          struct V { char buf1[10]; int b; char buf2[10]; } var;
26230          char *p = &var.buf1[1], *q = &var.b;
26231
26232          /* Here the object p points to is var.  */
26233          assert (__builtin_object_size (p, 0) == sizeof (var) - 1);
26234          /* The subobject p points to is var.buf1.  */
26235          assert (__builtin_object_size (p, 1) == sizeof (var.buf1) - 1);
26236          /* The object q points to is var.  */
26237          assert (__builtin_object_size (q, 0)
26238                  == (char *) (&var + 1) - (char *) &var.b);
26239          /* The subobject q points to is var.b.  */
26240          assert (__builtin_object_size (q, 1) == sizeof (var.b));
26241
26242 There are built-in functions added for many common string operation
26243functions, e.g., for `memcpy' `__builtin___memcpy_chk' built-in is
26244provided.  This built-in has an additional last argument, which is the
26245number of bytes remaining in object the DEST argument points to or
26246`(size_t) -1' if the size is not known.
26247
26248 The built-in functions are optimized into the normal string functions
26249like `memcpy' if the last argument is `(size_t) -1' or if it is known
26250at compile time that the destination object will not be overflown.  If
26251the compiler can determine at compile time the object will be always
26252overflown, it issues a warning.
26253
26254 The intended use can be e.g.
26255
26256     #undef memcpy
26257     #define bos0(dest) __builtin_object_size (dest, 0)
26258     #define memcpy(dest, src, n) \
26259       __builtin___memcpy_chk (dest, src, n, bos0 (dest))
26260
26261     char *volatile p;
26262     char buf[10];
26263     /* It is unknown what object p points to, so this is optimized
26264        into plain memcpy - no checking is possible.  */
26265     memcpy (p, "abcde", n);
26266     /* Destination is known and length too.  It is known at compile
26267        time there will be no overflow.  */
26268     memcpy (&buf[5], "abcde", 5);
26269     /* Destination is known, but the length is not known at compile time.
26270        This will result in __memcpy_chk call that can check for overflow
26271        at runtime.  */
26272     memcpy (&buf[5], "abcde", n);
26273     /* Destination is known and it is known at compile time there will
26274        be overflow.  There will be a warning and __memcpy_chk call that
26275        will abort the program at runtime.  */
26276     memcpy (&buf[6], "abcde", 5);
26277
26278 Such built-in functions are provided for `memcpy', `mempcpy',
26279`memmove', `memset', `strcpy', `stpcpy', `strncpy', `strcat' and
26280`strncat'.
26281
26282 There are also checking built-in functions for formatted output
26283functions.
26284     int __builtin___sprintf_chk (char *s, int flag, size_t os, const char *fmt, ...);
26285     int __builtin___snprintf_chk (char *s, size_t maxlen, int flag, size_t os,
26286                                   const char *fmt, ...);
26287     int __builtin___vsprintf_chk (char *s, int flag, size_t os, const char *fmt,
26288                                   va_list ap);
26289     int __builtin___vsnprintf_chk (char *s, size_t maxlen, int flag, size_t os,
26290                                    const char *fmt, va_list ap);
26291
26292 The added FLAG argument is passed unchanged to `__sprintf_chk' etc.
26293functions and can contain implementation specific flags on what
26294additional security measures the checking function might take, such as
26295handling `%n' differently.
26296
26297 The OS argument is the object size S points to, like in the other
26298built-in functions.  There is a small difference in the behavior
26299though, if OS is `(size_t) -1', the built-in functions are optimized
26300into the non-checking functions only if FLAG is 0, otherwise the
26301checking function is called with OS argument set to `(size_t) -1'.
26302
26303 In addition to this, there are checking built-in functions
26304`__builtin___printf_chk', `__builtin___vprintf_chk',
26305`__builtin___fprintf_chk' and `__builtin___vfprintf_chk'.  These have
26306just one additional argument, FLAG, right before format string FMT.  If
26307the compiler is able to optimize them to `fputc' etc. functions, it
26308will, otherwise the checking function should be called and the FLAG
26309argument passed to it.
26310
26311
26312File: gcc.info,  Node: Other Builtins,  Next: Target Builtins,  Prev: Object Size Checking,  Up: C Extensions
26313
263146.53 Other built-in functions provided by GCC
26315=============================================
26316
26317GCC provides a large number of built-in functions other than the ones
26318mentioned above.  Some of these are for internal use in the processing
26319of exceptions or variable-length argument lists and will not be
26320documented here because they may change from time to time; we do not
26321recommend general use of these functions.
26322
26323 The remaining functions are provided for optimization purposes.
26324
26325 GCC includes built-in versions of many of the functions in the standard
26326C library.  The versions prefixed with `__builtin_' will always be
26327treated as having the same meaning as the C library function even if you
26328specify the `-fno-builtin' option.  (*note C Dialect Options::) Many of
26329these functions are only optimized in certain cases; if they are not
26330optimized in a particular case, a call to the library function will be
26331emitted.
26332
26333 Outside strict ISO C mode (`-ansi', `-std=c90', `-std=c99' or
26334`-std=c1x'), the functions `_exit', `alloca', `bcmp', `bzero',
26335`dcgettext', `dgettext', `dremf', `dreml', `drem', `exp10f', `exp10l',
26336`exp10', `ffsll', `ffsl', `ffs', `fprintf_unlocked', `fputs_unlocked',
26337`gammaf', `gammal', `gamma', `gammaf_r', `gammal_r', `gamma_r',
26338`gettext', `index', `isascii', `j0f', `j0l', `j0', `j1f', `j1l', `j1',
26339`jnf', `jnl', `jn', `lgammaf_r', `lgammal_r', `lgamma_r', `mempcpy',
26340`pow10f', `pow10l', `pow10', `printf_unlocked', `rindex', `scalbf',
26341`scalbl', `scalb', `signbit', `signbitf', `signbitl', `signbitd32',
26342`signbitd64', `signbitd128', `significandf', `significandl',
26343`significand', `sincosf', `sincosl', `sincos', `stpcpy', `stpncpy',
26344`strcasecmp', `strdup', `strfmon', `strncasecmp', `strndup', `toascii',
26345`y0f', `y0l', `y0', `y1f', `y1l', `y1', `ynf', `ynl' and `yn' may be
26346handled as built-in functions.  All these functions have corresponding
26347versions prefixed with `__builtin_', which may be used even in strict
26348C90 mode.
26349
26350 The ISO C99 functions `_Exit', `acoshf', `acoshl', `acosh', `asinhf',
26351`asinhl', `asinh', `atanhf', `atanhl', `atanh', `cabsf', `cabsl',
26352`cabs', `cacosf', `cacoshf', `cacoshl', `cacosh', `cacosl', `cacos',
26353`cargf', `cargl', `carg', `casinf', `casinhf', `casinhl', `casinh',
26354`casinl', `casin', `catanf', `catanhf', `catanhl', `catanh', `catanl',
26355`catan', `cbrtf', `cbrtl', `cbrt', `ccosf', `ccoshf', `ccoshl',
26356`ccosh', `ccosl', `ccos', `cexpf', `cexpl', `cexp', `cimagf', `cimagl',
26357`cimag', `clogf', `clogl', `clog', `conjf', `conjl', `conj',
26358`copysignf', `copysignl', `copysign', `cpowf', `cpowl', `cpow',
26359`cprojf', `cprojl', `cproj', `crealf', `creall', `creal', `csinf',
26360`csinhf', `csinhl', `csinh', `csinl', `csin', `csqrtf', `csqrtl',
26361`csqrt', `ctanf', `ctanhf', `ctanhl', `ctanh', `ctanl', `ctan',
26362`erfcf', `erfcl', `erfc', `erff', `erfl', `erf', `exp2f', `exp2l',
26363`exp2', `expm1f', `expm1l', `expm1', `fdimf', `fdiml', `fdim', `fmaf',
26364`fmal', `fmaxf', `fmaxl', `fmax', `fma', `fminf', `fminl', `fmin',
26365`hypotf', `hypotl', `hypot', `ilogbf', `ilogbl', `ilogb', `imaxabs',
26366`isblank', `iswblank', `lgammaf', `lgammal', `lgamma', `llabs',
26367`llrintf', `llrintl', `llrint', `llroundf', `llroundl', `llround',
26368`log1pf', `log1pl', `log1p', `log2f', `log2l', `log2', `logbf',
26369`logbl', `logb', `lrintf', `lrintl', `lrint', `lroundf', `lroundl',
26370`lround', `nearbyintf', `nearbyintl', `nearbyint', `nextafterf',
26371`nextafterl', `nextafter', `nexttowardf', `nexttowardl', `nexttoward',
26372`remainderf', `remainderl', `remainder', `remquof', `remquol',
26373`remquo', `rintf', `rintl', `rint', `roundf', `roundl', `round',
26374`scalblnf', `scalblnl', `scalbln', `scalbnf', `scalbnl', `scalbn',
26375`snprintf', `tgammaf', `tgammal', `tgamma', `truncf', `truncl', `trunc',
26376`vfscanf', `vscanf', `vsnprintf' and `vsscanf' are handled as built-in
26377functions except in strict ISO C90 mode (`-ansi' or `-std=c90').
26378
26379 There are also built-in versions of the ISO C99 functions `acosf',
26380`acosl', `asinf', `asinl', `atan2f', `atan2l', `atanf', `atanl',
26381`ceilf', `ceill', `cosf', `coshf', `coshl', `cosl', `expf', `expl',
26382`fabsf', `fabsl', `floorf', `floorl', `fmodf', `fmodl', `frexpf',
26383`frexpl', `ldexpf', `ldexpl', `log10f', `log10l', `logf', `logl',
26384`modfl', `modf', `powf', `powl', `sinf', `sinhf', `sinhl', `sinl',
26385`sqrtf', `sqrtl', `tanf', `tanhf', `tanhl' and `tanl' that are
26386recognized in any mode since ISO C90 reserves these names for the
26387purpose to which ISO C99 puts them.  All these functions have
26388corresponding versions prefixed with `__builtin_'.
26389
26390 The ISO C94 functions `iswalnum', `iswalpha', `iswcntrl', `iswdigit',
26391`iswgraph', `iswlower', `iswprint', `iswpunct', `iswspace', `iswupper',
26392`iswxdigit', `towlower' and `towupper' are handled as built-in functions
26393except in strict ISO C90 mode (`-ansi' or `-std=c90').
26394
26395 The ISO C90 functions `abort', `abs', `acos', `asin', `atan2', `atan',
26396`calloc', `ceil', `cosh', `cos', `exit', `exp', `fabs', `floor', `fmod',
26397`fprintf', `fputs', `frexp', `fscanf', `isalnum', `isalpha', `iscntrl',
26398`isdigit', `isgraph', `islower', `isprint', `ispunct', `isspace',
26399`isupper', `isxdigit', `tolower', `toupper', `labs', `ldexp', `log10',
26400`log', `malloc', `memchr', `memcmp', `memcpy', `memset', `modf', `pow',
26401`printf', `putchar', `puts', `scanf', `sinh', `sin', `snprintf',
26402`sprintf', `sqrt', `sscanf', `strcat', `strchr', `strcmp', `strcpy',
26403`strcspn', `strlen', `strncat', `strncmp', `strncpy', `strpbrk',
26404`strrchr', `strspn', `strstr', `tanh', `tan', `vfprintf', `vprintf' and
26405`vsprintf' are all recognized as built-in functions unless
26406`-fno-builtin' is specified (or `-fno-builtin-FUNCTION' is specified
26407for an individual function).  All of these functions have corresponding
26408versions prefixed with `__builtin_'.
26409
26410 GCC provides built-in versions of the ISO C99 floating point comparison
26411macros that avoid raising exceptions for unordered operands.  They have
26412the same names as the standard macros ( `isgreater', `isgreaterequal',
26413`isless', `islessequal', `islessgreater', and `isunordered') , with
26414`__builtin_' prefixed.  We intend for a library implementor to be able
26415to simply `#define' each standard macro to its built-in equivalent.  In
26416the same fashion, GCC provides `fpclassify', `isfinite', `isinf_sign'
26417and `isnormal' built-ins used with `__builtin_' prefixed.  The `isinf'
26418and `isnan' builtins appear both with and without the `__builtin_'
26419prefix.
26420
26421 -- Built-in Function: int __builtin_types_compatible_p (TYPE1, TYPE2)
26422     You can use the built-in function `__builtin_types_compatible_p' to
26423     determine whether two types are the same.
26424
26425     This built-in function returns 1 if the unqualified versions of the
26426     types TYPE1 and TYPE2 (which are types, not expressions) are
26427     compatible, 0 otherwise.  The result of this built-in function can
26428     be used in integer constant expressions.
26429
26430     This built-in function ignores top level qualifiers (e.g., `const',
26431     `volatile').  For example, `int' is equivalent to `const int'.
26432
26433     The type `int[]' and `int[5]' are compatible.  On the other hand,
26434     `int' and `char *' are not compatible, even if the size of their
26435     types, on the particular architecture are the same.  Also, the
26436     amount of pointer indirection is taken into account when
26437     determining similarity.  Consequently, `short *' is not similar to
26438     `short **'.  Furthermore, two types that are typedefed are
26439     considered compatible if their underlying types are compatible.
26440
26441     An `enum' type is not considered to be compatible with another
26442     `enum' type even if both are compatible with the same integer
26443     type; this is what the C standard specifies.  For example, `enum
26444     {foo, bar}' is not similar to `enum {hot, dog}'.
26445
26446     You would typically use this function in code whose execution
26447     varies depending on the arguments' types.  For example:
26448
26449          #define foo(x)                                                  \
26450            ({                                                           \
26451              typeof (x) tmp = (x);                                       \
26452              if (__builtin_types_compatible_p (typeof (x), long double)) \
26453                tmp = foo_long_double (tmp);                              \
26454              else if (__builtin_types_compatible_p (typeof (x), double)) \
26455                tmp = foo_double (tmp);                                   \
26456              else if (__builtin_types_compatible_p (typeof (x), float))  \
26457                tmp = foo_float (tmp);                                    \
26458              else                                                        \
26459                abort ();                                                 \
26460              tmp;                                                        \
26461            })
26462
26463     _Note:_ This construct is only available for C.
26464
26465
26466 -- Built-in Function: TYPE __builtin_choose_expr (CONST_EXP, EXP1,
26467          EXP2)
26468     You can use the built-in function `__builtin_choose_expr' to
26469     evaluate code depending on the value of a constant expression.
26470     This built-in function returns EXP1 if CONST_EXP, which is an
26471     integer constant expression, is nonzero.  Otherwise it returns
26472     EXP2.
26473
26474     This built-in function is analogous to the `? :' operator in C,
26475     except that the expression returned has its type unaltered by
26476     promotion rules.  Also, the built-in function does not evaluate
26477     the expression that was not chosen.  For example, if CONST_EXP
26478     evaluates to true, EXP2 is not evaluated even if it has
26479     side-effects.
26480
26481     This built-in function can return an lvalue if the chosen argument
26482     is an lvalue.
26483
26484     If EXP1 is returned, the return type is the same as EXP1's type.
26485     Similarly, if EXP2 is returned, its return type is the same as
26486     EXP2.
26487
26488     Example:
26489
26490          #define foo(x)                                                    \
26491            __builtin_choose_expr (                                         \
26492              __builtin_types_compatible_p (typeof (x), double),            \
26493              foo_double (x),                                               \
26494              __builtin_choose_expr (                                       \
26495                __builtin_types_compatible_p (typeof (x), float),           \
26496                foo_float (x),                                              \
26497                /* The void expression results in a compile-time error  \
26498                   when assigning the result to something.  */          \
26499                (void)0))
26500
26501     _Note:_ This construct is only available for C.  Furthermore, the
26502     unused expression (EXP1 or EXP2 depending on the value of
26503     CONST_EXP) may still generate syntax errors.  This may change in
26504     future revisions.
26505
26506
26507 -- Built-in Function: int __builtin_constant_p (EXP)
26508     You can use the built-in function `__builtin_constant_p' to
26509     determine if a value is known to be constant at compile-time and
26510     hence that GCC can perform constant-folding on expressions
26511     involving that value.  The argument of the function is the value
26512     to test.  The function returns the integer 1 if the argument is
26513     known to be a compile-time constant and 0 if it is not known to be
26514     a compile-time constant.  A return of 0 does not indicate that the
26515     value is _not_ a constant, but merely that GCC cannot prove it is
26516     a constant with the specified value of the `-O' option.
26517
26518     You would typically use this function in an embedded application
26519     where memory was a critical resource.  If you have some complex
26520     calculation, you may want it to be folded if it involves
26521     constants, but need to call a function if it does not.  For
26522     example:
26523
26524          #define Scale_Value(X)      \
26525            (__builtin_constant_p (X) \
26526            ? ((X) * SCALE + OFFSET) : Scale (X))
26527
26528     You may use this built-in function in either a macro or an inline
26529     function.  However, if you use it in an inlined function and pass
26530     an argument of the function as the argument to the built-in, GCC
26531     will never return 1 when you call the inline function with a
26532     string constant or compound literal (*note Compound Literals::)
26533     and will not return 1 when you pass a constant numeric value to
26534     the inline function unless you specify the `-O' option.
26535
26536     You may also use `__builtin_constant_p' in initializers for static
26537     data.  For instance, you can write
26538
26539          static const int table[] = {
26540             __builtin_constant_p (EXPRESSION) ? (EXPRESSION) : -1,
26541             /* ... */
26542          };
26543
26544     This is an acceptable initializer even if EXPRESSION is not a
26545     constant expression, including the case where
26546     `__builtin_constant_p' returns 1 because EXPRESSION can be folded
26547     to a constant but EXPRESSION contains operands that would not
26548     otherwise be permitted in a static initializer (for example, `0 &&
26549     foo ()').  GCC must be more conservative about evaluating the
26550     built-in in this case, because it has no opportunity to perform
26551     optimization.
26552
26553     Previous versions of GCC did not accept this built-in in data
26554     initializers.  The earliest version where it is completely safe is
26555     3.0.1.
26556
26557 -- Built-in Function: long __builtin_expect (long EXP, long C)
26558     You may use `__builtin_expect' to provide the compiler with branch
26559     prediction information.  In general, you should prefer to use
26560     actual profile feedback for this (`-fprofile-arcs'), as
26561     programmers are notoriously bad at predicting how their programs
26562     actually perform.  However, there are applications in which this
26563     data is hard to collect.
26564
26565     The return value is the value of EXP, which should be an integral
26566     expression.  The semantics of the built-in are that it is expected
26567     that EXP == C.  For example:
26568
26569          if (__builtin_expect (x, 0))
26570            foo ();
26571
26572     would indicate that we do not expect to call `foo', since we
26573     expect `x' to be zero.  Since you are limited to integral
26574     expressions for EXP, you should use constructions such as
26575
26576          if (__builtin_expect (ptr != NULL, 1))
26577            error ();
26578
26579     when testing pointer or floating-point values.
26580
26581 -- Built-in Function: void __builtin_trap (void)
26582     This function causes the program to exit abnormally.  GCC
26583     implements this function by using a target-dependent mechanism
26584     (such as intentionally executing an illegal instruction) or by
26585     calling `abort'.  The mechanism used may vary from release to
26586     release so you should not rely on any particular implementation.
26587
26588 -- Built-in Function: void __builtin_unreachable (void)
26589     If control flow reaches the point of the `__builtin_unreachable',
26590     the program is undefined.  It is useful in situations where the
26591     compiler cannot deduce the unreachability of the code.
26592
26593     One such case is immediately following an `asm' statement that
26594     will either never terminate, or one that transfers control
26595     elsewhere and never returns.  In this example, without the
26596     `__builtin_unreachable', GCC would issue a warning that control
26597     reaches the end of a non-void function.  It would also generate
26598     code to return after the `asm'.
26599
26600          int f (int c, int v)
26601          {
26602            if (c)
26603              {
26604                return v;
26605              }
26606            else
26607              {
26608                asm("jmp error_handler");
26609                __builtin_unreachable ();
26610              }
26611          }
26612
26613     Because the `asm' statement unconditionally transfers control out
26614     of the function, control will never reach the end of the function
26615     body.  The `__builtin_unreachable' is in fact unreachable and
26616     communicates this fact to the compiler.
26617
26618     Another use for `__builtin_unreachable' is following a call a
26619     function that never returns but that is not declared
26620     `__attribute__((noreturn))', as in this example:
26621
26622          void function_that_never_returns (void);
26623
26624          int g (int c)
26625          {
26626            if (c)
26627              {
26628                return 1;
26629              }
26630            else
26631              {
26632                function_that_never_returns ();
26633                __builtin_unreachable ();
26634              }
26635          }
26636
26637
26638 -- Built-in Function: void __builtin___clear_cache (char *BEGIN, char
26639          *END)
26640     This function is used to flush the processor's instruction cache
26641     for the region of memory between BEGIN inclusive and END
26642     exclusive.  Some targets require that the instruction cache be
26643     flushed, after modifying memory containing code, in order to obtain
26644     deterministic behavior.
26645
26646     If the target does not require instruction cache flushes,
26647     `__builtin___clear_cache' has no effect.  Otherwise either
26648     instructions are emitted in-line to clear the instruction cache or
26649     a call to the `__clear_cache' function in libgcc is made.
26650
26651 -- Built-in Function: void __builtin_prefetch (const void *ADDR, ...)
26652     This function is used to minimize cache-miss latency by moving
26653     data into a cache before it is accessed.  You can insert calls to
26654     `__builtin_prefetch' into code for which you know addresses of
26655     data in memory that is likely to be accessed soon.  If the target
26656     supports them, data prefetch instructions will be generated.  If
26657     the prefetch is done early enough before the access then the data
26658     will be in the cache by the time it is accessed.
26659
26660     The value of ADDR is the address of the memory to prefetch.  There
26661     are two optional arguments, RW and LOCALITY.  The value of RW is a
26662     compile-time constant one or zero; one means that the prefetch is
26663     preparing for a write to the memory address and zero, the default,
26664     means that the prefetch is preparing for a read.  The value
26665     LOCALITY must be a compile-time constant integer between zero and
26666     three.  A value of zero means that the data has no temporal
26667     locality, so it need not be left in the cache after the access.  A
26668     value of three means that the data has a high degree of temporal
26669     locality and should be left in all levels of cache possible.
26670     Values of one and two mean, respectively, a low or moderate degree
26671     of temporal locality.  The default is three.
26672
26673          for (i = 0; i < n; i++)
26674            {
26675              a[i] = a[i] + b[i];
26676              __builtin_prefetch (&a[i+j], 1, 1);
26677              __builtin_prefetch (&b[i+j], 0, 1);
26678              /* ... */
26679            }
26680
26681     Data prefetch does not generate faults if ADDR is invalid, but the
26682     address expression itself must be valid.  For example, a prefetch
26683     of `p->next' will not fault if `p->next' is not a valid address,
26684     but evaluation will fault if `p' is not a valid address.
26685
26686     If the target does not support data prefetch, the address
26687     expression is evaluated if it includes side effects but no other
26688     code is generated and GCC does not issue a warning.
26689
26690 -- Built-in Function: double __builtin_huge_val (void)
26691     Returns a positive infinity, if supported by the floating-point
26692     format, else `DBL_MAX'.  This function is suitable for
26693     implementing the ISO C macro `HUGE_VAL'.
26694
26695 -- Built-in Function: float __builtin_huge_valf (void)
26696     Similar to `__builtin_huge_val', except the return type is `float'.
26697
26698 -- Built-in Function: long double __builtin_huge_vall (void)
26699     Similar to `__builtin_huge_val', except the return type is `long
26700     double'.
26701
26702 -- Built-in Function: int __builtin_fpclassify (int, int, int, int,
26703          int, ...)
26704     This built-in implements the C99 fpclassify functionality.  The
26705     first five int arguments should be the target library's notion of
26706     the possible FP classes and are used for return values.  They must
26707     be constant values and they must appear in this order: `FP_NAN',
26708     `FP_INFINITE', `FP_NORMAL', `FP_SUBNORMAL' and `FP_ZERO'.  The
26709     ellipsis is for exactly one floating point value to classify.  GCC
26710     treats the last argument as type-generic, which means it does not
26711     do default promotion from float to double.
26712
26713 -- Built-in Function: double __builtin_inf (void)
26714     Similar to `__builtin_huge_val', except a warning is generated if
26715     the target floating-point format does not support infinities.
26716
26717 -- Built-in Function: _Decimal32 __builtin_infd32 (void)
26718     Similar to `__builtin_inf', except the return type is `_Decimal32'.
26719
26720 -- Built-in Function: _Decimal64 __builtin_infd64 (void)
26721     Similar to `__builtin_inf', except the return type is `_Decimal64'.
26722
26723 -- Built-in Function: _Decimal128 __builtin_infd128 (void)
26724     Similar to `__builtin_inf', except the return type is
26725     `_Decimal128'.
26726
26727 -- Built-in Function: float __builtin_inff (void)
26728     Similar to `__builtin_inf', except the return type is `float'.
26729     This function is suitable for implementing the ISO C99 macro
26730     `INFINITY'.
26731
26732 -- Built-in Function: long double __builtin_infl (void)
26733     Similar to `__builtin_inf', except the return type is `long
26734     double'.
26735
26736 -- Built-in Function: int __builtin_isinf_sign (...)
26737     Similar to `isinf', except the return value will be negative for
26738     an argument of `-Inf'.  Note while the parameter list is an
26739     ellipsis, this function only accepts exactly one floating point
26740     argument.  GCC treats this parameter as type-generic, which means
26741     it does not do default promotion from float to double.
26742
26743 -- Built-in Function: double __builtin_nan (const char *str)
26744     This is an implementation of the ISO C99 function `nan'.
26745
26746     Since ISO C99 defines this function in terms of `strtod', which we
26747     do not implement, a description of the parsing is in order.  The
26748     string is parsed as by `strtol'; that is, the base is recognized by
26749     leading `0' or `0x' prefixes.  The number parsed is placed in the
26750     significand such that the least significant bit of the number is
26751     at the least significant bit of the significand.  The number is
26752     truncated to fit the significand field provided.  The significand
26753     is forced to be a quiet NaN.
26754
26755     This function, if given a string literal all of which would have
26756     been consumed by strtol, is evaluated early enough that it is
26757     considered a compile-time constant.
26758
26759 -- Built-in Function: _Decimal32 __builtin_nand32 (const char *str)
26760     Similar to `__builtin_nan', except the return type is `_Decimal32'.
26761
26762 -- Built-in Function: _Decimal64 __builtin_nand64 (const char *str)
26763     Similar to `__builtin_nan', except the return type is `_Decimal64'.
26764
26765 -- Built-in Function: _Decimal128 __builtin_nand128 (const char *str)
26766     Similar to `__builtin_nan', except the return type is
26767     `_Decimal128'.
26768
26769 -- Built-in Function: float __builtin_nanf (const char *str)
26770     Similar to `__builtin_nan', except the return type is `float'.
26771
26772 -- Built-in Function: long double __builtin_nanl (const char *str)
26773     Similar to `__builtin_nan', except the return type is `long
26774     double'.
26775
26776 -- Built-in Function: double __builtin_nans (const char *str)
26777     Similar to `__builtin_nan', except the significand is forced to be
26778     a signaling NaN.  The `nans' function is proposed by WG14 N965.
26779
26780 -- Built-in Function: float __builtin_nansf (const char *str)
26781     Similar to `__builtin_nans', except the return type is `float'.
26782
26783 -- Built-in Function: long double __builtin_nansl (const char *str)
26784     Similar to `__builtin_nans', except the return type is `long
26785     double'.
26786
26787 -- Built-in Function: int __builtin_ffs (unsigned int x)
26788     Returns one plus the index of the least significant 1-bit of X, or
26789     if X is zero, returns zero.
26790
26791 -- Built-in Function: int __builtin_clz (unsigned int x)
26792     Returns the number of leading 0-bits in X, starting at the most
26793     significant bit position.  If X is 0, the result is undefined.
26794
26795 -- Built-in Function: int __builtin_ctz (unsigned int x)
26796     Returns the number of trailing 0-bits in X, starting at the least
26797     significant bit position.  If X is 0, the result is undefined.
26798
26799 -- Built-in Function: int __builtin_popcount (unsigned int x)
26800     Returns the number of 1-bits in X.
26801
26802 -- Built-in Function: int __builtin_parity (unsigned int x)
26803     Returns the parity of X, i.e. the number of 1-bits in X modulo 2.
26804
26805 -- Built-in Function: int __builtin_ffsl (unsigned long)
26806     Similar to `__builtin_ffs', except the argument type is `unsigned
26807     long'.
26808
26809 -- Built-in Function: int __builtin_clzl (unsigned long)
26810     Similar to `__builtin_clz', except the argument type is `unsigned
26811     long'.
26812
26813 -- Built-in Function: int __builtin_ctzl (unsigned long)
26814     Similar to `__builtin_ctz', except the argument type is `unsigned
26815     long'.
26816
26817 -- Built-in Function: int __builtin_popcountl (unsigned long)
26818     Similar to `__builtin_popcount', except the argument type is
26819     `unsigned long'.
26820
26821 -- Built-in Function: int __builtin_parityl (unsigned long)
26822     Similar to `__builtin_parity', except the argument type is
26823     `unsigned long'.
26824
26825 -- Built-in Function: int __builtin_ffsll (unsigned long long)
26826     Similar to `__builtin_ffs', except the argument type is `unsigned
26827     long long'.
26828
26829 -- Built-in Function: int __builtin_clzll (unsigned long long)
26830     Similar to `__builtin_clz', except the argument type is `unsigned
26831     long long'.
26832
26833 -- Built-in Function: int __builtin_ctzll (unsigned long long)
26834     Similar to `__builtin_ctz', except the argument type is `unsigned
26835     long long'.
26836
26837 -- Built-in Function: int __builtin_popcountll (unsigned long long)
26838     Similar to `__builtin_popcount', except the argument type is
26839     `unsigned long long'.
26840
26841 -- Built-in Function: int __builtin_parityll (unsigned long long)
26842     Similar to `__builtin_parity', except the argument type is
26843     `unsigned long long'.
26844
26845 -- Built-in Function: double __builtin_powi (double, int)
26846     Returns the first argument raised to the power of the second.
26847     Unlike the `pow' function no guarantees about precision and
26848     rounding are made.
26849
26850 -- Built-in Function: float __builtin_powif (float, int)
26851     Similar to `__builtin_powi', except the argument and return types
26852     are `float'.
26853
26854 -- Built-in Function: long double __builtin_powil (long double, int)
26855     Similar to `__builtin_powi', except the argument and return types
26856     are `long double'.
26857
26858 -- Built-in Function: int32_t __builtin_bswap32 (int32_t x)
26859     Returns X with the order of the bytes reversed; for example,
26860     `0xaabbccdd' becomes `0xddccbbaa'.  Byte here always means exactly
26861     8 bits.
26862
26863 -- Built-in Function: int64_t __builtin_bswap64 (int64_t x)
26864     Similar to `__builtin_bswap32', except the argument and return
26865     types are 64-bit.
26866
26867
26868File: gcc.info,  Node: Target Builtins,  Next: Target Format Checks,  Prev: Other Builtins,  Up: C Extensions
26869
268706.54 Built-in Functions Specific to Particular Target Machines
26871==============================================================
26872
26873On some target machines, GCC supports many built-in functions specific
26874to those machines.  Generally these generate calls to specific machine
26875instructions, but allow the compiler to schedule those calls.
26876
26877* Menu:
26878
26879* Alpha Built-in Functions::
26880* ARM iWMMXt Built-in Functions::
26881* ARM NEON Intrinsics::
26882* Blackfin Built-in Functions::
26883* FR-V Built-in Functions::
26884* X86 Built-in Functions::
26885* MIPS DSP Built-in Functions::
26886* MIPS Paired-Single Support::
26887* MIPS Loongson Built-in Functions::
26888* Other MIPS Built-in Functions::
26889* picoChip Built-in Functions::
26890* PowerPC AltiVec/VSX Built-in Functions::
26891* RX Built-in Functions::
26892* SPARC VIS Built-in Functions::
26893* SPU Built-in Functions::
26894
26895
26896File: gcc.info,  Node: Alpha Built-in Functions,  Next: ARM iWMMXt Built-in Functions,  Up: Target Builtins
26897
268986.54.1 Alpha Built-in Functions
26899-------------------------------
26900
26901These built-in functions are available for the Alpha family of
26902processors, depending on the command-line switches used.
26903
26904 The following built-in functions are always available.  They all
26905generate the machine instruction that is part of the name.
26906
26907     long __builtin_alpha_implver (void)
26908     long __builtin_alpha_rpcc (void)
26909     long __builtin_alpha_amask (long)
26910     long __builtin_alpha_cmpbge (long, long)
26911     long __builtin_alpha_extbl (long, long)
26912     long __builtin_alpha_extwl (long, long)
26913     long __builtin_alpha_extll (long, long)
26914     long __builtin_alpha_extql (long, long)
26915     long __builtin_alpha_extwh (long, long)
26916     long __builtin_alpha_extlh (long, long)
26917     long __builtin_alpha_extqh (long, long)
26918     long __builtin_alpha_insbl (long, long)
26919     long __builtin_alpha_inswl (long, long)
26920     long __builtin_alpha_insll (long, long)
26921     long __builtin_alpha_insql (long, long)
26922     long __builtin_alpha_inswh (long, long)
26923     long __builtin_alpha_inslh (long, long)
26924     long __builtin_alpha_insqh (long, long)
26925     long __builtin_alpha_mskbl (long, long)
26926     long __builtin_alpha_mskwl (long, long)
26927     long __builtin_alpha_mskll (long, long)
26928     long __builtin_alpha_mskql (long, long)
26929     long __builtin_alpha_mskwh (long, long)
26930     long __builtin_alpha_msklh (long, long)
26931     long __builtin_alpha_mskqh (long, long)
26932     long __builtin_alpha_umulh (long, long)
26933     long __builtin_alpha_zap (long, long)
26934     long __builtin_alpha_zapnot (long, long)
26935
26936 The following built-in functions are always with `-mmax' or
26937`-mcpu=CPU' where CPU is `pca56' or later.  They all generate the
26938machine instruction that is part of the name.
26939
26940     long __builtin_alpha_pklb (long)
26941     long __builtin_alpha_pkwb (long)
26942     long __builtin_alpha_unpkbl (long)
26943     long __builtin_alpha_unpkbw (long)
26944     long __builtin_alpha_minub8 (long, long)
26945     long __builtin_alpha_minsb8 (long, long)
26946     long __builtin_alpha_minuw4 (long, long)
26947     long __builtin_alpha_minsw4 (long, long)
26948     long __builtin_alpha_maxub8 (long, long)
26949     long __builtin_alpha_maxsb8 (long, long)
26950     long __builtin_alpha_maxuw4 (long, long)
26951     long __builtin_alpha_maxsw4 (long, long)
26952     long __builtin_alpha_perr (long, long)
26953
26954 The following built-in functions are always with `-mcix' or
26955`-mcpu=CPU' where CPU is `ev67' or later.  They all generate the
26956machine instruction that is part of the name.
26957
26958     long __builtin_alpha_cttz (long)
26959     long __builtin_alpha_ctlz (long)
26960     long __builtin_alpha_ctpop (long)
26961
26962 The following builtins are available on systems that use the OSF/1
26963PALcode.  Normally they invoke the `rduniq' and `wruniq' PAL calls, but
26964when invoked with `-mtls-kernel', they invoke `rdval' and `wrval'.
26965
26966     void *__builtin_thread_pointer (void)
26967     void __builtin_set_thread_pointer (void *)
26968
26969
26970File: gcc.info,  Node: ARM iWMMXt Built-in Functions,  Next: ARM NEON Intrinsics,  Prev: Alpha Built-in Functions,  Up: Target Builtins
26971
269726.54.2 ARM iWMMXt Built-in Functions
26973------------------------------------
26974
26975These built-in functions are available for the ARM family of processors
26976when the `-mcpu=iwmmxt' switch is used:
26977
26978     typedef int v2si __attribute__ ((vector_size (8)));
26979     typedef short v4hi __attribute__ ((vector_size (8)));
26980     typedef char v8qi __attribute__ ((vector_size (8)));
26981
26982     int __builtin_arm_getwcx (int)
26983     void __builtin_arm_setwcx (int, int)
26984     int __builtin_arm_textrmsb (v8qi, int)
26985     int __builtin_arm_textrmsh (v4hi, int)
26986     int __builtin_arm_textrmsw (v2si, int)
26987     int __builtin_arm_textrmub (v8qi, int)
26988     int __builtin_arm_textrmuh (v4hi, int)
26989     int __builtin_arm_textrmuw (v2si, int)
26990     v8qi __builtin_arm_tinsrb (v8qi, int)
26991     v4hi __builtin_arm_tinsrh (v4hi, int)
26992     v2si __builtin_arm_tinsrw (v2si, int)
26993     long long __builtin_arm_tmia (long long, int, int)
26994     long long __builtin_arm_tmiabb (long long, int, int)
26995     long long __builtin_arm_tmiabt (long long, int, int)
26996     long long __builtin_arm_tmiaph (long long, int, int)
26997     long long __builtin_arm_tmiatb (long long, int, int)
26998     long long __builtin_arm_tmiatt (long long, int, int)
26999     int __builtin_arm_tmovmskb (v8qi)
27000     int __builtin_arm_tmovmskh (v4hi)
27001     int __builtin_arm_tmovmskw (v2si)
27002     long long __builtin_arm_waccb (v8qi)
27003     long long __builtin_arm_wacch (v4hi)
27004     long long __builtin_arm_waccw (v2si)
27005     v8qi __builtin_arm_waddb (v8qi, v8qi)
27006     v8qi __builtin_arm_waddbss (v8qi, v8qi)
27007     v8qi __builtin_arm_waddbus (v8qi, v8qi)
27008     v4hi __builtin_arm_waddh (v4hi, v4hi)
27009     v4hi __builtin_arm_waddhss (v4hi, v4hi)
27010     v4hi __builtin_arm_waddhus (v4hi, v4hi)
27011     v2si __builtin_arm_waddw (v2si, v2si)
27012     v2si __builtin_arm_waddwss (v2si, v2si)
27013     v2si __builtin_arm_waddwus (v2si, v2si)
27014     v8qi __builtin_arm_walign (v8qi, v8qi, int)
27015     long long __builtin_arm_wand(long long, long long)
27016     long long __builtin_arm_wandn (long long, long long)
27017     v8qi __builtin_arm_wavg2b (v8qi, v8qi)
27018     v8qi __builtin_arm_wavg2br (v8qi, v8qi)
27019     v4hi __builtin_arm_wavg2h (v4hi, v4hi)
27020     v4hi __builtin_arm_wavg2hr (v4hi, v4hi)
27021     v8qi __builtin_arm_wcmpeqb (v8qi, v8qi)
27022     v4hi __builtin_arm_wcmpeqh (v4hi, v4hi)
27023     v2si __builtin_arm_wcmpeqw (v2si, v2si)
27024     v8qi __builtin_arm_wcmpgtsb (v8qi, v8qi)
27025     v4hi __builtin_arm_wcmpgtsh (v4hi, v4hi)
27026     v2si __builtin_arm_wcmpgtsw (v2si, v2si)
27027     v8qi __builtin_arm_wcmpgtub (v8qi, v8qi)
27028     v4hi __builtin_arm_wcmpgtuh (v4hi, v4hi)
27029     v2si __builtin_arm_wcmpgtuw (v2si, v2si)
27030     long long __builtin_arm_wmacs (long long, v4hi, v4hi)
27031     long long __builtin_arm_wmacsz (v4hi, v4hi)
27032     long long __builtin_arm_wmacu (long long, v4hi, v4hi)
27033     long long __builtin_arm_wmacuz (v4hi, v4hi)
27034     v4hi __builtin_arm_wmadds (v4hi, v4hi)
27035     v4hi __builtin_arm_wmaddu (v4hi, v4hi)
27036     v8qi __builtin_arm_wmaxsb (v8qi, v8qi)
27037     v4hi __builtin_arm_wmaxsh (v4hi, v4hi)
27038     v2si __builtin_arm_wmaxsw (v2si, v2si)
27039     v8qi __builtin_arm_wmaxub (v8qi, v8qi)
27040     v4hi __builtin_arm_wmaxuh (v4hi, v4hi)
27041     v2si __builtin_arm_wmaxuw (v2si, v2si)
27042     v8qi __builtin_arm_wminsb (v8qi, v8qi)
27043     v4hi __builtin_arm_wminsh (v4hi, v4hi)
27044     v2si __builtin_arm_wminsw (v2si, v2si)
27045     v8qi __builtin_arm_wminub (v8qi, v8qi)
27046     v4hi __builtin_arm_wminuh (v4hi, v4hi)
27047     v2si __builtin_arm_wminuw (v2si, v2si)
27048     v4hi __builtin_arm_wmulsm (v4hi, v4hi)
27049     v4hi __builtin_arm_wmulul (v4hi, v4hi)
27050     v4hi __builtin_arm_wmulum (v4hi, v4hi)
27051     long long __builtin_arm_wor (long long, long long)
27052     v2si __builtin_arm_wpackdss (long long, long long)
27053     v2si __builtin_arm_wpackdus (long long, long long)
27054     v8qi __builtin_arm_wpackhss (v4hi, v4hi)
27055     v8qi __builtin_arm_wpackhus (v4hi, v4hi)
27056     v4hi __builtin_arm_wpackwss (v2si, v2si)
27057     v4hi __builtin_arm_wpackwus (v2si, v2si)
27058     long long __builtin_arm_wrord (long long, long long)
27059     long long __builtin_arm_wrordi (long long, int)
27060     v4hi __builtin_arm_wrorh (v4hi, long long)
27061     v4hi __builtin_arm_wrorhi (v4hi, int)
27062     v2si __builtin_arm_wrorw (v2si, long long)
27063     v2si __builtin_arm_wrorwi (v2si, int)
27064     v2si __builtin_arm_wsadb (v8qi, v8qi)
27065     v2si __builtin_arm_wsadbz (v8qi, v8qi)
27066     v2si __builtin_arm_wsadh (v4hi, v4hi)
27067     v2si __builtin_arm_wsadhz (v4hi, v4hi)
27068     v4hi __builtin_arm_wshufh (v4hi, int)
27069     long long __builtin_arm_wslld (long long, long long)
27070     long long __builtin_arm_wslldi (long long, int)
27071     v4hi __builtin_arm_wsllh (v4hi, long long)
27072     v4hi __builtin_arm_wsllhi (v4hi, int)
27073     v2si __builtin_arm_wsllw (v2si, long long)
27074     v2si __builtin_arm_wsllwi (v2si, int)
27075     long long __builtin_arm_wsrad (long long, long long)
27076     long long __builtin_arm_wsradi (long long, int)
27077     v4hi __builtin_arm_wsrah (v4hi, long long)
27078     v4hi __builtin_arm_wsrahi (v4hi, int)
27079     v2si __builtin_arm_wsraw (v2si, long long)
27080     v2si __builtin_arm_wsrawi (v2si, int)
27081     long long __builtin_arm_wsrld (long long, long long)
27082     long long __builtin_arm_wsrldi (long long, int)
27083     v4hi __builtin_arm_wsrlh (v4hi, long long)
27084     v4hi __builtin_arm_wsrlhi (v4hi, int)
27085     v2si __builtin_arm_wsrlw (v2si, long long)
27086     v2si __builtin_arm_wsrlwi (v2si, int)
27087     v8qi __builtin_arm_wsubb (v8qi, v8qi)
27088     v8qi __builtin_arm_wsubbss (v8qi, v8qi)
27089     v8qi __builtin_arm_wsubbus (v8qi, v8qi)
27090     v4hi __builtin_arm_wsubh (v4hi, v4hi)
27091     v4hi __builtin_arm_wsubhss (v4hi, v4hi)
27092     v4hi __builtin_arm_wsubhus (v4hi, v4hi)
27093     v2si __builtin_arm_wsubw (v2si, v2si)
27094     v2si __builtin_arm_wsubwss (v2si, v2si)
27095     v2si __builtin_arm_wsubwus (v2si, v2si)
27096     v4hi __builtin_arm_wunpckehsb (v8qi)
27097     v2si __builtin_arm_wunpckehsh (v4hi)
27098     long long __builtin_arm_wunpckehsw (v2si)
27099     v4hi __builtin_arm_wunpckehub (v8qi)
27100     v2si __builtin_arm_wunpckehuh (v4hi)
27101     long long __builtin_arm_wunpckehuw (v2si)
27102     v4hi __builtin_arm_wunpckelsb (v8qi)
27103     v2si __builtin_arm_wunpckelsh (v4hi)
27104     long long __builtin_arm_wunpckelsw (v2si)
27105     v4hi __builtin_arm_wunpckelub (v8qi)
27106     v2si __builtin_arm_wunpckeluh (v4hi)
27107     long long __builtin_arm_wunpckeluw (v2si)
27108     v8qi __builtin_arm_wunpckihb (v8qi, v8qi)
27109     v4hi __builtin_arm_wunpckihh (v4hi, v4hi)
27110     v2si __builtin_arm_wunpckihw (v2si, v2si)
27111     v8qi __builtin_arm_wunpckilb (v8qi, v8qi)
27112     v4hi __builtin_arm_wunpckilh (v4hi, v4hi)
27113     v2si __builtin_arm_wunpckilw (v2si, v2si)
27114     long long __builtin_arm_wxor (long long, long long)
27115     long long __builtin_arm_wzero ()
27116
27117
27118File: gcc.info,  Node: ARM NEON Intrinsics,  Next: Blackfin Built-in Functions,  Prev: ARM iWMMXt Built-in Functions,  Up: Target Builtins
27119
271206.54.3 ARM NEON Intrinsics
27121--------------------------
27122
27123These built-in intrinsics for the ARM Advanced SIMD extension are
27124available when the `-mfpu=neon' switch is used:
27125
271266.54.3.1 Addition
27127.................
27128
27129   * uint32x2_t vadd_u32 (uint32x2_t, uint32x2_t)
27130     _Form of expected instruction(s):_ `vadd.i32 D0, D0, D0'
27131
27132   * uint16x4_t vadd_u16 (uint16x4_t, uint16x4_t)
27133     _Form of expected instruction(s):_ `vadd.i16 D0, D0, D0'
27134
27135   * uint8x8_t vadd_u8 (uint8x8_t, uint8x8_t)
27136     _Form of expected instruction(s):_ `vadd.i8 D0, D0, D0'
27137
27138   * int32x2_t vadd_s32 (int32x2_t, int32x2_t)
27139     _Form of expected instruction(s):_ `vadd.i32 D0, D0, D0'
27140
27141   * int16x4_t vadd_s16 (int16x4_t, int16x4_t)
27142     _Form of expected instruction(s):_ `vadd.i16 D0, D0, D0'
27143
27144   * int8x8_t vadd_s8 (int8x8_t, int8x8_t)
27145     _Form of expected instruction(s):_ `vadd.i8 D0, D0, D0'
27146
27147   * float32x2_t vadd_f32 (float32x2_t, float32x2_t)
27148     _Form of expected instruction(s):_ `vadd.f32 D0, D0, D0'
27149
27150   * uint64x1_t vadd_u64 (uint64x1_t, uint64x1_t)
27151
27152   * int64x1_t vadd_s64 (int64x1_t, int64x1_t)
27153
27154   * uint32x4_t vaddq_u32 (uint32x4_t, uint32x4_t)
27155     _Form of expected instruction(s):_ `vadd.i32 Q0, Q0, Q0'
27156
27157   * uint16x8_t vaddq_u16 (uint16x8_t, uint16x8_t)
27158     _Form of expected instruction(s):_ `vadd.i16 Q0, Q0, Q0'
27159
27160   * uint8x16_t vaddq_u8 (uint8x16_t, uint8x16_t)
27161     _Form of expected instruction(s):_ `vadd.i8 Q0, Q0, Q0'
27162
27163   * int32x4_t vaddq_s32 (int32x4_t, int32x4_t)
27164     _Form of expected instruction(s):_ `vadd.i32 Q0, Q0, Q0'
27165
27166   * int16x8_t vaddq_s16 (int16x8_t, int16x8_t)
27167     _Form of expected instruction(s):_ `vadd.i16 Q0, Q0, Q0'
27168
27169   * int8x16_t vaddq_s8 (int8x16_t, int8x16_t)
27170     _Form of expected instruction(s):_ `vadd.i8 Q0, Q0, Q0'
27171
27172   * uint64x2_t vaddq_u64 (uint64x2_t, uint64x2_t)
27173     _Form of expected instruction(s):_ `vadd.i64 Q0, Q0, Q0'
27174
27175   * int64x2_t vaddq_s64 (int64x2_t, int64x2_t)
27176     _Form of expected instruction(s):_ `vadd.i64 Q0, Q0, Q0'
27177
27178   * float32x4_t vaddq_f32 (float32x4_t, float32x4_t)
27179     _Form of expected instruction(s):_ `vadd.f32 Q0, Q0, Q0'
27180
27181   * uint64x2_t vaddl_u32 (uint32x2_t, uint32x2_t)
27182     _Form of expected instruction(s):_ `vaddl.u32 Q0, D0, D0'
27183
27184   * uint32x4_t vaddl_u16 (uint16x4_t, uint16x4_t)
27185     _Form of expected instruction(s):_ `vaddl.u16 Q0, D0, D0'
27186
27187   * uint16x8_t vaddl_u8 (uint8x8_t, uint8x8_t)
27188     _Form of expected instruction(s):_ `vaddl.u8 Q0, D0, D0'
27189
27190   * int64x2_t vaddl_s32 (int32x2_t, int32x2_t)
27191     _Form of expected instruction(s):_ `vaddl.s32 Q0, D0, D0'
27192
27193   * int32x4_t vaddl_s16 (int16x4_t, int16x4_t)
27194     _Form of expected instruction(s):_ `vaddl.s16 Q0, D0, D0'
27195
27196   * int16x8_t vaddl_s8 (int8x8_t, int8x8_t)
27197     _Form of expected instruction(s):_ `vaddl.s8 Q0, D0, D0'
27198
27199   * uint64x2_t vaddw_u32 (uint64x2_t, uint32x2_t)
27200     _Form of expected instruction(s):_ `vaddw.u32 Q0, Q0, D0'
27201
27202   * uint32x4_t vaddw_u16 (uint32x4_t, uint16x4_t)
27203     _Form of expected instruction(s):_ `vaddw.u16 Q0, Q0, D0'
27204
27205   * uint16x8_t vaddw_u8 (uint16x8_t, uint8x8_t)
27206     _Form of expected instruction(s):_ `vaddw.u8 Q0, Q0, D0'
27207
27208   * int64x2_t vaddw_s32 (int64x2_t, int32x2_t)
27209     _Form of expected instruction(s):_ `vaddw.s32 Q0, Q0, D0'
27210
27211   * int32x4_t vaddw_s16 (int32x4_t, int16x4_t)
27212     _Form of expected instruction(s):_ `vaddw.s16 Q0, Q0, D0'
27213
27214   * int16x8_t vaddw_s8 (int16x8_t, int8x8_t)
27215     _Form of expected instruction(s):_ `vaddw.s8 Q0, Q0, D0'
27216
27217   * uint32x2_t vhadd_u32 (uint32x2_t, uint32x2_t)
27218     _Form of expected instruction(s):_ `vhadd.u32 D0, D0, D0'
27219
27220   * uint16x4_t vhadd_u16 (uint16x4_t, uint16x4_t)
27221     _Form of expected instruction(s):_ `vhadd.u16 D0, D0, D0'
27222
27223   * uint8x8_t vhadd_u8 (uint8x8_t, uint8x8_t)
27224     _Form of expected instruction(s):_ `vhadd.u8 D0, D0, D0'
27225
27226   * int32x2_t vhadd_s32 (int32x2_t, int32x2_t)
27227     _Form of expected instruction(s):_ `vhadd.s32 D0, D0, D0'
27228
27229   * int16x4_t vhadd_s16 (int16x4_t, int16x4_t)
27230     _Form of expected instruction(s):_ `vhadd.s16 D0, D0, D0'
27231
27232   * int8x8_t vhadd_s8 (int8x8_t, int8x8_t)
27233     _Form of expected instruction(s):_ `vhadd.s8 D0, D0, D0'
27234
27235   * uint32x4_t vhaddq_u32 (uint32x4_t, uint32x4_t)
27236     _Form of expected instruction(s):_ `vhadd.u32 Q0, Q0, Q0'
27237
27238   * uint16x8_t vhaddq_u16 (uint16x8_t, uint16x8_t)
27239     _Form of expected instruction(s):_ `vhadd.u16 Q0, Q0, Q0'
27240
27241   * uint8x16_t vhaddq_u8 (uint8x16_t, uint8x16_t)
27242     _Form of expected instruction(s):_ `vhadd.u8 Q0, Q0, Q0'
27243
27244   * int32x4_t vhaddq_s32 (int32x4_t, int32x4_t)
27245     _Form of expected instruction(s):_ `vhadd.s32 Q0, Q0, Q0'
27246
27247   * int16x8_t vhaddq_s16 (int16x8_t, int16x8_t)
27248     _Form of expected instruction(s):_ `vhadd.s16 Q0, Q0, Q0'
27249
27250   * int8x16_t vhaddq_s8 (int8x16_t, int8x16_t)
27251     _Form of expected instruction(s):_ `vhadd.s8 Q0, Q0, Q0'
27252
27253   * uint32x2_t vrhadd_u32 (uint32x2_t, uint32x2_t)
27254     _Form of expected instruction(s):_ `vrhadd.u32 D0, D0, D0'
27255
27256   * uint16x4_t vrhadd_u16 (uint16x4_t, uint16x4_t)
27257     _Form of expected instruction(s):_ `vrhadd.u16 D0, D0, D0'
27258
27259   * uint8x8_t vrhadd_u8 (uint8x8_t, uint8x8_t)
27260     _Form of expected instruction(s):_ `vrhadd.u8 D0, D0, D0'
27261
27262   * int32x2_t vrhadd_s32 (int32x2_t, int32x2_t)
27263     _Form of expected instruction(s):_ `vrhadd.s32 D0, D0, D0'
27264
27265   * int16x4_t vrhadd_s16 (int16x4_t, int16x4_t)
27266     _Form of expected instruction(s):_ `vrhadd.s16 D0, D0, D0'
27267
27268   * int8x8_t vrhadd_s8 (int8x8_t, int8x8_t)
27269     _Form of expected instruction(s):_ `vrhadd.s8 D0, D0, D0'
27270
27271   * uint32x4_t vrhaddq_u32 (uint32x4_t, uint32x4_t)
27272     _Form of expected instruction(s):_ `vrhadd.u32 Q0, Q0, Q0'
27273
27274   * uint16x8_t vrhaddq_u16 (uint16x8_t, uint16x8_t)
27275     _Form of expected instruction(s):_ `vrhadd.u16 Q0, Q0, Q0'
27276
27277   * uint8x16_t vrhaddq_u8 (uint8x16_t, uint8x16_t)
27278     _Form of expected instruction(s):_ `vrhadd.u8 Q0, Q0, Q0'
27279
27280   * int32x4_t vrhaddq_s32 (int32x4_t, int32x4_t)
27281     _Form of expected instruction(s):_ `vrhadd.s32 Q0, Q0, Q0'
27282
27283   * int16x8_t vrhaddq_s16 (int16x8_t, int16x8_t)
27284     _Form of expected instruction(s):_ `vrhadd.s16 Q0, Q0, Q0'
27285
27286   * int8x16_t vrhaddq_s8 (int8x16_t, int8x16_t)
27287     _Form of expected instruction(s):_ `vrhadd.s8 Q0, Q0, Q0'
27288
27289   * uint32x2_t vqadd_u32 (uint32x2_t, uint32x2_t)
27290     _Form of expected instruction(s):_ `vqadd.u32 D0, D0, D0'
27291
27292   * uint16x4_t vqadd_u16 (uint16x4_t, uint16x4_t)
27293     _Form of expected instruction(s):_ `vqadd.u16 D0, D0, D0'
27294
27295   * uint8x8_t vqadd_u8 (uint8x8_t, uint8x8_t)
27296     _Form of expected instruction(s):_ `vqadd.u8 D0, D0, D0'
27297
27298   * int32x2_t vqadd_s32 (int32x2_t, int32x2_t)
27299     _Form of expected instruction(s):_ `vqadd.s32 D0, D0, D0'
27300
27301   * int16x4_t vqadd_s16 (int16x4_t, int16x4_t)
27302     _Form of expected instruction(s):_ `vqadd.s16 D0, D0, D0'
27303
27304   * int8x8_t vqadd_s8 (int8x8_t, int8x8_t)
27305     _Form of expected instruction(s):_ `vqadd.s8 D0, D0, D0'
27306
27307   * uint64x1_t vqadd_u64 (uint64x1_t, uint64x1_t)
27308     _Form of expected instruction(s):_ `vqadd.u64 D0, D0, D0'
27309
27310   * int64x1_t vqadd_s64 (int64x1_t, int64x1_t)
27311     _Form of expected instruction(s):_ `vqadd.s64 D0, D0, D0'
27312
27313   * uint32x4_t vqaddq_u32 (uint32x4_t, uint32x4_t)
27314     _Form of expected instruction(s):_ `vqadd.u32 Q0, Q0, Q0'
27315
27316   * uint16x8_t vqaddq_u16 (uint16x8_t, uint16x8_t)
27317     _Form of expected instruction(s):_ `vqadd.u16 Q0, Q0, Q0'
27318
27319   * uint8x16_t vqaddq_u8 (uint8x16_t, uint8x16_t)
27320     _Form of expected instruction(s):_ `vqadd.u8 Q0, Q0, Q0'
27321
27322   * int32x4_t vqaddq_s32 (int32x4_t, int32x4_t)
27323     _Form of expected instruction(s):_ `vqadd.s32 Q0, Q0, Q0'
27324
27325   * int16x8_t vqaddq_s16 (int16x8_t, int16x8_t)
27326     _Form of expected instruction(s):_ `vqadd.s16 Q0, Q0, Q0'
27327
27328   * int8x16_t vqaddq_s8 (int8x16_t, int8x16_t)
27329     _Form of expected instruction(s):_ `vqadd.s8 Q0, Q0, Q0'
27330
27331   * uint64x2_t vqaddq_u64 (uint64x2_t, uint64x2_t)
27332     _Form of expected instruction(s):_ `vqadd.u64 Q0, Q0, Q0'
27333
27334   * int64x2_t vqaddq_s64 (int64x2_t, int64x2_t)
27335     _Form of expected instruction(s):_ `vqadd.s64 Q0, Q0, Q0'
27336
27337   * uint32x2_t vaddhn_u64 (uint64x2_t, uint64x2_t)
27338     _Form of expected instruction(s):_ `vaddhn.i64 D0, Q0, Q0'
27339
27340   * uint16x4_t vaddhn_u32 (uint32x4_t, uint32x4_t)
27341     _Form of expected instruction(s):_ `vaddhn.i32 D0, Q0, Q0'
27342
27343   * uint8x8_t vaddhn_u16 (uint16x8_t, uint16x8_t)
27344     _Form of expected instruction(s):_ `vaddhn.i16 D0, Q0, Q0'
27345
27346   * int32x2_t vaddhn_s64 (int64x2_t, int64x2_t)
27347     _Form of expected instruction(s):_ `vaddhn.i64 D0, Q0, Q0'
27348
27349   * int16x4_t vaddhn_s32 (int32x4_t, int32x4_t)
27350     _Form of expected instruction(s):_ `vaddhn.i32 D0, Q0, Q0'
27351
27352   * int8x8_t vaddhn_s16 (int16x8_t, int16x8_t)
27353     _Form of expected instruction(s):_ `vaddhn.i16 D0, Q0, Q0'
27354
27355   * uint32x2_t vraddhn_u64 (uint64x2_t, uint64x2_t)
27356     _Form of expected instruction(s):_ `vraddhn.i64 D0, Q0, Q0'
27357
27358   * uint16x4_t vraddhn_u32 (uint32x4_t, uint32x4_t)
27359     _Form of expected instruction(s):_ `vraddhn.i32 D0, Q0, Q0'
27360
27361   * uint8x8_t vraddhn_u16 (uint16x8_t, uint16x8_t)
27362     _Form of expected instruction(s):_ `vraddhn.i16 D0, Q0, Q0'
27363
27364   * int32x2_t vraddhn_s64 (int64x2_t, int64x2_t)
27365     _Form of expected instruction(s):_ `vraddhn.i64 D0, Q0, Q0'
27366
27367   * int16x4_t vraddhn_s32 (int32x4_t, int32x4_t)
27368     _Form of expected instruction(s):_ `vraddhn.i32 D0, Q0, Q0'
27369
27370   * int8x8_t vraddhn_s16 (int16x8_t, int16x8_t)
27371     _Form of expected instruction(s):_ `vraddhn.i16 D0, Q0, Q0'
27372
273736.54.3.2 Multiplication
27374.......................
27375
27376   * uint32x2_t vmul_u32 (uint32x2_t, uint32x2_t)
27377     _Form of expected instruction(s):_ `vmul.i32 D0, D0, D0'
27378
27379   * uint16x4_t vmul_u16 (uint16x4_t, uint16x4_t)
27380     _Form of expected instruction(s):_ `vmul.i16 D0, D0, D0'
27381
27382   * uint8x8_t vmul_u8 (uint8x8_t, uint8x8_t)
27383     _Form of expected instruction(s):_ `vmul.i8 D0, D0, D0'
27384
27385   * int32x2_t vmul_s32 (int32x2_t, int32x2_t)
27386     _Form of expected instruction(s):_ `vmul.i32 D0, D0, D0'
27387
27388   * int16x4_t vmul_s16 (int16x4_t, int16x4_t)
27389     _Form of expected instruction(s):_ `vmul.i16 D0, D0, D0'
27390
27391   * int8x8_t vmul_s8 (int8x8_t, int8x8_t)
27392     _Form of expected instruction(s):_ `vmul.i8 D0, D0, D0'
27393
27394   * float32x2_t vmul_f32 (float32x2_t, float32x2_t)
27395     _Form of expected instruction(s):_ `vmul.f32 D0, D0, D0'
27396
27397   * poly8x8_t vmul_p8 (poly8x8_t, poly8x8_t)
27398     _Form of expected instruction(s):_ `vmul.p8 D0, D0, D0'
27399
27400   * uint32x4_t vmulq_u32 (uint32x4_t, uint32x4_t)
27401     _Form of expected instruction(s):_ `vmul.i32 Q0, Q0, Q0'
27402
27403   * uint16x8_t vmulq_u16 (uint16x8_t, uint16x8_t)
27404     _Form of expected instruction(s):_ `vmul.i16 Q0, Q0, Q0'
27405
27406   * uint8x16_t vmulq_u8 (uint8x16_t, uint8x16_t)
27407     _Form of expected instruction(s):_ `vmul.i8 Q0, Q0, Q0'
27408
27409   * int32x4_t vmulq_s32 (int32x4_t, int32x4_t)
27410     _Form of expected instruction(s):_ `vmul.i32 Q0, Q0, Q0'
27411
27412   * int16x8_t vmulq_s16 (int16x8_t, int16x8_t)
27413     _Form of expected instruction(s):_ `vmul.i16 Q0, Q0, Q0'
27414
27415   * int8x16_t vmulq_s8 (int8x16_t, int8x16_t)
27416     _Form of expected instruction(s):_ `vmul.i8 Q0, Q0, Q0'
27417
27418   * float32x4_t vmulq_f32 (float32x4_t, float32x4_t)
27419     _Form of expected instruction(s):_ `vmul.f32 Q0, Q0, Q0'
27420
27421   * poly8x16_t vmulq_p8 (poly8x16_t, poly8x16_t)
27422     _Form of expected instruction(s):_ `vmul.p8 Q0, Q0, Q0'
27423
27424   * int32x2_t vqdmulh_s32 (int32x2_t, int32x2_t)
27425     _Form of expected instruction(s):_ `vqdmulh.s32 D0, D0, D0'
27426
27427   * int16x4_t vqdmulh_s16 (int16x4_t, int16x4_t)
27428     _Form of expected instruction(s):_ `vqdmulh.s16 D0, D0, D0'
27429
27430   * int32x4_t vqdmulhq_s32 (int32x4_t, int32x4_t)
27431     _Form of expected instruction(s):_ `vqdmulh.s32 Q0, Q0, Q0'
27432
27433   * int16x8_t vqdmulhq_s16 (int16x8_t, int16x8_t)
27434     _Form of expected instruction(s):_ `vqdmulh.s16 Q0, Q0, Q0'
27435
27436   * int32x2_t vqrdmulh_s32 (int32x2_t, int32x2_t)
27437     _Form of expected instruction(s):_ `vqrdmulh.s32 D0, D0, D0'
27438
27439   * int16x4_t vqrdmulh_s16 (int16x4_t, int16x4_t)
27440     _Form of expected instruction(s):_ `vqrdmulh.s16 D0, D0, D0'
27441
27442   * int32x4_t vqrdmulhq_s32 (int32x4_t, int32x4_t)
27443     _Form of expected instruction(s):_ `vqrdmulh.s32 Q0, Q0, Q0'
27444
27445   * int16x8_t vqrdmulhq_s16 (int16x8_t, int16x8_t)
27446     _Form of expected instruction(s):_ `vqrdmulh.s16 Q0, Q0, Q0'
27447
27448   * uint64x2_t vmull_u32 (uint32x2_t, uint32x2_t)
27449     _Form of expected instruction(s):_ `vmull.u32 Q0, D0, D0'
27450
27451   * uint32x4_t vmull_u16 (uint16x4_t, uint16x4_t)
27452     _Form of expected instruction(s):_ `vmull.u16 Q0, D0, D0'
27453
27454   * uint16x8_t vmull_u8 (uint8x8_t, uint8x8_t)
27455     _Form of expected instruction(s):_ `vmull.u8 Q0, D0, D0'
27456
27457   * int64x2_t vmull_s32 (int32x2_t, int32x2_t)
27458     _Form of expected instruction(s):_ `vmull.s32 Q0, D0, D0'
27459
27460   * int32x4_t vmull_s16 (int16x4_t, int16x4_t)
27461     _Form of expected instruction(s):_ `vmull.s16 Q0, D0, D0'
27462
27463   * int16x8_t vmull_s8 (int8x8_t, int8x8_t)
27464     _Form of expected instruction(s):_ `vmull.s8 Q0, D0, D0'
27465
27466   * poly16x8_t vmull_p8 (poly8x8_t, poly8x8_t)
27467     _Form of expected instruction(s):_ `vmull.p8 Q0, D0, D0'
27468
27469   * int64x2_t vqdmull_s32 (int32x2_t, int32x2_t)
27470     _Form of expected instruction(s):_ `vqdmull.s32 Q0, D0, D0'
27471
27472   * int32x4_t vqdmull_s16 (int16x4_t, int16x4_t)
27473     _Form of expected instruction(s):_ `vqdmull.s16 Q0, D0, D0'
27474
274756.54.3.3 Multiply-accumulate
27476............................
27477
27478   * uint32x2_t vmla_u32 (uint32x2_t, uint32x2_t, uint32x2_t)
27479     _Form of expected instruction(s):_ `vmla.i32 D0, D0, D0'
27480
27481   * uint16x4_t vmla_u16 (uint16x4_t, uint16x4_t, uint16x4_t)
27482     _Form of expected instruction(s):_ `vmla.i16 D0, D0, D0'
27483
27484   * uint8x8_t vmla_u8 (uint8x8_t, uint8x8_t, uint8x8_t)
27485     _Form of expected instruction(s):_ `vmla.i8 D0, D0, D0'
27486
27487   * int32x2_t vmla_s32 (int32x2_t, int32x2_t, int32x2_t)
27488     _Form of expected instruction(s):_ `vmla.i32 D0, D0, D0'
27489
27490   * int16x4_t vmla_s16 (int16x4_t, int16x4_t, int16x4_t)
27491     _Form of expected instruction(s):_ `vmla.i16 D0, D0, D0'
27492
27493   * int8x8_t vmla_s8 (int8x8_t, int8x8_t, int8x8_t)
27494     _Form of expected instruction(s):_ `vmla.i8 D0, D0, D0'
27495
27496   * float32x2_t vmla_f32 (float32x2_t, float32x2_t, float32x2_t)
27497     _Form of expected instruction(s):_ `vmla.f32 D0, D0, D0'
27498
27499   * uint32x4_t vmlaq_u32 (uint32x4_t, uint32x4_t, uint32x4_t)
27500     _Form of expected instruction(s):_ `vmla.i32 Q0, Q0, Q0'
27501
27502   * uint16x8_t vmlaq_u16 (uint16x8_t, uint16x8_t, uint16x8_t)
27503     _Form of expected instruction(s):_ `vmla.i16 Q0, Q0, Q0'
27504
27505   * uint8x16_t vmlaq_u8 (uint8x16_t, uint8x16_t, uint8x16_t)
27506     _Form of expected instruction(s):_ `vmla.i8 Q0, Q0, Q0'
27507
27508   * int32x4_t vmlaq_s32 (int32x4_t, int32x4_t, int32x4_t)
27509     _Form of expected instruction(s):_ `vmla.i32 Q0, Q0, Q0'
27510
27511   * int16x8_t vmlaq_s16 (int16x8_t, int16x8_t, int16x8_t)
27512     _Form of expected instruction(s):_ `vmla.i16 Q0, Q0, Q0'
27513
27514   * int8x16_t vmlaq_s8 (int8x16_t, int8x16_t, int8x16_t)
27515     _Form of expected instruction(s):_ `vmla.i8 Q0, Q0, Q0'
27516
27517   * float32x4_t vmlaq_f32 (float32x4_t, float32x4_t, float32x4_t)
27518     _Form of expected instruction(s):_ `vmla.f32 Q0, Q0, Q0'
27519
27520   * uint64x2_t vmlal_u32 (uint64x2_t, uint32x2_t, uint32x2_t)
27521     _Form of expected instruction(s):_ `vmlal.u32 Q0, D0, D0'
27522
27523   * uint32x4_t vmlal_u16 (uint32x4_t, uint16x4_t, uint16x4_t)
27524     _Form of expected instruction(s):_ `vmlal.u16 Q0, D0, D0'
27525
27526   * uint16x8_t vmlal_u8 (uint16x8_t, uint8x8_t, uint8x8_t)
27527     _Form of expected instruction(s):_ `vmlal.u8 Q0, D0, D0'
27528
27529   * int64x2_t vmlal_s32 (int64x2_t, int32x2_t, int32x2_t)
27530     _Form of expected instruction(s):_ `vmlal.s32 Q0, D0, D0'
27531
27532   * int32x4_t vmlal_s16 (int32x4_t, int16x4_t, int16x4_t)
27533     _Form of expected instruction(s):_ `vmlal.s16 Q0, D0, D0'
27534
27535   * int16x8_t vmlal_s8 (int16x8_t, int8x8_t, int8x8_t)
27536     _Form of expected instruction(s):_ `vmlal.s8 Q0, D0, D0'
27537
27538   * int64x2_t vqdmlal_s32 (int64x2_t, int32x2_t, int32x2_t)
27539     _Form of expected instruction(s):_ `vqdmlal.s32 Q0, D0, D0'
27540
27541   * int32x4_t vqdmlal_s16 (int32x4_t, int16x4_t, int16x4_t)
27542     _Form of expected instruction(s):_ `vqdmlal.s16 Q0, D0, D0'
27543
275446.54.3.4 Multiply-subtract
27545..........................
27546
27547   * uint32x2_t vmls_u32 (uint32x2_t, uint32x2_t, uint32x2_t)
27548     _Form of expected instruction(s):_ `vmls.i32 D0, D0, D0'
27549
27550   * uint16x4_t vmls_u16 (uint16x4_t, uint16x4_t, uint16x4_t)
27551     _Form of expected instruction(s):_ `vmls.i16 D0, D0, D0'
27552
27553   * uint8x8_t vmls_u8 (uint8x8_t, uint8x8_t, uint8x8_t)
27554     _Form of expected instruction(s):_ `vmls.i8 D0, D0, D0'
27555
27556   * int32x2_t vmls_s32 (int32x2_t, int32x2_t, int32x2_t)
27557     _Form of expected instruction(s):_ `vmls.i32 D0, D0, D0'
27558
27559   * int16x4_t vmls_s16 (int16x4_t, int16x4_t, int16x4_t)
27560     _Form of expected instruction(s):_ `vmls.i16 D0, D0, D0'
27561
27562   * int8x8_t vmls_s8 (int8x8_t, int8x8_t, int8x8_t)
27563     _Form of expected instruction(s):_ `vmls.i8 D0, D0, D0'
27564
27565   * float32x2_t vmls_f32 (float32x2_t, float32x2_t, float32x2_t)
27566     _Form of expected instruction(s):_ `vmls.f32 D0, D0, D0'
27567
27568   * uint32x4_t vmlsq_u32 (uint32x4_t, uint32x4_t, uint32x4_t)
27569     _Form of expected instruction(s):_ `vmls.i32 Q0, Q0, Q0'
27570
27571   * uint16x8_t vmlsq_u16 (uint16x8_t, uint16x8_t, uint16x8_t)
27572     _Form of expected instruction(s):_ `vmls.i16 Q0, Q0, Q0'
27573
27574   * uint8x16_t vmlsq_u8 (uint8x16_t, uint8x16_t, uint8x16_t)
27575     _Form of expected instruction(s):_ `vmls.i8 Q0, Q0, Q0'
27576
27577   * int32x4_t vmlsq_s32 (int32x4_t, int32x4_t, int32x4_t)
27578     _Form of expected instruction(s):_ `vmls.i32 Q0, Q0, Q0'
27579
27580   * int16x8_t vmlsq_s16 (int16x8_t, int16x8_t, int16x8_t)
27581     _Form of expected instruction(s):_ `vmls.i16 Q0, Q0, Q0'
27582
27583   * int8x16_t vmlsq_s8 (int8x16_t, int8x16_t, int8x16_t)
27584     _Form of expected instruction(s):_ `vmls.i8 Q0, Q0, Q0'
27585
27586   * float32x4_t vmlsq_f32 (float32x4_t, float32x4_t, float32x4_t)
27587     _Form of expected instruction(s):_ `vmls.f32 Q0, Q0, Q0'
27588
27589   * uint64x2_t vmlsl_u32 (uint64x2_t, uint32x2_t, uint32x2_t)
27590     _Form of expected instruction(s):_ `vmlsl.u32 Q0, D0, D0'
27591
27592   * uint32x4_t vmlsl_u16 (uint32x4_t, uint16x4_t, uint16x4_t)
27593     _Form of expected instruction(s):_ `vmlsl.u16 Q0, D0, D0'
27594
27595   * uint16x8_t vmlsl_u8 (uint16x8_t, uint8x8_t, uint8x8_t)
27596     _Form of expected instruction(s):_ `vmlsl.u8 Q0, D0, D0'
27597
27598   * int64x2_t vmlsl_s32 (int64x2_t, int32x2_t, int32x2_t)
27599     _Form of expected instruction(s):_ `vmlsl.s32 Q0, D0, D0'
27600
27601   * int32x4_t vmlsl_s16 (int32x4_t, int16x4_t, int16x4_t)
27602     _Form of expected instruction(s):_ `vmlsl.s16 Q0, D0, D0'
27603
27604   * int16x8_t vmlsl_s8 (int16x8_t, int8x8_t, int8x8_t)
27605     _Form of expected instruction(s):_ `vmlsl.s8 Q0, D0, D0'
27606
27607   * int64x2_t vqdmlsl_s32 (int64x2_t, int32x2_t, int32x2_t)
27608     _Form of expected instruction(s):_ `vqdmlsl.s32 Q0, D0, D0'
27609
27610   * int32x4_t vqdmlsl_s16 (int32x4_t, int16x4_t, int16x4_t)
27611     _Form of expected instruction(s):_ `vqdmlsl.s16 Q0, D0, D0'
27612
276136.54.3.5 Subtraction
27614....................
27615
27616   * uint32x2_t vsub_u32 (uint32x2_t, uint32x2_t)
27617     _Form of expected instruction(s):_ `vsub.i32 D0, D0, D0'
27618
27619   * uint16x4_t vsub_u16 (uint16x4_t, uint16x4_t)
27620     _Form of expected instruction(s):_ `vsub.i16 D0, D0, D0'
27621
27622   * uint8x8_t vsub_u8 (uint8x8_t, uint8x8_t)
27623     _Form of expected instruction(s):_ `vsub.i8 D0, D0, D0'
27624
27625   * int32x2_t vsub_s32 (int32x2_t, int32x2_t)
27626     _Form of expected instruction(s):_ `vsub.i32 D0, D0, D0'
27627
27628   * int16x4_t vsub_s16 (int16x4_t, int16x4_t)
27629     _Form of expected instruction(s):_ `vsub.i16 D0, D0, D0'
27630
27631   * int8x8_t vsub_s8 (int8x8_t, int8x8_t)
27632     _Form of expected instruction(s):_ `vsub.i8 D0, D0, D0'
27633
27634   * float32x2_t vsub_f32 (float32x2_t, float32x2_t)
27635     _Form of expected instruction(s):_ `vsub.f32 D0, D0, D0'
27636
27637   * uint64x1_t vsub_u64 (uint64x1_t, uint64x1_t)
27638
27639   * int64x1_t vsub_s64 (int64x1_t, int64x1_t)
27640
27641   * uint32x4_t vsubq_u32 (uint32x4_t, uint32x4_t)
27642     _Form of expected instruction(s):_ `vsub.i32 Q0, Q0, Q0'
27643
27644   * uint16x8_t vsubq_u16 (uint16x8_t, uint16x8_t)
27645     _Form of expected instruction(s):_ `vsub.i16 Q0, Q0, Q0'
27646
27647   * uint8x16_t vsubq_u8 (uint8x16_t, uint8x16_t)
27648     _Form of expected instruction(s):_ `vsub.i8 Q0, Q0, Q0'
27649
27650   * int32x4_t vsubq_s32 (int32x4_t, int32x4_t)
27651     _Form of expected instruction(s):_ `vsub.i32 Q0, Q0, Q0'
27652
27653   * int16x8_t vsubq_s16 (int16x8_t, int16x8_t)
27654     _Form of expected instruction(s):_ `vsub.i16 Q0, Q0, Q0'
27655
27656   * int8x16_t vsubq_s8 (int8x16_t, int8x16_t)
27657     _Form of expected instruction(s):_ `vsub.i8 Q0, Q0, Q0'
27658
27659   * uint64x2_t vsubq_u64 (uint64x2_t, uint64x2_t)
27660     _Form of expected instruction(s):_ `vsub.i64 Q0, Q0, Q0'
27661
27662   * int64x2_t vsubq_s64 (int64x2_t, int64x2_t)
27663     _Form of expected instruction(s):_ `vsub.i64 Q0, Q0, Q0'
27664
27665   * float32x4_t vsubq_f32 (float32x4_t, float32x4_t)
27666     _Form of expected instruction(s):_ `vsub.f32 Q0, Q0, Q0'
27667
27668   * uint64x2_t vsubl_u32 (uint32x2_t, uint32x2_t)
27669     _Form of expected instruction(s):_ `vsubl.u32 Q0, D0, D0'
27670
27671   * uint32x4_t vsubl_u16 (uint16x4_t, uint16x4_t)
27672     _Form of expected instruction(s):_ `vsubl.u16 Q0, D0, D0'
27673
27674   * uint16x8_t vsubl_u8 (uint8x8_t, uint8x8_t)
27675     _Form of expected instruction(s):_ `vsubl.u8 Q0, D0, D0'
27676
27677   * int64x2_t vsubl_s32 (int32x2_t, int32x2_t)
27678     _Form of expected instruction(s):_ `vsubl.s32 Q0, D0, D0'
27679
27680   * int32x4_t vsubl_s16 (int16x4_t, int16x4_t)
27681     _Form of expected instruction(s):_ `vsubl.s16 Q0, D0, D0'
27682
27683   * int16x8_t vsubl_s8 (int8x8_t, int8x8_t)
27684     _Form of expected instruction(s):_ `vsubl.s8 Q0, D0, D0'
27685
27686   * uint64x2_t vsubw_u32 (uint64x2_t, uint32x2_t)
27687     _Form of expected instruction(s):_ `vsubw.u32 Q0, Q0, D0'
27688
27689   * uint32x4_t vsubw_u16 (uint32x4_t, uint16x4_t)
27690     _Form of expected instruction(s):_ `vsubw.u16 Q0, Q0, D0'
27691
27692   * uint16x8_t vsubw_u8 (uint16x8_t, uint8x8_t)
27693     _Form of expected instruction(s):_ `vsubw.u8 Q0, Q0, D0'
27694
27695   * int64x2_t vsubw_s32 (int64x2_t, int32x2_t)
27696     _Form of expected instruction(s):_ `vsubw.s32 Q0, Q0, D0'
27697
27698   * int32x4_t vsubw_s16 (int32x4_t, int16x4_t)
27699     _Form of expected instruction(s):_ `vsubw.s16 Q0, Q0, D0'
27700
27701   * int16x8_t vsubw_s8 (int16x8_t, int8x8_t)
27702     _Form of expected instruction(s):_ `vsubw.s8 Q0, Q0, D0'
27703
27704   * uint32x2_t vhsub_u32 (uint32x2_t, uint32x2_t)
27705     _Form of expected instruction(s):_ `vhsub.u32 D0, D0, D0'
27706
27707   * uint16x4_t vhsub_u16 (uint16x4_t, uint16x4_t)
27708     _Form of expected instruction(s):_ `vhsub.u16 D0, D0, D0'
27709
27710   * uint8x8_t vhsub_u8 (uint8x8_t, uint8x8_t)
27711     _Form of expected instruction(s):_ `vhsub.u8 D0, D0, D0'
27712
27713   * int32x2_t vhsub_s32 (int32x2_t, int32x2_t)
27714     _Form of expected instruction(s):_ `vhsub.s32 D0, D0, D0'
27715
27716   * int16x4_t vhsub_s16 (int16x4_t, int16x4_t)
27717     _Form of expected instruction(s):_ `vhsub.s16 D0, D0, D0'
27718
27719   * int8x8_t vhsub_s8 (int8x8_t, int8x8_t)
27720     _Form of expected instruction(s):_ `vhsub.s8 D0, D0, D0'
27721
27722   * uint32x4_t vhsubq_u32 (uint32x4_t, uint32x4_t)
27723     _Form of expected instruction(s):_ `vhsub.u32 Q0, Q0, Q0'
27724
27725   * uint16x8_t vhsubq_u16 (uint16x8_t, uint16x8_t)
27726     _Form of expected instruction(s):_ `vhsub.u16 Q0, Q0, Q0'
27727
27728   * uint8x16_t vhsubq_u8 (uint8x16_t, uint8x16_t)
27729     _Form of expected instruction(s):_ `vhsub.u8 Q0, Q0, Q0'
27730
27731   * int32x4_t vhsubq_s32 (int32x4_t, int32x4_t)
27732     _Form of expected instruction(s):_ `vhsub.s32 Q0, Q0, Q0'
27733
27734   * int16x8_t vhsubq_s16 (int16x8_t, int16x8_t)
27735     _Form of expected instruction(s):_ `vhsub.s16 Q0, Q0, Q0'
27736
27737   * int8x16_t vhsubq_s8 (int8x16_t, int8x16_t)
27738     _Form of expected instruction(s):_ `vhsub.s8 Q0, Q0, Q0'
27739
27740   * uint32x2_t vqsub_u32 (uint32x2_t, uint32x2_t)
27741     _Form of expected instruction(s):_ `vqsub.u32 D0, D0, D0'
27742
27743   * uint16x4_t vqsub_u16 (uint16x4_t, uint16x4_t)
27744     _Form of expected instruction(s):_ `vqsub.u16 D0, D0, D0'
27745
27746   * uint8x8_t vqsub_u8 (uint8x8_t, uint8x8_t)
27747     _Form of expected instruction(s):_ `vqsub.u8 D0, D0, D0'
27748
27749   * int32x2_t vqsub_s32 (int32x2_t, int32x2_t)
27750     _Form of expected instruction(s):_ `vqsub.s32 D0, D0, D0'
27751
27752   * int16x4_t vqsub_s16 (int16x4_t, int16x4_t)
27753     _Form of expected instruction(s):_ `vqsub.s16 D0, D0, D0'
27754
27755   * int8x8_t vqsub_s8 (int8x8_t, int8x8_t)
27756     _Form of expected instruction(s):_ `vqsub.s8 D0, D0, D0'
27757
27758   * uint64x1_t vqsub_u64 (uint64x1_t, uint64x1_t)
27759     _Form of expected instruction(s):_ `vqsub.u64 D0, D0, D0'
27760
27761   * int64x1_t vqsub_s64 (int64x1_t, int64x1_t)
27762     _Form of expected instruction(s):_ `vqsub.s64 D0, D0, D0'
27763
27764   * uint32x4_t vqsubq_u32 (uint32x4_t, uint32x4_t)
27765     _Form of expected instruction(s):_ `vqsub.u32 Q0, Q0, Q0'
27766
27767   * uint16x8_t vqsubq_u16 (uint16x8_t, uint16x8_t)
27768     _Form of expected instruction(s):_ `vqsub.u16 Q0, Q0, Q0'
27769
27770   * uint8x16_t vqsubq_u8 (uint8x16_t, uint8x16_t)
27771     _Form of expected instruction(s):_ `vqsub.u8 Q0, Q0, Q0'
27772
27773   * int32x4_t vqsubq_s32 (int32x4_t, int32x4_t)
27774     _Form of expected instruction(s):_ `vqsub.s32 Q0, Q0, Q0'
27775
27776   * int16x8_t vqsubq_s16 (int16x8_t, int16x8_t)
27777     _Form of expected instruction(s):_ `vqsub.s16 Q0, Q0, Q0'
27778
27779   * int8x16_t vqsubq_s8 (int8x16_t, int8x16_t)
27780     _Form of expected instruction(s):_ `vqsub.s8 Q0, Q0, Q0'
27781
27782   * uint64x2_t vqsubq_u64 (uint64x2_t, uint64x2_t)
27783     _Form of expected instruction(s):_ `vqsub.u64 Q0, Q0, Q0'
27784
27785   * int64x2_t vqsubq_s64 (int64x2_t, int64x2_t)
27786     _Form of expected instruction(s):_ `vqsub.s64 Q0, Q0, Q0'
27787
27788   * uint32x2_t vsubhn_u64 (uint64x2_t, uint64x2_t)
27789     _Form of expected instruction(s):_ `vsubhn.i64 D0, Q0, Q0'
27790
27791   * uint16x4_t vsubhn_u32 (uint32x4_t, uint32x4_t)
27792     _Form of expected instruction(s):_ `vsubhn.i32 D0, Q0, Q0'
27793
27794   * uint8x8_t vsubhn_u16 (uint16x8_t, uint16x8_t)
27795     _Form of expected instruction(s):_ `vsubhn.i16 D0, Q0, Q0'
27796
27797   * int32x2_t vsubhn_s64 (int64x2_t, int64x2_t)
27798     _Form of expected instruction(s):_ `vsubhn.i64 D0, Q0, Q0'
27799
27800   * int16x4_t vsubhn_s32 (int32x4_t, int32x4_t)
27801     _Form of expected instruction(s):_ `vsubhn.i32 D0, Q0, Q0'
27802
27803   * int8x8_t vsubhn_s16 (int16x8_t, int16x8_t)
27804     _Form of expected instruction(s):_ `vsubhn.i16 D0, Q0, Q0'
27805
27806   * uint32x2_t vrsubhn_u64 (uint64x2_t, uint64x2_t)
27807     _Form of expected instruction(s):_ `vrsubhn.i64 D0, Q0, Q0'
27808
27809   * uint16x4_t vrsubhn_u32 (uint32x4_t, uint32x4_t)
27810     _Form of expected instruction(s):_ `vrsubhn.i32 D0, Q0, Q0'
27811
27812   * uint8x8_t vrsubhn_u16 (uint16x8_t, uint16x8_t)
27813     _Form of expected instruction(s):_ `vrsubhn.i16 D0, Q0, Q0'
27814
27815   * int32x2_t vrsubhn_s64 (int64x2_t, int64x2_t)
27816     _Form of expected instruction(s):_ `vrsubhn.i64 D0, Q0, Q0'
27817
27818   * int16x4_t vrsubhn_s32 (int32x4_t, int32x4_t)
27819     _Form of expected instruction(s):_ `vrsubhn.i32 D0, Q0, Q0'
27820
27821   * int8x8_t vrsubhn_s16 (int16x8_t, int16x8_t)
27822     _Form of expected instruction(s):_ `vrsubhn.i16 D0, Q0, Q0'
27823
278246.54.3.6 Comparison (equal-to)
27825..............................
27826
27827   * uint32x2_t vceq_u32 (uint32x2_t, uint32x2_t)
27828     _Form of expected instruction(s):_ `vceq.i32 D0, D0, D0'
27829
27830   * uint16x4_t vceq_u16 (uint16x4_t, uint16x4_t)
27831     _Form of expected instruction(s):_ `vceq.i16 D0, D0, D0'
27832
27833   * uint8x8_t vceq_u8 (uint8x8_t, uint8x8_t)
27834     _Form of expected instruction(s):_ `vceq.i8 D0, D0, D0'
27835
27836   * uint32x2_t vceq_s32 (int32x2_t, int32x2_t)
27837     _Form of expected instruction(s):_ `vceq.i32 D0, D0, D0'
27838
27839   * uint16x4_t vceq_s16 (int16x4_t, int16x4_t)
27840     _Form of expected instruction(s):_ `vceq.i16 D0, D0, D0'
27841
27842   * uint8x8_t vceq_s8 (int8x8_t, int8x8_t)
27843     _Form of expected instruction(s):_ `vceq.i8 D0, D0, D0'
27844
27845   * uint32x2_t vceq_f32 (float32x2_t, float32x2_t)
27846     _Form of expected instruction(s):_ `vceq.f32 D0, D0, D0'
27847
27848   * uint8x8_t vceq_p8 (poly8x8_t, poly8x8_t)
27849     _Form of expected instruction(s):_ `vceq.i8 D0, D0, D0'
27850
27851   * uint32x4_t vceqq_u32 (uint32x4_t, uint32x4_t)
27852     _Form of expected instruction(s):_ `vceq.i32 Q0, Q0, Q0'
27853
27854   * uint16x8_t vceqq_u16 (uint16x8_t, uint16x8_t)
27855     _Form of expected instruction(s):_ `vceq.i16 Q0, Q0, Q0'
27856
27857   * uint8x16_t vceqq_u8 (uint8x16_t, uint8x16_t)
27858     _Form of expected instruction(s):_ `vceq.i8 Q0, Q0, Q0'
27859
27860   * uint32x4_t vceqq_s32 (int32x4_t, int32x4_t)
27861     _Form of expected instruction(s):_ `vceq.i32 Q0, Q0, Q0'
27862
27863   * uint16x8_t vceqq_s16 (int16x8_t, int16x8_t)
27864     _Form of expected instruction(s):_ `vceq.i16 Q0, Q0, Q0'
27865
27866   * uint8x16_t vceqq_s8 (int8x16_t, int8x16_t)
27867     _Form of expected instruction(s):_ `vceq.i8 Q0, Q0, Q0'
27868
27869   * uint32x4_t vceqq_f32 (float32x4_t, float32x4_t)
27870     _Form of expected instruction(s):_ `vceq.f32 Q0, Q0, Q0'
27871
27872   * uint8x16_t vceqq_p8 (poly8x16_t, poly8x16_t)
27873     _Form of expected instruction(s):_ `vceq.i8 Q0, Q0, Q0'
27874
278756.54.3.7 Comparison (greater-than-or-equal-to)
27876..............................................
27877
27878   * uint32x2_t vcge_u32 (uint32x2_t, uint32x2_t)
27879     _Form of expected instruction(s):_ `vcge.u32 D0, D0, D0'
27880
27881   * uint16x4_t vcge_u16 (uint16x4_t, uint16x4_t)
27882     _Form of expected instruction(s):_ `vcge.u16 D0, D0, D0'
27883
27884   * uint8x8_t vcge_u8 (uint8x8_t, uint8x8_t)
27885     _Form of expected instruction(s):_ `vcge.u8 D0, D0, D0'
27886
27887   * uint32x2_t vcge_s32 (int32x2_t, int32x2_t)
27888     _Form of expected instruction(s):_ `vcge.s32 D0, D0, D0'
27889
27890   * uint16x4_t vcge_s16 (int16x4_t, int16x4_t)
27891     _Form of expected instruction(s):_ `vcge.s16 D0, D0, D0'
27892
27893   * uint8x8_t vcge_s8 (int8x8_t, int8x8_t)
27894     _Form of expected instruction(s):_ `vcge.s8 D0, D0, D0'
27895
27896   * uint32x2_t vcge_f32 (float32x2_t, float32x2_t)
27897     _Form of expected instruction(s):_ `vcge.f32 D0, D0, D0'
27898
27899   * uint32x4_t vcgeq_u32 (uint32x4_t, uint32x4_t)
27900     _Form of expected instruction(s):_ `vcge.u32 Q0, Q0, Q0'
27901
27902   * uint16x8_t vcgeq_u16 (uint16x8_t, uint16x8_t)
27903     _Form of expected instruction(s):_ `vcge.u16 Q0, Q0, Q0'
27904
27905   * uint8x16_t vcgeq_u8 (uint8x16_t, uint8x16_t)
27906     _Form of expected instruction(s):_ `vcge.u8 Q0, Q0, Q0'
27907
27908   * uint32x4_t vcgeq_s32 (int32x4_t, int32x4_t)
27909     _Form of expected instruction(s):_ `vcge.s32 Q0, Q0, Q0'
27910
27911   * uint16x8_t vcgeq_s16 (int16x8_t, int16x8_t)
27912     _Form of expected instruction(s):_ `vcge.s16 Q0, Q0, Q0'
27913
27914   * uint8x16_t vcgeq_s8 (int8x16_t, int8x16_t)
27915     _Form of expected instruction(s):_ `vcge.s8 Q0, Q0, Q0'
27916
27917   * uint32x4_t vcgeq_f32 (float32x4_t, float32x4_t)
27918     _Form of expected instruction(s):_ `vcge.f32 Q0, Q0, Q0'
27919
279206.54.3.8 Comparison (less-than-or-equal-to)
27921...........................................
27922
27923   * uint32x2_t vcle_u32 (uint32x2_t, uint32x2_t)
27924     _Form of expected instruction(s):_ `vcge.u32 D0, D0, D0'
27925
27926   * uint16x4_t vcle_u16 (uint16x4_t, uint16x4_t)
27927     _Form of expected instruction(s):_ `vcge.u16 D0, D0, D0'
27928
27929   * uint8x8_t vcle_u8 (uint8x8_t, uint8x8_t)
27930     _Form of expected instruction(s):_ `vcge.u8 D0, D0, D0'
27931
27932   * uint32x2_t vcle_s32 (int32x2_t, int32x2_t)
27933     _Form of expected instruction(s):_ `vcge.s32 D0, D0, D0'
27934
27935   * uint16x4_t vcle_s16 (int16x4_t, int16x4_t)
27936     _Form of expected instruction(s):_ `vcge.s16 D0, D0, D0'
27937
27938   * uint8x8_t vcle_s8 (int8x8_t, int8x8_t)
27939     _Form of expected instruction(s):_ `vcge.s8 D0, D0, D0'
27940
27941   * uint32x2_t vcle_f32 (float32x2_t, float32x2_t)
27942     _Form of expected instruction(s):_ `vcge.f32 D0, D0, D0'
27943
27944   * uint32x4_t vcleq_u32 (uint32x4_t, uint32x4_t)
27945     _Form of expected instruction(s):_ `vcge.u32 Q0, Q0, Q0'
27946
27947   * uint16x8_t vcleq_u16 (uint16x8_t, uint16x8_t)
27948     _Form of expected instruction(s):_ `vcge.u16 Q0, Q0, Q0'
27949
27950   * uint8x16_t vcleq_u8 (uint8x16_t, uint8x16_t)
27951     _Form of expected instruction(s):_ `vcge.u8 Q0, Q0, Q0'
27952
27953   * uint32x4_t vcleq_s32 (int32x4_t, int32x4_t)
27954     _Form of expected instruction(s):_ `vcge.s32 Q0, Q0, Q0'
27955
27956   * uint16x8_t vcleq_s16 (int16x8_t, int16x8_t)
27957     _Form of expected instruction(s):_ `vcge.s16 Q0, Q0, Q0'
27958
27959   * uint8x16_t vcleq_s8 (int8x16_t, int8x16_t)
27960     _Form of expected instruction(s):_ `vcge.s8 Q0, Q0, Q0'
27961
27962   * uint32x4_t vcleq_f32 (float32x4_t, float32x4_t)
27963     _Form of expected instruction(s):_ `vcge.f32 Q0, Q0, Q0'
27964
279656.54.3.9 Comparison (greater-than)
27966..................................
27967
27968   * uint32x2_t vcgt_u32 (uint32x2_t, uint32x2_t)
27969     _Form of expected instruction(s):_ `vcgt.u32 D0, D0, D0'
27970
27971   * uint16x4_t vcgt_u16 (uint16x4_t, uint16x4_t)
27972     _Form of expected instruction(s):_ `vcgt.u16 D0, D0, D0'
27973
27974   * uint8x8_t vcgt_u8 (uint8x8_t, uint8x8_t)
27975     _Form of expected instruction(s):_ `vcgt.u8 D0, D0, D0'
27976
27977   * uint32x2_t vcgt_s32 (int32x2_t, int32x2_t)
27978     _Form of expected instruction(s):_ `vcgt.s32 D0, D0, D0'
27979
27980   * uint16x4_t vcgt_s16 (int16x4_t, int16x4_t)
27981     _Form of expected instruction(s):_ `vcgt.s16 D0, D0, D0'
27982
27983   * uint8x8_t vcgt_s8 (int8x8_t, int8x8_t)
27984     _Form of expected instruction(s):_ `vcgt.s8 D0, D0, D0'
27985
27986   * uint32x2_t vcgt_f32 (float32x2_t, float32x2_t)
27987     _Form of expected instruction(s):_ `vcgt.f32 D0, D0, D0'
27988
27989   * uint32x4_t vcgtq_u32 (uint32x4_t, uint32x4_t)
27990     _Form of expected instruction(s):_ `vcgt.u32 Q0, Q0, Q0'
27991
27992   * uint16x8_t vcgtq_u16 (uint16x8_t, uint16x8_t)
27993     _Form of expected instruction(s):_ `vcgt.u16 Q0, Q0, Q0'
27994
27995   * uint8x16_t vcgtq_u8 (uint8x16_t, uint8x16_t)
27996     _Form of expected instruction(s):_ `vcgt.u8 Q0, Q0, Q0'
27997
27998   * uint32x4_t vcgtq_s32 (int32x4_t, int32x4_t)
27999     _Form of expected instruction(s):_ `vcgt.s32 Q0, Q0, Q0'
28000
28001   * uint16x8_t vcgtq_s16 (int16x8_t, int16x8_t)
28002     _Form of expected instruction(s):_ `vcgt.s16 Q0, Q0, Q0'
28003
28004   * uint8x16_t vcgtq_s8 (int8x16_t, int8x16_t)
28005     _Form of expected instruction(s):_ `vcgt.s8 Q0, Q0, Q0'
28006
28007   * uint32x4_t vcgtq_f32 (float32x4_t, float32x4_t)
28008     _Form of expected instruction(s):_ `vcgt.f32 Q0, Q0, Q0'
28009
280106.54.3.10 Comparison (less-than)
28011................................
28012
28013   * uint32x2_t vclt_u32 (uint32x2_t, uint32x2_t)
28014     _Form of expected instruction(s):_ `vcgt.u32 D0, D0, D0'
28015
28016   * uint16x4_t vclt_u16 (uint16x4_t, uint16x4_t)
28017     _Form of expected instruction(s):_ `vcgt.u16 D0, D0, D0'
28018
28019   * uint8x8_t vclt_u8 (uint8x8_t, uint8x8_t)
28020     _Form of expected instruction(s):_ `vcgt.u8 D0, D0, D0'
28021
28022   * uint32x2_t vclt_s32 (int32x2_t, int32x2_t)
28023     _Form of expected instruction(s):_ `vcgt.s32 D0, D0, D0'
28024
28025   * uint16x4_t vclt_s16 (int16x4_t, int16x4_t)
28026     _Form of expected instruction(s):_ `vcgt.s16 D0, D0, D0'
28027
28028   * uint8x8_t vclt_s8 (int8x8_t, int8x8_t)
28029     _Form of expected instruction(s):_ `vcgt.s8 D0, D0, D0'
28030
28031   * uint32x2_t vclt_f32 (float32x2_t, float32x2_t)
28032     _Form of expected instruction(s):_ `vcgt.f32 D0, D0, D0'
28033
28034   * uint32x4_t vcltq_u32 (uint32x4_t, uint32x4_t)
28035     _Form of expected instruction(s):_ `vcgt.u32 Q0, Q0, Q0'
28036
28037   * uint16x8_t vcltq_u16 (uint16x8_t, uint16x8_t)
28038     _Form of expected instruction(s):_ `vcgt.u16 Q0, Q0, Q0'
28039
28040   * uint8x16_t vcltq_u8 (uint8x16_t, uint8x16_t)
28041     _Form of expected instruction(s):_ `vcgt.u8 Q0, Q0, Q0'
28042
28043   * uint32x4_t vcltq_s32 (int32x4_t, int32x4_t)
28044     _Form of expected instruction(s):_ `vcgt.s32 Q0, Q0, Q0'
28045
28046   * uint16x8_t vcltq_s16 (int16x8_t, int16x8_t)
28047     _Form of expected instruction(s):_ `vcgt.s16 Q0, Q0, Q0'
28048
28049   * uint8x16_t vcltq_s8 (int8x16_t, int8x16_t)
28050     _Form of expected instruction(s):_ `vcgt.s8 Q0, Q0, Q0'
28051
28052   * uint32x4_t vcltq_f32 (float32x4_t, float32x4_t)
28053     _Form of expected instruction(s):_ `vcgt.f32 Q0, Q0, Q0'
28054
280556.54.3.11 Comparison (absolute greater-than-or-equal-to)
28056........................................................
28057
28058   * uint32x2_t vcage_f32 (float32x2_t, float32x2_t)
28059     _Form of expected instruction(s):_ `vacge.f32 D0, D0, D0'
28060
28061   * uint32x4_t vcageq_f32 (float32x4_t, float32x4_t)
28062     _Form of expected instruction(s):_ `vacge.f32 Q0, Q0, Q0'
28063
280646.54.3.12 Comparison (absolute less-than-or-equal-to)
28065.....................................................
28066
28067   * uint32x2_t vcale_f32 (float32x2_t, float32x2_t)
28068     _Form of expected instruction(s):_ `vacge.f32 D0, D0, D0'
28069
28070   * uint32x4_t vcaleq_f32 (float32x4_t, float32x4_t)
28071     _Form of expected instruction(s):_ `vacge.f32 Q0, Q0, Q0'
28072
280736.54.3.13 Comparison (absolute greater-than)
28074............................................
28075
28076   * uint32x2_t vcagt_f32 (float32x2_t, float32x2_t)
28077     _Form of expected instruction(s):_ `vacgt.f32 D0, D0, D0'
28078
28079   * uint32x4_t vcagtq_f32 (float32x4_t, float32x4_t)
28080     _Form of expected instruction(s):_ `vacgt.f32 Q0, Q0, Q0'
28081
280826.54.3.14 Comparison (absolute less-than)
28083.........................................
28084
28085   * uint32x2_t vcalt_f32 (float32x2_t, float32x2_t)
28086     _Form of expected instruction(s):_ `vacgt.f32 D0, D0, D0'
28087
28088   * uint32x4_t vcaltq_f32 (float32x4_t, float32x4_t)
28089     _Form of expected instruction(s):_ `vacgt.f32 Q0, Q0, Q0'
28090
280916.54.3.15 Test bits
28092...................
28093
28094   * uint32x2_t vtst_u32 (uint32x2_t, uint32x2_t)
28095     _Form of expected instruction(s):_ `vtst.32 D0, D0, D0'
28096
28097   * uint16x4_t vtst_u16 (uint16x4_t, uint16x4_t)
28098     _Form of expected instruction(s):_ `vtst.16 D0, D0, D0'
28099
28100   * uint8x8_t vtst_u8 (uint8x8_t, uint8x8_t)
28101     _Form of expected instruction(s):_ `vtst.8 D0, D0, D0'
28102
28103   * uint32x2_t vtst_s32 (int32x2_t, int32x2_t)
28104     _Form of expected instruction(s):_ `vtst.32 D0, D0, D0'
28105
28106   * uint16x4_t vtst_s16 (int16x4_t, int16x4_t)
28107     _Form of expected instruction(s):_ `vtst.16 D0, D0, D0'
28108
28109   * uint8x8_t vtst_s8 (int8x8_t, int8x8_t)
28110     _Form of expected instruction(s):_ `vtst.8 D0, D0, D0'
28111
28112   * uint8x8_t vtst_p8 (poly8x8_t, poly8x8_t)
28113     _Form of expected instruction(s):_ `vtst.8 D0, D0, D0'
28114
28115   * uint32x4_t vtstq_u32 (uint32x4_t, uint32x4_t)
28116     _Form of expected instruction(s):_ `vtst.32 Q0, Q0, Q0'
28117
28118   * uint16x8_t vtstq_u16 (uint16x8_t, uint16x8_t)
28119     _Form of expected instruction(s):_ `vtst.16 Q0, Q0, Q0'
28120
28121   * uint8x16_t vtstq_u8 (uint8x16_t, uint8x16_t)
28122     _Form of expected instruction(s):_ `vtst.8 Q0, Q0, Q0'
28123
28124   * uint32x4_t vtstq_s32 (int32x4_t, int32x4_t)
28125     _Form of expected instruction(s):_ `vtst.32 Q0, Q0, Q0'
28126
28127   * uint16x8_t vtstq_s16 (int16x8_t, int16x8_t)
28128     _Form of expected instruction(s):_ `vtst.16 Q0, Q0, Q0'
28129
28130   * uint8x16_t vtstq_s8 (int8x16_t, int8x16_t)
28131     _Form of expected instruction(s):_ `vtst.8 Q0, Q0, Q0'
28132
28133   * uint8x16_t vtstq_p8 (poly8x16_t, poly8x16_t)
28134     _Form of expected instruction(s):_ `vtst.8 Q0, Q0, Q0'
28135
281366.54.3.16 Absolute difference
28137.............................
28138
28139   * uint32x2_t vabd_u32 (uint32x2_t, uint32x2_t)
28140     _Form of expected instruction(s):_ `vabd.u32 D0, D0, D0'
28141
28142   * uint16x4_t vabd_u16 (uint16x4_t, uint16x4_t)
28143     _Form of expected instruction(s):_ `vabd.u16 D0, D0, D0'
28144
28145   * uint8x8_t vabd_u8 (uint8x8_t, uint8x8_t)
28146     _Form of expected instruction(s):_ `vabd.u8 D0, D0, D0'
28147
28148   * int32x2_t vabd_s32 (int32x2_t, int32x2_t)
28149     _Form of expected instruction(s):_ `vabd.s32 D0, D0, D0'
28150
28151   * int16x4_t vabd_s16 (int16x4_t, int16x4_t)
28152     _Form of expected instruction(s):_ `vabd.s16 D0, D0, D0'
28153
28154   * int8x8_t vabd_s8 (int8x8_t, int8x8_t)
28155     _Form of expected instruction(s):_ `vabd.s8 D0, D0, D0'
28156
28157   * float32x2_t vabd_f32 (float32x2_t, float32x2_t)
28158     _Form of expected instruction(s):_ `vabd.f32 D0, D0, D0'
28159
28160   * uint32x4_t vabdq_u32 (uint32x4_t, uint32x4_t)
28161     _Form of expected instruction(s):_ `vabd.u32 Q0, Q0, Q0'
28162
28163   * uint16x8_t vabdq_u16 (uint16x8_t, uint16x8_t)
28164     _Form of expected instruction(s):_ `vabd.u16 Q0, Q0, Q0'
28165
28166   * uint8x16_t vabdq_u8 (uint8x16_t, uint8x16_t)
28167     _Form of expected instruction(s):_ `vabd.u8 Q0, Q0, Q0'
28168
28169   * int32x4_t vabdq_s32 (int32x4_t, int32x4_t)
28170     _Form of expected instruction(s):_ `vabd.s32 Q0, Q0, Q0'
28171
28172   * int16x8_t vabdq_s16 (int16x8_t, int16x8_t)
28173     _Form of expected instruction(s):_ `vabd.s16 Q0, Q0, Q0'
28174
28175   * int8x16_t vabdq_s8 (int8x16_t, int8x16_t)
28176     _Form of expected instruction(s):_ `vabd.s8 Q0, Q0, Q0'
28177
28178   * float32x4_t vabdq_f32 (float32x4_t, float32x4_t)
28179     _Form of expected instruction(s):_ `vabd.f32 Q0, Q0, Q0'
28180
28181   * uint64x2_t vabdl_u32 (uint32x2_t, uint32x2_t)
28182     _Form of expected instruction(s):_ `vabdl.u32 Q0, D0, D0'
28183
28184   * uint32x4_t vabdl_u16 (uint16x4_t, uint16x4_t)
28185     _Form of expected instruction(s):_ `vabdl.u16 Q0, D0, D0'
28186
28187   * uint16x8_t vabdl_u8 (uint8x8_t, uint8x8_t)
28188     _Form of expected instruction(s):_ `vabdl.u8 Q0, D0, D0'
28189
28190   * int64x2_t vabdl_s32 (int32x2_t, int32x2_t)
28191     _Form of expected instruction(s):_ `vabdl.s32 Q0, D0, D0'
28192
28193   * int32x4_t vabdl_s16 (int16x4_t, int16x4_t)
28194     _Form of expected instruction(s):_ `vabdl.s16 Q0, D0, D0'
28195
28196   * int16x8_t vabdl_s8 (int8x8_t, int8x8_t)
28197     _Form of expected instruction(s):_ `vabdl.s8 Q0, D0, D0'
28198
281996.54.3.17 Absolute difference and accumulate
28200............................................
28201
28202   * uint32x2_t vaba_u32 (uint32x2_t, uint32x2_t, uint32x2_t)
28203     _Form of expected instruction(s):_ `vaba.u32 D0, D0, D0'
28204
28205   * uint16x4_t vaba_u16 (uint16x4_t, uint16x4_t, uint16x4_t)
28206     _Form of expected instruction(s):_ `vaba.u16 D0, D0, D0'
28207
28208   * uint8x8_t vaba_u8 (uint8x8_t, uint8x8_t, uint8x8_t)
28209     _Form of expected instruction(s):_ `vaba.u8 D0, D0, D0'
28210
28211   * int32x2_t vaba_s32 (int32x2_t, int32x2_t, int32x2_t)
28212     _Form of expected instruction(s):_ `vaba.s32 D0, D0, D0'
28213
28214   * int16x4_t vaba_s16 (int16x4_t, int16x4_t, int16x4_t)
28215     _Form of expected instruction(s):_ `vaba.s16 D0, D0, D0'
28216
28217   * int8x8_t vaba_s8 (int8x8_t, int8x8_t, int8x8_t)
28218     _Form of expected instruction(s):_ `vaba.s8 D0, D0, D0'
28219
28220   * uint32x4_t vabaq_u32 (uint32x4_t, uint32x4_t, uint32x4_t)
28221     _Form of expected instruction(s):_ `vaba.u32 Q0, Q0, Q0'
28222
28223   * uint16x8_t vabaq_u16 (uint16x8_t, uint16x8_t, uint16x8_t)
28224     _Form of expected instruction(s):_ `vaba.u16 Q0, Q0, Q0'
28225
28226   * uint8x16_t vabaq_u8 (uint8x16_t, uint8x16_t, uint8x16_t)
28227     _Form of expected instruction(s):_ `vaba.u8 Q0, Q0, Q0'
28228
28229   * int32x4_t vabaq_s32 (int32x4_t, int32x4_t, int32x4_t)
28230     _Form of expected instruction(s):_ `vaba.s32 Q0, Q0, Q0'
28231
28232   * int16x8_t vabaq_s16 (int16x8_t, int16x8_t, int16x8_t)
28233     _Form of expected instruction(s):_ `vaba.s16 Q0, Q0, Q0'
28234
28235   * int8x16_t vabaq_s8 (int8x16_t, int8x16_t, int8x16_t)
28236     _Form of expected instruction(s):_ `vaba.s8 Q0, Q0, Q0'
28237
28238   * uint64x2_t vabal_u32 (uint64x2_t, uint32x2_t, uint32x2_t)
28239     _Form of expected instruction(s):_ `vabal.u32 Q0, D0, D0'
28240
28241   * uint32x4_t vabal_u16 (uint32x4_t, uint16x4_t, uint16x4_t)
28242     _Form of expected instruction(s):_ `vabal.u16 Q0, D0, D0'
28243
28244   * uint16x8_t vabal_u8 (uint16x8_t, uint8x8_t, uint8x8_t)
28245     _Form of expected instruction(s):_ `vabal.u8 Q0, D0, D0'
28246
28247   * int64x2_t vabal_s32 (int64x2_t, int32x2_t, int32x2_t)
28248     _Form of expected instruction(s):_ `vabal.s32 Q0, D0, D0'
28249
28250   * int32x4_t vabal_s16 (int32x4_t, int16x4_t, int16x4_t)
28251     _Form of expected instruction(s):_ `vabal.s16 Q0, D0, D0'
28252
28253   * int16x8_t vabal_s8 (int16x8_t, int8x8_t, int8x8_t)
28254     _Form of expected instruction(s):_ `vabal.s8 Q0, D0, D0'
28255
282566.54.3.18 Maximum
28257.................
28258
28259   * uint32x2_t vmax_u32 (uint32x2_t, uint32x2_t)
28260     _Form of expected instruction(s):_ `vmax.u32 D0, D0, D0'
28261
28262   * uint16x4_t vmax_u16 (uint16x4_t, uint16x4_t)
28263     _Form of expected instruction(s):_ `vmax.u16 D0, D0, D0'
28264
28265   * uint8x8_t vmax_u8 (uint8x8_t, uint8x8_t)
28266     _Form of expected instruction(s):_ `vmax.u8 D0, D0, D0'
28267
28268   * int32x2_t vmax_s32 (int32x2_t, int32x2_t)
28269     _Form of expected instruction(s):_ `vmax.s32 D0, D0, D0'
28270
28271   * int16x4_t vmax_s16 (int16x4_t, int16x4_t)
28272     _Form of expected instruction(s):_ `vmax.s16 D0, D0, D0'
28273
28274   * int8x8_t vmax_s8 (int8x8_t, int8x8_t)
28275     _Form of expected instruction(s):_ `vmax.s8 D0, D0, D0'
28276
28277   * float32x2_t vmax_f32 (float32x2_t, float32x2_t)
28278     _Form of expected instruction(s):_ `vmax.f32 D0, D0, D0'
28279
28280   * uint32x4_t vmaxq_u32 (uint32x4_t, uint32x4_t)
28281     _Form of expected instruction(s):_ `vmax.u32 Q0, Q0, Q0'
28282
28283   * uint16x8_t vmaxq_u16 (uint16x8_t, uint16x8_t)
28284     _Form of expected instruction(s):_ `vmax.u16 Q0, Q0, Q0'
28285
28286   * uint8x16_t vmaxq_u8 (uint8x16_t, uint8x16_t)
28287     _Form of expected instruction(s):_ `vmax.u8 Q0, Q0, Q0'
28288
28289   * int32x4_t vmaxq_s32 (int32x4_t, int32x4_t)
28290     _Form of expected instruction(s):_ `vmax.s32 Q0, Q0, Q0'
28291
28292   * int16x8_t vmaxq_s16 (int16x8_t, int16x8_t)
28293     _Form of expected instruction(s):_ `vmax.s16 Q0, Q0, Q0'
28294
28295   * int8x16_t vmaxq_s8 (int8x16_t, int8x16_t)
28296     _Form of expected instruction(s):_ `vmax.s8 Q0, Q0, Q0'
28297
28298   * float32x4_t vmaxq_f32 (float32x4_t, float32x4_t)
28299     _Form of expected instruction(s):_ `vmax.f32 Q0, Q0, Q0'
28300
283016.54.3.19 Minimum
28302.................
28303
28304   * uint32x2_t vmin_u32 (uint32x2_t, uint32x2_t)
28305     _Form of expected instruction(s):_ `vmin.u32 D0, D0, D0'
28306
28307   * uint16x4_t vmin_u16 (uint16x4_t, uint16x4_t)
28308     _Form of expected instruction(s):_ `vmin.u16 D0, D0, D0'
28309
28310   * uint8x8_t vmin_u8 (uint8x8_t, uint8x8_t)
28311     _Form of expected instruction(s):_ `vmin.u8 D0, D0, D0'
28312
28313   * int32x2_t vmin_s32 (int32x2_t, int32x2_t)
28314     _Form of expected instruction(s):_ `vmin.s32 D0, D0, D0'
28315
28316   * int16x4_t vmin_s16 (int16x4_t, int16x4_t)
28317     _Form of expected instruction(s):_ `vmin.s16 D0, D0, D0'
28318
28319   * int8x8_t vmin_s8 (int8x8_t, int8x8_t)
28320     _Form of expected instruction(s):_ `vmin.s8 D0, D0, D0'
28321
28322   * float32x2_t vmin_f32 (float32x2_t, float32x2_t)
28323     _Form of expected instruction(s):_ `vmin.f32 D0, D0, D0'
28324
28325   * uint32x4_t vminq_u32 (uint32x4_t, uint32x4_t)
28326     _Form of expected instruction(s):_ `vmin.u32 Q0, Q0, Q0'
28327
28328   * uint16x8_t vminq_u16 (uint16x8_t, uint16x8_t)
28329     _Form of expected instruction(s):_ `vmin.u16 Q0, Q0, Q0'
28330
28331   * uint8x16_t vminq_u8 (uint8x16_t, uint8x16_t)
28332     _Form of expected instruction(s):_ `vmin.u8 Q0, Q0, Q0'
28333
28334   * int32x4_t vminq_s32 (int32x4_t, int32x4_t)
28335     _Form of expected instruction(s):_ `vmin.s32 Q0, Q0, Q0'
28336
28337   * int16x8_t vminq_s16 (int16x8_t, int16x8_t)
28338     _Form of expected instruction(s):_ `vmin.s16 Q0, Q0, Q0'
28339
28340   * int8x16_t vminq_s8 (int8x16_t, int8x16_t)
28341     _Form of expected instruction(s):_ `vmin.s8 Q0, Q0, Q0'
28342
28343   * float32x4_t vminq_f32 (float32x4_t, float32x4_t)
28344     _Form of expected instruction(s):_ `vmin.f32 Q0, Q0, Q0'
28345
283466.54.3.20 Pairwise add
28347......................
28348
28349   * uint32x2_t vpadd_u32 (uint32x2_t, uint32x2_t)
28350     _Form of expected instruction(s):_ `vpadd.i32 D0, D0, D0'
28351
28352   * uint16x4_t vpadd_u16 (uint16x4_t, uint16x4_t)
28353     _Form of expected instruction(s):_ `vpadd.i16 D0, D0, D0'
28354
28355   * uint8x8_t vpadd_u8 (uint8x8_t, uint8x8_t)
28356     _Form of expected instruction(s):_ `vpadd.i8 D0, D0, D0'
28357
28358   * int32x2_t vpadd_s32 (int32x2_t, int32x2_t)
28359     _Form of expected instruction(s):_ `vpadd.i32 D0, D0, D0'
28360
28361   * int16x4_t vpadd_s16 (int16x4_t, int16x4_t)
28362     _Form of expected instruction(s):_ `vpadd.i16 D0, D0, D0'
28363
28364   * int8x8_t vpadd_s8 (int8x8_t, int8x8_t)
28365     _Form of expected instruction(s):_ `vpadd.i8 D0, D0, D0'
28366
28367   * float32x2_t vpadd_f32 (float32x2_t, float32x2_t)
28368     _Form of expected instruction(s):_ `vpadd.f32 D0, D0, D0'
28369
28370   * uint64x1_t vpaddl_u32 (uint32x2_t)
28371     _Form of expected instruction(s):_ `vpaddl.u32 D0, D0'
28372
28373   * uint32x2_t vpaddl_u16 (uint16x4_t)
28374     _Form of expected instruction(s):_ `vpaddl.u16 D0, D0'
28375
28376   * uint16x4_t vpaddl_u8 (uint8x8_t)
28377     _Form of expected instruction(s):_ `vpaddl.u8 D0, D0'
28378
28379   * int64x1_t vpaddl_s32 (int32x2_t)
28380     _Form of expected instruction(s):_ `vpaddl.s32 D0, D0'
28381
28382   * int32x2_t vpaddl_s16 (int16x4_t)
28383     _Form of expected instruction(s):_ `vpaddl.s16 D0, D0'
28384
28385   * int16x4_t vpaddl_s8 (int8x8_t)
28386     _Form of expected instruction(s):_ `vpaddl.s8 D0, D0'
28387
28388   * uint64x2_t vpaddlq_u32 (uint32x4_t)
28389     _Form of expected instruction(s):_ `vpaddl.u32 Q0, Q0'
28390
28391   * uint32x4_t vpaddlq_u16 (uint16x8_t)
28392     _Form of expected instruction(s):_ `vpaddl.u16 Q0, Q0'
28393
28394   * uint16x8_t vpaddlq_u8 (uint8x16_t)
28395     _Form of expected instruction(s):_ `vpaddl.u8 Q0, Q0'
28396
28397   * int64x2_t vpaddlq_s32 (int32x4_t)
28398     _Form of expected instruction(s):_ `vpaddl.s32 Q0, Q0'
28399
28400   * int32x4_t vpaddlq_s16 (int16x8_t)
28401     _Form of expected instruction(s):_ `vpaddl.s16 Q0, Q0'
28402
28403   * int16x8_t vpaddlq_s8 (int8x16_t)
28404     _Form of expected instruction(s):_ `vpaddl.s8 Q0, Q0'
28405
284066.54.3.21 Pairwise add, single_opcode widen and accumulate
28407..........................................................
28408
28409   * uint64x1_t vpadal_u32 (uint64x1_t, uint32x2_t)
28410     _Form of expected instruction(s):_ `vpadal.u32 D0, D0'
28411
28412   * uint32x2_t vpadal_u16 (uint32x2_t, uint16x4_t)
28413     _Form of expected instruction(s):_ `vpadal.u16 D0, D0'
28414
28415   * uint16x4_t vpadal_u8 (uint16x4_t, uint8x8_t)
28416     _Form of expected instruction(s):_ `vpadal.u8 D0, D0'
28417
28418   * int64x1_t vpadal_s32 (int64x1_t, int32x2_t)
28419     _Form of expected instruction(s):_ `vpadal.s32 D0, D0'
28420
28421   * int32x2_t vpadal_s16 (int32x2_t, int16x4_t)
28422     _Form of expected instruction(s):_ `vpadal.s16 D0, D0'
28423
28424   * int16x4_t vpadal_s8 (int16x4_t, int8x8_t)
28425     _Form of expected instruction(s):_ `vpadal.s8 D0, D0'
28426
28427   * uint64x2_t vpadalq_u32 (uint64x2_t, uint32x4_t)
28428     _Form of expected instruction(s):_ `vpadal.u32 Q0, Q0'
28429
28430   * uint32x4_t vpadalq_u16 (uint32x4_t, uint16x8_t)
28431     _Form of expected instruction(s):_ `vpadal.u16 Q0, Q0'
28432
28433   * uint16x8_t vpadalq_u8 (uint16x8_t, uint8x16_t)
28434     _Form of expected instruction(s):_ `vpadal.u8 Q0, Q0'
28435
28436   * int64x2_t vpadalq_s32 (int64x2_t, int32x4_t)
28437     _Form of expected instruction(s):_ `vpadal.s32 Q0, Q0'
28438
28439   * int32x4_t vpadalq_s16 (int32x4_t, int16x8_t)
28440     _Form of expected instruction(s):_ `vpadal.s16 Q0, Q0'
28441
28442   * int16x8_t vpadalq_s8 (int16x8_t, int8x16_t)
28443     _Form of expected instruction(s):_ `vpadal.s8 Q0, Q0'
28444
284456.54.3.22 Folding maximum
28446.........................
28447
28448   * uint32x2_t vpmax_u32 (uint32x2_t, uint32x2_t)
28449     _Form of expected instruction(s):_ `vpmax.u32 D0, D0, D0'
28450
28451   * uint16x4_t vpmax_u16 (uint16x4_t, uint16x4_t)
28452     _Form of expected instruction(s):_ `vpmax.u16 D0, D0, D0'
28453
28454   * uint8x8_t vpmax_u8 (uint8x8_t, uint8x8_t)
28455     _Form of expected instruction(s):_ `vpmax.u8 D0, D0, D0'
28456
28457   * int32x2_t vpmax_s32 (int32x2_t, int32x2_t)
28458     _Form of expected instruction(s):_ `vpmax.s32 D0, D0, D0'
28459
28460   * int16x4_t vpmax_s16 (int16x4_t, int16x4_t)
28461     _Form of expected instruction(s):_ `vpmax.s16 D0, D0, D0'
28462
28463   * int8x8_t vpmax_s8 (int8x8_t, int8x8_t)
28464     _Form of expected instruction(s):_ `vpmax.s8 D0, D0, D0'
28465
28466   * float32x2_t vpmax_f32 (float32x2_t, float32x2_t)
28467     _Form of expected instruction(s):_ `vpmax.f32 D0, D0, D0'
28468
284696.54.3.23 Folding minimum
28470.........................
28471
28472   * uint32x2_t vpmin_u32 (uint32x2_t, uint32x2_t)
28473     _Form of expected instruction(s):_ `vpmin.u32 D0, D0, D0'
28474
28475   * uint16x4_t vpmin_u16 (uint16x4_t, uint16x4_t)
28476     _Form of expected instruction(s):_ `vpmin.u16 D0, D0, D0'
28477
28478   * uint8x8_t vpmin_u8 (uint8x8_t, uint8x8_t)
28479     _Form of expected instruction(s):_ `vpmin.u8 D0, D0, D0'
28480
28481   * int32x2_t vpmin_s32 (int32x2_t, int32x2_t)
28482     _Form of expected instruction(s):_ `vpmin.s32 D0, D0, D0'
28483
28484   * int16x4_t vpmin_s16 (int16x4_t, int16x4_t)
28485     _Form of expected instruction(s):_ `vpmin.s16 D0, D0, D0'
28486
28487   * int8x8_t vpmin_s8 (int8x8_t, int8x8_t)
28488     _Form of expected instruction(s):_ `vpmin.s8 D0, D0, D0'
28489
28490   * float32x2_t vpmin_f32 (float32x2_t, float32x2_t)
28491     _Form of expected instruction(s):_ `vpmin.f32 D0, D0, D0'
28492
284936.54.3.24 Reciprocal step
28494.........................
28495
28496   * float32x2_t vrecps_f32 (float32x2_t, float32x2_t)
28497     _Form of expected instruction(s):_ `vrecps.f32 D0, D0, D0'
28498
28499   * float32x4_t vrecpsq_f32 (float32x4_t, float32x4_t)
28500     _Form of expected instruction(s):_ `vrecps.f32 Q0, Q0, Q0'
28501
28502   * float32x2_t vrsqrts_f32 (float32x2_t, float32x2_t)
28503     _Form of expected instruction(s):_ `vrsqrts.f32 D0, D0, D0'
28504
28505   * float32x4_t vrsqrtsq_f32 (float32x4_t, float32x4_t)
28506     _Form of expected instruction(s):_ `vrsqrts.f32 Q0, Q0, Q0'
28507
285086.54.3.25 Vector shift left
28509...........................
28510
28511   * uint32x2_t vshl_u32 (uint32x2_t, int32x2_t)
28512     _Form of expected instruction(s):_ `vshl.u32 D0, D0, D0'
28513
28514   * uint16x4_t vshl_u16 (uint16x4_t, int16x4_t)
28515     _Form of expected instruction(s):_ `vshl.u16 D0, D0, D0'
28516
28517   * uint8x8_t vshl_u8 (uint8x8_t, int8x8_t)
28518     _Form of expected instruction(s):_ `vshl.u8 D0, D0, D0'
28519
28520   * int32x2_t vshl_s32 (int32x2_t, int32x2_t)
28521     _Form of expected instruction(s):_ `vshl.s32 D0, D0, D0'
28522
28523   * int16x4_t vshl_s16 (int16x4_t, int16x4_t)
28524     _Form of expected instruction(s):_ `vshl.s16 D0, D0, D0'
28525
28526   * int8x8_t vshl_s8 (int8x8_t, int8x8_t)
28527     _Form of expected instruction(s):_ `vshl.s8 D0, D0, D0'
28528
28529   * uint64x1_t vshl_u64 (uint64x1_t, int64x1_t)
28530     _Form of expected instruction(s):_ `vshl.u64 D0, D0, D0'
28531
28532   * int64x1_t vshl_s64 (int64x1_t, int64x1_t)
28533     _Form of expected instruction(s):_ `vshl.s64 D0, D0, D0'
28534
28535   * uint32x4_t vshlq_u32 (uint32x4_t, int32x4_t)
28536     _Form of expected instruction(s):_ `vshl.u32 Q0, Q0, Q0'
28537
28538   * uint16x8_t vshlq_u16 (uint16x8_t, int16x8_t)
28539     _Form of expected instruction(s):_ `vshl.u16 Q0, Q0, Q0'
28540
28541   * uint8x16_t vshlq_u8 (uint8x16_t, int8x16_t)
28542     _Form of expected instruction(s):_ `vshl.u8 Q0, Q0, Q0'
28543
28544   * int32x4_t vshlq_s32 (int32x4_t, int32x4_t)
28545     _Form of expected instruction(s):_ `vshl.s32 Q0, Q0, Q0'
28546
28547   * int16x8_t vshlq_s16 (int16x8_t, int16x8_t)
28548     _Form of expected instruction(s):_ `vshl.s16 Q0, Q0, Q0'
28549
28550   * int8x16_t vshlq_s8 (int8x16_t, int8x16_t)
28551     _Form of expected instruction(s):_ `vshl.s8 Q0, Q0, Q0'
28552
28553   * uint64x2_t vshlq_u64 (uint64x2_t, int64x2_t)
28554     _Form of expected instruction(s):_ `vshl.u64 Q0, Q0, Q0'
28555
28556   * int64x2_t vshlq_s64 (int64x2_t, int64x2_t)
28557     _Form of expected instruction(s):_ `vshl.s64 Q0, Q0, Q0'
28558
28559   * uint32x2_t vrshl_u32 (uint32x2_t, int32x2_t)
28560     _Form of expected instruction(s):_ `vrshl.u32 D0, D0, D0'
28561
28562   * uint16x4_t vrshl_u16 (uint16x4_t, int16x4_t)
28563     _Form of expected instruction(s):_ `vrshl.u16 D0, D0, D0'
28564
28565   * uint8x8_t vrshl_u8 (uint8x8_t, int8x8_t)
28566     _Form of expected instruction(s):_ `vrshl.u8 D0, D0, D0'
28567
28568   * int32x2_t vrshl_s32 (int32x2_t, int32x2_t)
28569     _Form of expected instruction(s):_ `vrshl.s32 D0, D0, D0'
28570
28571   * int16x4_t vrshl_s16 (int16x4_t, int16x4_t)
28572     _Form of expected instruction(s):_ `vrshl.s16 D0, D0, D0'
28573
28574   * int8x8_t vrshl_s8 (int8x8_t, int8x8_t)
28575     _Form of expected instruction(s):_ `vrshl.s8 D0, D0, D0'
28576
28577   * uint64x1_t vrshl_u64 (uint64x1_t, int64x1_t)
28578     _Form of expected instruction(s):_ `vrshl.u64 D0, D0, D0'
28579
28580   * int64x1_t vrshl_s64 (int64x1_t, int64x1_t)
28581     _Form of expected instruction(s):_ `vrshl.s64 D0, D0, D0'
28582
28583   * uint32x4_t vrshlq_u32 (uint32x4_t, int32x4_t)
28584     _Form of expected instruction(s):_ `vrshl.u32 Q0, Q0, Q0'
28585
28586   * uint16x8_t vrshlq_u16 (uint16x8_t, int16x8_t)
28587     _Form of expected instruction(s):_ `vrshl.u16 Q0, Q0, Q0'
28588
28589   * uint8x16_t vrshlq_u8 (uint8x16_t, int8x16_t)
28590     _Form of expected instruction(s):_ `vrshl.u8 Q0, Q0, Q0'
28591
28592   * int32x4_t vrshlq_s32 (int32x4_t, int32x4_t)
28593     _Form of expected instruction(s):_ `vrshl.s32 Q0, Q0, Q0'
28594
28595   * int16x8_t vrshlq_s16 (int16x8_t, int16x8_t)
28596     _Form of expected instruction(s):_ `vrshl.s16 Q0, Q0, Q0'
28597
28598   * int8x16_t vrshlq_s8 (int8x16_t, int8x16_t)
28599     _Form of expected instruction(s):_ `vrshl.s8 Q0, Q0, Q0'
28600
28601   * uint64x2_t vrshlq_u64 (uint64x2_t, int64x2_t)
28602     _Form of expected instruction(s):_ `vrshl.u64 Q0, Q0, Q0'
28603
28604   * int64x2_t vrshlq_s64 (int64x2_t, int64x2_t)
28605     _Form of expected instruction(s):_ `vrshl.s64 Q0, Q0, Q0'
28606
28607   * uint32x2_t vqshl_u32 (uint32x2_t, int32x2_t)
28608     _Form of expected instruction(s):_ `vqshl.u32 D0, D0, D0'
28609
28610   * uint16x4_t vqshl_u16 (uint16x4_t, int16x4_t)
28611     _Form of expected instruction(s):_ `vqshl.u16 D0, D0, D0'
28612
28613   * uint8x8_t vqshl_u8 (uint8x8_t, int8x8_t)
28614     _Form of expected instruction(s):_ `vqshl.u8 D0, D0, D0'
28615
28616   * int32x2_t vqshl_s32 (int32x2_t, int32x2_t)
28617     _Form of expected instruction(s):_ `vqshl.s32 D0, D0, D0'
28618
28619   * int16x4_t vqshl_s16 (int16x4_t, int16x4_t)
28620     _Form of expected instruction(s):_ `vqshl.s16 D0, D0, D0'
28621
28622   * int8x8_t vqshl_s8 (int8x8_t, int8x8_t)
28623     _Form of expected instruction(s):_ `vqshl.s8 D0, D0, D0'
28624
28625   * uint64x1_t vqshl_u64 (uint64x1_t, int64x1_t)
28626     _Form of expected instruction(s):_ `vqshl.u64 D0, D0, D0'
28627
28628   * int64x1_t vqshl_s64 (int64x1_t, int64x1_t)
28629     _Form of expected instruction(s):_ `vqshl.s64 D0, D0, D0'
28630
28631   * uint32x4_t vqshlq_u32 (uint32x4_t, int32x4_t)
28632     _Form of expected instruction(s):_ `vqshl.u32 Q0, Q0, Q0'
28633
28634   * uint16x8_t vqshlq_u16 (uint16x8_t, int16x8_t)
28635     _Form of expected instruction(s):_ `vqshl.u16 Q0, Q0, Q0'
28636
28637   * uint8x16_t vqshlq_u8 (uint8x16_t, int8x16_t)
28638     _Form of expected instruction(s):_ `vqshl.u8 Q0, Q0, Q0'
28639
28640   * int32x4_t vqshlq_s32 (int32x4_t, int32x4_t)
28641     _Form of expected instruction(s):_ `vqshl.s32 Q0, Q0, Q0'
28642
28643   * int16x8_t vqshlq_s16 (int16x8_t, int16x8_t)
28644     _Form of expected instruction(s):_ `vqshl.s16 Q0, Q0, Q0'
28645
28646   * int8x16_t vqshlq_s8 (int8x16_t, int8x16_t)
28647     _Form of expected instruction(s):_ `vqshl.s8 Q0, Q0, Q0'
28648
28649   * uint64x2_t vqshlq_u64 (uint64x2_t, int64x2_t)
28650     _Form of expected instruction(s):_ `vqshl.u64 Q0, Q0, Q0'
28651
28652   * int64x2_t vqshlq_s64 (int64x2_t, int64x2_t)
28653     _Form of expected instruction(s):_ `vqshl.s64 Q0, Q0, Q0'
28654
28655   * uint32x2_t vqrshl_u32 (uint32x2_t, int32x2_t)
28656     _Form of expected instruction(s):_ `vqrshl.u32 D0, D0, D0'
28657
28658   * uint16x4_t vqrshl_u16 (uint16x4_t, int16x4_t)
28659     _Form of expected instruction(s):_ `vqrshl.u16 D0, D0, D0'
28660
28661   * uint8x8_t vqrshl_u8 (uint8x8_t, int8x8_t)
28662     _Form of expected instruction(s):_ `vqrshl.u8 D0, D0, D0'
28663
28664   * int32x2_t vqrshl_s32 (int32x2_t, int32x2_t)
28665     _Form of expected instruction(s):_ `vqrshl.s32 D0, D0, D0'
28666
28667   * int16x4_t vqrshl_s16 (int16x4_t, int16x4_t)
28668     _Form of expected instruction(s):_ `vqrshl.s16 D0, D0, D0'
28669
28670   * int8x8_t vqrshl_s8 (int8x8_t, int8x8_t)
28671     _Form of expected instruction(s):_ `vqrshl.s8 D0, D0, D0'
28672
28673   * uint64x1_t vqrshl_u64 (uint64x1_t, int64x1_t)
28674     _Form of expected instruction(s):_ `vqrshl.u64 D0, D0, D0'
28675
28676   * int64x1_t vqrshl_s64 (int64x1_t, int64x1_t)
28677     _Form of expected instruction(s):_ `vqrshl.s64 D0, D0, D0'
28678
28679   * uint32x4_t vqrshlq_u32 (uint32x4_t, int32x4_t)
28680     _Form of expected instruction(s):_ `vqrshl.u32 Q0, Q0, Q0'
28681
28682   * uint16x8_t vqrshlq_u16 (uint16x8_t, int16x8_t)
28683     _Form of expected instruction(s):_ `vqrshl.u16 Q0, Q0, Q0'
28684
28685   * uint8x16_t vqrshlq_u8 (uint8x16_t, int8x16_t)
28686     _Form of expected instruction(s):_ `vqrshl.u8 Q0, Q0, Q0'
28687
28688   * int32x4_t vqrshlq_s32 (int32x4_t, int32x4_t)
28689     _Form of expected instruction(s):_ `vqrshl.s32 Q0, Q0, Q0'
28690
28691   * int16x8_t vqrshlq_s16 (int16x8_t, int16x8_t)
28692     _Form of expected instruction(s):_ `vqrshl.s16 Q0, Q0, Q0'
28693
28694   * int8x16_t vqrshlq_s8 (int8x16_t, int8x16_t)
28695     _Form of expected instruction(s):_ `vqrshl.s8 Q0, Q0, Q0'
28696
28697   * uint64x2_t vqrshlq_u64 (uint64x2_t, int64x2_t)
28698     _Form of expected instruction(s):_ `vqrshl.u64 Q0, Q0, Q0'
28699
28700   * int64x2_t vqrshlq_s64 (int64x2_t, int64x2_t)
28701     _Form of expected instruction(s):_ `vqrshl.s64 Q0, Q0, Q0'
28702
287036.54.3.26 Vector shift left by constant
28704.......................................
28705
28706   * uint32x2_t vshl_n_u32 (uint32x2_t, const int)
28707     _Form of expected instruction(s):_ `vshl.i32 D0, D0, #0'
28708
28709   * uint16x4_t vshl_n_u16 (uint16x4_t, const int)
28710     _Form of expected instruction(s):_ `vshl.i16 D0, D0, #0'
28711
28712   * uint8x8_t vshl_n_u8 (uint8x8_t, const int)
28713     _Form of expected instruction(s):_ `vshl.i8 D0, D0, #0'
28714
28715   * int32x2_t vshl_n_s32 (int32x2_t, const int)
28716     _Form of expected instruction(s):_ `vshl.i32 D0, D0, #0'
28717
28718   * int16x4_t vshl_n_s16 (int16x4_t, const int)
28719     _Form of expected instruction(s):_ `vshl.i16 D0, D0, #0'
28720
28721   * int8x8_t vshl_n_s8 (int8x8_t, const int)
28722     _Form of expected instruction(s):_ `vshl.i8 D0, D0, #0'
28723
28724   * uint64x1_t vshl_n_u64 (uint64x1_t, const int)
28725     _Form of expected instruction(s):_ `vshl.i64 D0, D0, #0'
28726
28727   * int64x1_t vshl_n_s64 (int64x1_t, const int)
28728     _Form of expected instruction(s):_ `vshl.i64 D0, D0, #0'
28729
28730   * uint32x4_t vshlq_n_u32 (uint32x4_t, const int)
28731     _Form of expected instruction(s):_ `vshl.i32 Q0, Q0, #0'
28732
28733   * uint16x8_t vshlq_n_u16 (uint16x8_t, const int)
28734     _Form of expected instruction(s):_ `vshl.i16 Q0, Q0, #0'
28735
28736   * uint8x16_t vshlq_n_u8 (uint8x16_t, const int)
28737     _Form of expected instruction(s):_ `vshl.i8 Q0, Q0, #0'
28738
28739   * int32x4_t vshlq_n_s32 (int32x4_t, const int)
28740     _Form of expected instruction(s):_ `vshl.i32 Q0, Q0, #0'
28741
28742   * int16x8_t vshlq_n_s16 (int16x8_t, const int)
28743     _Form of expected instruction(s):_ `vshl.i16 Q0, Q0, #0'
28744
28745   * int8x16_t vshlq_n_s8 (int8x16_t, const int)
28746     _Form of expected instruction(s):_ `vshl.i8 Q0, Q0, #0'
28747
28748   * uint64x2_t vshlq_n_u64 (uint64x2_t, const int)
28749     _Form of expected instruction(s):_ `vshl.i64 Q0, Q0, #0'
28750
28751   * int64x2_t vshlq_n_s64 (int64x2_t, const int)
28752     _Form of expected instruction(s):_ `vshl.i64 Q0, Q0, #0'
28753
28754   * uint32x2_t vqshl_n_u32 (uint32x2_t, const int)
28755     _Form of expected instruction(s):_ `vqshl.u32 D0, D0, #0'
28756
28757   * uint16x4_t vqshl_n_u16 (uint16x4_t, const int)
28758     _Form of expected instruction(s):_ `vqshl.u16 D0, D0, #0'
28759
28760   * uint8x8_t vqshl_n_u8 (uint8x8_t, const int)
28761     _Form of expected instruction(s):_ `vqshl.u8 D0, D0, #0'
28762
28763   * int32x2_t vqshl_n_s32 (int32x2_t, const int)
28764     _Form of expected instruction(s):_ `vqshl.s32 D0, D0, #0'
28765
28766   * int16x4_t vqshl_n_s16 (int16x4_t, const int)
28767     _Form of expected instruction(s):_ `vqshl.s16 D0, D0, #0'
28768
28769   * int8x8_t vqshl_n_s8 (int8x8_t, const int)
28770     _Form of expected instruction(s):_ `vqshl.s8 D0, D0, #0'
28771
28772   * uint64x1_t vqshl_n_u64 (uint64x1_t, const int)
28773     _Form of expected instruction(s):_ `vqshl.u64 D0, D0, #0'
28774
28775   * int64x1_t vqshl_n_s64 (int64x1_t, const int)
28776     _Form of expected instruction(s):_ `vqshl.s64 D0, D0, #0'
28777
28778   * uint32x4_t vqshlq_n_u32 (uint32x4_t, const int)
28779     _Form of expected instruction(s):_ `vqshl.u32 Q0, Q0, #0'
28780
28781   * uint16x8_t vqshlq_n_u16 (uint16x8_t, const int)
28782     _Form of expected instruction(s):_ `vqshl.u16 Q0, Q0, #0'
28783
28784   * uint8x16_t vqshlq_n_u8 (uint8x16_t, const int)
28785     _Form of expected instruction(s):_ `vqshl.u8 Q0, Q0, #0'
28786
28787   * int32x4_t vqshlq_n_s32 (int32x4_t, const int)
28788     _Form of expected instruction(s):_ `vqshl.s32 Q0, Q0, #0'
28789
28790   * int16x8_t vqshlq_n_s16 (int16x8_t, const int)
28791     _Form of expected instruction(s):_ `vqshl.s16 Q0, Q0, #0'
28792
28793   * int8x16_t vqshlq_n_s8 (int8x16_t, const int)
28794     _Form of expected instruction(s):_ `vqshl.s8 Q0, Q0, #0'
28795
28796   * uint64x2_t vqshlq_n_u64 (uint64x2_t, const int)
28797     _Form of expected instruction(s):_ `vqshl.u64 Q0, Q0, #0'
28798
28799   * int64x2_t vqshlq_n_s64 (int64x2_t, const int)
28800     _Form of expected instruction(s):_ `vqshl.s64 Q0, Q0, #0'
28801
28802   * uint64x1_t vqshlu_n_s64 (int64x1_t, const int)
28803     _Form of expected instruction(s):_ `vqshlu.s64 D0, D0, #0'
28804
28805   * uint32x2_t vqshlu_n_s32 (int32x2_t, const int)
28806     _Form of expected instruction(s):_ `vqshlu.s32 D0, D0, #0'
28807
28808   * uint16x4_t vqshlu_n_s16 (int16x4_t, const int)
28809     _Form of expected instruction(s):_ `vqshlu.s16 D0, D0, #0'
28810
28811   * uint8x8_t vqshlu_n_s8 (int8x8_t, const int)
28812     _Form of expected instruction(s):_ `vqshlu.s8 D0, D0, #0'
28813
28814   * uint64x2_t vqshluq_n_s64 (int64x2_t, const int)
28815     _Form of expected instruction(s):_ `vqshlu.s64 Q0, Q0, #0'
28816
28817   * uint32x4_t vqshluq_n_s32 (int32x4_t, const int)
28818     _Form of expected instruction(s):_ `vqshlu.s32 Q0, Q0, #0'
28819
28820   * uint16x8_t vqshluq_n_s16 (int16x8_t, const int)
28821     _Form of expected instruction(s):_ `vqshlu.s16 Q0, Q0, #0'
28822
28823   * uint8x16_t vqshluq_n_s8 (int8x16_t, const int)
28824     _Form of expected instruction(s):_ `vqshlu.s8 Q0, Q0, #0'
28825
28826   * uint64x2_t vshll_n_u32 (uint32x2_t, const int)
28827     _Form of expected instruction(s):_ `vshll.u32 Q0, D0, #0'
28828
28829   * uint32x4_t vshll_n_u16 (uint16x4_t, const int)
28830     _Form of expected instruction(s):_ `vshll.u16 Q0, D0, #0'
28831
28832   * uint16x8_t vshll_n_u8 (uint8x8_t, const int)
28833     _Form of expected instruction(s):_ `vshll.u8 Q0, D0, #0'
28834
28835   * int64x2_t vshll_n_s32 (int32x2_t, const int)
28836     _Form of expected instruction(s):_ `vshll.s32 Q0, D0, #0'
28837
28838   * int32x4_t vshll_n_s16 (int16x4_t, const int)
28839     _Form of expected instruction(s):_ `vshll.s16 Q0, D0, #0'
28840
28841   * int16x8_t vshll_n_s8 (int8x8_t, const int)
28842     _Form of expected instruction(s):_ `vshll.s8 Q0, D0, #0'
28843
288446.54.3.27 Vector shift right by constant
28845........................................
28846
28847   * uint32x2_t vshr_n_u32 (uint32x2_t, const int)
28848     _Form of expected instruction(s):_ `vshr.u32 D0, D0, #0'
28849
28850   * uint16x4_t vshr_n_u16 (uint16x4_t, const int)
28851     _Form of expected instruction(s):_ `vshr.u16 D0, D0, #0'
28852
28853   * uint8x8_t vshr_n_u8 (uint8x8_t, const int)
28854     _Form of expected instruction(s):_ `vshr.u8 D0, D0, #0'
28855
28856   * int32x2_t vshr_n_s32 (int32x2_t, const int)
28857     _Form of expected instruction(s):_ `vshr.s32 D0, D0, #0'
28858
28859   * int16x4_t vshr_n_s16 (int16x4_t, const int)
28860     _Form of expected instruction(s):_ `vshr.s16 D0, D0, #0'
28861
28862   * int8x8_t vshr_n_s8 (int8x8_t, const int)
28863     _Form of expected instruction(s):_ `vshr.s8 D0, D0, #0'
28864
28865   * uint64x1_t vshr_n_u64 (uint64x1_t, const int)
28866     _Form of expected instruction(s):_ `vshr.u64 D0, D0, #0'
28867
28868   * int64x1_t vshr_n_s64 (int64x1_t, const int)
28869     _Form of expected instruction(s):_ `vshr.s64 D0, D0, #0'
28870
28871   * uint32x4_t vshrq_n_u32 (uint32x4_t, const int)
28872     _Form of expected instruction(s):_ `vshr.u32 Q0, Q0, #0'
28873
28874   * uint16x8_t vshrq_n_u16 (uint16x8_t, const int)
28875     _Form of expected instruction(s):_ `vshr.u16 Q0, Q0, #0'
28876
28877   * uint8x16_t vshrq_n_u8 (uint8x16_t, const int)
28878     _Form of expected instruction(s):_ `vshr.u8 Q0, Q0, #0'
28879
28880   * int32x4_t vshrq_n_s32 (int32x4_t, const int)
28881     _Form of expected instruction(s):_ `vshr.s32 Q0, Q0, #0'
28882
28883   * int16x8_t vshrq_n_s16 (int16x8_t, const int)
28884     _Form of expected instruction(s):_ `vshr.s16 Q0, Q0, #0'
28885
28886   * int8x16_t vshrq_n_s8 (int8x16_t, const int)
28887     _Form of expected instruction(s):_ `vshr.s8 Q0, Q0, #0'
28888
28889   * uint64x2_t vshrq_n_u64 (uint64x2_t, const int)
28890     _Form of expected instruction(s):_ `vshr.u64 Q0, Q0, #0'
28891
28892   * int64x2_t vshrq_n_s64 (int64x2_t, const int)
28893     _Form of expected instruction(s):_ `vshr.s64 Q0, Q0, #0'
28894
28895   * uint32x2_t vrshr_n_u32 (uint32x2_t, const int)
28896     _Form of expected instruction(s):_ `vrshr.u32 D0, D0, #0'
28897
28898   * uint16x4_t vrshr_n_u16 (uint16x4_t, const int)
28899     _Form of expected instruction(s):_ `vrshr.u16 D0, D0, #0'
28900
28901   * uint8x8_t vrshr_n_u8 (uint8x8_t, const int)
28902     _Form of expected instruction(s):_ `vrshr.u8 D0, D0, #0'
28903
28904   * int32x2_t vrshr_n_s32 (int32x2_t, const int)
28905     _Form of expected instruction(s):_ `vrshr.s32 D0, D0, #0'
28906
28907   * int16x4_t vrshr_n_s16 (int16x4_t, const int)
28908     _Form of expected instruction(s):_ `vrshr.s16 D0, D0, #0'
28909
28910   * int8x8_t vrshr_n_s8 (int8x8_t, const int)
28911     _Form of expected instruction(s):_ `vrshr.s8 D0, D0, #0'
28912
28913   * uint64x1_t vrshr_n_u64 (uint64x1_t, const int)
28914     _Form of expected instruction(s):_ `vrshr.u64 D0, D0, #0'
28915
28916   * int64x1_t vrshr_n_s64 (int64x1_t, const int)
28917     _Form of expected instruction(s):_ `vrshr.s64 D0, D0, #0'
28918
28919   * uint32x4_t vrshrq_n_u32 (uint32x4_t, const int)
28920     _Form of expected instruction(s):_ `vrshr.u32 Q0, Q0, #0'
28921
28922   * uint16x8_t vrshrq_n_u16 (uint16x8_t, const int)
28923     _Form of expected instruction(s):_ `vrshr.u16 Q0, Q0, #0'
28924
28925   * uint8x16_t vrshrq_n_u8 (uint8x16_t, const int)
28926     _Form of expected instruction(s):_ `vrshr.u8 Q0, Q0, #0'
28927
28928   * int32x4_t vrshrq_n_s32 (int32x4_t, const int)
28929     _Form of expected instruction(s):_ `vrshr.s32 Q0, Q0, #0'
28930
28931   * int16x8_t vrshrq_n_s16 (int16x8_t, const int)
28932     _Form of expected instruction(s):_ `vrshr.s16 Q0, Q0, #0'
28933
28934   * int8x16_t vrshrq_n_s8 (int8x16_t, const int)
28935     _Form of expected instruction(s):_ `vrshr.s8 Q0, Q0, #0'
28936
28937   * uint64x2_t vrshrq_n_u64 (uint64x2_t, const int)
28938     _Form of expected instruction(s):_ `vrshr.u64 Q0, Q0, #0'
28939
28940   * int64x2_t vrshrq_n_s64 (int64x2_t, const int)
28941     _Form of expected instruction(s):_ `vrshr.s64 Q0, Q0, #0'
28942
28943   * uint32x2_t vshrn_n_u64 (uint64x2_t, const int)
28944     _Form of expected instruction(s):_ `vshrn.i64 D0, Q0, #0'
28945
28946   * uint16x4_t vshrn_n_u32 (uint32x4_t, const int)
28947     _Form of expected instruction(s):_ `vshrn.i32 D0, Q0, #0'
28948
28949   * uint8x8_t vshrn_n_u16 (uint16x8_t, const int)
28950     _Form of expected instruction(s):_ `vshrn.i16 D0, Q0, #0'
28951
28952   * int32x2_t vshrn_n_s64 (int64x2_t, const int)
28953     _Form of expected instruction(s):_ `vshrn.i64 D0, Q0, #0'
28954
28955   * int16x4_t vshrn_n_s32 (int32x4_t, const int)
28956     _Form of expected instruction(s):_ `vshrn.i32 D0, Q0, #0'
28957
28958   * int8x8_t vshrn_n_s16 (int16x8_t, const int)
28959     _Form of expected instruction(s):_ `vshrn.i16 D0, Q0, #0'
28960
28961   * uint32x2_t vrshrn_n_u64 (uint64x2_t, const int)
28962     _Form of expected instruction(s):_ `vrshrn.i64 D0, Q0, #0'
28963
28964   * uint16x4_t vrshrn_n_u32 (uint32x4_t, const int)
28965     _Form of expected instruction(s):_ `vrshrn.i32 D0, Q0, #0'
28966
28967   * uint8x8_t vrshrn_n_u16 (uint16x8_t, const int)
28968     _Form of expected instruction(s):_ `vrshrn.i16 D0, Q0, #0'
28969
28970   * int32x2_t vrshrn_n_s64 (int64x2_t, const int)
28971     _Form of expected instruction(s):_ `vrshrn.i64 D0, Q0, #0'
28972
28973   * int16x4_t vrshrn_n_s32 (int32x4_t, const int)
28974     _Form of expected instruction(s):_ `vrshrn.i32 D0, Q0, #0'
28975
28976   * int8x8_t vrshrn_n_s16 (int16x8_t, const int)
28977     _Form of expected instruction(s):_ `vrshrn.i16 D0, Q0, #0'
28978
28979   * uint32x2_t vqshrn_n_u64 (uint64x2_t, const int)
28980     _Form of expected instruction(s):_ `vqshrn.u64 D0, Q0, #0'
28981
28982   * uint16x4_t vqshrn_n_u32 (uint32x4_t, const int)
28983     _Form of expected instruction(s):_ `vqshrn.u32 D0, Q0, #0'
28984
28985   * uint8x8_t vqshrn_n_u16 (uint16x8_t, const int)
28986     _Form of expected instruction(s):_ `vqshrn.u16 D0, Q0, #0'
28987
28988   * int32x2_t vqshrn_n_s64 (int64x2_t, const int)
28989     _Form of expected instruction(s):_ `vqshrn.s64 D0, Q0, #0'
28990
28991   * int16x4_t vqshrn_n_s32 (int32x4_t, const int)
28992     _Form of expected instruction(s):_ `vqshrn.s32 D0, Q0, #0'
28993
28994   * int8x8_t vqshrn_n_s16 (int16x8_t, const int)
28995     _Form of expected instruction(s):_ `vqshrn.s16 D0, Q0, #0'
28996
28997   * uint32x2_t vqrshrn_n_u64 (uint64x2_t, const int)
28998     _Form of expected instruction(s):_ `vqrshrn.u64 D0, Q0, #0'
28999
29000   * uint16x4_t vqrshrn_n_u32 (uint32x4_t, const int)
29001     _Form of expected instruction(s):_ `vqrshrn.u32 D0, Q0, #0'
29002
29003   * uint8x8_t vqrshrn_n_u16 (uint16x8_t, const int)
29004     _Form of expected instruction(s):_ `vqrshrn.u16 D0, Q0, #0'
29005
29006   * int32x2_t vqrshrn_n_s64 (int64x2_t, const int)
29007     _Form of expected instruction(s):_ `vqrshrn.s64 D0, Q0, #0'
29008
29009   * int16x4_t vqrshrn_n_s32 (int32x4_t, const int)
29010     _Form of expected instruction(s):_ `vqrshrn.s32 D0, Q0, #0'
29011
29012   * int8x8_t vqrshrn_n_s16 (int16x8_t, const int)
29013     _Form of expected instruction(s):_ `vqrshrn.s16 D0, Q0, #0'
29014
29015   * uint32x2_t vqshrun_n_s64 (int64x2_t, const int)
29016     _Form of expected instruction(s):_ `vqshrun.s64 D0, Q0, #0'
29017
29018   * uint16x4_t vqshrun_n_s32 (int32x4_t, const int)
29019     _Form of expected instruction(s):_ `vqshrun.s32 D0, Q0, #0'
29020
29021   * uint8x8_t vqshrun_n_s16 (int16x8_t, const int)
29022     _Form of expected instruction(s):_ `vqshrun.s16 D0, Q0, #0'
29023
29024   * uint32x2_t vqrshrun_n_s64 (int64x2_t, const int)
29025     _Form of expected instruction(s):_ `vqrshrun.s64 D0, Q0, #0'
29026
29027   * uint16x4_t vqrshrun_n_s32 (int32x4_t, const int)
29028     _Form of expected instruction(s):_ `vqrshrun.s32 D0, Q0, #0'
29029
29030   * uint8x8_t vqrshrun_n_s16 (int16x8_t, const int)
29031     _Form of expected instruction(s):_ `vqrshrun.s16 D0, Q0, #0'
29032
290336.54.3.28 Vector shift right by constant and accumulate
29034.......................................................
29035
29036   * uint32x2_t vsra_n_u32 (uint32x2_t, uint32x2_t, const int)
29037     _Form of expected instruction(s):_ `vsra.u32 D0, D0, #0'
29038
29039   * uint16x4_t vsra_n_u16 (uint16x4_t, uint16x4_t, const int)
29040     _Form of expected instruction(s):_ `vsra.u16 D0, D0, #0'
29041
29042   * uint8x8_t vsra_n_u8 (uint8x8_t, uint8x8_t, const int)
29043     _Form of expected instruction(s):_ `vsra.u8 D0, D0, #0'
29044
29045   * int32x2_t vsra_n_s32 (int32x2_t, int32x2_t, const int)
29046     _Form of expected instruction(s):_ `vsra.s32 D0, D0, #0'
29047
29048   * int16x4_t vsra_n_s16 (int16x4_t, int16x4_t, const int)
29049     _Form of expected instruction(s):_ `vsra.s16 D0, D0, #0'
29050
29051   * int8x8_t vsra_n_s8 (int8x8_t, int8x8_t, const int)
29052     _Form of expected instruction(s):_ `vsra.s8 D0, D0, #0'
29053
29054   * uint64x1_t vsra_n_u64 (uint64x1_t, uint64x1_t, const int)
29055     _Form of expected instruction(s):_ `vsra.u64 D0, D0, #0'
29056
29057   * int64x1_t vsra_n_s64 (int64x1_t, int64x1_t, const int)
29058     _Form of expected instruction(s):_ `vsra.s64 D0, D0, #0'
29059
29060   * uint32x4_t vsraq_n_u32 (uint32x4_t, uint32x4_t, const int)
29061     _Form of expected instruction(s):_ `vsra.u32 Q0, Q0, #0'
29062
29063   * uint16x8_t vsraq_n_u16 (uint16x8_t, uint16x8_t, const int)
29064     _Form of expected instruction(s):_ `vsra.u16 Q0, Q0, #0'
29065
29066   * uint8x16_t vsraq_n_u8 (uint8x16_t, uint8x16_t, const int)
29067     _Form of expected instruction(s):_ `vsra.u8 Q0, Q0, #0'
29068
29069   * int32x4_t vsraq_n_s32 (int32x4_t, int32x4_t, const int)
29070     _Form of expected instruction(s):_ `vsra.s32 Q0, Q0, #0'
29071
29072   * int16x8_t vsraq_n_s16 (int16x8_t, int16x8_t, const int)
29073     _Form of expected instruction(s):_ `vsra.s16 Q0, Q0, #0'
29074
29075   * int8x16_t vsraq_n_s8 (int8x16_t, int8x16_t, const int)
29076     _Form of expected instruction(s):_ `vsra.s8 Q0, Q0, #0'
29077
29078   * uint64x2_t vsraq_n_u64 (uint64x2_t, uint64x2_t, const int)
29079     _Form of expected instruction(s):_ `vsra.u64 Q0, Q0, #0'
29080
29081   * int64x2_t vsraq_n_s64 (int64x2_t, int64x2_t, const int)
29082     _Form of expected instruction(s):_ `vsra.s64 Q0, Q0, #0'
29083
29084   * uint32x2_t vrsra_n_u32 (uint32x2_t, uint32x2_t, const int)
29085     _Form of expected instruction(s):_ `vrsra.u32 D0, D0, #0'
29086
29087   * uint16x4_t vrsra_n_u16 (uint16x4_t, uint16x4_t, const int)
29088     _Form of expected instruction(s):_ `vrsra.u16 D0, D0, #0'
29089
29090   * uint8x8_t vrsra_n_u8 (uint8x8_t, uint8x8_t, const int)
29091     _Form of expected instruction(s):_ `vrsra.u8 D0, D0, #0'
29092
29093   * int32x2_t vrsra_n_s32 (int32x2_t, int32x2_t, const int)
29094     _Form of expected instruction(s):_ `vrsra.s32 D0, D0, #0'
29095
29096   * int16x4_t vrsra_n_s16 (int16x4_t, int16x4_t, const int)
29097     _Form of expected instruction(s):_ `vrsra.s16 D0, D0, #0'
29098
29099   * int8x8_t vrsra_n_s8 (int8x8_t, int8x8_t, const int)
29100     _Form of expected instruction(s):_ `vrsra.s8 D0, D0, #0'
29101
29102   * uint64x1_t vrsra_n_u64 (uint64x1_t, uint64x1_t, const int)
29103     _Form of expected instruction(s):_ `vrsra.u64 D0, D0, #0'
29104
29105   * int64x1_t vrsra_n_s64 (int64x1_t, int64x1_t, const int)
29106     _Form of expected instruction(s):_ `vrsra.s64 D0, D0, #0'
29107
29108   * uint32x4_t vrsraq_n_u32 (uint32x4_t, uint32x4_t, const int)
29109     _Form of expected instruction(s):_ `vrsra.u32 Q0, Q0, #0'
29110
29111   * uint16x8_t vrsraq_n_u16 (uint16x8_t, uint16x8_t, const int)
29112     _Form of expected instruction(s):_ `vrsra.u16 Q0, Q0, #0'
29113
29114   * uint8x16_t vrsraq_n_u8 (uint8x16_t, uint8x16_t, const int)
29115     _Form of expected instruction(s):_ `vrsra.u8 Q0, Q0, #0'
29116
29117   * int32x4_t vrsraq_n_s32 (int32x4_t, int32x4_t, const int)
29118     _Form of expected instruction(s):_ `vrsra.s32 Q0, Q0, #0'
29119
29120   * int16x8_t vrsraq_n_s16 (int16x8_t, int16x8_t, const int)
29121     _Form of expected instruction(s):_ `vrsra.s16 Q0, Q0, #0'
29122
29123   * int8x16_t vrsraq_n_s8 (int8x16_t, int8x16_t, const int)
29124     _Form of expected instruction(s):_ `vrsra.s8 Q0, Q0, #0'
29125
29126   * uint64x2_t vrsraq_n_u64 (uint64x2_t, uint64x2_t, const int)
29127     _Form of expected instruction(s):_ `vrsra.u64 Q0, Q0, #0'
29128
29129   * int64x2_t vrsraq_n_s64 (int64x2_t, int64x2_t, const int)
29130     _Form of expected instruction(s):_ `vrsra.s64 Q0, Q0, #0'
29131
291326.54.3.29 Vector shift right and insert
29133.......................................
29134
29135   * uint32x2_t vsri_n_u32 (uint32x2_t, uint32x2_t, const int)
29136     _Form of expected instruction(s):_ `vsri.32 D0, D0, #0'
29137
29138   * uint16x4_t vsri_n_u16 (uint16x4_t, uint16x4_t, const int)
29139     _Form of expected instruction(s):_ `vsri.16 D0, D0, #0'
29140
29141   * uint8x8_t vsri_n_u8 (uint8x8_t, uint8x8_t, const int)
29142     _Form of expected instruction(s):_ `vsri.8 D0, D0, #0'
29143
29144   * int32x2_t vsri_n_s32 (int32x2_t, int32x2_t, const int)
29145     _Form of expected instruction(s):_ `vsri.32 D0, D0, #0'
29146
29147   * int16x4_t vsri_n_s16 (int16x4_t, int16x4_t, const int)
29148     _Form of expected instruction(s):_ `vsri.16 D0, D0, #0'
29149
29150   * int8x8_t vsri_n_s8 (int8x8_t, int8x8_t, const int)
29151     _Form of expected instruction(s):_ `vsri.8 D0, D0, #0'
29152
29153   * uint64x1_t vsri_n_u64 (uint64x1_t, uint64x1_t, const int)
29154     _Form of expected instruction(s):_ `vsri.64 D0, D0, #0'
29155
29156   * int64x1_t vsri_n_s64 (int64x1_t, int64x1_t, const int)
29157     _Form of expected instruction(s):_ `vsri.64 D0, D0, #0'
29158
29159   * poly16x4_t vsri_n_p16 (poly16x4_t, poly16x4_t, const int)
29160     _Form of expected instruction(s):_ `vsri.16 D0, D0, #0'
29161
29162   * poly8x8_t vsri_n_p8 (poly8x8_t, poly8x8_t, const int)
29163     _Form of expected instruction(s):_ `vsri.8 D0, D0, #0'
29164
29165   * uint32x4_t vsriq_n_u32 (uint32x4_t, uint32x4_t, const int)
29166     _Form of expected instruction(s):_ `vsri.32 Q0, Q0, #0'
29167
29168   * uint16x8_t vsriq_n_u16 (uint16x8_t, uint16x8_t, const int)
29169     _Form of expected instruction(s):_ `vsri.16 Q0, Q0, #0'
29170
29171   * uint8x16_t vsriq_n_u8 (uint8x16_t, uint8x16_t, const int)
29172     _Form of expected instruction(s):_ `vsri.8 Q0, Q0, #0'
29173
29174   * int32x4_t vsriq_n_s32 (int32x4_t, int32x4_t, const int)
29175     _Form of expected instruction(s):_ `vsri.32 Q0, Q0, #0'
29176
29177   * int16x8_t vsriq_n_s16 (int16x8_t, int16x8_t, const int)
29178     _Form of expected instruction(s):_ `vsri.16 Q0, Q0, #0'
29179
29180   * int8x16_t vsriq_n_s8 (int8x16_t, int8x16_t, const int)
29181     _Form of expected instruction(s):_ `vsri.8 Q0, Q0, #0'
29182
29183   * uint64x2_t vsriq_n_u64 (uint64x2_t, uint64x2_t, const int)
29184     _Form of expected instruction(s):_ `vsri.64 Q0, Q0, #0'
29185
29186   * int64x2_t vsriq_n_s64 (int64x2_t, int64x2_t, const int)
29187     _Form of expected instruction(s):_ `vsri.64 Q0, Q0, #0'
29188
29189   * poly16x8_t vsriq_n_p16 (poly16x8_t, poly16x8_t, const int)
29190     _Form of expected instruction(s):_ `vsri.16 Q0, Q0, #0'
29191
29192   * poly8x16_t vsriq_n_p8 (poly8x16_t, poly8x16_t, const int)
29193     _Form of expected instruction(s):_ `vsri.8 Q0, Q0, #0'
29194
291956.54.3.30 Vector shift left and insert
29196......................................
29197
29198   * uint32x2_t vsli_n_u32 (uint32x2_t, uint32x2_t, const int)
29199     _Form of expected instruction(s):_ `vsli.32 D0, D0, #0'
29200
29201   * uint16x4_t vsli_n_u16 (uint16x4_t, uint16x4_t, const int)
29202     _Form of expected instruction(s):_ `vsli.16 D0, D0, #0'
29203
29204   * uint8x8_t vsli_n_u8 (uint8x8_t, uint8x8_t, const int)
29205     _Form of expected instruction(s):_ `vsli.8 D0, D0, #0'
29206
29207   * int32x2_t vsli_n_s32 (int32x2_t, int32x2_t, const int)
29208     _Form of expected instruction(s):_ `vsli.32 D0, D0, #0'
29209
29210   * int16x4_t vsli_n_s16 (int16x4_t, int16x4_t, const int)
29211     _Form of expected instruction(s):_ `vsli.16 D0, D0, #0'
29212
29213   * int8x8_t vsli_n_s8 (int8x8_t, int8x8_t, const int)
29214     _Form of expected instruction(s):_ `vsli.8 D0, D0, #0'
29215
29216   * uint64x1_t vsli_n_u64 (uint64x1_t, uint64x1_t, const int)
29217     _Form of expected instruction(s):_ `vsli.64 D0, D0, #0'
29218
29219   * int64x1_t vsli_n_s64 (int64x1_t, int64x1_t, const int)
29220     _Form of expected instruction(s):_ `vsli.64 D0, D0, #0'
29221
29222   * poly16x4_t vsli_n_p16 (poly16x4_t, poly16x4_t, const int)
29223     _Form of expected instruction(s):_ `vsli.16 D0, D0, #0'
29224
29225   * poly8x8_t vsli_n_p8 (poly8x8_t, poly8x8_t, const int)
29226     _Form of expected instruction(s):_ `vsli.8 D0, D0, #0'
29227
29228   * uint32x4_t vsliq_n_u32 (uint32x4_t, uint32x4_t, const int)
29229     _Form of expected instruction(s):_ `vsli.32 Q0, Q0, #0'
29230
29231   * uint16x8_t vsliq_n_u16 (uint16x8_t, uint16x8_t, const int)
29232     _Form of expected instruction(s):_ `vsli.16 Q0, Q0, #0'
29233
29234   * uint8x16_t vsliq_n_u8 (uint8x16_t, uint8x16_t, const int)
29235     _Form of expected instruction(s):_ `vsli.8 Q0, Q0, #0'
29236
29237   * int32x4_t vsliq_n_s32 (int32x4_t, int32x4_t, const int)
29238     _Form of expected instruction(s):_ `vsli.32 Q0, Q0, #0'
29239
29240   * int16x8_t vsliq_n_s16 (int16x8_t, int16x8_t, const int)
29241     _Form of expected instruction(s):_ `vsli.16 Q0, Q0, #0'
29242
29243   * int8x16_t vsliq_n_s8 (int8x16_t, int8x16_t, const int)
29244     _Form of expected instruction(s):_ `vsli.8 Q0, Q0, #0'
29245
29246   * uint64x2_t vsliq_n_u64 (uint64x2_t, uint64x2_t, const int)
29247     _Form of expected instruction(s):_ `vsli.64 Q0, Q0, #0'
29248
29249   * int64x2_t vsliq_n_s64 (int64x2_t, int64x2_t, const int)
29250     _Form of expected instruction(s):_ `vsli.64 Q0, Q0, #0'
29251
29252   * poly16x8_t vsliq_n_p16 (poly16x8_t, poly16x8_t, const int)
29253     _Form of expected instruction(s):_ `vsli.16 Q0, Q0, #0'
29254
29255   * poly8x16_t vsliq_n_p8 (poly8x16_t, poly8x16_t, const int)
29256     _Form of expected instruction(s):_ `vsli.8 Q0, Q0, #0'
29257
292586.54.3.31 Absolute value
29259........................
29260
29261   * float32x2_t vabs_f32 (float32x2_t)
29262     _Form of expected instruction(s):_ `vabs.f32 D0, D0'
29263
29264   * int32x2_t vabs_s32 (int32x2_t)
29265     _Form of expected instruction(s):_ `vabs.s32 D0, D0'
29266
29267   * int16x4_t vabs_s16 (int16x4_t)
29268     _Form of expected instruction(s):_ `vabs.s16 D0, D0'
29269
29270   * int8x8_t vabs_s8 (int8x8_t)
29271     _Form of expected instruction(s):_ `vabs.s8 D0, D0'
29272
29273   * float32x4_t vabsq_f32 (float32x4_t)
29274     _Form of expected instruction(s):_ `vabs.f32 Q0, Q0'
29275
29276   * int32x4_t vabsq_s32 (int32x4_t)
29277     _Form of expected instruction(s):_ `vabs.s32 Q0, Q0'
29278
29279   * int16x8_t vabsq_s16 (int16x8_t)
29280     _Form of expected instruction(s):_ `vabs.s16 Q0, Q0'
29281
29282   * int8x16_t vabsq_s8 (int8x16_t)
29283     _Form of expected instruction(s):_ `vabs.s8 Q0, Q0'
29284
29285   * int32x2_t vqabs_s32 (int32x2_t)
29286     _Form of expected instruction(s):_ `vqabs.s32 D0, D0'
29287
29288   * int16x4_t vqabs_s16 (int16x4_t)
29289     _Form of expected instruction(s):_ `vqabs.s16 D0, D0'
29290
29291   * int8x8_t vqabs_s8 (int8x8_t)
29292     _Form of expected instruction(s):_ `vqabs.s8 D0, D0'
29293
29294   * int32x4_t vqabsq_s32 (int32x4_t)
29295     _Form of expected instruction(s):_ `vqabs.s32 Q0, Q0'
29296
29297   * int16x8_t vqabsq_s16 (int16x8_t)
29298     _Form of expected instruction(s):_ `vqabs.s16 Q0, Q0'
29299
29300   * int8x16_t vqabsq_s8 (int8x16_t)
29301     _Form of expected instruction(s):_ `vqabs.s8 Q0, Q0'
29302
293036.54.3.32 Negation
29304..................
29305
29306   * float32x2_t vneg_f32 (float32x2_t)
29307     _Form of expected instruction(s):_ `vneg.f32 D0, D0'
29308
29309   * int32x2_t vneg_s32 (int32x2_t)
29310     _Form of expected instruction(s):_ `vneg.s32 D0, D0'
29311
29312   * int16x4_t vneg_s16 (int16x4_t)
29313     _Form of expected instruction(s):_ `vneg.s16 D0, D0'
29314
29315   * int8x8_t vneg_s8 (int8x8_t)
29316     _Form of expected instruction(s):_ `vneg.s8 D0, D0'
29317
29318   * float32x4_t vnegq_f32 (float32x4_t)
29319     _Form of expected instruction(s):_ `vneg.f32 Q0, Q0'
29320
29321   * int32x4_t vnegq_s32 (int32x4_t)
29322     _Form of expected instruction(s):_ `vneg.s32 Q0, Q0'
29323
29324   * int16x8_t vnegq_s16 (int16x8_t)
29325     _Form of expected instruction(s):_ `vneg.s16 Q0, Q0'
29326
29327   * int8x16_t vnegq_s8 (int8x16_t)
29328     _Form of expected instruction(s):_ `vneg.s8 Q0, Q0'
29329
29330   * int32x2_t vqneg_s32 (int32x2_t)
29331     _Form of expected instruction(s):_ `vqneg.s32 D0, D0'
29332
29333   * int16x4_t vqneg_s16 (int16x4_t)
29334     _Form of expected instruction(s):_ `vqneg.s16 D0, D0'
29335
29336   * int8x8_t vqneg_s8 (int8x8_t)
29337     _Form of expected instruction(s):_ `vqneg.s8 D0, D0'
29338
29339   * int32x4_t vqnegq_s32 (int32x4_t)
29340     _Form of expected instruction(s):_ `vqneg.s32 Q0, Q0'
29341
29342   * int16x8_t vqnegq_s16 (int16x8_t)
29343     _Form of expected instruction(s):_ `vqneg.s16 Q0, Q0'
29344
29345   * int8x16_t vqnegq_s8 (int8x16_t)
29346     _Form of expected instruction(s):_ `vqneg.s8 Q0, Q0'
29347
293486.54.3.33 Bitwise not
29349.....................
29350
29351   * uint32x2_t vmvn_u32 (uint32x2_t)
29352     _Form of expected instruction(s):_ `vmvn D0, D0'
29353
29354   * uint16x4_t vmvn_u16 (uint16x4_t)
29355     _Form of expected instruction(s):_ `vmvn D0, D0'
29356
29357   * uint8x8_t vmvn_u8 (uint8x8_t)
29358     _Form of expected instruction(s):_ `vmvn D0, D0'
29359
29360   * int32x2_t vmvn_s32 (int32x2_t)
29361     _Form of expected instruction(s):_ `vmvn D0, D0'
29362
29363   * int16x4_t vmvn_s16 (int16x4_t)
29364     _Form of expected instruction(s):_ `vmvn D0, D0'
29365
29366   * int8x8_t vmvn_s8 (int8x8_t)
29367     _Form of expected instruction(s):_ `vmvn D0, D0'
29368
29369   * poly8x8_t vmvn_p8 (poly8x8_t)
29370     _Form of expected instruction(s):_ `vmvn D0, D0'
29371
29372   * uint32x4_t vmvnq_u32 (uint32x4_t)
29373     _Form of expected instruction(s):_ `vmvn Q0, Q0'
29374
29375   * uint16x8_t vmvnq_u16 (uint16x8_t)
29376     _Form of expected instruction(s):_ `vmvn Q0, Q0'
29377
29378   * uint8x16_t vmvnq_u8 (uint8x16_t)
29379     _Form of expected instruction(s):_ `vmvn Q0, Q0'
29380
29381   * int32x4_t vmvnq_s32 (int32x4_t)
29382     _Form of expected instruction(s):_ `vmvn Q0, Q0'
29383
29384   * int16x8_t vmvnq_s16 (int16x8_t)
29385     _Form of expected instruction(s):_ `vmvn Q0, Q0'
29386
29387   * int8x16_t vmvnq_s8 (int8x16_t)
29388     _Form of expected instruction(s):_ `vmvn Q0, Q0'
29389
29390   * poly8x16_t vmvnq_p8 (poly8x16_t)
29391     _Form of expected instruction(s):_ `vmvn Q0, Q0'
29392
293936.54.3.34 Count leading sign bits
29394.................................
29395
29396   * int32x2_t vcls_s32 (int32x2_t)
29397     _Form of expected instruction(s):_ `vcls.s32 D0, D0'
29398
29399   * int16x4_t vcls_s16 (int16x4_t)
29400     _Form of expected instruction(s):_ `vcls.s16 D0, D0'
29401
29402   * int8x8_t vcls_s8 (int8x8_t)
29403     _Form of expected instruction(s):_ `vcls.s8 D0, D0'
29404
29405   * int32x4_t vclsq_s32 (int32x4_t)
29406     _Form of expected instruction(s):_ `vcls.s32 Q0, Q0'
29407
29408   * int16x8_t vclsq_s16 (int16x8_t)
29409     _Form of expected instruction(s):_ `vcls.s16 Q0, Q0'
29410
29411   * int8x16_t vclsq_s8 (int8x16_t)
29412     _Form of expected instruction(s):_ `vcls.s8 Q0, Q0'
29413
294146.54.3.35 Count leading zeros
29415.............................
29416
29417   * uint32x2_t vclz_u32 (uint32x2_t)
29418     _Form of expected instruction(s):_ `vclz.i32 D0, D0'
29419
29420   * uint16x4_t vclz_u16 (uint16x4_t)
29421     _Form of expected instruction(s):_ `vclz.i16 D0, D0'
29422
29423   * uint8x8_t vclz_u8 (uint8x8_t)
29424     _Form of expected instruction(s):_ `vclz.i8 D0, D0'
29425
29426   * int32x2_t vclz_s32 (int32x2_t)
29427     _Form of expected instruction(s):_ `vclz.i32 D0, D0'
29428
29429   * int16x4_t vclz_s16 (int16x4_t)
29430     _Form of expected instruction(s):_ `vclz.i16 D0, D0'
29431
29432   * int8x8_t vclz_s8 (int8x8_t)
29433     _Form of expected instruction(s):_ `vclz.i8 D0, D0'
29434
29435   * uint32x4_t vclzq_u32 (uint32x4_t)
29436     _Form of expected instruction(s):_ `vclz.i32 Q0, Q0'
29437
29438   * uint16x8_t vclzq_u16 (uint16x8_t)
29439     _Form of expected instruction(s):_ `vclz.i16 Q0, Q0'
29440
29441   * uint8x16_t vclzq_u8 (uint8x16_t)
29442     _Form of expected instruction(s):_ `vclz.i8 Q0, Q0'
29443
29444   * int32x4_t vclzq_s32 (int32x4_t)
29445     _Form of expected instruction(s):_ `vclz.i32 Q0, Q0'
29446
29447   * int16x8_t vclzq_s16 (int16x8_t)
29448     _Form of expected instruction(s):_ `vclz.i16 Q0, Q0'
29449
29450   * int8x16_t vclzq_s8 (int8x16_t)
29451     _Form of expected instruction(s):_ `vclz.i8 Q0, Q0'
29452
294536.54.3.36 Count number of set bits
29454..................................
29455
29456   * uint8x8_t vcnt_u8 (uint8x8_t)
29457     _Form of expected instruction(s):_ `vcnt.8 D0, D0'
29458
29459   * int8x8_t vcnt_s8 (int8x8_t)
29460     _Form of expected instruction(s):_ `vcnt.8 D0, D0'
29461
29462   * poly8x8_t vcnt_p8 (poly8x8_t)
29463     _Form of expected instruction(s):_ `vcnt.8 D0, D0'
29464
29465   * uint8x16_t vcntq_u8 (uint8x16_t)
29466     _Form of expected instruction(s):_ `vcnt.8 Q0, Q0'
29467
29468   * int8x16_t vcntq_s8 (int8x16_t)
29469     _Form of expected instruction(s):_ `vcnt.8 Q0, Q0'
29470
29471   * poly8x16_t vcntq_p8 (poly8x16_t)
29472     _Form of expected instruction(s):_ `vcnt.8 Q0, Q0'
29473
294746.54.3.37 Reciprocal estimate
29475.............................
29476
29477   * float32x2_t vrecpe_f32 (float32x2_t)
29478     _Form of expected instruction(s):_ `vrecpe.f32 D0, D0'
29479
29480   * uint32x2_t vrecpe_u32 (uint32x2_t)
29481     _Form of expected instruction(s):_ `vrecpe.u32 D0, D0'
29482
29483   * float32x4_t vrecpeq_f32 (float32x4_t)
29484     _Form of expected instruction(s):_ `vrecpe.f32 Q0, Q0'
29485
29486   * uint32x4_t vrecpeq_u32 (uint32x4_t)
29487     _Form of expected instruction(s):_ `vrecpe.u32 Q0, Q0'
29488
294896.54.3.38 Reciprocal square-root estimate
29490.........................................
29491
29492   * float32x2_t vrsqrte_f32 (float32x2_t)
29493     _Form of expected instruction(s):_ `vrsqrte.f32 D0, D0'
29494
29495   * uint32x2_t vrsqrte_u32 (uint32x2_t)
29496     _Form of expected instruction(s):_ `vrsqrte.u32 D0, D0'
29497
29498   * float32x4_t vrsqrteq_f32 (float32x4_t)
29499     _Form of expected instruction(s):_ `vrsqrte.f32 Q0, Q0'
29500
29501   * uint32x4_t vrsqrteq_u32 (uint32x4_t)
29502     _Form of expected instruction(s):_ `vrsqrte.u32 Q0, Q0'
29503
295046.54.3.39 Get lanes from a vector
29505.................................
29506
29507   * uint32_t vget_lane_u32 (uint32x2_t, const int)
29508     _Form of expected instruction(s):_ `vmov.32 R0, D0[0]'
29509
29510   * uint16_t vget_lane_u16 (uint16x4_t, const int)
29511     _Form of expected instruction(s):_ `vmov.u16 R0, D0[0]'
29512
29513   * uint8_t vget_lane_u8 (uint8x8_t, const int)
29514     _Form of expected instruction(s):_ `vmov.u8 R0, D0[0]'
29515
29516   * int32_t vget_lane_s32 (int32x2_t, const int)
29517     _Form of expected instruction(s):_ `vmov.32 R0, D0[0]'
29518
29519   * int16_t vget_lane_s16 (int16x4_t, const int)
29520     _Form of expected instruction(s):_ `vmov.s16 R0, D0[0]'
29521
29522   * int8_t vget_lane_s8 (int8x8_t, const int)
29523     _Form of expected instruction(s):_ `vmov.s8 R0, D0[0]'
29524
29525   * float32_t vget_lane_f32 (float32x2_t, const int)
29526     _Form of expected instruction(s):_ `vmov.32 R0, D0[0]'
29527
29528   * poly16_t vget_lane_p16 (poly16x4_t, const int)
29529     _Form of expected instruction(s):_ `vmov.u16 R0, D0[0]'
29530
29531   * poly8_t vget_lane_p8 (poly8x8_t, const int)
29532     _Form of expected instruction(s):_ `vmov.u8 R0, D0[0]'
29533
29534   * uint64_t vget_lane_u64 (uint64x1_t, const int)
29535
29536   * int64_t vget_lane_s64 (int64x1_t, const int)
29537
29538   * uint32_t vgetq_lane_u32 (uint32x4_t, const int)
29539     _Form of expected instruction(s):_ `vmov.32 R0, D0[0]'
29540
29541   * uint16_t vgetq_lane_u16 (uint16x8_t, const int)
29542     _Form of expected instruction(s):_ `vmov.u16 R0, D0[0]'
29543
29544   * uint8_t vgetq_lane_u8 (uint8x16_t, const int)
29545     _Form of expected instruction(s):_ `vmov.u8 R0, D0[0]'
29546
29547   * int32_t vgetq_lane_s32 (int32x4_t, const int)
29548     _Form of expected instruction(s):_ `vmov.32 R0, D0[0]'
29549
29550   * int16_t vgetq_lane_s16 (int16x8_t, const int)
29551     _Form of expected instruction(s):_ `vmov.s16 R0, D0[0]'
29552
29553   * int8_t vgetq_lane_s8 (int8x16_t, const int)
29554     _Form of expected instruction(s):_ `vmov.s8 R0, D0[0]'
29555
29556   * float32_t vgetq_lane_f32 (float32x4_t, const int)
29557     _Form of expected instruction(s):_ `vmov.32 R0, D0[0]'
29558
29559   * poly16_t vgetq_lane_p16 (poly16x8_t, const int)
29560     _Form of expected instruction(s):_ `vmov.u16 R0, D0[0]'
29561
29562   * poly8_t vgetq_lane_p8 (poly8x16_t, const int)
29563     _Form of expected instruction(s):_ `vmov.u8 R0, D0[0]'
29564
29565   * uint64_t vgetq_lane_u64 (uint64x2_t, const int)
29566     _Form of expected instruction(s):_ `vmov R0, R0, D0'
29567
29568   * int64_t vgetq_lane_s64 (int64x2_t, const int)
29569     _Form of expected instruction(s):_ `vmov R0, R0, D0'
29570
295716.54.3.40 Set lanes in a vector
29572...............................
29573
29574   * uint32x2_t vset_lane_u32 (uint32_t, uint32x2_t, const int)
29575     _Form of expected instruction(s):_ `vmov.32 D0[0], R0'
29576
29577   * uint16x4_t vset_lane_u16 (uint16_t, uint16x4_t, const int)
29578     _Form of expected instruction(s):_ `vmov.16 D0[0], R0'
29579
29580   * uint8x8_t vset_lane_u8 (uint8_t, uint8x8_t, const int)
29581     _Form of expected instruction(s):_ `vmov.8 D0[0], R0'
29582
29583   * int32x2_t vset_lane_s32 (int32_t, int32x2_t, const int)
29584     _Form of expected instruction(s):_ `vmov.32 D0[0], R0'
29585
29586   * int16x4_t vset_lane_s16 (int16_t, int16x4_t, const int)
29587     _Form of expected instruction(s):_ `vmov.16 D0[0], R0'
29588
29589   * int8x8_t vset_lane_s8 (int8_t, int8x8_t, const int)
29590     _Form of expected instruction(s):_ `vmov.8 D0[0], R0'
29591
29592   * float32x2_t vset_lane_f32 (float32_t, float32x2_t, const int)
29593     _Form of expected instruction(s):_ `vmov.32 D0[0], R0'
29594
29595   * poly16x4_t vset_lane_p16 (poly16_t, poly16x4_t, const int)
29596     _Form of expected instruction(s):_ `vmov.16 D0[0], R0'
29597
29598   * poly8x8_t vset_lane_p8 (poly8_t, poly8x8_t, const int)
29599     _Form of expected instruction(s):_ `vmov.8 D0[0], R0'
29600
29601   * uint64x1_t vset_lane_u64 (uint64_t, uint64x1_t, const int)
29602
29603   * int64x1_t vset_lane_s64 (int64_t, int64x1_t, const int)
29604
29605   * uint32x4_t vsetq_lane_u32 (uint32_t, uint32x4_t, const int)
29606     _Form of expected instruction(s):_ `vmov.32 D0[0], R0'
29607
29608   * uint16x8_t vsetq_lane_u16 (uint16_t, uint16x8_t, const int)
29609     _Form of expected instruction(s):_ `vmov.16 D0[0], R0'
29610
29611   * uint8x16_t vsetq_lane_u8 (uint8_t, uint8x16_t, const int)
29612     _Form of expected instruction(s):_ `vmov.8 D0[0], R0'
29613
29614   * int32x4_t vsetq_lane_s32 (int32_t, int32x4_t, const int)
29615     _Form of expected instruction(s):_ `vmov.32 D0[0], R0'
29616
29617   * int16x8_t vsetq_lane_s16 (int16_t, int16x8_t, const int)
29618     _Form of expected instruction(s):_ `vmov.16 D0[0], R0'
29619
29620   * int8x16_t vsetq_lane_s8 (int8_t, int8x16_t, const int)
29621     _Form of expected instruction(s):_ `vmov.8 D0[0], R0'
29622
29623   * float32x4_t vsetq_lane_f32 (float32_t, float32x4_t, const int)
29624     _Form of expected instruction(s):_ `vmov.32 D0[0], R0'
29625
29626   * poly16x8_t vsetq_lane_p16 (poly16_t, poly16x8_t, const int)
29627     _Form of expected instruction(s):_ `vmov.16 D0[0], R0'
29628
29629   * poly8x16_t vsetq_lane_p8 (poly8_t, poly8x16_t, const int)
29630     _Form of expected instruction(s):_ `vmov.8 D0[0], R0'
29631
29632   * uint64x2_t vsetq_lane_u64 (uint64_t, uint64x2_t, const int)
29633     _Form of expected instruction(s):_ `vmov D0, R0, R0'
29634
29635   * int64x2_t vsetq_lane_s64 (int64_t, int64x2_t, const int)
29636     _Form of expected instruction(s):_ `vmov D0, R0, R0'
29637
296386.54.3.41 Create vector from literal bit pattern
29639................................................
29640
29641   * uint32x2_t vcreate_u32 (uint64_t)
29642
29643   * uint16x4_t vcreate_u16 (uint64_t)
29644
29645   * uint8x8_t vcreate_u8 (uint64_t)
29646
29647   * int32x2_t vcreate_s32 (uint64_t)
29648
29649   * int16x4_t vcreate_s16 (uint64_t)
29650
29651   * int8x8_t vcreate_s8 (uint64_t)
29652
29653   * uint64x1_t vcreate_u64 (uint64_t)
29654
29655   * int64x1_t vcreate_s64 (uint64_t)
29656
29657   * float32x2_t vcreate_f32 (uint64_t)
29658
29659   * poly16x4_t vcreate_p16 (uint64_t)
29660
29661   * poly8x8_t vcreate_p8 (uint64_t)
29662
296636.54.3.42 Set all lanes to the same value
29664.........................................
29665
29666   * uint32x2_t vdup_n_u32 (uint32_t)
29667     _Form of expected instruction(s):_ `vdup.32 D0, R0'
29668
29669   * uint16x4_t vdup_n_u16 (uint16_t)
29670     _Form of expected instruction(s):_ `vdup.16 D0, R0'
29671
29672   * uint8x8_t vdup_n_u8 (uint8_t)
29673     _Form of expected instruction(s):_ `vdup.8 D0, R0'
29674
29675   * int32x2_t vdup_n_s32 (int32_t)
29676     _Form of expected instruction(s):_ `vdup.32 D0, R0'
29677
29678   * int16x4_t vdup_n_s16 (int16_t)
29679     _Form of expected instruction(s):_ `vdup.16 D0, R0'
29680
29681   * int8x8_t vdup_n_s8 (int8_t)
29682     _Form of expected instruction(s):_ `vdup.8 D0, R0'
29683
29684   * float32x2_t vdup_n_f32 (float32_t)
29685     _Form of expected instruction(s):_ `vdup.32 D0, R0'
29686
29687   * poly16x4_t vdup_n_p16 (poly16_t)
29688     _Form of expected instruction(s):_ `vdup.16 D0, R0'
29689
29690   * poly8x8_t vdup_n_p8 (poly8_t)
29691     _Form of expected instruction(s):_ `vdup.8 D0, R0'
29692
29693   * uint64x1_t vdup_n_u64 (uint64_t)
29694
29695   * int64x1_t vdup_n_s64 (int64_t)
29696
29697   * uint32x4_t vdupq_n_u32 (uint32_t)
29698     _Form of expected instruction(s):_ `vdup.32 Q0, R0'
29699
29700   * uint16x8_t vdupq_n_u16 (uint16_t)
29701     _Form of expected instruction(s):_ `vdup.16 Q0, R0'
29702
29703   * uint8x16_t vdupq_n_u8 (uint8_t)
29704     _Form of expected instruction(s):_ `vdup.8 Q0, R0'
29705
29706   * int32x4_t vdupq_n_s32 (int32_t)
29707     _Form of expected instruction(s):_ `vdup.32 Q0, R0'
29708
29709   * int16x8_t vdupq_n_s16 (int16_t)
29710     _Form of expected instruction(s):_ `vdup.16 Q0, R0'
29711
29712   * int8x16_t vdupq_n_s8 (int8_t)
29713     _Form of expected instruction(s):_ `vdup.8 Q0, R0'
29714
29715   * float32x4_t vdupq_n_f32 (float32_t)
29716     _Form of expected instruction(s):_ `vdup.32 Q0, R0'
29717
29718   * poly16x8_t vdupq_n_p16 (poly16_t)
29719     _Form of expected instruction(s):_ `vdup.16 Q0, R0'
29720
29721   * poly8x16_t vdupq_n_p8 (poly8_t)
29722     _Form of expected instruction(s):_ `vdup.8 Q0, R0'
29723
29724   * uint64x2_t vdupq_n_u64 (uint64_t)
29725
29726   * int64x2_t vdupq_n_s64 (int64_t)
29727
29728   * uint32x2_t vmov_n_u32 (uint32_t)
29729     _Form of expected instruction(s):_ `vdup.32 D0, R0'
29730
29731   * uint16x4_t vmov_n_u16 (uint16_t)
29732     _Form of expected instruction(s):_ `vdup.16 D0, R0'
29733
29734   * uint8x8_t vmov_n_u8 (uint8_t)
29735     _Form of expected instruction(s):_ `vdup.8 D0, R0'
29736
29737   * int32x2_t vmov_n_s32 (int32_t)
29738     _Form of expected instruction(s):_ `vdup.32 D0, R0'
29739
29740   * int16x4_t vmov_n_s16 (int16_t)
29741     _Form of expected instruction(s):_ `vdup.16 D0, R0'
29742
29743   * int8x8_t vmov_n_s8 (int8_t)
29744     _Form of expected instruction(s):_ `vdup.8 D0, R0'
29745
29746   * float32x2_t vmov_n_f32 (float32_t)
29747     _Form of expected instruction(s):_ `vdup.32 D0, R0'
29748
29749   * poly16x4_t vmov_n_p16 (poly16_t)
29750     _Form of expected instruction(s):_ `vdup.16 D0, R0'
29751
29752   * poly8x8_t vmov_n_p8 (poly8_t)
29753     _Form of expected instruction(s):_ `vdup.8 D0, R0'
29754
29755   * uint64x1_t vmov_n_u64 (uint64_t)
29756
29757   * int64x1_t vmov_n_s64 (int64_t)
29758
29759   * uint32x4_t vmovq_n_u32 (uint32_t)
29760     _Form of expected instruction(s):_ `vdup.32 Q0, R0'
29761
29762   * uint16x8_t vmovq_n_u16 (uint16_t)
29763     _Form of expected instruction(s):_ `vdup.16 Q0, R0'
29764
29765   * uint8x16_t vmovq_n_u8 (uint8_t)
29766     _Form of expected instruction(s):_ `vdup.8 Q0, R0'
29767
29768   * int32x4_t vmovq_n_s32 (int32_t)
29769     _Form of expected instruction(s):_ `vdup.32 Q0, R0'
29770
29771   * int16x8_t vmovq_n_s16 (int16_t)
29772     _Form of expected instruction(s):_ `vdup.16 Q0, R0'
29773
29774   * int8x16_t vmovq_n_s8 (int8_t)
29775     _Form of expected instruction(s):_ `vdup.8 Q0, R0'
29776
29777   * float32x4_t vmovq_n_f32 (float32_t)
29778     _Form of expected instruction(s):_ `vdup.32 Q0, R0'
29779
29780   * poly16x8_t vmovq_n_p16 (poly16_t)
29781     _Form of expected instruction(s):_ `vdup.16 Q0, R0'
29782
29783   * poly8x16_t vmovq_n_p8 (poly8_t)
29784     _Form of expected instruction(s):_ `vdup.8 Q0, R0'
29785
29786   * uint64x2_t vmovq_n_u64 (uint64_t)
29787
29788   * int64x2_t vmovq_n_s64 (int64_t)
29789
29790   * uint32x2_t vdup_lane_u32 (uint32x2_t, const int)
29791     _Form of expected instruction(s):_ `vdup.32 D0, D0[0]'
29792
29793   * uint16x4_t vdup_lane_u16 (uint16x4_t, const int)
29794     _Form of expected instruction(s):_ `vdup.16 D0, D0[0]'
29795
29796   * uint8x8_t vdup_lane_u8 (uint8x8_t, const int)
29797     _Form of expected instruction(s):_ `vdup.8 D0, D0[0]'
29798
29799   * int32x2_t vdup_lane_s32 (int32x2_t, const int)
29800     _Form of expected instruction(s):_ `vdup.32 D0, D0[0]'
29801
29802   * int16x4_t vdup_lane_s16 (int16x4_t, const int)
29803     _Form of expected instruction(s):_ `vdup.16 D0, D0[0]'
29804
29805   * int8x8_t vdup_lane_s8 (int8x8_t, const int)
29806     _Form of expected instruction(s):_ `vdup.8 D0, D0[0]'
29807
29808   * float32x2_t vdup_lane_f32 (float32x2_t, const int)
29809     _Form of expected instruction(s):_ `vdup.32 D0, D0[0]'
29810
29811   * poly16x4_t vdup_lane_p16 (poly16x4_t, const int)
29812     _Form of expected instruction(s):_ `vdup.16 D0, D0[0]'
29813
29814   * poly8x8_t vdup_lane_p8 (poly8x8_t, const int)
29815     _Form of expected instruction(s):_ `vdup.8 D0, D0[0]'
29816
29817   * uint64x1_t vdup_lane_u64 (uint64x1_t, const int)
29818
29819   * int64x1_t vdup_lane_s64 (int64x1_t, const int)
29820
29821   * uint32x4_t vdupq_lane_u32 (uint32x2_t, const int)
29822     _Form of expected instruction(s):_ `vdup.32 Q0, D0[0]'
29823
29824   * uint16x8_t vdupq_lane_u16 (uint16x4_t, const int)
29825     _Form of expected instruction(s):_ `vdup.16 Q0, D0[0]'
29826
29827   * uint8x16_t vdupq_lane_u8 (uint8x8_t, const int)
29828     _Form of expected instruction(s):_ `vdup.8 Q0, D0[0]'
29829
29830   * int32x4_t vdupq_lane_s32 (int32x2_t, const int)
29831     _Form of expected instruction(s):_ `vdup.32 Q0, D0[0]'
29832
29833   * int16x8_t vdupq_lane_s16 (int16x4_t, const int)
29834     _Form of expected instruction(s):_ `vdup.16 Q0, D0[0]'
29835
29836   * int8x16_t vdupq_lane_s8 (int8x8_t, const int)
29837     _Form of expected instruction(s):_ `vdup.8 Q0, D0[0]'
29838
29839   * float32x4_t vdupq_lane_f32 (float32x2_t, const int)
29840     _Form of expected instruction(s):_ `vdup.32 Q0, D0[0]'
29841
29842   * poly16x8_t vdupq_lane_p16 (poly16x4_t, const int)
29843     _Form of expected instruction(s):_ `vdup.16 Q0, D0[0]'
29844
29845   * poly8x16_t vdupq_lane_p8 (poly8x8_t, const int)
29846     _Form of expected instruction(s):_ `vdup.8 Q0, D0[0]'
29847
29848   * uint64x2_t vdupq_lane_u64 (uint64x1_t, const int)
29849
29850   * int64x2_t vdupq_lane_s64 (int64x1_t, const int)
29851
298526.54.3.43 Combining vectors
29853...........................
29854
29855   * uint32x4_t vcombine_u32 (uint32x2_t, uint32x2_t)
29856
29857   * uint16x8_t vcombine_u16 (uint16x4_t, uint16x4_t)
29858
29859   * uint8x16_t vcombine_u8 (uint8x8_t, uint8x8_t)
29860
29861   * int32x4_t vcombine_s32 (int32x2_t, int32x2_t)
29862
29863   * int16x8_t vcombine_s16 (int16x4_t, int16x4_t)
29864
29865   * int8x16_t vcombine_s8 (int8x8_t, int8x8_t)
29866
29867   * uint64x2_t vcombine_u64 (uint64x1_t, uint64x1_t)
29868
29869   * int64x2_t vcombine_s64 (int64x1_t, int64x1_t)
29870
29871   * float32x4_t vcombine_f32 (float32x2_t, float32x2_t)
29872
29873   * poly16x8_t vcombine_p16 (poly16x4_t, poly16x4_t)
29874
29875   * poly8x16_t vcombine_p8 (poly8x8_t, poly8x8_t)
29876
298776.54.3.44 Splitting vectors
29878...........................
29879
29880   * uint32x2_t vget_high_u32 (uint32x4_t)
29881
29882   * uint16x4_t vget_high_u16 (uint16x8_t)
29883
29884   * uint8x8_t vget_high_u8 (uint8x16_t)
29885
29886   * int32x2_t vget_high_s32 (int32x4_t)
29887
29888   * int16x4_t vget_high_s16 (int16x8_t)
29889
29890   * int8x8_t vget_high_s8 (int8x16_t)
29891
29892   * uint64x1_t vget_high_u64 (uint64x2_t)
29893
29894   * int64x1_t vget_high_s64 (int64x2_t)
29895
29896   * float32x2_t vget_high_f32 (float32x4_t)
29897
29898   * poly16x4_t vget_high_p16 (poly16x8_t)
29899
29900   * poly8x8_t vget_high_p8 (poly8x16_t)
29901
29902   * uint32x2_t vget_low_u32 (uint32x4_t)
29903     _Form of expected instruction(s):_ `vmov D0, D0'
29904
29905   * uint16x4_t vget_low_u16 (uint16x8_t)
29906     _Form of expected instruction(s):_ `vmov D0, D0'
29907
29908   * uint8x8_t vget_low_u8 (uint8x16_t)
29909     _Form of expected instruction(s):_ `vmov D0, D0'
29910
29911   * int32x2_t vget_low_s32 (int32x4_t)
29912     _Form of expected instruction(s):_ `vmov D0, D0'
29913
29914   * int16x4_t vget_low_s16 (int16x8_t)
29915     _Form of expected instruction(s):_ `vmov D0, D0'
29916
29917   * int8x8_t vget_low_s8 (int8x16_t)
29918     _Form of expected instruction(s):_ `vmov D0, D0'
29919
29920   * float32x2_t vget_low_f32 (float32x4_t)
29921     _Form of expected instruction(s):_ `vmov D0, D0'
29922
29923   * poly16x4_t vget_low_p16 (poly16x8_t)
29924     _Form of expected instruction(s):_ `vmov D0, D0'
29925
29926   * poly8x8_t vget_low_p8 (poly8x16_t)
29927     _Form of expected instruction(s):_ `vmov D0, D0'
29928
29929   * uint64x1_t vget_low_u64 (uint64x2_t)
29930
29931   * int64x1_t vget_low_s64 (int64x2_t)
29932
299336.54.3.45 Conversions
29934.....................
29935
29936   * float32x2_t vcvt_f32_u32 (uint32x2_t)
29937     _Form of expected instruction(s):_ `vcvt.f32.u32 D0, D0'
29938
29939   * float32x2_t vcvt_f32_s32 (int32x2_t)
29940     _Form of expected instruction(s):_ `vcvt.f32.s32 D0, D0'
29941
29942   * uint32x2_t vcvt_u32_f32 (float32x2_t)
29943     _Form of expected instruction(s):_ `vcvt.u32.f32 D0, D0'
29944
29945   * int32x2_t vcvt_s32_f32 (float32x2_t)
29946     _Form of expected instruction(s):_ `vcvt.s32.f32 D0, D0'
29947
29948   * float32x4_t vcvtq_f32_u32 (uint32x4_t)
29949     _Form of expected instruction(s):_ `vcvt.f32.u32 Q0, Q0'
29950
29951   * float32x4_t vcvtq_f32_s32 (int32x4_t)
29952     _Form of expected instruction(s):_ `vcvt.f32.s32 Q0, Q0'
29953
29954   * uint32x4_t vcvtq_u32_f32 (float32x4_t)
29955     _Form of expected instruction(s):_ `vcvt.u32.f32 Q0, Q0'
29956
29957   * int32x4_t vcvtq_s32_f32 (float32x4_t)
29958     _Form of expected instruction(s):_ `vcvt.s32.f32 Q0, Q0'
29959
29960   * float32x2_t vcvt_n_f32_u32 (uint32x2_t, const int)
29961     _Form of expected instruction(s):_ `vcvt.f32.u32 D0, D0, #0'
29962
29963   * float32x2_t vcvt_n_f32_s32 (int32x2_t, const int)
29964     _Form of expected instruction(s):_ `vcvt.f32.s32 D0, D0, #0'
29965
29966   * uint32x2_t vcvt_n_u32_f32 (float32x2_t, const int)
29967     _Form of expected instruction(s):_ `vcvt.u32.f32 D0, D0, #0'
29968
29969   * int32x2_t vcvt_n_s32_f32 (float32x2_t, const int)
29970     _Form of expected instruction(s):_ `vcvt.s32.f32 D0, D0, #0'
29971
29972   * float32x4_t vcvtq_n_f32_u32 (uint32x4_t, const int)
29973     _Form of expected instruction(s):_ `vcvt.f32.u32 Q0, Q0, #0'
29974
29975   * float32x4_t vcvtq_n_f32_s32 (int32x4_t, const int)
29976     _Form of expected instruction(s):_ `vcvt.f32.s32 Q0, Q0, #0'
29977
29978   * uint32x4_t vcvtq_n_u32_f32 (float32x4_t, const int)
29979     _Form of expected instruction(s):_ `vcvt.u32.f32 Q0, Q0, #0'
29980
29981   * int32x4_t vcvtq_n_s32_f32 (float32x4_t, const int)
29982     _Form of expected instruction(s):_ `vcvt.s32.f32 Q0, Q0, #0'
29983
299846.54.3.46 Move, single_opcode narrowing
29985.......................................
29986
29987   * uint32x2_t vmovn_u64 (uint64x2_t)
29988     _Form of expected instruction(s):_ `vmovn.i64 D0, Q0'
29989
29990   * uint16x4_t vmovn_u32 (uint32x4_t)
29991     _Form of expected instruction(s):_ `vmovn.i32 D0, Q0'
29992
29993   * uint8x8_t vmovn_u16 (uint16x8_t)
29994     _Form of expected instruction(s):_ `vmovn.i16 D0, Q0'
29995
29996   * int32x2_t vmovn_s64 (int64x2_t)
29997     _Form of expected instruction(s):_ `vmovn.i64 D0, Q0'
29998
29999   * int16x4_t vmovn_s32 (int32x4_t)
30000     _Form of expected instruction(s):_ `vmovn.i32 D0, Q0'
30001
30002   * int8x8_t vmovn_s16 (int16x8_t)
30003     _Form of expected instruction(s):_ `vmovn.i16 D0, Q0'
30004
30005   * uint32x2_t vqmovn_u64 (uint64x2_t)
30006     _Form of expected instruction(s):_ `vqmovn.u64 D0, Q0'
30007
30008   * uint16x4_t vqmovn_u32 (uint32x4_t)
30009     _Form of expected instruction(s):_ `vqmovn.u32 D0, Q0'
30010
30011   * uint8x8_t vqmovn_u16 (uint16x8_t)
30012     _Form of expected instruction(s):_ `vqmovn.u16 D0, Q0'
30013
30014   * int32x2_t vqmovn_s64 (int64x2_t)
30015     _Form of expected instruction(s):_ `vqmovn.s64 D0, Q0'
30016
30017   * int16x4_t vqmovn_s32 (int32x4_t)
30018     _Form of expected instruction(s):_ `vqmovn.s32 D0, Q0'
30019
30020   * int8x8_t vqmovn_s16 (int16x8_t)
30021     _Form of expected instruction(s):_ `vqmovn.s16 D0, Q0'
30022
30023   * uint32x2_t vqmovun_s64 (int64x2_t)
30024     _Form of expected instruction(s):_ `vqmovun.s64 D0, Q0'
30025
30026   * uint16x4_t vqmovun_s32 (int32x4_t)
30027     _Form of expected instruction(s):_ `vqmovun.s32 D0, Q0'
30028
30029   * uint8x8_t vqmovun_s16 (int16x8_t)
30030     _Form of expected instruction(s):_ `vqmovun.s16 D0, Q0'
30031
300326.54.3.47 Move, single_opcode long
30033..................................
30034
30035   * uint64x2_t vmovl_u32 (uint32x2_t)
30036     _Form of expected instruction(s):_ `vmovl.u32 Q0, D0'
30037
30038   * uint32x4_t vmovl_u16 (uint16x4_t)
30039     _Form of expected instruction(s):_ `vmovl.u16 Q0, D0'
30040
30041   * uint16x8_t vmovl_u8 (uint8x8_t)
30042     _Form of expected instruction(s):_ `vmovl.u8 Q0, D0'
30043
30044   * int64x2_t vmovl_s32 (int32x2_t)
30045     _Form of expected instruction(s):_ `vmovl.s32 Q0, D0'
30046
30047   * int32x4_t vmovl_s16 (int16x4_t)
30048     _Form of expected instruction(s):_ `vmovl.s16 Q0, D0'
30049
30050   * int16x8_t vmovl_s8 (int8x8_t)
30051     _Form of expected instruction(s):_ `vmovl.s8 Q0, D0'
30052
300536.54.3.48 Table lookup
30054......................
30055
30056   * poly8x8_t vtbl1_p8 (poly8x8_t, uint8x8_t)
30057     _Form of expected instruction(s):_ `vtbl.8 D0, {D0}, D0'
30058
30059   * int8x8_t vtbl1_s8 (int8x8_t, int8x8_t)
30060     _Form of expected instruction(s):_ `vtbl.8 D0, {D0}, D0'
30061
30062   * uint8x8_t vtbl1_u8 (uint8x8_t, uint8x8_t)
30063     _Form of expected instruction(s):_ `vtbl.8 D0, {D0}, D0'
30064
30065   * poly8x8_t vtbl2_p8 (poly8x8x2_t, uint8x8_t)
30066     _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1}, D0'
30067
30068   * int8x8_t vtbl2_s8 (int8x8x2_t, int8x8_t)
30069     _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1}, D0'
30070
30071   * uint8x8_t vtbl2_u8 (uint8x8x2_t, uint8x8_t)
30072     _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1}, D0'
30073
30074   * poly8x8_t vtbl3_p8 (poly8x8x3_t, uint8x8_t)
30075     _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1, D2}, D0'
30076
30077   * int8x8_t vtbl3_s8 (int8x8x3_t, int8x8_t)
30078     _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1, D2}, D0'
30079
30080   * uint8x8_t vtbl3_u8 (uint8x8x3_t, uint8x8_t)
30081     _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1, D2}, D0'
30082
30083   * poly8x8_t vtbl4_p8 (poly8x8x4_t, uint8x8_t)
30084     _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1, D2, D3},
30085     D0'
30086
30087   * int8x8_t vtbl4_s8 (int8x8x4_t, int8x8_t)
30088     _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1, D2, D3},
30089     D0'
30090
30091   * uint8x8_t vtbl4_u8 (uint8x8x4_t, uint8x8_t)
30092     _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1, D2, D3},
30093     D0'
30094
300956.54.3.49 Extended table lookup
30096...............................
30097
30098   * poly8x8_t vtbx1_p8 (poly8x8_t, poly8x8_t, uint8x8_t)
30099     _Form of expected instruction(s):_ `vtbx.8 D0, {D0}, D0'
30100
30101   * int8x8_t vtbx1_s8 (int8x8_t, int8x8_t, int8x8_t)
30102     _Form of expected instruction(s):_ `vtbx.8 D0, {D0}, D0'
30103
30104   * uint8x8_t vtbx1_u8 (uint8x8_t, uint8x8_t, uint8x8_t)
30105     _Form of expected instruction(s):_ `vtbx.8 D0, {D0}, D0'
30106
30107   * poly8x8_t vtbx2_p8 (poly8x8_t, poly8x8x2_t, uint8x8_t)
30108     _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1}, D0'
30109
30110   * int8x8_t vtbx2_s8 (int8x8_t, int8x8x2_t, int8x8_t)
30111     _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1}, D0'
30112
30113   * uint8x8_t vtbx2_u8 (uint8x8_t, uint8x8x2_t, uint8x8_t)
30114     _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1}, D0'
30115
30116   * poly8x8_t vtbx3_p8 (poly8x8_t, poly8x8x3_t, uint8x8_t)
30117     _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1, D2}, D0'
30118
30119   * int8x8_t vtbx3_s8 (int8x8_t, int8x8x3_t, int8x8_t)
30120     _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1, D2}, D0'
30121
30122   * uint8x8_t vtbx3_u8 (uint8x8_t, uint8x8x3_t, uint8x8_t)
30123     _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1, D2}, D0'
30124
30125   * poly8x8_t vtbx4_p8 (poly8x8_t, poly8x8x4_t, uint8x8_t)
30126     _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1, D2, D3},
30127     D0'
30128
30129   * int8x8_t vtbx4_s8 (int8x8_t, int8x8x4_t, int8x8_t)
30130     _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1, D2, D3},
30131     D0'
30132
30133   * uint8x8_t vtbx4_u8 (uint8x8_t, uint8x8x4_t, uint8x8_t)
30134     _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1, D2, D3},
30135     D0'
30136
301376.54.3.50 Multiply, lane
30138........................
30139
30140   * float32x2_t vmul_lane_f32 (float32x2_t, float32x2_t, const int)
30141     _Form of expected instruction(s):_ `vmul.f32 D0, D0, D0[0]'
30142
30143   * uint32x2_t vmul_lane_u32 (uint32x2_t, uint32x2_t, const int)
30144     _Form of expected instruction(s):_ `vmul.i32 D0, D0, D0[0]'
30145
30146   * uint16x4_t vmul_lane_u16 (uint16x4_t, uint16x4_t, const int)
30147     _Form of expected instruction(s):_ `vmul.i16 D0, D0, D0[0]'
30148
30149   * int32x2_t vmul_lane_s32 (int32x2_t, int32x2_t, const int)
30150     _Form of expected instruction(s):_ `vmul.i32 D0, D0, D0[0]'
30151
30152   * int16x4_t vmul_lane_s16 (int16x4_t, int16x4_t, const int)
30153     _Form of expected instruction(s):_ `vmul.i16 D0, D0, D0[0]'
30154
30155   * float32x4_t vmulq_lane_f32 (float32x4_t, float32x2_t, const int)
30156     _Form of expected instruction(s):_ `vmul.f32 Q0, Q0, D0[0]'
30157
30158   * uint32x4_t vmulq_lane_u32 (uint32x4_t, uint32x2_t, const int)
30159     _Form of expected instruction(s):_ `vmul.i32 Q0, Q0, D0[0]'
30160
30161   * uint16x8_t vmulq_lane_u16 (uint16x8_t, uint16x4_t, const int)
30162     _Form of expected instruction(s):_ `vmul.i16 Q0, Q0, D0[0]'
30163
30164   * int32x4_t vmulq_lane_s32 (int32x4_t, int32x2_t, const int)
30165     _Form of expected instruction(s):_ `vmul.i32 Q0, Q0, D0[0]'
30166
30167   * int16x8_t vmulq_lane_s16 (int16x8_t, int16x4_t, const int)
30168     _Form of expected instruction(s):_ `vmul.i16 Q0, Q0, D0[0]'
30169
301706.54.3.51 Long multiply, lane
30171.............................
30172
30173   * uint64x2_t vmull_lane_u32 (uint32x2_t, uint32x2_t, const int)
30174     _Form of expected instruction(s):_ `vmull.u32 Q0, D0, D0[0]'
30175
30176   * uint32x4_t vmull_lane_u16 (uint16x4_t, uint16x4_t, const int)
30177     _Form of expected instruction(s):_ `vmull.u16 Q0, D0, D0[0]'
30178
30179   * int64x2_t vmull_lane_s32 (int32x2_t, int32x2_t, const int)
30180     _Form of expected instruction(s):_ `vmull.s32 Q0, D0, D0[0]'
30181
30182   * int32x4_t vmull_lane_s16 (int16x4_t, int16x4_t, const int)
30183     _Form of expected instruction(s):_ `vmull.s16 Q0, D0, D0[0]'
30184
301856.54.3.52 Saturating doubling long multiply, lane
30186.................................................
30187
30188   * int64x2_t vqdmull_lane_s32 (int32x2_t, int32x2_t, const int)
30189     _Form of expected instruction(s):_ `vqdmull.s32 Q0, D0, D0[0]'
30190
30191   * int32x4_t vqdmull_lane_s16 (int16x4_t, int16x4_t, const int)
30192     _Form of expected instruction(s):_ `vqdmull.s16 Q0, D0, D0[0]'
30193
301946.54.3.53 Saturating doubling multiply high, lane
30195.................................................
30196
30197   * int32x4_t vqdmulhq_lane_s32 (int32x4_t, int32x2_t, const int)
30198     _Form of expected instruction(s):_ `vqdmulh.s32 Q0, Q0, D0[0]'
30199
30200   * int16x8_t vqdmulhq_lane_s16 (int16x8_t, int16x4_t, const int)
30201     _Form of expected instruction(s):_ `vqdmulh.s16 Q0, Q0, D0[0]'
30202
30203   * int32x2_t vqdmulh_lane_s32 (int32x2_t, int32x2_t, const int)
30204     _Form of expected instruction(s):_ `vqdmulh.s32 D0, D0, D0[0]'
30205
30206   * int16x4_t vqdmulh_lane_s16 (int16x4_t, int16x4_t, const int)
30207     _Form of expected instruction(s):_ `vqdmulh.s16 D0, D0, D0[0]'
30208
30209   * int32x4_t vqrdmulhq_lane_s32 (int32x4_t, int32x2_t, const int)
30210     _Form of expected instruction(s):_ `vqrdmulh.s32 Q0, Q0, D0[0]'
30211
30212   * int16x8_t vqrdmulhq_lane_s16 (int16x8_t, int16x4_t, const int)
30213     _Form of expected instruction(s):_ `vqrdmulh.s16 Q0, Q0, D0[0]'
30214
30215   * int32x2_t vqrdmulh_lane_s32 (int32x2_t, int32x2_t, const int)
30216     _Form of expected instruction(s):_ `vqrdmulh.s32 D0, D0, D0[0]'
30217
30218   * int16x4_t vqrdmulh_lane_s16 (int16x4_t, int16x4_t, const int)
30219     _Form of expected instruction(s):_ `vqrdmulh.s16 D0, D0, D0[0]'
30220
302216.54.3.54 Multiply-accumulate, lane
30222...................................
30223
30224   * float32x2_t vmla_lane_f32 (float32x2_t, float32x2_t, float32x2_t,
30225     const int)
30226     _Form of expected instruction(s):_ `vmla.f32 D0, D0, D0[0]'
30227
30228   * uint32x2_t vmla_lane_u32 (uint32x2_t, uint32x2_t, uint32x2_t,
30229     const int)
30230     _Form of expected instruction(s):_ `vmla.i32 D0, D0, D0[0]'
30231
30232   * uint16x4_t vmla_lane_u16 (uint16x4_t, uint16x4_t, uint16x4_t,
30233     const int)
30234     _Form of expected instruction(s):_ `vmla.i16 D0, D0, D0[0]'
30235
30236   * int32x2_t vmla_lane_s32 (int32x2_t, int32x2_t, int32x2_t, const
30237     int)
30238     _Form of expected instruction(s):_ `vmla.i32 D0, D0, D0[0]'
30239
30240   * int16x4_t vmla_lane_s16 (int16x4_t, int16x4_t, int16x4_t, const
30241     int)
30242     _Form of expected instruction(s):_ `vmla.i16 D0, D0, D0[0]'
30243
30244   * float32x4_t vmlaq_lane_f32 (float32x4_t, float32x4_t, float32x2_t,
30245     const int)
30246     _Form of expected instruction(s):_ `vmla.f32 Q0, Q0, D0[0]'
30247
30248   * uint32x4_t vmlaq_lane_u32 (uint32x4_t, uint32x4_t, uint32x2_t,
30249     const int)
30250     _Form of expected instruction(s):_ `vmla.i32 Q0, Q0, D0[0]'
30251
30252   * uint16x8_t vmlaq_lane_u16 (uint16x8_t, uint16x8_t, uint16x4_t,
30253     const int)
30254     _Form of expected instruction(s):_ `vmla.i16 Q0, Q0, D0[0]'
30255
30256   * int32x4_t vmlaq_lane_s32 (int32x4_t, int32x4_t, int32x2_t, const
30257     int)
30258     _Form of expected instruction(s):_ `vmla.i32 Q0, Q0, D0[0]'
30259
30260   * int16x8_t vmlaq_lane_s16 (int16x8_t, int16x8_t, int16x4_t, const
30261     int)
30262     _Form of expected instruction(s):_ `vmla.i16 Q0, Q0, D0[0]'
30263
30264   * uint64x2_t vmlal_lane_u32 (uint64x2_t, uint32x2_t, uint32x2_t,
30265     const int)
30266     _Form of expected instruction(s):_ `vmlal.u32 Q0, D0, D0[0]'
30267
30268   * uint32x4_t vmlal_lane_u16 (uint32x4_t, uint16x4_t, uint16x4_t,
30269     const int)
30270     _Form of expected instruction(s):_ `vmlal.u16 Q0, D0, D0[0]'
30271
30272   * int64x2_t vmlal_lane_s32 (int64x2_t, int32x2_t, int32x2_t, const
30273     int)
30274     _Form of expected instruction(s):_ `vmlal.s32 Q0, D0, D0[0]'
30275
30276   * int32x4_t vmlal_lane_s16 (int32x4_t, int16x4_t, int16x4_t, const
30277     int)
30278     _Form of expected instruction(s):_ `vmlal.s16 Q0, D0, D0[0]'
30279
30280   * int64x2_t vqdmlal_lane_s32 (int64x2_t, int32x2_t, int32x2_t, const
30281     int)
30282     _Form of expected instruction(s):_ `vqdmlal.s32 Q0, D0, D0[0]'
30283
30284   * int32x4_t vqdmlal_lane_s16 (int32x4_t, int16x4_t, int16x4_t, const
30285     int)
30286     _Form of expected instruction(s):_ `vqdmlal.s16 Q0, D0, D0[0]'
30287
302886.54.3.55 Multiply-subtract, lane
30289.................................
30290
30291   * float32x2_t vmls_lane_f32 (float32x2_t, float32x2_t, float32x2_t,
30292     const int)
30293     _Form of expected instruction(s):_ `vmls.f32 D0, D0, D0[0]'
30294
30295   * uint32x2_t vmls_lane_u32 (uint32x2_t, uint32x2_t, uint32x2_t,
30296     const int)
30297     _Form of expected instruction(s):_ `vmls.i32 D0, D0, D0[0]'
30298
30299   * uint16x4_t vmls_lane_u16 (uint16x4_t, uint16x4_t, uint16x4_t,
30300     const int)
30301     _Form of expected instruction(s):_ `vmls.i16 D0, D0, D0[0]'
30302
30303   * int32x2_t vmls_lane_s32 (int32x2_t, int32x2_t, int32x2_t, const
30304     int)
30305     _Form of expected instruction(s):_ `vmls.i32 D0, D0, D0[0]'
30306
30307   * int16x4_t vmls_lane_s16 (int16x4_t, int16x4_t, int16x4_t, const
30308     int)
30309     _Form of expected instruction(s):_ `vmls.i16 D0, D0, D0[0]'
30310
30311   * float32x4_t vmlsq_lane_f32 (float32x4_t, float32x4_t, float32x2_t,
30312     const int)
30313     _Form of expected instruction(s):_ `vmls.f32 Q0, Q0, D0[0]'
30314
30315   * uint32x4_t vmlsq_lane_u32 (uint32x4_t, uint32x4_t, uint32x2_t,
30316     const int)
30317     _Form of expected instruction(s):_ `vmls.i32 Q0, Q0, D0[0]'
30318
30319   * uint16x8_t vmlsq_lane_u16 (uint16x8_t, uint16x8_t, uint16x4_t,
30320     const int)
30321     _Form of expected instruction(s):_ `vmls.i16 Q0, Q0, D0[0]'
30322
30323   * int32x4_t vmlsq_lane_s32 (int32x4_t, int32x4_t, int32x2_t, const
30324     int)
30325     _Form of expected instruction(s):_ `vmls.i32 Q0, Q0, D0[0]'
30326
30327   * int16x8_t vmlsq_lane_s16 (int16x8_t, int16x8_t, int16x4_t, const
30328     int)
30329     _Form of expected instruction(s):_ `vmls.i16 Q0, Q0, D0[0]'
30330
30331   * uint64x2_t vmlsl_lane_u32 (uint64x2_t, uint32x2_t, uint32x2_t,
30332     const int)
30333     _Form of expected instruction(s):_ `vmlsl.u32 Q0, D0, D0[0]'
30334
30335   * uint32x4_t vmlsl_lane_u16 (uint32x4_t, uint16x4_t, uint16x4_t,
30336     const int)
30337     _Form of expected instruction(s):_ `vmlsl.u16 Q0, D0, D0[0]'
30338
30339   * int64x2_t vmlsl_lane_s32 (int64x2_t, int32x2_t, int32x2_t, const
30340     int)
30341     _Form of expected instruction(s):_ `vmlsl.s32 Q0, D0, D0[0]'
30342
30343   * int32x4_t vmlsl_lane_s16 (int32x4_t, int16x4_t, int16x4_t, const
30344     int)
30345     _Form of expected instruction(s):_ `vmlsl.s16 Q0, D0, D0[0]'
30346
30347   * int64x2_t vqdmlsl_lane_s32 (int64x2_t, int32x2_t, int32x2_t, const
30348     int)
30349     _Form of expected instruction(s):_ `vqdmlsl.s32 Q0, D0, D0[0]'
30350
30351   * int32x4_t vqdmlsl_lane_s16 (int32x4_t, int16x4_t, int16x4_t, const
30352     int)
30353     _Form of expected instruction(s):_ `vqdmlsl.s16 Q0, D0, D0[0]'
30354
303556.54.3.56 Vector multiply by scalar
30356...................................
30357
30358   * float32x2_t vmul_n_f32 (float32x2_t, float32_t)
30359     _Form of expected instruction(s):_ `vmul.f32 D0, D0, D0[0]'
30360
30361   * uint32x2_t vmul_n_u32 (uint32x2_t, uint32_t)
30362     _Form of expected instruction(s):_ `vmul.i32 D0, D0, D0[0]'
30363
30364   * uint16x4_t vmul_n_u16 (uint16x4_t, uint16_t)
30365     _Form of expected instruction(s):_ `vmul.i16 D0, D0, D0[0]'
30366
30367   * int32x2_t vmul_n_s32 (int32x2_t, int32_t)
30368     _Form of expected instruction(s):_ `vmul.i32 D0, D0, D0[0]'
30369
30370   * int16x4_t vmul_n_s16 (int16x4_t, int16_t)
30371     _Form of expected instruction(s):_ `vmul.i16 D0, D0, D0[0]'
30372
30373   * float32x4_t vmulq_n_f32 (float32x4_t, float32_t)
30374     _Form of expected instruction(s):_ `vmul.f32 Q0, Q0, D0[0]'
30375
30376   * uint32x4_t vmulq_n_u32 (uint32x4_t, uint32_t)
30377     _Form of expected instruction(s):_ `vmul.i32 Q0, Q0, D0[0]'
30378
30379   * uint16x8_t vmulq_n_u16 (uint16x8_t, uint16_t)
30380     _Form of expected instruction(s):_ `vmul.i16 Q0, Q0, D0[0]'
30381
30382   * int32x4_t vmulq_n_s32 (int32x4_t, int32_t)
30383     _Form of expected instruction(s):_ `vmul.i32 Q0, Q0, D0[0]'
30384
30385   * int16x8_t vmulq_n_s16 (int16x8_t, int16_t)
30386     _Form of expected instruction(s):_ `vmul.i16 Q0, Q0, D0[0]'
30387
303886.54.3.57 Vector long multiply by scalar
30389........................................
30390
30391   * uint64x2_t vmull_n_u32 (uint32x2_t, uint32_t)
30392     _Form of expected instruction(s):_ `vmull.u32 Q0, D0, D0[0]'
30393
30394   * uint32x4_t vmull_n_u16 (uint16x4_t, uint16_t)
30395     _Form of expected instruction(s):_ `vmull.u16 Q0, D0, D0[0]'
30396
30397   * int64x2_t vmull_n_s32 (int32x2_t, int32_t)
30398     _Form of expected instruction(s):_ `vmull.s32 Q0, D0, D0[0]'
30399
30400   * int32x4_t vmull_n_s16 (int16x4_t, int16_t)
30401     _Form of expected instruction(s):_ `vmull.s16 Q0, D0, D0[0]'
30402
304036.54.3.58 Vector saturating doubling long multiply by scalar
30404............................................................
30405
30406   * int64x2_t vqdmull_n_s32 (int32x2_t, int32_t)
30407     _Form of expected instruction(s):_ `vqdmull.s32 Q0, D0, D0[0]'
30408
30409   * int32x4_t vqdmull_n_s16 (int16x4_t, int16_t)
30410     _Form of expected instruction(s):_ `vqdmull.s16 Q0, D0, D0[0]'
30411
304126.54.3.59 Vector saturating doubling multiply high by scalar
30413............................................................
30414
30415   * int32x4_t vqdmulhq_n_s32 (int32x4_t, int32_t)
30416     _Form of expected instruction(s):_ `vqdmulh.s32 Q0, Q0, D0[0]'
30417
30418   * int16x8_t vqdmulhq_n_s16 (int16x8_t, int16_t)
30419     _Form of expected instruction(s):_ `vqdmulh.s16 Q0, Q0, D0[0]'
30420
30421   * int32x2_t vqdmulh_n_s32 (int32x2_t, int32_t)
30422     _Form of expected instruction(s):_ `vqdmulh.s32 D0, D0, D0[0]'
30423
30424   * int16x4_t vqdmulh_n_s16 (int16x4_t, int16_t)
30425     _Form of expected instruction(s):_ `vqdmulh.s16 D0, D0, D0[0]'
30426
30427   * int32x4_t vqrdmulhq_n_s32 (int32x4_t, int32_t)
30428     _Form of expected instruction(s):_ `vqrdmulh.s32 Q0, Q0, D0[0]'
30429
30430   * int16x8_t vqrdmulhq_n_s16 (int16x8_t, int16_t)
30431     _Form of expected instruction(s):_ `vqrdmulh.s16 Q0, Q0, D0[0]'
30432
30433   * int32x2_t vqrdmulh_n_s32 (int32x2_t, int32_t)
30434     _Form of expected instruction(s):_ `vqrdmulh.s32 D0, D0, D0[0]'
30435
30436   * int16x4_t vqrdmulh_n_s16 (int16x4_t, int16_t)
30437     _Form of expected instruction(s):_ `vqrdmulh.s16 D0, D0, D0[0]'
30438
304396.54.3.60 Vector multiply-accumulate by scalar
30440..............................................
30441
30442   * float32x2_t vmla_n_f32 (float32x2_t, float32x2_t, float32_t)
30443     _Form of expected instruction(s):_ `vmla.f32 D0, D0, D0[0]'
30444
30445   * uint32x2_t vmla_n_u32 (uint32x2_t, uint32x2_t, uint32_t)
30446     _Form of expected instruction(s):_ `vmla.i32 D0, D0, D0[0]'
30447
30448   * uint16x4_t vmla_n_u16 (uint16x4_t, uint16x4_t, uint16_t)
30449     _Form of expected instruction(s):_ `vmla.i16 D0, D0, D0[0]'
30450
30451   * int32x2_t vmla_n_s32 (int32x2_t, int32x2_t, int32_t)
30452     _Form of expected instruction(s):_ `vmla.i32 D0, D0, D0[0]'
30453
30454   * int16x4_t vmla_n_s16 (int16x4_t, int16x4_t, int16_t)
30455     _Form of expected instruction(s):_ `vmla.i16 D0, D0, D0[0]'
30456
30457   * float32x4_t vmlaq_n_f32 (float32x4_t, float32x4_t, float32_t)
30458     _Form of expected instruction(s):_ `vmla.f32 Q0, Q0, D0[0]'
30459
30460   * uint32x4_t vmlaq_n_u32 (uint32x4_t, uint32x4_t, uint32_t)
30461     _Form of expected instruction(s):_ `vmla.i32 Q0, Q0, D0[0]'
30462
30463   * uint16x8_t vmlaq_n_u16 (uint16x8_t, uint16x8_t, uint16_t)
30464     _Form of expected instruction(s):_ `vmla.i16 Q0, Q0, D0[0]'
30465
30466   * int32x4_t vmlaq_n_s32 (int32x4_t, int32x4_t, int32_t)
30467     _Form of expected instruction(s):_ `vmla.i32 Q0, Q0, D0[0]'
30468
30469   * int16x8_t vmlaq_n_s16 (int16x8_t, int16x8_t, int16_t)
30470     _Form of expected instruction(s):_ `vmla.i16 Q0, Q0, D0[0]'
30471
30472   * uint64x2_t vmlal_n_u32 (uint64x2_t, uint32x2_t, uint32_t)
30473     _Form of expected instruction(s):_ `vmlal.u32 Q0, D0, D0[0]'
30474
30475   * uint32x4_t vmlal_n_u16 (uint32x4_t, uint16x4_t, uint16_t)
30476     _Form of expected instruction(s):_ `vmlal.u16 Q0, D0, D0[0]'
30477
30478   * int64x2_t vmlal_n_s32 (int64x2_t, int32x2_t, int32_t)
30479     _Form of expected instruction(s):_ `vmlal.s32 Q0, D0, D0[0]'
30480
30481   * int32x4_t vmlal_n_s16 (int32x4_t, int16x4_t, int16_t)
30482     _Form of expected instruction(s):_ `vmlal.s16 Q0, D0, D0[0]'
30483
30484   * int64x2_t vqdmlal_n_s32 (int64x2_t, int32x2_t, int32_t)
30485     _Form of expected instruction(s):_ `vqdmlal.s32 Q0, D0, D0[0]'
30486
30487   * int32x4_t vqdmlal_n_s16 (int32x4_t, int16x4_t, int16_t)
30488     _Form of expected instruction(s):_ `vqdmlal.s16 Q0, D0, D0[0]'
30489
304906.54.3.61 Vector multiply-subtract by scalar
30491............................................
30492
30493   * float32x2_t vmls_n_f32 (float32x2_t, float32x2_t, float32_t)
30494     _Form of expected instruction(s):_ `vmls.f32 D0, D0, D0[0]'
30495
30496   * uint32x2_t vmls_n_u32 (uint32x2_t, uint32x2_t, uint32_t)
30497     _Form of expected instruction(s):_ `vmls.i32 D0, D0, D0[0]'
30498
30499   * uint16x4_t vmls_n_u16 (uint16x4_t, uint16x4_t, uint16_t)
30500     _Form of expected instruction(s):_ `vmls.i16 D0, D0, D0[0]'
30501
30502   * int32x2_t vmls_n_s32 (int32x2_t, int32x2_t, int32_t)
30503     _Form of expected instruction(s):_ `vmls.i32 D0, D0, D0[0]'
30504
30505   * int16x4_t vmls_n_s16 (int16x4_t, int16x4_t, int16_t)
30506     _Form of expected instruction(s):_ `vmls.i16 D0, D0, D0[0]'
30507
30508   * float32x4_t vmlsq_n_f32 (float32x4_t, float32x4_t, float32_t)
30509     _Form of expected instruction(s):_ `vmls.f32 Q0, Q0, D0[0]'
30510
30511   * uint32x4_t vmlsq_n_u32 (uint32x4_t, uint32x4_t, uint32_t)
30512     _Form of expected instruction(s):_ `vmls.i32 Q0, Q0, D0[0]'
30513
30514   * uint16x8_t vmlsq_n_u16 (uint16x8_t, uint16x8_t, uint16_t)
30515     _Form of expected instruction(s):_ `vmls.i16 Q0, Q0, D0[0]'
30516
30517   * int32x4_t vmlsq_n_s32 (int32x4_t, int32x4_t, int32_t)
30518     _Form of expected instruction(s):_ `vmls.i32 Q0, Q0, D0[0]'
30519
30520   * int16x8_t vmlsq_n_s16 (int16x8_t, int16x8_t, int16_t)
30521     _Form of expected instruction(s):_ `vmls.i16 Q0, Q0, D0[0]'
30522
30523   * uint64x2_t vmlsl_n_u32 (uint64x2_t, uint32x2_t, uint32_t)
30524     _Form of expected instruction(s):_ `vmlsl.u32 Q0, D0, D0[0]'
30525
30526   * uint32x4_t vmlsl_n_u16 (uint32x4_t, uint16x4_t, uint16_t)
30527     _Form of expected instruction(s):_ `vmlsl.u16 Q0, D0, D0[0]'
30528
30529   * int64x2_t vmlsl_n_s32 (int64x2_t, int32x2_t, int32_t)
30530     _Form of expected instruction(s):_ `vmlsl.s32 Q0, D0, D0[0]'
30531
30532   * int32x4_t vmlsl_n_s16 (int32x4_t, int16x4_t, int16_t)
30533     _Form of expected instruction(s):_ `vmlsl.s16 Q0, D0, D0[0]'
30534
30535   * int64x2_t vqdmlsl_n_s32 (int64x2_t, int32x2_t, int32_t)
30536     _Form of expected instruction(s):_ `vqdmlsl.s32 Q0, D0, D0[0]'
30537
30538   * int32x4_t vqdmlsl_n_s16 (int32x4_t, int16x4_t, int16_t)
30539     _Form of expected instruction(s):_ `vqdmlsl.s16 Q0, D0, D0[0]'
30540
305416.54.3.62 Vector extract
30542........................
30543
30544   * uint32x2_t vext_u32 (uint32x2_t, uint32x2_t, const int)
30545     _Form of expected instruction(s):_ `vext.32 D0, D0, D0, #0'
30546
30547   * uint16x4_t vext_u16 (uint16x4_t, uint16x4_t, const int)
30548     _Form of expected instruction(s):_ `vext.16 D0, D0, D0, #0'
30549
30550   * uint8x8_t vext_u8 (uint8x8_t, uint8x8_t, const int)
30551     _Form of expected instruction(s):_ `vext.8 D0, D0, D0, #0'
30552
30553   * int32x2_t vext_s32 (int32x2_t, int32x2_t, const int)
30554     _Form of expected instruction(s):_ `vext.32 D0, D0, D0, #0'
30555
30556   * int16x4_t vext_s16 (int16x4_t, int16x4_t, const int)
30557     _Form of expected instruction(s):_ `vext.16 D0, D0, D0, #0'
30558
30559   * int8x8_t vext_s8 (int8x8_t, int8x8_t, const int)
30560     _Form of expected instruction(s):_ `vext.8 D0, D0, D0, #0'
30561
30562   * uint64x1_t vext_u64 (uint64x1_t, uint64x1_t, const int)
30563     _Form of expected instruction(s):_ `vext.64 D0, D0, D0, #0'
30564
30565   * int64x1_t vext_s64 (int64x1_t, int64x1_t, const int)
30566     _Form of expected instruction(s):_ `vext.64 D0, D0, D0, #0'
30567
30568   * float32x2_t vext_f32 (float32x2_t, float32x2_t, const int)
30569     _Form of expected instruction(s):_ `vext.32 D0, D0, D0, #0'
30570
30571   * poly16x4_t vext_p16 (poly16x4_t, poly16x4_t, const int)
30572     _Form of expected instruction(s):_ `vext.16 D0, D0, D0, #0'
30573
30574   * poly8x8_t vext_p8 (poly8x8_t, poly8x8_t, const int)
30575     _Form of expected instruction(s):_ `vext.8 D0, D0, D0, #0'
30576
30577   * uint32x4_t vextq_u32 (uint32x4_t, uint32x4_t, const int)
30578     _Form of expected instruction(s):_ `vext.32 Q0, Q0, Q0, #0'
30579
30580   * uint16x8_t vextq_u16 (uint16x8_t, uint16x8_t, const int)
30581     _Form of expected instruction(s):_ `vext.16 Q0, Q0, Q0, #0'
30582
30583   * uint8x16_t vextq_u8 (uint8x16_t, uint8x16_t, const int)
30584     _Form of expected instruction(s):_ `vext.8 Q0, Q0, Q0, #0'
30585
30586   * int32x4_t vextq_s32 (int32x4_t, int32x4_t, const int)
30587     _Form of expected instruction(s):_ `vext.32 Q0, Q0, Q0, #0'
30588
30589   * int16x8_t vextq_s16 (int16x8_t, int16x8_t, const int)
30590     _Form of expected instruction(s):_ `vext.16 Q0, Q0, Q0, #0'
30591
30592   * int8x16_t vextq_s8 (int8x16_t, int8x16_t, const int)
30593     _Form of expected instruction(s):_ `vext.8 Q0, Q0, Q0, #0'
30594
30595   * uint64x2_t vextq_u64 (uint64x2_t, uint64x2_t, const int)
30596     _Form of expected instruction(s):_ `vext.64 Q0, Q0, Q0, #0'
30597
30598   * int64x2_t vextq_s64 (int64x2_t, int64x2_t, const int)
30599     _Form of expected instruction(s):_ `vext.64 Q0, Q0, Q0, #0'
30600
30601   * float32x4_t vextq_f32 (float32x4_t, float32x4_t, const int)
30602     _Form of expected instruction(s):_ `vext.32 Q0, Q0, Q0, #0'
30603
30604   * poly16x8_t vextq_p16 (poly16x8_t, poly16x8_t, const int)
30605     _Form of expected instruction(s):_ `vext.16 Q0, Q0, Q0, #0'
30606
30607   * poly8x16_t vextq_p8 (poly8x16_t, poly8x16_t, const int)
30608     _Form of expected instruction(s):_ `vext.8 Q0, Q0, Q0, #0'
30609
306106.54.3.63 Reverse elements
30611..........................
30612
30613   * uint32x2_t vrev64_u32 (uint32x2_t)
30614     _Form of expected instruction(s):_ `vrev64.32 D0, D0'
30615
30616   * uint16x4_t vrev64_u16 (uint16x4_t)
30617     _Form of expected instruction(s):_ `vrev64.16 D0, D0'
30618
30619   * uint8x8_t vrev64_u8 (uint8x8_t)
30620     _Form of expected instruction(s):_ `vrev64.8 D0, D0'
30621
30622   * int32x2_t vrev64_s32 (int32x2_t)
30623     _Form of expected instruction(s):_ `vrev64.32 D0, D0'
30624
30625   * int16x4_t vrev64_s16 (int16x4_t)
30626     _Form of expected instruction(s):_ `vrev64.16 D0, D0'
30627
30628   * int8x8_t vrev64_s8 (int8x8_t)
30629     _Form of expected instruction(s):_ `vrev64.8 D0, D0'
30630
30631   * float32x2_t vrev64_f32 (float32x2_t)
30632     _Form of expected instruction(s):_ `vrev64.32 D0, D0'
30633
30634   * poly16x4_t vrev64_p16 (poly16x4_t)
30635     _Form of expected instruction(s):_ `vrev64.16 D0, D0'
30636
30637   * poly8x8_t vrev64_p8 (poly8x8_t)
30638     _Form of expected instruction(s):_ `vrev64.8 D0, D0'
30639
30640   * uint32x4_t vrev64q_u32 (uint32x4_t)
30641     _Form of expected instruction(s):_ `vrev64.32 Q0, Q0'
30642
30643   * uint16x8_t vrev64q_u16 (uint16x8_t)
30644     _Form of expected instruction(s):_ `vrev64.16 Q0, Q0'
30645
30646   * uint8x16_t vrev64q_u8 (uint8x16_t)
30647     _Form of expected instruction(s):_ `vrev64.8 Q0, Q0'
30648
30649   * int32x4_t vrev64q_s32 (int32x4_t)
30650     _Form of expected instruction(s):_ `vrev64.32 Q0, Q0'
30651
30652   * int16x8_t vrev64q_s16 (int16x8_t)
30653     _Form of expected instruction(s):_ `vrev64.16 Q0, Q0'
30654
30655   * int8x16_t vrev64q_s8 (int8x16_t)
30656     _Form of expected instruction(s):_ `vrev64.8 Q0, Q0'
30657
30658   * float32x4_t vrev64q_f32 (float32x4_t)
30659     _Form of expected instruction(s):_ `vrev64.32 Q0, Q0'
30660
30661   * poly16x8_t vrev64q_p16 (poly16x8_t)
30662     _Form of expected instruction(s):_ `vrev64.16 Q0, Q0'
30663
30664   * poly8x16_t vrev64q_p8 (poly8x16_t)
30665     _Form of expected instruction(s):_ `vrev64.8 Q0, Q0'
30666
30667   * uint16x4_t vrev32_u16 (uint16x4_t)
30668     _Form of expected instruction(s):_ `vrev32.16 D0, D0'
30669
30670   * int16x4_t vrev32_s16 (int16x4_t)
30671     _Form of expected instruction(s):_ `vrev32.16 D0, D0'
30672
30673   * uint8x8_t vrev32_u8 (uint8x8_t)
30674     _Form of expected instruction(s):_ `vrev32.8 D0, D0'
30675
30676   * int8x8_t vrev32_s8 (int8x8_t)
30677     _Form of expected instruction(s):_ `vrev32.8 D0, D0'
30678
30679   * poly16x4_t vrev32_p16 (poly16x4_t)
30680     _Form of expected instruction(s):_ `vrev32.16 D0, D0'
30681
30682   * poly8x8_t vrev32_p8 (poly8x8_t)
30683     _Form of expected instruction(s):_ `vrev32.8 D0, D0'
30684
30685   * uint16x8_t vrev32q_u16 (uint16x8_t)
30686     _Form of expected instruction(s):_ `vrev32.16 Q0, Q0'
30687
30688   * int16x8_t vrev32q_s16 (int16x8_t)
30689     _Form of expected instruction(s):_ `vrev32.16 Q0, Q0'
30690
30691   * uint8x16_t vrev32q_u8 (uint8x16_t)
30692     _Form of expected instruction(s):_ `vrev32.8 Q0, Q0'
30693
30694   * int8x16_t vrev32q_s8 (int8x16_t)
30695     _Form of expected instruction(s):_ `vrev32.8 Q0, Q0'
30696
30697   * poly16x8_t vrev32q_p16 (poly16x8_t)
30698     _Form of expected instruction(s):_ `vrev32.16 Q0, Q0'
30699
30700   * poly8x16_t vrev32q_p8 (poly8x16_t)
30701     _Form of expected instruction(s):_ `vrev32.8 Q0, Q0'
30702
30703   * uint8x8_t vrev16_u8 (uint8x8_t)
30704     _Form of expected instruction(s):_ `vrev16.8 D0, D0'
30705
30706   * int8x8_t vrev16_s8 (int8x8_t)
30707     _Form of expected instruction(s):_ `vrev16.8 D0, D0'
30708
30709   * poly8x8_t vrev16_p8 (poly8x8_t)
30710     _Form of expected instruction(s):_ `vrev16.8 D0, D0'
30711
30712   * uint8x16_t vrev16q_u8 (uint8x16_t)
30713     _Form of expected instruction(s):_ `vrev16.8 Q0, Q0'
30714
30715   * int8x16_t vrev16q_s8 (int8x16_t)
30716     _Form of expected instruction(s):_ `vrev16.8 Q0, Q0'
30717
30718   * poly8x16_t vrev16q_p8 (poly8x16_t)
30719     _Form of expected instruction(s):_ `vrev16.8 Q0, Q0'
30720
307216.54.3.64 Bit selection
30722.......................
30723
30724   * uint32x2_t vbsl_u32 (uint32x2_t, uint32x2_t, uint32x2_t)
30725     _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit
30726     D0, D0, D0' _or_ `vbif D0, D0, D0'
30727
30728   * uint16x4_t vbsl_u16 (uint16x4_t, uint16x4_t, uint16x4_t)
30729     _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit
30730     D0, D0, D0' _or_ `vbif D0, D0, D0'
30731
30732   * uint8x8_t vbsl_u8 (uint8x8_t, uint8x8_t, uint8x8_t)
30733     _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit
30734     D0, D0, D0' _or_ `vbif D0, D0, D0'
30735
30736   * int32x2_t vbsl_s32 (uint32x2_t, int32x2_t, int32x2_t)
30737     _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit
30738     D0, D0, D0' _or_ `vbif D0, D0, D0'
30739
30740   * int16x4_t vbsl_s16 (uint16x4_t, int16x4_t, int16x4_t)
30741     _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit
30742     D0, D0, D0' _or_ `vbif D0, D0, D0'
30743
30744   * int8x8_t vbsl_s8 (uint8x8_t, int8x8_t, int8x8_t)
30745     _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit
30746     D0, D0, D0' _or_ `vbif D0, D0, D0'
30747
30748   * uint64x1_t vbsl_u64 (uint64x1_t, uint64x1_t, uint64x1_t)
30749     _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit
30750     D0, D0, D0' _or_ `vbif D0, D0, D0'
30751
30752   * int64x1_t vbsl_s64 (uint64x1_t, int64x1_t, int64x1_t)
30753     _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit
30754     D0, D0, D0' _or_ `vbif D0, D0, D0'
30755
30756   * float32x2_t vbsl_f32 (uint32x2_t, float32x2_t, float32x2_t)
30757     _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit
30758     D0, D0, D0' _or_ `vbif D0, D0, D0'
30759
30760   * poly16x4_t vbsl_p16 (uint16x4_t, poly16x4_t, poly16x4_t)
30761     _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit
30762     D0, D0, D0' _or_ `vbif D0, D0, D0'
30763
30764   * poly8x8_t vbsl_p8 (uint8x8_t, poly8x8_t, poly8x8_t)
30765     _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit
30766     D0, D0, D0' _or_ `vbif D0, D0, D0'
30767
30768   * uint32x4_t vbslq_u32 (uint32x4_t, uint32x4_t, uint32x4_t)
30769     _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit
30770     Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0'
30771
30772   * uint16x8_t vbslq_u16 (uint16x8_t, uint16x8_t, uint16x8_t)
30773     _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit
30774     Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0'
30775
30776   * uint8x16_t vbslq_u8 (uint8x16_t, uint8x16_t, uint8x16_t)
30777     _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit
30778     Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0'
30779
30780   * int32x4_t vbslq_s32 (uint32x4_t, int32x4_t, int32x4_t)
30781     _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit
30782     Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0'
30783
30784   * int16x8_t vbslq_s16 (uint16x8_t, int16x8_t, int16x8_t)
30785     _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit
30786     Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0'
30787
30788   * int8x16_t vbslq_s8 (uint8x16_t, int8x16_t, int8x16_t)
30789     _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit
30790     Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0'
30791
30792   * uint64x2_t vbslq_u64 (uint64x2_t, uint64x2_t, uint64x2_t)
30793     _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit
30794     Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0'
30795
30796   * int64x2_t vbslq_s64 (uint64x2_t, int64x2_t, int64x2_t)
30797     _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit
30798     Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0'
30799
30800   * float32x4_t vbslq_f32 (uint32x4_t, float32x4_t, float32x4_t)
30801     _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit
30802     Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0'
30803
30804   * poly16x8_t vbslq_p16 (uint16x8_t, poly16x8_t, poly16x8_t)
30805     _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit
30806     Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0'
30807
30808   * poly8x16_t vbslq_p8 (uint8x16_t, poly8x16_t, poly8x16_t)
30809     _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit
30810     Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0'
30811
308126.54.3.65 Transpose elements
30813............................
30814
30815   * uint32x2x2_t vtrn_u32 (uint32x2_t, uint32x2_t)
30816     _Form of expected instruction(s):_ `vtrn.32 D0, D1'
30817
30818   * uint16x4x2_t vtrn_u16 (uint16x4_t, uint16x4_t)
30819     _Form of expected instruction(s):_ `vtrn.16 D0, D1'
30820
30821   * uint8x8x2_t vtrn_u8 (uint8x8_t, uint8x8_t)
30822     _Form of expected instruction(s):_ `vtrn.8 D0, D1'
30823
30824   * int32x2x2_t vtrn_s32 (int32x2_t, int32x2_t)
30825     _Form of expected instruction(s):_ `vtrn.32 D0, D1'
30826
30827   * int16x4x2_t vtrn_s16 (int16x4_t, int16x4_t)
30828     _Form of expected instruction(s):_ `vtrn.16 D0, D1'
30829
30830   * int8x8x2_t vtrn_s8 (int8x8_t, int8x8_t)
30831     _Form of expected instruction(s):_ `vtrn.8 D0, D1'
30832
30833   * float32x2x2_t vtrn_f32 (float32x2_t, float32x2_t)
30834     _Form of expected instruction(s):_ `vtrn.32 D0, D1'
30835
30836   * poly16x4x2_t vtrn_p16 (poly16x4_t, poly16x4_t)
30837     _Form of expected instruction(s):_ `vtrn.16 D0, D1'
30838
30839   * poly8x8x2_t vtrn_p8 (poly8x8_t, poly8x8_t)
30840     _Form of expected instruction(s):_ `vtrn.8 D0, D1'
30841
30842   * uint32x4x2_t vtrnq_u32 (uint32x4_t, uint32x4_t)
30843     _Form of expected instruction(s):_ `vtrn.32 Q0, Q1'
30844
30845   * uint16x8x2_t vtrnq_u16 (uint16x8_t, uint16x8_t)
30846     _Form of expected instruction(s):_ `vtrn.16 Q0, Q1'
30847
30848   * uint8x16x2_t vtrnq_u8 (uint8x16_t, uint8x16_t)
30849     _Form of expected instruction(s):_ `vtrn.8 Q0, Q1'
30850
30851   * int32x4x2_t vtrnq_s32 (int32x4_t, int32x4_t)
30852     _Form of expected instruction(s):_ `vtrn.32 Q0, Q1'
30853
30854   * int16x8x2_t vtrnq_s16 (int16x8_t, int16x8_t)
30855     _Form of expected instruction(s):_ `vtrn.16 Q0, Q1'
30856
30857   * int8x16x2_t vtrnq_s8 (int8x16_t, int8x16_t)
30858     _Form of expected instruction(s):_ `vtrn.8 Q0, Q1'
30859
30860   * float32x4x2_t vtrnq_f32 (float32x4_t, float32x4_t)
30861     _Form of expected instruction(s):_ `vtrn.32 Q0, Q1'
30862
30863   * poly16x8x2_t vtrnq_p16 (poly16x8_t, poly16x8_t)
30864     _Form of expected instruction(s):_ `vtrn.16 Q0, Q1'
30865
30866   * poly8x16x2_t vtrnq_p8 (poly8x16_t, poly8x16_t)
30867     _Form of expected instruction(s):_ `vtrn.8 Q0, Q1'
30868
308696.54.3.66 Zip elements
30870......................
30871
30872   * uint32x2x2_t vzip_u32 (uint32x2_t, uint32x2_t)
30873     _Form of expected instruction(s):_ `vzip.32 D0, D1'
30874
30875   * uint16x4x2_t vzip_u16 (uint16x4_t, uint16x4_t)
30876     _Form of expected instruction(s):_ `vzip.16 D0, D1'
30877
30878   * uint8x8x2_t vzip_u8 (uint8x8_t, uint8x8_t)
30879     _Form of expected instruction(s):_ `vzip.8 D0, D1'
30880
30881   * int32x2x2_t vzip_s32 (int32x2_t, int32x2_t)
30882     _Form of expected instruction(s):_ `vzip.32 D0, D1'
30883
30884   * int16x4x2_t vzip_s16 (int16x4_t, int16x4_t)
30885     _Form of expected instruction(s):_ `vzip.16 D0, D1'
30886
30887   * int8x8x2_t vzip_s8 (int8x8_t, int8x8_t)
30888     _Form of expected instruction(s):_ `vzip.8 D0, D1'
30889
30890   * float32x2x2_t vzip_f32 (float32x2_t, float32x2_t)
30891     _Form of expected instruction(s):_ `vzip.32 D0, D1'
30892
30893   * poly16x4x2_t vzip_p16 (poly16x4_t, poly16x4_t)
30894     _Form of expected instruction(s):_ `vzip.16 D0, D1'
30895
30896   * poly8x8x2_t vzip_p8 (poly8x8_t, poly8x8_t)
30897     _Form of expected instruction(s):_ `vzip.8 D0, D1'
30898
30899   * uint32x4x2_t vzipq_u32 (uint32x4_t, uint32x4_t)
30900     _Form of expected instruction(s):_ `vzip.32 Q0, Q1'
30901
30902   * uint16x8x2_t vzipq_u16 (uint16x8_t, uint16x8_t)
30903     _Form of expected instruction(s):_ `vzip.16 Q0, Q1'
30904
30905   * uint8x16x2_t vzipq_u8 (uint8x16_t, uint8x16_t)
30906     _Form of expected instruction(s):_ `vzip.8 Q0, Q1'
30907
30908   * int32x4x2_t vzipq_s32 (int32x4_t, int32x4_t)
30909     _Form of expected instruction(s):_ `vzip.32 Q0, Q1'
30910
30911   * int16x8x2_t vzipq_s16 (int16x8_t, int16x8_t)
30912     _Form of expected instruction(s):_ `vzip.16 Q0, Q1'
30913
30914   * int8x16x2_t vzipq_s8 (int8x16_t, int8x16_t)
30915     _Form of expected instruction(s):_ `vzip.8 Q0, Q1'
30916
30917   * float32x4x2_t vzipq_f32 (float32x4_t, float32x4_t)
30918     _Form of expected instruction(s):_ `vzip.32 Q0, Q1'
30919
30920   * poly16x8x2_t vzipq_p16 (poly16x8_t, poly16x8_t)
30921     _Form of expected instruction(s):_ `vzip.16 Q0, Q1'
30922
30923   * poly8x16x2_t vzipq_p8 (poly8x16_t, poly8x16_t)
30924     _Form of expected instruction(s):_ `vzip.8 Q0, Q1'
30925
309266.54.3.67 Unzip elements
30927........................
30928
30929   * uint32x2x2_t vuzp_u32 (uint32x2_t, uint32x2_t)
30930     _Form of expected instruction(s):_ `vuzp.32 D0, D1'
30931
30932   * uint16x4x2_t vuzp_u16 (uint16x4_t, uint16x4_t)
30933     _Form of expected instruction(s):_ `vuzp.16 D0, D1'
30934
30935   * uint8x8x2_t vuzp_u8 (uint8x8_t, uint8x8_t)
30936     _Form of expected instruction(s):_ `vuzp.8 D0, D1'
30937
30938   * int32x2x2_t vuzp_s32 (int32x2_t, int32x2_t)
30939     _Form of expected instruction(s):_ `vuzp.32 D0, D1'
30940
30941   * int16x4x2_t vuzp_s16 (int16x4_t, int16x4_t)
30942     _Form of expected instruction(s):_ `vuzp.16 D0, D1'
30943
30944   * int8x8x2_t vuzp_s8 (int8x8_t, int8x8_t)
30945     _Form of expected instruction(s):_ `vuzp.8 D0, D1'
30946
30947   * float32x2x2_t vuzp_f32 (float32x2_t, float32x2_t)
30948     _Form of expected instruction(s):_ `vuzp.32 D0, D1'
30949
30950   * poly16x4x2_t vuzp_p16 (poly16x4_t, poly16x4_t)
30951     _Form of expected instruction(s):_ `vuzp.16 D0, D1'
30952
30953   * poly8x8x2_t vuzp_p8 (poly8x8_t, poly8x8_t)
30954     _Form of expected instruction(s):_ `vuzp.8 D0, D1'
30955
30956   * uint32x4x2_t vuzpq_u32 (uint32x4_t, uint32x4_t)
30957     _Form of expected instruction(s):_ `vuzp.32 Q0, Q1'
30958
30959   * uint16x8x2_t vuzpq_u16 (uint16x8_t, uint16x8_t)
30960     _Form of expected instruction(s):_ `vuzp.16 Q0, Q1'
30961
30962   * uint8x16x2_t vuzpq_u8 (uint8x16_t, uint8x16_t)
30963     _Form of expected instruction(s):_ `vuzp.8 Q0, Q1'
30964
30965   * int32x4x2_t vuzpq_s32 (int32x4_t, int32x4_t)
30966     _Form of expected instruction(s):_ `vuzp.32 Q0, Q1'
30967
30968   * int16x8x2_t vuzpq_s16 (int16x8_t, int16x8_t)
30969     _Form of expected instruction(s):_ `vuzp.16 Q0, Q1'
30970
30971   * int8x16x2_t vuzpq_s8 (int8x16_t, int8x16_t)
30972     _Form of expected instruction(s):_ `vuzp.8 Q0, Q1'
30973
30974   * float32x4x2_t vuzpq_f32 (float32x4_t, float32x4_t)
30975     _Form of expected instruction(s):_ `vuzp.32 Q0, Q1'
30976
30977   * poly16x8x2_t vuzpq_p16 (poly16x8_t, poly16x8_t)
30978     _Form of expected instruction(s):_ `vuzp.16 Q0, Q1'
30979
30980   * poly8x16x2_t vuzpq_p8 (poly8x16_t, poly8x16_t)
30981     _Form of expected instruction(s):_ `vuzp.8 Q0, Q1'
30982
309836.54.3.68 Element/structure loads, VLD1 variants
30984................................................
30985
30986   * uint32x2_t vld1_u32 (const uint32_t *)
30987     _Form of expected instruction(s):_ `vld1.32 {D0}, [R0]'
30988
30989   * uint16x4_t vld1_u16 (const uint16_t *)
30990     _Form of expected instruction(s):_ `vld1.16 {D0}, [R0]'
30991
30992   * uint8x8_t vld1_u8 (const uint8_t *)
30993     _Form of expected instruction(s):_ `vld1.8 {D0}, [R0]'
30994
30995   * int32x2_t vld1_s32 (const int32_t *)
30996     _Form of expected instruction(s):_ `vld1.32 {D0}, [R0]'
30997
30998   * int16x4_t vld1_s16 (const int16_t *)
30999     _Form of expected instruction(s):_ `vld1.16 {D0}, [R0]'
31000
31001   * int8x8_t vld1_s8 (const int8_t *)
31002     _Form of expected instruction(s):_ `vld1.8 {D0}, [R0]'
31003
31004   * uint64x1_t vld1_u64 (const uint64_t *)
31005     _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]'
31006
31007   * int64x1_t vld1_s64 (const int64_t *)
31008     _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]'
31009
31010   * float32x2_t vld1_f32 (const float32_t *)
31011     _Form of expected instruction(s):_ `vld1.32 {D0}, [R0]'
31012
31013   * poly16x4_t vld1_p16 (const poly16_t *)
31014     _Form of expected instruction(s):_ `vld1.16 {D0}, [R0]'
31015
31016   * poly8x8_t vld1_p8 (const poly8_t *)
31017     _Form of expected instruction(s):_ `vld1.8 {D0}, [R0]'
31018
31019   * uint32x4_t vld1q_u32 (const uint32_t *)
31020     _Form of expected instruction(s):_ `vld1.32 {D0, D1}, [R0]'
31021
31022   * uint16x8_t vld1q_u16 (const uint16_t *)
31023     _Form of expected instruction(s):_ `vld1.16 {D0, D1}, [R0]'
31024
31025   * uint8x16_t vld1q_u8 (const uint8_t *)
31026     _Form of expected instruction(s):_ `vld1.8 {D0, D1}, [R0]'
31027
31028   * int32x4_t vld1q_s32 (const int32_t *)
31029     _Form of expected instruction(s):_ `vld1.32 {D0, D1}, [R0]'
31030
31031   * int16x8_t vld1q_s16 (const int16_t *)
31032     _Form of expected instruction(s):_ `vld1.16 {D0, D1}, [R0]'
31033
31034   * int8x16_t vld1q_s8 (const int8_t *)
31035     _Form of expected instruction(s):_ `vld1.8 {D0, D1}, [R0]'
31036
31037   * uint64x2_t vld1q_u64 (const uint64_t *)
31038     _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]'
31039
31040   * int64x2_t vld1q_s64 (const int64_t *)
31041     _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]'
31042
31043   * float32x4_t vld1q_f32 (const float32_t *)
31044     _Form of expected instruction(s):_ `vld1.32 {D0, D1}, [R0]'
31045
31046   * poly16x8_t vld1q_p16 (const poly16_t *)
31047     _Form of expected instruction(s):_ `vld1.16 {D0, D1}, [R0]'
31048
31049   * poly8x16_t vld1q_p8 (const poly8_t *)
31050     _Form of expected instruction(s):_ `vld1.8 {D0, D1}, [R0]'
31051
31052   * uint32x2_t vld1_lane_u32 (const uint32_t *, uint32x2_t, const int)
31053     _Form of expected instruction(s):_ `vld1.32 {D0[0]}, [R0]'
31054
31055   * uint16x4_t vld1_lane_u16 (const uint16_t *, uint16x4_t, const int)
31056     _Form of expected instruction(s):_ `vld1.16 {D0[0]}, [R0]'
31057
31058   * uint8x8_t vld1_lane_u8 (const uint8_t *, uint8x8_t, const int)
31059     _Form of expected instruction(s):_ `vld1.8 {D0[0]}, [R0]'
31060
31061   * int32x2_t vld1_lane_s32 (const int32_t *, int32x2_t, const int)
31062     _Form of expected instruction(s):_ `vld1.32 {D0[0]}, [R0]'
31063
31064   * int16x4_t vld1_lane_s16 (const int16_t *, int16x4_t, const int)
31065     _Form of expected instruction(s):_ `vld1.16 {D0[0]}, [R0]'
31066
31067   * int8x8_t vld1_lane_s8 (const int8_t *, int8x8_t, const int)
31068     _Form of expected instruction(s):_ `vld1.8 {D0[0]}, [R0]'
31069
31070   * float32x2_t vld1_lane_f32 (const float32_t *, float32x2_t, const
31071     int)
31072     _Form of expected instruction(s):_ `vld1.32 {D0[0]}, [R0]'
31073
31074   * poly16x4_t vld1_lane_p16 (const poly16_t *, poly16x4_t, const int)
31075     _Form of expected instruction(s):_ `vld1.16 {D0[0]}, [R0]'
31076
31077   * poly8x8_t vld1_lane_p8 (const poly8_t *, poly8x8_t, const int)
31078     _Form of expected instruction(s):_ `vld1.8 {D0[0]}, [R0]'
31079
31080   * uint64x1_t vld1_lane_u64 (const uint64_t *, uint64x1_t, const int)
31081     _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]'
31082
31083   * int64x1_t vld1_lane_s64 (const int64_t *, int64x1_t, const int)
31084     _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]'
31085
31086   * uint32x4_t vld1q_lane_u32 (const uint32_t *, uint32x4_t, const int)
31087     _Form of expected instruction(s):_ `vld1.32 {D0[0]}, [R0]'
31088
31089   * uint16x8_t vld1q_lane_u16 (const uint16_t *, uint16x8_t, const int)
31090     _Form of expected instruction(s):_ `vld1.16 {D0[0]}, [R0]'
31091
31092   * uint8x16_t vld1q_lane_u8 (const uint8_t *, uint8x16_t, const int)
31093     _Form of expected instruction(s):_ `vld1.8 {D0[0]}, [R0]'
31094
31095   * int32x4_t vld1q_lane_s32 (const int32_t *, int32x4_t, const int)
31096     _Form of expected instruction(s):_ `vld1.32 {D0[0]}, [R0]'
31097
31098   * int16x8_t vld1q_lane_s16 (const int16_t *, int16x8_t, const int)
31099     _Form of expected instruction(s):_ `vld1.16 {D0[0]}, [R0]'
31100
31101   * int8x16_t vld1q_lane_s8 (const int8_t *, int8x16_t, const int)
31102     _Form of expected instruction(s):_ `vld1.8 {D0[0]}, [R0]'
31103
31104   * float32x4_t vld1q_lane_f32 (const float32_t *, float32x4_t, const
31105     int)
31106     _Form of expected instruction(s):_ `vld1.32 {D0[0]}, [R0]'
31107
31108   * poly16x8_t vld1q_lane_p16 (const poly16_t *, poly16x8_t, const int)
31109     _Form of expected instruction(s):_ `vld1.16 {D0[0]}, [R0]'
31110
31111   * poly8x16_t vld1q_lane_p8 (const poly8_t *, poly8x16_t, const int)
31112     _Form of expected instruction(s):_ `vld1.8 {D0[0]}, [R0]'
31113
31114   * uint64x2_t vld1q_lane_u64 (const uint64_t *, uint64x2_t, const int)
31115     _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]'
31116
31117   * int64x2_t vld1q_lane_s64 (const int64_t *, int64x2_t, const int)
31118     _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]'
31119
31120   * uint32x2_t vld1_dup_u32 (const uint32_t *)
31121     _Form of expected instruction(s):_ `vld1.32 {D0[]}, [R0]'
31122
31123   * uint16x4_t vld1_dup_u16 (const uint16_t *)
31124     _Form of expected instruction(s):_ `vld1.16 {D0[]}, [R0]'
31125
31126   * uint8x8_t vld1_dup_u8 (const uint8_t *)
31127     _Form of expected instruction(s):_ `vld1.8 {D0[]}, [R0]'
31128
31129   * int32x2_t vld1_dup_s32 (const int32_t *)
31130     _Form of expected instruction(s):_ `vld1.32 {D0[]}, [R0]'
31131
31132   * int16x4_t vld1_dup_s16 (const int16_t *)
31133     _Form of expected instruction(s):_ `vld1.16 {D0[]}, [R0]'
31134
31135   * int8x8_t vld1_dup_s8 (const int8_t *)
31136     _Form of expected instruction(s):_ `vld1.8 {D0[]}, [R0]'
31137
31138   * float32x2_t vld1_dup_f32 (const float32_t *)
31139     _Form of expected instruction(s):_ `vld1.32 {D0[]}, [R0]'
31140
31141   * poly16x4_t vld1_dup_p16 (const poly16_t *)
31142     _Form of expected instruction(s):_ `vld1.16 {D0[]}, [R0]'
31143
31144   * poly8x8_t vld1_dup_p8 (const poly8_t *)
31145     _Form of expected instruction(s):_ `vld1.8 {D0[]}, [R0]'
31146
31147   * uint64x1_t vld1_dup_u64 (const uint64_t *)
31148     _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]'
31149
31150   * int64x1_t vld1_dup_s64 (const int64_t *)
31151     _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]'
31152
31153   * uint32x4_t vld1q_dup_u32 (const uint32_t *)
31154     _Form of expected instruction(s):_ `vld1.32 {D0[], D1[]}, [R0]'
31155
31156   * uint16x8_t vld1q_dup_u16 (const uint16_t *)
31157     _Form of expected instruction(s):_ `vld1.16 {D0[], D1[]}, [R0]'
31158
31159   * uint8x16_t vld1q_dup_u8 (const uint8_t *)
31160     _Form of expected instruction(s):_ `vld1.8 {D0[], D1[]}, [R0]'
31161
31162   * int32x4_t vld1q_dup_s32 (const int32_t *)
31163     _Form of expected instruction(s):_ `vld1.32 {D0[], D1[]}, [R0]'
31164
31165   * int16x8_t vld1q_dup_s16 (const int16_t *)
31166     _Form of expected instruction(s):_ `vld1.16 {D0[], D1[]}, [R0]'
31167
31168   * int8x16_t vld1q_dup_s8 (const int8_t *)
31169     _Form of expected instruction(s):_ `vld1.8 {D0[], D1[]}, [R0]'
31170
31171   * float32x4_t vld1q_dup_f32 (const float32_t *)
31172     _Form of expected instruction(s):_ `vld1.32 {D0[], D1[]}, [R0]'
31173
31174   * poly16x8_t vld1q_dup_p16 (const poly16_t *)
31175     _Form of expected instruction(s):_ `vld1.16 {D0[], D1[]}, [R0]'
31176
31177   * poly8x16_t vld1q_dup_p8 (const poly8_t *)
31178     _Form of expected instruction(s):_ `vld1.8 {D0[], D1[]}, [R0]'
31179
31180   * uint64x2_t vld1q_dup_u64 (const uint64_t *)
31181     _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]'
31182
31183   * int64x2_t vld1q_dup_s64 (const int64_t *)
31184     _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]'
31185
311866.54.3.69 Element/structure stores, VST1 variants
31187.................................................
31188
31189   * void vst1_u32 (uint32_t *, uint32x2_t)
31190     _Form of expected instruction(s):_ `vst1.32 {D0}, [R0]'
31191
31192   * void vst1_u16 (uint16_t *, uint16x4_t)
31193     _Form of expected instruction(s):_ `vst1.16 {D0}, [R0]'
31194
31195   * void vst1_u8 (uint8_t *, uint8x8_t)
31196     _Form of expected instruction(s):_ `vst1.8 {D0}, [R0]'
31197
31198   * void vst1_s32 (int32_t *, int32x2_t)
31199     _Form of expected instruction(s):_ `vst1.32 {D0}, [R0]'
31200
31201   * void vst1_s16 (int16_t *, int16x4_t)
31202     _Form of expected instruction(s):_ `vst1.16 {D0}, [R0]'
31203
31204   * void vst1_s8 (int8_t *, int8x8_t)
31205     _Form of expected instruction(s):_ `vst1.8 {D0}, [R0]'
31206
31207   * void vst1_u64 (uint64_t *, uint64x1_t)
31208     _Form of expected instruction(s):_ `vst1.64 {D0}, [R0]'
31209
31210   * void vst1_s64 (int64_t *, int64x1_t)
31211     _Form of expected instruction(s):_ `vst1.64 {D0}, [R0]'
31212
31213   * void vst1_f32 (float32_t *, float32x2_t)
31214     _Form of expected instruction(s):_ `vst1.32 {D0}, [R0]'
31215
31216   * void vst1_p16 (poly16_t *, poly16x4_t)
31217     _Form of expected instruction(s):_ `vst1.16 {D0}, [R0]'
31218
31219   * void vst1_p8 (poly8_t *, poly8x8_t)
31220     _Form of expected instruction(s):_ `vst1.8 {D0}, [R0]'
31221
31222   * void vst1q_u32 (uint32_t *, uint32x4_t)
31223     _Form of expected instruction(s):_ `vst1.32 {D0, D1}, [R0]'
31224
31225   * void vst1q_u16 (uint16_t *, uint16x8_t)
31226     _Form of expected instruction(s):_ `vst1.16 {D0, D1}, [R0]'
31227
31228   * void vst1q_u8 (uint8_t *, uint8x16_t)
31229     _Form of expected instruction(s):_ `vst1.8 {D0, D1}, [R0]'
31230
31231   * void vst1q_s32 (int32_t *, int32x4_t)
31232     _Form of expected instruction(s):_ `vst1.32 {D0, D1}, [R0]'
31233
31234   * void vst1q_s16 (int16_t *, int16x8_t)
31235     _Form of expected instruction(s):_ `vst1.16 {D0, D1}, [R0]'
31236
31237   * void vst1q_s8 (int8_t *, int8x16_t)
31238     _Form of expected instruction(s):_ `vst1.8 {D0, D1}, [R0]'
31239
31240   * void vst1q_u64 (uint64_t *, uint64x2_t)
31241     _Form of expected instruction(s):_ `vst1.64 {D0, D1}, [R0]'
31242
31243   * void vst1q_s64 (int64_t *, int64x2_t)
31244     _Form of expected instruction(s):_ `vst1.64 {D0, D1}, [R0]'
31245
31246   * void vst1q_f32 (float32_t *, float32x4_t)
31247     _Form of expected instruction(s):_ `vst1.32 {D0, D1}, [R0]'
31248
31249   * void vst1q_p16 (poly16_t *, poly16x8_t)
31250     _Form of expected instruction(s):_ `vst1.16 {D0, D1}, [R0]'
31251
31252   * void vst1q_p8 (poly8_t *, poly8x16_t)
31253     _Form of expected instruction(s):_ `vst1.8 {D0, D1}, [R0]'
31254
31255   * void vst1_lane_u32 (uint32_t *, uint32x2_t, const int)
31256     _Form of expected instruction(s):_ `vst1.32 {D0[0]}, [R0]'
31257
31258   * void vst1_lane_u16 (uint16_t *, uint16x4_t, const int)
31259     _Form of expected instruction(s):_ `vst1.16 {D0[0]}, [R0]'
31260
31261   * void vst1_lane_u8 (uint8_t *, uint8x8_t, const int)
31262     _Form of expected instruction(s):_ `vst1.8 {D0[0]}, [R0]'
31263
31264   * void vst1_lane_s32 (int32_t *, int32x2_t, const int)
31265     _Form of expected instruction(s):_ `vst1.32 {D0[0]}, [R0]'
31266
31267   * void vst1_lane_s16 (int16_t *, int16x4_t, const int)
31268     _Form of expected instruction(s):_ `vst1.16 {D0[0]}, [R0]'
31269
31270   * void vst1_lane_s8 (int8_t *, int8x8_t, const int)
31271     _Form of expected instruction(s):_ `vst1.8 {D0[0]}, [R0]'
31272
31273   * void vst1_lane_f32 (float32_t *, float32x2_t, const int)
31274     _Form of expected instruction(s):_ `vst1.32 {D0[0]}, [R0]'
31275
31276   * void vst1_lane_p16 (poly16_t *, poly16x4_t, const int)
31277     _Form of expected instruction(s):_ `vst1.16 {D0[0]}, [R0]'
31278
31279   * void vst1_lane_p8 (poly8_t *, poly8x8_t, const int)
31280     _Form of expected instruction(s):_ `vst1.8 {D0[0]}, [R0]'
31281
31282   * void vst1_lane_s64 (int64_t *, int64x1_t, const int)
31283     _Form of expected instruction(s):_ `vst1.64 {D0}, [R0]'
31284
31285   * void vst1_lane_u64 (uint64_t *, uint64x1_t, const int)
31286     _Form of expected instruction(s):_ `vst1.64 {D0}, [R0]'
31287
31288   * void vst1q_lane_u32 (uint32_t *, uint32x4_t, const int)
31289     _Form of expected instruction(s):_ `vst1.32 {D0[0]}, [R0]'
31290
31291   * void vst1q_lane_u16 (uint16_t *, uint16x8_t, const int)
31292     _Form of expected instruction(s):_ `vst1.16 {D0[0]}, [R0]'
31293
31294   * void vst1q_lane_u8 (uint8_t *, uint8x16_t, const int)
31295     _Form of expected instruction(s):_ `vst1.8 {D0[0]}, [R0]'
31296
31297   * void vst1q_lane_s32 (int32_t *, int32x4_t, const int)
31298     _Form of expected instruction(s):_ `vst1.32 {D0[0]}, [R0]'
31299
31300   * void vst1q_lane_s16 (int16_t *, int16x8_t, const int)
31301     _Form of expected instruction(s):_ `vst1.16 {D0[0]}, [R0]'
31302
31303   * void vst1q_lane_s8 (int8_t *, int8x16_t, const int)
31304     _Form of expected instruction(s):_ `vst1.8 {D0[0]}, [R0]'
31305
31306   * void vst1q_lane_f32 (float32_t *, float32x4_t, const int)
31307     _Form of expected instruction(s):_ `vst1.32 {D0[0]}, [R0]'
31308
31309   * void vst1q_lane_p16 (poly16_t *, poly16x8_t, const int)
31310     _Form of expected instruction(s):_ `vst1.16 {D0[0]}, [R0]'
31311
31312   * void vst1q_lane_p8 (poly8_t *, poly8x16_t, const int)
31313     _Form of expected instruction(s):_ `vst1.8 {D0[0]}, [R0]'
31314
31315   * void vst1q_lane_s64 (int64_t *, int64x2_t, const int)
31316     _Form of expected instruction(s):_ `vst1.64 {D0}, [R0]'
31317
31318   * void vst1q_lane_u64 (uint64_t *, uint64x2_t, const int)
31319     _Form of expected instruction(s):_ `vst1.64 {D0}, [R0]'
31320
313216.54.3.70 Element/structure loads, VLD2 variants
31322................................................
31323
31324   * uint32x2x2_t vld2_u32 (const uint32_t *)
31325     _Form of expected instruction(s):_ `vld2.32 {D0, D1}, [R0]'
31326
31327   * uint16x4x2_t vld2_u16 (const uint16_t *)
31328     _Form of expected instruction(s):_ `vld2.16 {D0, D1}, [R0]'
31329
31330   * uint8x8x2_t vld2_u8 (const uint8_t *)
31331     _Form of expected instruction(s):_ `vld2.8 {D0, D1}, [R0]'
31332
31333   * int32x2x2_t vld2_s32 (const int32_t *)
31334     _Form of expected instruction(s):_ `vld2.32 {D0, D1}, [R0]'
31335
31336   * int16x4x2_t vld2_s16 (const int16_t *)
31337     _Form of expected instruction(s):_ `vld2.16 {D0, D1}, [R0]'
31338
31339   * int8x8x2_t vld2_s8 (const int8_t *)
31340     _Form of expected instruction(s):_ `vld2.8 {D0, D1}, [R0]'
31341
31342   * float32x2x2_t vld2_f32 (const float32_t *)
31343     _Form of expected instruction(s):_ `vld2.32 {D0, D1}, [R0]'
31344
31345   * poly16x4x2_t vld2_p16 (const poly16_t *)
31346     _Form of expected instruction(s):_ `vld2.16 {D0, D1}, [R0]'
31347
31348   * poly8x8x2_t vld2_p8 (const poly8_t *)
31349     _Form of expected instruction(s):_ `vld2.8 {D0, D1}, [R0]'
31350
31351   * uint64x1x2_t vld2_u64 (const uint64_t *)
31352     _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]'
31353
31354   * int64x1x2_t vld2_s64 (const int64_t *)
31355     _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]'
31356
31357   * uint32x4x2_t vld2q_u32 (const uint32_t *)
31358     _Form of expected instruction(s):_ `vld2.32 {D0, D1}, [R0]'
31359
31360   * uint16x8x2_t vld2q_u16 (const uint16_t *)
31361     _Form of expected instruction(s):_ `vld2.16 {D0, D1}, [R0]'
31362
31363   * uint8x16x2_t vld2q_u8 (const uint8_t *)
31364     _Form of expected instruction(s):_ `vld2.8 {D0, D1}, [R0]'
31365
31366   * int32x4x2_t vld2q_s32 (const int32_t *)
31367     _Form of expected instruction(s):_ `vld2.32 {D0, D1}, [R0]'
31368
31369   * int16x8x2_t vld2q_s16 (const int16_t *)
31370     _Form of expected instruction(s):_ `vld2.16 {D0, D1}, [R0]'
31371
31372   * int8x16x2_t vld2q_s8 (const int8_t *)
31373     _Form of expected instruction(s):_ `vld2.8 {D0, D1}, [R0]'
31374
31375   * float32x4x2_t vld2q_f32 (const float32_t *)
31376     _Form of expected instruction(s):_ `vld2.32 {D0, D1}, [R0]'
31377
31378   * poly16x8x2_t vld2q_p16 (const poly16_t *)
31379     _Form of expected instruction(s):_ `vld2.16 {D0, D1}, [R0]'
31380
31381   * poly8x16x2_t vld2q_p8 (const poly8_t *)
31382     _Form of expected instruction(s):_ `vld2.8 {D0, D1}, [R0]'
31383
31384   * uint32x2x2_t vld2_lane_u32 (const uint32_t *, uint32x2x2_t, const
31385     int)
31386     _Form of expected instruction(s):_ `vld2.32 {D0[0], D1[0]}, [R0]'
31387
31388   * uint16x4x2_t vld2_lane_u16 (const uint16_t *, uint16x4x2_t, const
31389     int)
31390     _Form of expected instruction(s):_ `vld2.16 {D0[0], D1[0]}, [R0]'
31391
31392   * uint8x8x2_t vld2_lane_u8 (const uint8_t *, uint8x8x2_t, const int)
31393     _Form of expected instruction(s):_ `vld2.8 {D0[0], D1[0]}, [R0]'
31394
31395   * int32x2x2_t vld2_lane_s32 (const int32_t *, int32x2x2_t, const int)
31396     _Form of expected instruction(s):_ `vld2.32 {D0[0], D1[0]}, [R0]'
31397
31398   * int16x4x2_t vld2_lane_s16 (const int16_t *, int16x4x2_t, const int)
31399     _Form of expected instruction(s):_ `vld2.16 {D0[0], D1[0]}, [R0]'
31400
31401   * int8x8x2_t vld2_lane_s8 (const int8_t *, int8x8x2_t, const int)
31402     _Form of expected instruction(s):_ `vld2.8 {D0[0], D1[0]}, [R0]'
31403
31404   * float32x2x2_t vld2_lane_f32 (const float32_t *, float32x2x2_t,
31405     const int)
31406     _Form of expected instruction(s):_ `vld2.32 {D0[0], D1[0]}, [R0]'
31407
31408   * poly16x4x2_t vld2_lane_p16 (const poly16_t *, poly16x4x2_t, const
31409     int)
31410     _Form of expected instruction(s):_ `vld2.16 {D0[0], D1[0]}, [R0]'
31411
31412   * poly8x8x2_t vld2_lane_p8 (const poly8_t *, poly8x8x2_t, const int)
31413     _Form of expected instruction(s):_ `vld2.8 {D0[0], D1[0]}, [R0]'
31414
31415   * int32x4x2_t vld2q_lane_s32 (const int32_t *, int32x4x2_t, const
31416     int)
31417     _Form of expected instruction(s):_ `vld2.32 {D0[0], D1[0]}, [R0]'
31418
31419   * int16x8x2_t vld2q_lane_s16 (const int16_t *, int16x8x2_t, const
31420     int)
31421     _Form of expected instruction(s):_ `vld2.16 {D0[0], D1[0]}, [R0]'
31422
31423   * uint32x4x2_t vld2q_lane_u32 (const uint32_t *, uint32x4x2_t, const
31424     int)
31425     _Form of expected instruction(s):_ `vld2.32 {D0[0], D1[0]}, [R0]'
31426
31427   * uint16x8x2_t vld2q_lane_u16 (const uint16_t *, uint16x8x2_t, const
31428     int)
31429     _Form of expected instruction(s):_ `vld2.16 {D0[0], D1[0]}, [R0]'
31430
31431   * float32x4x2_t vld2q_lane_f32 (const float32_t *, float32x4x2_t,
31432     const int)
31433     _Form of expected instruction(s):_ `vld2.32 {D0[0], D1[0]}, [R0]'
31434
31435   * poly16x8x2_t vld2q_lane_p16 (const poly16_t *, poly16x8x2_t, const
31436     int)
31437     _Form of expected instruction(s):_ `vld2.16 {D0[0], D1[0]}, [R0]'
31438
31439   * uint32x2x2_t vld2_dup_u32 (const uint32_t *)
31440     _Form of expected instruction(s):_ `vld2.32 {D0[], D1[]}, [R0]'
31441
31442   * uint16x4x2_t vld2_dup_u16 (const uint16_t *)
31443     _Form of expected instruction(s):_ `vld2.16 {D0[], D1[]}, [R0]'
31444
31445   * uint8x8x2_t vld2_dup_u8 (const uint8_t *)
31446     _Form of expected instruction(s):_ `vld2.8 {D0[], D1[]}, [R0]'
31447
31448   * int32x2x2_t vld2_dup_s32 (const int32_t *)
31449     _Form of expected instruction(s):_ `vld2.32 {D0[], D1[]}, [R0]'
31450
31451   * int16x4x2_t vld2_dup_s16 (const int16_t *)
31452     _Form of expected instruction(s):_ `vld2.16 {D0[], D1[]}, [R0]'
31453
31454   * int8x8x2_t vld2_dup_s8 (const int8_t *)
31455     _Form of expected instruction(s):_ `vld2.8 {D0[], D1[]}, [R0]'
31456
31457   * float32x2x2_t vld2_dup_f32 (const float32_t *)
31458     _Form of expected instruction(s):_ `vld2.32 {D0[], D1[]}, [R0]'
31459
31460   * poly16x4x2_t vld2_dup_p16 (const poly16_t *)
31461     _Form of expected instruction(s):_ `vld2.16 {D0[], D1[]}, [R0]'
31462
31463   * poly8x8x2_t vld2_dup_p8 (const poly8_t *)
31464     _Form of expected instruction(s):_ `vld2.8 {D0[], D1[]}, [R0]'
31465
31466   * uint64x1x2_t vld2_dup_u64 (const uint64_t *)
31467     _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]'
31468
31469   * int64x1x2_t vld2_dup_s64 (const int64_t *)
31470     _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]'
31471
314726.54.3.71 Element/structure stores, VST2 variants
31473.................................................
31474
31475   * void vst2_u32 (uint32_t *, uint32x2x2_t)
31476     _Form of expected instruction(s):_ `vst2.32 {D0, D1}, [R0]'
31477
31478   * void vst2_u16 (uint16_t *, uint16x4x2_t)
31479     _Form of expected instruction(s):_ `vst2.16 {D0, D1}, [R0]'
31480
31481   * void vst2_u8 (uint8_t *, uint8x8x2_t)
31482     _Form of expected instruction(s):_ `vst2.8 {D0, D1}, [R0]'
31483
31484   * void vst2_s32 (int32_t *, int32x2x2_t)
31485     _Form of expected instruction(s):_ `vst2.32 {D0, D1}, [R0]'
31486
31487   * void vst2_s16 (int16_t *, int16x4x2_t)
31488     _Form of expected instruction(s):_ `vst2.16 {D0, D1}, [R0]'
31489
31490   * void vst2_s8 (int8_t *, int8x8x2_t)
31491     _Form of expected instruction(s):_ `vst2.8 {D0, D1}, [R0]'
31492
31493   * void vst2_f32 (float32_t *, float32x2x2_t)
31494     _Form of expected instruction(s):_ `vst2.32 {D0, D1}, [R0]'
31495
31496   * void vst2_p16 (poly16_t *, poly16x4x2_t)
31497     _Form of expected instruction(s):_ `vst2.16 {D0, D1}, [R0]'
31498
31499   * void vst2_p8 (poly8_t *, poly8x8x2_t)
31500     _Form of expected instruction(s):_ `vst2.8 {D0, D1}, [R0]'
31501
31502   * void vst2_u64 (uint64_t *, uint64x1x2_t)
31503     _Form of expected instruction(s):_ `vst1.64 {D0, D1}, [R0]'
31504
31505   * void vst2_s64 (int64_t *, int64x1x2_t)
31506     _Form of expected instruction(s):_ `vst1.64 {D0, D1}, [R0]'
31507
31508   * void vst2q_u32 (uint32_t *, uint32x4x2_t)
31509     _Form of expected instruction(s):_ `vst2.32 {D0, D1}, [R0]'
31510
31511   * void vst2q_u16 (uint16_t *, uint16x8x2_t)
31512     _Form of expected instruction(s):_ `vst2.16 {D0, D1}, [R0]'
31513
31514   * void vst2q_u8 (uint8_t *, uint8x16x2_t)
31515     _Form of expected instruction(s):_ `vst2.8 {D0, D1}, [R0]'
31516
31517   * void vst2q_s32 (int32_t *, int32x4x2_t)
31518     _Form of expected instruction(s):_ `vst2.32 {D0, D1}, [R0]'
31519
31520   * void vst2q_s16 (int16_t *, int16x8x2_t)
31521     _Form of expected instruction(s):_ `vst2.16 {D0, D1}, [R0]'
31522
31523   * void vst2q_s8 (int8_t *, int8x16x2_t)
31524     _Form of expected instruction(s):_ `vst2.8 {D0, D1}, [R0]'
31525
31526   * void vst2q_f32 (float32_t *, float32x4x2_t)
31527     _Form of expected instruction(s):_ `vst2.32 {D0, D1}, [R0]'
31528
31529   * void vst2q_p16 (poly16_t *, poly16x8x2_t)
31530     _Form of expected instruction(s):_ `vst2.16 {D0, D1}, [R0]'
31531
31532   * void vst2q_p8 (poly8_t *, poly8x16x2_t)
31533     _Form of expected instruction(s):_ `vst2.8 {D0, D1}, [R0]'
31534
31535   * void vst2_lane_u32 (uint32_t *, uint32x2x2_t, const int)
31536     _Form of expected instruction(s):_ `vst2.32 {D0[0], D1[0]}, [R0]'
31537
31538   * void vst2_lane_u16 (uint16_t *, uint16x4x2_t, const int)
31539     _Form of expected instruction(s):_ `vst2.16 {D0[0], D1[0]}, [R0]'
31540
31541   * void vst2_lane_u8 (uint8_t *, uint8x8x2_t, const int)
31542     _Form of expected instruction(s):_ `vst2.8 {D0[0], D1[0]}, [R0]'
31543
31544   * void vst2_lane_s32 (int32_t *, int32x2x2_t, const int)
31545     _Form of expected instruction(s):_ `vst2.32 {D0[0], D1[0]}, [R0]'
31546
31547   * void vst2_lane_s16 (int16_t *, int16x4x2_t, const int)
31548     _Form of expected instruction(s):_ `vst2.16 {D0[0], D1[0]}, [R0]'
31549
31550   * void vst2_lane_s8 (int8_t *, int8x8x2_t, const int)
31551     _Form of expected instruction(s):_ `vst2.8 {D0[0], D1[0]}, [R0]'
31552
31553   * void vst2_lane_f32 (float32_t *, float32x2x2_t, const int)
31554     _Form of expected instruction(s):_ `vst2.32 {D0[0], D1[0]}, [R0]'
31555
31556   * void vst2_lane_p16 (poly16_t *, poly16x4x2_t, const int)
31557     _Form of expected instruction(s):_ `vst2.16 {D0[0], D1[0]}, [R0]'
31558
31559   * void vst2_lane_p8 (poly8_t *, poly8x8x2_t, const int)
31560     _Form of expected instruction(s):_ `vst2.8 {D0[0], D1[0]}, [R0]'
31561
31562   * void vst2q_lane_s32 (int32_t *, int32x4x2_t, const int)
31563     _Form of expected instruction(s):_ `vst2.32 {D0[0], D1[0]}, [R0]'
31564
31565   * void vst2q_lane_s16 (int16_t *, int16x8x2_t, const int)
31566     _Form of expected instruction(s):_ `vst2.16 {D0[0], D1[0]}, [R0]'
31567
31568   * void vst2q_lane_u32 (uint32_t *, uint32x4x2_t, const int)
31569     _Form of expected instruction(s):_ `vst2.32 {D0[0], D1[0]}, [R0]'
31570
31571   * void vst2q_lane_u16 (uint16_t *, uint16x8x2_t, const int)
31572     _Form of expected instruction(s):_ `vst2.16 {D0[0], D1[0]}, [R0]'
31573
31574   * void vst2q_lane_f32 (float32_t *, float32x4x2_t, const int)
31575     _Form of expected instruction(s):_ `vst2.32 {D0[0], D1[0]}, [R0]'
31576
31577   * void vst2q_lane_p16 (poly16_t *, poly16x8x2_t, const int)
31578     _Form of expected instruction(s):_ `vst2.16 {D0[0], D1[0]}, [R0]'
31579
315806.54.3.72 Element/structure loads, VLD3 variants
31581................................................
31582
31583   * uint32x2x3_t vld3_u32 (const uint32_t *)
31584     _Form of expected instruction(s):_ `vld3.32 {D0, D1, D2}, [R0]'
31585
31586   * uint16x4x3_t vld3_u16 (const uint16_t *)
31587     _Form of expected instruction(s):_ `vld3.16 {D0, D1, D2}, [R0]'
31588
31589   * uint8x8x3_t vld3_u8 (const uint8_t *)
31590     _Form of expected instruction(s):_ `vld3.8 {D0, D1, D2}, [R0]'
31591
31592   * int32x2x3_t vld3_s32 (const int32_t *)
31593     _Form of expected instruction(s):_ `vld3.32 {D0, D1, D2}, [R0]'
31594
31595   * int16x4x3_t vld3_s16 (const int16_t *)
31596     _Form of expected instruction(s):_ `vld3.16 {D0, D1, D2}, [R0]'
31597
31598   * int8x8x3_t vld3_s8 (const int8_t *)
31599     _Form of expected instruction(s):_ `vld3.8 {D0, D1, D2}, [R0]'
31600
31601   * float32x2x3_t vld3_f32 (const float32_t *)
31602     _Form of expected instruction(s):_ `vld3.32 {D0, D1, D2}, [R0]'
31603
31604   * poly16x4x3_t vld3_p16 (const poly16_t *)
31605     _Form of expected instruction(s):_ `vld3.16 {D0, D1, D2}, [R0]'
31606
31607   * poly8x8x3_t vld3_p8 (const poly8_t *)
31608     _Form of expected instruction(s):_ `vld3.8 {D0, D1, D2}, [R0]'
31609
31610   * uint64x1x3_t vld3_u64 (const uint64_t *)
31611     _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2}, [R0]'
31612
31613   * int64x1x3_t vld3_s64 (const int64_t *)
31614     _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2}, [R0]'
31615
31616   * uint32x4x3_t vld3q_u32 (const uint32_t *)
31617     _Form of expected instruction(s):_ `vld3.32 {D0, D1, D2}, [R0]'
31618
31619   * uint16x8x3_t vld3q_u16 (const uint16_t *)
31620     _Form of expected instruction(s):_ `vld3.16 {D0, D1, D2}, [R0]'
31621
31622   * uint8x16x3_t vld3q_u8 (const uint8_t *)
31623     _Form of expected instruction(s):_ `vld3.8 {D0, D1, D2}, [R0]'
31624
31625   * int32x4x3_t vld3q_s32 (const int32_t *)
31626     _Form of expected instruction(s):_ `vld3.32 {D0, D1, D2}, [R0]'
31627
31628   * int16x8x3_t vld3q_s16 (const int16_t *)
31629     _Form of expected instruction(s):_ `vld3.16 {D0, D1, D2}, [R0]'
31630
31631   * int8x16x3_t vld3q_s8 (const int8_t *)
31632     _Form of expected instruction(s):_ `vld3.8 {D0, D1, D2}, [R0]'
31633
31634   * float32x4x3_t vld3q_f32 (const float32_t *)
31635     _Form of expected instruction(s):_ `vld3.32 {D0, D1, D2}, [R0]'
31636
31637   * poly16x8x3_t vld3q_p16 (const poly16_t *)
31638     _Form of expected instruction(s):_ `vld3.16 {D0, D1, D2}, [R0]'
31639
31640   * poly8x16x3_t vld3q_p8 (const poly8_t *)
31641     _Form of expected instruction(s):_ `vld3.8 {D0, D1, D2}, [R0]'
31642
31643   * uint32x2x3_t vld3_lane_u32 (const uint32_t *, uint32x2x3_t, const
31644     int)
31645     _Form of expected instruction(s):_ `vld3.32 {D0[0], D1[0], D2[0]},
31646     [R0]'
31647
31648   * uint16x4x3_t vld3_lane_u16 (const uint16_t *, uint16x4x3_t, const
31649     int)
31650     _Form of expected instruction(s):_ `vld3.16 {D0[0], D1[0], D2[0]},
31651     [R0]'
31652
31653   * uint8x8x3_t vld3_lane_u8 (const uint8_t *, uint8x8x3_t, const int)
31654     _Form of expected instruction(s):_ `vld3.8 {D0[0], D1[0], D2[0]},
31655     [R0]'
31656
31657   * int32x2x3_t vld3_lane_s32 (const int32_t *, int32x2x3_t, const int)
31658     _Form of expected instruction(s):_ `vld3.32 {D0[0], D1[0], D2[0]},
31659     [R0]'
31660
31661   * int16x4x3_t vld3_lane_s16 (const int16_t *, int16x4x3_t, const int)
31662     _Form of expected instruction(s):_ `vld3.16 {D0[0], D1[0], D2[0]},
31663     [R0]'
31664
31665   * int8x8x3_t vld3_lane_s8 (const int8_t *, int8x8x3_t, const int)
31666     _Form of expected instruction(s):_ `vld3.8 {D0[0], D1[0], D2[0]},
31667     [R0]'
31668
31669   * float32x2x3_t vld3_lane_f32 (const float32_t *, float32x2x3_t,
31670     const int)
31671     _Form of expected instruction(s):_ `vld3.32 {D0[0], D1[0], D2[0]},
31672     [R0]'
31673
31674   * poly16x4x3_t vld3_lane_p16 (const poly16_t *, poly16x4x3_t, const
31675     int)
31676     _Form of expected instruction(s):_ `vld3.16 {D0[0], D1[0], D2[0]},
31677     [R0]'
31678
31679   * poly8x8x3_t vld3_lane_p8 (const poly8_t *, poly8x8x3_t, const int)
31680     _Form of expected instruction(s):_ `vld3.8 {D0[0], D1[0], D2[0]},
31681     [R0]'
31682
31683   * int32x4x3_t vld3q_lane_s32 (const int32_t *, int32x4x3_t, const
31684     int)
31685     _Form of expected instruction(s):_ `vld3.32 {D0[0], D1[0], D2[0]},
31686     [R0]'
31687
31688   * int16x8x3_t vld3q_lane_s16 (const int16_t *, int16x8x3_t, const
31689     int)
31690     _Form of expected instruction(s):_ `vld3.16 {D0[0], D1[0], D2[0]},
31691     [R0]'
31692
31693   * uint32x4x3_t vld3q_lane_u32 (const uint32_t *, uint32x4x3_t, const
31694     int)
31695     _Form of expected instruction(s):_ `vld3.32 {D0[0], D1[0], D2[0]},
31696     [R0]'
31697
31698   * uint16x8x3_t vld3q_lane_u16 (const uint16_t *, uint16x8x3_t, const
31699     int)
31700     _Form of expected instruction(s):_ `vld3.16 {D0[0], D1[0], D2[0]},
31701     [R0]'
31702
31703   * float32x4x3_t vld3q_lane_f32 (const float32_t *, float32x4x3_t,
31704     const int)
31705     _Form of expected instruction(s):_ `vld3.32 {D0[0], D1[0], D2[0]},
31706     [R0]'
31707
31708   * poly16x8x3_t vld3q_lane_p16 (const poly16_t *, poly16x8x3_t, const
31709     int)
31710     _Form of expected instruction(s):_ `vld3.16 {D0[0], D1[0], D2[0]},
31711     [R0]'
31712
31713   * uint32x2x3_t vld3_dup_u32 (const uint32_t *)
31714     _Form of expected instruction(s):_ `vld3.32 {D0[], D1[], D2[]},
31715     [R0]'
31716
31717   * uint16x4x3_t vld3_dup_u16 (const uint16_t *)
31718     _Form of expected instruction(s):_ `vld3.16 {D0[], D1[], D2[]},
31719     [R0]'
31720
31721   * uint8x8x3_t vld3_dup_u8 (const uint8_t *)
31722     _Form of expected instruction(s):_ `vld3.8 {D0[], D1[], D2[]},
31723     [R0]'
31724
31725   * int32x2x3_t vld3_dup_s32 (const int32_t *)
31726     _Form of expected instruction(s):_ `vld3.32 {D0[], D1[], D2[]},
31727     [R0]'
31728
31729   * int16x4x3_t vld3_dup_s16 (const int16_t *)
31730     _Form of expected instruction(s):_ `vld3.16 {D0[], D1[], D2[]},
31731     [R0]'
31732
31733   * int8x8x3_t vld3_dup_s8 (const int8_t *)
31734     _Form of expected instruction(s):_ `vld3.8 {D0[], D1[], D2[]},
31735     [R0]'
31736
31737   * float32x2x3_t vld3_dup_f32 (const float32_t *)
31738     _Form of expected instruction(s):_ `vld3.32 {D0[], D1[], D2[]},
31739     [R0]'
31740
31741   * poly16x4x3_t vld3_dup_p16 (const poly16_t *)
31742     _Form of expected instruction(s):_ `vld3.16 {D0[], D1[], D2[]},
31743     [R0]'
31744
31745   * poly8x8x3_t vld3_dup_p8 (const poly8_t *)
31746     _Form of expected instruction(s):_ `vld3.8 {D0[], D1[], D2[]},
31747     [R0]'
31748
31749   * uint64x1x3_t vld3_dup_u64 (const uint64_t *)
31750     _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2}, [R0]'
31751
31752   * int64x1x3_t vld3_dup_s64 (const int64_t *)
31753     _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2}, [R0]'
31754
317556.54.3.73 Element/structure stores, VST3 variants
31756.................................................
31757
31758   * void vst3_u32 (uint32_t *, uint32x2x3_t)
31759     _Form of expected instruction(s):_ `vst3.32 {D0, D1, D2, D3}, [R0]'
31760
31761   * void vst3_u16 (uint16_t *, uint16x4x3_t)
31762     _Form of expected instruction(s):_ `vst3.16 {D0, D1, D2, D3}, [R0]'
31763
31764   * void vst3_u8 (uint8_t *, uint8x8x3_t)
31765     _Form of expected instruction(s):_ `vst3.8 {D0, D1, D2, D3}, [R0]'
31766
31767   * void vst3_s32 (int32_t *, int32x2x3_t)
31768     _Form of expected instruction(s):_ `vst3.32 {D0, D1, D2, D3}, [R0]'
31769
31770   * void vst3_s16 (int16_t *, int16x4x3_t)
31771     _Form of expected instruction(s):_ `vst3.16 {D0, D1, D2, D3}, [R0]'
31772
31773   * void vst3_s8 (int8_t *, int8x8x3_t)
31774     _Form of expected instruction(s):_ `vst3.8 {D0, D1, D2, D3}, [R0]'
31775
31776   * void vst3_f32 (float32_t *, float32x2x3_t)
31777     _Form of expected instruction(s):_ `vst3.32 {D0, D1, D2, D3}, [R0]'
31778
31779   * void vst3_p16 (poly16_t *, poly16x4x3_t)
31780     _Form of expected instruction(s):_ `vst3.16 {D0, D1, D2, D3}, [R0]'
31781
31782   * void vst3_p8 (poly8_t *, poly8x8x3_t)
31783     _Form of expected instruction(s):_ `vst3.8 {D0, D1, D2, D3}, [R0]'
31784
31785   * void vst3_u64 (uint64_t *, uint64x1x3_t)
31786     _Form of expected instruction(s):_ `vst1.64 {D0, D1, D2, D3}, [R0]'
31787
31788   * void vst3_s64 (int64_t *, int64x1x3_t)
31789     _Form of expected instruction(s):_ `vst1.64 {D0, D1, D2, D3}, [R0]'
31790
31791   * void vst3q_u32 (uint32_t *, uint32x4x3_t)
31792     _Form of expected instruction(s):_ `vst3.32 {D0, D1, D2}, [R0]'
31793
31794   * void vst3q_u16 (uint16_t *, uint16x8x3_t)
31795     _Form of expected instruction(s):_ `vst3.16 {D0, D1, D2}, [R0]'
31796
31797   * void vst3q_u8 (uint8_t *, uint8x16x3_t)
31798     _Form of expected instruction(s):_ `vst3.8 {D0, D1, D2}, [R0]'
31799
31800   * void vst3q_s32 (int32_t *, int32x4x3_t)
31801     _Form of expected instruction(s):_ `vst3.32 {D0, D1, D2}, [R0]'
31802
31803   * void vst3q_s16 (int16_t *, int16x8x3_t)
31804     _Form of expected instruction(s):_ `vst3.16 {D0, D1, D2}, [R0]'
31805
31806   * void vst3q_s8 (int8_t *, int8x16x3_t)
31807     _Form of expected instruction(s):_ `vst3.8 {D0, D1, D2}, [R0]'
31808
31809   * void vst3q_f32 (float32_t *, float32x4x3_t)
31810     _Form of expected instruction(s):_ `vst3.32 {D0, D1, D2}, [R0]'
31811
31812   * void vst3q_p16 (poly16_t *, poly16x8x3_t)
31813     _Form of expected instruction(s):_ `vst3.16 {D0, D1, D2}, [R0]'
31814
31815   * void vst3q_p8 (poly8_t *, poly8x16x3_t)
31816     _Form of expected instruction(s):_ `vst3.8 {D0, D1, D2}, [R0]'
31817
31818   * void vst3_lane_u32 (uint32_t *, uint32x2x3_t, const int)
31819     _Form of expected instruction(s):_ `vst3.32 {D0[0], D1[0], D2[0]},
31820     [R0]'
31821
31822   * void vst3_lane_u16 (uint16_t *, uint16x4x3_t, const int)
31823     _Form of expected instruction(s):_ `vst3.16 {D0[0], D1[0], D2[0]},
31824     [R0]'
31825
31826   * void vst3_lane_u8 (uint8_t *, uint8x8x3_t, const int)
31827     _Form of expected instruction(s):_ `vst3.8 {D0[0], D1[0], D2[0]},
31828     [R0]'
31829
31830   * void vst3_lane_s32 (int32_t *, int32x2x3_t, const int)
31831     _Form of expected instruction(s):_ `vst3.32 {D0[0], D1[0], D2[0]},
31832     [R0]'
31833
31834   * void vst3_lane_s16 (int16_t *, int16x4x3_t, const int)
31835     _Form of expected instruction(s):_ `vst3.16 {D0[0], D1[0], D2[0]},
31836     [R0]'
31837
31838   * void vst3_lane_s8 (int8_t *, int8x8x3_t, const int)
31839     _Form of expected instruction(s):_ `vst3.8 {D0[0], D1[0], D2[0]},
31840     [R0]'
31841
31842   * void vst3_lane_f32 (float32_t *, float32x2x3_t, const int)
31843     _Form of expected instruction(s):_ `vst3.32 {D0[0], D1[0], D2[0]},
31844     [R0]'
31845
31846   * void vst3_lane_p16 (poly16_t *, poly16x4x3_t, const int)
31847     _Form of expected instruction(s):_ `vst3.16 {D0[0], D1[0], D2[0]},
31848     [R0]'
31849
31850   * void vst3_lane_p8 (poly8_t *, poly8x8x3_t, const int)
31851     _Form of expected instruction(s):_ `vst3.8 {D0[0], D1[0], D2[0]},
31852     [R0]'
31853
31854   * void vst3q_lane_s32 (int32_t *, int32x4x3_t, const int)
31855     _Form of expected instruction(s):_ `vst3.32 {D0[0], D1[0], D2[0]},
31856     [R0]'
31857
31858   * void vst3q_lane_s16 (int16_t *, int16x8x3_t, const int)
31859     _Form of expected instruction(s):_ `vst3.16 {D0[0], D1[0], D2[0]},
31860     [R0]'
31861
31862   * void vst3q_lane_u32 (uint32_t *, uint32x4x3_t, const int)
31863     _Form of expected instruction(s):_ `vst3.32 {D0[0], D1[0], D2[0]},
31864     [R0]'
31865
31866   * void vst3q_lane_u16 (uint16_t *, uint16x8x3_t, const int)
31867     _Form of expected instruction(s):_ `vst3.16 {D0[0], D1[0], D2[0]},
31868     [R0]'
31869
31870   * void vst3q_lane_f32 (float32_t *, float32x4x3_t, const int)
31871     _Form of expected instruction(s):_ `vst3.32 {D0[0], D1[0], D2[0]},
31872     [R0]'
31873
31874   * void vst3q_lane_p16 (poly16_t *, poly16x8x3_t, const int)
31875     _Form of expected instruction(s):_ `vst3.16 {D0[0], D1[0], D2[0]},
31876     [R0]'
31877
318786.54.3.74 Element/structure loads, VLD4 variants
31879................................................
31880
31881   * uint32x2x4_t vld4_u32 (const uint32_t *)
31882     _Form of expected instruction(s):_ `vld4.32 {D0, D1, D2, D3}, [R0]'
31883
31884   * uint16x4x4_t vld4_u16 (const uint16_t *)
31885     _Form of expected instruction(s):_ `vld4.16 {D0, D1, D2, D3}, [R0]'
31886
31887   * uint8x8x4_t vld4_u8 (const uint8_t *)
31888     _Form of expected instruction(s):_ `vld4.8 {D0, D1, D2, D3}, [R0]'
31889
31890   * int32x2x4_t vld4_s32 (const int32_t *)
31891     _Form of expected instruction(s):_ `vld4.32 {D0, D1, D2, D3}, [R0]'
31892
31893   * int16x4x4_t vld4_s16 (const int16_t *)
31894     _Form of expected instruction(s):_ `vld4.16 {D0, D1, D2, D3}, [R0]'
31895
31896   * int8x8x4_t vld4_s8 (const int8_t *)
31897     _Form of expected instruction(s):_ `vld4.8 {D0, D1, D2, D3}, [R0]'
31898
31899   * float32x2x4_t vld4_f32 (const float32_t *)
31900     _Form of expected instruction(s):_ `vld4.32 {D0, D1, D2, D3}, [R0]'
31901
31902   * poly16x4x4_t vld4_p16 (const poly16_t *)
31903     _Form of expected instruction(s):_ `vld4.16 {D0, D1, D2, D3}, [R0]'
31904
31905   * poly8x8x4_t vld4_p8 (const poly8_t *)
31906     _Form of expected instruction(s):_ `vld4.8 {D0, D1, D2, D3}, [R0]'
31907
31908   * uint64x1x4_t vld4_u64 (const uint64_t *)
31909     _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2, D3}, [R0]'
31910
31911   * int64x1x4_t vld4_s64 (const int64_t *)
31912     _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2, D3}, [R0]'
31913
31914   * uint32x4x4_t vld4q_u32 (const uint32_t *)
31915     _Form of expected instruction(s):_ `vld4.32 {D0, D1, D2, D3}, [R0]'
31916
31917   * uint16x8x4_t vld4q_u16 (const uint16_t *)
31918     _Form of expected instruction(s):_ `vld4.16 {D0, D1, D2, D3}, [R0]'
31919
31920   * uint8x16x4_t vld4q_u8 (const uint8_t *)
31921     _Form of expected instruction(s):_ `vld4.8 {D0, D1, D2, D3}, [R0]'
31922
31923   * int32x4x4_t vld4q_s32 (const int32_t *)
31924     _Form of expected instruction(s):_ `vld4.32 {D0, D1, D2, D3}, [R0]'
31925
31926   * int16x8x4_t vld4q_s16 (const int16_t *)
31927     _Form of expected instruction(s):_ `vld4.16 {D0, D1, D2, D3}, [R0]'
31928
31929   * int8x16x4_t vld4q_s8 (const int8_t *)
31930     _Form of expected instruction(s):_ `vld4.8 {D0, D1, D2, D3}, [R0]'
31931
31932   * float32x4x4_t vld4q_f32 (const float32_t *)
31933     _Form of expected instruction(s):_ `vld4.32 {D0, D1, D2, D3}, [R0]'
31934
31935   * poly16x8x4_t vld4q_p16 (const poly16_t *)
31936     _Form of expected instruction(s):_ `vld4.16 {D0, D1, D2, D3}, [R0]'
31937
31938   * poly8x16x4_t vld4q_p8 (const poly8_t *)
31939     _Form of expected instruction(s):_ `vld4.8 {D0, D1, D2, D3}, [R0]'
31940
31941   * uint32x2x4_t vld4_lane_u32 (const uint32_t *, uint32x2x4_t, const
31942     int)
31943     _Form of expected instruction(s):_ `vld4.32 {D0[0], D1[0], D2[0],
31944     D3[0]}, [R0]'
31945
31946   * uint16x4x4_t vld4_lane_u16 (const uint16_t *, uint16x4x4_t, const
31947     int)
31948     _Form of expected instruction(s):_ `vld4.16 {D0[0], D1[0], D2[0],
31949     D3[0]}, [R0]'
31950
31951   * uint8x8x4_t vld4_lane_u8 (const uint8_t *, uint8x8x4_t, const int)
31952     _Form of expected instruction(s):_ `vld4.8 {D0[0], D1[0], D2[0],
31953     D3[0]}, [R0]'
31954
31955   * int32x2x4_t vld4_lane_s32 (const int32_t *, int32x2x4_t, const int)
31956     _Form of expected instruction(s):_ `vld4.32 {D0[0], D1[0], D2[0],
31957     D3[0]}, [R0]'
31958
31959   * int16x4x4_t vld4_lane_s16 (const int16_t *, int16x4x4_t, const int)
31960     _Form of expected instruction(s):_ `vld4.16 {D0[0], D1[0], D2[0],
31961     D3[0]}, [R0]'
31962
31963   * int8x8x4_t vld4_lane_s8 (const int8_t *, int8x8x4_t, const int)
31964     _Form of expected instruction(s):_ `vld4.8 {D0[0], D1[0], D2[0],
31965     D3[0]}, [R0]'
31966
31967   * float32x2x4_t vld4_lane_f32 (const float32_t *, float32x2x4_t,
31968     const int)
31969     _Form of expected instruction(s):_ `vld4.32 {D0[0], D1[0], D2[0],
31970     D3[0]}, [R0]'
31971
31972   * poly16x4x4_t vld4_lane_p16 (const poly16_t *, poly16x4x4_t, const
31973     int)
31974     _Form of expected instruction(s):_ `vld4.16 {D0[0], D1[0], D2[0],
31975     D3[0]}, [R0]'
31976
31977   * poly8x8x4_t vld4_lane_p8 (const poly8_t *, poly8x8x4_t, const int)
31978     _Form of expected instruction(s):_ `vld4.8 {D0[0], D1[0], D2[0],
31979     D3[0]}, [R0]'
31980
31981   * int32x4x4_t vld4q_lane_s32 (const int32_t *, int32x4x4_t, const
31982     int)
31983     _Form of expected instruction(s):_ `vld4.32 {D0[0], D1[0], D2[0],
31984     D3[0]}, [R0]'
31985
31986   * int16x8x4_t vld4q_lane_s16 (const int16_t *, int16x8x4_t, const
31987     int)
31988     _Form of expected instruction(s):_ `vld4.16 {D0[0], D1[0], D2[0],
31989     D3[0]}, [R0]'
31990
31991   * uint32x4x4_t vld4q_lane_u32 (const uint32_t *, uint32x4x4_t, const
31992     int)
31993     _Form of expected instruction(s):_ `vld4.32 {D0[0], D1[0], D2[0],
31994     D3[0]}, [R0]'
31995
31996   * uint16x8x4_t vld4q_lane_u16 (const uint16_t *, uint16x8x4_t, const
31997     int)
31998     _Form of expected instruction(s):_ `vld4.16 {D0[0], D1[0], D2[0],
31999     D3[0]}, [R0]'
32000
32001   * float32x4x4_t vld4q_lane_f32 (const float32_t *, float32x4x4_t,
32002     const int)
32003     _Form of expected instruction(s):_ `vld4.32 {D0[0], D1[0], D2[0],
32004     D3[0]}, [R0]'
32005
32006   * poly16x8x4_t vld4q_lane_p16 (const poly16_t *, poly16x8x4_t, const
32007     int)
32008     _Form of expected instruction(s):_ `vld4.16 {D0[0], D1[0], D2[0],
32009     D3[0]}, [R0]'
32010
32011   * uint32x2x4_t vld4_dup_u32 (const uint32_t *)
32012     _Form of expected instruction(s):_ `vld4.32 {D0[], D1[], D2[],
32013     D3[]}, [R0]'
32014
32015   * uint16x4x4_t vld4_dup_u16 (const uint16_t *)
32016     _Form of expected instruction(s):_ `vld4.16 {D0[], D1[], D2[],
32017     D3[]}, [R0]'
32018
32019   * uint8x8x4_t vld4_dup_u8 (const uint8_t *)
32020     _Form of expected instruction(s):_ `vld4.8 {D0[], D1[], D2[],
32021     D3[]}, [R0]'
32022
32023   * int32x2x4_t vld4_dup_s32 (const int32_t *)
32024     _Form of expected instruction(s):_ `vld4.32 {D0[], D1[], D2[],
32025     D3[]}, [R0]'
32026
32027   * int16x4x4_t vld4_dup_s16 (const int16_t *)
32028     _Form of expected instruction(s):_ `vld4.16 {D0[], D1[], D2[],
32029     D3[]}, [R0]'
32030
32031   * int8x8x4_t vld4_dup_s8 (const int8_t *)
32032     _Form of expected instruction(s):_ `vld4.8 {D0[], D1[], D2[],
32033     D3[]}, [R0]'
32034
32035   * float32x2x4_t vld4_dup_f32 (const float32_t *)
32036     _Form of expected instruction(s):_ `vld4.32 {D0[], D1[], D2[],
32037     D3[]}, [R0]'
32038
32039   * poly16x4x4_t vld4_dup_p16 (const poly16_t *)
32040     _Form of expected instruction(s):_ `vld4.16 {D0[], D1[], D2[],
32041     D3[]}, [R0]'
32042
32043   * poly8x8x4_t vld4_dup_p8 (const poly8_t *)
32044     _Form of expected instruction(s):_ `vld4.8 {D0[], D1[], D2[],
32045     D3[]}, [R0]'
32046
32047   * uint64x1x4_t vld4_dup_u64 (const uint64_t *)
32048     _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2, D3}, [R0]'
32049
32050   * int64x1x4_t vld4_dup_s64 (const int64_t *)
32051     _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2, D3}, [R0]'
32052
320536.54.3.75 Element/structure stores, VST4 variants
32054.................................................
32055
32056   * void vst4_u32 (uint32_t *, uint32x2x4_t)
32057     _Form of expected instruction(s):_ `vst4.32 {D0, D1, D2, D3}, [R0]'
32058
32059   * void vst4_u16 (uint16_t *, uint16x4x4_t)
32060     _Form of expected instruction(s):_ `vst4.16 {D0, D1, D2, D3}, [R0]'
32061
32062   * void vst4_u8 (uint8_t *, uint8x8x4_t)
32063     _Form of expected instruction(s):_ `vst4.8 {D0, D1, D2, D3}, [R0]'
32064
32065   * void vst4_s32 (int32_t *, int32x2x4_t)
32066     _Form of expected instruction(s):_ `vst4.32 {D0, D1, D2, D3}, [R0]'
32067
32068   * void vst4_s16 (int16_t *, int16x4x4_t)
32069     _Form of expected instruction(s):_ `vst4.16 {D0, D1, D2, D3}, [R0]'
32070
32071   * void vst4_s8 (int8_t *, int8x8x4_t)
32072     _Form of expected instruction(s):_ `vst4.8 {D0, D1, D2, D3}, [R0]'
32073
32074   * void vst4_f32 (float32_t *, float32x2x4_t)
32075     _Form of expected instruction(s):_ `vst4.32 {D0, D1, D2, D3}, [R0]'
32076
32077   * void vst4_p16 (poly16_t *, poly16x4x4_t)
32078     _Form of expected instruction(s):_ `vst4.16 {D0, D1, D2, D3}, [R0]'
32079
32080   * void vst4_p8 (poly8_t *, poly8x8x4_t)
32081     _Form of expected instruction(s):_ `vst4.8 {D0, D1, D2, D3}, [R0]'
32082
32083   * void vst4_u64 (uint64_t *, uint64x1x4_t)
32084     _Form of expected instruction(s):_ `vst1.64 {D0, D1, D2, D3}, [R0]'
32085
32086   * void vst4_s64 (int64_t *, int64x1x4_t)
32087     _Form of expected instruction(s):_ `vst1.64 {D0, D1, D2, D3}, [R0]'
32088
32089   * void vst4q_u32 (uint32_t *, uint32x4x4_t)
32090     _Form of expected instruction(s):_ `vst4.32 {D0, D1, D2, D3}, [R0]'
32091
32092   * void vst4q_u16 (uint16_t *, uint16x8x4_t)
32093     _Form of expected instruction(s):_ `vst4.16 {D0, D1, D2, D3}, [R0]'
32094
32095   * void vst4q_u8 (uint8_t *, uint8x16x4_t)
32096     _Form of expected instruction(s):_ `vst4.8 {D0, D1, D2, D3}, [R0]'
32097
32098   * void vst4q_s32 (int32_t *, int32x4x4_t)
32099     _Form of expected instruction(s):_ `vst4.32 {D0, D1, D2, D3}, [R0]'
32100
32101   * void vst4q_s16 (int16_t *, int16x8x4_t)
32102     _Form of expected instruction(s):_ `vst4.16 {D0, D1, D2, D3}, [R0]'
32103
32104   * void vst4q_s8 (int8_t *, int8x16x4_t)
32105     _Form of expected instruction(s):_ `vst4.8 {D0, D1, D2, D3}, [R0]'
32106
32107   * void vst4q_f32 (float32_t *, float32x4x4_t)
32108     _Form of expected instruction(s):_ `vst4.32 {D0, D1, D2, D3}, [R0]'
32109
32110   * void vst4q_p16 (poly16_t *, poly16x8x4_t)
32111     _Form of expected instruction(s):_ `vst4.16 {D0, D1, D2, D3}, [R0]'
32112
32113   * void vst4q_p8 (poly8_t *, poly8x16x4_t)
32114     _Form of expected instruction(s):_ `vst4.8 {D0, D1, D2, D3}, [R0]'
32115
32116   * void vst4_lane_u32 (uint32_t *, uint32x2x4_t, const int)
32117     _Form of expected instruction(s):_ `vst4.32 {D0[0], D1[0], D2[0],
32118     D3[0]}, [R0]'
32119
32120   * void vst4_lane_u16 (uint16_t *, uint16x4x4_t, const int)
32121     _Form of expected instruction(s):_ `vst4.16 {D0[0], D1[0], D2[0],
32122     D3[0]}, [R0]'
32123
32124   * void vst4_lane_u8 (uint8_t *, uint8x8x4_t, const int)
32125     _Form of expected instruction(s):_ `vst4.8 {D0[0], D1[0], D2[0],
32126     D3[0]}, [R0]'
32127
32128   * void vst4_lane_s32 (int32_t *, int32x2x4_t, const int)
32129     _Form of expected instruction(s):_ `vst4.32 {D0[0], D1[0], D2[0],
32130     D3[0]}, [R0]'
32131
32132   * void vst4_lane_s16 (int16_t *, int16x4x4_t, const int)
32133     _Form of expected instruction(s):_ `vst4.16 {D0[0], D1[0], D2[0],
32134     D3[0]}, [R0]'
32135
32136   * void vst4_lane_s8 (int8_t *, int8x8x4_t, const int)
32137     _Form of expected instruction(s):_ `vst4.8 {D0[0], D1[0], D2[0],
32138     D3[0]}, [R0]'
32139
32140   * void vst4_lane_f32 (float32_t *, float32x2x4_t, const int)
32141     _Form of expected instruction(s):_ `vst4.32 {D0[0], D1[0], D2[0],
32142     D3[0]}, [R0]'
32143
32144   * void vst4_lane_p16 (poly16_t *, poly16x4x4_t, const int)
32145     _Form of expected instruction(s):_ `vst4.16 {D0[0], D1[0], D2[0],
32146     D3[0]}, [R0]'
32147
32148   * void vst4_lane_p8 (poly8_t *, poly8x8x4_t, const int)
32149     _Form of expected instruction(s):_ `vst4.8 {D0[0], D1[0], D2[0],
32150     D3[0]}, [R0]'
32151
32152   * void vst4q_lane_s32 (int32_t *, int32x4x4_t, const int)
32153     _Form of expected instruction(s):_ `vst4.32 {D0[0], D1[0], D2[0],
32154     D3[0]}, [R0]'
32155
32156   * void vst4q_lane_s16 (int16_t *, int16x8x4_t, const int)
32157     _Form of expected instruction(s):_ `vst4.16 {D0[0], D1[0], D2[0],
32158     D3[0]}, [R0]'
32159
32160   * void vst4q_lane_u32 (uint32_t *, uint32x4x4_t, const int)
32161     _Form of expected instruction(s):_ `vst4.32 {D0[0], D1[0], D2[0],
32162     D3[0]}, [R0]'
32163
32164   * void vst4q_lane_u16 (uint16_t *, uint16x8x4_t, const int)
32165     _Form of expected instruction(s):_ `vst4.16 {D0[0], D1[0], D2[0],
32166     D3[0]}, [R0]'
32167
32168   * void vst4q_lane_f32 (float32_t *, float32x4x4_t, const int)
32169     _Form of expected instruction(s):_ `vst4.32 {D0[0], D1[0], D2[0],
32170     D3[0]}, [R0]'
32171
32172   * void vst4q_lane_p16 (poly16_t *, poly16x8x4_t, const int)
32173     _Form of expected instruction(s):_ `vst4.16 {D0[0], D1[0], D2[0],
32174     D3[0]}, [R0]'
32175
321766.54.3.76 Logical operations (AND)
32177..................................
32178
32179   * uint32x2_t vand_u32 (uint32x2_t, uint32x2_t)
32180     _Form of expected instruction(s):_ `vand D0, D0, D0'
32181
32182   * uint16x4_t vand_u16 (uint16x4_t, uint16x4_t)
32183     _Form of expected instruction(s):_ `vand D0, D0, D0'
32184
32185   * uint8x8_t vand_u8 (uint8x8_t, uint8x8_t)
32186     _Form of expected instruction(s):_ `vand D0, D0, D0'
32187
32188   * int32x2_t vand_s32 (int32x2_t, int32x2_t)
32189     _Form of expected instruction(s):_ `vand D0, D0, D0'
32190
32191   * int16x4_t vand_s16 (int16x4_t, int16x4_t)
32192     _Form of expected instruction(s):_ `vand D0, D0, D0'
32193
32194   * int8x8_t vand_s8 (int8x8_t, int8x8_t)
32195     _Form of expected instruction(s):_ `vand D0, D0, D0'
32196
32197   * uint64x1_t vand_u64 (uint64x1_t, uint64x1_t)
32198
32199   * int64x1_t vand_s64 (int64x1_t, int64x1_t)
32200
32201   * uint32x4_t vandq_u32 (uint32x4_t, uint32x4_t)
32202     _Form of expected instruction(s):_ `vand Q0, Q0, Q0'
32203
32204   * uint16x8_t vandq_u16 (uint16x8_t, uint16x8_t)
32205     _Form of expected instruction(s):_ `vand Q0, Q0, Q0'
32206
32207   * uint8x16_t vandq_u8 (uint8x16_t, uint8x16_t)
32208     _Form of expected instruction(s):_ `vand Q0, Q0, Q0'
32209
32210   * int32x4_t vandq_s32 (int32x4_t, int32x4_t)
32211     _Form of expected instruction(s):_ `vand Q0, Q0, Q0'
32212
32213   * int16x8_t vandq_s16 (int16x8_t, int16x8_t)
32214     _Form of expected instruction(s):_ `vand Q0, Q0, Q0'
32215
32216   * int8x16_t vandq_s8 (int8x16_t, int8x16_t)
32217     _Form of expected instruction(s):_ `vand Q0, Q0, Q0'
32218
32219   * uint64x2_t vandq_u64 (uint64x2_t, uint64x2_t)
32220     _Form of expected instruction(s):_ `vand Q0, Q0, Q0'
32221
32222   * int64x2_t vandq_s64 (int64x2_t, int64x2_t)
32223     _Form of expected instruction(s):_ `vand Q0, Q0, Q0'
32224
322256.54.3.77 Logical operations (OR)
32226.................................
32227
32228   * uint32x2_t vorr_u32 (uint32x2_t, uint32x2_t)
32229     _Form of expected instruction(s):_ `vorr D0, D0, D0'
32230
32231   * uint16x4_t vorr_u16 (uint16x4_t, uint16x4_t)
32232     _Form of expected instruction(s):_ `vorr D0, D0, D0'
32233
32234   * uint8x8_t vorr_u8 (uint8x8_t, uint8x8_t)
32235     _Form of expected instruction(s):_ `vorr D0, D0, D0'
32236
32237   * int32x2_t vorr_s32 (int32x2_t, int32x2_t)
32238     _Form of expected instruction(s):_ `vorr D0, D0, D0'
32239
32240   * int16x4_t vorr_s16 (int16x4_t, int16x4_t)
32241     _Form of expected instruction(s):_ `vorr D0, D0, D0'
32242
32243   * int8x8_t vorr_s8 (int8x8_t, int8x8_t)
32244     _Form of expected instruction(s):_ `vorr D0, D0, D0'
32245
32246   * uint64x1_t vorr_u64 (uint64x1_t, uint64x1_t)
32247
32248   * int64x1_t vorr_s64 (int64x1_t, int64x1_t)
32249
32250   * uint32x4_t vorrq_u32 (uint32x4_t, uint32x4_t)
32251     _Form of expected instruction(s):_ `vorr Q0, Q0, Q0'
32252
32253   * uint16x8_t vorrq_u16 (uint16x8_t, uint16x8_t)
32254     _Form of expected instruction(s):_ `vorr Q0, Q0, Q0'
32255
32256   * uint8x16_t vorrq_u8 (uint8x16_t, uint8x16_t)
32257     _Form of expected instruction(s):_ `vorr Q0, Q0, Q0'
32258
32259   * int32x4_t vorrq_s32 (int32x4_t, int32x4_t)
32260     _Form of expected instruction(s):_ `vorr Q0, Q0, Q0'
32261
32262   * int16x8_t vorrq_s16 (int16x8_t, int16x8_t)
32263     _Form of expected instruction(s):_ `vorr Q0, Q0, Q0'
32264
32265   * int8x16_t vorrq_s8 (int8x16_t, int8x16_t)
32266     _Form of expected instruction(s):_ `vorr Q0, Q0, Q0'
32267
32268   * uint64x2_t vorrq_u64 (uint64x2_t, uint64x2_t)
32269     _Form of expected instruction(s):_ `vorr Q0, Q0, Q0'
32270
32271   * int64x2_t vorrq_s64 (int64x2_t, int64x2_t)
32272     _Form of expected instruction(s):_ `vorr Q0, Q0, Q0'
32273
322746.54.3.78 Logical operations (exclusive OR)
32275...........................................
32276
32277   * uint32x2_t veor_u32 (uint32x2_t, uint32x2_t)
32278     _Form of expected instruction(s):_ `veor D0, D0, D0'
32279
32280   * uint16x4_t veor_u16 (uint16x4_t, uint16x4_t)
32281     _Form of expected instruction(s):_ `veor D0, D0, D0'
32282
32283   * uint8x8_t veor_u8 (uint8x8_t, uint8x8_t)
32284     _Form of expected instruction(s):_ `veor D0, D0, D0'
32285
32286   * int32x2_t veor_s32 (int32x2_t, int32x2_t)
32287     _Form of expected instruction(s):_ `veor D0, D0, D0'
32288
32289   * int16x4_t veor_s16 (int16x4_t, int16x4_t)
32290     _Form of expected instruction(s):_ `veor D0, D0, D0'
32291
32292   * int8x8_t veor_s8 (int8x8_t, int8x8_t)
32293     _Form of expected instruction(s):_ `veor D0, D0, D0'
32294
32295   * uint64x1_t veor_u64 (uint64x1_t, uint64x1_t)
32296
32297   * int64x1_t veor_s64 (int64x1_t, int64x1_t)
32298
32299   * uint32x4_t veorq_u32 (uint32x4_t, uint32x4_t)
32300     _Form of expected instruction(s):_ `veor Q0, Q0, Q0'
32301
32302   * uint16x8_t veorq_u16 (uint16x8_t, uint16x8_t)
32303     _Form of expected instruction(s):_ `veor Q0, Q0, Q0'
32304
32305   * uint8x16_t veorq_u8 (uint8x16_t, uint8x16_t)
32306     _Form of expected instruction(s):_ `veor Q0, Q0, Q0'
32307
32308   * int32x4_t veorq_s32 (int32x4_t, int32x4_t)
32309     _Form of expected instruction(s):_ `veor Q0, Q0, Q0'
32310
32311   * int16x8_t veorq_s16 (int16x8_t, int16x8_t)
32312     _Form of expected instruction(s):_ `veor Q0, Q0, Q0'
32313
32314   * int8x16_t veorq_s8 (int8x16_t, int8x16_t)
32315     _Form of expected instruction(s):_ `veor Q0, Q0, Q0'
32316
32317   * uint64x2_t veorq_u64 (uint64x2_t, uint64x2_t)
32318     _Form of expected instruction(s):_ `veor Q0, Q0, Q0'
32319
32320   * int64x2_t veorq_s64 (int64x2_t, int64x2_t)
32321     _Form of expected instruction(s):_ `veor Q0, Q0, Q0'
32322
323236.54.3.79 Logical operations (AND-NOT)
32324......................................
32325
32326   * uint32x2_t vbic_u32 (uint32x2_t, uint32x2_t)
32327     _Form of expected instruction(s):_ `vbic D0, D0, D0'
32328
32329   * uint16x4_t vbic_u16 (uint16x4_t, uint16x4_t)
32330     _Form of expected instruction(s):_ `vbic D0, D0, D0'
32331
32332   * uint8x8_t vbic_u8 (uint8x8_t, uint8x8_t)
32333     _Form of expected instruction(s):_ `vbic D0, D0, D0'
32334
32335   * int32x2_t vbic_s32 (int32x2_t, int32x2_t)
32336     _Form of expected instruction(s):_ `vbic D0, D0, D0'
32337
32338   * int16x4_t vbic_s16 (int16x4_t, int16x4_t)
32339     _Form of expected instruction(s):_ `vbic D0, D0, D0'
32340
32341   * int8x8_t vbic_s8 (int8x8_t, int8x8_t)
32342     _Form of expected instruction(s):_ `vbic D0, D0, D0'
32343
32344   * uint64x1_t vbic_u64 (uint64x1_t, uint64x1_t)
32345
32346   * int64x1_t vbic_s64 (int64x1_t, int64x1_t)
32347
32348   * uint32x4_t vbicq_u32 (uint32x4_t, uint32x4_t)
32349     _Form of expected instruction(s):_ `vbic Q0, Q0, Q0'
32350
32351   * uint16x8_t vbicq_u16 (uint16x8_t, uint16x8_t)
32352     _Form of expected instruction(s):_ `vbic Q0, Q0, Q0'
32353
32354   * uint8x16_t vbicq_u8 (uint8x16_t, uint8x16_t)
32355     _Form of expected instruction(s):_ `vbic Q0, Q0, Q0'
32356
32357   * int32x4_t vbicq_s32 (int32x4_t, int32x4_t)
32358     _Form of expected instruction(s):_ `vbic Q0, Q0, Q0'
32359
32360   * int16x8_t vbicq_s16 (int16x8_t, int16x8_t)
32361     _Form of expected instruction(s):_ `vbic Q0, Q0, Q0'
32362
32363   * int8x16_t vbicq_s8 (int8x16_t, int8x16_t)
32364     _Form of expected instruction(s):_ `vbic Q0, Q0, Q0'
32365
32366   * uint64x2_t vbicq_u64 (uint64x2_t, uint64x2_t)
32367     _Form of expected instruction(s):_ `vbic Q0, Q0, Q0'
32368
32369   * int64x2_t vbicq_s64 (int64x2_t, int64x2_t)
32370     _Form of expected instruction(s):_ `vbic Q0, Q0, Q0'
32371
323726.54.3.80 Logical operations (OR-NOT)
32373.....................................
32374
32375   * uint32x2_t vorn_u32 (uint32x2_t, uint32x2_t)
32376     _Form of expected instruction(s):_ `vorn D0, D0, D0'
32377
32378   * uint16x4_t vorn_u16 (uint16x4_t, uint16x4_t)
32379     _Form of expected instruction(s):_ `vorn D0, D0, D0'
32380
32381   * uint8x8_t vorn_u8 (uint8x8_t, uint8x8_t)
32382     _Form of expected instruction(s):_ `vorn D0, D0, D0'
32383
32384   * int32x2_t vorn_s32 (int32x2_t, int32x2_t)
32385     _Form of expected instruction(s):_ `vorn D0, D0, D0'
32386
32387   * int16x4_t vorn_s16 (int16x4_t, int16x4_t)
32388     _Form of expected instruction(s):_ `vorn D0, D0, D0'
32389
32390   * int8x8_t vorn_s8 (int8x8_t, int8x8_t)
32391     _Form of expected instruction(s):_ `vorn D0, D0, D0'
32392
32393   * uint64x1_t vorn_u64 (uint64x1_t, uint64x1_t)
32394
32395   * int64x1_t vorn_s64 (int64x1_t, int64x1_t)
32396
32397   * uint32x4_t vornq_u32 (uint32x4_t, uint32x4_t)
32398     _Form of expected instruction(s):_ `vorn Q0, Q0, Q0'
32399
32400   * uint16x8_t vornq_u16 (uint16x8_t, uint16x8_t)
32401     _Form of expected instruction(s):_ `vorn Q0, Q0, Q0'
32402
32403   * uint8x16_t vornq_u8 (uint8x16_t, uint8x16_t)
32404     _Form of expected instruction(s):_ `vorn Q0, Q0, Q0'
32405
32406   * int32x4_t vornq_s32 (int32x4_t, int32x4_t)
32407     _Form of expected instruction(s):_ `vorn Q0, Q0, Q0'
32408
32409   * int16x8_t vornq_s16 (int16x8_t, int16x8_t)
32410     _Form of expected instruction(s):_ `vorn Q0, Q0, Q0'
32411
32412   * int8x16_t vornq_s8 (int8x16_t, int8x16_t)
32413     _Form of expected instruction(s):_ `vorn Q0, Q0, Q0'
32414
32415   * uint64x2_t vornq_u64 (uint64x2_t, uint64x2_t)
32416     _Form of expected instruction(s):_ `vorn Q0, Q0, Q0'
32417
32418   * int64x2_t vornq_s64 (int64x2_t, int64x2_t)
32419     _Form of expected instruction(s):_ `vorn Q0, Q0, Q0'
32420
324216.54.3.81 Reinterpret casts
32422...........................
32423
32424   * poly8x8_t vreinterpret_p8_u32 (uint32x2_t)
32425
32426   * poly8x8_t vreinterpret_p8_u16 (uint16x4_t)
32427
32428   * poly8x8_t vreinterpret_p8_u8 (uint8x8_t)
32429
32430   * poly8x8_t vreinterpret_p8_s32 (int32x2_t)
32431
32432   * poly8x8_t vreinterpret_p8_s16 (int16x4_t)
32433
32434   * poly8x8_t vreinterpret_p8_s8 (int8x8_t)
32435
32436   * poly8x8_t vreinterpret_p8_u64 (uint64x1_t)
32437
32438   * poly8x8_t vreinterpret_p8_s64 (int64x1_t)
32439
32440   * poly8x8_t vreinterpret_p8_f32 (float32x2_t)
32441
32442   * poly8x8_t vreinterpret_p8_p16 (poly16x4_t)
32443
32444   * poly8x16_t vreinterpretq_p8_u32 (uint32x4_t)
32445
32446   * poly8x16_t vreinterpretq_p8_u16 (uint16x8_t)
32447
32448   * poly8x16_t vreinterpretq_p8_u8 (uint8x16_t)
32449
32450   * poly8x16_t vreinterpretq_p8_s32 (int32x4_t)
32451
32452   * poly8x16_t vreinterpretq_p8_s16 (int16x8_t)
32453
32454   * poly8x16_t vreinterpretq_p8_s8 (int8x16_t)
32455
32456   * poly8x16_t vreinterpretq_p8_u64 (uint64x2_t)
32457
32458   * poly8x16_t vreinterpretq_p8_s64 (int64x2_t)
32459
32460   * poly8x16_t vreinterpretq_p8_f32 (float32x4_t)
32461
32462   * poly8x16_t vreinterpretq_p8_p16 (poly16x8_t)
32463
32464   * poly16x4_t vreinterpret_p16_u32 (uint32x2_t)
32465
32466   * poly16x4_t vreinterpret_p16_u16 (uint16x4_t)
32467
32468   * poly16x4_t vreinterpret_p16_u8 (uint8x8_t)
32469
32470   * poly16x4_t vreinterpret_p16_s32 (int32x2_t)
32471
32472   * poly16x4_t vreinterpret_p16_s16 (int16x4_t)
32473
32474   * poly16x4_t vreinterpret_p16_s8 (int8x8_t)
32475
32476   * poly16x4_t vreinterpret_p16_u64 (uint64x1_t)
32477
32478   * poly16x4_t vreinterpret_p16_s64 (int64x1_t)
32479
32480   * poly16x4_t vreinterpret_p16_f32 (float32x2_t)
32481
32482   * poly16x4_t vreinterpret_p16_p8 (poly8x8_t)
32483
32484   * poly16x8_t vreinterpretq_p16_u32 (uint32x4_t)
32485
32486   * poly16x8_t vreinterpretq_p16_u16 (uint16x8_t)
32487
32488   * poly16x8_t vreinterpretq_p16_u8 (uint8x16_t)
32489
32490   * poly16x8_t vreinterpretq_p16_s32 (int32x4_t)
32491
32492   * poly16x8_t vreinterpretq_p16_s16 (int16x8_t)
32493
32494   * poly16x8_t vreinterpretq_p16_s8 (int8x16_t)
32495
32496   * poly16x8_t vreinterpretq_p16_u64 (uint64x2_t)
32497
32498   * poly16x8_t vreinterpretq_p16_s64 (int64x2_t)
32499
32500   * poly16x8_t vreinterpretq_p16_f32 (float32x4_t)
32501
32502   * poly16x8_t vreinterpretq_p16_p8 (poly8x16_t)
32503
32504   * float32x2_t vreinterpret_f32_u32 (uint32x2_t)
32505
32506   * float32x2_t vreinterpret_f32_u16 (uint16x4_t)
32507
32508   * float32x2_t vreinterpret_f32_u8 (uint8x8_t)
32509
32510   * float32x2_t vreinterpret_f32_s32 (int32x2_t)
32511
32512   * float32x2_t vreinterpret_f32_s16 (int16x4_t)
32513
32514   * float32x2_t vreinterpret_f32_s8 (int8x8_t)
32515
32516   * float32x2_t vreinterpret_f32_u64 (uint64x1_t)
32517
32518   * float32x2_t vreinterpret_f32_s64 (int64x1_t)
32519
32520   * float32x2_t vreinterpret_f32_p16 (poly16x4_t)
32521
32522   * float32x2_t vreinterpret_f32_p8 (poly8x8_t)
32523
32524   * float32x4_t vreinterpretq_f32_u32 (uint32x4_t)
32525
32526   * float32x4_t vreinterpretq_f32_u16 (uint16x8_t)
32527
32528   * float32x4_t vreinterpretq_f32_u8 (uint8x16_t)
32529
32530   * float32x4_t vreinterpretq_f32_s32 (int32x4_t)
32531
32532   * float32x4_t vreinterpretq_f32_s16 (int16x8_t)
32533
32534   * float32x4_t vreinterpretq_f32_s8 (int8x16_t)
32535
32536   * float32x4_t vreinterpretq_f32_u64 (uint64x2_t)
32537
32538   * float32x4_t vreinterpretq_f32_s64 (int64x2_t)
32539
32540   * float32x4_t vreinterpretq_f32_p16 (poly16x8_t)
32541
32542   * float32x4_t vreinterpretq_f32_p8 (poly8x16_t)
32543
32544   * int64x1_t vreinterpret_s64_u32 (uint32x2_t)
32545
32546   * int64x1_t vreinterpret_s64_u16 (uint16x4_t)
32547
32548   * int64x1_t vreinterpret_s64_u8 (uint8x8_t)
32549
32550   * int64x1_t vreinterpret_s64_s32 (int32x2_t)
32551
32552   * int64x1_t vreinterpret_s64_s16 (int16x4_t)
32553
32554   * int64x1_t vreinterpret_s64_s8 (int8x8_t)
32555
32556   * int64x1_t vreinterpret_s64_u64 (uint64x1_t)
32557
32558   * int64x1_t vreinterpret_s64_f32 (float32x2_t)
32559
32560   * int64x1_t vreinterpret_s64_p16 (poly16x4_t)
32561
32562   * int64x1_t vreinterpret_s64_p8 (poly8x8_t)
32563
32564   * int64x2_t vreinterpretq_s64_u32 (uint32x4_t)
32565
32566   * int64x2_t vreinterpretq_s64_u16 (uint16x8_t)
32567
32568   * int64x2_t vreinterpretq_s64_u8 (uint8x16_t)
32569
32570   * int64x2_t vreinterpretq_s64_s32 (int32x4_t)
32571
32572   * int64x2_t vreinterpretq_s64_s16 (int16x8_t)
32573
32574   * int64x2_t vreinterpretq_s64_s8 (int8x16_t)
32575
32576   * int64x2_t vreinterpretq_s64_u64 (uint64x2_t)
32577
32578   * int64x2_t vreinterpretq_s64_f32 (float32x4_t)
32579
32580   * int64x2_t vreinterpretq_s64_p16 (poly16x8_t)
32581
32582   * int64x2_t vreinterpretq_s64_p8 (poly8x16_t)
32583
32584   * uint64x1_t vreinterpret_u64_u32 (uint32x2_t)
32585
32586   * uint64x1_t vreinterpret_u64_u16 (uint16x4_t)
32587
32588   * uint64x1_t vreinterpret_u64_u8 (uint8x8_t)
32589
32590   * uint64x1_t vreinterpret_u64_s32 (int32x2_t)
32591
32592   * uint64x1_t vreinterpret_u64_s16 (int16x4_t)
32593
32594   * uint64x1_t vreinterpret_u64_s8 (int8x8_t)
32595
32596   * uint64x1_t vreinterpret_u64_s64 (int64x1_t)
32597
32598   * uint64x1_t vreinterpret_u64_f32 (float32x2_t)
32599
32600   * uint64x1_t vreinterpret_u64_p16 (poly16x4_t)
32601
32602   * uint64x1_t vreinterpret_u64_p8 (poly8x8_t)
32603
32604   * uint64x2_t vreinterpretq_u64_u32 (uint32x4_t)
32605
32606   * uint64x2_t vreinterpretq_u64_u16 (uint16x8_t)
32607
32608   * uint64x2_t vreinterpretq_u64_u8 (uint8x16_t)
32609
32610   * uint64x2_t vreinterpretq_u64_s32 (int32x4_t)
32611
32612   * uint64x2_t vreinterpretq_u64_s16 (int16x8_t)
32613
32614   * uint64x2_t vreinterpretq_u64_s8 (int8x16_t)
32615
32616   * uint64x2_t vreinterpretq_u64_s64 (int64x2_t)
32617
32618   * uint64x2_t vreinterpretq_u64_f32 (float32x4_t)
32619
32620   * uint64x2_t vreinterpretq_u64_p16 (poly16x8_t)
32621
32622   * uint64x2_t vreinterpretq_u64_p8 (poly8x16_t)
32623
32624   * int8x8_t vreinterpret_s8_u32 (uint32x2_t)
32625
32626   * int8x8_t vreinterpret_s8_u16 (uint16x4_t)
32627
32628   * int8x8_t vreinterpret_s8_u8 (uint8x8_t)
32629
32630   * int8x8_t vreinterpret_s8_s32 (int32x2_t)
32631
32632   * int8x8_t vreinterpret_s8_s16 (int16x4_t)
32633
32634   * int8x8_t vreinterpret_s8_u64 (uint64x1_t)
32635
32636   * int8x8_t vreinterpret_s8_s64 (int64x1_t)
32637
32638   * int8x8_t vreinterpret_s8_f32 (float32x2_t)
32639
32640   * int8x8_t vreinterpret_s8_p16 (poly16x4_t)
32641
32642   * int8x8_t vreinterpret_s8_p8 (poly8x8_t)
32643
32644   * int8x16_t vreinterpretq_s8_u32 (uint32x4_t)
32645
32646   * int8x16_t vreinterpretq_s8_u16 (uint16x8_t)
32647
32648   * int8x16_t vreinterpretq_s8_u8 (uint8x16_t)
32649
32650   * int8x16_t vreinterpretq_s8_s32 (int32x4_t)
32651
32652   * int8x16_t vreinterpretq_s8_s16 (int16x8_t)
32653
32654   * int8x16_t vreinterpretq_s8_u64 (uint64x2_t)
32655
32656   * int8x16_t vreinterpretq_s8_s64 (int64x2_t)
32657
32658   * int8x16_t vreinterpretq_s8_f32 (float32x4_t)
32659
32660   * int8x16_t vreinterpretq_s8_p16 (poly16x8_t)
32661
32662   * int8x16_t vreinterpretq_s8_p8 (poly8x16_t)
32663
32664   * int16x4_t vreinterpret_s16_u32 (uint32x2_t)
32665
32666   * int16x4_t vreinterpret_s16_u16 (uint16x4_t)
32667
32668   * int16x4_t vreinterpret_s16_u8 (uint8x8_t)
32669
32670   * int16x4_t vreinterpret_s16_s32 (int32x2_t)
32671
32672   * int16x4_t vreinterpret_s16_s8 (int8x8_t)
32673
32674   * int16x4_t vreinterpret_s16_u64 (uint64x1_t)
32675
32676   * int16x4_t vreinterpret_s16_s64 (int64x1_t)
32677
32678   * int16x4_t vreinterpret_s16_f32 (float32x2_t)
32679
32680   * int16x4_t vreinterpret_s16_p16 (poly16x4_t)
32681
32682   * int16x4_t vreinterpret_s16_p8 (poly8x8_t)
32683
32684   * int16x8_t vreinterpretq_s16_u32 (uint32x4_t)
32685
32686   * int16x8_t vreinterpretq_s16_u16 (uint16x8_t)
32687
32688   * int16x8_t vreinterpretq_s16_u8 (uint8x16_t)
32689
32690   * int16x8_t vreinterpretq_s16_s32 (int32x4_t)
32691
32692   * int16x8_t vreinterpretq_s16_s8 (int8x16_t)
32693
32694   * int16x8_t vreinterpretq_s16_u64 (uint64x2_t)
32695
32696   * int16x8_t vreinterpretq_s16_s64 (int64x2_t)
32697
32698   * int16x8_t vreinterpretq_s16_f32 (float32x4_t)
32699
32700   * int16x8_t vreinterpretq_s16_p16 (poly16x8_t)
32701
32702   * int16x8_t vreinterpretq_s16_p8 (poly8x16_t)
32703
32704   * int32x2_t vreinterpret_s32_u32 (uint32x2_t)
32705
32706   * int32x2_t vreinterpret_s32_u16 (uint16x4_t)
32707
32708   * int32x2_t vreinterpret_s32_u8 (uint8x8_t)
32709
32710   * int32x2_t vreinterpret_s32_s16 (int16x4_t)
32711
32712   * int32x2_t vreinterpret_s32_s8 (int8x8_t)
32713
32714   * int32x2_t vreinterpret_s32_u64 (uint64x1_t)
32715
32716   * int32x2_t vreinterpret_s32_s64 (int64x1_t)
32717
32718   * int32x2_t vreinterpret_s32_f32 (float32x2_t)
32719
32720   * int32x2_t vreinterpret_s32_p16 (poly16x4_t)
32721
32722   * int32x2_t vreinterpret_s32_p8 (poly8x8_t)
32723
32724   * int32x4_t vreinterpretq_s32_u32 (uint32x4_t)
32725
32726   * int32x4_t vreinterpretq_s32_u16 (uint16x8_t)
32727
32728   * int32x4_t vreinterpretq_s32_u8 (uint8x16_t)
32729
32730   * int32x4_t vreinterpretq_s32_s16 (int16x8_t)
32731
32732   * int32x4_t vreinterpretq_s32_s8 (int8x16_t)
32733
32734   * int32x4_t vreinterpretq_s32_u64 (uint64x2_t)
32735
32736   * int32x4_t vreinterpretq_s32_s64 (int64x2_t)
32737
32738   * int32x4_t vreinterpretq_s32_f32 (float32x4_t)
32739
32740   * int32x4_t vreinterpretq_s32_p16 (poly16x8_t)
32741
32742   * int32x4_t vreinterpretq_s32_p8 (poly8x16_t)
32743
32744   * uint8x8_t vreinterpret_u8_u32 (uint32x2_t)
32745
32746   * uint8x8_t vreinterpret_u8_u16 (uint16x4_t)
32747
32748   * uint8x8_t vreinterpret_u8_s32 (int32x2_t)
32749
32750   * uint8x8_t vreinterpret_u8_s16 (int16x4_t)
32751
32752   * uint8x8_t vreinterpret_u8_s8 (int8x8_t)
32753
32754   * uint8x8_t vreinterpret_u8_u64 (uint64x1_t)
32755
32756   * uint8x8_t vreinterpret_u8_s64 (int64x1_t)
32757
32758   * uint8x8_t vreinterpret_u8_f32 (float32x2_t)
32759
32760   * uint8x8_t vreinterpret_u8_p16 (poly16x4_t)
32761
32762   * uint8x8_t vreinterpret_u8_p8 (poly8x8_t)
32763
32764   * uint8x16_t vreinterpretq_u8_u32 (uint32x4_t)
32765
32766   * uint8x16_t vreinterpretq_u8_u16 (uint16x8_t)
32767
32768   * uint8x16_t vreinterpretq_u8_s32 (int32x4_t)
32769
32770   * uint8x16_t vreinterpretq_u8_s16 (int16x8_t)
32771
32772   * uint8x16_t vreinterpretq_u8_s8 (int8x16_t)
32773
32774   * uint8x16_t vreinterpretq_u8_u64 (uint64x2_t)
32775
32776   * uint8x16_t vreinterpretq_u8_s64 (int64x2_t)
32777
32778   * uint8x16_t vreinterpretq_u8_f32 (float32x4_t)
32779
32780   * uint8x16_t vreinterpretq_u8_p16 (poly16x8_t)
32781
32782   * uint8x16_t vreinterpretq_u8_p8 (poly8x16_t)
32783
32784   * uint16x4_t vreinterpret_u16_u32 (uint32x2_t)
32785
32786   * uint16x4_t vreinterpret_u16_u8 (uint8x8_t)
32787
32788   * uint16x4_t vreinterpret_u16_s32 (int32x2_t)
32789
32790   * uint16x4_t vreinterpret_u16_s16 (int16x4_t)
32791
32792   * uint16x4_t vreinterpret_u16_s8 (int8x8_t)
32793
32794   * uint16x4_t vreinterpret_u16_u64 (uint64x1_t)
32795
32796   * uint16x4_t vreinterpret_u16_s64 (int64x1_t)
32797
32798   * uint16x4_t vreinterpret_u16_f32 (float32x2_t)
32799
32800   * uint16x4_t vreinterpret_u16_p16 (poly16x4_t)
32801
32802   * uint16x4_t vreinterpret_u16_p8 (poly8x8_t)
32803
32804   * uint16x8_t vreinterpretq_u16_u32 (uint32x4_t)
32805
32806   * uint16x8_t vreinterpretq_u16_u8 (uint8x16_t)
32807
32808   * uint16x8_t vreinterpretq_u16_s32 (int32x4_t)
32809
32810   * uint16x8_t vreinterpretq_u16_s16 (int16x8_t)
32811
32812   * uint16x8_t vreinterpretq_u16_s8 (int8x16_t)
32813
32814   * uint16x8_t vreinterpretq_u16_u64 (uint64x2_t)
32815
32816   * uint16x8_t vreinterpretq_u16_s64 (int64x2_t)
32817
32818   * uint16x8_t vreinterpretq_u16_f32 (float32x4_t)
32819
32820   * uint16x8_t vreinterpretq_u16_p16 (poly16x8_t)
32821
32822   * uint16x8_t vreinterpretq_u16_p8 (poly8x16_t)
32823
32824   * uint32x2_t vreinterpret_u32_u16 (uint16x4_t)
32825
32826   * uint32x2_t vreinterpret_u32_u8 (uint8x8_t)
32827
32828   * uint32x2_t vreinterpret_u32_s32 (int32x2_t)
32829
32830   * uint32x2_t vreinterpret_u32_s16 (int16x4_t)
32831
32832   * uint32x2_t vreinterpret_u32_s8 (int8x8_t)
32833
32834   * uint32x2_t vreinterpret_u32_u64 (uint64x1_t)
32835
32836   * uint32x2_t vreinterpret_u32_s64 (int64x1_t)
32837
32838   * uint32x2_t vreinterpret_u32_f32 (float32x2_t)
32839
32840   * uint32x2_t vreinterpret_u32_p16 (poly16x4_t)
32841
32842   * uint32x2_t vreinterpret_u32_p8 (poly8x8_t)
32843
32844   * uint32x4_t vreinterpretq_u32_u16 (uint16x8_t)
32845
32846   * uint32x4_t vreinterpretq_u32_u8 (uint8x16_t)
32847
32848   * uint32x4_t vreinterpretq_u32_s32 (int32x4_t)
32849
32850   * uint32x4_t vreinterpretq_u32_s16 (int16x8_t)
32851
32852   * uint32x4_t vreinterpretq_u32_s8 (int8x16_t)
32853
32854   * uint32x4_t vreinterpretq_u32_u64 (uint64x2_t)
32855
32856   * uint32x4_t vreinterpretq_u32_s64 (int64x2_t)
32857
32858   * uint32x4_t vreinterpretq_u32_f32 (float32x4_t)
32859
32860   * uint32x4_t vreinterpretq_u32_p16 (poly16x8_t)
32861
32862   * uint32x4_t vreinterpretq_u32_p8 (poly8x16_t)
32863
32864
32865File: gcc.info,  Node: Blackfin Built-in Functions,  Next: FR-V Built-in Functions,  Prev: ARM NEON Intrinsics,  Up: Target Builtins
32866
328676.54.4 Blackfin Built-in Functions
32868----------------------------------
32869
32870Currently, there are two Blackfin-specific built-in functions.  These
32871are used for generating `CSYNC' and `SSYNC' machine insns without using
32872inline assembly; by using these built-in functions the compiler can
32873automatically add workarounds for hardware errata involving these
32874instructions.  These functions are named as follows:
32875
32876     void __builtin_bfin_csync (void)
32877     void __builtin_bfin_ssync (void)
32878
32879
32880File: gcc.info,  Node: FR-V Built-in Functions,  Next: X86 Built-in Functions,  Prev: Blackfin Built-in Functions,  Up: Target Builtins
32881
328826.54.5 FR-V Built-in Functions
32883------------------------------
32884
32885GCC provides many FR-V-specific built-in functions.  In general, these
32886functions are intended to be compatible with those described by `FR-V
32887Family, Softune C/C++ Compiler Manual (V6), Fujitsu Semiconductor'.
32888The two exceptions are `__MDUNPACKH' and `__MBTOHE', the gcc forms of
32889which pass 128-bit values by pointer rather than by value.
32890
32891 Most of the functions are named after specific FR-V instructions.
32892Such functions are said to be "directly mapped" and are summarized here
32893in tabular form.
32894
32895* Menu:
32896
32897* Argument Types::
32898* Directly-mapped Integer Functions::
32899* Directly-mapped Media Functions::
32900* Raw read/write Functions::
32901* Other Built-in Functions::
32902
32903
32904File: gcc.info,  Node: Argument Types,  Next: Directly-mapped Integer Functions,  Up: FR-V Built-in Functions
32905
329066.54.5.1 Argument Types
32907.......................
32908
32909The arguments to the built-in functions can be divided into three
32910groups: register numbers, compile-time constants and run-time values.
32911In order to make this classification clear at a glance, the arguments
32912and return values are given the following pseudo types:
32913
32914Pseudo type    Real C type            Constant?   Description
32915`uh'           `unsigned short'       No          an unsigned halfword
32916`uw1'          `unsigned int'         No          an unsigned word
32917`sw1'          `int'                  No          a signed word
32918`uw2'          `unsigned long long'   No          an unsigned doubleword
32919`sw2'          `long long'            No          a signed doubleword
32920`const'        `int'                  Yes         an integer constant
32921`acc'          `int'                  Yes         an ACC register number
32922`iacc'         `int'                  Yes         an IACC register number
32923
32924 These pseudo types are not defined by GCC, they are simply a notational
32925convenience used in this manual.
32926
32927 Arguments of type `uh', `uw1', `sw1', `uw2' and `sw2' are evaluated at
32928run time.  They correspond to register operands in the underlying FR-V
32929instructions.
32930
32931 `const' arguments represent immediate operands in the underlying FR-V
32932instructions.  They must be compile-time constants.
32933
32934 `acc' arguments are evaluated at compile time and specify the number
32935of an accumulator register.  For example, an `acc' argument of 2 will
32936select the ACC2 register.
32937
32938 `iacc' arguments are similar to `acc' arguments but specify the number
32939of an IACC register.  See *note Other Built-in Functions:: for more
32940details.
32941
32942
32943File: gcc.info,  Node: Directly-mapped Integer Functions,  Next: Directly-mapped Media Functions,  Prev: Argument Types,  Up: FR-V Built-in Functions
32944
329456.54.5.2 Directly-mapped Integer Functions
32946..........................................
32947
32948The functions listed below map directly to FR-V I-type instructions.
32949
32950Function prototype               Example usage           Assembly output
32951`sw1 __ADDSS (sw1, sw1)'         `C = __ADDSS (A, B)'    `ADDSS A,B,C'
32952`sw1 __SCAN (sw1, sw1)'          `C = __SCAN (A, B)'     `SCAN A,B,C'
32953`sw1 __SCUTSS (sw1)'             `B = __SCUTSS (A)'      `SCUTSS A,B'
32954`sw1 __SLASS (sw1, sw1)'         `C = __SLASS (A, B)'    `SLASS A,B,C'
32955`void __SMASS (sw1, sw1)'        `__SMASS (A, B)'        `SMASS A,B'
32956`void __SMSSS (sw1, sw1)'        `__SMSSS (A, B)'        `SMSSS A,B'
32957`void __SMU (sw1, sw1)'          `__SMU (A, B)'          `SMU A,B'
32958`sw2 __SMUL (sw1, sw1)'          `C = __SMUL (A, B)'     `SMUL A,B,C'
32959`sw1 __SUBSS (sw1, sw1)'         `C = __SUBSS (A, B)'    `SUBSS A,B,C'
32960`uw2 __UMUL (uw1, uw1)'          `C = __UMUL (A, B)'     `UMUL A,B,C'
32961
32962
32963File: gcc.info,  Node: Directly-mapped Media Functions,  Next: Raw read/write Functions,  Prev: Directly-mapped Integer Functions,  Up: FR-V Built-in Functions
32964
329656.54.5.3 Directly-mapped Media Functions
32966........................................
32967
32968The functions listed below map directly to FR-V M-type instructions.
32969
32970Function prototype               Example usage           Assembly output
32971`uw1 __MABSHS (sw1)'             `B = __MABSHS (A)'      `MABSHS A,B'
32972`void __MADDACCS (acc, acc)'     `__MADDACCS (B, A)'     `MADDACCS A,B'
32973`sw1 __MADDHSS (sw1, sw1)'       `C = __MADDHSS (A, B)'  `MADDHSS A,B,C'
32974`uw1 __MADDHUS (uw1, uw1)'       `C = __MADDHUS (A, B)'  `MADDHUS A,B,C'
32975`uw1 __MAND (uw1, uw1)'          `C = __MAND (A, B)'     `MAND A,B,C'
32976`void __MASACCS (acc, acc)'      `__MASACCS (B, A)'      `MASACCS A,B'
32977`uw1 __MAVEH (uw1, uw1)'         `C = __MAVEH (A, B)'    `MAVEH A,B,C'
32978`uw2 __MBTOH (uw1)'              `B = __MBTOH (A)'       `MBTOH A,B'
32979`void __MBTOHE (uw1 *, uw1)'     `__MBTOHE (&B, A)'      `MBTOHE A,B'
32980`void __MCLRACC (acc)'           `__MCLRACC (A)'         `MCLRACC A'
32981`void __MCLRACCA (void)'         `__MCLRACCA ()'         `MCLRACCA'
32982`uw1 __Mcop1 (uw1, uw1)'         `C = __Mcop1 (A, B)'    `Mcop1 A,B,C'
32983`uw1 __Mcop2 (uw1, uw1)'         `C = __Mcop2 (A, B)'    `Mcop2 A,B,C'
32984`uw1 __MCPLHI (uw2, const)'      `C = __MCPLHI (A, B)'   `MCPLHI A,#B,C'
32985`uw1 __MCPLI (uw2, const)'       `C = __MCPLI (A, B)'    `MCPLI A,#B,C'
32986`void __MCPXIS (acc, sw1, sw1)'  `__MCPXIS (C, A, B)'    `MCPXIS A,B,C'
32987`void __MCPXIU (acc, uw1, uw1)'  `__MCPXIU (C, A, B)'    `MCPXIU A,B,C'
32988`void __MCPXRS (acc, sw1, sw1)'  `__MCPXRS (C, A, B)'    `MCPXRS A,B,C'
32989`void __MCPXRU (acc, uw1, uw1)'  `__MCPXRU (C, A, B)'    `MCPXRU A,B,C'
32990`uw1 __MCUT (acc, uw1)'          `C = __MCUT (A, B)'     `MCUT A,B,C'
32991`uw1 __MCUTSS (acc, sw1)'        `C = __MCUTSS (A, B)'   `MCUTSS A,B,C'
32992`void __MDADDACCS (acc, acc)'    `__MDADDACCS (B, A)'    `MDADDACCS A,B'
32993`void __MDASACCS (acc, acc)'     `__MDASACCS (B, A)'     `MDASACCS A,B'
32994`uw2 __MDCUTSSI (acc, const)'    `C = __MDCUTSSI (A, B)' `MDCUTSSI A,#B,C'
32995`uw2 __MDPACKH (uw2, uw2)'       `C = __MDPACKH (A, B)'  `MDPACKH A,B,C'
32996`uw2 __MDROTLI (uw2, const)'     `C = __MDROTLI (A, B)'  `MDROTLI A,#B,C'
32997`void __MDSUBACCS (acc, acc)'    `__MDSUBACCS (B, A)'    `MDSUBACCS A,B'
32998`void __MDUNPACKH (uw1 *, uw2)'  `__MDUNPACKH (&B, A)'   `MDUNPACKH A,B'
32999`uw2 __MEXPDHD (uw1, const)'     `C = __MEXPDHD (A, B)'  `MEXPDHD A,#B,C'
33000`uw1 __MEXPDHW (uw1, const)'     `C = __MEXPDHW (A, B)'  `MEXPDHW A,#B,C'
33001`uw1 __MHDSETH (uw1, const)'     `C = __MHDSETH (A, B)'  `MHDSETH A,#B,C'
33002`sw1 __MHDSETS (const)'          `B = __MHDSETS (A)'     `MHDSETS #A,B'
33003`uw1 __MHSETHIH (uw1, const)'    `B = __MHSETHIH (B, A)' `MHSETHIH #A,B'
33004`sw1 __MHSETHIS (sw1, const)'    `B = __MHSETHIS (B, A)' `MHSETHIS #A,B'
33005`uw1 __MHSETLOH (uw1, const)'    `B = __MHSETLOH (B, A)' `MHSETLOH #A,B'
33006`sw1 __MHSETLOS (sw1, const)'    `B = __MHSETLOS (B, A)' `MHSETLOS #A,B'
33007`uw1 __MHTOB (uw2)'              `B = __MHTOB (A)'       `MHTOB A,B'
33008`void __MMACHS (acc, sw1, sw1)'  `__MMACHS (C, A, B)'    `MMACHS A,B,C'
33009`void __MMACHU (acc, uw1, uw1)'  `__MMACHU (C, A, B)'    `MMACHU A,B,C'
33010`void __MMRDHS (acc, sw1, sw1)'  `__MMRDHS (C, A, B)'    `MMRDHS A,B,C'
33011`void __MMRDHU (acc, uw1, uw1)'  `__MMRDHU (C, A, B)'    `MMRDHU A,B,C'
33012`void __MMULHS (acc, sw1, sw1)'  `__MMULHS (C, A, B)'    `MMULHS A,B,C'
33013`void __MMULHU (acc, uw1, uw1)'  `__MMULHU (C, A, B)'    `MMULHU A,B,C'
33014`void __MMULXHS (acc, sw1, sw1)' `__MMULXHS (C, A, B)'   `MMULXHS A,B,C'
33015`void __MMULXHU (acc, uw1, uw1)' `__MMULXHU (C, A, B)'   `MMULXHU A,B,C'
33016`uw1 __MNOT (uw1)'               `B = __MNOT (A)'        `MNOT A,B'
33017`uw1 __MOR (uw1, uw1)'           `C = __MOR (A, B)'      `MOR A,B,C'
33018`uw1 __MPACKH (uh, uh)'          `C = __MPACKH (A, B)'   `MPACKH A,B,C'
33019`sw2 __MQADDHSS (sw2, sw2)'      `C = __MQADDHSS (A, B)' `MQADDHSS A,B,C'
33020`uw2 __MQADDHUS (uw2, uw2)'      `C = __MQADDHUS (A, B)' `MQADDHUS A,B,C'
33021`void __MQCPXIS (acc, sw2, sw2)' `__MQCPXIS (C, A, B)'   `MQCPXIS A,B,C'
33022`void __MQCPXIU (acc, uw2, uw2)' `__MQCPXIU (C, A, B)'   `MQCPXIU A,B,C'
33023`void __MQCPXRS (acc, sw2, sw2)' `__MQCPXRS (C, A, B)'   `MQCPXRS A,B,C'
33024`void __MQCPXRU (acc, uw2, uw2)' `__MQCPXRU (C, A, B)'   `MQCPXRU A,B,C'
33025`sw2 __MQLCLRHS (sw2, sw2)'      `C = __MQLCLRHS (A, B)' `MQLCLRHS A,B,C'
33026`sw2 __MQLMTHS (sw2, sw2)'       `C = __MQLMTHS (A, B)'  `MQLMTHS A,B,C'
33027`void __MQMACHS (acc, sw2, sw2)' `__MQMACHS (C, A, B)'   `MQMACHS A,B,C'
33028`void __MQMACHU (acc, uw2, uw2)' `__MQMACHU (C, A, B)'   `MQMACHU A,B,C'
33029`void __MQMACXHS (acc, sw2,      `__MQMACXHS (C, A, B)'  `MQMACXHS A,B,C'
33030sw2)'                                                    
33031`void __MQMULHS (acc, sw2, sw2)' `__MQMULHS (C, A, B)'   `MQMULHS A,B,C'
33032`void __MQMULHU (acc, uw2, uw2)' `__MQMULHU (C, A, B)'   `MQMULHU A,B,C'
33033`void __MQMULXHS (acc, sw2,      `__MQMULXHS (C, A, B)'  `MQMULXHS A,B,C'
33034sw2)'                                                    
33035`void __MQMULXHU (acc, uw2,      `__MQMULXHU (C, A, B)'  `MQMULXHU A,B,C'
33036uw2)'                                                    
33037`sw2 __MQSATHS (sw2, sw2)'       `C = __MQSATHS (A, B)'  `MQSATHS A,B,C'
33038`uw2 __MQSLLHI (uw2, int)'       `C = __MQSLLHI (A, B)'  `MQSLLHI A,B,C'
33039`sw2 __MQSRAHI (sw2, int)'       `C = __MQSRAHI (A, B)'  `MQSRAHI A,B,C'
33040`sw2 __MQSUBHSS (sw2, sw2)'      `C = __MQSUBHSS (A, B)' `MQSUBHSS A,B,C'
33041`uw2 __MQSUBHUS (uw2, uw2)'      `C = __MQSUBHUS (A, B)' `MQSUBHUS A,B,C'
33042`void __MQXMACHS (acc, sw2,      `__MQXMACHS (C, A, B)'  `MQXMACHS A,B,C'
33043sw2)'                                                    
33044`void __MQXMACXHS (acc, sw2,     `__MQXMACXHS (C, A, B)' `MQXMACXHS A,B,C'
33045sw2)'                                                    
33046`uw1 __MRDACC (acc)'             `B = __MRDACC (A)'      `MRDACC A,B'
33047`uw1 __MRDACCG (acc)'            `B = __MRDACCG (A)'     `MRDACCG A,B'
33048`uw1 __MROTLI (uw1, const)'      `C = __MROTLI (A, B)'   `MROTLI A,#B,C'
33049`uw1 __MROTRI (uw1, const)'      `C = __MROTRI (A, B)'   `MROTRI A,#B,C'
33050`sw1 __MSATHS (sw1, sw1)'        `C = __MSATHS (A, B)'   `MSATHS A,B,C'
33051`uw1 __MSATHU (uw1, uw1)'        `C = __MSATHU (A, B)'   `MSATHU A,B,C'
33052`uw1 __MSLLHI (uw1, const)'      `C = __MSLLHI (A, B)'   `MSLLHI A,#B,C'
33053`sw1 __MSRAHI (sw1, const)'      `C = __MSRAHI (A, B)'   `MSRAHI A,#B,C'
33054`uw1 __MSRLHI (uw1, const)'      `C = __MSRLHI (A, B)'   `MSRLHI A,#B,C'
33055`void __MSUBACCS (acc, acc)'     `__MSUBACCS (B, A)'     `MSUBACCS A,B'
33056`sw1 __MSUBHSS (sw1, sw1)'       `C = __MSUBHSS (A, B)'  `MSUBHSS A,B,C'
33057`uw1 __MSUBHUS (uw1, uw1)'       `C = __MSUBHUS (A, B)'  `MSUBHUS A,B,C'
33058`void __MTRAP (void)'            `__MTRAP ()'            `MTRAP'
33059`uw2 __MUNPACKH (uw1)'           `B = __MUNPACKH (A)'    `MUNPACKH A,B'
33060`uw1 __MWCUT (uw2, uw1)'         `C = __MWCUT (A, B)'    `MWCUT A,B,C'
33061`void __MWTACC (acc, uw1)'       `__MWTACC (B, A)'       `MWTACC A,B'
33062`void __MWTACCG (acc, uw1)'      `__MWTACCG (B, A)'      `MWTACCG A,B'
33063`uw1 __MXOR (uw1, uw1)'          `C = __MXOR (A, B)'     `MXOR A,B,C'
33064
33065
33066File: gcc.info,  Node: Raw read/write Functions,  Next: Other Built-in Functions,  Prev: Directly-mapped Media Functions,  Up: FR-V Built-in Functions
33067
330686.54.5.4 Raw read/write Functions
33069.................................
33070
33071This sections describes built-in functions related to read and write
33072instructions to access memory.  These functions generate `membar'
33073instructions to flush the I/O load and stores where appropriate, as
33074described in Fujitsu's manual described above.
33075
33076`unsigned char __builtin_read8 (void *DATA)'
33077
33078`unsigned short __builtin_read16 (void *DATA)'
33079
33080`unsigned long __builtin_read32 (void *DATA)'
33081
33082`unsigned long long __builtin_read64 (void *DATA)'
33083
33084`void __builtin_write8 (void *DATA, unsigned char DATUM)'
33085
33086`void __builtin_write16 (void *DATA, unsigned short DATUM)'
33087
33088`void __builtin_write32 (void *DATA, unsigned long DATUM)'
33089
33090`void __builtin_write64 (void *DATA, unsigned long long DATUM)'
33091
33092
33093File: gcc.info,  Node: Other Built-in Functions,  Prev: Raw read/write Functions,  Up: FR-V Built-in Functions
33094
330956.54.5.5 Other Built-in Functions
33096.................................
33097
33098This section describes built-in functions that are not named after a
33099specific FR-V instruction.
33100
33101`sw2 __IACCreadll (iacc REG)'
33102     Return the full 64-bit value of IACC0.  The REG argument is
33103     reserved for future expansion and must be 0.
33104
33105`sw1 __IACCreadl (iacc REG)'
33106     Return the value of IACC0H if REG is 0 and IACC0L if REG is 1.
33107     Other values of REG are rejected as invalid.
33108
33109`void __IACCsetll (iacc REG, sw2 X)'
33110     Set the full 64-bit value of IACC0 to X.  The REG argument is
33111     reserved for future expansion and must be 0.
33112
33113`void __IACCsetl (iacc REG, sw1 X)'
33114     Set IACC0H to X if REG is 0 and IACC0L to X if REG is 1.  Other
33115     values of REG are rejected as invalid.
33116
33117`void __data_prefetch0 (const void *X)'
33118     Use the `dcpl' instruction to load the contents of address X into
33119     the data cache.
33120
33121`void __data_prefetch (const void *X)'
33122     Use the `nldub' instruction to load the contents of address X into
33123     the data cache.  The instruction will be issued in slot I1.
33124
33125
33126File: gcc.info,  Node: X86 Built-in Functions,  Next: MIPS DSP Built-in Functions,  Prev: FR-V Built-in Functions,  Up: Target Builtins
33127
331286.54.6 X86 Built-in Functions
33129-----------------------------
33130
33131These built-in functions are available for the i386 and x86-64 family
33132of computers, depending on the command-line switches used.
33133
33134 Note that, if you specify command-line switches such as `-msse', the
33135compiler could use the extended instruction sets even if the built-ins
33136are not used explicitly in the program.  For this reason, applications
33137which perform runtime CPU detection must compile separate files for each
33138supported architecture, using the appropriate flags.  In particular,
33139the file containing the CPU detection code should be compiled without
33140these options.
33141
33142 The following machine modes are available for use with MMX built-in
33143functions (*note Vector Extensions::): `V2SI' for a vector of two
3314432-bit integers, `V4HI' for a vector of four 16-bit integers, and
33145`V8QI' for a vector of eight 8-bit integers.  Some of the built-in
33146functions operate on MMX registers as a whole 64-bit entity, these use
33147`V1DI' as their mode.
33148
33149 If 3DNow! extensions are enabled, `V2SF' is used as a mode for a vector
33150of two 32-bit floating point values.
33151
33152 If SSE extensions are enabled, `V4SF' is used for a vector of four
3315332-bit floating point values.  Some instructions use a vector of four
3315432-bit integers, these use `V4SI'.  Finally, some instructions operate
33155on an entire vector register, interpreting it as a 128-bit integer,
33156these use mode `TI'.
33157
33158 In 64-bit mode, the x86-64 family of processors uses additional
33159built-in functions for efficient use of `TF' (`__float128') 128-bit
33160floating point and `TC' 128-bit complex floating point values.
33161
33162 The following floating point built-in functions are available in 64-bit
33163mode.  All of them implement the function that is part of the name.
33164
33165     __float128 __builtin_fabsq (__float128)
33166     __float128 __builtin_copysignq (__float128, __float128)
33167
33168 The following floating point built-in functions are made available in
33169the 64-bit mode.
33170
33171`__float128 __builtin_infq (void)'
33172     Similar to `__builtin_inf', except the return type is `__float128'.  
33173
33174`__float128 __builtin_huge_valq (void)'
33175     Similar to `__builtin_huge_val', except the return type is
33176     `__float128'.  
33177
33178 The following built-in functions are made available by `-mmmx'.  All
33179of them generate the machine instruction that is part of the name.
33180
33181     v8qi __builtin_ia32_paddb (v8qi, v8qi)
33182     v4hi __builtin_ia32_paddw (v4hi, v4hi)
33183     v2si __builtin_ia32_paddd (v2si, v2si)
33184     v8qi __builtin_ia32_psubb (v8qi, v8qi)
33185     v4hi __builtin_ia32_psubw (v4hi, v4hi)
33186     v2si __builtin_ia32_psubd (v2si, v2si)
33187     v8qi __builtin_ia32_paddsb (v8qi, v8qi)
33188     v4hi __builtin_ia32_paddsw (v4hi, v4hi)
33189     v8qi __builtin_ia32_psubsb (v8qi, v8qi)
33190     v4hi __builtin_ia32_psubsw (v4hi, v4hi)
33191     v8qi __builtin_ia32_paddusb (v8qi, v8qi)
33192     v4hi __builtin_ia32_paddusw (v4hi, v4hi)
33193     v8qi __builtin_ia32_psubusb (v8qi, v8qi)
33194     v4hi __builtin_ia32_psubusw (v4hi, v4hi)
33195     v4hi __builtin_ia32_pmullw (v4hi, v4hi)
33196     v4hi __builtin_ia32_pmulhw (v4hi, v4hi)
33197     di __builtin_ia32_pand (di, di)
33198     di __builtin_ia32_pandn (di,di)
33199     di __builtin_ia32_por (di, di)
33200     di __builtin_ia32_pxor (di, di)
33201     v8qi __builtin_ia32_pcmpeqb (v8qi, v8qi)
33202     v4hi __builtin_ia32_pcmpeqw (v4hi, v4hi)
33203     v2si __builtin_ia32_pcmpeqd (v2si, v2si)
33204     v8qi __builtin_ia32_pcmpgtb (v8qi, v8qi)
33205     v4hi __builtin_ia32_pcmpgtw (v4hi, v4hi)
33206     v2si __builtin_ia32_pcmpgtd (v2si, v2si)
33207     v8qi __builtin_ia32_punpckhbw (v8qi, v8qi)
33208     v4hi __builtin_ia32_punpckhwd (v4hi, v4hi)
33209     v2si __builtin_ia32_punpckhdq (v2si, v2si)
33210     v8qi __builtin_ia32_punpcklbw (v8qi, v8qi)
33211     v4hi __builtin_ia32_punpcklwd (v4hi, v4hi)
33212     v2si __builtin_ia32_punpckldq (v2si, v2si)
33213     v8qi __builtin_ia32_packsswb (v4hi, v4hi)
33214     v4hi __builtin_ia32_packssdw (v2si, v2si)
33215     v8qi __builtin_ia32_packuswb (v4hi, v4hi)
33216
33217     v4hi __builtin_ia32_psllw (v4hi, v4hi)
33218     v2si __builtin_ia32_pslld (v2si, v2si)
33219     v1di __builtin_ia32_psllq (v1di, v1di)
33220     v4hi __builtin_ia32_psrlw (v4hi, v4hi)
33221     v2si __builtin_ia32_psrld (v2si, v2si)
33222     v1di __builtin_ia32_psrlq (v1di, v1di)
33223     v4hi __builtin_ia32_psraw (v4hi, v4hi)
33224     v2si __builtin_ia32_psrad (v2si, v2si)
33225     v4hi __builtin_ia32_psllwi (v4hi, int)
33226     v2si __builtin_ia32_pslldi (v2si, int)
33227     v1di __builtin_ia32_psllqi (v1di, int)
33228     v4hi __builtin_ia32_psrlwi (v4hi, int)
33229     v2si __builtin_ia32_psrldi (v2si, int)
33230     v1di __builtin_ia32_psrlqi (v1di, int)
33231     v4hi __builtin_ia32_psrawi (v4hi, int)
33232     v2si __builtin_ia32_psradi (v2si, int)
33233
33234 The following built-in functions are made available either with
33235`-msse', or with a combination of `-m3dnow' and `-march=athlon'.  All
33236of them generate the machine instruction that is part of the name.
33237
33238     v4hi __builtin_ia32_pmulhuw (v4hi, v4hi)
33239     v8qi __builtin_ia32_pavgb (v8qi, v8qi)
33240     v4hi __builtin_ia32_pavgw (v4hi, v4hi)
33241     v1di __builtin_ia32_psadbw (v8qi, v8qi)
33242     v8qi __builtin_ia32_pmaxub (v8qi, v8qi)
33243     v4hi __builtin_ia32_pmaxsw (v4hi, v4hi)
33244     v8qi __builtin_ia32_pminub (v8qi, v8qi)
33245     v4hi __builtin_ia32_pminsw (v4hi, v4hi)
33246     int __builtin_ia32_pextrw (v4hi, int)
33247     v4hi __builtin_ia32_pinsrw (v4hi, int, int)
33248     int __builtin_ia32_pmovmskb (v8qi)
33249     void __builtin_ia32_maskmovq (v8qi, v8qi, char *)
33250     void __builtin_ia32_movntq (di *, di)
33251     void __builtin_ia32_sfence (void)
33252
33253 The following built-in functions are available when `-msse' is used.
33254All of them generate the machine instruction that is part of the name.
33255
33256     int __builtin_ia32_comieq (v4sf, v4sf)
33257     int __builtin_ia32_comineq (v4sf, v4sf)
33258     int __builtin_ia32_comilt (v4sf, v4sf)
33259     int __builtin_ia32_comile (v4sf, v4sf)
33260     int __builtin_ia32_comigt (v4sf, v4sf)
33261     int __builtin_ia32_comige (v4sf, v4sf)
33262     int __builtin_ia32_ucomieq (v4sf, v4sf)
33263     int __builtin_ia32_ucomineq (v4sf, v4sf)
33264     int __builtin_ia32_ucomilt (v4sf, v4sf)
33265     int __builtin_ia32_ucomile (v4sf, v4sf)
33266     int __builtin_ia32_ucomigt (v4sf, v4sf)
33267     int __builtin_ia32_ucomige (v4sf, v4sf)
33268     v4sf __builtin_ia32_addps (v4sf, v4sf)
33269     v4sf __builtin_ia32_subps (v4sf, v4sf)
33270     v4sf __builtin_ia32_mulps (v4sf, v4sf)
33271     v4sf __builtin_ia32_divps (v4sf, v4sf)
33272     v4sf __builtin_ia32_addss (v4sf, v4sf)
33273     v4sf __builtin_ia32_subss (v4sf, v4sf)
33274     v4sf __builtin_ia32_mulss (v4sf, v4sf)
33275     v4sf __builtin_ia32_divss (v4sf, v4sf)
33276     v4si __builtin_ia32_cmpeqps (v4sf, v4sf)
33277     v4si __builtin_ia32_cmpltps (v4sf, v4sf)
33278     v4si __builtin_ia32_cmpleps (v4sf, v4sf)
33279     v4si __builtin_ia32_cmpgtps (v4sf, v4sf)
33280     v4si __builtin_ia32_cmpgeps (v4sf, v4sf)
33281     v4si __builtin_ia32_cmpunordps (v4sf, v4sf)
33282     v4si __builtin_ia32_cmpneqps (v4sf, v4sf)
33283     v4si __builtin_ia32_cmpnltps (v4sf, v4sf)
33284     v4si __builtin_ia32_cmpnleps (v4sf, v4sf)
33285     v4si __builtin_ia32_cmpngtps (v4sf, v4sf)
33286     v4si __builtin_ia32_cmpngeps (v4sf, v4sf)
33287     v4si __builtin_ia32_cmpordps (v4sf, v4sf)
33288     v4si __builtin_ia32_cmpeqss (v4sf, v4sf)
33289     v4si __builtin_ia32_cmpltss (v4sf, v4sf)
33290     v4si __builtin_ia32_cmpless (v4sf, v4sf)
33291     v4si __builtin_ia32_cmpunordss (v4sf, v4sf)
33292     v4si __builtin_ia32_cmpneqss (v4sf, v4sf)
33293     v4si __builtin_ia32_cmpnlts (v4sf, v4sf)
33294     v4si __builtin_ia32_cmpnless (v4sf, v4sf)
33295     v4si __builtin_ia32_cmpordss (v4sf, v4sf)
33296     v4sf __builtin_ia32_maxps (v4sf, v4sf)
33297     v4sf __builtin_ia32_maxss (v4sf, v4sf)
33298     v4sf __builtin_ia32_minps (v4sf, v4sf)
33299     v4sf __builtin_ia32_minss (v4sf, v4sf)
33300     v4sf __builtin_ia32_andps (v4sf, v4sf)
33301     v4sf __builtin_ia32_andnps (v4sf, v4sf)
33302     v4sf __builtin_ia32_orps (v4sf, v4sf)
33303     v4sf __builtin_ia32_xorps (v4sf, v4sf)
33304     v4sf __builtin_ia32_movss (v4sf, v4sf)
33305     v4sf __builtin_ia32_movhlps (v4sf, v4sf)
33306     v4sf __builtin_ia32_movlhps (v4sf, v4sf)
33307     v4sf __builtin_ia32_unpckhps (v4sf, v4sf)
33308     v4sf __builtin_ia32_unpcklps (v4sf, v4sf)
33309     v4sf __builtin_ia32_cvtpi2ps (v4sf, v2si)
33310     v4sf __builtin_ia32_cvtsi2ss (v4sf, int)
33311     v2si __builtin_ia32_cvtps2pi (v4sf)
33312     int __builtin_ia32_cvtss2si (v4sf)
33313     v2si __builtin_ia32_cvttps2pi (v4sf)
33314     int __builtin_ia32_cvttss2si (v4sf)
33315     v4sf __builtin_ia32_rcpps (v4sf)
33316     v4sf __builtin_ia32_rsqrtps (v4sf)
33317     v4sf __builtin_ia32_sqrtps (v4sf)
33318     v4sf __builtin_ia32_rcpss (v4sf)
33319     v4sf __builtin_ia32_rsqrtss (v4sf)
33320     v4sf __builtin_ia32_sqrtss (v4sf)
33321     v4sf __builtin_ia32_shufps (v4sf, v4sf, int)
33322     void __builtin_ia32_movntps (float *, v4sf)
33323     int __builtin_ia32_movmskps (v4sf)
33324
33325 The following built-in functions are available when `-msse' is used.
33326
33327`v4sf __builtin_ia32_loadaps (float *)'
33328     Generates the `movaps' machine instruction as a load from memory.
33329
33330`void __builtin_ia32_storeaps (float *, v4sf)'
33331     Generates the `movaps' machine instruction as a store to memory.
33332
33333`v4sf __builtin_ia32_loadups (float *)'
33334     Generates the `movups' machine instruction as a load from memory.
33335
33336`void __builtin_ia32_storeups (float *, v4sf)'
33337     Generates the `movups' machine instruction as a store to memory.
33338
33339`v4sf __builtin_ia32_loadsss (float *)'
33340     Generates the `movss' machine instruction as a load from memory.
33341
33342`void __builtin_ia32_storess (float *, v4sf)'
33343     Generates the `movss' machine instruction as a store to memory.
33344
33345`v4sf __builtin_ia32_loadhps (v4sf, const v2sf *)'
33346     Generates the `movhps' machine instruction as a load from memory.
33347
33348`v4sf __builtin_ia32_loadlps (v4sf, const v2sf *)'
33349     Generates the `movlps' machine instruction as a load from memory
33350
33351`void __builtin_ia32_storehps (v2sf *, v4sf)'
33352     Generates the `movhps' machine instruction as a store to memory.
33353
33354`void __builtin_ia32_storelps (v2sf *, v4sf)'
33355     Generates the `movlps' machine instruction as a store to memory.
33356
33357 The following built-in functions are available when `-msse2' is used.
33358All of them generate the machine instruction that is part of the name.
33359
33360     int __builtin_ia32_comisdeq (v2df, v2df)
33361     int __builtin_ia32_comisdlt (v2df, v2df)
33362     int __builtin_ia32_comisdle (v2df, v2df)
33363     int __builtin_ia32_comisdgt (v2df, v2df)
33364     int __builtin_ia32_comisdge (v2df, v2df)
33365     int __builtin_ia32_comisdneq (v2df, v2df)
33366     int __builtin_ia32_ucomisdeq (v2df, v2df)
33367     int __builtin_ia32_ucomisdlt (v2df, v2df)
33368     int __builtin_ia32_ucomisdle (v2df, v2df)
33369     int __builtin_ia32_ucomisdgt (v2df, v2df)
33370     int __builtin_ia32_ucomisdge (v2df, v2df)
33371     int __builtin_ia32_ucomisdneq (v2df, v2df)
33372     v2df __builtin_ia32_cmpeqpd (v2df, v2df)
33373     v2df __builtin_ia32_cmpltpd (v2df, v2df)
33374     v2df __builtin_ia32_cmplepd (v2df, v2df)
33375     v2df __builtin_ia32_cmpgtpd (v2df, v2df)
33376     v2df __builtin_ia32_cmpgepd (v2df, v2df)
33377     v2df __builtin_ia32_cmpunordpd (v2df, v2df)
33378     v2df __builtin_ia32_cmpneqpd (v2df, v2df)
33379     v2df __builtin_ia32_cmpnltpd (v2df, v2df)
33380     v2df __builtin_ia32_cmpnlepd (v2df, v2df)
33381     v2df __builtin_ia32_cmpngtpd (v2df, v2df)
33382     v2df __builtin_ia32_cmpngepd (v2df, v2df)
33383     v2df __builtin_ia32_cmpordpd (v2df, v2df)
33384     v2df __builtin_ia32_cmpeqsd (v2df, v2df)
33385     v2df __builtin_ia32_cmpltsd (v2df, v2df)
33386     v2df __builtin_ia32_cmplesd (v2df, v2df)
33387     v2df __builtin_ia32_cmpunordsd (v2df, v2df)
33388     v2df __builtin_ia32_cmpneqsd (v2df, v2df)
33389     v2df __builtin_ia32_cmpnltsd (v2df, v2df)
33390     v2df __builtin_ia32_cmpnlesd (v2df, v2df)
33391     v2df __builtin_ia32_cmpordsd (v2df, v2df)
33392     v2di __builtin_ia32_paddq (v2di, v2di)
33393     v2di __builtin_ia32_psubq (v2di, v2di)
33394     v2df __builtin_ia32_addpd (v2df, v2df)
33395     v2df __builtin_ia32_subpd (v2df, v2df)
33396     v2df __builtin_ia32_mulpd (v2df, v2df)
33397     v2df __builtin_ia32_divpd (v2df, v2df)
33398     v2df __builtin_ia32_addsd (v2df, v2df)
33399     v2df __builtin_ia32_subsd (v2df, v2df)
33400     v2df __builtin_ia32_mulsd (v2df, v2df)
33401     v2df __builtin_ia32_divsd (v2df, v2df)
33402     v2df __builtin_ia32_minpd (v2df, v2df)
33403     v2df __builtin_ia32_maxpd (v2df, v2df)
33404     v2df __builtin_ia32_minsd (v2df, v2df)
33405     v2df __builtin_ia32_maxsd (v2df, v2df)
33406     v2df __builtin_ia32_andpd (v2df, v2df)
33407     v2df __builtin_ia32_andnpd (v2df, v2df)
33408     v2df __builtin_ia32_orpd (v2df, v2df)
33409     v2df __builtin_ia32_xorpd (v2df, v2df)
33410     v2df __builtin_ia32_movsd (v2df, v2df)
33411     v2df __builtin_ia32_unpckhpd (v2df, v2df)
33412     v2df __builtin_ia32_unpcklpd (v2df, v2df)
33413     v16qi __builtin_ia32_paddb128 (v16qi, v16qi)
33414     v8hi __builtin_ia32_paddw128 (v8hi, v8hi)
33415     v4si __builtin_ia32_paddd128 (v4si, v4si)
33416     v2di __builtin_ia32_paddq128 (v2di, v2di)
33417     v16qi __builtin_ia32_psubb128 (v16qi, v16qi)
33418     v8hi __builtin_ia32_psubw128 (v8hi, v8hi)
33419     v4si __builtin_ia32_psubd128 (v4si, v4si)
33420     v2di __builtin_ia32_psubq128 (v2di, v2di)
33421     v8hi __builtin_ia32_pmullw128 (v8hi, v8hi)
33422     v8hi __builtin_ia32_pmulhw128 (v8hi, v8hi)
33423     v2di __builtin_ia32_pand128 (v2di, v2di)
33424     v2di __builtin_ia32_pandn128 (v2di, v2di)
33425     v2di __builtin_ia32_por128 (v2di, v2di)
33426     v2di __builtin_ia32_pxor128 (v2di, v2di)
33427     v16qi __builtin_ia32_pavgb128 (v16qi, v16qi)
33428     v8hi __builtin_ia32_pavgw128 (v8hi, v8hi)
33429     v16qi __builtin_ia32_pcmpeqb128 (v16qi, v16qi)
33430     v8hi __builtin_ia32_pcmpeqw128 (v8hi, v8hi)
33431     v4si __builtin_ia32_pcmpeqd128 (v4si, v4si)
33432     v16qi __builtin_ia32_pcmpgtb128 (v16qi, v16qi)
33433     v8hi __builtin_ia32_pcmpgtw128 (v8hi, v8hi)
33434     v4si __builtin_ia32_pcmpgtd128 (v4si, v4si)
33435     v16qi __builtin_ia32_pmaxub128 (v16qi, v16qi)
33436     v8hi __builtin_ia32_pmaxsw128 (v8hi, v8hi)
33437     v16qi __builtin_ia32_pminub128 (v16qi, v16qi)
33438     v8hi __builtin_ia32_pminsw128 (v8hi, v8hi)
33439     v16qi __builtin_ia32_punpckhbw128 (v16qi, v16qi)
33440     v8hi __builtin_ia32_punpckhwd128 (v8hi, v8hi)
33441     v4si __builtin_ia32_punpckhdq128 (v4si, v4si)
33442     v2di __builtin_ia32_punpckhqdq128 (v2di, v2di)
33443     v16qi __builtin_ia32_punpcklbw128 (v16qi, v16qi)
33444     v8hi __builtin_ia32_punpcklwd128 (v8hi, v8hi)
33445     v4si __builtin_ia32_punpckldq128 (v4si, v4si)
33446     v2di __builtin_ia32_punpcklqdq128 (v2di, v2di)
33447     v16qi __builtin_ia32_packsswb128 (v8hi, v8hi)
33448     v8hi __builtin_ia32_packssdw128 (v4si, v4si)
33449     v16qi __builtin_ia32_packuswb128 (v8hi, v8hi)
33450     v8hi __builtin_ia32_pmulhuw128 (v8hi, v8hi)
33451     void __builtin_ia32_maskmovdqu (v16qi, v16qi)
33452     v2df __builtin_ia32_loadupd (double *)
33453     void __builtin_ia32_storeupd (double *, v2df)
33454     v2df __builtin_ia32_loadhpd (v2df, double const *)
33455     v2df __builtin_ia32_loadlpd (v2df, double const *)
33456     int __builtin_ia32_movmskpd (v2df)
33457     int __builtin_ia32_pmovmskb128 (v16qi)
33458     void __builtin_ia32_movnti (int *, int)
33459     void __builtin_ia32_movntpd (double *, v2df)
33460     void __builtin_ia32_movntdq (v2df *, v2df)
33461     v4si __builtin_ia32_pshufd (v4si, int)
33462     v8hi __builtin_ia32_pshuflw (v8hi, int)
33463     v8hi __builtin_ia32_pshufhw (v8hi, int)
33464     v2di __builtin_ia32_psadbw128 (v16qi, v16qi)
33465     v2df __builtin_ia32_sqrtpd (v2df)
33466     v2df __builtin_ia32_sqrtsd (v2df)
33467     v2df __builtin_ia32_shufpd (v2df, v2df, int)
33468     v2df __builtin_ia32_cvtdq2pd (v4si)
33469     v4sf __builtin_ia32_cvtdq2ps (v4si)
33470     v4si __builtin_ia32_cvtpd2dq (v2df)
33471     v2si __builtin_ia32_cvtpd2pi (v2df)
33472     v4sf __builtin_ia32_cvtpd2ps (v2df)
33473     v4si __builtin_ia32_cvttpd2dq (v2df)
33474     v2si __builtin_ia32_cvttpd2pi (v2df)
33475     v2df __builtin_ia32_cvtpi2pd (v2si)
33476     int __builtin_ia32_cvtsd2si (v2df)
33477     int __builtin_ia32_cvttsd2si (v2df)
33478     long long __builtin_ia32_cvtsd2si64 (v2df)
33479     long long __builtin_ia32_cvttsd2si64 (v2df)
33480     v4si __builtin_ia32_cvtps2dq (v4sf)
33481     v2df __builtin_ia32_cvtps2pd (v4sf)
33482     v4si __builtin_ia32_cvttps2dq (v4sf)
33483     v2df __builtin_ia32_cvtsi2sd (v2df, int)
33484     v2df __builtin_ia32_cvtsi642sd (v2df, long long)
33485     v4sf __builtin_ia32_cvtsd2ss (v4sf, v2df)
33486     v2df __builtin_ia32_cvtss2sd (v2df, v4sf)
33487     void __builtin_ia32_clflush (const void *)
33488     void __builtin_ia32_lfence (void)
33489     void __builtin_ia32_mfence (void)
33490     v16qi __builtin_ia32_loaddqu (const char *)
33491     void __builtin_ia32_storedqu (char *, v16qi)
33492     v1di __builtin_ia32_pmuludq (v2si, v2si)
33493     v2di __builtin_ia32_pmuludq128 (v4si, v4si)
33494     v8hi __builtin_ia32_psllw128 (v8hi, v8hi)
33495     v4si __builtin_ia32_pslld128 (v4si, v4si)
33496     v2di __builtin_ia32_psllq128 (v2di, v2di)
33497     v8hi __builtin_ia32_psrlw128 (v8hi, v8hi)
33498     v4si __builtin_ia32_psrld128 (v4si, v4si)
33499     v2di __builtin_ia32_psrlq128 (v2di, v2di)
33500     v8hi __builtin_ia32_psraw128 (v8hi, v8hi)
33501     v4si __builtin_ia32_psrad128 (v4si, v4si)
33502     v2di __builtin_ia32_pslldqi128 (v2di, int)
33503     v8hi __builtin_ia32_psllwi128 (v8hi, int)
33504     v4si __builtin_ia32_pslldi128 (v4si, int)
33505     v2di __builtin_ia32_psllqi128 (v2di, int)
33506     v2di __builtin_ia32_psrldqi128 (v2di, int)
33507     v8hi __builtin_ia32_psrlwi128 (v8hi, int)
33508     v4si __builtin_ia32_psrldi128 (v4si, int)
33509     v2di __builtin_ia32_psrlqi128 (v2di, int)
33510     v8hi __builtin_ia32_psrawi128 (v8hi, int)
33511     v4si __builtin_ia32_psradi128 (v4si, int)
33512     v4si __builtin_ia32_pmaddwd128 (v8hi, v8hi)
33513     v2di __builtin_ia32_movq128 (v2di)
33514
33515 The following built-in functions are available when `-msse3' is used.
33516All of them generate the machine instruction that is part of the name.
33517
33518     v2df __builtin_ia32_addsubpd (v2df, v2df)
33519     v4sf __builtin_ia32_addsubps (v4sf, v4sf)
33520     v2df __builtin_ia32_haddpd (v2df, v2df)
33521     v4sf __builtin_ia32_haddps (v4sf, v4sf)
33522     v2df __builtin_ia32_hsubpd (v2df, v2df)
33523     v4sf __builtin_ia32_hsubps (v4sf, v4sf)
33524     v16qi __builtin_ia32_lddqu (char const *)
33525     void __builtin_ia32_monitor (void *, unsigned int, unsigned int)
33526     v2df __builtin_ia32_movddup (v2df)
33527     v4sf __builtin_ia32_movshdup (v4sf)
33528     v4sf __builtin_ia32_movsldup (v4sf)
33529     void __builtin_ia32_mwait (unsigned int, unsigned int)
33530
33531 The following built-in functions are available when `-msse3' is used.
33532
33533`v2df __builtin_ia32_loadddup (double const *)'
33534     Generates the `movddup' machine instruction as a load from memory.
33535
33536 The following built-in functions are available when `-mssse3' is used.
33537All of them generate the machine instruction that is part of the name
33538with MMX registers.
33539
33540     v2si __builtin_ia32_phaddd (v2si, v2si)
33541     v4hi __builtin_ia32_phaddw (v4hi, v4hi)
33542     v4hi __builtin_ia32_phaddsw (v4hi, v4hi)
33543     v2si __builtin_ia32_phsubd (v2si, v2si)
33544     v4hi __builtin_ia32_phsubw (v4hi, v4hi)
33545     v4hi __builtin_ia32_phsubsw (v4hi, v4hi)
33546     v4hi __builtin_ia32_pmaddubsw (v8qi, v8qi)
33547     v4hi __builtin_ia32_pmulhrsw (v4hi, v4hi)
33548     v8qi __builtin_ia32_pshufb (v8qi, v8qi)
33549     v8qi __builtin_ia32_psignb (v8qi, v8qi)
33550     v2si __builtin_ia32_psignd (v2si, v2si)
33551     v4hi __builtin_ia32_psignw (v4hi, v4hi)
33552     v1di __builtin_ia32_palignr (v1di, v1di, int)
33553     v8qi __builtin_ia32_pabsb (v8qi)
33554     v2si __builtin_ia32_pabsd (v2si)
33555     v4hi __builtin_ia32_pabsw (v4hi)
33556
33557 The following built-in functions are available when `-mssse3' is used.
33558All of them generate the machine instruction that is part of the name
33559with SSE registers.
33560
33561     v4si __builtin_ia32_phaddd128 (v4si, v4si)
33562     v8hi __builtin_ia32_phaddw128 (v8hi, v8hi)
33563     v8hi __builtin_ia32_phaddsw128 (v8hi, v8hi)
33564     v4si __builtin_ia32_phsubd128 (v4si, v4si)
33565     v8hi __builtin_ia32_phsubw128 (v8hi, v8hi)
33566     v8hi __builtin_ia32_phsubsw128 (v8hi, v8hi)
33567     v8hi __builtin_ia32_pmaddubsw128 (v16qi, v16qi)
33568     v8hi __builtin_ia32_pmulhrsw128 (v8hi, v8hi)
33569     v16qi __builtin_ia32_pshufb128 (v16qi, v16qi)
33570     v16qi __builtin_ia32_psignb128 (v16qi, v16qi)
33571     v4si __builtin_ia32_psignd128 (v4si, v4si)
33572     v8hi __builtin_ia32_psignw128 (v8hi, v8hi)
33573     v2di __builtin_ia32_palignr128 (v2di, v2di, int)
33574     v16qi __builtin_ia32_pabsb128 (v16qi)
33575     v4si __builtin_ia32_pabsd128 (v4si)
33576     v8hi __builtin_ia32_pabsw128 (v8hi)
33577
33578 The following built-in functions are available when `-msse4.1' is
33579used.  All of them generate the machine instruction that is part of the
33580name.
33581
33582     v2df __builtin_ia32_blendpd (v2df, v2df, const int)
33583     v4sf __builtin_ia32_blendps (v4sf, v4sf, const int)
33584     v2df __builtin_ia32_blendvpd (v2df, v2df, v2df)
33585     v4sf __builtin_ia32_blendvps (v4sf, v4sf, v4sf)
33586     v2df __builtin_ia32_dppd (v2df, v2df, const int)
33587     v4sf __builtin_ia32_dpps (v4sf, v4sf, const int)
33588     v4sf __builtin_ia32_insertps128 (v4sf, v4sf, const int)
33589     v2di __builtin_ia32_movntdqa (v2di *);
33590     v16qi __builtin_ia32_mpsadbw128 (v16qi, v16qi, const int)
33591     v8hi __builtin_ia32_packusdw128 (v4si, v4si)
33592     v16qi __builtin_ia32_pblendvb128 (v16qi, v16qi, v16qi)
33593     v8hi __builtin_ia32_pblendw128 (v8hi, v8hi, const int)
33594     v2di __builtin_ia32_pcmpeqq (v2di, v2di)
33595     v8hi __builtin_ia32_phminposuw128 (v8hi)
33596     v16qi __builtin_ia32_pmaxsb128 (v16qi, v16qi)
33597     v4si __builtin_ia32_pmaxsd128 (v4si, v4si)
33598     v4si __builtin_ia32_pmaxud128 (v4si, v4si)
33599     v8hi __builtin_ia32_pmaxuw128 (v8hi, v8hi)
33600     v16qi __builtin_ia32_pminsb128 (v16qi, v16qi)
33601     v4si __builtin_ia32_pminsd128 (v4si, v4si)
33602     v4si __builtin_ia32_pminud128 (v4si, v4si)
33603     v8hi __builtin_ia32_pminuw128 (v8hi, v8hi)
33604     v4si __builtin_ia32_pmovsxbd128 (v16qi)
33605     v2di __builtin_ia32_pmovsxbq128 (v16qi)
33606     v8hi __builtin_ia32_pmovsxbw128 (v16qi)
33607     v2di __builtin_ia32_pmovsxdq128 (v4si)
33608     v4si __builtin_ia32_pmovsxwd128 (v8hi)
33609     v2di __builtin_ia32_pmovsxwq128 (v8hi)
33610     v4si __builtin_ia32_pmovzxbd128 (v16qi)
33611     v2di __builtin_ia32_pmovzxbq128 (v16qi)
33612     v8hi __builtin_ia32_pmovzxbw128 (v16qi)
33613     v2di __builtin_ia32_pmovzxdq128 (v4si)
33614     v4si __builtin_ia32_pmovzxwd128 (v8hi)
33615     v2di __builtin_ia32_pmovzxwq128 (v8hi)
33616     v2di __builtin_ia32_pmuldq128 (v4si, v4si)
33617     v4si __builtin_ia32_pmulld128 (v4si, v4si)
33618     int __builtin_ia32_ptestc128 (v2di, v2di)
33619     int __builtin_ia32_ptestnzc128 (v2di, v2di)
33620     int __builtin_ia32_ptestz128 (v2di, v2di)
33621     v2df __builtin_ia32_roundpd (v2df, const int)
33622     v4sf __builtin_ia32_roundps (v4sf, const int)
33623     v2df __builtin_ia32_roundsd (v2df, v2df, const int)
33624     v4sf __builtin_ia32_roundss (v4sf, v4sf, const int)
33625
33626 The following built-in functions are available when `-msse4.1' is used.
33627
33628`v4sf __builtin_ia32_vec_set_v4sf (v4sf, float, const int)'
33629     Generates the `insertps' machine instruction.
33630
33631`int __builtin_ia32_vec_ext_v16qi (v16qi, const int)'
33632     Generates the `pextrb' machine instruction.
33633
33634`v16qi __builtin_ia32_vec_set_v16qi (v16qi, int, const int)'
33635     Generates the `pinsrb' machine instruction.
33636
33637`v4si __builtin_ia32_vec_set_v4si (v4si, int, const int)'
33638     Generates the `pinsrd' machine instruction.
33639
33640`v2di __builtin_ia32_vec_set_v2di (v2di, long long, const int)'
33641     Generates the `pinsrq' machine instruction in 64bit mode.
33642
33643 The following built-in functions are changed to generate new SSE4.1
33644instructions when `-msse4.1' is used.
33645
33646`float __builtin_ia32_vec_ext_v4sf (v4sf, const int)'
33647     Generates the `extractps' machine instruction.
33648
33649`int __builtin_ia32_vec_ext_v4si (v4si, const int)'
33650     Generates the `pextrd' machine instruction.
33651
33652`long long __builtin_ia32_vec_ext_v2di (v2di, const int)'
33653     Generates the `pextrq' machine instruction in 64bit mode.
33654
33655 The following built-in functions are available when `-msse4.2' is
33656used.  All of them generate the machine instruction that is part of the
33657name.
33658
33659     v16qi __builtin_ia32_pcmpestrm128 (v16qi, int, v16qi, int, const int)
33660     int __builtin_ia32_pcmpestri128 (v16qi, int, v16qi, int, const int)
33661     int __builtin_ia32_pcmpestria128 (v16qi, int, v16qi, int, const int)
33662     int __builtin_ia32_pcmpestric128 (v16qi, int, v16qi, int, const int)
33663     int __builtin_ia32_pcmpestrio128 (v16qi, int, v16qi, int, const int)
33664     int __builtin_ia32_pcmpestris128 (v16qi, int, v16qi, int, const int)
33665     int __builtin_ia32_pcmpestriz128 (v16qi, int, v16qi, int, const int)
33666     v16qi __builtin_ia32_pcmpistrm128 (v16qi, v16qi, const int)
33667     int __builtin_ia32_pcmpistri128 (v16qi, v16qi, const int)
33668     int __builtin_ia32_pcmpistria128 (v16qi, v16qi, const int)
33669     int __builtin_ia32_pcmpistric128 (v16qi, v16qi, const int)
33670     int __builtin_ia32_pcmpistrio128 (v16qi, v16qi, const int)
33671     int __builtin_ia32_pcmpistris128 (v16qi, v16qi, const int)
33672     int __builtin_ia32_pcmpistriz128 (v16qi, v16qi, const int)
33673     v2di __builtin_ia32_pcmpgtq (v2di, v2di)
33674
33675 The following built-in functions are available when `-msse4.2' is used.
33676
33677`unsigned int __builtin_ia32_crc32qi (unsigned int, unsigned char)'
33678     Generates the `crc32b' machine instruction.
33679
33680`unsigned int __builtin_ia32_crc32hi (unsigned int, unsigned short)'
33681     Generates the `crc32w' machine instruction.
33682
33683`unsigned int __builtin_ia32_crc32si (unsigned int, unsigned int)'
33684     Generates the `crc32l' machine instruction.
33685
33686`unsigned long long __builtin_ia32_crc32di (unsigned long long, unsigned long long)'
33687     Generates the `crc32q' machine instruction.
33688
33689 The following built-in functions are changed to generate new SSE4.2
33690instructions when `-msse4.2' is used.
33691
33692`int __builtin_popcount (unsigned int)'
33693     Generates the `popcntl' machine instruction.
33694
33695`int __builtin_popcountl (unsigned long)'
33696     Generates the `popcntl' or `popcntq' machine instruction,
33697     depending on the size of `unsigned long'.
33698
33699`int __builtin_popcountll (unsigned long long)'
33700     Generates the `popcntq' machine instruction.
33701
33702 The following built-in functions are available when `-mavx' is used.
33703All of them generate the machine instruction that is part of the name.
33704
33705     v4df __builtin_ia32_addpd256 (v4df,v4df)
33706     v8sf __builtin_ia32_addps256 (v8sf,v8sf)
33707     v4df __builtin_ia32_addsubpd256 (v4df,v4df)
33708     v8sf __builtin_ia32_addsubps256 (v8sf,v8sf)
33709     v4df __builtin_ia32_andnpd256 (v4df,v4df)
33710     v8sf __builtin_ia32_andnps256 (v8sf,v8sf)
33711     v4df __builtin_ia32_andpd256 (v4df,v4df)
33712     v8sf __builtin_ia32_andps256 (v8sf,v8sf)
33713     v4df __builtin_ia32_blendpd256 (v4df,v4df,int)
33714     v8sf __builtin_ia32_blendps256 (v8sf,v8sf,int)
33715     v4df __builtin_ia32_blendvpd256 (v4df,v4df,v4df)
33716     v8sf __builtin_ia32_blendvps256 (v8sf,v8sf,v8sf)
33717     v2df __builtin_ia32_cmppd (v2df,v2df,int)
33718     v4df __builtin_ia32_cmppd256 (v4df,v4df,int)
33719     v4sf __builtin_ia32_cmpps (v4sf,v4sf,int)
33720     v8sf __builtin_ia32_cmpps256 (v8sf,v8sf,int)
33721     v2df __builtin_ia32_cmpsd (v2df,v2df,int)
33722     v4sf __builtin_ia32_cmpss (v4sf,v4sf,int)
33723     v4df __builtin_ia32_cvtdq2pd256 (v4si)
33724     v8sf __builtin_ia32_cvtdq2ps256 (v8si)
33725     v4si __builtin_ia32_cvtpd2dq256 (v4df)
33726     v4sf __builtin_ia32_cvtpd2ps256 (v4df)
33727     v8si __builtin_ia32_cvtps2dq256 (v8sf)
33728     v4df __builtin_ia32_cvtps2pd256 (v4sf)
33729     v4si __builtin_ia32_cvttpd2dq256 (v4df)
33730     v8si __builtin_ia32_cvttps2dq256 (v8sf)
33731     v4df __builtin_ia32_divpd256 (v4df,v4df)
33732     v8sf __builtin_ia32_divps256 (v8sf,v8sf)
33733     v8sf __builtin_ia32_dpps256 (v8sf,v8sf,int)
33734     v4df __builtin_ia32_haddpd256 (v4df,v4df)
33735     v8sf __builtin_ia32_haddps256 (v8sf,v8sf)
33736     v4df __builtin_ia32_hsubpd256 (v4df,v4df)
33737     v8sf __builtin_ia32_hsubps256 (v8sf,v8sf)
33738     v32qi __builtin_ia32_lddqu256 (pcchar)
33739     v32qi __builtin_ia32_loaddqu256 (pcchar)
33740     v4df __builtin_ia32_loadupd256 (pcdouble)
33741     v8sf __builtin_ia32_loadups256 (pcfloat)
33742     v2df __builtin_ia32_maskloadpd (pcv2df,v2df)
33743     v4df __builtin_ia32_maskloadpd256 (pcv4df,v4df)
33744     v4sf __builtin_ia32_maskloadps (pcv4sf,v4sf)
33745     v8sf __builtin_ia32_maskloadps256 (pcv8sf,v8sf)
33746     void __builtin_ia32_maskstorepd (pv2df,v2df,v2df)
33747     void __builtin_ia32_maskstorepd256 (pv4df,v4df,v4df)
33748     void __builtin_ia32_maskstoreps (pv4sf,v4sf,v4sf)
33749     void __builtin_ia32_maskstoreps256 (pv8sf,v8sf,v8sf)
33750     v4df __builtin_ia32_maxpd256 (v4df,v4df)
33751     v8sf __builtin_ia32_maxps256 (v8sf,v8sf)
33752     v4df __builtin_ia32_minpd256 (v4df,v4df)
33753     v8sf __builtin_ia32_minps256 (v8sf,v8sf)
33754     v4df __builtin_ia32_movddup256 (v4df)
33755     int __builtin_ia32_movmskpd256 (v4df)
33756     int __builtin_ia32_movmskps256 (v8sf)
33757     v8sf __builtin_ia32_movshdup256 (v8sf)
33758     v8sf __builtin_ia32_movsldup256 (v8sf)
33759     v4df __builtin_ia32_mulpd256 (v4df,v4df)
33760     v8sf __builtin_ia32_mulps256 (v8sf,v8sf)
33761     v4df __builtin_ia32_orpd256 (v4df,v4df)
33762     v8sf __builtin_ia32_orps256 (v8sf,v8sf)
33763     v2df __builtin_ia32_pd_pd256 (v4df)
33764     v4df __builtin_ia32_pd256_pd (v2df)
33765     v4sf __builtin_ia32_ps_ps256 (v8sf)
33766     v8sf __builtin_ia32_ps256_ps (v4sf)
33767     int __builtin_ia32_ptestc256 (v4di,v4di,ptest)
33768     int __builtin_ia32_ptestnzc256 (v4di,v4di,ptest)
33769     int __builtin_ia32_ptestz256 (v4di,v4di,ptest)
33770     v8sf __builtin_ia32_rcpps256 (v8sf)
33771     v4df __builtin_ia32_roundpd256 (v4df,int)
33772     v8sf __builtin_ia32_roundps256 (v8sf,int)
33773     v8sf __builtin_ia32_rsqrtps_nr256 (v8sf)
33774     v8sf __builtin_ia32_rsqrtps256 (v8sf)
33775     v4df __builtin_ia32_shufpd256 (v4df,v4df,int)
33776     v8sf __builtin_ia32_shufps256 (v8sf,v8sf,int)
33777     v4si __builtin_ia32_si_si256 (v8si)
33778     v8si __builtin_ia32_si256_si (v4si)
33779     v4df __builtin_ia32_sqrtpd256 (v4df)
33780     v8sf __builtin_ia32_sqrtps_nr256 (v8sf)
33781     v8sf __builtin_ia32_sqrtps256 (v8sf)
33782     void __builtin_ia32_storedqu256 (pchar,v32qi)
33783     void __builtin_ia32_storeupd256 (pdouble,v4df)
33784     void __builtin_ia32_storeups256 (pfloat,v8sf)
33785     v4df __builtin_ia32_subpd256 (v4df,v4df)
33786     v8sf __builtin_ia32_subps256 (v8sf,v8sf)
33787     v4df __builtin_ia32_unpckhpd256 (v4df,v4df)
33788     v8sf __builtin_ia32_unpckhps256 (v8sf,v8sf)
33789     v4df __builtin_ia32_unpcklpd256 (v4df,v4df)
33790     v8sf __builtin_ia32_unpcklps256 (v8sf,v8sf)
33791     v4df __builtin_ia32_vbroadcastf128_pd256 (pcv2df)
33792     v8sf __builtin_ia32_vbroadcastf128_ps256 (pcv4sf)
33793     v4df __builtin_ia32_vbroadcastsd256 (pcdouble)
33794     v4sf __builtin_ia32_vbroadcastss (pcfloat)
33795     v8sf __builtin_ia32_vbroadcastss256 (pcfloat)
33796     v2df __builtin_ia32_vextractf128_pd256 (v4df,int)
33797     v4sf __builtin_ia32_vextractf128_ps256 (v8sf,int)
33798     v4si __builtin_ia32_vextractf128_si256 (v8si,int)
33799     v4df __builtin_ia32_vinsertf128_pd256 (v4df,v2df,int)
33800     v8sf __builtin_ia32_vinsertf128_ps256 (v8sf,v4sf,int)
33801     v8si __builtin_ia32_vinsertf128_si256 (v8si,v4si,int)
33802     v4df __builtin_ia32_vperm2f128_pd256 (v4df,v4df,int)
33803     v8sf __builtin_ia32_vperm2f128_ps256 (v8sf,v8sf,int)
33804     v8si __builtin_ia32_vperm2f128_si256 (v8si,v8si,int)
33805     v2df __builtin_ia32_vpermil2pd (v2df,v2df,v2di,int)
33806     v4df __builtin_ia32_vpermil2pd256 (v4df,v4df,v4di,int)
33807     v4sf __builtin_ia32_vpermil2ps (v4sf,v4sf,v4si,int)
33808     v8sf __builtin_ia32_vpermil2ps256 (v8sf,v8sf,v8si,int)
33809     v2df __builtin_ia32_vpermilpd (v2df,int)
33810     v4df __builtin_ia32_vpermilpd256 (v4df,int)
33811     v4sf __builtin_ia32_vpermilps (v4sf,int)
33812     v8sf __builtin_ia32_vpermilps256 (v8sf,int)
33813     v2df __builtin_ia32_vpermilvarpd (v2df,v2di)
33814     v4df __builtin_ia32_vpermilvarpd256 (v4df,v4di)
33815     v4sf __builtin_ia32_vpermilvarps (v4sf,v4si)
33816     v8sf __builtin_ia32_vpermilvarps256 (v8sf,v8si)
33817     int __builtin_ia32_vtestcpd (v2df,v2df,ptest)
33818     int __builtin_ia32_vtestcpd256 (v4df,v4df,ptest)
33819     int __builtin_ia32_vtestcps (v4sf,v4sf,ptest)
33820     int __builtin_ia32_vtestcps256 (v8sf,v8sf,ptest)
33821     int __builtin_ia32_vtestnzcpd (v2df,v2df,ptest)
33822     int __builtin_ia32_vtestnzcpd256 (v4df,v4df,ptest)
33823     int __builtin_ia32_vtestnzcps (v4sf,v4sf,ptest)
33824     int __builtin_ia32_vtestnzcps256 (v8sf,v8sf,ptest)
33825     int __builtin_ia32_vtestzpd (v2df,v2df,ptest)
33826     int __builtin_ia32_vtestzpd256 (v4df,v4df,ptest)
33827     int __builtin_ia32_vtestzps (v4sf,v4sf,ptest)
33828     int __builtin_ia32_vtestzps256 (v8sf,v8sf,ptest)
33829     void __builtin_ia32_vzeroall (void)
33830     void __builtin_ia32_vzeroupper (void)
33831     v4df __builtin_ia32_xorpd256 (v4df,v4df)
33832     v8sf __builtin_ia32_xorps256 (v8sf,v8sf)
33833
33834 The following built-in functions are available when `-maes' is used.
33835All of them generate the machine instruction that is part of the name.
33836
33837     v2di __builtin_ia32_aesenc128 (v2di, v2di)
33838     v2di __builtin_ia32_aesenclast128 (v2di, v2di)
33839     v2di __builtin_ia32_aesdec128 (v2di, v2di)
33840     v2di __builtin_ia32_aesdeclast128 (v2di, v2di)
33841     v2di __builtin_ia32_aeskeygenassist128 (v2di, const int)
33842     v2di __builtin_ia32_aesimc128 (v2di)
33843
33844 The following built-in function is available when `-mpclmul' is used.
33845
33846`v2di __builtin_ia32_pclmulqdq128 (v2di, v2di, const int)'
33847     Generates the `pclmulqdq' machine instruction.
33848
33849 The following built-in function is available when `-mfsgsbase' is
33850used.  All of them generate the machine instruction that is part of the
33851name.
33852
33853     unsigned int __builtin_ia32_rdfsbase32 (void)
33854     unsigned long long __builtin_ia32_rdfsbase64 (void)
33855     unsigned int __builtin_ia32_rdgsbase32 (void)
33856     unsigned long long __builtin_ia32_rdgsbase64 (void)
33857     void _writefsbase_u32 (unsigned int)
33858     void _writefsbase_u64 (unsigned long long)
33859     void _writegsbase_u32 (unsigned int)
33860     void _writegsbase_u64 (unsigned long long)
33861
33862 The following built-in function is available when `-mrdrnd' is used.
33863All of them generate the machine instruction that is part of the name.
33864
33865     unsigned int __builtin_ia32_rdrand16_step (unsigned short *)
33866     unsigned int __builtin_ia32_rdrand32_step (unsigned int *)
33867     unsigned int __builtin_ia32_rdrand64_step (unsigned long long *)
33868
33869 The following built-in functions are available when `-msse4a' is used.
33870All of them generate the machine instruction that is part of the name.
33871
33872     void __builtin_ia32_movntsd (double *, v2df)
33873     void __builtin_ia32_movntss (float *, v4sf)
33874     v2di __builtin_ia32_extrq  (v2di, v16qi)
33875     v2di __builtin_ia32_extrqi (v2di, const unsigned int, const unsigned int)
33876     v2di __builtin_ia32_insertq (v2di, v2di)
33877     v2di __builtin_ia32_insertqi (v2di, v2di, const unsigned int, const unsigned int)
33878
33879 The following built-in functions are available when `-mxop' is used.
33880     v2df __builtin_ia32_vfrczpd (v2df)
33881     v4sf __builtin_ia32_vfrczps (v4sf)
33882     v2df __builtin_ia32_vfrczsd (v2df, v2df)
33883     v4sf __builtin_ia32_vfrczss (v4sf, v4sf)
33884     v4df __builtin_ia32_vfrczpd256 (v4df)
33885     v8sf __builtin_ia32_vfrczps256 (v8sf)
33886     v2di __builtin_ia32_vpcmov (v2di, v2di, v2di)
33887     v2di __builtin_ia32_vpcmov_v2di (v2di, v2di, v2di)
33888     v4si __builtin_ia32_vpcmov_v4si (v4si, v4si, v4si)
33889     v8hi __builtin_ia32_vpcmov_v8hi (v8hi, v8hi, v8hi)
33890     v16qi __builtin_ia32_vpcmov_v16qi (v16qi, v16qi, v16qi)
33891     v2df __builtin_ia32_vpcmov_v2df (v2df, v2df, v2df)
33892     v4sf __builtin_ia32_vpcmov_v4sf (v4sf, v4sf, v4sf)
33893     v4di __builtin_ia32_vpcmov_v4di256 (v4di, v4di, v4di)
33894     v8si __builtin_ia32_vpcmov_v8si256 (v8si, v8si, v8si)
33895     v16hi __builtin_ia32_vpcmov_v16hi256 (v16hi, v16hi, v16hi)
33896     v32qi __builtin_ia32_vpcmov_v32qi256 (v32qi, v32qi, v32qi)
33897     v4df __builtin_ia32_vpcmov_v4df256 (v4df, v4df, v4df)
33898     v8sf __builtin_ia32_vpcmov_v8sf256 (v8sf, v8sf, v8sf)
33899     v16qi __builtin_ia32_vpcomeqb (v16qi, v16qi)
33900     v8hi __builtin_ia32_vpcomeqw (v8hi, v8hi)
33901     v4si __builtin_ia32_vpcomeqd (v4si, v4si)
33902     v2di __builtin_ia32_vpcomeqq (v2di, v2di)
33903     v16qi __builtin_ia32_vpcomequb (v16qi, v16qi)
33904     v4si __builtin_ia32_vpcomequd (v4si, v4si)
33905     v2di __builtin_ia32_vpcomequq (v2di, v2di)
33906     v8hi __builtin_ia32_vpcomequw (v8hi, v8hi)
33907     v8hi __builtin_ia32_vpcomeqw (v8hi, v8hi)
33908     v16qi __builtin_ia32_vpcomfalseb (v16qi, v16qi)
33909     v4si __builtin_ia32_vpcomfalsed (v4si, v4si)
33910     v2di __builtin_ia32_vpcomfalseq (v2di, v2di)
33911     v16qi __builtin_ia32_vpcomfalseub (v16qi, v16qi)
33912     v4si __builtin_ia32_vpcomfalseud (v4si, v4si)
33913     v2di __builtin_ia32_vpcomfalseuq (v2di, v2di)
33914     v8hi __builtin_ia32_vpcomfalseuw (v8hi, v8hi)
33915     v8hi __builtin_ia32_vpcomfalsew (v8hi, v8hi)
33916     v16qi __builtin_ia32_vpcomgeb (v16qi, v16qi)
33917     v4si __builtin_ia32_vpcomged (v4si, v4si)
33918     v2di __builtin_ia32_vpcomgeq (v2di, v2di)
33919     v16qi __builtin_ia32_vpcomgeub (v16qi, v16qi)
33920     v4si __builtin_ia32_vpcomgeud (v4si, v4si)
33921     v2di __builtin_ia32_vpcomgeuq (v2di, v2di)
33922     v8hi __builtin_ia32_vpcomgeuw (v8hi, v8hi)
33923     v8hi __builtin_ia32_vpcomgew (v8hi, v8hi)
33924     v16qi __builtin_ia32_vpcomgtb (v16qi, v16qi)
33925     v4si __builtin_ia32_vpcomgtd (v4si, v4si)
33926     v2di __builtin_ia32_vpcomgtq (v2di, v2di)
33927     v16qi __builtin_ia32_vpcomgtub (v16qi, v16qi)
33928     v4si __builtin_ia32_vpcomgtud (v4si, v4si)
33929     v2di __builtin_ia32_vpcomgtuq (v2di, v2di)
33930     v8hi __builtin_ia32_vpcomgtuw (v8hi, v8hi)
33931     v8hi __builtin_ia32_vpcomgtw (v8hi, v8hi)
33932     v16qi __builtin_ia32_vpcomleb (v16qi, v16qi)
33933     v4si __builtin_ia32_vpcomled (v4si, v4si)
33934     v2di __builtin_ia32_vpcomleq (v2di, v2di)
33935     v16qi __builtin_ia32_vpcomleub (v16qi, v16qi)
33936     v4si __builtin_ia32_vpcomleud (v4si, v4si)
33937     v2di __builtin_ia32_vpcomleuq (v2di, v2di)
33938     v8hi __builtin_ia32_vpcomleuw (v8hi, v8hi)
33939     v8hi __builtin_ia32_vpcomlew (v8hi, v8hi)
33940     v16qi __builtin_ia32_vpcomltb (v16qi, v16qi)
33941     v4si __builtin_ia32_vpcomltd (v4si, v4si)
33942     v2di __builtin_ia32_vpcomltq (v2di, v2di)
33943     v16qi __builtin_ia32_vpcomltub (v16qi, v16qi)
33944     v4si __builtin_ia32_vpcomltud (v4si, v4si)
33945     v2di __builtin_ia32_vpcomltuq (v2di, v2di)
33946     v8hi __builtin_ia32_vpcomltuw (v8hi, v8hi)
33947     v8hi __builtin_ia32_vpcomltw (v8hi, v8hi)
33948     v16qi __builtin_ia32_vpcomneb (v16qi, v16qi)
33949     v4si __builtin_ia32_vpcomned (v4si, v4si)
33950     v2di __builtin_ia32_vpcomneq (v2di, v2di)
33951     v16qi __builtin_ia32_vpcomneub (v16qi, v16qi)
33952     v4si __builtin_ia32_vpcomneud (v4si, v4si)
33953     v2di __builtin_ia32_vpcomneuq (v2di, v2di)
33954     v8hi __builtin_ia32_vpcomneuw (v8hi, v8hi)
33955     v8hi __builtin_ia32_vpcomnew (v8hi, v8hi)
33956     v16qi __builtin_ia32_vpcomtrueb (v16qi, v16qi)
33957     v4si __builtin_ia32_vpcomtrued (v4si, v4si)
33958     v2di __builtin_ia32_vpcomtrueq (v2di, v2di)
33959     v16qi __builtin_ia32_vpcomtrueub (v16qi, v16qi)
33960     v4si __builtin_ia32_vpcomtrueud (v4si, v4si)
33961     v2di __builtin_ia32_vpcomtrueuq (v2di, v2di)
33962     v8hi __builtin_ia32_vpcomtrueuw (v8hi, v8hi)
33963     v8hi __builtin_ia32_vpcomtruew (v8hi, v8hi)
33964     v4si __builtin_ia32_vphaddbd (v16qi)
33965     v2di __builtin_ia32_vphaddbq (v16qi)
33966     v8hi __builtin_ia32_vphaddbw (v16qi)
33967     v2di __builtin_ia32_vphadddq (v4si)
33968     v4si __builtin_ia32_vphaddubd (v16qi)
33969     v2di __builtin_ia32_vphaddubq (v16qi)
33970     v8hi __builtin_ia32_vphaddubw (v16qi)
33971     v2di __builtin_ia32_vphaddudq (v4si)
33972     v4si __builtin_ia32_vphadduwd (v8hi)
33973     v2di __builtin_ia32_vphadduwq (v8hi)
33974     v4si __builtin_ia32_vphaddwd (v8hi)
33975     v2di __builtin_ia32_vphaddwq (v8hi)
33976     v8hi __builtin_ia32_vphsubbw (v16qi)
33977     v2di __builtin_ia32_vphsubdq (v4si)
33978     v4si __builtin_ia32_vphsubwd (v8hi)
33979     v4si __builtin_ia32_vpmacsdd (v4si, v4si, v4si)
33980     v2di __builtin_ia32_vpmacsdqh (v4si, v4si, v2di)
33981     v2di __builtin_ia32_vpmacsdql (v4si, v4si, v2di)
33982     v4si __builtin_ia32_vpmacssdd (v4si, v4si, v4si)
33983     v2di __builtin_ia32_vpmacssdqh (v4si, v4si, v2di)
33984     v2di __builtin_ia32_vpmacssdql (v4si, v4si, v2di)
33985     v4si __builtin_ia32_vpmacsswd (v8hi, v8hi, v4si)
33986     v8hi __builtin_ia32_vpmacssww (v8hi, v8hi, v8hi)
33987     v4si __builtin_ia32_vpmacswd (v8hi, v8hi, v4si)
33988     v8hi __builtin_ia32_vpmacsww (v8hi, v8hi, v8hi)
33989     v4si __builtin_ia32_vpmadcsswd (v8hi, v8hi, v4si)
33990     v4si __builtin_ia32_vpmadcswd (v8hi, v8hi, v4si)
33991     v16qi __builtin_ia32_vpperm (v16qi, v16qi, v16qi)
33992     v16qi __builtin_ia32_vprotb (v16qi, v16qi)
33993     v4si __builtin_ia32_vprotd (v4si, v4si)
33994     v2di __builtin_ia32_vprotq (v2di, v2di)
33995     v8hi __builtin_ia32_vprotw (v8hi, v8hi)
33996     v16qi __builtin_ia32_vpshab (v16qi, v16qi)
33997     v4si __builtin_ia32_vpshad (v4si, v4si)
33998     v2di __builtin_ia32_vpshaq (v2di, v2di)
33999     v8hi __builtin_ia32_vpshaw (v8hi, v8hi)
34000     v16qi __builtin_ia32_vpshlb (v16qi, v16qi)
34001     v4si __builtin_ia32_vpshld (v4si, v4si)
34002     v2di __builtin_ia32_vpshlq (v2di, v2di)
34003     v8hi __builtin_ia32_vpshlw (v8hi, v8hi)
34004
34005 The following built-in functions are available when `-mfma4' is used.
34006All of them generate the machine instruction that is part of the name
34007with MMX registers.
34008
34009     v2df __builtin_ia32_fmaddpd (v2df, v2df, v2df)
34010     v4sf __builtin_ia32_fmaddps (v4sf, v4sf, v4sf)
34011     v2df __builtin_ia32_fmaddsd (v2df, v2df, v2df)
34012     v4sf __builtin_ia32_fmaddss (v4sf, v4sf, v4sf)
34013     v2df __builtin_ia32_fmsubpd (v2df, v2df, v2df)
34014     v4sf __builtin_ia32_fmsubps (v4sf, v4sf, v4sf)
34015     v2df __builtin_ia32_fmsubsd (v2df, v2df, v2df)
34016     v4sf __builtin_ia32_fmsubss (v4sf, v4sf, v4sf)
34017     v2df __builtin_ia32_fnmaddpd (v2df, v2df, v2df)
34018     v4sf __builtin_ia32_fnmaddps (v4sf, v4sf, v4sf)
34019     v2df __builtin_ia32_fnmaddsd (v2df, v2df, v2df)
34020     v4sf __builtin_ia32_fnmaddss (v4sf, v4sf, v4sf)
34021     v2df __builtin_ia32_fnmsubpd (v2df, v2df, v2df)
34022     v4sf __builtin_ia32_fnmsubps (v4sf, v4sf, v4sf)
34023     v2df __builtin_ia32_fnmsubsd (v2df, v2df, v2df)
34024     v4sf __builtin_ia32_fnmsubss (v4sf, v4sf, v4sf)
34025     v2df __builtin_ia32_fmaddsubpd  (v2df, v2df, v2df)
34026     v4sf __builtin_ia32_fmaddsubps  (v4sf, v4sf, v4sf)
34027     v2df __builtin_ia32_fmsubaddpd  (v2df, v2df, v2df)
34028     v4sf __builtin_ia32_fmsubaddps  (v4sf, v4sf, v4sf)
34029     v4df __builtin_ia32_fmaddpd256 (v4df, v4df, v4df)
34030     v8sf __builtin_ia32_fmaddps256 (v8sf, v8sf, v8sf)
34031     v4df __builtin_ia32_fmsubpd256 (v4df, v4df, v4df)
34032     v8sf __builtin_ia32_fmsubps256 (v8sf, v8sf, v8sf)
34033     v4df __builtin_ia32_fnmaddpd256 (v4df, v4df, v4df)
34034     v8sf __builtin_ia32_fnmaddps256 (v8sf, v8sf, v8sf)
34035     v4df __builtin_ia32_fnmsubpd256 (v4df, v4df, v4df)
34036     v8sf __builtin_ia32_fnmsubps256 (v8sf, v8sf, v8sf)
34037     v4df __builtin_ia32_fmaddsubpd256 (v4df, v4df, v4df)
34038     v8sf __builtin_ia32_fmaddsubps256 (v8sf, v8sf, v8sf)
34039     v4df __builtin_ia32_fmsubaddpd256 (v4df, v4df, v4df)
34040     v8sf __builtin_ia32_fmsubaddps256 (v8sf, v8sf, v8sf)
34041
34042 The following built-in functions are available when `-mlwp' is used.
34043
34044     void __builtin_ia32_llwpcb16 (void *);
34045     void __builtin_ia32_llwpcb32 (void *);
34046     void __builtin_ia32_llwpcb64 (void *);
34047     void * __builtin_ia32_llwpcb16 (void);
34048     void * __builtin_ia32_llwpcb32 (void);
34049     void * __builtin_ia32_llwpcb64 (void);
34050     void __builtin_ia32_lwpval16 (unsigned short, unsigned int, unsigned short)
34051     void __builtin_ia32_lwpval32 (unsigned int, unsigned int, unsigned int)
34052     void __builtin_ia32_lwpval64 (unsigned __int64, unsigned int, unsigned int)
34053     unsigned char __builtin_ia32_lwpins16 (unsigned short, unsigned int, unsigned short)
34054     unsigned char __builtin_ia32_lwpins32 (unsigned int, unsigned int, unsigned int)
34055     unsigned char __builtin_ia32_lwpins64 (unsigned __int64, unsigned int, unsigned int)
34056
34057 The following built-in functions are available when `-mbmi' is used.
34058All of them generate the machine instruction that is part of the name.
34059     unsigned int __builtin_ia32_bextr_u32(unsigned int, unsigned int);
34060     unsigned long long __builtin_ia32_bextr_u64 (unsigned long long, unsigned long long);
34061     unsigned short __builtin_ia32_lzcnt_16(unsigned short);
34062     unsigned int __builtin_ia32_lzcnt_u32(unsigned int);
34063     unsigned long long __builtin_ia32_lzcnt_u64 (unsigned long long);
34064
34065 The following built-in functions are available when `-mtbm' is used.
34066Both of them generate the immediate form of the bextr machine
34067instruction.
34068     unsigned int __builtin_ia32_bextri_u32 (unsigned int, const unsigned int);
34069     unsigned long long __builtin_ia32_bextri_u64 (unsigned long long, const unsigned long long);
34070
34071 The following built-in functions are available when `-m3dnow' is used.
34072All of them generate the machine instruction that is part of the name.
34073
34074     void __builtin_ia32_femms (void)
34075     v8qi __builtin_ia32_pavgusb (v8qi, v8qi)
34076     v2si __builtin_ia32_pf2id (v2sf)
34077     v2sf __builtin_ia32_pfacc (v2sf, v2sf)
34078     v2sf __builtin_ia32_pfadd (v2sf, v2sf)
34079     v2si __builtin_ia32_pfcmpeq (v2sf, v2sf)
34080     v2si __builtin_ia32_pfcmpge (v2sf, v2sf)
34081     v2si __builtin_ia32_pfcmpgt (v2sf, v2sf)
34082     v2sf __builtin_ia32_pfmax (v2sf, v2sf)
34083     v2sf __builtin_ia32_pfmin (v2sf, v2sf)
34084     v2sf __builtin_ia32_pfmul (v2sf, v2sf)
34085     v2sf __builtin_ia32_pfrcp (v2sf)
34086     v2sf __builtin_ia32_pfrcpit1 (v2sf, v2sf)
34087     v2sf __builtin_ia32_pfrcpit2 (v2sf, v2sf)
34088     v2sf __builtin_ia32_pfrsqrt (v2sf)
34089     v2sf __builtin_ia32_pfrsqrtit1 (v2sf, v2sf)
34090     v2sf __builtin_ia32_pfsub (v2sf, v2sf)
34091     v2sf __builtin_ia32_pfsubr (v2sf, v2sf)
34092     v2sf __builtin_ia32_pi2fd (v2si)
34093     v4hi __builtin_ia32_pmulhrw (v4hi, v4hi)
34094
34095 The following built-in functions are available when both `-m3dnow' and
34096`-march=athlon' are used.  All of them generate the machine instruction
34097that is part of the name.
34098
34099     v2si __builtin_ia32_pf2iw (v2sf)
34100     v2sf __builtin_ia32_pfnacc (v2sf, v2sf)
34101     v2sf __builtin_ia32_pfpnacc (v2sf, v2sf)
34102     v2sf __builtin_ia32_pi2fw (v2si)
34103     v2sf __builtin_ia32_pswapdsf (v2sf)
34104     v2si __builtin_ia32_pswapdsi (v2si)
34105
34106
34107File: gcc.info,  Node: MIPS DSP Built-in Functions,  Next: MIPS Paired-Single Support,  Prev: X86 Built-in Functions,  Up: Target Builtins
34108
341096.54.7 MIPS DSP Built-in Functions
34110----------------------------------
34111
34112The MIPS DSP Application-Specific Extension (ASE) includes new
34113instructions that are designed to improve the performance of DSP and
34114media applications.  It provides instructions that operate on packed
341158-bit/16-bit integer data, Q7, Q15 and Q31 fractional data.
34116
34117 GCC supports MIPS DSP operations using both the generic vector
34118extensions (*note Vector Extensions::) and a collection of
34119MIPS-specific built-in functions.  Both kinds of support are enabled by
34120the `-mdsp' command-line option.
34121
34122 Revision 2 of the ASE was introduced in the second half of 2006.  This
34123revision adds extra instructions to the original ASE, but is otherwise
34124backwards-compatible with it.  You can select revision 2 using the
34125command-line option `-mdspr2'; this option implies `-mdsp'.
34126
34127 The SCOUNT and POS bits of the DSP control register are global.  The
34128WRDSP, EXTPDP, EXTPDPV and MTHLIP instructions modify the SCOUNT and
34129POS bits.  During optimization, the compiler will not delete these
34130instructions and it will not delete calls to functions containing these
34131instructions.
34132
34133 At present, GCC only provides support for operations on 32-bit
34134vectors.  The vector type associated with 8-bit integer data is usually
34135called `v4i8', the vector type associated with Q7 is usually called
34136`v4q7', the vector type associated with 16-bit integer data is usually
34137called `v2i16', and the vector type associated with Q15 is usually
34138called `v2q15'.  They can be defined in C as follows:
34139
34140     typedef signed char v4i8 __attribute__ ((vector_size(4)));
34141     typedef signed char v4q7 __attribute__ ((vector_size(4)));
34142     typedef short v2i16 __attribute__ ((vector_size(4)));
34143     typedef short v2q15 __attribute__ ((vector_size(4)));
34144
34145 `v4i8', `v4q7', `v2i16' and `v2q15' values are initialized in the same
34146way as aggregates.  For example:
34147
34148     v4i8 a = {1, 2, 3, 4};
34149     v4i8 b;
34150     b = (v4i8) {5, 6, 7, 8};
34151
34152     v2q15 c = {0x0fcb, 0x3a75};
34153     v2q15 d;
34154     d = (v2q15) {0.1234 * 0x1.0p15, 0.4567 * 0x1.0p15};
34155
34156 _Note:_ The CPU's endianness determines the order in which values are
34157packed.  On little-endian targets, the first value is the least
34158significant and the last value is the most significant.  The opposite
34159order applies to big-endian targets.  For example, the code above will
34160set the lowest byte of `a' to `1' on little-endian targets and `4' on
34161big-endian targets.
34162
34163 _Note:_ Q7, Q15 and Q31 values must be initialized with their integer
34164representation.  As shown in this example, the integer representation
34165of a Q7 value can be obtained by multiplying the fractional value by
34166`0x1.0p7'.  The equivalent for Q15 values is to multiply by `0x1.0p15'.
34167The equivalent for Q31 values is to multiply by `0x1.0p31'.
34168
34169 The table below lists the `v4i8' and `v2q15' operations for which
34170hardware support exists.  `a' and `b' are `v4i8' values, and `c' and
34171`d' are `v2q15' values.
34172
34173C code                               MIPS instruction
34174`a + b'                              `addu.qb'
34175`c + d'                              `addq.ph'
34176`a - b'                              `subu.qb'
34177`c - d'                              `subq.ph'
34178
34179 The table below lists the `v2i16' operation for which hardware support
34180exists for the DSP ASE REV 2.  `e' and `f' are `v2i16' values.
34181
34182C code                               MIPS instruction
34183`e * f'                              `mul.ph'
34184
34185 It is easier to describe the DSP built-in functions if we first define
34186the following types:
34187
34188     typedef int q31;
34189     typedef int i32;
34190     typedef unsigned int ui32;
34191     typedef long long a64;
34192
34193 `q31' and `i32' are actually the same as `int', but we use `q31' to
34194indicate a Q31 fractional value and `i32' to indicate a 32-bit integer
34195value.  Similarly, `a64' is the same as `long long', but we use `a64'
34196to indicate values that will be placed in one of the four DSP
34197accumulators (`$ac0', `$ac1', `$ac2' or `$ac3').
34198
34199 Also, some built-in functions prefer or require immediate numbers as
34200parameters, because the corresponding DSP instructions accept both
34201immediate numbers and register operands, or accept immediate numbers
34202only.  The immediate parameters are listed as follows.
34203
34204     imm0_3: 0 to 3.
34205     imm0_7: 0 to 7.
34206     imm0_15: 0 to 15.
34207     imm0_31: 0 to 31.
34208     imm0_63: 0 to 63.
34209     imm0_255: 0 to 255.
34210     imm_n32_31: -32 to 31.
34211     imm_n512_511: -512 to 511.
34212
34213 The following built-in functions map directly to a particular MIPS DSP
34214instruction.  Please refer to the architecture specification for
34215details on what each instruction does.
34216
34217     v2q15 __builtin_mips_addq_ph (v2q15, v2q15)
34218     v2q15 __builtin_mips_addq_s_ph (v2q15, v2q15)
34219     q31 __builtin_mips_addq_s_w (q31, q31)
34220     v4i8 __builtin_mips_addu_qb (v4i8, v4i8)
34221     v4i8 __builtin_mips_addu_s_qb (v4i8, v4i8)
34222     v2q15 __builtin_mips_subq_ph (v2q15, v2q15)
34223     v2q15 __builtin_mips_subq_s_ph (v2q15, v2q15)
34224     q31 __builtin_mips_subq_s_w (q31, q31)
34225     v4i8 __builtin_mips_subu_qb (v4i8, v4i8)
34226     v4i8 __builtin_mips_subu_s_qb (v4i8, v4i8)
34227     i32 __builtin_mips_addsc (i32, i32)
34228     i32 __builtin_mips_addwc (i32, i32)
34229     i32 __builtin_mips_modsub (i32, i32)
34230     i32 __builtin_mips_raddu_w_qb (v4i8)
34231     v2q15 __builtin_mips_absq_s_ph (v2q15)
34232     q31 __builtin_mips_absq_s_w (q31)
34233     v4i8 __builtin_mips_precrq_qb_ph (v2q15, v2q15)
34234     v2q15 __builtin_mips_precrq_ph_w (q31, q31)
34235     v2q15 __builtin_mips_precrq_rs_ph_w (q31, q31)
34236     v4i8 __builtin_mips_precrqu_s_qb_ph (v2q15, v2q15)
34237     q31 __builtin_mips_preceq_w_phl (v2q15)
34238     q31 __builtin_mips_preceq_w_phr (v2q15)
34239     v2q15 __builtin_mips_precequ_ph_qbl (v4i8)
34240     v2q15 __builtin_mips_precequ_ph_qbr (v4i8)
34241     v2q15 __builtin_mips_precequ_ph_qbla (v4i8)
34242     v2q15 __builtin_mips_precequ_ph_qbra (v4i8)
34243     v2q15 __builtin_mips_preceu_ph_qbl (v4i8)
34244     v2q15 __builtin_mips_preceu_ph_qbr (v4i8)
34245     v2q15 __builtin_mips_preceu_ph_qbla (v4i8)
34246     v2q15 __builtin_mips_preceu_ph_qbra (v4i8)
34247     v4i8 __builtin_mips_shll_qb (v4i8, imm0_7)
34248     v4i8 __builtin_mips_shll_qb (v4i8, i32)
34249     v2q15 __builtin_mips_shll_ph (v2q15, imm0_15)
34250     v2q15 __builtin_mips_shll_ph (v2q15, i32)
34251     v2q15 __builtin_mips_shll_s_ph (v2q15, imm0_15)
34252     v2q15 __builtin_mips_shll_s_ph (v2q15, i32)
34253     q31 __builtin_mips_shll_s_w (q31, imm0_31)
34254     q31 __builtin_mips_shll_s_w (q31, i32)
34255     v4i8 __builtin_mips_shrl_qb (v4i8, imm0_7)
34256     v4i8 __builtin_mips_shrl_qb (v4i8, i32)
34257     v2q15 __builtin_mips_shra_ph (v2q15, imm0_15)
34258     v2q15 __builtin_mips_shra_ph (v2q15, i32)
34259     v2q15 __builtin_mips_shra_r_ph (v2q15, imm0_15)
34260     v2q15 __builtin_mips_shra_r_ph (v2q15, i32)
34261     q31 __builtin_mips_shra_r_w (q31, imm0_31)
34262     q31 __builtin_mips_shra_r_w (q31, i32)
34263     v2q15 __builtin_mips_muleu_s_ph_qbl (v4i8, v2q15)
34264     v2q15 __builtin_mips_muleu_s_ph_qbr (v4i8, v2q15)
34265     v2q15 __builtin_mips_mulq_rs_ph (v2q15, v2q15)
34266     q31 __builtin_mips_muleq_s_w_phl (v2q15, v2q15)
34267     q31 __builtin_mips_muleq_s_w_phr (v2q15, v2q15)
34268     a64 __builtin_mips_dpau_h_qbl (a64, v4i8, v4i8)
34269     a64 __builtin_mips_dpau_h_qbr (a64, v4i8, v4i8)
34270     a64 __builtin_mips_dpsu_h_qbl (a64, v4i8, v4i8)
34271     a64 __builtin_mips_dpsu_h_qbr (a64, v4i8, v4i8)
34272     a64 __builtin_mips_dpaq_s_w_ph (a64, v2q15, v2q15)
34273     a64 __builtin_mips_dpaq_sa_l_w (a64, q31, q31)
34274     a64 __builtin_mips_dpsq_s_w_ph (a64, v2q15, v2q15)
34275     a64 __builtin_mips_dpsq_sa_l_w (a64, q31, q31)
34276     a64 __builtin_mips_mulsaq_s_w_ph (a64, v2q15, v2q15)
34277     a64 __builtin_mips_maq_s_w_phl (a64, v2q15, v2q15)
34278     a64 __builtin_mips_maq_s_w_phr (a64, v2q15, v2q15)
34279     a64 __builtin_mips_maq_sa_w_phl (a64, v2q15, v2q15)
34280     a64 __builtin_mips_maq_sa_w_phr (a64, v2q15, v2q15)
34281     i32 __builtin_mips_bitrev (i32)
34282     i32 __builtin_mips_insv (i32, i32)
34283     v4i8 __builtin_mips_repl_qb (imm0_255)
34284     v4i8 __builtin_mips_repl_qb (i32)
34285     v2q15 __builtin_mips_repl_ph (imm_n512_511)
34286     v2q15 __builtin_mips_repl_ph (i32)
34287     void __builtin_mips_cmpu_eq_qb (v4i8, v4i8)
34288     void __builtin_mips_cmpu_lt_qb (v4i8, v4i8)
34289     void __builtin_mips_cmpu_le_qb (v4i8, v4i8)
34290     i32 __builtin_mips_cmpgu_eq_qb (v4i8, v4i8)
34291     i32 __builtin_mips_cmpgu_lt_qb (v4i8, v4i8)
34292     i32 __builtin_mips_cmpgu_le_qb (v4i8, v4i8)
34293     void __builtin_mips_cmp_eq_ph (v2q15, v2q15)
34294     void __builtin_mips_cmp_lt_ph (v2q15, v2q15)
34295     void __builtin_mips_cmp_le_ph (v2q15, v2q15)
34296     v4i8 __builtin_mips_pick_qb (v4i8, v4i8)
34297     v2q15 __builtin_mips_pick_ph (v2q15, v2q15)
34298     v2q15 __builtin_mips_packrl_ph (v2q15, v2q15)
34299     i32 __builtin_mips_extr_w (a64, imm0_31)
34300     i32 __builtin_mips_extr_w (a64, i32)
34301     i32 __builtin_mips_extr_r_w (a64, imm0_31)
34302     i32 __builtin_mips_extr_s_h (a64, i32)
34303     i32 __builtin_mips_extr_rs_w (a64, imm0_31)
34304     i32 __builtin_mips_extr_rs_w (a64, i32)
34305     i32 __builtin_mips_extr_s_h (a64, imm0_31)
34306     i32 __builtin_mips_extr_r_w (a64, i32)
34307     i32 __builtin_mips_extp (a64, imm0_31)
34308     i32 __builtin_mips_extp (a64, i32)
34309     i32 __builtin_mips_extpdp (a64, imm0_31)
34310     i32 __builtin_mips_extpdp (a64, i32)
34311     a64 __builtin_mips_shilo (a64, imm_n32_31)
34312     a64 __builtin_mips_shilo (a64, i32)
34313     a64 __builtin_mips_mthlip (a64, i32)
34314     void __builtin_mips_wrdsp (i32, imm0_63)
34315     i32 __builtin_mips_rddsp (imm0_63)
34316     i32 __builtin_mips_lbux (void *, i32)
34317     i32 __builtin_mips_lhx (void *, i32)
34318     i32 __builtin_mips_lwx (void *, i32)
34319     i32 __builtin_mips_bposge32 (void)
34320     a64 __builtin_mips_madd (a64, i32, i32);
34321     a64 __builtin_mips_maddu (a64, ui32, ui32);
34322     a64 __builtin_mips_msub (a64, i32, i32);
34323     a64 __builtin_mips_msubu (a64, ui32, ui32);
34324     a64 __builtin_mips_mult (i32, i32);
34325     a64 __builtin_mips_multu (ui32, ui32);
34326
34327 The following built-in functions map directly to a particular MIPS DSP
34328REV 2 instruction.  Please refer to the architecture specification for
34329details on what each instruction does.
34330
34331     v4q7 __builtin_mips_absq_s_qb (v4q7);
34332     v2i16 __builtin_mips_addu_ph (v2i16, v2i16);
34333     v2i16 __builtin_mips_addu_s_ph (v2i16, v2i16);
34334     v4i8 __builtin_mips_adduh_qb (v4i8, v4i8);
34335     v4i8 __builtin_mips_adduh_r_qb (v4i8, v4i8);
34336     i32 __builtin_mips_append (i32, i32, imm0_31);
34337     i32 __builtin_mips_balign (i32, i32, imm0_3);
34338     i32 __builtin_mips_cmpgdu_eq_qb (v4i8, v4i8);
34339     i32 __builtin_mips_cmpgdu_lt_qb (v4i8, v4i8);
34340     i32 __builtin_mips_cmpgdu_le_qb (v4i8, v4i8);
34341     a64 __builtin_mips_dpa_w_ph (a64, v2i16, v2i16);
34342     a64 __builtin_mips_dps_w_ph (a64, v2i16, v2i16);
34343     v2i16 __builtin_mips_mul_ph (v2i16, v2i16);
34344     v2i16 __builtin_mips_mul_s_ph (v2i16, v2i16);
34345     q31 __builtin_mips_mulq_rs_w (q31, q31);
34346     v2q15 __builtin_mips_mulq_s_ph (v2q15, v2q15);
34347     q31 __builtin_mips_mulq_s_w (q31, q31);
34348     a64 __builtin_mips_mulsa_w_ph (a64, v2i16, v2i16);
34349     v4i8 __builtin_mips_precr_qb_ph (v2i16, v2i16);
34350     v2i16 __builtin_mips_precr_sra_ph_w (i32, i32, imm0_31);
34351     v2i16 __builtin_mips_precr_sra_r_ph_w (i32, i32, imm0_31);
34352     i32 __builtin_mips_prepend (i32, i32, imm0_31);
34353     v4i8 __builtin_mips_shra_qb (v4i8, imm0_7);
34354     v4i8 __builtin_mips_shra_r_qb (v4i8, imm0_7);
34355     v4i8 __builtin_mips_shra_qb (v4i8, i32);
34356     v4i8 __builtin_mips_shra_r_qb (v4i8, i32);
34357     v2i16 __builtin_mips_shrl_ph (v2i16, imm0_15);
34358     v2i16 __builtin_mips_shrl_ph (v2i16, i32);
34359     v2i16 __builtin_mips_subu_ph (v2i16, v2i16);
34360     v2i16 __builtin_mips_subu_s_ph (v2i16, v2i16);
34361     v4i8 __builtin_mips_subuh_qb (v4i8, v4i8);
34362     v4i8 __builtin_mips_subuh_r_qb (v4i8, v4i8);
34363     v2q15 __builtin_mips_addqh_ph (v2q15, v2q15);
34364     v2q15 __builtin_mips_addqh_r_ph (v2q15, v2q15);
34365     q31 __builtin_mips_addqh_w (q31, q31);
34366     q31 __builtin_mips_addqh_r_w (q31, q31);
34367     v2q15 __builtin_mips_subqh_ph (v2q15, v2q15);
34368     v2q15 __builtin_mips_subqh_r_ph (v2q15, v2q15);
34369     q31 __builtin_mips_subqh_w (q31, q31);
34370     q31 __builtin_mips_subqh_r_w (q31, q31);
34371     a64 __builtin_mips_dpax_w_ph (a64, v2i16, v2i16);
34372     a64 __builtin_mips_dpsx_w_ph (a64, v2i16, v2i16);
34373     a64 __builtin_mips_dpaqx_s_w_ph (a64, v2q15, v2q15);
34374     a64 __builtin_mips_dpaqx_sa_w_ph (a64, v2q15, v2q15);
34375     a64 __builtin_mips_dpsqx_s_w_ph (a64, v2q15, v2q15);
34376     a64 __builtin_mips_dpsqx_sa_w_ph (a64, v2q15, v2q15);
34377
34378
34379File: gcc.info,  Node: MIPS Paired-Single Support,  Next: MIPS Loongson Built-in Functions,  Prev: MIPS DSP Built-in Functions,  Up: Target Builtins
34380
343816.54.8 MIPS Paired-Single Support
34382---------------------------------
34383
34384The MIPS64 architecture includes a number of instructions that operate
34385on pairs of single-precision floating-point values.  Each pair is
34386packed into a 64-bit floating-point register, with one element being
34387designated the "upper half" and the other being designated the "lower
34388half".
34389
34390 GCC supports paired-single operations using both the generic vector
34391extensions (*note Vector Extensions::) and a collection of
34392MIPS-specific built-in functions.  Both kinds of support are enabled by
34393the `-mpaired-single' command-line option.
34394
34395 The vector type associated with paired-single values is usually called
34396`v2sf'.  It can be defined in C as follows:
34397
34398     typedef float v2sf __attribute__ ((vector_size (8)));
34399
34400 `v2sf' values are initialized in the same way as aggregates.  For
34401example:
34402
34403     v2sf a = {1.5, 9.1};
34404     v2sf b;
34405     float e, f;
34406     b = (v2sf) {e, f};
34407
34408 _Note:_ The CPU's endianness determines which value is stored in the
34409upper half of a register and which value is stored in the lower half.
34410On little-endian targets, the first value is the lower one and the
34411second value is the upper one.  The opposite order applies to
34412big-endian targets.  For example, the code above will set the lower
34413half of `a' to `1.5' on little-endian targets and `9.1' on big-endian
34414targets.
34415
34416
34417File: gcc.info,  Node: MIPS Loongson Built-in Functions,  Next: Other MIPS Built-in Functions,  Prev: MIPS Paired-Single Support,  Up: Target Builtins
34418
344196.54.9 MIPS Loongson Built-in Functions
34420---------------------------------------
34421
34422GCC provides intrinsics to access the SIMD instructions provided by the
34423ST Microelectronics Loongson-2E and -2F processors.  These intrinsics,
34424available after inclusion of the `loongson.h' header file, operate on
34425the following 64-bit vector types:
34426
34427   * `uint8x8_t', a vector of eight unsigned 8-bit integers;
34428
34429   * `uint16x4_t', a vector of four unsigned 16-bit integers;
34430
34431   * `uint32x2_t', a vector of two unsigned 32-bit integers;
34432
34433   * `int8x8_t', a vector of eight signed 8-bit integers;
34434
34435   * `int16x4_t', a vector of four signed 16-bit integers;
34436
34437   * `int32x2_t', a vector of two signed 32-bit integers.
34438
34439 The intrinsics provided are listed below; each is named after the
34440machine instruction to which it corresponds, with suffixes added as
34441appropriate to distinguish intrinsics that expand to the same machine
34442instruction yet have different argument types.  Refer to the
34443architecture documentation for a description of the functionality of
34444each instruction.
34445
34446     int16x4_t packsswh (int32x2_t s, int32x2_t t);
34447     int8x8_t packsshb (int16x4_t s, int16x4_t t);
34448     uint8x8_t packushb (uint16x4_t s, uint16x4_t t);
34449     uint32x2_t paddw_u (uint32x2_t s, uint32x2_t t);
34450     uint16x4_t paddh_u (uint16x4_t s, uint16x4_t t);
34451     uint8x8_t paddb_u (uint8x8_t s, uint8x8_t t);
34452     int32x2_t paddw_s (int32x2_t s, int32x2_t t);
34453     int16x4_t paddh_s (int16x4_t s, int16x4_t t);
34454     int8x8_t paddb_s (int8x8_t s, int8x8_t t);
34455     uint64_t paddd_u (uint64_t s, uint64_t t);
34456     int64_t paddd_s (int64_t s, int64_t t);
34457     int16x4_t paddsh (int16x4_t s, int16x4_t t);
34458     int8x8_t paddsb (int8x8_t s, int8x8_t t);
34459     uint16x4_t paddush (uint16x4_t s, uint16x4_t t);
34460     uint8x8_t paddusb (uint8x8_t s, uint8x8_t t);
34461     uint64_t pandn_ud (uint64_t s, uint64_t t);
34462     uint32x2_t pandn_uw (uint32x2_t s, uint32x2_t t);
34463     uint16x4_t pandn_uh (uint16x4_t s, uint16x4_t t);
34464     uint8x8_t pandn_ub (uint8x8_t s, uint8x8_t t);
34465     int64_t pandn_sd (int64_t s, int64_t t);
34466     int32x2_t pandn_sw (int32x2_t s, int32x2_t t);
34467     int16x4_t pandn_sh (int16x4_t s, int16x4_t t);
34468     int8x8_t pandn_sb (int8x8_t s, int8x8_t t);
34469     uint16x4_t pavgh (uint16x4_t s, uint16x4_t t);
34470     uint8x8_t pavgb (uint8x8_t s, uint8x8_t t);
34471     uint32x2_t pcmpeqw_u (uint32x2_t s, uint32x2_t t);
34472     uint16x4_t pcmpeqh_u (uint16x4_t s, uint16x4_t t);
34473     uint8x8_t pcmpeqb_u (uint8x8_t s, uint8x8_t t);
34474     int32x2_t pcmpeqw_s (int32x2_t s, int32x2_t t);
34475     int16x4_t pcmpeqh_s (int16x4_t s, int16x4_t t);
34476     int8x8_t pcmpeqb_s (int8x8_t s, int8x8_t t);
34477     uint32x2_t pcmpgtw_u (uint32x2_t s, uint32x2_t t);
34478     uint16x4_t pcmpgth_u (uint16x4_t s, uint16x4_t t);
34479     uint8x8_t pcmpgtb_u (uint8x8_t s, uint8x8_t t);
34480     int32x2_t pcmpgtw_s (int32x2_t s, int32x2_t t);
34481     int16x4_t pcmpgth_s (int16x4_t s, int16x4_t t);
34482     int8x8_t pcmpgtb_s (int8x8_t s, int8x8_t t);
34483     uint16x4_t pextrh_u (uint16x4_t s, int field);
34484     int16x4_t pextrh_s (int16x4_t s, int field);
34485     uint16x4_t pinsrh_0_u (uint16x4_t s, uint16x4_t t);
34486     uint16x4_t pinsrh_1_u (uint16x4_t s, uint16x4_t t);
34487     uint16x4_t pinsrh_2_u (uint16x4_t s, uint16x4_t t);
34488     uint16x4_t pinsrh_3_u (uint16x4_t s, uint16x4_t t);
34489     int16x4_t pinsrh_0_s (int16x4_t s, int16x4_t t);
34490     int16x4_t pinsrh_1_s (int16x4_t s, int16x4_t t);
34491     int16x4_t pinsrh_2_s (int16x4_t s, int16x4_t t);
34492     int16x4_t pinsrh_3_s (int16x4_t s, int16x4_t t);
34493     int32x2_t pmaddhw (int16x4_t s, int16x4_t t);
34494     int16x4_t pmaxsh (int16x4_t s, int16x4_t t);
34495     uint8x8_t pmaxub (uint8x8_t s, uint8x8_t t);
34496     int16x4_t pminsh (int16x4_t s, int16x4_t t);
34497     uint8x8_t pminub (uint8x8_t s, uint8x8_t t);
34498     uint8x8_t pmovmskb_u (uint8x8_t s);
34499     int8x8_t pmovmskb_s (int8x8_t s);
34500     uint16x4_t pmulhuh (uint16x4_t s, uint16x4_t t);
34501     int16x4_t pmulhh (int16x4_t s, int16x4_t t);
34502     int16x4_t pmullh (int16x4_t s, int16x4_t t);
34503     int64_t pmuluw (uint32x2_t s, uint32x2_t t);
34504     uint8x8_t pasubub (uint8x8_t s, uint8x8_t t);
34505     uint16x4_t biadd (uint8x8_t s);
34506     uint16x4_t psadbh (uint8x8_t s, uint8x8_t t);
34507     uint16x4_t pshufh_u (uint16x4_t dest, uint16x4_t s, uint8_t order);
34508     int16x4_t pshufh_s (int16x4_t dest, int16x4_t s, uint8_t order);
34509     uint16x4_t psllh_u (uint16x4_t s, uint8_t amount);
34510     int16x4_t psllh_s (int16x4_t s, uint8_t amount);
34511     uint32x2_t psllw_u (uint32x2_t s, uint8_t amount);
34512     int32x2_t psllw_s (int32x2_t s, uint8_t amount);
34513     uint16x4_t psrlh_u (uint16x4_t s, uint8_t amount);
34514     int16x4_t psrlh_s (int16x4_t s, uint8_t amount);
34515     uint32x2_t psrlw_u (uint32x2_t s, uint8_t amount);
34516     int32x2_t psrlw_s (int32x2_t s, uint8_t amount);
34517     uint16x4_t psrah_u (uint16x4_t s, uint8_t amount);
34518     int16x4_t psrah_s (int16x4_t s, uint8_t amount);
34519     uint32x2_t psraw_u (uint32x2_t s, uint8_t amount);
34520     int32x2_t psraw_s (int32x2_t s, uint8_t amount);
34521     uint32x2_t psubw_u (uint32x2_t s, uint32x2_t t);
34522     uint16x4_t psubh_u (uint16x4_t s, uint16x4_t t);
34523     uint8x8_t psubb_u (uint8x8_t s, uint8x8_t t);
34524     int32x2_t psubw_s (int32x2_t s, int32x2_t t);
34525     int16x4_t psubh_s (int16x4_t s, int16x4_t t);
34526     int8x8_t psubb_s (int8x8_t s, int8x8_t t);
34527     uint64_t psubd_u (uint64_t s, uint64_t t);
34528     int64_t psubd_s (int64_t s, int64_t t);
34529     int16x4_t psubsh (int16x4_t s, int16x4_t t);
34530     int8x8_t psubsb (int8x8_t s, int8x8_t t);
34531     uint16x4_t psubush (uint16x4_t s, uint16x4_t t);
34532     uint8x8_t psubusb (uint8x8_t s, uint8x8_t t);
34533     uint32x2_t punpckhwd_u (uint32x2_t s, uint32x2_t t);
34534     uint16x4_t punpckhhw_u (uint16x4_t s, uint16x4_t t);
34535     uint8x8_t punpckhbh_u (uint8x8_t s, uint8x8_t t);
34536     int32x2_t punpckhwd_s (int32x2_t s, int32x2_t t);
34537     int16x4_t punpckhhw_s (int16x4_t s, int16x4_t t);
34538     int8x8_t punpckhbh_s (int8x8_t s, int8x8_t t);
34539     uint32x2_t punpcklwd_u (uint32x2_t s, uint32x2_t t);
34540     uint16x4_t punpcklhw_u (uint16x4_t s, uint16x4_t t);
34541     uint8x8_t punpcklbh_u (uint8x8_t s, uint8x8_t t);
34542     int32x2_t punpcklwd_s (int32x2_t s, int32x2_t t);
34543     int16x4_t punpcklhw_s (int16x4_t s, int16x4_t t);
34544     int8x8_t punpcklbh_s (int8x8_t s, int8x8_t t);
34545
34546* Menu:
34547
34548* Paired-Single Arithmetic::
34549* Paired-Single Built-in Functions::
34550* MIPS-3D Built-in Functions::
34551
34552
34553File: gcc.info,  Node: Paired-Single Arithmetic,  Next: Paired-Single Built-in Functions,  Up: MIPS Loongson Built-in Functions
34554
345556.54.9.1 Paired-Single Arithmetic
34556.................................
34557
34558The table below lists the `v2sf' operations for which hardware support
34559exists.  `a', `b' and `c' are `v2sf' values and `x' is an integral
34560value.
34561
34562C code                               MIPS instruction
34563`a + b'                              `add.ps'
34564`a - b'                              `sub.ps'
34565`-a'                                 `neg.ps'
34566`a * b'                              `mul.ps'
34567`a * b + c'                          `madd.ps'
34568`a * b - c'                          `msub.ps'
34569`-(a * b + c)'                       `nmadd.ps'
34570`-(a * b - c)'                       `nmsub.ps'
34571`x ? a : b'                          `movn.ps'/`movz.ps'
34572
34573 Note that the multiply-accumulate instructions can be disabled using
34574the command-line option `-mno-fused-madd'.
34575
34576
34577File: gcc.info,  Node: Paired-Single Built-in Functions,  Next: MIPS-3D Built-in Functions,  Prev: Paired-Single Arithmetic,  Up: MIPS Loongson Built-in Functions
34578
345796.54.9.2 Paired-Single Built-in Functions
34580.........................................
34581
34582The following paired-single functions map directly to a particular MIPS
34583instruction.  Please refer to the architecture specification for
34584details on what each instruction does.
34585
34586`v2sf __builtin_mips_pll_ps (v2sf, v2sf)'
34587     Pair lower lower (`pll.ps').
34588
34589`v2sf __builtin_mips_pul_ps (v2sf, v2sf)'
34590     Pair upper lower (`pul.ps').
34591
34592`v2sf __builtin_mips_plu_ps (v2sf, v2sf)'
34593     Pair lower upper (`plu.ps').
34594
34595`v2sf __builtin_mips_puu_ps (v2sf, v2sf)'
34596     Pair upper upper (`puu.ps').
34597
34598`v2sf __builtin_mips_cvt_ps_s (float, float)'
34599     Convert pair to paired single (`cvt.ps.s').
34600
34601`float __builtin_mips_cvt_s_pl (v2sf)'
34602     Convert pair lower to single (`cvt.s.pl').
34603
34604`float __builtin_mips_cvt_s_pu (v2sf)'
34605     Convert pair upper to single (`cvt.s.pu').
34606
34607`v2sf __builtin_mips_abs_ps (v2sf)'
34608     Absolute value (`abs.ps').
34609
34610`v2sf __builtin_mips_alnv_ps (v2sf, v2sf, int)'
34611     Align variable (`alnv.ps').
34612
34613     _Note:_ The value of the third parameter must be 0 or 4 modulo 8,
34614     otherwise the result will be unpredictable.  Please read the
34615     instruction description for details.
34616
34617 The following multi-instruction functions are also available.  In each
34618case, COND can be any of the 16 floating-point conditions: `f', `un',
34619`eq', `ueq', `olt', `ult', `ole', `ule', `sf', `ngle', `seq', `ngl',
34620`lt', `nge', `le' or `ngt'.
34621
34622`v2sf __builtin_mips_movt_c_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)'
34623`v2sf __builtin_mips_movf_c_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)'
34624     Conditional move based on floating point comparison (`c.COND.ps',
34625     `movt.ps'/`movf.ps').
34626
34627     The `movt' functions return the value X computed by:
34628
34629          c.COND.ps CC,A,B
34630          mov.ps X,C
34631          movt.ps X,D,CC
34632
34633     The `movf' functions are similar but use `movf.ps' instead of
34634     `movt.ps'.
34635
34636`int __builtin_mips_upper_c_COND_ps (v2sf A, v2sf B)'
34637`int __builtin_mips_lower_c_COND_ps (v2sf A, v2sf B)'
34638     Comparison of two paired-single values (`c.COND.ps',
34639     `bc1t'/`bc1f').
34640
34641     These functions compare A and B using `c.COND.ps' and return
34642     either the upper or lower half of the result.  For example:
34643
34644          v2sf a, b;
34645          if (__builtin_mips_upper_c_eq_ps (a, b))
34646            upper_halves_are_equal ();
34647          else
34648            upper_halves_are_unequal ();
34649
34650          if (__builtin_mips_lower_c_eq_ps (a, b))
34651            lower_halves_are_equal ();
34652          else
34653            lower_halves_are_unequal ();
34654
34655
34656File: gcc.info,  Node: MIPS-3D Built-in Functions,  Prev: Paired-Single Built-in Functions,  Up: MIPS Loongson Built-in Functions
34657
346586.54.9.3 MIPS-3D Built-in Functions
34659...................................
34660
34661The MIPS-3D Application-Specific Extension (ASE) includes additional
34662paired-single instructions that are designed to improve the performance
34663of 3D graphics operations.  Support for these instructions is controlled
34664by the `-mips3d' command-line option.
34665
34666 The functions listed below map directly to a particular MIPS-3D
34667instruction.  Please refer to the architecture specification for more
34668details on what each instruction does.
34669
34670`v2sf __builtin_mips_addr_ps (v2sf, v2sf)'
34671     Reduction add (`addr.ps').
34672
34673`v2sf __builtin_mips_mulr_ps (v2sf, v2sf)'
34674     Reduction multiply (`mulr.ps').
34675
34676`v2sf __builtin_mips_cvt_pw_ps (v2sf)'
34677     Convert paired single to paired word (`cvt.pw.ps').
34678
34679`v2sf __builtin_mips_cvt_ps_pw (v2sf)'
34680     Convert paired word to paired single (`cvt.ps.pw').
34681
34682`float __builtin_mips_recip1_s (float)'
34683`double __builtin_mips_recip1_d (double)'
34684`v2sf __builtin_mips_recip1_ps (v2sf)'
34685     Reduced precision reciprocal (sequence step 1) (`recip1.FMT').
34686
34687`float __builtin_mips_recip2_s (float, float)'
34688`double __builtin_mips_recip2_d (double, double)'
34689`v2sf __builtin_mips_recip2_ps (v2sf, v2sf)'
34690     Reduced precision reciprocal (sequence step 2) (`recip2.FMT').
34691
34692`float __builtin_mips_rsqrt1_s (float)'
34693`double __builtin_mips_rsqrt1_d (double)'
34694`v2sf __builtin_mips_rsqrt1_ps (v2sf)'
34695     Reduced precision reciprocal square root (sequence step 1)
34696     (`rsqrt1.FMT').
34697
34698`float __builtin_mips_rsqrt2_s (float, float)'
34699`double __builtin_mips_rsqrt2_d (double, double)'
34700`v2sf __builtin_mips_rsqrt2_ps (v2sf, v2sf)'
34701     Reduced precision reciprocal square root (sequence step 2)
34702     (`rsqrt2.FMT').
34703
34704 The following multi-instruction functions are also available.  In each
34705case, COND can be any of the 16 floating-point conditions: `f', `un',
34706`eq', `ueq', `olt', `ult', `ole', `ule', `sf', `ngle', `seq', `ngl',
34707`lt', `nge', `le' or `ngt'.
34708
34709`int __builtin_mips_cabs_COND_s (float A, float B)'
34710`int __builtin_mips_cabs_COND_d (double A, double B)'
34711     Absolute comparison of two scalar values (`cabs.COND.FMT',
34712     `bc1t'/`bc1f').
34713
34714     These functions compare A and B using `cabs.COND.s' or
34715     `cabs.COND.d' and return the result as a boolean value.  For
34716     example:
34717
34718          float a, b;
34719          if (__builtin_mips_cabs_eq_s (a, b))
34720            true ();
34721          else
34722            false ();
34723
34724`int __builtin_mips_upper_cabs_COND_ps (v2sf A, v2sf B)'
34725`int __builtin_mips_lower_cabs_COND_ps (v2sf A, v2sf B)'
34726     Absolute comparison of two paired-single values (`cabs.COND.ps',
34727     `bc1t'/`bc1f').
34728
34729     These functions compare A and B using `cabs.COND.ps' and return
34730     either the upper or lower half of the result.  For example:
34731
34732          v2sf a, b;
34733          if (__builtin_mips_upper_cabs_eq_ps (a, b))
34734            upper_halves_are_equal ();
34735          else
34736            upper_halves_are_unequal ();
34737
34738          if (__builtin_mips_lower_cabs_eq_ps (a, b))
34739            lower_halves_are_equal ();
34740          else
34741            lower_halves_are_unequal ();
34742
34743`v2sf __builtin_mips_movt_cabs_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)'
34744`v2sf __builtin_mips_movf_cabs_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)'
34745     Conditional move based on absolute comparison (`cabs.COND.ps',
34746     `movt.ps'/`movf.ps').
34747
34748     The `movt' functions return the value X computed by:
34749
34750          cabs.COND.ps CC,A,B
34751          mov.ps X,C
34752          movt.ps X,D,CC
34753
34754     The `movf' functions are similar but use `movf.ps' instead of
34755     `movt.ps'.
34756
34757`int __builtin_mips_any_c_COND_ps (v2sf A, v2sf B)'
34758`int __builtin_mips_all_c_COND_ps (v2sf A, v2sf B)'
34759`int __builtin_mips_any_cabs_COND_ps (v2sf A, v2sf B)'
34760`int __builtin_mips_all_cabs_COND_ps (v2sf A, v2sf B)'
34761     Comparison of two paired-single values (`c.COND.ps'/`cabs.COND.ps',
34762     `bc1any2t'/`bc1any2f').
34763
34764     These functions compare A and B using `c.COND.ps' or
34765     `cabs.COND.ps'.  The `any' forms return true if either result is
34766     true and the `all' forms return true if both results are true.
34767     For example:
34768
34769          v2sf a, b;
34770          if (__builtin_mips_any_c_eq_ps (a, b))
34771            one_is_true ();
34772          else
34773            both_are_false ();
34774
34775          if (__builtin_mips_all_c_eq_ps (a, b))
34776            both_are_true ();
34777          else
34778            one_is_false ();
34779
34780`int __builtin_mips_any_c_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)'
34781`int __builtin_mips_all_c_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)'
34782`int __builtin_mips_any_cabs_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)'
34783`int __builtin_mips_all_cabs_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)'
34784     Comparison of four paired-single values
34785     (`c.COND.ps'/`cabs.COND.ps', `bc1any4t'/`bc1any4f').
34786
34787     These functions use `c.COND.ps' or `cabs.COND.ps' to compare A
34788     with B and to compare C with D.  The `any' forms return true if
34789     any of the four results are true and the `all' forms return true
34790     if all four results are true.  For example:
34791
34792          v2sf a, b, c, d;
34793          if (__builtin_mips_any_c_eq_4s (a, b, c, d))
34794            some_are_true ();
34795          else
34796            all_are_false ();
34797
34798          if (__builtin_mips_all_c_eq_4s (a, b, c, d))
34799            all_are_true ();
34800          else
34801            some_are_false ();
34802
34803
34804File: gcc.info,  Node: picoChip Built-in Functions,  Next: PowerPC AltiVec/VSX Built-in Functions,  Prev: Other MIPS Built-in Functions,  Up: Target Builtins
34805
348066.54.10 picoChip Built-in Functions
34807-----------------------------------
34808
34809GCC provides an interface to selected machine instructions from the
34810picoChip instruction set.
34811
34812`int __builtin_sbc (int VALUE)'
34813     Sign bit count.  Return the number of consecutive bits in VALUE
34814     which have the same value as the sign-bit.  The result is the
34815     number of leading sign bits minus one, giving the number of
34816     redundant sign bits in VALUE.
34817
34818`int __builtin_byteswap (int VALUE)'
34819     Byte swap.  Return the result of swapping the upper and lower
34820     bytes of VALUE.
34821
34822`int __builtin_brev (int VALUE)'
34823     Bit reversal.  Return the result of reversing the bits in VALUE.
34824     Bit 15 is swapped with bit 0, bit 14 is swapped with bit 1, and so
34825     on.
34826
34827`int __builtin_adds (int X, int Y)'
34828     Saturating addition.  Return the result of adding X and Y, storing
34829     the value 32767 if the result overflows.
34830
34831`int __builtin_subs (int X, int Y)'
34832     Saturating subtraction.  Return the result of subtracting Y from
34833     X, storing the value -32768 if the result overflows.
34834
34835`void __builtin_halt (void)'
34836     Halt.  The processor will stop execution.  This built-in is useful
34837     for implementing assertions.
34838
34839
34840
34841File: gcc.info,  Node: Other MIPS Built-in Functions,  Next: picoChip Built-in Functions,  Prev: MIPS Loongson Built-in Functions,  Up: Target Builtins
34842
348436.54.11 Other MIPS Built-in Functions
34844-------------------------------------
34845
34846GCC provides other MIPS-specific built-in functions:
34847
34848`void __builtin_mips_cache (int OP, const volatile void *ADDR)'
34849     Insert a `cache' instruction with operands OP and ADDR.  GCC
34850     defines the preprocessor macro `___GCC_HAVE_BUILTIN_MIPS_CACHE'
34851     when this function is available.
34852
34853
34854File: gcc.info,  Node: PowerPC AltiVec/VSX Built-in Functions,  Next: RX Built-in Functions,  Prev: picoChip Built-in Functions,  Up: Target Builtins
34855
348566.54.12 PowerPC AltiVec Built-in Functions
34857------------------------------------------
34858
34859GCC provides an interface for the PowerPC family of processors to access
34860the AltiVec operations described in Motorola's AltiVec Programming
34861Interface Manual.  The interface is made available by including
34862`<altivec.h>' and using `-maltivec' and `-mabi=altivec'.  The interface
34863supports the following vector types.
34864
34865     vector unsigned char
34866     vector signed char
34867     vector bool char
34868
34869     vector unsigned short
34870     vector signed short
34871     vector bool short
34872     vector pixel
34873
34874     vector unsigned int
34875     vector signed int
34876     vector bool int
34877     vector float
34878
34879 If `-mvsx' is used the following additional vector types are
34880implemented.
34881
34882     vector unsigned long
34883     vector signed long
34884     vector double
34885
34886 The long types are only implemented for 64-bit code generation, and
34887the long type is only used in the floating point/integer conversion
34888instructions.
34889
34890 GCC's implementation of the high-level language interface available
34891from C and C++ code differs from Motorola's documentation in several
34892ways.
34893
34894   * A vector constant is a list of constant expressions within curly
34895     braces.
34896
34897   * A vector initializer requires no cast if the vector constant is of
34898     the same type as the variable it is initializing.
34899
34900   * If `signed' or `unsigned' is omitted, the signedness of the vector
34901     type is the default signedness of the base type.  The default
34902     varies depending on the operating system, so a portable program
34903     should always specify the signedness.
34904
34905   * Compiling with `-maltivec' adds keywords `__vector', `vector',
34906     `__pixel', `pixel', `__bool' and `bool'.  When compiling ISO C,
34907     the context-sensitive substitution of the keywords `vector',
34908     `pixel' and `bool' is disabled.  To use them, you must include
34909     `<altivec.h>' instead.
34910
34911   * GCC allows using a `typedef' name as the type specifier for a
34912     vector type.
34913
34914   * For C, overloaded functions are implemented with macros so the
34915     following does not work:
34916
34917            vec_add ((vector signed int){1, 2, 3, 4}, foo);
34918
34919     Since `vec_add' is a macro, the vector constant in the example is
34920     treated as four separate arguments.  Wrap the entire argument in
34921     parentheses for this to work.
34922
34923 _Note:_ Only the `<altivec.h>' interface is supported.  Internally,
34924GCC uses built-in functions to achieve the functionality in the
34925aforementioned header file, but they are not supported and are subject
34926to change without notice.
34927
34928 The following interfaces are supported for the generic and specific
34929AltiVec operations and the AltiVec predicates.  In cases where there is
34930a direct mapping between generic and specific operations, only the
34931generic names are shown here, although the specific operations can also
34932be used.
34933
34934 Arguments that are documented as `const int' require literal integral
34935values within the range required for that operation.
34936
34937     vector signed char vec_abs (vector signed char);
34938     vector signed short vec_abs (vector signed short);
34939     vector signed int vec_abs (vector signed int);
34940     vector float vec_abs (vector float);
34941
34942     vector signed char vec_abss (vector signed char);
34943     vector signed short vec_abss (vector signed short);
34944     vector signed int vec_abss (vector signed int);
34945
34946     vector signed char vec_add (vector bool char, vector signed char);
34947     vector signed char vec_add (vector signed char, vector bool char);
34948     vector signed char vec_add (vector signed char, vector signed char);
34949     vector unsigned char vec_add (vector bool char, vector unsigned char);
34950     vector unsigned char vec_add (vector unsigned char, vector bool char);
34951     vector unsigned char vec_add (vector unsigned char,
34952                                   vector unsigned char);
34953     vector signed short vec_add (vector bool short, vector signed short);
34954     vector signed short vec_add (vector signed short, vector bool short);
34955     vector signed short vec_add (vector signed short, vector signed short);
34956     vector unsigned short vec_add (vector bool short,
34957                                    vector unsigned short);
34958     vector unsigned short vec_add (vector unsigned short,
34959                                    vector bool short);
34960     vector unsigned short vec_add (vector unsigned short,
34961                                    vector unsigned short);
34962     vector signed int vec_add (vector bool int, vector signed int);
34963     vector signed int vec_add (vector signed int, vector bool int);
34964     vector signed int vec_add (vector signed int, vector signed int);
34965     vector unsigned int vec_add (vector bool int, vector unsigned int);
34966     vector unsigned int vec_add (vector unsigned int, vector bool int);
34967     vector unsigned int vec_add (vector unsigned int, vector unsigned int);
34968     vector float vec_add (vector float, vector float);
34969
34970     vector float vec_vaddfp (vector float, vector float);
34971
34972     vector signed int vec_vadduwm (vector bool int, vector signed int);
34973     vector signed int vec_vadduwm (vector signed int, vector bool int);
34974     vector signed int vec_vadduwm (vector signed int, vector signed int);
34975     vector unsigned int vec_vadduwm (vector bool int, vector unsigned int);
34976     vector unsigned int vec_vadduwm (vector unsigned int, vector bool int);
34977     vector unsigned int vec_vadduwm (vector unsigned int,
34978                                      vector unsigned int);
34979
34980     vector signed short vec_vadduhm (vector bool short,
34981                                      vector signed short);
34982     vector signed short vec_vadduhm (vector signed short,
34983                                      vector bool short);
34984     vector signed short vec_vadduhm (vector signed short,
34985                                      vector signed short);
34986     vector unsigned short vec_vadduhm (vector bool short,
34987                                        vector unsigned short);
34988     vector unsigned short vec_vadduhm (vector unsigned short,
34989                                        vector bool short);
34990     vector unsigned short vec_vadduhm (vector unsigned short,
34991                                        vector unsigned short);
34992
34993     vector signed char vec_vaddubm (vector bool char, vector signed char);
34994     vector signed char vec_vaddubm (vector signed char, vector bool char);
34995     vector signed char vec_vaddubm (vector signed char, vector signed char);
34996     vector unsigned char vec_vaddubm (vector bool char,
34997                                       vector unsigned char);
34998     vector unsigned char vec_vaddubm (vector unsigned char,
34999                                       vector bool char);
35000     vector unsigned char vec_vaddubm (vector unsigned char,
35001                                       vector unsigned char);
35002
35003     vector unsigned int vec_addc (vector unsigned int, vector unsigned int);
35004
35005     vector unsigned char vec_adds (vector bool char, vector unsigned char);
35006     vector unsigned char vec_adds (vector unsigned char, vector bool char);
35007     vector unsigned char vec_adds (vector unsigned char,
35008                                    vector unsigned char);
35009     vector signed char vec_adds (vector bool char, vector signed char);
35010     vector signed char vec_adds (vector signed char, vector bool char);
35011     vector signed char vec_adds (vector signed char, vector signed char);
35012     vector unsigned short vec_adds (vector bool short,
35013                                     vector unsigned short);
35014     vector unsigned short vec_adds (vector unsigned short,
35015                                     vector bool short);
35016     vector unsigned short vec_adds (vector unsigned short,
35017                                     vector unsigned short);
35018     vector signed short vec_adds (vector bool short, vector signed short);
35019     vector signed short vec_adds (vector signed short, vector bool short);
35020     vector signed short vec_adds (vector signed short, vector signed short);
35021     vector unsigned int vec_adds (vector bool int, vector unsigned int);
35022     vector unsigned int vec_adds (vector unsigned int, vector bool int);
35023     vector unsigned int vec_adds (vector unsigned int, vector unsigned int);
35024     vector signed int vec_adds (vector bool int, vector signed int);
35025     vector signed int vec_adds (vector signed int, vector bool int);
35026     vector signed int vec_adds (vector signed int, vector signed int);
35027
35028     vector signed int vec_vaddsws (vector bool int, vector signed int);
35029     vector signed int vec_vaddsws (vector signed int, vector bool int);
35030     vector signed int vec_vaddsws (vector signed int, vector signed int);
35031
35032     vector unsigned int vec_vadduws (vector bool int, vector unsigned int);
35033     vector unsigned int vec_vadduws (vector unsigned int, vector bool int);
35034     vector unsigned int vec_vadduws (vector unsigned int,
35035                                      vector unsigned int);
35036
35037     vector signed short vec_vaddshs (vector bool short,
35038                                      vector signed short);
35039     vector signed short vec_vaddshs (vector signed short,
35040                                      vector bool short);
35041     vector signed short vec_vaddshs (vector signed short,
35042                                      vector signed short);
35043
35044     vector unsigned short vec_vadduhs (vector bool short,
35045                                        vector unsigned short);
35046     vector unsigned short vec_vadduhs (vector unsigned short,
35047                                        vector bool short);
35048     vector unsigned short vec_vadduhs (vector unsigned short,
35049                                        vector unsigned short);
35050
35051     vector signed char vec_vaddsbs (vector bool char, vector signed char);
35052     vector signed char vec_vaddsbs (vector signed char, vector bool char);
35053     vector signed char vec_vaddsbs (vector signed char, vector signed char);
35054
35055     vector unsigned char vec_vaddubs (vector bool char,
35056                                       vector unsigned char);
35057     vector unsigned char vec_vaddubs (vector unsigned char,
35058                                       vector bool char);
35059     vector unsigned char vec_vaddubs (vector unsigned char,
35060                                       vector unsigned char);
35061
35062     vector float vec_and (vector float, vector float);
35063     vector float vec_and (vector float, vector bool int);
35064     vector float vec_and (vector bool int, vector float);
35065     vector bool int vec_and (vector bool int, vector bool int);
35066     vector signed int vec_and (vector bool int, vector signed int);
35067     vector signed int vec_and (vector signed int, vector bool int);
35068     vector signed int vec_and (vector signed int, vector signed int);
35069     vector unsigned int vec_and (vector bool int, vector unsigned int);
35070     vector unsigned int vec_and (vector unsigned int, vector bool int);
35071     vector unsigned int vec_and (vector unsigned int, vector unsigned int);
35072     vector bool short vec_and (vector bool short, vector bool short);
35073     vector signed short vec_and (vector bool short, vector signed short);
35074     vector signed short vec_and (vector signed short, vector bool short);
35075     vector signed short vec_and (vector signed short, vector signed short);
35076     vector unsigned short vec_and (vector bool short,
35077                                    vector unsigned short);
35078     vector unsigned short vec_and (vector unsigned short,
35079                                    vector bool short);
35080     vector unsigned short vec_and (vector unsigned short,
35081                                    vector unsigned short);
35082     vector signed char vec_and (vector bool char, vector signed char);
35083     vector bool char vec_and (vector bool char, vector bool char);
35084     vector signed char vec_and (vector signed char, vector bool char);
35085     vector signed char vec_and (vector signed char, vector signed char);
35086     vector unsigned char vec_and (vector bool char, vector unsigned char);
35087     vector unsigned char vec_and (vector unsigned char, vector bool char);
35088     vector unsigned char vec_and (vector unsigned char,
35089                                   vector unsigned char);
35090
35091     vector float vec_andc (vector float, vector float);
35092     vector float vec_andc (vector float, vector bool int);
35093     vector float vec_andc (vector bool int, vector float);
35094     vector bool int vec_andc (vector bool int, vector bool int);
35095     vector signed int vec_andc (vector bool int, vector signed int);
35096     vector signed int vec_andc (vector signed int, vector bool int);
35097     vector signed int vec_andc (vector signed int, vector signed int);
35098     vector unsigned int vec_andc (vector bool int, vector unsigned int);
35099     vector unsigned int vec_andc (vector unsigned int, vector bool int);
35100     vector unsigned int vec_andc (vector unsigned int, vector unsigned int);
35101     vector bool short vec_andc (vector bool short, vector bool short);
35102     vector signed short vec_andc (vector bool short, vector signed short);
35103     vector signed short vec_andc (vector signed short, vector bool short);
35104     vector signed short vec_andc (vector signed short, vector signed short);
35105     vector unsigned short vec_andc (vector bool short,
35106                                     vector unsigned short);
35107     vector unsigned short vec_andc (vector unsigned short,
35108                                     vector bool short);
35109     vector unsigned short vec_andc (vector unsigned short,
35110                                     vector unsigned short);
35111     vector signed char vec_andc (vector bool char, vector signed char);
35112     vector bool char vec_andc (vector bool char, vector bool char);
35113     vector signed char vec_andc (vector signed char, vector bool char);
35114     vector signed char vec_andc (vector signed char, vector signed char);
35115     vector unsigned char vec_andc (vector bool char, vector unsigned char);
35116     vector unsigned char vec_andc (vector unsigned char, vector bool char);
35117     vector unsigned char vec_andc (vector unsigned char,
35118                                    vector unsigned char);
35119
35120     vector unsigned char vec_avg (vector unsigned char,
35121                                   vector unsigned char);
35122     vector signed char vec_avg (vector signed char, vector signed char);
35123     vector unsigned short vec_avg (vector unsigned short,
35124                                    vector unsigned short);
35125     vector signed short vec_avg (vector signed short, vector signed short);
35126     vector unsigned int vec_avg (vector unsigned int, vector unsigned int);
35127     vector signed int vec_avg (vector signed int, vector signed int);
35128
35129     vector signed int vec_vavgsw (vector signed int, vector signed int);
35130
35131     vector unsigned int vec_vavguw (vector unsigned int,
35132                                     vector unsigned int);
35133
35134     vector signed short vec_vavgsh (vector signed short,
35135                                     vector signed short);
35136
35137     vector unsigned short vec_vavguh (vector unsigned short,
35138                                       vector unsigned short);
35139
35140     vector signed char vec_vavgsb (vector signed char, vector signed char);
35141
35142     vector unsigned char vec_vavgub (vector unsigned char,
35143                                      vector unsigned char);
35144
35145     vector float vec_copysign (vector float);
35146
35147     vector float vec_ceil (vector float);
35148
35149     vector signed int vec_cmpb (vector float, vector float);
35150
35151     vector bool char vec_cmpeq (vector signed char, vector signed char);
35152     vector bool char vec_cmpeq (vector unsigned char, vector unsigned char);
35153     vector bool short vec_cmpeq (vector signed short, vector signed short);
35154     vector bool short vec_cmpeq (vector unsigned short,
35155                                  vector unsigned short);
35156     vector bool int vec_cmpeq (vector signed int, vector signed int);
35157     vector bool int vec_cmpeq (vector unsigned int, vector unsigned int);
35158     vector bool int vec_cmpeq (vector float, vector float);
35159
35160     vector bool int vec_vcmpeqfp (vector float, vector float);
35161
35162     vector bool int vec_vcmpequw (vector signed int, vector signed int);
35163     vector bool int vec_vcmpequw (vector unsigned int, vector unsigned int);
35164
35165     vector bool short vec_vcmpequh (vector signed short,
35166                                     vector signed short);
35167     vector bool short vec_vcmpequh (vector unsigned short,
35168                                     vector unsigned short);
35169
35170     vector bool char vec_vcmpequb (vector signed char, vector signed char);
35171     vector bool char vec_vcmpequb (vector unsigned char,
35172                                    vector unsigned char);
35173
35174     vector bool int vec_cmpge (vector float, vector float);
35175
35176     vector bool char vec_cmpgt (vector unsigned char, vector unsigned char);
35177     vector bool char vec_cmpgt (vector signed char, vector signed char);
35178     vector bool short vec_cmpgt (vector unsigned short,
35179                                  vector unsigned short);
35180     vector bool short vec_cmpgt (vector signed short, vector signed short);
35181     vector bool int vec_cmpgt (vector unsigned int, vector unsigned int);
35182     vector bool int vec_cmpgt (vector signed int, vector signed int);
35183     vector bool int vec_cmpgt (vector float, vector float);
35184
35185     vector bool int vec_vcmpgtfp (vector float, vector float);
35186
35187     vector bool int vec_vcmpgtsw (vector signed int, vector signed int);
35188
35189     vector bool int vec_vcmpgtuw (vector unsigned int, vector unsigned int);
35190
35191     vector bool short vec_vcmpgtsh (vector signed short,
35192                                     vector signed short);
35193
35194     vector bool short vec_vcmpgtuh (vector unsigned short,
35195                                     vector unsigned short);
35196
35197     vector bool char vec_vcmpgtsb (vector signed char, vector signed char);
35198
35199     vector bool char vec_vcmpgtub (vector unsigned char,
35200                                    vector unsigned char);
35201
35202     vector bool int vec_cmple (vector float, vector float);
35203
35204     vector bool char vec_cmplt (vector unsigned char, vector unsigned char);
35205     vector bool char vec_cmplt (vector signed char, vector signed char);
35206     vector bool short vec_cmplt (vector unsigned short,
35207                                  vector unsigned short);
35208     vector bool short vec_cmplt (vector signed short, vector signed short);
35209     vector bool int vec_cmplt (vector unsigned int, vector unsigned int);
35210     vector bool int vec_cmplt (vector signed int, vector signed int);
35211     vector bool int vec_cmplt (vector float, vector float);
35212
35213     vector float vec_ctf (vector unsigned int, const int);
35214     vector float vec_ctf (vector signed int, const int);
35215
35216     vector float vec_vcfsx (vector signed int, const int);
35217
35218     vector float vec_vcfux (vector unsigned int, const int);
35219
35220     vector signed int vec_cts (vector float, const int);
35221
35222     vector unsigned int vec_ctu (vector float, const int);
35223
35224     void vec_dss (const int);
35225
35226     void vec_dssall (void);
35227
35228     void vec_dst (const vector unsigned char *, int, const int);
35229     void vec_dst (const vector signed char *, int, const int);
35230     void vec_dst (const vector bool char *, int, const int);
35231     void vec_dst (const vector unsigned short *, int, const int);
35232     void vec_dst (const vector signed short *, int, const int);
35233     void vec_dst (const vector bool short *, int, const int);
35234     void vec_dst (const vector pixel *, int, const int);
35235     void vec_dst (const vector unsigned int *, int, const int);
35236     void vec_dst (const vector signed int *, int, const int);
35237     void vec_dst (const vector bool int *, int, const int);
35238     void vec_dst (const vector float *, int, const int);
35239     void vec_dst (const unsigned char *, int, const int);
35240     void vec_dst (const signed char *, int, const int);
35241     void vec_dst (const unsigned short *, int, const int);
35242     void vec_dst (const short *, int, const int);
35243     void vec_dst (const unsigned int *, int, const int);
35244     void vec_dst (const int *, int, const int);
35245     void vec_dst (const unsigned long *, int, const int);
35246     void vec_dst (const long *, int, const int);
35247     void vec_dst (const float *, int, const int);
35248
35249     void vec_dstst (const vector unsigned char *, int, const int);
35250     void vec_dstst (const vector signed char *, int, const int);
35251     void vec_dstst (const vector bool char *, int, const int);
35252     void vec_dstst (const vector unsigned short *, int, const int);
35253     void vec_dstst (const vector signed short *, int, const int);
35254     void vec_dstst (const vector bool short *, int, const int);
35255     void vec_dstst (const vector pixel *, int, const int);
35256     void vec_dstst (const vector unsigned int *, int, const int);
35257     void vec_dstst (const vector signed int *, int, const int);
35258     void vec_dstst (const vector bool int *, int, const int);
35259     void vec_dstst (const vector float *, int, const int);
35260     void vec_dstst (const unsigned char *, int, const int);
35261     void vec_dstst (const signed char *, int, const int);
35262     void vec_dstst (const unsigned short *, int, const int);
35263     void vec_dstst (const short *, int, const int);
35264     void vec_dstst (const unsigned int *, int, const int);
35265     void vec_dstst (const int *, int, const int);
35266     void vec_dstst (const unsigned long *, int, const int);
35267     void vec_dstst (const long *, int, const int);
35268     void vec_dstst (const float *, int, const int);
35269
35270     void vec_dststt (const vector unsigned char *, int, const int);
35271     void vec_dststt (const vector signed char *, int, const int);
35272     void vec_dststt (const vector bool char *, int, const int);
35273     void vec_dststt (const vector unsigned short *, int, const int);
35274     void vec_dststt (const vector signed short *, int, const int);
35275     void vec_dststt (const vector bool short *, int, const int);
35276     void vec_dststt (const vector pixel *, int, const int);
35277     void vec_dststt (const vector unsigned int *, int, const int);
35278     void vec_dststt (const vector signed int *, int, const int);
35279     void vec_dststt (const vector bool int *, int, const int);
35280     void vec_dststt (const vector float *, int, const int);
35281     void vec_dststt (const unsigned char *, int, const int);
35282     void vec_dststt (const signed char *, int, const int);
35283     void vec_dststt (const unsigned short *, int, const int);
35284     void vec_dststt (const short *, int, const int);
35285     void vec_dststt (const unsigned int *, int, const int);
35286     void vec_dststt (const int *, int, const int);
35287     void vec_dststt (const unsigned long *, int, const int);
35288     void vec_dststt (const long *, int, const int);
35289     void vec_dststt (const float *, int, const int);
35290
35291     void vec_dstt (const vector unsigned char *, int, const int);
35292     void vec_dstt (const vector signed char *, int, const int);
35293     void vec_dstt (const vector bool char *, int, const int);
35294     void vec_dstt (const vector unsigned short *, int, const int);
35295     void vec_dstt (const vector signed short *, int, const int);
35296     void vec_dstt (const vector bool short *, int, const int);
35297     void vec_dstt (const vector pixel *, int, const int);
35298     void vec_dstt (const vector unsigned int *, int, const int);
35299     void vec_dstt (const vector signed int *, int, const int);
35300     void vec_dstt (const vector bool int *, int, const int);
35301     void vec_dstt (const vector float *, int, const int);
35302     void vec_dstt (const unsigned char *, int, const int);
35303     void vec_dstt (const signed char *, int, const int);
35304     void vec_dstt (const unsigned short *, int, const int);
35305     void vec_dstt (const short *, int, const int);
35306     void vec_dstt (const unsigned int *, int, const int);
35307     void vec_dstt (const int *, int, const int);
35308     void vec_dstt (const unsigned long *, int, const int);
35309     void vec_dstt (const long *, int, const int);
35310     void vec_dstt (const float *, int, const int);
35311
35312     vector float vec_expte (vector float);
35313
35314     vector float vec_floor (vector float);
35315
35316     vector float vec_ld (int, const vector float *);
35317     vector float vec_ld (int, const float *);
35318     vector bool int vec_ld (int, const vector bool int *);
35319     vector signed int vec_ld (int, const vector signed int *);
35320     vector signed int vec_ld (int, const int *);
35321     vector signed int vec_ld (int, const long *);
35322     vector unsigned int vec_ld (int, const vector unsigned int *);
35323     vector unsigned int vec_ld (int, const unsigned int *);
35324     vector unsigned int vec_ld (int, const unsigned long *);
35325     vector bool short vec_ld (int, const vector bool short *);
35326     vector pixel vec_ld (int, const vector pixel *);
35327     vector signed short vec_ld (int, const vector signed short *);
35328     vector signed short vec_ld (int, const short *);
35329     vector unsigned short vec_ld (int, const vector unsigned short *);
35330     vector unsigned short vec_ld (int, const unsigned short *);
35331     vector bool char vec_ld (int, const vector bool char *);
35332     vector signed char vec_ld (int, const vector signed char *);
35333     vector signed char vec_ld (int, const signed char *);
35334     vector unsigned char vec_ld (int, const vector unsigned char *);
35335     vector unsigned char vec_ld (int, const unsigned char *);
35336
35337     vector signed char vec_lde (int, const signed char *);
35338     vector unsigned char vec_lde (int, const unsigned char *);
35339     vector signed short vec_lde (int, const short *);
35340     vector unsigned short vec_lde (int, const unsigned short *);
35341     vector float vec_lde (int, const float *);
35342     vector signed int vec_lde (int, const int *);
35343     vector unsigned int vec_lde (int, const unsigned int *);
35344     vector signed int vec_lde (int, const long *);
35345     vector unsigned int vec_lde (int, const unsigned long *);
35346
35347     vector float vec_lvewx (int, float *);
35348     vector signed int vec_lvewx (int, int *);
35349     vector unsigned int vec_lvewx (int, unsigned int *);
35350     vector signed int vec_lvewx (int, long *);
35351     vector unsigned int vec_lvewx (int, unsigned long *);
35352
35353     vector signed short vec_lvehx (int, short *);
35354     vector unsigned short vec_lvehx (int, unsigned short *);
35355
35356     vector signed char vec_lvebx (int, char *);
35357     vector unsigned char vec_lvebx (int, unsigned char *);
35358
35359     vector float vec_ldl (int, const vector float *);
35360     vector float vec_ldl (int, const float *);
35361     vector bool int vec_ldl (int, const vector bool int *);
35362     vector signed int vec_ldl (int, const vector signed int *);
35363     vector signed int vec_ldl (int, const int *);
35364     vector signed int vec_ldl (int, const long *);
35365     vector unsigned int vec_ldl (int, const vector unsigned int *);
35366     vector unsigned int vec_ldl (int, const unsigned int *);
35367     vector unsigned int vec_ldl (int, const unsigned long *);
35368     vector bool short vec_ldl (int, const vector bool short *);
35369     vector pixel vec_ldl (int, const vector pixel *);
35370     vector signed short vec_ldl (int, const vector signed short *);
35371     vector signed short vec_ldl (int, const short *);
35372     vector unsigned short vec_ldl (int, const vector unsigned short *);
35373     vector unsigned short vec_ldl (int, const unsigned short *);
35374     vector bool char vec_ldl (int, const vector bool char *);
35375     vector signed char vec_ldl (int, const vector signed char *);
35376     vector signed char vec_ldl (int, const signed char *);
35377     vector unsigned char vec_ldl (int, const vector unsigned char *);
35378     vector unsigned char vec_ldl (int, const unsigned char *);
35379
35380     vector float vec_loge (vector float);
35381
35382     vector unsigned char vec_lvsl (int, const volatile unsigned char *);
35383     vector unsigned char vec_lvsl (int, const volatile signed char *);
35384     vector unsigned char vec_lvsl (int, const volatile unsigned short *);
35385     vector unsigned char vec_lvsl (int, const volatile short *);
35386     vector unsigned char vec_lvsl (int, const volatile unsigned int *);
35387     vector unsigned char vec_lvsl (int, const volatile int *);
35388     vector unsigned char vec_lvsl (int, const volatile unsigned long *);
35389     vector unsigned char vec_lvsl (int, const volatile long *);
35390     vector unsigned char vec_lvsl (int, const volatile float *);
35391
35392     vector unsigned char vec_lvsr (int, const volatile unsigned char *);
35393     vector unsigned char vec_lvsr (int, const volatile signed char *);
35394     vector unsigned char vec_lvsr (int, const volatile unsigned short *);
35395     vector unsigned char vec_lvsr (int, const volatile short *);
35396     vector unsigned char vec_lvsr (int, const volatile unsigned int *);
35397     vector unsigned char vec_lvsr (int, const volatile int *);
35398     vector unsigned char vec_lvsr (int, const volatile unsigned long *);
35399     vector unsigned char vec_lvsr (int, const volatile long *);
35400     vector unsigned char vec_lvsr (int, const volatile float *);
35401
35402     vector float vec_madd (vector float, vector float, vector float);
35403
35404     vector signed short vec_madds (vector signed short,
35405                                    vector signed short,
35406                                    vector signed short);
35407
35408     vector unsigned char vec_max (vector bool char, vector unsigned char);
35409     vector unsigned char vec_max (vector unsigned char, vector bool char);
35410     vector unsigned char vec_max (vector unsigned char,
35411                                   vector unsigned char);
35412     vector signed char vec_max (vector bool char, vector signed char);
35413     vector signed char vec_max (vector signed char, vector bool char);
35414     vector signed char vec_max (vector signed char, vector signed char);
35415     vector unsigned short vec_max (vector bool short,
35416                                    vector unsigned short);
35417     vector unsigned short vec_max (vector unsigned short,
35418                                    vector bool short);
35419     vector unsigned short vec_max (vector unsigned short,
35420                                    vector unsigned short);
35421     vector signed short vec_max (vector bool short, vector signed short);
35422     vector signed short vec_max (vector signed short, vector bool short);
35423     vector signed short vec_max (vector signed short, vector signed short);
35424     vector unsigned int vec_max (vector bool int, vector unsigned int);
35425     vector unsigned int vec_max (vector unsigned int, vector bool int);
35426     vector unsigned int vec_max (vector unsigned int, vector unsigned int);
35427     vector signed int vec_max (vector bool int, vector signed int);
35428     vector signed int vec_max (vector signed int, vector bool int);
35429     vector signed int vec_max (vector signed int, vector signed int);
35430     vector float vec_max (vector float, vector float);
35431
35432     vector float vec_vmaxfp (vector float, vector float);
35433
35434     vector signed int vec_vmaxsw (vector bool int, vector signed int);
35435     vector signed int vec_vmaxsw (vector signed int, vector bool int);
35436     vector signed int vec_vmaxsw (vector signed int, vector signed int);
35437
35438     vector unsigned int vec_vmaxuw (vector bool int, vector unsigned int);
35439     vector unsigned int vec_vmaxuw (vector unsigned int, vector bool int);
35440     vector unsigned int vec_vmaxuw (vector unsigned int,
35441                                     vector unsigned int);
35442
35443     vector signed short vec_vmaxsh (vector bool short, vector signed short);
35444     vector signed short vec_vmaxsh (vector signed short, vector bool short);
35445     vector signed short vec_vmaxsh (vector signed short,
35446                                     vector signed short);
35447
35448     vector unsigned short vec_vmaxuh (vector bool short,
35449                                       vector unsigned short);
35450     vector unsigned short vec_vmaxuh (vector unsigned short,
35451                                       vector bool short);
35452     vector unsigned short vec_vmaxuh (vector unsigned short,
35453                                       vector unsigned short);
35454
35455     vector signed char vec_vmaxsb (vector bool char, vector signed char);
35456     vector signed char vec_vmaxsb (vector signed char, vector bool char);
35457     vector signed char vec_vmaxsb (vector signed char, vector signed char);
35458
35459     vector unsigned char vec_vmaxub (vector bool char,
35460                                      vector unsigned char);
35461     vector unsigned char vec_vmaxub (vector unsigned char,
35462                                      vector bool char);
35463     vector unsigned char vec_vmaxub (vector unsigned char,
35464                                      vector unsigned char);
35465
35466     vector bool char vec_mergeh (vector bool char, vector bool char);
35467     vector signed char vec_mergeh (vector signed char, vector signed char);
35468     vector unsigned char vec_mergeh (vector unsigned char,
35469                                      vector unsigned char);
35470     vector bool short vec_mergeh (vector bool short, vector bool short);
35471     vector pixel vec_mergeh (vector pixel, vector pixel);
35472     vector signed short vec_mergeh (vector signed short,
35473                                     vector signed short);
35474     vector unsigned short vec_mergeh (vector unsigned short,
35475                                       vector unsigned short);
35476     vector float vec_mergeh (vector float, vector float);
35477     vector bool int vec_mergeh (vector bool int, vector bool int);
35478     vector signed int vec_mergeh (vector signed int, vector signed int);
35479     vector unsigned int vec_mergeh (vector unsigned int,
35480                                     vector unsigned int);
35481
35482     vector float vec_vmrghw (vector float, vector float);
35483     vector bool int vec_vmrghw (vector bool int, vector bool int);
35484     vector signed int vec_vmrghw (vector signed int, vector signed int);
35485     vector unsigned int vec_vmrghw (vector unsigned int,
35486                                     vector unsigned int);
35487
35488     vector bool short vec_vmrghh (vector bool short, vector bool short);
35489     vector signed short vec_vmrghh (vector signed short,
35490                                     vector signed short);
35491     vector unsigned short vec_vmrghh (vector unsigned short,
35492                                       vector unsigned short);
35493     vector pixel vec_vmrghh (vector pixel, vector pixel);
35494
35495     vector bool char vec_vmrghb (vector bool char, vector bool char);
35496     vector signed char vec_vmrghb (vector signed char, vector signed char);
35497     vector unsigned char vec_vmrghb (vector unsigned char,
35498                                      vector unsigned char);
35499
35500     vector bool char vec_mergel (vector bool char, vector bool char);
35501     vector signed char vec_mergel (vector signed char, vector signed char);
35502     vector unsigned char vec_mergel (vector unsigned char,
35503                                      vector unsigned char);
35504     vector bool short vec_mergel (vector bool short, vector bool short);
35505     vector pixel vec_mergel (vector pixel, vector pixel);
35506     vector signed short vec_mergel (vector signed short,
35507                                     vector signed short);
35508     vector unsigned short vec_mergel (vector unsigned short,
35509                                       vector unsigned short);
35510     vector float vec_mergel (vector float, vector float);
35511     vector bool int vec_mergel (vector bool int, vector bool int);
35512     vector signed int vec_mergel (vector signed int, vector signed int);
35513     vector unsigned int vec_mergel (vector unsigned int,
35514                                     vector unsigned int);
35515
35516     vector float vec_vmrglw (vector float, vector float);
35517     vector signed int vec_vmrglw (vector signed int, vector signed int);
35518     vector unsigned int vec_vmrglw (vector unsigned int,
35519                                     vector unsigned int);
35520     vector bool int vec_vmrglw (vector bool int, vector bool int);
35521
35522     vector bool short vec_vmrglh (vector bool short, vector bool short);
35523     vector signed short vec_vmrglh (vector signed short,
35524                                     vector signed short);
35525     vector unsigned short vec_vmrglh (vector unsigned short,
35526                                       vector unsigned short);
35527     vector pixel vec_vmrglh (vector pixel, vector pixel);
35528
35529     vector bool char vec_vmrglb (vector bool char, vector bool char);
35530     vector signed char vec_vmrglb (vector signed char, vector signed char);
35531     vector unsigned char vec_vmrglb (vector unsigned char,
35532                                      vector unsigned char);
35533
35534     vector unsigned short vec_mfvscr (void);
35535
35536     vector unsigned char vec_min (vector bool char, vector unsigned char);
35537     vector unsigned char vec_min (vector unsigned char, vector bool char);
35538     vector unsigned char vec_min (vector unsigned char,
35539                                   vector unsigned char);
35540     vector signed char vec_min (vector bool char, vector signed char);
35541     vector signed char vec_min (vector signed char, vector bool char);
35542     vector signed char vec_min (vector signed char, vector signed char);
35543     vector unsigned short vec_min (vector bool short,
35544                                    vector unsigned short);
35545     vector unsigned short vec_min (vector unsigned short,
35546                                    vector bool short);
35547     vector unsigned short vec_min (vector unsigned short,
35548                                    vector unsigned short);
35549     vector signed short vec_min (vector bool short, vector signed short);
35550     vector signed short vec_min (vector signed short, vector bool short);
35551     vector signed short vec_min (vector signed short, vector signed short);
35552     vector unsigned int vec_min (vector bool int, vector unsigned int);
35553     vector unsigned int vec_min (vector unsigned int, vector bool int);
35554     vector unsigned int vec_min (vector unsigned int, vector unsigned int);
35555     vector signed int vec_min (vector bool int, vector signed int);
35556     vector signed int vec_min (vector signed int, vector bool int);
35557     vector signed int vec_min (vector signed int, vector signed int);
35558     vector float vec_min (vector float, vector float);
35559
35560     vector float vec_vminfp (vector float, vector float);
35561
35562     vector signed int vec_vminsw (vector bool int, vector signed int);
35563     vector signed int vec_vminsw (vector signed int, vector bool int);
35564     vector signed int vec_vminsw (vector signed int, vector signed int);
35565
35566     vector unsigned int vec_vminuw (vector bool int, vector unsigned int);
35567     vector unsigned int vec_vminuw (vector unsigned int, vector bool int);
35568     vector unsigned int vec_vminuw (vector unsigned int,
35569                                     vector unsigned int);
35570
35571     vector signed short vec_vminsh (vector bool short, vector signed short);
35572     vector signed short vec_vminsh (vector signed short, vector bool short);
35573     vector signed short vec_vminsh (vector signed short,
35574                                     vector signed short);
35575
35576     vector unsigned short vec_vminuh (vector bool short,
35577                                       vector unsigned short);
35578     vector unsigned short vec_vminuh (vector unsigned short,
35579                                       vector bool short);
35580     vector unsigned short vec_vminuh (vector unsigned short,
35581                                       vector unsigned short);
35582
35583     vector signed char vec_vminsb (vector bool char, vector signed char);
35584     vector signed char vec_vminsb (vector signed char, vector bool char);
35585     vector signed char vec_vminsb (vector signed char, vector signed char);
35586
35587     vector unsigned char vec_vminub (vector bool char,
35588                                      vector unsigned char);
35589     vector unsigned char vec_vminub (vector unsigned char,
35590                                      vector bool char);
35591     vector unsigned char vec_vminub (vector unsigned char,
35592                                      vector unsigned char);
35593
35594     vector signed short vec_mladd (vector signed short,
35595                                    vector signed short,
35596                                    vector signed short);
35597     vector signed short vec_mladd (vector signed short,
35598                                    vector unsigned short,
35599                                    vector unsigned short);
35600     vector signed short vec_mladd (vector unsigned short,
35601                                    vector signed short,
35602                                    vector signed short);
35603     vector unsigned short vec_mladd (vector unsigned short,
35604                                      vector unsigned short,
35605                                      vector unsigned short);
35606
35607     vector signed short vec_mradds (vector signed short,
35608                                     vector signed short,
35609                                     vector signed short);
35610
35611     vector unsigned int vec_msum (vector unsigned char,
35612                                   vector unsigned char,
35613                                   vector unsigned int);
35614     vector signed int vec_msum (vector signed char,
35615                                 vector unsigned char,
35616                                 vector signed int);
35617     vector unsigned int vec_msum (vector unsigned short,
35618                                   vector unsigned short,
35619                                   vector unsigned int);
35620     vector signed int vec_msum (vector signed short,
35621                                 vector signed short,
35622                                 vector signed int);
35623
35624     vector signed int vec_vmsumshm (vector signed short,
35625                                     vector signed short,
35626                                     vector signed int);
35627
35628     vector unsigned int vec_vmsumuhm (vector unsigned short,
35629                                       vector unsigned short,
35630                                       vector unsigned int);
35631
35632     vector signed int vec_vmsummbm (vector signed char,
35633                                     vector unsigned char,
35634                                     vector signed int);
35635
35636     vector unsigned int vec_vmsumubm (vector unsigned char,
35637                                       vector unsigned char,
35638                                       vector unsigned int);
35639
35640     vector unsigned int vec_msums (vector unsigned short,
35641                                    vector unsigned short,
35642                                    vector unsigned int);
35643     vector signed int vec_msums (vector signed short,
35644                                  vector signed short,
35645                                  vector signed int);
35646
35647     vector signed int vec_vmsumshs (vector signed short,
35648                                     vector signed short,
35649                                     vector signed int);
35650
35651     vector unsigned int vec_vmsumuhs (vector unsigned short,
35652                                       vector unsigned short,
35653                                       vector unsigned int);
35654
35655     void vec_mtvscr (vector signed int);
35656     void vec_mtvscr (vector unsigned int);
35657     void vec_mtvscr (vector bool int);
35658     void vec_mtvscr (vector signed short);
35659     void vec_mtvscr (vector unsigned short);
35660     void vec_mtvscr (vector bool short);
35661     void vec_mtvscr (vector pixel);
35662     void vec_mtvscr (vector signed char);
35663     void vec_mtvscr (vector unsigned char);
35664     void vec_mtvscr (vector bool char);
35665
35666     vector unsigned short vec_mule (vector unsigned char,
35667                                     vector unsigned char);
35668     vector signed short vec_mule (vector signed char,
35669                                   vector signed char);
35670     vector unsigned int vec_mule (vector unsigned short,
35671                                   vector unsigned short);
35672     vector signed int vec_mule (vector signed short, vector signed short);
35673
35674     vector signed int vec_vmulesh (vector signed short,
35675                                    vector signed short);
35676
35677     vector unsigned int vec_vmuleuh (vector unsigned short,
35678                                      vector unsigned short);
35679
35680     vector signed short vec_vmulesb (vector signed char,
35681                                      vector signed char);
35682
35683     vector unsigned short vec_vmuleub (vector unsigned char,
35684                                       vector unsigned char);
35685
35686     vector unsigned short vec_mulo (vector unsigned char,
35687                                     vector unsigned char);
35688     vector signed short vec_mulo (vector signed char, vector signed char);
35689     vector unsigned int vec_mulo (vector unsigned short,
35690                                   vector unsigned short);
35691     vector signed int vec_mulo (vector signed short, vector signed short);
35692
35693     vector signed int vec_vmulosh (vector signed short,
35694                                    vector signed short);
35695
35696     vector unsigned int vec_vmulouh (vector unsigned short,
35697                                      vector unsigned short);
35698
35699     vector signed short vec_vmulosb (vector signed char,
35700                                      vector signed char);
35701
35702     vector unsigned short vec_vmuloub (vector unsigned char,
35703                                        vector unsigned char);
35704
35705     vector float vec_nmsub (vector float, vector float, vector float);
35706
35707     vector float vec_nor (vector float, vector float);
35708     vector signed int vec_nor (vector signed int, vector signed int);
35709     vector unsigned int vec_nor (vector unsigned int, vector unsigned int);
35710     vector bool int vec_nor (vector bool int, vector bool int);
35711     vector signed short vec_nor (vector signed short, vector signed short);
35712     vector unsigned short vec_nor (vector unsigned short,
35713                                    vector unsigned short);
35714     vector bool short vec_nor (vector bool short, vector bool short);
35715     vector signed char vec_nor (vector signed char, vector signed char);
35716     vector unsigned char vec_nor (vector unsigned char,
35717                                   vector unsigned char);
35718     vector bool char vec_nor (vector bool char, vector bool char);
35719
35720     vector float vec_or (vector float, vector float);
35721     vector float vec_or (vector float, vector bool int);
35722     vector float vec_or (vector bool int, vector float);
35723     vector bool int vec_or (vector bool int, vector bool int);
35724     vector signed int vec_or (vector bool int, vector signed int);
35725     vector signed int vec_or (vector signed int, vector bool int);
35726     vector signed int vec_or (vector signed int, vector signed int);
35727     vector unsigned int vec_or (vector bool int, vector unsigned int);
35728     vector unsigned int vec_or (vector unsigned int, vector bool int);
35729     vector unsigned int vec_or (vector unsigned int, vector unsigned int);
35730     vector bool short vec_or (vector bool short, vector bool short);
35731     vector signed short vec_or (vector bool short, vector signed short);
35732     vector signed short vec_or (vector signed short, vector bool short);
35733     vector signed short vec_or (vector signed short, vector signed short);
35734     vector unsigned short vec_or (vector bool short, vector unsigned short);
35735     vector unsigned short vec_or (vector unsigned short, vector bool short);
35736     vector unsigned short vec_or (vector unsigned short,
35737                                   vector unsigned short);
35738     vector signed char vec_or (vector bool char, vector signed char);
35739     vector bool char vec_or (vector bool char, vector bool char);
35740     vector signed char vec_or (vector signed char, vector bool char);
35741     vector signed char vec_or (vector signed char, vector signed char);
35742     vector unsigned char vec_or (vector bool char, vector unsigned char);
35743     vector unsigned char vec_or (vector unsigned char, vector bool char);
35744     vector unsigned char vec_or (vector unsigned char,
35745                                  vector unsigned char);
35746
35747     vector signed char vec_pack (vector signed short, vector signed short);
35748     vector unsigned char vec_pack (vector unsigned short,
35749                                    vector unsigned short);
35750     vector bool char vec_pack (vector bool short, vector bool short);
35751     vector signed short vec_pack (vector signed int, vector signed int);
35752     vector unsigned short vec_pack (vector unsigned int,
35753                                     vector unsigned int);
35754     vector bool short vec_pack (vector bool int, vector bool int);
35755
35756     vector bool short vec_vpkuwum (vector bool int, vector bool int);
35757     vector signed short vec_vpkuwum (vector signed int, vector signed int);
35758     vector unsigned short vec_vpkuwum (vector unsigned int,
35759                                        vector unsigned int);
35760
35761     vector bool char vec_vpkuhum (vector bool short, vector bool short);
35762     vector signed char vec_vpkuhum (vector signed short,
35763                                     vector signed short);
35764     vector unsigned char vec_vpkuhum (vector unsigned short,
35765                                       vector unsigned short);
35766
35767     vector pixel vec_packpx (vector unsigned int, vector unsigned int);
35768
35769     vector unsigned char vec_packs (vector unsigned short,
35770                                     vector unsigned short);
35771     vector signed char vec_packs (vector signed short, vector signed short);
35772     vector unsigned short vec_packs (vector unsigned int,
35773                                      vector unsigned int);
35774     vector signed short vec_packs (vector signed int, vector signed int);
35775
35776     vector signed short vec_vpkswss (vector signed int, vector signed int);
35777
35778     vector unsigned short vec_vpkuwus (vector unsigned int,
35779                                        vector unsigned int);
35780
35781     vector signed char vec_vpkshss (vector signed short,
35782                                     vector signed short);
35783
35784     vector unsigned char vec_vpkuhus (vector unsigned short,
35785                                       vector unsigned short);
35786
35787     vector unsigned char vec_packsu (vector unsigned short,
35788                                      vector unsigned short);
35789     vector unsigned char vec_packsu (vector signed short,
35790                                      vector signed short);
35791     vector unsigned short vec_packsu (vector unsigned int,
35792                                       vector unsigned int);
35793     vector unsigned short vec_packsu (vector signed int, vector signed int);
35794
35795     vector unsigned short vec_vpkswus (vector signed int,
35796                                        vector signed int);
35797
35798     vector unsigned char vec_vpkshus (vector signed short,
35799                                       vector signed short);
35800
35801     vector float vec_perm (vector float,
35802                            vector float,
35803                            vector unsigned char);
35804     vector signed int vec_perm (vector signed int,
35805                                 vector signed int,
35806                                 vector unsigned char);
35807     vector unsigned int vec_perm (vector unsigned int,
35808                                   vector unsigned int,
35809                                   vector unsigned char);
35810     vector bool int vec_perm (vector bool int,
35811                               vector bool int,
35812                               vector unsigned char);
35813     vector signed short vec_perm (vector signed short,
35814                                   vector signed short,
35815                                   vector unsigned char);
35816     vector unsigned short vec_perm (vector unsigned short,
35817                                     vector unsigned short,
35818                                     vector unsigned char);
35819     vector bool short vec_perm (vector bool short,
35820                                 vector bool short,
35821                                 vector unsigned char);
35822     vector pixel vec_perm (vector pixel,
35823                            vector pixel,
35824                            vector unsigned char);
35825     vector signed char vec_perm (vector signed char,
35826                                  vector signed char,
35827                                  vector unsigned char);
35828     vector unsigned char vec_perm (vector unsigned char,
35829                                    vector unsigned char,
35830                                    vector unsigned char);
35831     vector bool char vec_perm (vector bool char,
35832                                vector bool char,
35833                                vector unsigned char);
35834
35835     vector float vec_re (vector float);
35836
35837     vector signed char vec_rl (vector signed char,
35838                                vector unsigned char);
35839     vector unsigned char vec_rl (vector unsigned char,
35840                                  vector unsigned char);
35841     vector signed short vec_rl (vector signed short, vector unsigned short);
35842     vector unsigned short vec_rl (vector unsigned short,
35843                                   vector unsigned short);
35844     vector signed int vec_rl (vector signed int, vector unsigned int);
35845     vector unsigned int vec_rl (vector unsigned int, vector unsigned int);
35846
35847     vector signed int vec_vrlw (vector signed int, vector unsigned int);
35848     vector unsigned int vec_vrlw (vector unsigned int, vector unsigned int);
35849
35850     vector signed short vec_vrlh (vector signed short,
35851                                   vector unsigned short);
35852     vector unsigned short vec_vrlh (vector unsigned short,
35853                                     vector unsigned short);
35854
35855     vector signed char vec_vrlb (vector signed char, vector unsigned char);
35856     vector unsigned char vec_vrlb (vector unsigned char,
35857                                    vector unsigned char);
35858
35859     vector float vec_round (vector float);
35860
35861     vector float vec_recip (vector float, vector float);
35862
35863     vector float vec_rsqrt (vector float);
35864
35865     vector float vec_rsqrte (vector float);
35866
35867     vector float vec_sel (vector float, vector float, vector bool int);
35868     vector float vec_sel (vector float, vector float, vector unsigned int);
35869     vector signed int vec_sel (vector signed int,
35870                                vector signed int,
35871                                vector bool int);
35872     vector signed int vec_sel (vector signed int,
35873                                vector signed int,
35874                                vector unsigned int);
35875     vector unsigned int vec_sel (vector unsigned int,
35876                                  vector unsigned int,
35877                                  vector bool int);
35878     vector unsigned int vec_sel (vector unsigned int,
35879                                  vector unsigned int,
35880                                  vector unsigned int);
35881     vector bool int vec_sel (vector bool int,
35882                              vector bool int,
35883                              vector bool int);
35884     vector bool int vec_sel (vector bool int,
35885                              vector bool int,
35886                              vector unsigned int);
35887     vector signed short vec_sel (vector signed short,
35888                                  vector signed short,
35889                                  vector bool short);
35890     vector signed short vec_sel (vector signed short,
35891                                  vector signed short,
35892                                  vector unsigned short);
35893     vector unsigned short vec_sel (vector unsigned short,
35894                                    vector unsigned short,
35895                                    vector bool short);
35896     vector unsigned short vec_sel (vector unsigned short,
35897                                    vector unsigned short,
35898                                    vector unsigned short);
35899     vector bool short vec_sel (vector bool short,
35900                                vector bool short,
35901                                vector bool short);
35902     vector bool short vec_sel (vector bool short,
35903                                vector bool short,
35904                                vector unsigned short);
35905     vector signed char vec_sel (vector signed char,
35906                                 vector signed char,
35907                                 vector bool char);
35908     vector signed char vec_sel (vector signed char,
35909                                 vector signed char,
35910                                 vector unsigned char);
35911     vector unsigned char vec_sel (vector unsigned char,
35912                                   vector unsigned char,
35913                                   vector bool char);
35914     vector unsigned char vec_sel (vector unsigned char,
35915                                   vector unsigned char,
35916                                   vector unsigned char);
35917     vector bool char vec_sel (vector bool char,
35918                               vector bool char,
35919                               vector bool char);
35920     vector bool char vec_sel (vector bool char,
35921                               vector bool char,
35922                               vector unsigned char);
35923
35924     vector signed char vec_sl (vector signed char,
35925                                vector unsigned char);
35926     vector unsigned char vec_sl (vector unsigned char,
35927                                  vector unsigned char);
35928     vector signed short vec_sl (vector signed short, vector unsigned short);
35929     vector unsigned short vec_sl (vector unsigned short,
35930                                   vector unsigned short);
35931     vector signed int vec_sl (vector signed int, vector unsigned int);
35932     vector unsigned int vec_sl (vector unsigned int, vector unsigned int);
35933
35934     vector signed int vec_vslw (vector signed int, vector unsigned int);
35935     vector unsigned int vec_vslw (vector unsigned int, vector unsigned int);
35936
35937     vector signed short vec_vslh (vector signed short,
35938                                   vector unsigned short);
35939     vector unsigned short vec_vslh (vector unsigned short,
35940                                     vector unsigned short);
35941
35942     vector signed char vec_vslb (vector signed char, vector unsigned char);
35943     vector unsigned char vec_vslb (vector unsigned char,
35944                                    vector unsigned char);
35945
35946     vector float vec_sld (vector float, vector float, const int);
35947     vector signed int vec_sld (vector signed int,
35948                                vector signed int,
35949                                const int);
35950     vector unsigned int vec_sld (vector unsigned int,
35951                                  vector unsigned int,
35952                                  const int);
35953     vector bool int vec_sld (vector bool int,
35954                              vector bool int,
35955                              const int);
35956     vector signed short vec_sld (vector signed short,
35957                                  vector signed short,
35958                                  const int);
35959     vector unsigned short vec_sld (vector unsigned short,
35960                                    vector unsigned short,
35961                                    const int);
35962     vector bool short vec_sld (vector bool short,
35963                                vector bool short,
35964                                const int);
35965     vector pixel vec_sld (vector pixel,
35966                           vector pixel,
35967                           const int);
35968     vector signed char vec_sld (vector signed char,
35969                                 vector signed char,
35970                                 const int);
35971     vector unsigned char vec_sld (vector unsigned char,
35972                                   vector unsigned char,
35973                                   const int);
35974     vector bool char vec_sld (vector bool char,
35975                               vector bool char,
35976                               const int);
35977
35978     vector signed int vec_sll (vector signed int,
35979                                vector unsigned int);
35980     vector signed int vec_sll (vector signed int,
35981                                vector unsigned short);
35982     vector signed int vec_sll (vector signed int,
35983                                vector unsigned char);
35984     vector unsigned int vec_sll (vector unsigned int,
35985                                  vector unsigned int);
35986     vector unsigned int vec_sll (vector unsigned int,
35987                                  vector unsigned short);
35988     vector unsigned int vec_sll (vector unsigned int,
35989                                  vector unsigned char);
35990     vector bool int vec_sll (vector bool int,
35991                              vector unsigned int);
35992     vector bool int vec_sll (vector bool int,
35993                              vector unsigned short);
35994     vector bool int vec_sll (vector bool int,
35995                              vector unsigned char);
35996     vector signed short vec_sll (vector signed short,
35997                                  vector unsigned int);
35998     vector signed short vec_sll (vector signed short,
35999                                  vector unsigned short);
36000     vector signed short vec_sll (vector signed short,
36001                                  vector unsigned char);
36002     vector unsigned short vec_sll (vector unsigned short,
36003                                    vector unsigned int);
36004     vector unsigned short vec_sll (vector unsigned short,
36005                                    vector unsigned short);
36006     vector unsigned short vec_sll (vector unsigned short,
36007                                    vector unsigned char);
36008     vector bool short vec_sll (vector bool short, vector unsigned int);
36009     vector bool short vec_sll (vector bool short, vector unsigned short);
36010     vector bool short vec_sll (vector bool short, vector unsigned char);
36011     vector pixel vec_sll (vector pixel, vector unsigned int);
36012     vector pixel vec_sll (vector pixel, vector unsigned short);
36013     vector pixel vec_sll (vector pixel, vector unsigned char);
36014     vector signed char vec_sll (vector signed char, vector unsigned int);
36015     vector signed char vec_sll (vector signed char, vector unsigned short);
36016     vector signed char vec_sll (vector signed char, vector unsigned char);
36017     vector unsigned char vec_sll (vector unsigned char,
36018                                   vector unsigned int);
36019     vector unsigned char vec_sll (vector unsigned char,
36020                                   vector unsigned short);
36021     vector unsigned char vec_sll (vector unsigned char,
36022                                   vector unsigned char);
36023     vector bool char vec_sll (vector bool char, vector unsigned int);
36024     vector bool char vec_sll (vector bool char, vector unsigned short);
36025     vector bool char vec_sll (vector bool char, vector unsigned char);
36026
36027     vector float vec_slo (vector float, vector signed char);
36028     vector float vec_slo (vector float, vector unsigned char);
36029     vector signed int vec_slo (vector signed int, vector signed char);
36030     vector signed int vec_slo (vector signed int, vector unsigned char);
36031     vector unsigned int vec_slo (vector unsigned int, vector signed char);
36032     vector unsigned int vec_slo (vector unsigned int, vector unsigned char);
36033     vector signed short vec_slo (vector signed short, vector signed char);
36034     vector signed short vec_slo (vector signed short, vector unsigned char);
36035     vector unsigned short vec_slo (vector unsigned short,
36036                                    vector signed char);
36037     vector unsigned short vec_slo (vector unsigned short,
36038                                    vector unsigned char);
36039     vector pixel vec_slo (vector pixel, vector signed char);
36040     vector pixel vec_slo (vector pixel, vector unsigned char);
36041     vector signed char vec_slo (vector signed char, vector signed char);
36042     vector signed char vec_slo (vector signed char, vector unsigned char);
36043     vector unsigned char vec_slo (vector unsigned char, vector signed char);
36044     vector unsigned char vec_slo (vector unsigned char,
36045                                   vector unsigned char);
36046
36047     vector signed char vec_splat (vector signed char, const int);
36048     vector unsigned char vec_splat (vector unsigned char, const int);
36049     vector bool char vec_splat (vector bool char, const int);
36050     vector signed short vec_splat (vector signed short, const int);
36051     vector unsigned short vec_splat (vector unsigned short, const int);
36052     vector bool short vec_splat (vector bool short, const int);
36053     vector pixel vec_splat (vector pixel, const int);
36054     vector float vec_splat (vector float, const int);
36055     vector signed int vec_splat (vector signed int, const int);
36056     vector unsigned int vec_splat (vector unsigned int, const int);
36057     vector bool int vec_splat (vector bool int, const int);
36058
36059     vector float vec_vspltw (vector float, const int);
36060     vector signed int vec_vspltw (vector signed int, const int);
36061     vector unsigned int vec_vspltw (vector unsigned int, const int);
36062     vector bool int vec_vspltw (vector bool int, const int);
36063
36064     vector bool short vec_vsplth (vector bool short, const int);
36065     vector signed short vec_vsplth (vector signed short, const int);
36066     vector unsigned short vec_vsplth (vector unsigned short, const int);
36067     vector pixel vec_vsplth (vector pixel, const int);
36068
36069     vector signed char vec_vspltb (vector signed char, const int);
36070     vector unsigned char vec_vspltb (vector unsigned char, const int);
36071     vector bool char vec_vspltb (vector bool char, const int);
36072
36073     vector signed char vec_splat_s8 (const int);
36074
36075     vector signed short vec_splat_s16 (const int);
36076
36077     vector signed int vec_splat_s32 (const int);
36078
36079     vector unsigned char vec_splat_u8 (const int);
36080
36081     vector unsigned short vec_splat_u16 (const int);
36082
36083     vector unsigned int vec_splat_u32 (const int);
36084
36085     vector signed char vec_sr (vector signed char, vector unsigned char);
36086     vector unsigned char vec_sr (vector unsigned char,
36087                                  vector unsigned char);
36088     vector signed short vec_sr (vector signed short,
36089                                 vector unsigned short);
36090     vector unsigned short vec_sr (vector unsigned short,
36091                                   vector unsigned short);
36092     vector signed int vec_sr (vector signed int, vector unsigned int);
36093     vector unsigned int vec_sr (vector unsigned int, vector unsigned int);
36094
36095     vector signed int vec_vsrw (vector signed int, vector unsigned int);
36096     vector unsigned int vec_vsrw (vector unsigned int, vector unsigned int);
36097
36098     vector signed short vec_vsrh (vector signed short,
36099                                   vector unsigned short);
36100     vector unsigned short vec_vsrh (vector unsigned short,
36101                                     vector unsigned short);
36102
36103     vector signed char vec_vsrb (vector signed char, vector unsigned char);
36104     vector unsigned char vec_vsrb (vector unsigned char,
36105                                    vector unsigned char);
36106
36107     vector signed char vec_sra (vector signed char, vector unsigned char);
36108     vector unsigned char vec_sra (vector unsigned char,
36109                                   vector unsigned char);
36110     vector signed short vec_sra (vector signed short,
36111                                  vector unsigned short);
36112     vector unsigned short vec_sra (vector unsigned short,
36113                                    vector unsigned short);
36114     vector signed int vec_sra (vector signed int, vector unsigned int);
36115     vector unsigned int vec_sra (vector unsigned int, vector unsigned int);
36116
36117     vector signed int vec_vsraw (vector signed int, vector unsigned int);
36118     vector unsigned int vec_vsraw (vector unsigned int,
36119                                    vector unsigned int);
36120
36121     vector signed short vec_vsrah (vector signed short,
36122                                    vector unsigned short);
36123     vector unsigned short vec_vsrah (vector unsigned short,
36124                                      vector unsigned short);
36125
36126     vector signed char vec_vsrab (vector signed char, vector unsigned char);
36127     vector unsigned char vec_vsrab (vector unsigned char,
36128                                     vector unsigned char);
36129
36130     vector signed int vec_srl (vector signed int, vector unsigned int);
36131     vector signed int vec_srl (vector signed int, vector unsigned short);
36132     vector signed int vec_srl (vector signed int, vector unsigned char);
36133     vector unsigned int vec_srl (vector unsigned int, vector unsigned int);
36134     vector unsigned int vec_srl (vector unsigned int,
36135                                  vector unsigned short);
36136     vector unsigned int vec_srl (vector unsigned int, vector unsigned char);
36137     vector bool int vec_srl (vector bool int, vector unsigned int);
36138     vector bool int vec_srl (vector bool int, vector unsigned short);
36139     vector bool int vec_srl (vector bool int, vector unsigned char);
36140     vector signed short vec_srl (vector signed short, vector unsigned int);
36141     vector signed short vec_srl (vector signed short,
36142                                  vector unsigned short);
36143     vector signed short vec_srl (vector signed short, vector unsigned char);
36144     vector unsigned short vec_srl (vector unsigned short,
36145                                    vector unsigned int);
36146     vector unsigned short vec_srl (vector unsigned short,
36147                                    vector unsigned short);
36148     vector unsigned short vec_srl (vector unsigned short,
36149                                    vector unsigned char);
36150     vector bool short vec_srl (vector bool short, vector unsigned int);
36151     vector bool short vec_srl (vector bool short, vector unsigned short);
36152     vector bool short vec_srl (vector bool short, vector unsigned char);
36153     vector pixel vec_srl (vector pixel, vector unsigned int);
36154     vector pixel vec_srl (vector pixel, vector unsigned short);
36155     vector pixel vec_srl (vector pixel, vector unsigned char);
36156     vector signed char vec_srl (vector signed char, vector unsigned int);
36157     vector signed char vec_srl (vector signed char, vector unsigned short);
36158     vector signed char vec_srl (vector signed char, vector unsigned char);
36159     vector unsigned char vec_srl (vector unsigned char,
36160                                   vector unsigned int);
36161     vector unsigned char vec_srl (vector unsigned char,
36162                                   vector unsigned short);
36163     vector unsigned char vec_srl (vector unsigned char,
36164                                   vector unsigned char);
36165     vector bool char vec_srl (vector bool char, vector unsigned int);
36166     vector bool char vec_srl (vector bool char, vector unsigned short);
36167     vector bool char vec_srl (vector bool char, vector unsigned char);
36168
36169     vector float vec_sro (vector float, vector signed char);
36170     vector float vec_sro (vector float, vector unsigned char);
36171     vector signed int vec_sro (vector signed int, vector signed char);
36172     vector signed int vec_sro (vector signed int, vector unsigned char);
36173     vector unsigned int vec_sro (vector unsigned int, vector signed char);
36174     vector unsigned int vec_sro (vector unsigned int, vector unsigned char);
36175     vector signed short vec_sro (vector signed short, vector signed char);
36176     vector signed short vec_sro (vector signed short, vector unsigned char);
36177     vector unsigned short vec_sro (vector unsigned short,
36178                                    vector signed char);
36179     vector unsigned short vec_sro (vector unsigned short,
36180                                    vector unsigned char);
36181     vector pixel vec_sro (vector pixel, vector signed char);
36182     vector pixel vec_sro (vector pixel, vector unsigned char);
36183     vector signed char vec_sro (vector signed char, vector signed char);
36184     vector signed char vec_sro (vector signed char, vector unsigned char);
36185     vector unsigned char vec_sro (vector unsigned char, vector signed char);
36186     vector unsigned char vec_sro (vector unsigned char,
36187                                   vector unsigned char);
36188
36189     void vec_st (vector float, int, vector float *);
36190     void vec_st (vector float, int, float *);
36191     void vec_st (vector signed int, int, vector signed int *);
36192     void vec_st (vector signed int, int, int *);
36193     void vec_st (vector unsigned int, int, vector unsigned int *);
36194     void vec_st (vector unsigned int, int, unsigned int *);
36195     void vec_st (vector bool int, int, vector bool int *);
36196     void vec_st (vector bool int, int, unsigned int *);
36197     void vec_st (vector bool int, int, int *);
36198     void vec_st (vector signed short, int, vector signed short *);
36199     void vec_st (vector signed short, int, short *);
36200     void vec_st (vector unsigned short, int, vector unsigned short *);
36201     void vec_st (vector unsigned short, int, unsigned short *);
36202     void vec_st (vector bool short, int, vector bool short *);
36203     void vec_st (vector bool short, int, unsigned short *);
36204     void vec_st (vector pixel, int, vector pixel *);
36205     void vec_st (vector pixel, int, unsigned short *);
36206     void vec_st (vector pixel, int, short *);
36207     void vec_st (vector bool short, int, short *);
36208     void vec_st (vector signed char, int, vector signed char *);
36209     void vec_st (vector signed char, int, signed char *);
36210     void vec_st (vector unsigned char, int, vector unsigned char *);
36211     void vec_st (vector unsigned char, int, unsigned char *);
36212     void vec_st (vector bool char, int, vector bool char *);
36213     void vec_st (vector bool char, int, unsigned char *);
36214     void vec_st (vector bool char, int, signed char *);
36215
36216     void vec_ste (vector signed char, int, signed char *);
36217     void vec_ste (vector unsigned char, int, unsigned char *);
36218     void vec_ste (vector bool char, int, signed char *);
36219     void vec_ste (vector bool char, int, unsigned char *);
36220     void vec_ste (vector signed short, int, short *);
36221     void vec_ste (vector unsigned short, int, unsigned short *);
36222     void vec_ste (vector bool short, int, short *);
36223     void vec_ste (vector bool short, int, unsigned short *);
36224     void vec_ste (vector pixel, int, short *);
36225     void vec_ste (vector pixel, int, unsigned short *);
36226     void vec_ste (vector float, int, float *);
36227     void vec_ste (vector signed int, int, int *);
36228     void vec_ste (vector unsigned int, int, unsigned int *);
36229     void vec_ste (vector bool int, int, int *);
36230     void vec_ste (vector bool int, int, unsigned int *);
36231
36232     void vec_stvewx (vector float, int, float *);
36233     void vec_stvewx (vector signed int, int, int *);
36234     void vec_stvewx (vector unsigned int, int, unsigned int *);
36235     void vec_stvewx (vector bool int, int, int *);
36236     void vec_stvewx (vector bool int, int, unsigned int *);
36237
36238     void vec_stvehx (vector signed short, int, short *);
36239     void vec_stvehx (vector unsigned short, int, unsigned short *);
36240     void vec_stvehx (vector bool short, int, short *);
36241     void vec_stvehx (vector bool short, int, unsigned short *);
36242     void vec_stvehx (vector pixel, int, short *);
36243     void vec_stvehx (vector pixel, int, unsigned short *);
36244
36245     void vec_stvebx (vector signed char, int, signed char *);
36246     void vec_stvebx (vector unsigned char, int, unsigned char *);
36247     void vec_stvebx (vector bool char, int, signed char *);
36248     void vec_stvebx (vector bool char, int, unsigned char *);
36249
36250     void vec_stl (vector float, int, vector float *);
36251     void vec_stl (vector float, int, float *);
36252     void vec_stl (vector signed int, int, vector signed int *);
36253     void vec_stl (vector signed int, int, int *);
36254     void vec_stl (vector unsigned int, int, vector unsigned int *);
36255     void vec_stl (vector unsigned int, int, unsigned int *);
36256     void vec_stl (vector bool int, int, vector bool int *);
36257     void vec_stl (vector bool int, int, unsigned int *);
36258     void vec_stl (vector bool int, int, int *);
36259     void vec_stl (vector signed short, int, vector signed short *);
36260     void vec_stl (vector signed short, int, short *);
36261     void vec_stl (vector unsigned short, int, vector unsigned short *);
36262     void vec_stl (vector unsigned short, int, unsigned short *);
36263     void vec_stl (vector bool short, int, vector bool short *);
36264     void vec_stl (vector bool short, int, unsigned short *);
36265     void vec_stl (vector bool short, int, short *);
36266     void vec_stl (vector pixel, int, vector pixel *);
36267     void vec_stl (vector pixel, int, unsigned short *);
36268     void vec_stl (vector pixel, int, short *);
36269     void vec_stl (vector signed char, int, vector signed char *);
36270     void vec_stl (vector signed char, int, signed char *);
36271     void vec_stl (vector unsigned char, int, vector unsigned char *);
36272     void vec_stl (vector unsigned char, int, unsigned char *);
36273     void vec_stl (vector bool char, int, vector bool char *);
36274     void vec_stl (vector bool char, int, unsigned char *);
36275     void vec_stl (vector bool char, int, signed char *);
36276
36277     vector signed char vec_sub (vector bool char, vector signed char);
36278     vector signed char vec_sub (vector signed char, vector bool char);
36279     vector signed char vec_sub (vector signed char, vector signed char);
36280     vector unsigned char vec_sub (vector bool char, vector unsigned char);
36281     vector unsigned char vec_sub (vector unsigned char, vector bool char);
36282     vector unsigned char vec_sub (vector unsigned char,
36283                                   vector unsigned char);
36284     vector signed short vec_sub (vector bool short, vector signed short);
36285     vector signed short vec_sub (vector signed short, vector bool short);
36286     vector signed short vec_sub (vector signed short, vector signed short);
36287     vector unsigned short vec_sub (vector bool short,
36288                                    vector unsigned short);
36289     vector unsigned short vec_sub (vector unsigned short,
36290                                    vector bool short);
36291     vector unsigned short vec_sub (vector unsigned short,
36292                                    vector unsigned short);
36293     vector signed int vec_sub (vector bool int, vector signed int);
36294     vector signed int vec_sub (vector signed int, vector bool int);
36295     vector signed int vec_sub (vector signed int, vector signed int);
36296     vector unsigned int vec_sub (vector bool int, vector unsigned int);
36297     vector unsigned int vec_sub (vector unsigned int, vector bool int);
36298     vector unsigned int vec_sub (vector unsigned int, vector unsigned int);
36299     vector float vec_sub (vector float, vector float);
36300
36301     vector float vec_vsubfp (vector float, vector float);
36302
36303     vector signed int vec_vsubuwm (vector bool int, vector signed int);
36304     vector signed int vec_vsubuwm (vector signed int, vector bool int);
36305     vector signed int vec_vsubuwm (vector signed int, vector signed int);
36306     vector unsigned int vec_vsubuwm (vector bool int, vector unsigned int);
36307     vector unsigned int vec_vsubuwm (vector unsigned int, vector bool int);
36308     vector unsigned int vec_vsubuwm (vector unsigned int,
36309                                      vector unsigned int);
36310
36311     vector signed short vec_vsubuhm (vector bool short,
36312                                      vector signed short);
36313     vector signed short vec_vsubuhm (vector signed short,
36314                                      vector bool short);
36315     vector signed short vec_vsubuhm (vector signed short,
36316                                      vector signed short);
36317     vector unsigned short vec_vsubuhm (vector bool short,
36318                                        vector unsigned short);
36319     vector unsigned short vec_vsubuhm (vector unsigned short,
36320                                        vector bool short);
36321     vector unsigned short vec_vsubuhm (vector unsigned short,
36322                                        vector unsigned short);
36323
36324     vector signed char vec_vsububm (vector bool char, vector signed char);
36325     vector signed char vec_vsububm (vector signed char, vector bool char);
36326     vector signed char vec_vsububm (vector signed char, vector signed char);
36327     vector unsigned char vec_vsububm (vector bool char,
36328                                       vector unsigned char);
36329     vector unsigned char vec_vsububm (vector unsigned char,
36330                                       vector bool char);
36331     vector unsigned char vec_vsububm (vector unsigned char,
36332                                       vector unsigned char);
36333
36334     vector unsigned int vec_subc (vector unsigned int, vector unsigned int);
36335
36336     vector unsigned char vec_subs (vector bool char, vector unsigned char);
36337     vector unsigned char vec_subs (vector unsigned char, vector bool char);
36338     vector unsigned char vec_subs (vector unsigned char,
36339                                    vector unsigned char);
36340     vector signed char vec_subs (vector bool char, vector signed char);
36341     vector signed char vec_subs (vector signed char, vector bool char);
36342     vector signed char vec_subs (vector signed char, vector signed char);
36343     vector unsigned short vec_subs (vector bool short,
36344                                     vector unsigned short);
36345     vector unsigned short vec_subs (vector unsigned short,
36346                                     vector bool short);
36347     vector unsigned short vec_subs (vector unsigned short,
36348                                     vector unsigned short);
36349     vector signed short vec_subs (vector bool short, vector signed short);
36350     vector signed short vec_subs (vector signed short, vector bool short);
36351     vector signed short vec_subs (vector signed short, vector signed short);
36352     vector unsigned int vec_subs (vector bool int, vector unsigned int);
36353     vector unsigned int vec_subs (vector unsigned int, vector bool int);
36354     vector unsigned int vec_subs (vector unsigned int, vector unsigned int);
36355     vector signed int vec_subs (vector bool int, vector signed int);
36356     vector signed int vec_subs (vector signed int, vector bool int);
36357     vector signed int vec_subs (vector signed int, vector signed int);
36358
36359     vector signed int vec_vsubsws (vector bool int, vector signed int);
36360     vector signed int vec_vsubsws (vector signed int, vector bool int);
36361     vector signed int vec_vsubsws (vector signed int, vector signed int);
36362
36363     vector unsigned int vec_vsubuws (vector bool int, vector unsigned int);
36364     vector unsigned int vec_vsubuws (vector unsigned int, vector bool int);
36365     vector unsigned int vec_vsubuws (vector unsigned int,
36366                                      vector unsigned int);
36367
36368     vector signed short vec_vsubshs (vector bool short,
36369                                      vector signed short);
36370     vector signed short vec_vsubshs (vector signed short,
36371                                      vector bool short);
36372     vector signed short vec_vsubshs (vector signed short,
36373                                      vector signed short);
36374
36375     vector unsigned short vec_vsubuhs (vector bool short,
36376                                        vector unsigned short);
36377     vector unsigned short vec_vsubuhs (vector unsigned short,
36378                                        vector bool short);
36379     vector unsigned short vec_vsubuhs (vector unsigned short,
36380                                        vector unsigned short);
36381
36382     vector signed char vec_vsubsbs (vector bool char, vector signed char);
36383     vector signed char vec_vsubsbs (vector signed char, vector bool char);
36384     vector signed char vec_vsubsbs (vector signed char, vector signed char);
36385
36386     vector unsigned char vec_vsububs (vector bool char,
36387                                       vector unsigned char);
36388     vector unsigned char vec_vsububs (vector unsigned char,
36389                                       vector bool char);
36390     vector unsigned char vec_vsububs (vector unsigned char,
36391                                       vector unsigned char);
36392
36393     vector unsigned int vec_sum4s (vector unsigned char,
36394                                    vector unsigned int);
36395     vector signed int vec_sum4s (vector signed char, vector signed int);
36396     vector signed int vec_sum4s (vector signed short, vector signed int);
36397
36398     vector signed int vec_vsum4shs (vector signed short, vector signed int);
36399
36400     vector signed int vec_vsum4sbs (vector signed char, vector signed int);
36401
36402     vector unsigned int vec_vsum4ubs (vector unsigned char,
36403                                       vector unsigned int);
36404
36405     vector signed int vec_sum2s (vector signed int, vector signed int);
36406
36407     vector signed int vec_sums (vector signed int, vector signed int);
36408
36409     vector float vec_trunc (vector float);
36410
36411     vector signed short vec_unpackh (vector signed char);
36412     vector bool short vec_unpackh (vector bool char);
36413     vector signed int vec_unpackh (vector signed short);
36414     vector bool int vec_unpackh (vector bool short);
36415     vector unsigned int vec_unpackh (vector pixel);
36416
36417     vector bool int vec_vupkhsh (vector bool short);
36418     vector signed int vec_vupkhsh (vector signed short);
36419
36420     vector unsigned int vec_vupkhpx (vector pixel);
36421
36422     vector bool short vec_vupkhsb (vector bool char);
36423     vector signed short vec_vupkhsb (vector signed char);
36424
36425     vector signed short vec_unpackl (vector signed char);
36426     vector bool short vec_unpackl (vector bool char);
36427     vector unsigned int vec_unpackl (vector pixel);
36428     vector signed int vec_unpackl (vector signed short);
36429     vector bool int vec_unpackl (vector bool short);
36430
36431     vector unsigned int vec_vupklpx (vector pixel);
36432
36433     vector bool int vec_vupklsh (vector bool short);
36434     vector signed int vec_vupklsh (vector signed short);
36435
36436     vector bool short vec_vupklsb (vector bool char);
36437     vector signed short vec_vupklsb (vector signed char);
36438
36439     vector float vec_xor (vector float, vector float);
36440     vector float vec_xor (vector float, vector bool int);
36441     vector float vec_xor (vector bool int, vector float);
36442     vector bool int vec_xor (vector bool int, vector bool int);
36443     vector signed int vec_xor (vector bool int, vector signed int);
36444     vector signed int vec_xor (vector signed int, vector bool int);
36445     vector signed int vec_xor (vector signed int, vector signed int);
36446     vector unsigned int vec_xor (vector bool int, vector unsigned int);
36447     vector unsigned int vec_xor (vector unsigned int, vector bool int);
36448     vector unsigned int vec_xor (vector unsigned int, vector unsigned int);
36449     vector bool short vec_xor (vector bool short, vector bool short);
36450     vector signed short vec_xor (vector bool short, vector signed short);
36451     vector signed short vec_xor (vector signed short, vector bool short);
36452     vector signed short vec_xor (vector signed short, vector signed short);
36453     vector unsigned short vec_xor (vector bool short,
36454                                    vector unsigned short);
36455     vector unsigned short vec_xor (vector unsigned short,
36456                                    vector bool short);
36457     vector unsigned short vec_xor (vector unsigned short,
36458                                    vector unsigned short);
36459     vector signed char vec_xor (vector bool char, vector signed char);
36460     vector bool char vec_xor (vector bool char, vector bool char);
36461     vector signed char vec_xor (vector signed char, vector bool char);
36462     vector signed char vec_xor (vector signed char, vector signed char);
36463     vector unsigned char vec_xor (vector bool char, vector unsigned char);
36464     vector unsigned char vec_xor (vector unsigned char, vector bool char);
36465     vector unsigned char vec_xor (vector unsigned char,
36466                                   vector unsigned char);
36467
36468     int vec_all_eq (vector signed char, vector bool char);
36469     int vec_all_eq (vector signed char, vector signed char);
36470     int vec_all_eq (vector unsigned char, vector bool char);
36471     int vec_all_eq (vector unsigned char, vector unsigned char);
36472     int vec_all_eq (vector bool char, vector bool char);
36473     int vec_all_eq (vector bool char, vector unsigned char);
36474     int vec_all_eq (vector bool char, vector signed char);
36475     int vec_all_eq (vector signed short, vector bool short);
36476     int vec_all_eq (vector signed short, vector signed short);
36477     int vec_all_eq (vector unsigned short, vector bool short);
36478     int vec_all_eq (vector unsigned short, vector unsigned short);
36479     int vec_all_eq (vector bool short, vector bool short);
36480     int vec_all_eq (vector bool short, vector unsigned short);
36481     int vec_all_eq (vector bool short, vector signed short);
36482     int vec_all_eq (vector pixel, vector pixel);
36483     int vec_all_eq (vector signed int, vector bool int);
36484     int vec_all_eq (vector signed int, vector signed int);
36485     int vec_all_eq (vector unsigned int, vector bool int);
36486     int vec_all_eq (vector unsigned int, vector unsigned int);
36487     int vec_all_eq (vector bool int, vector bool int);
36488     int vec_all_eq (vector bool int, vector unsigned int);
36489     int vec_all_eq (vector bool int, vector signed int);
36490     int vec_all_eq (vector float, vector float);
36491
36492     int vec_all_ge (vector bool char, vector unsigned char);
36493     int vec_all_ge (vector unsigned char, vector bool char);
36494     int vec_all_ge (vector unsigned char, vector unsigned char);
36495     int vec_all_ge (vector bool char, vector signed char);
36496     int vec_all_ge (vector signed char, vector bool char);
36497     int vec_all_ge (vector signed char, vector signed char);
36498     int vec_all_ge (vector bool short, vector unsigned short);
36499     int vec_all_ge (vector unsigned short, vector bool short);
36500     int vec_all_ge (vector unsigned short, vector unsigned short);
36501     int vec_all_ge (vector signed short, vector signed short);
36502     int vec_all_ge (vector bool short, vector signed short);
36503     int vec_all_ge (vector signed short, vector bool short);
36504     int vec_all_ge (vector bool int, vector unsigned int);
36505     int vec_all_ge (vector unsigned int, vector bool int);
36506     int vec_all_ge (vector unsigned int, vector unsigned int);
36507     int vec_all_ge (vector bool int, vector signed int);
36508     int vec_all_ge (vector signed int, vector bool int);
36509     int vec_all_ge (vector signed int, vector signed int);
36510     int vec_all_ge (vector float, vector float);
36511
36512     int vec_all_gt (vector bool char, vector unsigned char);
36513     int vec_all_gt (vector unsigned char, vector bool char);
36514     int vec_all_gt (vector unsigned char, vector unsigned char);
36515     int vec_all_gt (vector bool char, vector signed char);
36516     int vec_all_gt (vector signed char, vector bool char);
36517     int vec_all_gt (vector signed char, vector signed char);
36518     int vec_all_gt (vector bool short, vector unsigned short);
36519     int vec_all_gt (vector unsigned short, vector bool short);
36520     int vec_all_gt (vector unsigned short, vector unsigned short);
36521     int vec_all_gt (vector bool short, vector signed short);
36522     int vec_all_gt (vector signed short, vector bool short);
36523     int vec_all_gt (vector signed short, vector signed short);
36524     int vec_all_gt (vector bool int, vector unsigned int);
36525     int vec_all_gt (vector unsigned int, vector bool int);
36526     int vec_all_gt (vector unsigned int, vector unsigned int);
36527     int vec_all_gt (vector bool int, vector signed int);
36528     int vec_all_gt (vector signed int, vector bool int);
36529     int vec_all_gt (vector signed int, vector signed int);
36530     int vec_all_gt (vector float, vector float);
36531
36532     int vec_all_in (vector float, vector float);
36533
36534     int vec_all_le (vector bool char, vector unsigned char);
36535     int vec_all_le (vector unsigned char, vector bool char);
36536     int vec_all_le (vector unsigned char, vector unsigned char);
36537     int vec_all_le (vector bool char, vector signed char);
36538     int vec_all_le (vector signed char, vector bool char);
36539     int vec_all_le (vector signed char, vector signed char);
36540     int vec_all_le (vector bool short, vector unsigned short);
36541     int vec_all_le (vector unsigned short, vector bool short);
36542     int vec_all_le (vector unsigned short, vector unsigned short);
36543     int vec_all_le (vector bool short, vector signed short);
36544     int vec_all_le (vector signed short, vector bool short);
36545     int vec_all_le (vector signed short, vector signed short);
36546     int vec_all_le (vector bool int, vector unsigned int);
36547     int vec_all_le (vector unsigned int, vector bool int);
36548     int vec_all_le (vector unsigned int, vector unsigned int);
36549     int vec_all_le (vector bool int, vector signed int);
36550     int vec_all_le (vector signed int, vector bool int);
36551     int vec_all_le (vector signed int, vector signed int);
36552     int vec_all_le (vector float, vector float);
36553
36554     int vec_all_lt (vector bool char, vector unsigned char);
36555     int vec_all_lt (vector unsigned char, vector bool char);
36556     int vec_all_lt (vector unsigned char, vector unsigned char);
36557     int vec_all_lt (vector bool char, vector signed char);
36558     int vec_all_lt (vector signed char, vector bool char);
36559     int vec_all_lt (vector signed char, vector signed char);
36560     int vec_all_lt (vector bool short, vector unsigned short);
36561     int vec_all_lt (vector unsigned short, vector bool short);
36562     int vec_all_lt (vector unsigned short, vector unsigned short);
36563     int vec_all_lt (vector bool short, vector signed short);
36564     int vec_all_lt (vector signed short, vector bool short);
36565     int vec_all_lt (vector signed short, vector signed short);
36566     int vec_all_lt (vector bool int, vector unsigned int);
36567     int vec_all_lt (vector unsigned int, vector bool int);
36568     int vec_all_lt (vector unsigned int, vector unsigned int);
36569     int vec_all_lt (vector bool int, vector signed int);
36570     int vec_all_lt (vector signed int, vector bool int);
36571     int vec_all_lt (vector signed int, vector signed int);
36572     int vec_all_lt (vector float, vector float);
36573
36574     int vec_all_nan (vector float);
36575
36576     int vec_all_ne (vector signed char, vector bool char);
36577     int vec_all_ne (vector signed char, vector signed char);
36578     int vec_all_ne (vector unsigned char, vector bool char);
36579     int vec_all_ne (vector unsigned char, vector unsigned char);
36580     int vec_all_ne (vector bool char, vector bool char);
36581     int vec_all_ne (vector bool char, vector unsigned char);
36582     int vec_all_ne (vector bool char, vector signed char);
36583     int vec_all_ne (vector signed short, vector bool short);
36584     int vec_all_ne (vector signed short, vector signed short);
36585     int vec_all_ne (vector unsigned short, vector bool short);
36586     int vec_all_ne (vector unsigned short, vector unsigned short);
36587     int vec_all_ne (vector bool short, vector bool short);
36588     int vec_all_ne (vector bool short, vector unsigned short);
36589     int vec_all_ne (vector bool short, vector signed short);
36590     int vec_all_ne (vector pixel, vector pixel);
36591     int vec_all_ne (vector signed int, vector bool int);
36592     int vec_all_ne (vector signed int, vector signed int);
36593     int vec_all_ne (vector unsigned int, vector bool int);
36594     int vec_all_ne (vector unsigned int, vector unsigned int);
36595     int vec_all_ne (vector bool int, vector bool int);
36596     int vec_all_ne (vector bool int, vector unsigned int);
36597     int vec_all_ne (vector bool int, vector signed int);
36598     int vec_all_ne (vector float, vector float);
36599
36600     int vec_all_nge (vector float, vector float);
36601
36602     int vec_all_ngt (vector float, vector float);
36603
36604     int vec_all_nle (vector float, vector float);
36605
36606     int vec_all_nlt (vector float, vector float);
36607
36608     int vec_all_numeric (vector float);
36609
36610     int vec_any_eq (vector signed char, vector bool char);
36611     int vec_any_eq (vector signed char, vector signed char);
36612     int vec_any_eq (vector unsigned char, vector bool char);
36613     int vec_any_eq (vector unsigned char, vector unsigned char);
36614     int vec_any_eq (vector bool char, vector bool char);
36615     int vec_any_eq (vector bool char, vector unsigned char);
36616     int vec_any_eq (vector bool char, vector signed char);
36617     int vec_any_eq (vector signed short, vector bool short);
36618     int vec_any_eq (vector signed short, vector signed short);
36619     int vec_any_eq (vector unsigned short, vector bool short);
36620     int vec_any_eq (vector unsigned short, vector unsigned short);
36621     int vec_any_eq (vector bool short, vector bool short);
36622     int vec_any_eq (vector bool short, vector unsigned short);
36623     int vec_any_eq (vector bool short, vector signed short);
36624     int vec_any_eq (vector pixel, vector pixel);
36625     int vec_any_eq (vector signed int, vector bool int);
36626     int vec_any_eq (vector signed int, vector signed int);
36627     int vec_any_eq (vector unsigned int, vector bool int);
36628     int vec_any_eq (vector unsigned int, vector unsigned int);
36629     int vec_any_eq (vector bool int, vector bool int);
36630     int vec_any_eq (vector bool int, vector unsigned int);
36631     int vec_any_eq (vector bool int, vector signed int);
36632     int vec_any_eq (vector float, vector float);
36633
36634     int vec_any_ge (vector signed char, vector bool char);
36635     int vec_any_ge (vector unsigned char, vector bool char);
36636     int vec_any_ge (vector unsigned char, vector unsigned char);
36637     int vec_any_ge (vector signed char, vector signed char);
36638     int vec_any_ge (vector bool char, vector unsigned char);
36639     int vec_any_ge (vector bool char, vector signed char);
36640     int vec_any_ge (vector unsigned short, vector bool short);
36641     int vec_any_ge (vector unsigned short, vector unsigned short);
36642     int vec_any_ge (vector signed short, vector signed short);
36643     int vec_any_ge (vector signed short, vector bool short);
36644     int vec_any_ge (vector bool short, vector unsigned short);
36645     int vec_any_ge (vector bool short, vector signed short);
36646     int vec_any_ge (vector signed int, vector bool int);
36647     int vec_any_ge (vector unsigned int, vector bool int);
36648     int vec_any_ge (vector unsigned int, vector unsigned int);
36649     int vec_any_ge (vector signed int, vector signed int);
36650     int vec_any_ge (vector bool int, vector unsigned int);
36651     int vec_any_ge (vector bool int, vector signed int);
36652     int vec_any_ge (vector float, vector float);
36653
36654     int vec_any_gt (vector bool char, vector unsigned char);
36655     int vec_any_gt (vector unsigned char, vector bool char);
36656     int vec_any_gt (vector unsigned char, vector unsigned char);
36657     int vec_any_gt (vector bool char, vector signed char);
36658     int vec_any_gt (vector signed char, vector bool char);
36659     int vec_any_gt (vector signed char, vector signed char);
36660     int vec_any_gt (vector bool short, vector unsigned short);
36661     int vec_any_gt (vector unsigned short, vector bool short);
36662     int vec_any_gt (vector unsigned short, vector unsigned short);
36663     int vec_any_gt (vector bool short, vector signed short);
36664     int vec_any_gt (vector signed short, vector bool short);
36665     int vec_any_gt (vector signed short, vector signed short);
36666     int vec_any_gt (vector bool int, vector unsigned int);
36667     int vec_any_gt (vector unsigned int, vector bool int);
36668     int vec_any_gt (vector unsigned int, vector unsigned int);
36669     int vec_any_gt (vector bool int, vector signed int);
36670     int vec_any_gt (vector signed int, vector bool int);
36671     int vec_any_gt (vector signed int, vector signed int);
36672     int vec_any_gt (vector float, vector float);
36673
36674     int vec_any_le (vector bool char, vector unsigned char);
36675     int vec_any_le (vector unsigned char, vector bool char);
36676     int vec_any_le (vector unsigned char, vector unsigned char);
36677     int vec_any_le (vector bool char, vector signed char);
36678     int vec_any_le (vector signed char, vector bool char);
36679     int vec_any_le (vector signed char, vector signed char);
36680     int vec_any_le (vector bool short, vector unsigned short);
36681     int vec_any_le (vector unsigned short, vector bool short);
36682     int vec_any_le (vector unsigned short, vector unsigned short);
36683     int vec_any_le (vector bool short, vector signed short);
36684     int vec_any_le (vector signed short, vector bool short);
36685     int vec_any_le (vector signed short, vector signed short);
36686     int vec_any_le (vector bool int, vector unsigned int);
36687     int vec_any_le (vector unsigned int, vector bool int);
36688     int vec_any_le (vector unsigned int, vector unsigned int);
36689     int vec_any_le (vector bool int, vector signed int);
36690     int vec_any_le (vector signed int, vector bool int);
36691     int vec_any_le (vector signed int, vector signed int);
36692     int vec_any_le (vector float, vector float);
36693
36694     int vec_any_lt (vector bool char, vector unsigned char);
36695     int vec_any_lt (vector unsigned char, vector bool char);
36696     int vec_any_lt (vector unsigned char, vector unsigned char);
36697     int vec_any_lt (vector bool char, vector signed char);
36698     int vec_any_lt (vector signed char, vector bool char);
36699     int vec_any_lt (vector signed char, vector signed char);
36700     int vec_any_lt (vector bool short, vector unsigned short);
36701     int vec_any_lt (vector unsigned short, vector bool short);
36702     int vec_any_lt (vector unsigned short, vector unsigned short);
36703     int vec_any_lt (vector bool short, vector signed short);
36704     int vec_any_lt (vector signed short, vector bool short);
36705     int vec_any_lt (vector signed short, vector signed short);
36706     int vec_any_lt (vector bool int, vector unsigned int);
36707     int vec_any_lt (vector unsigned int, vector bool int);
36708     int vec_any_lt (vector unsigned int, vector unsigned int);
36709     int vec_any_lt (vector bool int, vector signed int);
36710     int vec_any_lt (vector signed int, vector bool int);
36711     int vec_any_lt (vector signed int, vector signed int);
36712     int vec_any_lt (vector float, vector float);
36713
36714     int vec_any_nan (vector float);
36715
36716     int vec_any_ne (vector signed char, vector bool char);
36717     int vec_any_ne (vector signed char, vector signed char);
36718     int vec_any_ne (vector unsigned char, vector bool char);
36719     int vec_any_ne (vector unsigned char, vector unsigned char);
36720     int vec_any_ne (vector bool char, vector bool char);
36721     int vec_any_ne (vector bool char, vector unsigned char);
36722     int vec_any_ne (vector bool char, vector signed char);
36723     int vec_any_ne (vector signed short, vector bool short);
36724     int vec_any_ne (vector signed short, vector signed short);
36725     int vec_any_ne (vector unsigned short, vector bool short);
36726     int vec_any_ne (vector unsigned short, vector unsigned short);
36727     int vec_any_ne (vector bool short, vector bool short);
36728     int vec_any_ne (vector bool short, vector unsigned short);
36729     int vec_any_ne (vector bool short, vector signed short);
36730     int vec_any_ne (vector pixel, vector pixel);
36731     int vec_any_ne (vector signed int, vector bool int);
36732     int vec_any_ne (vector signed int, vector signed int);
36733     int vec_any_ne (vector unsigned int, vector bool int);
36734     int vec_any_ne (vector unsigned int, vector unsigned int);
36735     int vec_any_ne (vector bool int, vector bool int);
36736     int vec_any_ne (vector bool int, vector unsigned int);
36737     int vec_any_ne (vector bool int, vector signed int);
36738     int vec_any_ne (vector float, vector float);
36739
36740     int vec_any_nge (vector float, vector float);
36741
36742     int vec_any_ngt (vector float, vector float);
36743
36744     int vec_any_nle (vector float, vector float);
36745
36746     int vec_any_nlt (vector float, vector float);
36747
36748     int vec_any_numeric (vector float);
36749
36750     int vec_any_out (vector float, vector float);
36751
36752 If the vector/scalar (VSX) instruction set is available, the following
36753additional functions are available:
36754
36755     vector double vec_abs (vector double);
36756     vector double vec_add (vector double, vector double);
36757     vector double vec_and (vector double, vector double);
36758     vector double vec_and (vector double, vector bool long);
36759     vector double vec_and (vector bool long, vector double);
36760     vector double vec_andc (vector double, vector double);
36761     vector double vec_andc (vector double, vector bool long);
36762     vector double vec_andc (vector bool long, vector double);
36763     vector double vec_ceil (vector double);
36764     vector bool long vec_cmpeq (vector double, vector double);
36765     vector bool long vec_cmpge (vector double, vector double);
36766     vector bool long vec_cmpgt (vector double, vector double);
36767     vector bool long vec_cmple (vector double, vector double);
36768     vector bool long vec_cmplt (vector double, vector double);
36769     vector float vec_div (vector float, vector float);
36770     vector double vec_div (vector double, vector double);
36771     vector double vec_floor (vector double);
36772     vector double vec_ld (int, const vector double *);
36773     vector double vec_ld (int, const double *);
36774     vector double vec_ldl (int, const vector double *);
36775     vector double vec_ldl (int, const double *);
36776     vector unsigned char vec_lvsl (int, const volatile double *);
36777     vector unsigned char vec_lvsr (int, const volatile double *);
36778     vector double vec_madd (vector double, vector double, vector double);
36779     vector double vec_max (vector double, vector double);
36780     vector double vec_min (vector double, vector double);
36781     vector float vec_msub (vector float, vector float, vector float);
36782     vector double vec_msub (vector double, vector double, vector double);
36783     vector float vec_mul (vector float, vector float);
36784     vector double vec_mul (vector double, vector double);
36785     vector float vec_nearbyint (vector float);
36786     vector double vec_nearbyint (vector double);
36787     vector float vec_nmadd (vector float, vector float, vector float);
36788     vector double vec_nmadd (vector double, vector double, vector double);
36789     vector double vec_nmsub (vector double, vector double, vector double);
36790     vector double vec_nor (vector double, vector double);
36791     vector double vec_or (vector double, vector double);
36792     vector double vec_or (vector double, vector bool long);
36793     vector double vec_or (vector bool long, vector double);
36794     vector double vec_perm (vector double,
36795                             vector double,
36796                             vector unsigned char);
36797     vector double vec_rint (vector double);
36798     vector double vec_recip (vector double, vector double);
36799     vector double vec_rsqrt (vector double);
36800     vector double vec_rsqrte (vector double);
36801     vector double vec_sel (vector double, vector double, vector bool long);
36802     vector double vec_sel (vector double, vector double, vector unsigned long);
36803     vector double vec_sub (vector double, vector double);
36804     vector float vec_sqrt (vector float);
36805     vector double vec_sqrt (vector double);
36806     void vec_st (vector double, int, vector double *);
36807     void vec_st (vector double, int, double *);
36808     vector double vec_trunc (vector double);
36809     vector double vec_xor (vector double, vector double);
36810     vector double vec_xor (vector double, vector bool long);
36811     vector double vec_xor (vector bool long, vector double);
36812     int vec_all_eq (vector double, vector double);
36813     int vec_all_ge (vector double, vector double);
36814     int vec_all_gt (vector double, vector double);
36815     int vec_all_le (vector double, vector double);
36816     int vec_all_lt (vector double, vector double);
36817     int vec_all_nan (vector double);
36818     int vec_all_ne (vector double, vector double);
36819     int vec_all_nge (vector double, vector double);
36820     int vec_all_ngt (vector double, vector double);
36821     int vec_all_nle (vector double, vector double);
36822     int vec_all_nlt (vector double, vector double);
36823     int vec_all_numeric (vector double);
36824     int vec_any_eq (vector double, vector double);
36825     int vec_any_ge (vector double, vector double);
36826     int vec_any_gt (vector double, vector double);
36827     int vec_any_le (vector double, vector double);
36828     int vec_any_lt (vector double, vector double);
36829     int vec_any_nan (vector double);
36830     int vec_any_ne (vector double, vector double);
36831     int vec_any_nge (vector double, vector double);
36832     int vec_any_ngt (vector double, vector double);
36833     int vec_any_nle (vector double, vector double);
36834     int vec_any_nlt (vector double, vector double);
36835     int vec_any_numeric (vector double);
36836
36837     vector double vec_vsx_ld (int, const vector double *);
36838     vector double vec_vsx_ld (int, const double *);
36839     vector float vec_vsx_ld (int, const vector float *);
36840     vector float vec_vsx_ld (int, const float *);
36841     vector bool int vec_vsx_ld (int, const vector bool int *);
36842     vector signed int vec_vsx_ld (int, const vector signed int *);
36843     vector signed int vec_vsx_ld (int, const int *);
36844     vector signed int vec_vsx_ld (int, const long *);
36845     vector unsigned int vec_vsx_ld (int, const vector unsigned int *);
36846     vector unsigned int vec_vsx_ld (int, const unsigned int *);
36847     vector unsigned int vec_vsx_ld (int, const unsigned long *);
36848     vector bool short vec_vsx_ld (int, const vector bool short *);
36849     vector pixel vec_vsx_ld (int, const vector pixel *);
36850     vector signed short vec_vsx_ld (int, const vector signed short *);
36851     vector signed short vec_vsx_ld (int, const short *);
36852     vector unsigned short vec_vsx_ld (int, const vector unsigned short *);
36853     vector unsigned short vec_vsx_ld (int, const unsigned short *);
36854     vector bool char vec_vsx_ld (int, const vector bool char *);
36855     vector signed char vec_vsx_ld (int, const vector signed char *);
36856     vector signed char vec_vsx_ld (int, const signed char *);
36857     vector unsigned char vec_vsx_ld (int, const vector unsigned char *);
36858     vector unsigned char vec_vsx_ld (int, const unsigned char *);
36859
36860     void vec_vsx_st (vector double, int, vector double *);
36861     void vec_vsx_st (vector double, int, double *);
36862     void vec_vsx_st (vector float, int, vector float *);
36863     void vec_vsx_st (vector float, int, float *);
36864     void vec_vsx_st (vector signed int, int, vector signed int *);
36865     void vec_vsx_st (vector signed int, int, int *);
36866     void vec_vsx_st (vector unsigned int, int, vector unsigned int *);
36867     void vec_vsx_st (vector unsigned int, int, unsigned int *);
36868     void vec_vsx_st (vector bool int, int, vector bool int *);
36869     void vec_vsx_st (vector bool int, int, unsigned int *);
36870     void vec_vsx_st (vector bool int, int, int *);
36871     void vec_vsx_st (vector signed short, int, vector signed short *);
36872     void vec_vsx_st (vector signed short, int, short *);
36873     void vec_vsx_st (vector unsigned short, int, vector unsigned short *);
36874     void vec_vsx_st (vector unsigned short, int, unsigned short *);
36875     void vec_vsx_st (vector bool short, int, vector bool short *);
36876     void vec_vsx_st (vector bool short, int, unsigned short *);
36877     void vec_vsx_st (vector pixel, int, vector pixel *);
36878     void vec_vsx_st (vector pixel, int, unsigned short *);
36879     void vec_vsx_st (vector pixel, int, short *);
36880     void vec_vsx_st (vector bool short, int, short *);
36881     void vec_vsx_st (vector signed char, int, vector signed char *);
36882     void vec_vsx_st (vector signed char, int, signed char *);
36883     void vec_vsx_st (vector unsigned char, int, vector unsigned char *);
36884     void vec_vsx_st (vector unsigned char, int, unsigned char *);
36885     void vec_vsx_st (vector bool char, int, vector bool char *);
36886     void vec_vsx_st (vector bool char, int, unsigned char *);
36887     void vec_vsx_st (vector bool char, int, signed char *);
36888
36889 Note that the `vec_ld' and `vec_st' builtins will always generate the
36890Altivec `LVX' and `STVX' instructions even if the VSX instruction set
36891is available.  The `vec_vsx_ld' and `vec_vsx_st' builtins will always
36892generate the VSX `LXVD2X', `LXVW4X', `STXVD2X', and `STXVW4X'
36893instructions.
36894
36895 GCC provides a few other builtins on Powerpc to access certain
36896instructions:
36897     float __builtin_recipdivf (float, float);
36898     float __builtin_rsqrtf (float);
36899     double __builtin_recipdiv (double, double);
36900     double __builtin_rsqrt (double);
36901     long __builtin_bpermd (long, long);
36902     int __builtin_bswap16 (int);
36903
36904 The `vec_rsqrt', `__builtin_rsqrt', and `__builtin_rsqrtf' functions
36905generate multiple instructions to implement the reciprocal sqrt
36906functionality using reciprocal sqrt estimate instructions.
36907
36908 The `__builtin_recipdiv', and `__builtin_recipdivf' functions generate
36909multiple instructions to implement division using the reciprocal
36910estimate instructions.
36911
36912 GCC also provides a family of builtins on PowerPC to explicitly use
36913the `isel' instruction.  While GCC can and does generate `isel'
36914instructions normally, the builtins enable you to explicitly force
36915generation of these instructions.  The builtins are only available when
36916compiling for processors that support the `isel' instruction; they
36917compile to a code sequence of `cmpw' followed by `isel'.
36918
36919`int __builtin_iseleq (int X, int Y, int A, int B)'
36920`int __builtin_iseleq (unsigned int X, unsigned int Y, int A, int B)'
36921`int __builtin_iseleq (void *X, void *Y, int A, int B)'
36922`unsigned int __builtin_iseleq (int X, int Y, unsigned int A, unsigned int B)'
36923`unsigned int __builtin_iseleq (unsigned int X, unsigned int Y, unsigned int A, unsigned int B)'
36924`unsigned int __builtin_iseleq (void *X, void *Y, unsigned int A, unsigned int B)'
36925`void *__builtin_iseleq (int X, int Y, void *A, void *B)'
36926`void *__builtin_iseleq (unsigned int X, unsigned int Y, void *A, void *B)'
36927`void *__builtin_iseleq (void *X, void *Y, void *A, void *B)'
36928     Return A if X and Y are equal, otherwise return B.
36929
36930`int __builtin_isellt (int X, int Y, int A, int B)'
36931`unsigned int __builtin_isellt (int X, int Y, unsigned int A, unsigned int B)'
36932`void *__builtin_isellt (int X, int Y, void *A, void *B)'
36933     Return A if X is less than Y, otherwise return B.  Note that this
36934     uses signed comparison.
36935
36936`int __builtin_iselgt (int X, int Y, int A, int B)'
36937`unsigned int __builtin_iselgt (int X, int Y, unsigned int A, unsigned int B)'
36938`void *__builtin_iselgt (int X, int Y, void *A, void *B)'
36939     Return A if X is greater than Y, otherwise return B.  Note that
36940     this uses signed comparison.
36941
36942`int __builtin_iselltu (unsigned int X, unsigned int Y, int A, int B)'
36943`int __builtin_iselltu (void *X, void *Y, int A, int B)'
36944`unsigned int __builtin_iselltu (unsigned int X, unsigned int Y, unsigned int A, unsigned int B)'
36945`unsigned int __builtin_iselltu (void *X, void *Y, unsigned int A, unsigned int B)'
36946`void *__builtin_iselltu (unsigned int X, unsigned int Y, void *A, void *B)'
36947`void *__builtin_iselltu (void *X, void *Y, void *A, void *B)'
36948     Return A if X is less than Y, otherwise return B In contrast to
36949     `__builtin_isellt', this uses unsigned comparison.
36950
36951`int __builtin_iselgtu (unsigned int X, unsigned int Y, int A, int B)'
36952`int __builtin_iselgtu (void *X, void *Y, int A, int B)'
36953`unsigned int __builtin_iselgtu (unsigned int X, unsigned int Y, unsigned int A, unsigned int B)'
36954`unsigned int __builtin_iselgtu (void *X, void *Y, unsigned int A, unsigned int B)'
36955`void *__builtin_iselgtu (unsigned int X, unsigned int Y, void *A, void *B)'
36956`void *__builtin_iselgtu (void *X, void *Y, void *A, void *B)'
36957     Return A if X is greater than Y, otherwise return B In contrast to
36958     `__builtin_iselgt', this uses unsigned comparison.
36959
36960
36961 Builtins that do 64-bit comparisons (i.e. using `cmpd' instead of
36962`cmpw') are also available on 64-bit processors supporting `isel'.
36963
36964`long __builtin_isel64eq (long X, long Y, long A, long B)'
36965`long __builtin_isel64eq (unsigned long X, unsigned long Y, long A, long B)'
36966`long __builtin_isel64eq (void *X, void *Y, long A, long B)'
36967`unsigned long __builtin_isel64eq (long X, long Y, unsigned long A, unsigned long B)'
36968`unsigned long __builtin_isel64eq (unsigned long X, unsigned long Y, unsigned long A, unsigned long B)'
36969`unsigned long __builtin_isel64eq (void *X, void *Y, unsigned long A, unsigned long B)'
36970`void *__builtin_isel64eq (long X, long Y, void *A, void *B)'
36971`void *__builtin_isel64eq (unsigned long X, unsigned long Y, void *A, void *B)'
36972`void *__builtin_isel64eq (void *X, void *Y, void *A, void *B)'
36973     Return A if X and Y are equal, otherwise return B.
36974
36975`long __builtin_isel64lt (long X, long Y, long A, long B)'
36976`unsigned long __builtin_isel64lt (long X, long Y, unsigned long A, unsigned long B)'
36977`void *__builtin_isel64lt (long X, long Y, void *A, void *B)'
36978     Return A if X is less than Y, otherwise return B.  Note that this
36979     uses signed comparison.
36980
36981`long __builtin_isel64gt (long X, long Y, long A, long B)'
36982`unsigned long __builtin_isel64gt (long X, long Y, unsigned long A, unsigned long B)'
36983`void *__builtin_isel64gt (long X, long Y, void *A, void *B)'
36984     Return A if X is greater than Y, otherwise return B.  Note that
36985     this uses signed comparison.
36986
36987`long __builtin_isel64ltu (unsigned long X, unsigned long Y, long A, long B)'
36988`long __builtin_isel64ltu (void *X, void *Y, long A, long B)'
36989`unsigned long __builtin_isel64ltu (unsigned long X, unsigned long Y, unsigned long A, unsigned long B)'
36990`unsigned long __builtin_isel64ltu (void *X, void *Y, unsigned long A, unsigned long B)'
36991`void *__builtin_isel64ltu (unsigned long X, unsigned long Y, void *A, void *B)'
36992`void *__builtin_isel64ltu (void *X, void *Y, void *A, void *B)'
36993     Return A if X is less than Y, otherwise return B In contrast to
36994     `__builtin_isel64lt', this uses unsigned comparison.
36995
36996`long __builtin_isel64gtu (unsigned long X, unsigned long Y, long A, long B)'
36997`long __builtin_isel64gtu (void *X, void *Y, long A, long B)'
36998`unsigned long __builtin_isel64gtu (unsigned long X, unsigned long Y, unsigned long A, unsigned long B)'
36999`unsigned long __builtin_isel64gtu (void *X, void *Y, unsigned long A, unsigned long B)'
37000`void *__builtin_isel64gtu (unsigned long X, unsigned long Y, void *A, void *B)'
37001`void *__builtin_isel64gtu (void *X, void *Y, void *A, void *B)'
37002     Return A if X is greater than Y, otherwise return B In contrast to
37003     `__builtin_isel64gt', this uses unsigned comparison.
37004
37005
37006
37007File: gcc.info,  Node: RX Built-in Functions,  Next: SPARC VIS Built-in Functions,  Prev: PowerPC AltiVec/VSX Built-in Functions,  Up: Target Builtins
37008
370096.54.13 RX Built-in Functions
37010-----------------------------
37011
37012GCC supports some of the RX instructions which cannot be expressed in
37013the C programming language via the use of built-in functions.  The
37014following functions are supported:
37015
37016 -- Built-in Function: void __builtin_rx_brk (void)
37017     Generates the `brk' machine instruction.
37018
37019 -- Built-in Function: void __builtin_rx_clrpsw (int)
37020     Generates the `clrpsw' machine instruction to clear the specified
37021     bit in the processor status word.
37022
37023 -- Built-in Function: void __builtin_rx_int (int)
37024     Generates the `int' machine instruction to generate an interrupt
37025     with the specified value.
37026
37027 -- Built-in Function: void __builtin_rx_machi (int, int)
37028     Generates the `machi' machine instruction to add the result of
37029     multiplying the top 16-bits of the two arguments into the
37030     accumulator.
37031
37032 -- Built-in Function: void __builtin_rx_maclo (int, int)
37033     Generates the `maclo' machine instruction to add the result of
37034     multiplying the bottom 16-bits of the two arguments into the
37035     accumulator.
37036
37037 -- Built-in Function: void __builtin_rx_mulhi (int, int)
37038     Generates the `mulhi' machine instruction to place the result of
37039     multiplying the top 16-bits of the two arguments into the
37040     accumulator.
37041
37042 -- Built-in Function: void __builtin_rx_mullo (int, int)
37043     Generates the `mullo' machine instruction to place the result of
37044     multiplying the bottom 16-bits of the two arguments into the
37045     accumulator.
37046
37047 -- Built-in Function: int __builtin_rx_mvfachi (void)
37048     Generates the `mvfachi' machine instruction to read the top
37049     32-bits of the accumulator.
37050
37051 -- Built-in Function: int __builtin_rx_mvfacmi (void)
37052     Generates the `mvfacmi' machine instruction to read the middle
37053     32-bits of the accumulator.
37054
37055 -- Built-in Function: int __builtin_rx_mvfc (int)
37056     Generates the `mvfc' machine instruction which reads the control
37057     register specified in its argument and returns its value.
37058
37059 -- Built-in Function: void __builtin_rx_mvtachi (int)
37060     Generates the `mvtachi' machine instruction to set the top 32-bits
37061     of the accumulator.
37062
37063 -- Built-in Function: void __builtin_rx_mvtaclo (int)
37064     Generates the `mvtaclo' machine instruction to set the bottom
37065     32-bits of the accumulator.
37066
37067 -- Built-in Function: void __builtin_rx_mvtc (int reg, int val)
37068     Generates the `mvtc' machine instruction which sets control
37069     register number `reg' to `val'.
37070
37071 -- Built-in Function: void __builtin_rx_mvtipl (int)
37072     Generates the `mvtipl' machine instruction set the interrupt
37073     priority level.
37074
37075 -- Built-in Function: void __builtin_rx_racw (int)
37076     Generates the `racw' machine instruction to round the accumulator
37077     according to the specified mode.
37078
37079 -- Built-in Function: int __builtin_rx_revw (int)
37080     Generates the `revw' machine instruction which swaps the bytes in
37081     the argument so that bits 0-7 now occupy bits 8-15 and vice versa,
37082     and also bits 16-23 occupy bits 24-31 and vice versa.
37083
37084 -- Built-in Function: void __builtin_rx_rmpa (void)
37085     Generates the `rmpa' machine instruction which initiates a
37086     repeated multiply and accumulate sequence.
37087
37088 -- Built-in Function: void __builtin_rx_round (float)
37089     Generates the `round' machine instruction which returns the
37090     floating point argument rounded according to the current rounding
37091     mode set in the floating point status word register.
37092
37093 -- Built-in Function: int __builtin_rx_sat (int)
37094     Generates the `sat' machine instruction which returns the
37095     saturated value of the argument.
37096
37097 -- Built-in Function: void __builtin_rx_setpsw (int)
37098     Generates the `setpsw' machine instruction to set the specified
37099     bit in the processor status word.
37100
37101 -- Built-in Function: void __builtin_rx_wait (void)
37102     Generates the `wait' machine instruction.
37103
37104
37105File: gcc.info,  Node: SPARC VIS Built-in Functions,  Next: SPU Built-in Functions,  Prev: RX Built-in Functions,  Up: Target Builtins
37106
371076.54.14 SPARC VIS Built-in Functions
37108------------------------------------
37109
37110GCC supports SIMD operations on the SPARC using both the generic vector
37111extensions (*note Vector Extensions::) as well as built-in functions for
37112the SPARC Visual Instruction Set (VIS).  When you use the `-mvis'
37113switch, the VIS extension is exposed as the following built-in
37114functions:
37115
37116     typedef int v2si __attribute__ ((vector_size (8)));
37117     typedef short v4hi __attribute__ ((vector_size (8)));
37118     typedef short v2hi __attribute__ ((vector_size (4)));
37119     typedef char v8qi __attribute__ ((vector_size (8)));
37120     typedef char v4qi __attribute__ ((vector_size (4)));
37121
37122     void * __builtin_vis_alignaddr (void *, long);
37123     int64_t __builtin_vis_faligndatadi (int64_t, int64_t);
37124     v2si __builtin_vis_faligndatav2si (v2si, v2si);
37125     v4hi __builtin_vis_faligndatav4hi (v4si, v4si);
37126     v8qi __builtin_vis_faligndatav8qi (v8qi, v8qi);
37127
37128     v4hi __builtin_vis_fexpand (v4qi);
37129
37130     v4hi __builtin_vis_fmul8x16 (v4qi, v4hi);
37131     v4hi __builtin_vis_fmul8x16au (v4qi, v4hi);
37132     v4hi __builtin_vis_fmul8x16al (v4qi, v4hi);
37133     v4hi __builtin_vis_fmul8sux16 (v8qi, v4hi);
37134     v4hi __builtin_vis_fmul8ulx16 (v8qi, v4hi);
37135     v2si __builtin_vis_fmuld8sux16 (v4qi, v2hi);
37136     v2si __builtin_vis_fmuld8ulx16 (v4qi, v2hi);
37137
37138     v4qi __builtin_vis_fpack16 (v4hi);
37139     v8qi __builtin_vis_fpack32 (v2si, v2si);
37140     v2hi __builtin_vis_fpackfix (v2si);
37141     v8qi __builtin_vis_fpmerge (v4qi, v4qi);
37142
37143     int64_t __builtin_vis_pdist (v8qi, v8qi, int64_t);
37144
37145
37146File: gcc.info,  Node: SPU Built-in Functions,  Prev: SPARC VIS Built-in Functions,  Up: Target Builtins
37147
371486.54.15 SPU Built-in Functions
37149------------------------------
37150
37151GCC provides extensions for the SPU processor as described in the
37152Sony/Toshiba/IBM SPU Language Extensions Specification, which can be
37153found at `http://cell.scei.co.jp/' or
37154`http://www.ibm.com/developerworks/power/cell/'.  GCC's implementation
37155differs in several ways.
37156
37157   * The optional extension of specifying vector constants in
37158     parentheses is not supported.
37159
37160   * A vector initializer requires no cast if the vector constant is of
37161     the same type as the variable it is initializing.
37162
37163   * If `signed' or `unsigned' is omitted, the signedness of the vector
37164     type is the default signedness of the base type.  The default
37165     varies depending on the operating system, so a portable program
37166     should always specify the signedness.
37167
37168   * By default, the keyword `__vector' is added. The macro `vector' is
37169     defined in `<spu_intrinsics.h>' and can be undefined.
37170
37171   * GCC allows using a `typedef' name as the type specifier for a
37172     vector type.
37173
37174   * For C, overloaded functions are implemented with macros so the
37175     following does not work:
37176
37177            spu_add ((vector signed int){1, 2, 3, 4}, foo);
37178
37179     Since `spu_add' is a macro, the vector constant in the example is
37180     treated as four separate arguments.  Wrap the entire argument in
37181     parentheses for this to work.
37182
37183   * The extended version of `__builtin_expect' is not supported.
37184
37185
37186 _Note:_ Only the interface described in the aforementioned
37187specification is supported. Internally, GCC uses built-in functions to
37188implement the required functionality, but these are not supported and
37189are subject to change without notice.
37190
37191
37192File: gcc.info,  Node: Target Format Checks,  Next: Pragmas,  Prev: Target Builtins,  Up: C Extensions
37193
371946.55 Format Checks Specific to Particular Target Machines
37195=========================================================
37196
37197For some target machines, GCC supports additional options to the format
37198attribute (*note Declaring Attributes of Functions: Function
37199Attributes.).
37200
37201* Menu:
37202
37203* Solaris Format Checks::
37204* Darwin Format Checks::
37205
37206
37207File: gcc.info,  Node: Solaris Format Checks,  Next: Darwin Format Checks,  Up: Target Format Checks
37208
372096.55.1 Solaris Format Checks
37210----------------------------
37211
37212Solaris targets support the `cmn_err' (or `__cmn_err__') format check.
37213`cmn_err' accepts a subset of the standard `printf' conversions, and
37214the two-argument `%b' conversion for displaying bit-fields.  See the
37215Solaris man page for `cmn_err' for more information.
37216
37217
37218File: gcc.info,  Node: Darwin Format Checks,  Prev: Solaris Format Checks,  Up: Target Format Checks
37219
372206.55.2 Darwin Format Checks
37221---------------------------
37222
37223Darwin targets support the `CFString' (or `__CFString__') in the format
37224attribute context.  Declarations made with such attribution will be
37225parsed for correct syntax and format argument types.  However, parsing
37226of the format string itself is currently undefined and will not be
37227carried out by this version of the compiler.
37228
37229 Additionally, `CFStringRefs' (defined by the `CoreFoundation' headers)
37230may also be used as format arguments.  Note that the relevant headers
37231are only likely to be available on Darwin (OSX) installations.  On such
37232installations, the XCode and system documentation provide descriptions
37233of `CFString', `CFStringRefs' and associated functions.
37234
37235
37236File: gcc.info,  Node: Pragmas,  Next: Unnamed Fields,  Prev: Target Format Checks,  Up: C Extensions
37237
372386.56 Pragmas Accepted by GCC
37239============================
37240
37241GCC supports several types of pragmas, primarily in order to compile
37242code originally written for other compilers.  Note that in general we
37243do not recommend the use of pragmas; *Note Function Attributes::, for
37244further explanation.
37245
37246* Menu:
37247
37248* ARM Pragmas::
37249* M32C Pragmas::
37250* MeP Pragmas::
37251* RS/6000 and PowerPC Pragmas::
37252* Darwin Pragmas::
37253* Solaris Pragmas::
37254* Symbol-Renaming Pragmas::
37255* Structure-Packing Pragmas::
37256* Weak Pragmas::
37257* Diagnostic Pragmas::
37258* Visibility Pragmas::
37259* Push/Pop Macro Pragmas::
37260* Function Specific Option Pragmas::
37261
37262
37263File: gcc.info,  Node: ARM Pragmas,  Next: M32C Pragmas,  Up: Pragmas
37264
372656.56.1 ARM Pragmas
37266------------------
37267
37268The ARM target defines pragmas for controlling the default addition of
37269`long_call' and `short_call' attributes to functions.  *Note Function
37270Attributes::, for information about the effects of these attributes.
37271
37272`long_calls'
37273     Set all subsequent functions to have the `long_call' attribute.
37274
37275`no_long_calls'
37276     Set all subsequent functions to have the `short_call' attribute.
37277
37278`long_calls_off'
37279     Do not affect the `long_call' or `short_call' attributes of
37280     subsequent functions.
37281
37282
37283File: gcc.info,  Node: M32C Pragmas,  Next: MeP Pragmas,  Prev: ARM Pragmas,  Up: Pragmas
37284
372856.56.2 M32C Pragmas
37286-------------------
37287
37288`GCC memregs NUMBER'
37289     Overrides the command-line option `-memregs=' for the current
37290     file.  Use with care!  This pragma must be before any function in
37291     the file, and mixing different memregs values in different objects
37292     may make them incompatible.  This pragma is useful when a
37293     performance-critical function uses a memreg for temporary values,
37294     as it may allow you to reduce the number of memregs used.
37295
37296`ADDRESS NAME ADDRESS'
37297     For any declared symbols matching NAME, this does three things to
37298     that symbol: it forces the symbol to be located at the given
37299     address (a number), it forces the symbol to be volatile, and it
37300     changes the symbol's scope to be static.  This pragma exists for
37301     compatibility with other compilers, but note that the common
37302     `1234H' numeric syntax is not supported (use `0x1234' instead).
37303     Example:
37304
37305          #pragma ADDRESS port3 0x103
37306          char port3;
37307
37308
37309
37310File: gcc.info,  Node: MeP Pragmas,  Next: RS/6000 and PowerPC Pragmas,  Prev: M32C Pragmas,  Up: Pragmas
37311
373126.56.3 MeP Pragmas
37313------------------
37314
37315`custom io_volatile (on|off)'
37316     Overrides the command line option `-mio-volatile' for the current
37317     file.  Note that for compatibility with future GCC releases, this
37318     option should only be used once before any `io' variables in each
37319     file.
37320
37321`GCC coprocessor available REGISTERS'
37322     Specifies which coprocessor registers are available to the register
37323     allocator.  REGISTERS may be a single register, register range
37324     separated by ellipses, or comma-separated list of those.  Example:
37325
37326          #pragma GCC coprocessor available $c0...$c10, $c28
37327
37328`GCC coprocessor call_saved REGISTERS'
37329     Specifies which coprocessor registers are to be saved and restored
37330     by any function using them.  REGISTERS may be a single register,
37331     register range separated by ellipses, or comma-separated list of
37332     those.  Example:
37333
37334          #pragma GCC coprocessor call_saved $c4...$c6, $c31
37335
37336`GCC coprocessor subclass '(A|B|C|D)' = REGISTERS'
37337     Creates and defines a register class.  These register classes can
37338     be used by inline `asm' constructs.  REGISTERS may be a single
37339     register, register range separated by ellipses, or comma-separated
37340     list of those.  Example:
37341
37342          #pragma GCC coprocessor subclass 'B' = $c2, $c4, $c6
37343
37344          asm ("cpfoo %0" : "=B" (x));
37345
37346`GCC disinterrupt NAME , NAME ...'
37347     For the named functions, the compiler adds code to disable
37348     interrupts for the duration of those functions.  Any functions so
37349     named, which are not encountered in the source, cause a warning
37350     that the pragma was not used.  Examples:
37351
37352          #pragma disinterrupt foo
37353          #pragma disinterrupt bar, grill
37354          int foo () { ... }
37355
37356`GCC call NAME , NAME ...'
37357     For the named functions, the compiler always uses a
37358     register-indirect call model when calling the named functions.
37359     Examples:
37360
37361          extern int foo ();
37362          #pragma call foo
37363
37364
37365
37366File: gcc.info,  Node: RS/6000 and PowerPC Pragmas,  Next: Darwin Pragmas,  Prev: MeP Pragmas,  Up: Pragmas
37367
373686.56.4 RS/6000 and PowerPC Pragmas
37369----------------------------------
37370
37371The RS/6000 and PowerPC targets define one pragma for controlling
37372whether or not the `longcall' attribute is added to function
37373declarations by default.  This pragma overrides the `-mlongcall'
37374option, but not the `longcall' and `shortcall' attributes.  *Note
37375RS/6000 and PowerPC Options::, for more information about when long
37376calls are and are not necessary.
37377
37378`longcall (1)'
37379     Apply the `longcall' attribute to all subsequent function
37380     declarations.
37381
37382`longcall (0)'
37383     Do not apply the `longcall' attribute to subsequent function
37384     declarations.
37385
37386
37387File: gcc.info,  Node: Darwin Pragmas,  Next: Solaris Pragmas,  Prev: RS/6000 and PowerPC Pragmas,  Up: Pragmas
37388
373896.56.5 Darwin Pragmas
37390---------------------
37391
37392The following pragmas are available for all architectures running the
37393Darwin operating system.  These are useful for compatibility with other
37394Mac OS compilers.
37395
37396`mark TOKENS...'
37397     This pragma is accepted, but has no effect.
37398
37399`options align=ALIGNMENT'
37400     This pragma sets the alignment of fields in structures.  The
37401     values of ALIGNMENT may be `mac68k', to emulate m68k alignment, or
37402     `power', to emulate PowerPC alignment.  Uses of this pragma nest
37403     properly; to restore the previous setting, use `reset' for the
37404     ALIGNMENT.
37405
37406`segment TOKENS...'
37407     This pragma is accepted, but has no effect.
37408
37409`unused (VAR [, VAR]...)'
37410     This pragma declares variables to be possibly unused.  GCC will not
37411     produce warnings for the listed variables.  The effect is similar
37412     to that of the `unused' attribute, except that this pragma may
37413     appear anywhere within the variables' scopes.
37414
37415
37416File: gcc.info,  Node: Solaris Pragmas,  Next: Symbol-Renaming Pragmas,  Prev: Darwin Pragmas,  Up: Pragmas
37417
374186.56.6 Solaris Pragmas
37419----------------------
37420
37421The Solaris target supports `#pragma redefine_extname' (*note
37422Symbol-Renaming Pragmas::).  It also supports additional `#pragma'
37423directives for compatibility with the system compiler.
37424
37425`align ALIGNMENT (VARIABLE [, VARIABLE]...)'
37426     Increase the minimum alignment of each VARIABLE to ALIGNMENT.
37427     This is the same as GCC's `aligned' attribute *note Variable
37428     Attributes::).  Macro expansion occurs on the arguments to this
37429     pragma when compiling C and Objective-C.  It does not currently
37430     occur when compiling C++, but this is a bug which may be fixed in
37431     a future release.
37432
37433`fini (FUNCTION [, FUNCTION]...)'
37434     This pragma causes each listed FUNCTION to be called after main,
37435     or during shared module unloading, by adding a call to the `.fini'
37436     section.
37437
37438`init (FUNCTION [, FUNCTION]...)'
37439     This pragma causes each listed FUNCTION to be called during
37440     initialization (before `main') or during shared module loading, by
37441     adding a call to the `.init' section.
37442
37443
37444
37445File: gcc.info,  Node: Symbol-Renaming Pragmas,  Next: Structure-Packing Pragmas,  Prev: Solaris Pragmas,  Up: Pragmas
37446
374476.56.7 Symbol-Renaming Pragmas
37448------------------------------
37449
37450For compatibility with the Solaris and Tru64 UNIX system headers, GCC
37451supports two `#pragma' directives which change the name used in
37452assembly for a given declaration.  `#pragma extern_prefix' is only
37453available on platforms whose system headers need it. To get this effect
37454on all platforms supported by GCC, use the asm labels extension (*note
37455Asm Labels::).
37456
37457`redefine_extname OLDNAME NEWNAME'
37458     This pragma gives the C function OLDNAME the assembly symbol
37459     NEWNAME.  The preprocessor macro `__PRAGMA_REDEFINE_EXTNAME' will
37460     be defined if this pragma is available (currently on all
37461     platforms).
37462
37463`extern_prefix STRING'
37464     This pragma causes all subsequent external function and variable
37465     declarations to have STRING prepended to their assembly symbols.
37466     This effect may be terminated with another `extern_prefix' pragma
37467     whose argument is an empty string.  The preprocessor macro
37468     `__PRAGMA_EXTERN_PREFIX' will be defined if this pragma is
37469     available (currently only on Tru64 UNIX).
37470
37471 These pragmas and the asm labels extension interact in a complicated
37472manner.  Here are some corner cases you may want to be aware of.
37473
37474  1. Both pragmas silently apply only to declarations with external
37475     linkage.  Asm labels do not have this restriction.
37476
37477  2. In C++, both pragmas silently apply only to declarations with "C"
37478     linkage.  Again, asm labels do not have this restriction.
37479
37480  3. If any of the three ways of changing the assembly name of a
37481     declaration is applied to a declaration whose assembly name has
37482     already been determined (either by a previous use of one of these
37483     features, or because the compiler needed the assembly name in
37484     order to generate code), and the new name is different, a warning
37485     issues and the name does not change.
37486
37487  4. The OLDNAME used by `#pragma redefine_extname' is always the
37488     C-language name.
37489
37490  5. If `#pragma extern_prefix' is in effect, and a declaration occurs
37491     with an asm label attached, the prefix is silently ignored for
37492     that declaration.
37493
37494  6. If `#pragma extern_prefix' and `#pragma redefine_extname' apply to
37495     the same declaration, whichever triggered first wins, and a
37496     warning issues if they contradict each other.  (We would like to
37497     have `#pragma redefine_extname' always win, for consistency with
37498     asm labels, but if `#pragma extern_prefix' triggers first we have
37499     no way of knowing that that happened.)
37500
37501
37502File: gcc.info,  Node: Structure-Packing Pragmas,  Next: Weak Pragmas,  Prev: Symbol-Renaming Pragmas,  Up: Pragmas
37503
375046.56.8 Structure-Packing Pragmas
37505--------------------------------
37506
37507For compatibility with Microsoft Windows compilers, GCC supports a set
37508of `#pragma' directives which change the maximum alignment of members
37509of structures (other than zero-width bitfields), unions, and classes
37510subsequently defined. The N value below always is required to be a
37511small power of two and specifies the new alignment in bytes.
37512
37513  1. `#pragma pack(N)' simply sets the new alignment.
37514
37515  2. `#pragma pack()' sets the alignment to the one that was in effect
37516     when compilation started (see also command-line option
37517     `-fpack-struct[=N]' *note Code Gen Options::).
37518
37519  3. `#pragma pack(push[,N])' pushes the current alignment setting on
37520     an internal stack and then optionally sets the new alignment.
37521
37522  4. `#pragma pack(pop)' restores the alignment setting to the one
37523     saved at the top of the internal stack (and removes that stack
37524     entry).  Note that `#pragma pack([N])' does not influence this
37525     internal stack; thus it is possible to have `#pragma pack(push)'
37526     followed by multiple `#pragma pack(N)' instances and finalized by
37527     a single `#pragma pack(pop)'.
37528
37529 Some targets, e.g. i386 and powerpc, support the `ms_struct' `#pragma'
37530which lays out a structure as the documented `__attribute__
37531((ms_struct))'.
37532  1. `#pragma ms_struct on' turns on the layout for structures declared.
37533
37534  2. `#pragma ms_struct off' turns off the layout for structures
37535     declared.
37536
37537  3. `#pragma ms_struct reset' goes back to the default layout.
37538
37539
37540File: gcc.info,  Node: Weak Pragmas,  Next: Diagnostic Pragmas,  Prev: Structure-Packing Pragmas,  Up: Pragmas
37541
375426.56.9 Weak Pragmas
37543-------------------
37544
37545For compatibility with SVR4, GCC supports a set of `#pragma' directives
37546for declaring symbols to be weak, and defining weak aliases.
37547
37548`#pragma weak SYMBOL'
37549     This pragma declares SYMBOL to be weak, as if the declaration had
37550     the attribute of the same name.  The pragma may appear before or
37551     after the declaration of SYMBOL.  It is not an error for SYMBOL to
37552     never be defined at all.
37553
37554`#pragma weak SYMBOL1 = SYMBOL2'
37555     This pragma declares SYMBOL1 to be a weak alias of SYMBOL2.  It is
37556     an error if SYMBOL2 is not defined in the current translation unit.
37557
37558
37559File: gcc.info,  Node: Diagnostic Pragmas,  Next: Visibility Pragmas,  Prev: Weak Pragmas,  Up: Pragmas
37560
375616.56.10 Diagnostic Pragmas
37562--------------------------
37563
37564GCC allows the user to selectively enable or disable certain types of
37565diagnostics, and change the kind of the diagnostic.  For example, a
37566project's policy might require that all sources compile with `-Werror'
37567but certain files might have exceptions allowing specific types of
37568warnings.  Or, a project might selectively enable diagnostics and treat
37569them as errors depending on which preprocessor macros are defined.
37570
37571`#pragma GCC diagnostic KIND OPTION'
37572     Modifies the disposition of a diagnostic.  Note that not all
37573     diagnostics are modifiable; at the moment only warnings (normally
37574     controlled by `-W...') can be controlled, and not all of them.
37575     Use `-fdiagnostics-show-option' to determine which diagnostics are
37576     controllable and which option controls them.
37577
37578     KIND is `error' to treat this diagnostic as an error, `warning' to
37579     treat it like a warning (even if `-Werror' is in effect), or
37580     `ignored' if the diagnostic is to be ignored.  OPTION is a double
37581     quoted string which matches the command-line option.
37582
37583          #pragma GCC diagnostic warning "-Wformat"
37584          #pragma GCC diagnostic error "-Wformat"
37585          #pragma GCC diagnostic ignored "-Wformat"
37586
37587     Note that these pragmas override any command-line options.  GCC
37588     keeps track of the location of each pragma, and issues diagnostics
37589     according to the state as of that point in the source file.  Thus,
37590     pragmas occurring after a line do not affect diagnostics caused by
37591     that line.
37592
37593`#pragma GCC diagnostic push'
37594`#pragma GCC diagnostic pop'
37595     Causes GCC to remember the state of the diagnostics as of each
37596     `push', and restore to that point at each `pop'.  If a `pop' has
37597     no matching `push', the command line options are restored.
37598
37599          #pragma GCC diagnostic error "-Wuninitialized"
37600            foo(a);			/* error is given for this one */
37601          #pragma GCC diagnostic push
37602          #pragma GCC diagnostic ignored "-Wuninitialized"
37603            foo(b);			/* no diagnostic for this one */
37604          #pragma GCC diagnostic pop
37605            foo(c);			/* error is given for this one */
37606          #pragma GCC diagnostic pop
37607            foo(d);			/* depends on command line options */
37608
37609
37610 GCC also offers a simple mechanism for printing messages during
37611compilation.
37612
37613`#pragma message STRING'
37614     Prints STRING as a compiler message on compilation.  The message
37615     is informational only, and is neither a compilation warning nor an
37616     error.
37617
37618          #pragma message "Compiling " __FILE__ "..."
37619
37620     STRING may be parenthesized, and is printed with location
37621     information.  For example,
37622
37623          #define DO_PRAGMA(x) _Pragma (#x)
37624          #define TODO(x) DO_PRAGMA(message ("TODO - " #x))
37625
37626          TODO(Remember to fix this)
37627
37628     prints `/tmp/file.c:4: note: #pragma message: TODO - Remember to
37629     fix this'.
37630
37631
37632
37633File: gcc.info,  Node: Visibility Pragmas,  Next: Push/Pop Macro Pragmas,  Prev: Diagnostic Pragmas,  Up: Pragmas
37634
376356.56.11 Visibility Pragmas
37636--------------------------
37637
37638`#pragma GCC visibility push(VISIBILITY)'
37639`#pragma GCC visibility pop'
37640     This pragma allows the user to set the visibility for multiple
37641     declarations without having to give each a visibility attribute
37642     *Note Function Attributes::, for more information about visibility
37643     and the attribute syntax.
37644
37645     In C++, `#pragma GCC visibility' affects only namespace-scope
37646     declarations.  Class members and template specializations are not
37647     affected; if you want to override the visibility for a particular
37648     member or instantiation, you must use an attribute.
37649
37650
37651
37652File: gcc.info,  Node: Push/Pop Macro Pragmas,  Next: Function Specific Option Pragmas,  Prev: Visibility Pragmas,  Up: Pragmas
37653
376546.56.12 Push/Pop Macro Pragmas
37655------------------------------
37656
37657For compatibility with Microsoft Windows compilers, GCC supports
37658`#pragma push_macro("MACRO_NAME")' and `#pragma
37659pop_macro("MACRO_NAME")'.
37660
37661`#pragma push_macro("MACRO_NAME")'
37662     This pragma saves the value of the macro named as MACRO_NAME to
37663     the top of the stack for this macro.
37664
37665`#pragma pop_macro("MACRO_NAME")'
37666     This pragma sets the value of the macro named as MACRO_NAME to the
37667     value on top of the stack for this macro. If the stack for
37668     MACRO_NAME is empty, the value of the macro remains unchanged.
37669
37670 For example:
37671
37672     #define X  1
37673     #pragma push_macro("X")
37674     #undef X
37675     #define X -1
37676     #pragma pop_macro("X")
37677     int x [X];
37678
37679 In this example, the definition of X as 1 is saved by `#pragma
37680push_macro' and restored by `#pragma pop_macro'.
37681
37682
37683File: gcc.info,  Node: Function Specific Option Pragmas,  Prev: Push/Pop Macro Pragmas,  Up: Pragmas
37684
376856.56.13 Function Specific Option Pragmas
37686----------------------------------------
37687
37688`#pragma GCC target ("STRING"...)'
37689     This pragma allows you to set target specific options for functions
37690     defined later in the source file.  One or more strings can be
37691     specified.  Each function that is defined after this point will be
37692     as if `attribute((target("STRING")))' was specified for that
37693     function.  The parenthesis around the options is optional.  *Note
37694     Function Attributes::, for more information about the `target'
37695     attribute and the attribute syntax.
37696
37697     The `#pragma GCC target' attribute is not implemented in GCC
37698     versions earlier than 4.4 for the i386/x86_64 and 4.6 for the
37699     PowerPC backends.  At present, it is not implemented for other
37700     backends.
37701
37702`#pragma GCC optimize ("STRING"...)'
37703     This pragma allows you to set global optimization options for
37704     functions defined later in the source file.  One or more strings
37705     can be specified.  Each function that is defined after this point
37706     will be as if `attribute((optimize("STRING")))' was specified for
37707     that function.  The parenthesis around the options is optional.
37708     *Note Function Attributes::, for more information about the
37709     `optimize' attribute and the attribute syntax.
37710
37711     The `#pragma GCC optimize' pragma is not implemented in GCC
37712     versions earlier than 4.4.
37713
37714`#pragma GCC push_options'
37715`#pragma GCC pop_options'
37716     These pragmas maintain a stack of the current target and
37717     optimization options.  It is intended for include files where you
37718     temporarily want to switch to using a different `#pragma GCC
37719     target' or `#pragma GCC optimize' and then to pop back to the
37720     previous options.
37721
37722     The `#pragma GCC push_options' and `#pragma GCC pop_options'
37723     pragmas are not implemented in GCC versions earlier than 4.4.
37724
37725`#pragma GCC reset_options'
37726     This pragma clears the current `#pragma GCC target' and `#pragma
37727     GCC optimize' to use the default switches as specified on the
37728     command line.
37729
37730     The `#pragma GCC reset_options' pragma is not implemented in GCC
37731     versions earlier than 4.4.
37732
37733
37734File: gcc.info,  Node: Unnamed Fields,  Next: Thread-Local,  Prev: Pragmas,  Up: C Extensions
37735
377366.57 Unnamed struct/union fields within structs/unions
37737======================================================
37738
37739As permitted by ISO C1X and for compatibility with other compilers, GCC
37740allows you to define a structure or union that contains, as fields,
37741structures and unions without names.  For example:
37742
37743     struct {
37744       int a;
37745       union {
37746         int b;
37747         float c;
37748       };
37749       int d;
37750     } foo;
37751
37752 In this example, the user would be able to access members of the
37753unnamed union with code like `foo.b'.  Note that only unnamed structs
37754and unions are allowed, you may not have, for example, an unnamed `int'.
37755
37756 You must never create such structures that cause ambiguous field
37757definitions.  For example, this structure:
37758
37759     struct {
37760       int a;
37761       struct {
37762         int a;
37763       };
37764     } foo;
37765
37766 It is ambiguous which `a' is being referred to with `foo.a'.  The
37767compiler gives errors for such constructs.
37768
37769 Unless `-fms-extensions' is used, the unnamed field must be a
37770structure or union definition without a tag (for example, `struct { int
37771a; };').  If `-fms-extensions' is used, the field may also be a
37772definition with a tag such as `struct foo { int a; };', a reference to
37773a previously defined structure or union such as `struct foo;', or a
37774reference to a `typedef' name for a previously defined structure or
37775union type.
37776
37777 The option `-fplan9-extensions' enables `-fms-extensions' as well as
37778two other extensions.  First, a pointer to a structure is automatically
37779converted to a pointer to an anonymous field for assignments and
37780function calls.  For example:
37781
37782     struct s1 { int a; };
37783     struct s2 { struct s1; };
37784     extern void f1 (struct s1 *);
37785     void f2 (struct s2 *p) { f1 (p); }
37786
37787 In the call to `f1' inside `f2', the pointer `p' is converted into a
37788pointer to the anonymous field.
37789
37790 Second, when the type of an anonymous field is a `typedef' for a
37791`struct' or `union', code may refer to the field using the name of the
37792`typedef'.
37793
37794     typedef struct { int a; } s1;
37795     struct s2 { s1; };
37796     s1 f1 (struct s2 *p) { return p->s1; }
37797
37798 These usages are only permitted when they are not ambiguous.
37799
37800
37801File: gcc.info,  Node: Thread-Local,  Next: Binary constants,  Prev: Unnamed Fields,  Up: C Extensions
37802
378036.58 Thread-Local Storage
37804=========================
37805
37806Thread-local storage (TLS) is a mechanism by which variables are
37807allocated such that there is one instance of the variable per extant
37808thread.  The run-time model GCC uses to implement this originates in
37809the IA-64 processor-specific ABI, but has since been migrated to other
37810processors as well.  It requires significant support from the linker
37811(`ld'), dynamic linker (`ld.so'), and system libraries (`libc.so' and
37812`libpthread.so'), so it is not available everywhere.
37813
37814 At the user level, the extension is visible with a new storage class
37815keyword: `__thread'.  For example:
37816
37817     __thread int i;
37818     extern __thread struct state s;
37819     static __thread char *p;
37820
37821 The `__thread' specifier may be used alone, with the `extern' or
37822`static' specifiers, but with no other storage class specifier.  When
37823used with `extern' or `static', `__thread' must appear immediately
37824after the other storage class specifier.
37825
37826 The `__thread' specifier may be applied to any global, file-scoped
37827static, function-scoped static, or static data member of a class.  It
37828may not be applied to block-scoped automatic or non-static data member.
37829
37830 When the address-of operator is applied to a thread-local variable, it
37831is evaluated at run-time and returns the address of the current thread's
37832instance of that variable.  An address so obtained may be used by any
37833thread.  When a thread terminates, any pointers to thread-local
37834variables in that thread become invalid.
37835
37836 No static initialization may refer to the address of a thread-local
37837variable.
37838
37839 In C++, if an initializer is present for a thread-local variable, it
37840must be a CONSTANT-EXPRESSION, as defined in 5.19.2 of the ANSI/ISO C++
37841standard.
37842
37843 See ELF Handling For Thread-Local Storage
37844(http://www.akkadia.org/drepper/tls.pdf) for a detailed explanation of
37845the four thread-local storage addressing models, and how the run-time
37846is expected to function.
37847
37848* Menu:
37849
37850* C99 Thread-Local Edits::
37851* C++98 Thread-Local Edits::
37852
37853
37854File: gcc.info,  Node: C99 Thread-Local Edits,  Next: C++98 Thread-Local Edits,  Up: Thread-Local
37855
378566.58.1 ISO/IEC 9899:1999 Edits for Thread-Local Storage
37857-------------------------------------------------------
37858
37859The following are a set of changes to ISO/IEC 9899:1999 (aka C99) that
37860document the exact semantics of the language extension.
37861
37862   * `5.1.2  Execution environments'
37863
37864     Add new text after paragraph 1
37865
37866          Within either execution environment, a "thread" is a flow of
37867          control within a program.  It is implementation defined
37868          whether or not there may be more than one thread associated
37869          with a program.  It is implementation defined how threads
37870          beyond the first are created, the name and type of the
37871          function called at thread startup, and how threads may be
37872          terminated.  However, objects with thread storage duration
37873          shall be initialized before thread startup.
37874
37875   * `6.2.4  Storage durations of objects'
37876
37877     Add new text before paragraph 3
37878
37879          An object whose identifier is declared with the storage-class
37880          specifier `__thread' has "thread storage duration".  Its
37881          lifetime is the entire execution of the thread, and its
37882          stored value is initialized only once, prior to thread
37883          startup.
37884
37885   * `6.4.1  Keywords'
37886
37887     Add `__thread'.
37888
37889   * `6.7.1  Storage-class specifiers'
37890
37891     Add `__thread' to the list of storage class specifiers in
37892     paragraph 1.
37893
37894     Change paragraph 2 to
37895
37896          With the exception of `__thread', at most one storage-class
37897          specifier may be given [...].  The `__thread' specifier may
37898          be used alone, or immediately following `extern' or `static'.
37899
37900     Add new text after paragraph 6
37901
37902          The declaration of an identifier for a variable that has
37903          block scope that specifies `__thread' shall also specify
37904          either `extern' or `static'.
37905
37906          The `__thread' specifier shall be used only with variables.
37907
37908
37909File: gcc.info,  Node: C++98 Thread-Local Edits,  Prev: C99 Thread-Local Edits,  Up: Thread-Local
37910
379116.58.2 ISO/IEC 14882:1998 Edits for Thread-Local Storage
37912--------------------------------------------------------
37913
37914The following are a set of changes to ISO/IEC 14882:1998 (aka C++98)
37915that document the exact semantics of the language extension.
37916
37917   * [intro.execution]
37918
37919     New text after paragraph 4
37920
37921          A "thread" is a flow of control within the abstract machine.
37922          It is implementation defined whether or not there may be more
37923          than one thread.
37924
37925     New text after paragraph 7
37926
37927          It is unspecified whether additional action must be taken to
37928          ensure when and whether side effects are visible to other
37929          threads.
37930
37931   * [lex.key]
37932
37933     Add `__thread'.
37934
37935   * [basic.start.main]
37936
37937     Add after paragraph 5
37938
37939          The thread that begins execution at the `main' function is
37940          called the "main thread".  It is implementation defined how
37941          functions beginning threads other than the main thread are
37942          designated or typed.  A function so designated, as well as
37943          the `main' function, is called a "thread startup function".
37944          It is implementation defined what happens if a thread startup
37945          function returns.  It is implementation defined what happens
37946          to other threads when any thread calls `exit'.
37947
37948   * [basic.start.init]
37949
37950     Add after paragraph 4
37951
37952          The storage for an object of thread storage duration shall be
37953          statically initialized before the first statement of the
37954          thread startup function.  An object of thread storage
37955          duration shall not require dynamic initialization.
37956
37957   * [basic.start.term]
37958
37959     Add after paragraph 3
37960
37961          The type of an object with thread storage duration shall not
37962          have a non-trivial destructor, nor shall it be an array type
37963          whose elements (directly or indirectly) have non-trivial
37964          destructors.
37965
37966   * [basic.stc]
37967
37968     Add "thread storage duration" to the list in paragraph 1.
37969
37970     Change paragraph 2
37971
37972          Thread, static, and automatic storage durations are
37973          associated with objects introduced by declarations [...].
37974
37975     Add `__thread' to the list of specifiers in paragraph 3.
37976
37977   * [basic.stc.thread]
37978
37979     New section before [basic.stc.static]
37980
37981          The keyword `__thread' applied to a non-local object gives the
37982          object thread storage duration.
37983
37984          A local variable or class data member declared both `static'
37985          and `__thread' gives the variable or member thread storage
37986          duration.
37987
37988   * [basic.stc.static]
37989
37990     Change paragraph 1
37991
37992          All objects which have neither thread storage duration,
37993          dynamic storage duration nor are local [...].
37994
37995   * [dcl.stc]
37996
37997     Add `__thread' to the list in paragraph 1.
37998
37999     Change paragraph 1
38000
38001          With the exception of `__thread', at most one
38002          STORAGE-CLASS-SPECIFIER shall appear in a given
38003          DECL-SPECIFIER-SEQ.  The `__thread' specifier may be used
38004          alone, or immediately following the `extern' or `static'
38005          specifiers.  [...]
38006
38007     Add after paragraph 5
38008
38009          The `__thread' specifier can be applied only to the names of
38010          objects and to anonymous unions.
38011
38012   * [class.mem]
38013
38014     Add after paragraph 6
38015
38016          Non-`static' members shall not be `__thread'.
38017
38018
38019File: gcc.info,  Node: Binary constants,  Prev: Thread-Local,  Up: C Extensions
38020
380216.59 Binary constants using the `0b' prefix
38022===========================================
38023
38024Integer constants can be written as binary constants, consisting of a
38025sequence of `0' and `1' digits, prefixed by `0b' or `0B'.  This is
38026particularly useful in environments that operate a lot on the bit-level
38027(like microcontrollers).
38028
38029 The following statements are identical:
38030
38031     i =       42;
38032     i =     0x2a;
38033     i =      052;
38034     i = 0b101010;
38035
38036 The type of these constants follows the same rules as for octal or
38037hexadecimal integer constants, so suffixes like `L' or `UL' can be
38038applied.
38039
38040
38041File: gcc.info,  Node: C++ Extensions,  Next: Objective-C,  Prev: C++ Implementation,  Up: Top
38042
380437 Extensions to the C++ Language
38044********************************
38045
38046The GNU compiler provides these extensions to the C++ language (and you
38047can also use most of the C language extensions in your C++ programs).
38048If you want to write code that checks whether these features are
38049available, you can test for the GNU compiler the same way as for C
38050programs: check for a predefined macro `__GNUC__'.  You can also use
38051`__GNUG__' to test specifically for GNU C++ (*note Predefined Macros:
38052(cpp)Common Predefined Macros.).
38053
38054* Menu:
38055
38056* C++ Volatiles::       What constitutes an access to a volatile object.
38057* Restricted Pointers:: C99 restricted pointers and references.
38058* Vague Linkage::       Where G++ puts inlines, vtables and such.
38059* C++ Interface::       You can use a single C++ header file for both
38060                        declarations and definitions.
38061* Template Instantiation:: Methods for ensuring that exactly one copy of
38062                        each needed template instantiation is emitted.
38063* Bound member functions:: You can extract a function pointer to the
38064                        method denoted by a `->*' or `.*' expression.
38065* C++ Attributes::      Variable, function, and type attributes for C++ only.
38066* Namespace Association:: Strong using-directives for namespace association.
38067* Type Traits::         Compiler support for type traits
38068* Java Exceptions::     Tweaking exception handling to work with Java.
38069* Deprecated Features:: Things will disappear from g++.
38070* Backwards Compatibility:: Compatibilities with earlier definitions of C++.
38071
38072
38073File: gcc.info,  Node: C++ Volatiles,  Next: Restricted Pointers,  Up: C++ Extensions
38074
380757.1 When is a Volatile C++ Object Accessed?
38076===========================================
38077
38078The C++ standard differs from the C standard in its treatment of
38079volatile objects.  It fails to specify what constitutes a volatile
38080access, except to say that C++ should behave in a similar manner to C
38081with respect to volatiles, where possible.  However, the different
38082lvalueness of expressions between C and C++ complicate the behavior.
38083G++ behaves the same as GCC for volatile access, *Note Volatiles: C
38084Extensions, for a description of GCC's behavior.
38085
38086 The C and C++ language specifications differ when an object is
38087accessed in a void context:
38088
38089     volatile int *src = SOMEVALUE;
38090     *src;
38091
38092 The C++ standard specifies that such expressions do not undergo lvalue
38093to rvalue conversion, and that the type of the dereferenced object may
38094be incomplete.  The C++ standard does not specify explicitly that it is
38095lvalue to rvalue conversion which is responsible for causing an access.
38096There is reason to believe that it is, because otherwise certain simple
38097expressions become undefined.  However, because it would surprise most
38098programmers, G++ treats dereferencing a pointer to volatile object of
38099complete type as GCC would do for an equivalent type in C.  When the
38100object has incomplete type, G++ issues a warning; if you wish to force
38101an error, you must force a conversion to rvalue with, for instance, a
38102static cast.
38103
38104 When using a reference to volatile, G++ does not treat equivalent
38105expressions as accesses to volatiles, but instead issues a warning that
38106no volatile is accessed.  The rationale for this is that otherwise it
38107becomes difficult to determine where volatile access occur, and not
38108possible to ignore the return value from functions returning volatile
38109references.  Again, if you wish to force a read, cast the reference to
38110an rvalue.
38111
38112 G++ implements the same behavior as GCC does when assigning to a
38113volatile object - there is no reread of the assigned-to object, the
38114assigned rvalue is reused.  Note that in C++ assignment expressions are
38115lvalues, and if used as an lvalue, the volatile object will be referred
38116to.  For instance, VREF will refer to VOBJ, as expected, in the
38117following example:
38118
38119     volatile int vobj;
38120     volatile int &vref = vobj = SOMETHING;
38121
38122
38123File: gcc.info,  Node: Restricted Pointers,  Next: Vague Linkage,  Prev: C++ Volatiles,  Up: C++ Extensions
38124
381257.2 Restricting Pointer Aliasing
38126================================
38127
38128As with the C front end, G++ understands the C99 feature of restricted
38129pointers, specified with the `__restrict__', or `__restrict' type
38130qualifier.  Because you cannot compile C++ by specifying the `-std=c99'
38131language flag, `restrict' is not a keyword in C++.
38132
38133 In addition to allowing restricted pointers, you can specify restricted
38134references, which indicate that the reference is not aliased in the
38135local context.
38136
38137     void fn (int *__restrict__ rptr, int &__restrict__ rref)
38138     {
38139       /* ... */
38140     }
38141
38142In the body of `fn', RPTR points to an unaliased integer and RREF
38143refers to a (different) unaliased integer.
38144
38145 You may also specify whether a member function's THIS pointer is
38146unaliased by using `__restrict__' as a member function qualifier.
38147
38148     void T::fn () __restrict__
38149     {
38150       /* ... */
38151     }
38152
38153Within the body of `T::fn', THIS will have the effective definition `T
38154*__restrict__ const this'.  Notice that the interpretation of a
38155`__restrict__' member function qualifier is different to that of
38156`const' or `volatile' qualifier, in that it is applied to the pointer
38157rather than the object.  This is consistent with other compilers which
38158implement restricted pointers.
38159
38160 As with all outermost parameter qualifiers, `__restrict__' is ignored
38161in function definition matching.  This means you only need to specify
38162`__restrict__' in a function definition, rather than in a function
38163prototype as well.
38164
38165
38166File: gcc.info,  Node: Vague Linkage,  Next: C++ Interface,  Prev: Restricted Pointers,  Up: C++ Extensions
38167
381687.3 Vague Linkage
38169=================
38170
38171There are several constructs in C++ which require space in the object
38172file but are not clearly tied to a single translation unit.  We say that
38173these constructs have "vague linkage".  Typically such constructs are
38174emitted wherever they are needed, though sometimes we can be more
38175clever.
38176
38177Inline Functions
38178     Inline functions are typically defined in a header file which can
38179     be included in many different compilations.  Hopefully they can
38180     usually be inlined, but sometimes an out-of-line copy is
38181     necessary, if the address of the function is taken or if inlining
38182     fails.  In general, we emit an out-of-line copy in all translation
38183     units where one is needed.  As an exception, we only emit inline
38184     virtual functions with the vtable, since it will always require a
38185     copy.
38186
38187     Local static variables and string constants used in an inline
38188     function are also considered to have vague linkage, since they
38189     must be shared between all inlined and out-of-line instances of
38190     the function.
38191
38192VTables
38193     C++ virtual functions are implemented in most compilers using a
38194     lookup table, known as a vtable.  The vtable contains pointers to
38195     the virtual functions provided by a class, and each object of the
38196     class contains a pointer to its vtable (or vtables, in some
38197     multiple-inheritance situations).  If the class declares any
38198     non-inline, non-pure virtual functions, the first one is chosen as
38199     the "key method" for the class, and the vtable is only emitted in
38200     the translation unit where the key method is defined.
38201
38202     _Note:_ If the chosen key method is later defined as inline, the
38203     vtable will still be emitted in every translation unit which
38204     defines it.  Make sure that any inline virtuals are declared
38205     inline in the class body, even if they are not defined there.
38206
38207`type_info' objects
38208     C++ requires information about types to be written out in order to
38209     implement `dynamic_cast', `typeid' and exception handling.  For
38210     polymorphic classes (classes with virtual functions), the
38211     `type_info' object is written out along with the vtable so that
38212     `dynamic_cast' can determine the dynamic type of a class object at
38213     runtime.  For all other types, we write out the `type_info' object
38214     when it is used: when applying `typeid' to an expression, throwing
38215     an object, or referring to a type in a catch clause or exception
38216     specification.
38217
38218Template Instantiations
38219     Most everything in this section also applies to template
38220     instantiations, but there are other options as well.  *Note
38221     Where's the Template?: Template Instantiation.
38222
38223
38224 When used with GNU ld version 2.8 or later on an ELF system such as
38225GNU/Linux or Solaris 2, or on Microsoft Windows, duplicate copies of
38226these constructs will be discarded at link time.  This is known as
38227COMDAT support.
38228
38229 On targets that don't support COMDAT, but do support weak symbols, GCC
38230will use them.  This way one copy will override all the others, but the
38231unused copies will still take up space in the executable.
38232
38233 For targets which do not support either COMDAT or weak symbols, most
38234entities with vague linkage will be emitted as local symbols to avoid
38235duplicate definition errors from the linker.  This will not happen for
38236local statics in inlines, however, as having multiple copies will
38237almost certainly break things.
38238
38239 *Note Declarations and Definitions in One Header: C++ Interface, for
38240another way to control placement of these constructs.
38241
38242
38243File: gcc.info,  Node: C++ Interface,  Next: Template Instantiation,  Prev: Vague Linkage,  Up: C++ Extensions
38244
382457.4 #pragma interface and implementation
38246========================================
38247
38248`#pragma interface' and `#pragma implementation' provide the user with
38249a way of explicitly directing the compiler to emit entities with vague
38250linkage (and debugging information) in a particular translation unit.
38251
38252 _Note:_ As of GCC 2.7.2, these `#pragma's are not useful in most
38253cases, because of COMDAT support and the "key method" heuristic
38254mentioned in *note Vague Linkage::.  Using them can actually cause your
38255program to grow due to unnecessary out-of-line copies of inline
38256functions.  Currently (3.4) the only benefit of these `#pragma's is
38257reduced duplication of debugging information, and that should be
38258addressed soon on DWARF 2 targets with the use of COMDAT groups.
38259
38260`#pragma interface'
38261`#pragma interface "SUBDIR/OBJECTS.h"'
38262     Use this directive in _header files_ that define object classes,
38263     to save space in most of the object files that use those classes.
38264     Normally, local copies of certain information (backup copies of
38265     inline member functions, debugging information, and the internal
38266     tables that implement virtual functions) must be kept in each
38267     object file that includes class definitions.  You can use this
38268     pragma to avoid such duplication.  When a header file containing
38269     `#pragma interface' is included in a compilation, this auxiliary
38270     information will not be generated (unless the main input source
38271     file itself uses `#pragma implementation').  Instead, the object
38272     files will contain references to be resolved at link time.
38273
38274     The second form of this directive is useful for the case where you
38275     have multiple headers with the same name in different directories.
38276     If you use this form, you must specify the same string to `#pragma
38277     implementation'.
38278
38279`#pragma implementation'
38280`#pragma implementation "OBJECTS.h"'
38281     Use this pragma in a _main input file_, when you want full output
38282     from included header files to be generated (and made globally
38283     visible).  The included header file, in turn, should use `#pragma
38284     interface'.  Backup copies of inline member functions, debugging
38285     information, and the internal tables used to implement virtual
38286     functions are all generated in implementation files.
38287
38288     If you use `#pragma implementation' with no argument, it applies to
38289     an include file with the same basename(1) as your source file.
38290     For example, in `allclass.cc', giving just `#pragma implementation'
38291     by itself is equivalent to `#pragma implementation "allclass.h"'.
38292
38293     In versions of GNU C++ prior to 2.6.0 `allclass.h' was treated as
38294     an implementation file whenever you would include it from
38295     `allclass.cc' even if you never specified `#pragma
38296     implementation'.  This was deemed to be more trouble than it was
38297     worth, however, and disabled.
38298
38299     Use the string argument if you want a single implementation file to
38300     include code from multiple header files.  (You must also use
38301     `#include' to include the header file; `#pragma implementation'
38302     only specifies how to use the file--it doesn't actually include
38303     it.)
38304
38305     There is no way to split up the contents of a single header file
38306     into multiple implementation files.
38307
38308 `#pragma implementation' and `#pragma interface' also have an effect
38309on function inlining.
38310
38311 If you define a class in a header file marked with `#pragma
38312interface', the effect on an inline function defined in that class is
38313similar to an explicit `extern' declaration--the compiler emits no code
38314at all to define an independent version of the function.  Its
38315definition is used only for inlining with its callers.
38316
38317 Conversely, when you include the same header file in a main source file
38318that declares it as `#pragma implementation', the compiler emits code
38319for the function itself; this defines a version of the function that
38320can be found via pointers (or by callers compiled without inlining).
38321If all calls to the function can be inlined, you can avoid emitting the
38322function by compiling with `-fno-implement-inlines'.  If any calls were
38323not inlined, you will get linker errors.
38324
38325 ---------- Footnotes ----------
38326
38327 (1) A file's "basename" was the name stripped of all leading path
38328information and of trailing suffixes, such as `.h' or `.C' or `.cc'.
38329
38330
38331File: gcc.info,  Node: Template Instantiation,  Next: Bound member functions,  Prev: C++ Interface,  Up: C++ Extensions
38332
383337.5 Where's the Template?
38334=========================
38335
38336C++ templates are the first language feature to require more
38337intelligence from the environment than one usually finds on a UNIX
38338system.  Somehow the compiler and linker have to make sure that each
38339template instance occurs exactly once in the executable if it is needed,
38340and not at all otherwise.  There are two basic approaches to this
38341problem, which are referred to as the Borland model and the Cfront
38342model.
38343
38344Borland model
38345     Borland C++ solved the template instantiation problem by adding
38346     the code equivalent of common blocks to their linker; the compiler
38347     emits template instances in each translation unit that uses them,
38348     and the linker collapses them together.  The advantage of this
38349     model is that the linker only has to consider the object files
38350     themselves; there is no external complexity to worry about.  This
38351     disadvantage is that compilation time is increased because the
38352     template code is being compiled repeatedly.  Code written for this
38353     model tends to include definitions of all templates in the header
38354     file, since they must be seen to be instantiated.
38355
38356Cfront model
38357     The AT&T C++ translator, Cfront, solved the template instantiation
38358     problem by creating the notion of a template repository, an
38359     automatically maintained place where template instances are
38360     stored.  A more modern version of the repository works as follows:
38361     As individual object files are built, the compiler places any
38362     template definitions and instantiations encountered in the
38363     repository.  At link time, the link wrapper adds in the objects in
38364     the repository and compiles any needed instances that were not
38365     previously emitted.  The advantages of this model are more optimal
38366     compilation speed and the ability to use the system linker; to
38367     implement the Borland model a compiler vendor also needs to
38368     replace the linker.  The disadvantages are vastly increased
38369     complexity, and thus potential for error; for some code this can be
38370     just as transparent, but in practice it can been very difficult to
38371     build multiple programs in one directory and one program in
38372     multiple directories.  Code written for this model tends to
38373     separate definitions of non-inline member templates into a
38374     separate file, which should be compiled separately.
38375
38376 When used with GNU ld version 2.8 or later on an ELF system such as
38377GNU/Linux or Solaris 2, or on Microsoft Windows, G++ supports the
38378Borland model.  On other systems, G++ implements neither automatic
38379model.
38380
38381 A future version of G++ will support a hybrid model whereby the
38382compiler will emit any instantiations for which the template definition
38383is included in the compile, and store template definitions and
38384instantiation context information into the object file for the rest.
38385The link wrapper will extract that information as necessary and invoke
38386the compiler to produce the remaining instantiations.  The linker will
38387then combine duplicate instantiations.
38388
38389 In the mean time, you have the following options for dealing with
38390template instantiations:
38391
38392  1. Compile your template-using code with `-frepo'.  The compiler will
38393     generate files with the extension `.rpo' listing all of the
38394     template instantiations used in the corresponding object files
38395     which could be instantiated there; the link wrapper, `collect2',
38396     will then update the `.rpo' files to tell the compiler where to
38397     place those instantiations and rebuild any affected object files.
38398     The link-time overhead is negligible after the first pass, as the
38399     compiler will continue to place the instantiations in the same
38400     files.
38401
38402     This is your best option for application code written for the
38403     Borland model, as it will just work.  Code written for the Cfront
38404     model will need to be modified so that the template definitions
38405     are available at one or more points of instantiation; usually this
38406     is as simple as adding `#include <tmethods.cc>' to the end of each
38407     template header.
38408
38409     For library code, if you want the library to provide all of the
38410     template instantiations it needs, just try to link all of its
38411     object files together; the link will fail, but cause the
38412     instantiations to be generated as a side effect.  Be warned,
38413     however, that this may cause conflicts if multiple libraries try
38414     to provide the same instantiations.  For greater control, use
38415     explicit instantiation as described in the next option.
38416
38417  2. Compile your code with `-fno-implicit-templates' to disable the
38418     implicit generation of template instances, and explicitly
38419     instantiate all the ones you use.  This approach requires more
38420     knowledge of exactly which instances you need than do the others,
38421     but it's less mysterious and allows greater control.  You can
38422     scatter the explicit instantiations throughout your program,
38423     perhaps putting them in the translation units where the instances
38424     are used or the translation units that define the templates
38425     themselves; you can put all of the explicit instantiations you
38426     need into one big file; or you can create small files like
38427
38428          #include "Foo.h"
38429          #include "Foo.cc"
38430
38431          template class Foo<int>;
38432          template ostream& operator <<
38433                          (ostream&, const Foo<int>&);
38434
38435     for each of the instances you need, and create a template
38436     instantiation library from those.
38437
38438     If you are using Cfront-model code, you can probably get away with
38439     not using `-fno-implicit-templates' when compiling files that don't
38440     `#include' the member template definitions.
38441
38442     If you use one big file to do the instantiations, you may want to
38443     compile it without `-fno-implicit-templates' so you get all of the
38444     instances required by your explicit instantiations (but not by any
38445     other files) without having to specify them as well.
38446
38447     G++ has extended the template instantiation syntax given in the ISO
38448     standard to allow forward declaration of explicit instantiations
38449     (with `extern'), instantiation of the compiler support data for a
38450     template class (i.e. the vtable) without instantiating any of its
38451     members (with `inline'), and instantiation of only the static data
38452     members of a template class, without the support data or member
38453     functions (with (`static'):
38454
38455          extern template int max (int, int);
38456          inline template class Foo<int>;
38457          static template class Foo<int>;
38458
38459  3. Do nothing.  Pretend G++ does implement automatic instantiation
38460     management.  Code written for the Borland model will work fine, but
38461     each translation unit will contain instances of each of the
38462     templates it uses.  In a large program, this can lead to an
38463     unacceptable amount of code duplication.
38464
38465
38466File: gcc.info,  Node: Bound member functions,  Next: C++ Attributes,  Prev: Template Instantiation,  Up: C++ Extensions
38467
384687.6 Extracting the function pointer from a bound pointer to member function
38469===========================================================================
38470
38471In C++, pointer to member functions (PMFs) are implemented using a wide
38472pointer of sorts to handle all the possible call mechanisms; the PMF
38473needs to store information about how to adjust the `this' pointer, and
38474if the function pointed to is virtual, where to find the vtable, and
38475where in the vtable to look for the member function.  If you are using
38476PMFs in an inner loop, you should really reconsider that decision.  If
38477that is not an option, you can extract the pointer to the function that
38478would be called for a given object/PMF pair and call it directly inside
38479the inner loop, to save a bit of time.
38480
38481 Note that you will still be paying the penalty for the call through a
38482function pointer; on most modern architectures, such a call defeats the
38483branch prediction features of the CPU.  This is also true of normal
38484virtual function calls.
38485
38486 The syntax for this extension is
38487
38488     extern A a;
38489     extern int (A::*fp)();
38490     typedef int (*fptr)(A *);
38491
38492     fptr p = (fptr)(a.*fp);
38493
38494 For PMF constants (i.e. expressions of the form `&Klasse::Member'), no
38495object is needed to obtain the address of the function.  They can be
38496converted to function pointers directly:
38497
38498     fptr p1 = (fptr)(&A::foo);
38499
38500 You must specify `-Wno-pmf-conversions' to use this extension.
38501
38502
38503File: gcc.info,  Node: C++ Attributes,  Next: Namespace Association,  Prev: Bound member functions,  Up: C++ Extensions
38504
385057.7 C++-Specific Variable, Function, and Type Attributes
38506========================================================
38507
38508Some attributes only make sense for C++ programs.
38509
38510`init_priority (PRIORITY)'
38511     In Standard C++, objects defined at namespace scope are guaranteed
38512     to be initialized in an order in strict accordance with that of
38513     their definitions _in a given translation unit_.  No guarantee is
38514     made for initializations across translation units.  However, GNU
38515     C++ allows users to control the order of initialization of objects
38516     defined at namespace scope with the `init_priority' attribute by
38517     specifying a relative PRIORITY, a constant integral expression
38518     currently bounded between 101 and 65535 inclusive.  Lower numbers
38519     indicate a higher priority.
38520
38521     In the following example, `A' would normally be created before
38522     `B', but the `init_priority' attribute has reversed that order:
38523
38524          Some_Class  A  __attribute__ ((init_priority (2000)));
38525          Some_Class  B  __attribute__ ((init_priority (543)));
38526
38527     Note that the particular values of PRIORITY do not matter; only
38528     their relative ordering.
38529
38530`java_interface'
38531     This type attribute informs C++ that the class is a Java
38532     interface.  It may only be applied to classes declared within an
38533     `extern "Java"' block.  Calls to methods declared in this
38534     interface will be dispatched using GCJ's interface table
38535     mechanism, instead of regular virtual table dispatch.
38536
38537
38538 See also *note Namespace Association::.
38539
38540
38541File: gcc.info,  Node: Namespace Association,  Next: Type Traits,  Prev: C++ Attributes,  Up: C++ Extensions
38542
385437.8 Namespace Association
38544=========================
38545
38546*Caution:* The semantics of this extension are not fully defined.
38547Users should refrain from using this extension as its semantics may
38548change subtly over time.  It is possible that this extension will be
38549removed in future versions of G++.
38550
38551 A using-directive with `__attribute ((strong))' is stronger than a
38552normal using-directive in two ways:
38553
38554   * Templates from the used namespace can be specialized and explicitly
38555     instantiated as though they were members of the using namespace.
38556
38557   * The using namespace is considered an associated namespace of all
38558     templates in the used namespace for purposes of argument-dependent
38559     name lookup.
38560
38561 The used namespace must be nested within the using namespace so that
38562normal unqualified lookup works properly.
38563
38564 This is useful for composing a namespace transparently from
38565implementation namespaces.  For example:
38566
38567     namespace std {
38568       namespace debug {
38569         template <class T> struct A { };
38570       }
38571       using namespace debug __attribute ((__strong__));
38572       template <> struct A<int> { };   // ok to specialize
38573
38574       template <class T> void f (A<T>);
38575     }
38576
38577     int main()
38578     {
38579       f (std::A<float>());             // lookup finds std::f
38580       f (std::A<int>());
38581     }
38582
38583
38584File: gcc.info,  Node: Type Traits,  Next: Java Exceptions,  Prev: Namespace Association,  Up: C++ Extensions
38585
385867.9 Type Traits
38587===============
38588
38589The C++ front-end implements syntactic extensions that allow to
38590determine at compile time various characteristics of a type (or of a
38591pair of types).
38592
38593`__has_nothrow_assign (type)'
38594     If `type' is const qualified or is a reference type then the trait
38595     is false.  Otherwise if `__has_trivial_assign (type)' is true then
38596     the trait is true, else if `type' is a cv class or union type with
38597     copy assignment operators that are known not to throw an exception
38598     then the trait is true, else it is false.  Requires: `type' shall
38599     be a complete type, (possibly cv-qualified) `void', or an array of
38600     unknown bound.
38601
38602`__has_nothrow_copy (type)'
38603     If `__has_trivial_copy (type)' is true then the trait is true,
38604     else if `type' is a cv class or union type with copy constructors
38605     that are known not to throw an exception then the trait is true,
38606     else it is false.  Requires: `type' shall be a complete type,
38607     (possibly cv-qualified) `void', or an array of unknown bound.
38608
38609`__has_nothrow_constructor (type)'
38610     If `__has_trivial_constructor (type)' is true then the trait is
38611     true, else if `type' is a cv class or union type (or array
38612     thereof) with a default constructor that is known not to throw an
38613     exception then the trait is true, else it is false.  Requires:
38614     `type' shall be a complete type, (possibly cv-qualified) `void',
38615     or an array of unknown bound.
38616
38617`__has_trivial_assign (type)'
38618     If `type' is const qualified or is a reference type then the trait
38619     is false.  Otherwise if `__is_pod (type)' is true then the trait is
38620     true, else if `type' is a cv class or union type with a trivial
38621     copy assignment ([class.copy]) then the trait is true, else it is
38622     false.  Requires: `type' shall be a complete type, (possibly
38623     cv-qualified) `void', or an array of unknown bound.
38624
38625`__has_trivial_copy (type)'
38626     If `__is_pod (type)' is true or `type' is a reference type then
38627     the trait is true, else if `type' is a cv class or union type with
38628     a trivial copy constructor ([class.copy]) then the trait is true,
38629     else it is false.  Requires: `type' shall be a complete type,
38630     (possibly cv-qualified) `void', or an array of unknown bound.
38631
38632`__has_trivial_constructor (type)'
38633     If `__is_pod (type)' is true then the trait is true, else if
38634     `type' is a cv class or union type (or array thereof) with a
38635     trivial default constructor ([class.ctor]) then the trait is true,
38636     else it is false.  Requires: `type' shall be a complete type,
38637     (possibly cv-qualified) `void', or an array of unknown bound.
38638
38639`__has_trivial_destructor (type)'
38640     If `__is_pod (type)' is true or `type' is a reference type then
38641     the trait is true, else if `type' is a cv class or union type (or
38642     array thereof) with a trivial destructor ([class.dtor]) then the
38643     trait is true, else it is false.  Requires: `type' shall be a
38644     complete type, (possibly cv-qualified) `void', or an array of
38645     unknown bound.
38646
38647`__has_virtual_destructor (type)'
38648     If `type' is a class type with a virtual destructor ([class.dtor])
38649     then the trait is true, else it is false.  Requires: `type' shall
38650     be a complete type, (possibly cv-qualified) `void', or an array of
38651     unknown bound.
38652
38653`__is_abstract (type)'
38654     If `type' is an abstract class ([class.abstract]) then the trait
38655     is true, else it is false.  Requires: `type' shall be a complete
38656     type, (possibly cv-qualified) `void', or an array of unknown bound.
38657
38658`__is_base_of (base_type, derived_type)'
38659     If `base_type' is a base class of `derived_type' ([class.derived])
38660     then the trait is true, otherwise it is false.  Top-level cv
38661     qualifications of `base_type' and `derived_type' are ignored.  For
38662     the purposes of this trait, a class type is considered is own
38663     base.  Requires: if `__is_class (base_type)' and `__is_class
38664     (derived_type)' are true and `base_type' and `derived_type' are
38665     not the same type (disregarding cv-qualifiers), `derived_type'
38666     shall be a complete type.  Diagnostic is produced if this
38667     requirement is not met.
38668
38669`__is_class (type)'
38670     If `type' is a cv class type, and not a union type
38671     ([basic.compound]) the trait is true, else it is false.
38672
38673`__is_empty (type)'
38674     If `__is_class (type)' is false then the trait is false.
38675     Otherwise `type' is considered empty if and only if: `type' has no
38676     non-static data members, or all non-static data members, if any,
38677     are bit-fields of length 0, and `type' has no virtual members, and
38678     `type' has no virtual base classes, and `type' has no base classes
38679     `base_type' for which `__is_empty (base_type)' is false.
38680     Requires: `type' shall be a complete type, (possibly cv-qualified)
38681     `void', or an array of unknown bound.
38682
38683`__is_enum (type)'
38684     If `type' is a cv enumeration type ([basic.compound]) the trait is
38685     true, else it is false.
38686
38687`__is_literal_type (type)'
38688     If `type' is a literal type ([basic.types]) the trait is true,
38689     else it is false.  Requires: `type' shall be a complete type,
38690     (possibly cv-qualified) `void', or an array of unknown bound.
38691
38692`__is_pod (type)'
38693     If `type' is a cv POD type ([basic.types]) then the trait is true,
38694     else it is false.  Requires: `type' shall be a complete type,
38695     (possibly cv-qualified) `void', or an array of unknown bound.
38696
38697`__is_polymorphic (type)'
38698     If `type' is a polymorphic class ([class.virtual]) then the trait
38699     is true, else it is false.  Requires: `type' shall be a complete
38700     type, (possibly cv-qualified) `void', or an array of unknown bound.
38701
38702`__is_standard_layout (type)'
38703     If `type' is a standard-layout type ([basic.types]) the trait is
38704     true, else it is false.  Requires: `type' shall be a complete
38705     type, (possibly cv-qualified) `void', or an array of unknown bound.
38706
38707`__is_trivial (type)'
38708     If `type' is a trivial type ([basic.types]) the trait is true,
38709     else it is false.  Requires: `type' shall be a complete type,
38710     (possibly cv-qualified) `void', or an array of unknown bound.
38711
38712`__is_union (type)'
38713     If `type' is a cv union type ([basic.compound]) the trait is true,
38714     else it is false.
38715
38716
38717
38718File: gcc.info,  Node: Java Exceptions,  Next: Deprecated Features,  Prev: Type Traits,  Up: C++ Extensions
38719
387207.10 Java Exceptions
38721====================
38722
38723The Java language uses a slightly different exception handling model
38724from C++.  Normally, GNU C++ will automatically detect when you are
38725writing C++ code that uses Java exceptions, and handle them
38726appropriately.  However, if C++ code only needs to execute destructors
38727when Java exceptions are thrown through it, GCC will guess incorrectly.
38728Sample problematic code is:
38729
38730       struct S { ~S(); };
38731       extern void bar();    // is written in Java, and may throw exceptions
38732       void foo()
38733       {
38734         S s;
38735         bar();
38736       }
38737
38738The usual effect of an incorrect guess is a link failure, complaining of
38739a missing routine called `__gxx_personality_v0'.
38740
38741 You can inform the compiler that Java exceptions are to be used in a
38742translation unit, irrespective of what it might think, by writing
38743`#pragma GCC java_exceptions' at the head of the file.  This `#pragma'
38744must appear before any functions that throw or catch exceptions, or run
38745destructors when exceptions are thrown through them.
38746
38747 You cannot mix Java and C++ exceptions in the same translation unit.
38748It is believed to be safe to throw a C++ exception from one file through
38749another file compiled for the Java exception model, or vice versa, but
38750there may be bugs in this area.
38751
38752
38753File: gcc.info,  Node: Deprecated Features,  Next: Backwards Compatibility,  Prev: Java Exceptions,  Up: C++ Extensions
38754
387557.11 Deprecated Features
38756========================
38757
38758In the past, the GNU C++ compiler was extended to experiment with new
38759features, at a time when the C++ language was still evolving.  Now that
38760the C++ standard is complete, some of those features are superseded by
38761superior alternatives.  Using the old features might cause a warning in
38762some cases that the feature will be dropped in the future.  In other
38763cases, the feature might be gone already.
38764
38765 While the list below is not exhaustive, it documents some of the
38766options that are now deprecated:
38767
38768`-fexternal-templates'
38769`-falt-external-templates'
38770     These are two of the many ways for G++ to implement template
38771     instantiation.  *Note Template Instantiation::.  The C++ standard
38772     clearly defines how template definitions have to be organized
38773     across implementation units.  G++ has an implicit instantiation
38774     mechanism that should work just fine for standard-conforming code.
38775
38776`-fstrict-prototype'
38777`-fno-strict-prototype'
38778     Previously it was possible to use an empty prototype parameter
38779     list to indicate an unspecified number of parameters (like C),
38780     rather than no parameters, as C++ demands.  This feature has been
38781     removed, except where it is required for backwards compatibility.
38782     *Note Backwards Compatibility::.
38783
38784 G++ allows a virtual function returning `void *' to be overridden by
38785one returning a different pointer type.  This extension to the
38786covariant return type rules is now deprecated and will be removed from a
38787future version.
38788
38789 The G++ minimum and maximum operators (`<?' and `>?') and their
38790compound forms (`<?=') and `>?=') have been deprecated and are now
38791removed from G++.  Code using these operators should be modified to use
38792`std::min' and `std::max' instead.
38793
38794 The named return value extension has been deprecated, and is now
38795removed from G++.
38796
38797 The use of initializer lists with new expressions has been deprecated,
38798and is now removed from G++.
38799
38800 Floating and complex non-type template parameters have been deprecated,
38801and are now removed from G++.
38802
38803 The implicit typename extension has been deprecated and is now removed
38804from G++.
38805
38806 The use of default arguments in function pointers, function typedefs
38807and other places where they are not permitted by the standard is
38808deprecated and will be removed from a future version of G++.
38809
38810 G++ allows floating-point literals to appear in integral constant
38811expressions, e.g. ` enum E { e = int(2.2 * 3.7) } ' This extension is
38812deprecated and will be removed from a future version.
38813
38814 G++ allows static data members of const floating-point type to be
38815declared with an initializer in a class definition. The standard only
38816allows initializers for static members of const integral types and const
38817enumeration types so this extension has been deprecated and will be
38818removed from a future version.
38819
38820
38821File: gcc.info,  Node: Backwards Compatibility,  Prev: Deprecated Features,  Up: C++ Extensions
38822
388237.12 Backwards Compatibility
38824============================
38825
38826Now that there is a definitive ISO standard C++, G++ has a specification
38827to adhere to.  The C++ language evolved over time, and features that
38828used to be acceptable in previous drafts of the standard, such as the
38829ARM [Annotated C++ Reference Manual], are no longer accepted.  In order
38830to allow compilation of C++ written to such drafts, G++ contains some
38831backwards compatibilities.  _All such backwards compatibility features
38832are liable to disappear in future versions of G++._ They should be
38833considered deprecated.   *Note Deprecated Features::.
38834
38835`For scope'
38836     If a variable is declared at for scope, it used to remain in scope
38837     until the end of the scope which contained the for statement
38838     (rather than just within the for scope).  G++ retains this, but
38839     issues a warning, if such a variable is accessed outside the for
38840     scope.
38841
38842`Implicit C language'
38843     Old C system header files did not contain an `extern "C" {...}'
38844     scope to set the language.  On such systems, all header files are
38845     implicitly scoped inside a C language scope.  Also, an empty
38846     prototype `()' will be treated as an unspecified number of
38847     arguments, rather than no arguments, as C++ demands.
38848
38849
38850File: gcc.info,  Node: Objective-C,  Next: Compatibility,  Prev: C++ Extensions,  Up: Top
38851
388528 GNU Objective-C features
38853**************************
38854
38855This document is meant to describe some of the GNU Objective-C
38856features.  It is not intended to teach you Objective-C.  There are
38857several resources on the Internet that present the language.
38858
38859* Menu:
38860
38861* GNU Objective-C runtime API::
38862* Executing code before main::
38863* Type encoding::
38864* Garbage Collection::
38865* Constant string objects::
38866* compatibility_alias::
38867* Exceptions::
38868* Synchronization::
38869* Fast enumeration::
38870* Messaging with the GNU Objective-C runtime::
38871
38872
38873File: gcc.info,  Node: GNU Objective-C runtime API,  Next: Executing code before main,  Up: Objective-C
38874
388758.1 GNU Objective-C runtime API
38876===============================
38877
38878This section is specific for the GNU Objective-C runtime.  If you are
38879using a different runtime, you can skip it.
38880
38881 The GNU Objective-C runtime provides an API that allows you to
38882interact with the Objective-C runtime system, querying the live runtime
38883structures and even manipulating them.  This allows you for example to
38884inspect and navigate classes, methods and protocols; to define new
38885classes or new methods, and even to modify existing classes or
38886protocols.
38887
38888 If you are using a "Foundation" library such as GNUstep-Base, this
38889library will provide you with a rich set of functionality to do most of
38890the inspection tasks, and you probably will only need direct access to
38891the GNU Objective-C runtime API to define new classes or methods.
38892
38893* Menu:
38894
38895* Modern GNU Objective-C runtime API::
38896* Traditional GNU Objective-C runtime API::
38897
38898
38899File: gcc.info,  Node: Modern GNU Objective-C runtime API,  Next: Traditional GNU Objective-C runtime API,  Up: GNU Objective-C runtime API
38900
389018.1.1 Modern GNU Objective-C runtime API
38902----------------------------------------
38903
38904The GNU Objective-C runtime provides an API which is similar to the one
38905provided by the "Objective-C 2.0" Apple/NeXT Objective-C runtime.  The
38906API is documented in the public header files of the GNU Objective-C
38907runtime:
38908
38909   * `objc/objc.h': this is the basic Objective-C header file, defining
38910     the basic Objective-C types such as `id', `Class' and `BOOL'.  You
38911     have to include this header to do almost anything with Objective-C.
38912
38913   * `objc/runtime.h': this header declares most of the public runtime
38914     API functions allowing you to inspect and manipulate the
38915     Objective-C runtime data structures.  These functions are fairly
38916     standardized across Objective-C runtimes and are almost identical
38917     to the Apple/NeXT Objective-C runtime ones.  It does not declare
38918     functions in some specialized areas (constructing and forwarding
38919     message invocations, threading) which are in the other headers
38920     below.  You have to include `objc/objc.h' and `objc/runtime.h' to
38921     use any of the functions, such as `class_getName()', declared in
38922     `objc/runtime.h'.
38923
38924   * `objc/message.h': this header declares public functions used to
38925     construct, deconstruct and forward message invocations.  Because
38926     messaging is done in quite a different way on different runtimes,
38927     functions in this header are specific to the GNU Objective-C
38928     runtime implementation.
38929
38930   * `objc/objc-exception.h': this header declares some public
38931     functions related to Objective-C exceptions.  For example
38932     functions in this header allow you to throw an Objective-C
38933     exception from plain C/C++ code.
38934
38935   * `objc/objc-sync.h': this header declares some public functions
38936     related to the Objective-C `@synchronized()' syntax, allowing you
38937     to emulate an Objective-C `@synchronized()' block in plain C/C++
38938     code.
38939
38940   * `objc/thr.h': this header declares a public runtime API threading
38941     layer that is only provided by the GNU Objective-C runtime.  It
38942     declares functions such as `objc_mutex_lock()', which provide a
38943     platform-independent set of threading functions.
38944
38945
38946 The header files contain detailed documentation for each function in
38947the GNU Objective-C runtime API.
38948
38949
38950File: gcc.info,  Node: Traditional GNU Objective-C runtime API,  Prev: Modern GNU Objective-C runtime API,  Up: GNU Objective-C runtime API
38951
389528.1.2 Traditional GNU Objective-C runtime API
38953---------------------------------------------
38954
38955The GNU Objective-C runtime used to provide a different API, which we
38956call the "traditional" GNU Objective-C runtime API.  Functions
38957belonging to this API are easy to recognize because they use a
38958different naming convention, such as `class_get_super_class()'
38959(traditional API) instead of `class_getSuperclass()' (modern API).
38960Software using this API includes the file `objc/objc-api.h' where it is
38961declared.
38962
38963 The traditional API is deprecated but it is still supported in this
38964release of the runtime; you can access it as usual by including
38965`objc/objc-api.h'.
38966
38967 If you are using the traditional API you are urged to upgrade your
38968software to use the modern API because the traditional API requires
38969access to private runtime internals to do anything serious with it; for
38970this reason, there is no guarantee that future releases of the GNU
38971Objective-C runtime library will be able to provide a fully compatible
38972`objc/objc-api.h' as the private runtime internals change.  It is
38973expected that the next release will hide a number of runtime internals
38974making the traditional API nominally supported but fairly useless
38975beyond very simple use cases.
38976
38977 Finally, you can not include both `objc/objc-api.h' and
38978`objc/runtime.h' at the same time.  The traditional and modern APIs
38979unfortunately have some conflicting declarations (such as the one for
38980`Method') and can not be used at the same time.
38981
38982
38983File: gcc.info,  Node: Executing code before main,  Next: Type encoding,  Prev: GNU Objective-C runtime API,  Up: Objective-C
38984
389858.2 `+load': Executing code before main
38986=======================================
38987
38988This section is specific for the GNU Objective-C runtime.  If you are
38989using a different runtime, you can skip it.
38990
38991 The GNU Objective-C runtime provides a way that allows you to execute
38992code before the execution of the program enters the `main' function.
38993The code is executed on a per-class and a per-category basis, through a
38994special class method `+load'.
38995
38996 This facility is very useful if you want to initialize global variables
38997which can be accessed by the program directly, without sending a message
38998to the class first.  The usual way to initialize global variables, in
38999the `+initialize' method, might not be useful because `+initialize' is
39000only called when the first message is sent to a class object, which in
39001some cases could be too late.
39002
39003 Suppose for example you have a `FileStream' class that declares
39004`Stdin', `Stdout' and `Stderr' as global variables, like below:
39005
39006
39007     FileStream *Stdin = nil;
39008     FileStream *Stdout = nil;
39009     FileStream *Stderr = nil;
39010
39011     @implementation FileStream
39012
39013     + (void)initialize
39014     {
39015         Stdin = [[FileStream new] initWithFd:0];
39016         Stdout = [[FileStream new] initWithFd:1];
39017         Stderr = [[FileStream new] initWithFd:2];
39018     }
39019
39020     /* Other methods here */
39021     @end
39022
39023 In this example, the initialization of `Stdin', `Stdout' and `Stderr'
39024in `+initialize' occurs too late.  The programmer can send a message to
39025one of these objects before the variables are actually initialized,
39026thus sending messages to the `nil' object.  The `+initialize' method
39027which actually initializes the global variables is not invoked until
39028the first message is sent to the class object.  The solution would
39029require these variables to be initialized just before entering `main'.
39030
39031 The correct solution of the above problem is to use the `+load' method
39032instead of `+initialize':
39033
39034
39035     @implementation FileStream
39036
39037     + (void)load
39038     {
39039         Stdin = [[FileStream new] initWithFd:0];
39040         Stdout = [[FileStream new] initWithFd:1];
39041         Stderr = [[FileStream new] initWithFd:2];
39042     }
39043
39044     /* Other methods here */
39045     @end
39046
39047 The `+load' is a method that is not overridden by categories.  If a
39048class and a category of it both implement `+load', both methods are
39049invoked.  This allows some additional initializations to be performed in
39050a category.
39051
39052 This mechanism is not intended to be a replacement for `+initialize'.
39053You should be aware of its limitations when you decide to use it
39054instead of `+initialize'.
39055
39056* Menu:
39057
39058* What you can and what you cannot do in +load::
39059
39060
39061File: gcc.info,  Node: What you can and what you cannot do in +load,  Up: Executing code before main
39062
390638.2.1 What you can and what you cannot do in `+load'
39064----------------------------------------------------
39065
39066`+load' is to be used only as a last resort.  Because it is executed
39067very early, most of the Objective-C runtime machinery will not be ready
39068when `+load' is executed; hence `+load' works best for executing C code
39069that is independent on the Objective-C runtime.
39070
39071 The `+load' implementation in the GNU runtime guarantees you the
39072following things:
39073
39074   * you can write whatever C code you like;
39075
39076   * you can allocate and send messages to objects whose class is
39077     implemented in the same file;
39078
39079   * the `+load' implementation of all super classes of a class are
39080     executed before the `+load' of that class is executed;
39081
39082   * the `+load' implementation of a class is executed before the
39083     `+load' implementation of any category.
39084
39085
39086 In particular, the following things, even if they can work in a
39087particular case, are not guaranteed:
39088
39089   * allocation of or sending messages to arbitrary objects;
39090
39091   * allocation of or sending messages to objects whose classes have a
39092     category implemented in the same file;
39093
39094   * sending messages to Objective-C constant strings (`@"this is a
39095     constant string"');
39096
39097
39098 You should make no assumptions about receiving `+load' in sibling
39099classes when you write `+load' of a class.  The order in which sibling
39100classes receive `+load' is not guaranteed.
39101
39102 The order in which `+load' and `+initialize' are called could be
39103problematic if this matters.  If you don't allocate objects inside
39104`+load', it is guaranteed that `+load' is called before `+initialize'.
39105If you create an object inside `+load' the `+initialize' method of
39106object's class is invoked even if `+load' was not invoked.  Note if you
39107explicitly call `+load' on a class, `+initialize' will be called first.
39108To avoid possible problems try to implement only one of these methods.
39109
39110 The `+load' method is also invoked when a bundle is dynamically loaded
39111into your running program.  This happens automatically without any
39112intervening operation from you.  When you write bundles and you need to
39113write `+load' you can safely create and send messages to objects whose
39114classes already exist in the running program.  The same restrictions as
39115above apply to classes defined in bundle.
39116
39117
39118File: gcc.info,  Node: Type encoding,  Next: Garbage Collection,  Prev: Executing code before main,  Up: Objective-C
39119
391208.3 Type encoding
39121=================
39122
39123This is an advanced section.  Type encodings are used extensively by
39124the compiler and by the runtime, but you generally do not need to know
39125about them to use Objective-C.
39126
39127 The Objective-C compiler generates type encodings for all the types.
39128These type encodings are used at runtime to find out information about
39129selectors and methods and about objects and classes.
39130
39131 The types are encoded in the following way:
39132
39133`_Bool'            `B'
39134`char'             `c'
39135`unsigned char'    `C'
39136`short'            `s'
39137`unsigned short'   `S'
39138`int'              `i'
39139`unsigned int'     `I'
39140`long'             `l'
39141`unsigned long'    `L'
39142`long long'        `q'
39143`unsigned long     `Q'
39144long'              
39145`float'            `f'
39146`double'           `d'
39147`long double'      `D'
39148`void'             `v'
39149`id'               `@'
39150`Class'            `#'
39151`SEL'              `:'
39152`char*'            `*'
39153`enum'             an `enum' is encoded exactly as the integer type that
39154                   the compiler uses for it, which depends on the
39155                   enumeration values.  Often the compiler users
39156                   `unsigned int', which is then encoded as `I'.
39157unknown type       `?'
39158Complex types      `j' followed by the inner type.  For example
39159                   `_Complex double' is encoded as "jd".
39160bit-fields         `b' followed by the starting position of the
39161                   bit-field, the type of the bit-field and the size of
39162                   the bit-field (the bit-fields encoding was changed
39163                   from the NeXT's compiler encoding, see below)
39164
39165 The encoding of bit-fields has changed to allow bit-fields to be
39166properly handled by the runtime functions that compute sizes and
39167alignments of types that contain bit-fields.  The previous encoding
39168contained only the size of the bit-field.  Using only this information
39169it is not possible to reliably compute the size occupied by the
39170bit-field.  This is very important in the presence of the Boehm's
39171garbage collector because the objects are allocated using the typed
39172memory facility available in this collector.  The typed memory
39173allocation requires information about where the pointers are located
39174inside the object.
39175
39176 The position in the bit-field is the position, counting in bits, of the
39177bit closest to the beginning of the structure.
39178
39179 The non-atomic types are encoded as follows:
39180
39181pointers       `^' followed by the pointed type.
39182arrays         `[' followed by the number of elements in the array
39183               followed by the type of the elements followed by `]'
39184structures     `{' followed by the name of the structure (or `?' if the
39185               structure is unnamed), the `=' sign, the type of the
39186               members and by `}'
39187unions         `(' followed by the name of the structure (or `?' if the
39188               union is unnamed), the `=' sign, the type of the members
39189               followed by `)'
39190vectors        `![' followed by the vector_size (the number of bytes
39191               composing the vector) followed by a comma, followed by
39192               the alignment (in bytes) of the vector, followed by the
39193               type of the elements followed by `]'
39194
39195 Here are some types and their encodings, as they are generated by the
39196compiler on an i386 machine:
39197
39198
39199Objective-C type   Compiler encoding
39200     int a[10];    `[10i]'
39201     struct {      `{?=i[3f]b128i3b131i2c}'
39202       int i;      
39203       float f[3]; 
39204       int a:3;    
39205       int b:2;    
39206       char c;     
39207     }             
39208     int a __attribute__ ((vector_size (16)));`![16,16i]' (alignment would depend on the machine)
39209
39210
39211 In addition to the types the compiler also encodes the type
39212specifiers.  The table below describes the encoding of the current
39213Objective-C type specifiers:
39214
39215
39216Specifier          Encoding
39217`const'            `r'
39218`in'               `n'
39219`inout'            `N'
39220`out'              `o'
39221`bycopy'           `O'
39222`byref'            `R'
39223`oneway'           `V'
39224
39225
39226 The type specifiers are encoded just before the type.  Unlike types
39227however, the type specifiers are only encoded when they appear in method
39228argument types.
39229
39230 Note how `const' interacts with pointers:
39231
39232
39233Objective-C type   Compiler encoding
39234     const int     `ri'
39235     const int*    `^ri'
39236     int *const    `r^i'
39237
39238
39239 `const int*' is a pointer to a `const int', and so is encoded as
39240`^ri'.  `int* const', instead, is a `const' pointer to an `int', and so
39241is encoded as `r^i'.
39242
39243 Finally, there is a complication when encoding `const char *' versus
39244`char * const'.  Because `char *' is encoded as `*' and not as `^c',
39245there is no way to express the fact that `r' applies to the pointer or
39246to the pointee.
39247
39248 Hence, it is assumed as a convention that `r*' means `const char *'
39249(since it is what is most often meant), and there is no way to encode
39250`char *const'.  `char *const' would simply be encoded as `*', and the
39251`const' is lost.
39252
39253* Menu:
39254
39255* Legacy type encoding::
39256* @encode::
39257* Method signatures::
39258
39259
39260File: gcc.info,  Node: Legacy type encoding,  Next: @encode,  Up: Type encoding
39261
392628.3.1 Legacy type encoding
39263--------------------------
39264
39265Unfortunately, historically GCC used to have a number of bugs in its
39266encoding code.  The NeXT runtime expects GCC to emit type encodings in
39267this historical format (compatible with GCC-3.3), so when using the
39268NeXT runtime, GCC will introduce on purpose a number of incorrect
39269encodings:
39270
39271   * the read-only qualifier of the pointee gets emitted before the '^'.
39272     The read-only qualifier of the pointer itself gets ignored, unless
39273     it is a typedef.  Also, the 'r' is only emitted for the outermost
39274     type.
39275
39276   * 32-bit longs are encoded as 'l' or 'L', but not always.  For
39277     typedefs, the compiler uses 'i' or 'I' instead if encoding a
39278     struct field or a pointer.
39279
39280   * `enum's are always encoded as 'i' (int) even if they are actually
39281     unsigned or long.
39282
39283
39284 In addition to that, the NeXT runtime uses a different encoding for
39285bitfields.  It encodes them as `b' followed by the size, without a bit
39286offset or the underlying field type.
39287
39288
39289File: gcc.info,  Node: @encode,  Next: Method signatures,  Prev: Legacy type encoding,  Up: Type encoding
39290
392918.3.2 @encode
39292-------------
39293
39294GNU Objective-C supports the `@encode' syntax that allows you to create
39295a type encoding from a C/Objective-C type.  For example, `@encode(int)'
39296is compiled by the compiler into `"i"'.
39297
39298 `@encode' does not support type qualifiers other than `const'.  For
39299example, `@encode(const char*)' is valid and is compiled into `"r*"',
39300while `@encode(bycopy char *)' is invalid and will cause a compilation
39301error.
39302
39303
39304File: gcc.info,  Node: Method signatures,  Prev: @encode,  Up: Type encoding
39305
393068.3.3 Method signatures
39307-----------------------
39308
39309This section documents the encoding of method types, which is rarely
39310needed to use Objective-C.  You should skip it at a first reading; the
39311runtime provides functions that will work on methods and can walk
39312through the list of parameters and interpret them for you.  These
39313functions are part of the public "API" and are the preferred way to
39314interact with method signatures from user code.
39315
39316 But if you need to debug a problem with method signatures and need to
39317know how they are implemented (i.e., the "ABI"), read on.
39318
39319 Methods have their "signature" encoded and made available to the
39320runtime.  The "signature" encodes all the information required to
39321dynamically build invocations of the method at runtime: return type and
39322arguments.
39323
39324 The "signature" is a null-terminated string, composed of the following:
39325
39326   * The return type, including type qualifiers.  For example, a method
39327     returning `int' would have `i' here.
39328
39329   * The total size (in bytes) required to pass all the parameters.
39330     This includes the two hidden parameters (the object `self' and the
39331     method selector `_cmd').
39332
39333   * Each argument, with the type encoding, followed by the offset (in
39334     bytes) of the argument in the list of parameters.
39335
39336
39337 For example, a method with no arguments and returning `int' would have
39338the signature `i8@0:4' if the size of a pointer is 4.  The signature is
39339interpreted as follows: the `i' is the return type (an `int'), the `8'
39340is the total size of the parameters in bytes (two pointers each of size
393414), the `@0' is the first parameter (an object at byte offset `0') and
39342`:4' is the second parameter (a `SEL' at byte offset `4').
39343
39344 You can easily find more examples by running the "strings" program on
39345an Objective-C object file compiled by GCC.  You'll see a lot of
39346strings that look very much like `i8@0:4'.  They are signatures of
39347Objective-C methods.
39348
39349
39350File: gcc.info,  Node: Garbage Collection,  Next: Constant string objects,  Prev: Type encoding,  Up: Objective-C
39351
393528.4 Garbage Collection
39353======================
39354
39355This section is specific for the GNU Objective-C runtime.  If you are
39356using a different runtime, you can skip it.
39357
39358 Support for garbage collection with the GNU runtime has been added by
39359using a powerful conservative garbage collector, known as the
39360Boehm-Demers-Weiser conservative garbage collector.
39361
39362 To enable the support for it you have to configure the compiler using
39363an additional argument, `--enable-objc-gc'.  This will build the
39364boehm-gc library, and build an additional runtime library which has
39365several enhancements to support the garbage collector.  The new library
39366has a new name, `libobjc_gc.a' to not conflict with the
39367non-garbage-collected library.
39368
39369 When the garbage collector is used, the objects are allocated using the
39370so-called typed memory allocation mechanism available in the
39371Boehm-Demers-Weiser collector.  This mode requires precise information
39372on where pointers are located inside objects.  This information is
39373computed once per class, immediately after the class has been
39374initialized.
39375
39376 There is a new runtime function `class_ivar_set_gcinvisible()' which
39377can be used to declare a so-called "weak pointer" reference.  Such a
39378pointer is basically hidden for the garbage collector; this can be
39379useful in certain situations, especially when you want to keep track of
39380the allocated objects, yet allow them to be collected.  This kind of
39381pointers can only be members of objects, you cannot declare a global
39382pointer as a weak reference.  Every type which is a pointer type can be
39383declared a weak pointer, including `id', `Class' and `SEL'.
39384
39385 Here is an example of how to use this feature.  Suppose you want to
39386implement a class whose instances hold a weak pointer reference; the
39387following class does this:
39388
39389
39390     @interface WeakPointer : Object
39391     {
39392         const void* weakPointer;
39393     }
39394
39395     - initWithPointer:(const void*)p;
39396     - (const void*)weakPointer;
39397     @end
39398
39399
39400     @implementation WeakPointer
39401
39402     + (void)initialize
39403     {
39404       class_ivar_set_gcinvisible (self, "weakPointer", YES);
39405     }
39406
39407     - initWithPointer:(const void*)p
39408     {
39409       weakPointer = p;
39410       return self;
39411     }
39412
39413     - (const void*)weakPointer
39414     {
39415       return weakPointer;
39416     }
39417
39418     @end
39419
39420 Weak pointers are supported through a new type character specifier
39421represented by the `!' character.  The `class_ivar_set_gcinvisible()'
39422function adds or removes this specifier to the string type description
39423of the instance variable named as argument.
39424
39425
39426File: gcc.info,  Node: Constant string objects,  Next: compatibility_alias,  Prev: Garbage Collection,  Up: Objective-C
39427
394288.5 Constant string objects
39429===========================
39430
39431GNU Objective-C provides constant string objects that are generated
39432directly by the compiler.  You declare a constant string object by
39433prefixing a C constant string with the character `@':
39434
39435       id myString = @"this is a constant string object";
39436
39437 The constant string objects are by default instances of the
39438`NXConstantString' class which is provided by the GNU Objective-C
39439runtime.  To get the definition of this class you must include the
39440`objc/NXConstStr.h' header file.
39441
39442 User defined libraries may want to implement their own constant string
39443class.  To be able to support them, the GNU Objective-C compiler
39444provides a new command line options
39445`-fconstant-string-class=CLASS-NAME'.  The provided class should adhere
39446to a strict structure, the same as `NXConstantString''s structure:
39447
39448
39449     @interface MyConstantStringClass
39450     {
39451       Class isa;
39452       char *c_string;
39453       unsigned int len;
39454     }
39455     @end
39456
39457 `NXConstantString' inherits from `Object'; user class libraries may
39458choose to inherit the customized constant string class from a different
39459class than `Object'.  There is no requirement in the methods the
39460constant string class has to implement, but the final ivar layout of
39461the class must be the compatible with the given structure.
39462
39463 When the compiler creates the statically allocated constant string
39464object, the `c_string' field will be filled by the compiler with the
39465string; the `length' field will be filled by the compiler with the
39466string length; the `isa' pointer will be filled with `NULL' by the
39467compiler, and it will later be fixed up automatically at runtime by the
39468GNU Objective-C runtime library to point to the class which was set by
39469the `-fconstant-string-class' option when the object file is loaded (if
39470you wonder how it works behind the scenes, the name of the class to
39471use, and the list of static objects to fixup, are stored by the
39472compiler in the object file in a place where the GNU runtime library
39473will find them at runtime).
39474
39475 As a result, when a file is compiled with the
39476`-fconstant-string-class' option, all the constant string objects will
39477be instances of the class specified as argument to this option.  It is
39478possible to have multiple compilation units referring to different
39479constant string classes, neither the compiler nor the linker impose any
39480restrictions in doing this.
39481
39482
39483File: gcc.info,  Node: compatibility_alias,  Next: Exceptions,  Prev: Constant string objects,  Up: Objective-C
39484
394858.6 compatibility_alias
39486=======================
39487
39488The keyword `@compatibility_alias' allows you to define a class name as
39489equivalent to another class name.  For example:
39490
39491     @compatibility_alias WOApplication GSWApplication;
39492
39493 tells the compiler that each time it encounters `WOApplication' as a
39494class name, it should replace it with `GSWApplication' (that is,
39495`WOApplication' is just an alias for `GSWApplication').
39496
39497 There are some constraints on how this can be used--
39498
39499   * `WOApplication' (the alias) must not be an existing class;
39500
39501   * `GSWApplication' (the real class) must be an existing class.
39502
39503
39504
39505File: gcc.info,  Node: Exceptions,  Next: Synchronization,  Prev: compatibility_alias,  Up: Objective-C
39506
395078.7 Exceptions
39508==============
39509
39510GNU Objective-C provides exception support built into the language, as
39511in the following example:
39512
39513       @try {
39514         ...
39515            @throw expr;
39516         ...
39517       }
39518       @catch (AnObjCClass *exc) {
39519         ...
39520           @throw expr;
39521         ...
39522           @throw;
39523         ...
39524       }
39525       @catch (AnotherClass *exc) {
39526         ...
39527       }
39528       @catch (id allOthers) {
39529         ...
39530       }
39531       @finally {
39532         ...
39533           @throw expr;
39534         ...
39535       }
39536
39537 The `@throw' statement may appear anywhere in an Objective-C or
39538Objective-C++ program; when used inside of a `@catch' block, the
39539`@throw' may appear without an argument (as shown above), in which case
39540the object caught by the `@catch' will be rethrown.
39541
39542 Note that only (pointers to) Objective-C objects may be thrown and
39543caught using this scheme.  When an object is thrown, it will be caught
39544by the nearest `@catch' clause capable of handling objects of that
39545type, analogously to how `catch' blocks work in C++ and Java.  A
39546`@catch(id ...)' clause (as shown above) may also be provided to catch
39547any and all Objective-C exceptions not caught by previous `@catch'
39548clauses (if any).
39549
39550 The `@finally' clause, if present, will be executed upon exit from the
39551immediately preceding `@try ... @catch' section.  This will happen
39552regardless of whether any exceptions are thrown, caught or rethrown
39553inside the `@try ... @catch' section, analogously to the behavior of
39554the `finally' clause in Java.
39555
39556 There are several caveats to using the new exception mechanism:
39557
39558   * The `-fobjc-exceptions' command line option must be used when
39559     compiling Objective-C files that use exceptions.
39560
39561   * With the GNU runtime, exceptions are always implemented as "native"
39562     exceptions and it is recommended that the `-fexceptions' and
39563     `-shared-libgcc' options are used when linking.
39564
39565   * With the NeXT runtime, although currently designed to be binary
39566     compatible with `NS_HANDLER'-style idioms provided by the
39567     `NSException' class, the new exceptions can only be used on Mac OS
39568     X 10.3 (Panther) and later systems, due to additional functionality
39569     needed in the NeXT Objective-C runtime.
39570
39571   * As mentioned above, the new exceptions do not support handling
39572     types other than Objective-C objects.   Furthermore, when used from
39573     Objective-C++, the Objective-C exception model does not
39574     interoperate with C++ exceptions at this time.  This means you
39575     cannot `@throw' an exception from Objective-C and `catch' it in
39576     C++, or vice versa (i.e., `throw ... @catch').
39577
39578
39579File: gcc.info,  Node: Synchronization,  Next: Fast enumeration,  Prev: Exceptions,  Up: Objective-C
39580
395818.8 Synchronization
39582===================
39583
39584GNU Objective-C provides support for synchronized blocks:
39585
39586       @synchronized (ObjCClass *guard) {
39587         ...
39588       }
39589
39590 Upon entering the `@synchronized' block, a thread of execution shall
39591first check whether a lock has been placed on the corresponding `guard'
39592object by another thread.  If it has, the current thread shall wait
39593until the other thread relinquishes its lock.  Once `guard' becomes
39594available, the current thread will place its own lock on it, execute
39595the code contained in the `@synchronized' block, and finally relinquish
39596the lock (thereby making `guard' available to other threads).
39597
39598 Unlike Java, Objective-C does not allow for entire methods to be
39599marked `@synchronized'.  Note that throwing exceptions out of
39600`@synchronized' blocks is allowed, and will cause the guarding object
39601to be unlocked properly.
39602
39603 Because of the interactions between synchronization and exception
39604handling, you can only use `@synchronized' when compiling with
39605exceptions enabled, that is with the command line option
39606`-fobjc-exceptions'.
39607
39608
39609File: gcc.info,  Node: Fast enumeration,  Next: Messaging with the GNU Objective-C runtime,  Prev: Synchronization,  Up: Objective-C
39610
396118.9 Fast enumeration
39612====================
39613
39614* Menu:
39615
39616* Using fast enumeration::
39617* c99-like fast enumeration syntax::
39618* Fast enumeration details::
39619* Fast enumeration protocol::
39620
39621
39622File: gcc.info,  Node: Using fast enumeration,  Next: c99-like fast enumeration syntax,  Up: Fast enumeration
39623
396248.9.1 Using fast enumeration
39625----------------------------
39626
39627GNU Objective-C provides support for the fast enumeration syntax:
39628
39629       id array = ...;
39630       id object;
39631
39632       for (object in array)
39633       {
39634         /* Do something with 'object' */
39635       }
39636
39637 `array' needs to be an Objective-C object (usually a collection
39638object, for example an array, a dictionary or a set) which implements
39639the "Fast Enumeration Protocol" (see below).  If you are using a
39640Foundation library such as GNUstep Base or Apple Cocoa Foundation, all
39641collection objects in the library implement this protocol and can be
39642used in this way.
39643
39644 The code above would iterate over all objects in `array'.  For each of
39645them, it assigns it to `object', then executes the `Do something with
39646'object'' statements.
39647
39648 Here is a fully worked-out example using a Foundation library (which
39649provides the implementation of `NSArray', `NSString' and `NSLog'):
39650
39651       NSArray *array = [NSArray arrayWithObjects: @"1", @"2", @"3", nil];
39652       NSString *object;
39653
39654       for (object in array)
39655         NSLog (@"Iterating over %@", object);
39656
39657
39658File: gcc.info,  Node: c99-like fast enumeration syntax,  Next: Fast enumeration details,  Prev: Using fast enumeration,  Up: Fast enumeration
39659
396608.9.2 c99-like fast enumeration syntax
39661--------------------------------------
39662
39663A c99-like declaration syntax is also allowed:
39664
39665       id array = ...;
39666
39667       for (id object in array)
39668       {
39669         /* Do something with 'object'  */
39670       }
39671
39672 this is completely equivalent to:
39673
39674       id array = ...;
39675
39676       {
39677         id object;
39678         for (object in array)
39679         {
39680           /* Do something with 'object'  */
39681         }
39682       }
39683
39684 but can save some typing.
39685
39686 Note that the option `-std=c99' is not required to allow this syntax
39687in Objective-C.
39688
39689
39690File: gcc.info,  Node: Fast enumeration details,  Next: Fast enumeration protocol,  Prev: c99-like fast enumeration syntax,  Up: Fast enumeration
39691
396928.9.3 Fast enumeration details
39693------------------------------
39694
39695Here is a more technical description with the gory details.  Consider
39696the code
39697
39698       for (OBJECT EXPRESSION in COLLECTION EXPRESSION)
39699       {
39700         STATEMENTS
39701       }
39702
39703 here is what happens when you run it:
39704
39705   * `COLLECTION EXPRESSION' is evaluated exactly once and the result
39706     is used as the collection object to iterate over.  This means it
39707     is safe to write code such as `for (object in [NSDictionary
39708     keyEnumerator]) ...'.
39709
39710   * the iteration is implemented by the compiler by repeatedly getting
39711     batches of objects from the collection object using the fast
39712     enumeration protocol (see below), then iterating over all objects
39713     in the batch.  This is faster than a normal enumeration where
39714     objects are retrieved one by one (hence the name "fast
39715     enumeration").
39716
39717   * if there are no objects in the collection, then `OBJECT
39718     EXPRESSION' is set to `nil' and the loop immediately terminates.
39719
39720   * if there are objects in the collection, then for each object in the
39721     collection (in the order they are returned) `OBJECT EXPRESSION' is
39722     set to the object, then `STATEMENTS' are executed.
39723
39724   * `STATEMENTS' can contain `break' and `continue' commands, which
39725     will abort the iteration or skip to the next loop iteration as
39726     expected.
39727
39728   * when the iteration ends because there are no more objects to
39729     iterate over, `OBJECT EXPRESSION' is set to `nil'.  This allows
39730     you to determine whether the iteration finished because a `break'
39731     command was used (in which case `OBJECT EXPRESSION' will remain
39732     set to the last object that was iterated over) or because it
39733     iterated over all the objects (in which case `OBJECT EXPRESSION'
39734     will be set to `nil').
39735
39736   * `STATEMENTS' must not make any changes to the collection object;
39737     if they do, it is a hard error and the fast enumeration terminates
39738     by invoking `objc_enumerationMutation', a runtime function that
39739     normally aborts the program but which can be customized by
39740     Foundation libraries via `objc_set_mutation_handler' to do
39741     something different, such as raising an exception.
39742
39743
39744
39745File: gcc.info,  Node: Fast enumeration protocol,  Prev: Fast enumeration details,  Up: Fast enumeration
39746
397478.9.4 Fast enumeration protocol
39748-------------------------------
39749
39750If you want your own collection object to be usable with fast
39751enumeration, you need to have it implement the method
39752
39753     - (unsigned long) countByEnumeratingWithState: (NSFastEnumerationState *)state
39754                                           objects: (id *)objects
39755                                             count: (unsigned long)len;
39756
39757 where `NSFastEnumerationState' must be defined in your code as follows:
39758
39759     typedef struct
39760     {
39761       unsigned long state;
39762       id            *itemsPtr;
39763       unsigned long *mutationsPtr;
39764       unsigned long extra[5];
39765     } NSFastEnumerationState;
39766
39767 If no `NSFastEnumerationState' is defined in your code, the compiler
39768will automatically replace `NSFastEnumerationState *' with `struct
39769__objcFastEnumerationState *', where that type is silently defined by
39770the compiler in an identical way.  This can be confusing and we
39771recommend that you define `NSFastEnumerationState' (as shown above)
39772instead.
39773
39774 The method is called repeatedly during a fast enumeration to retrieve
39775batches of objects.  Each invocation of the method should retrieve the
39776next batch of objects.
39777
39778 The return value of the method is the number of objects in the current
39779batch; this should not exceed `len', which is the maximum size of a
39780batch as requested by the caller.  The batch itself is returned in the
39781`itemsPtr' field of the `NSFastEnumerationState' struct.
39782
39783 To help with returning the objects, the `objects' array is a C array
39784preallocated by the caller (on the stack) of size `len'.  In many cases
39785you can put the objects you want to return in that `objects' array,
39786then do `itemsPtr = objects'.  But you don't have to; if your
39787collection already has the objects to return in some form of C array,
39788it could return them from there instead.
39789
39790 The `state' and `extra' fields of the `NSFastEnumerationState'
39791structure allows your collection object to keep track of the state of
39792the enumeration.  In a simple array implementation, `state' may keep
39793track of the index of the last object that was returned, and `extra'
39794may be unused.
39795
39796 The `mutationsPtr' field of the `NSFastEnumerationState' is used to
39797keep track of mutations.  It should point to a number; before working
39798on each object, the fast enumeration loop will check that this number
39799has not changed.  If it has, a mutation has happened and the fast
39800enumeration will abort.  So, `mutationsPtr' could be set to point to
39801some sort of version number of your collection, which is increased by
39802one every time there is a change (for example when an object is added
39803or removed).  Or, if you are content with less strict mutation checks,
39804it could point to the number of objects in your collection or some
39805other value that can be checked to perform an approximate check that
39806the collection has not been mutated.
39807
39808 Finally, note how we declared the `len' argument and the return value
39809to be of type `unsigned long'.  They could also be declared to be of
39810type `unsigned int' and everything would still work.
39811
39812
39813File: gcc.info,  Node: Messaging with the GNU Objective-C runtime,  Prev: Fast enumeration,  Up: Objective-C
39814
398158.10 Messaging with the GNU Objective-C runtime
39816===============================================
39817
39818This section is specific for the GNU Objective-C runtime.  If you are
39819using a different runtime, you can skip it.
39820
39821 The implementation of messaging in the GNU Objective-C runtime is
39822designed to be portable, and so is based on standard C.
39823
39824 Sending a message in the GNU Objective-C runtime is composed of two
39825separate steps.  First, there is a call to the lookup function,
39826`objc_msg_lookup ()' (or, in the case of messages to super,
39827`objc_msg_lookup_super ()').  This runtime function takes as argument
39828the receiver and the selector of the method to be called; it returns
39829the `IMP', that is a pointer to the function implementing the method.
39830The second step of method invocation consists of casting this pointer
39831function to the appropriate function pointer type, and calling the
39832function pointed to it with the right arguments.
39833
39834 For example, when the compiler encounters a method invocation such as
39835`[object init]', it compiles it into a call to `objc_msg_lookup
39836(object, @selector(init))' followed by a cast of the returned value to
39837the appropriate function pointer type, and then it calls it.
39838
39839* Menu:
39840
39841* Dynamically registering methods::
39842* Forwarding hook::
39843
39844
39845File: gcc.info,  Node: Dynamically registering methods,  Next: Forwarding hook,  Up: Messaging with the GNU Objective-C runtime
39846
398478.10.1 Dynamically registering methods
39848--------------------------------------
39849
39850If `objc_msg_lookup()' does not find a suitable method implementation,
39851because the receiver does not implement the required method, it tries
39852to see if the class can dynamically register the method.
39853
39854 To do so, the runtime checks if the class of the receiver implements
39855the method
39856
39857     + (BOOL) resolveInstanceMethod: (SEL)selector;
39858
39859 in the case of an instance method, or
39860
39861     + (BOOL) resolveClassMethod: (SEL)selector;
39862
39863 in the case of a class method.  If the class implements it, the
39864runtime invokes it, passing as argument the selector of the original
39865method, and if it returns `YES', the runtime tries the lookup again,
39866which could now succeed if a matching method was added dynamically by
39867`+resolveInstanceMethod:' or `+resolveClassMethod:'.
39868
39869 This allows classes to dynamically register methods (by adding them to
39870the class using `class_addMethod') when they are first called.  To do
39871so, a class should implement `+resolveInstanceMethod:' (or, depending
39872on the case, `+resolveClassMethod:') and have it recognize the
39873selectors of methods that can be registered dynamically at runtime,
39874register them, and return `YES'.  It should return `NO' for methods
39875that it does not dynamically registered at runtime.
39876
39877 If `+resolveInstanceMethod:' (or `+resolveClassMethod:') is not
39878implemented or returns `NO', the runtime then tries the forwarding hook.
39879
39880 Support for `+resolveInstanceMethod:' and `resolveClassMethod:' was
39881added to the GNU Objective-C runtime in GCC version 4.6.
39882
39883
39884File: gcc.info,  Node: Forwarding hook,  Prev: Dynamically registering methods,  Up: Messaging with the GNU Objective-C runtime
39885
398868.10.2 Forwarding hook
39887----------------------
39888
39889The GNU Objective-C runtime provides a hook, called
39890`__objc_msg_forward2', which is called by `objc_msg_lookup()' when it
39891can't find a method implementation in the runtime tables and after
39892calling `+resolveInstanceMethod:' and `+resolveClassMethod:' has been
39893attempted and did not succeed in dynamically registering the method.
39894
39895 To configure the hook, you set the global variable
39896`__objc_msg_foward2' to a function with the same argument and return
39897types of `objc_msg_lookup()'.  When `objc_msg_lookup()' can not find a
39898method implementation, it invokes the hook function you provided to get
39899a method implementation to return.  So, in practice
39900`__objc_msg_forward2' allows you to extend `objc_msg_lookup()' by
39901adding some custom code that is called to do a further lookup when no
39902standard method implementation can be found using the normal lookup.
39903
39904 This hook is generally reserved for "Foundation" libraries such as
39905GNUstep Base, which use it to implement their high-level method
39906forwarding API, typically based around the `forwardInvocation:' method.
39907So, unless you are implementing your own "Foundation" library, you
39908should not set this hook.
39909
39910 In a typical forwarding implementation, the `__objc_msg_forward2' hook
39911function determines the argument and return type of the method that is
39912being looked up, and then creates a function that takes these arguments
39913and has that return type, and returns it to the caller.  Creating this
39914function is non-trivial and is typically performed using a dedicated
39915library such as `libffi'.
39916
39917 The forwarding method implementation thus created is returned by
39918`objc_msg_lookup()' and is executed as if it was a normal method
39919implementation.  When the forwarding method implementation is called,
39920it is usually expected to pack all arguments into some sort of object
39921(typically, an `NSInvocation' in a "Foundation" library), and hand it
39922over to the programmer (`forwardInvocation:') who is then allowed to
39923manipulate the method invocation using a high-level API provided by the
39924"Foundation" library.  For example, the programmer may want to examine
39925the method invocation arguments and name and potentially change them
39926before forwarding the method invocation to one or more local objects
39927(`performInvocation:') or even to remote objects (by using Distributed
39928Objects or some other mechanism).  When all this completes, the return
39929value is passed back and must be returned correctly to the original
39930caller.
39931
39932 Note that the GNU Objective-C runtime currently provides no support
39933for method forwarding or method invocations other than the
39934`__objc_msg_forward2' hook.
39935
39936 If the forwarding hook does not exist or returns `NULL', the runtime
39937currently attempts forwarding using an older, deprecated API, and if
39938that fails, it aborts the program.  In future versions of the GNU
39939Objective-C runtime, the runtime will immediately abort.
39940
39941
39942File: gcc.info,  Node: Compatibility,  Next: Gcov,  Prev: Objective-C,  Up: Top
39943
399449 Binary Compatibility
39945**********************
39946
39947Binary compatibility encompasses several related concepts:
39948
39949"application binary interface (ABI)"
39950     The set of runtime conventions followed by all of the tools that
39951     deal with binary representations of a program, including
39952     compilers, assemblers, linkers, and language runtime support.
39953     Some ABIs are formal with a written specification, possibly
39954     designed by multiple interested parties.  Others are simply the
39955     way things are actually done by a particular set of tools.
39956
39957"ABI conformance"
39958     A compiler conforms to an ABI if it generates code that follows
39959     all of the specifications enumerated by that ABI.  A library
39960     conforms to an ABI if it is implemented according to that ABI.  An
39961     application conforms to an ABI if it is built using tools that
39962     conform to that ABI and does not contain source code that
39963     specifically changes behavior specified by the ABI.
39964
39965"calling conventions"
39966     Calling conventions are a subset of an ABI that specify of how
39967     arguments are passed and function results are returned.
39968
39969"interoperability"
39970     Different sets of tools are interoperable if they generate files
39971     that can be used in the same program.  The set of tools includes
39972     compilers, assemblers, linkers, libraries, header files, startup
39973     files, and debuggers.  Binaries produced by different sets of
39974     tools are not interoperable unless they implement the same ABI.
39975     This applies to different versions of the same tools as well as
39976     tools from different vendors.
39977
39978"intercallability"
39979     Whether a function in a binary built by one set of tools can call a
39980     function in a binary built by a different set of tools is a subset
39981     of interoperability.
39982
39983"implementation-defined features"
39984     Language standards include lists of implementation-defined
39985     features whose behavior can vary from one implementation to
39986     another.  Some of these features are normally covered by a
39987     platform's ABI and others are not.  The features that are not
39988     covered by an ABI generally affect how a program behaves, but not
39989     intercallability.
39990
39991"compatibility"
39992     Conformance to the same ABI and the same behavior of
39993     implementation-defined features are both relevant for
39994     compatibility.
39995
39996 The application binary interface implemented by a C or C++ compiler
39997affects code generation and runtime support for:
39998
39999   * size and alignment of data types
40000
40001   * layout of structured types
40002
40003   * calling conventions
40004
40005   * register usage conventions
40006
40007   * interfaces for runtime arithmetic support
40008
40009   * object file formats
40010
40011 In addition, the application binary interface implemented by a C++
40012compiler affects code generation and runtime support for:
40013   * name mangling
40014
40015   * exception handling
40016
40017   * invoking constructors and destructors
40018
40019   * layout, alignment, and padding of classes
40020
40021   * layout and alignment of virtual tables
40022
40023 Some GCC compilation options cause the compiler to generate code that
40024does not conform to the platform's default ABI.  Other options cause
40025different program behavior for implementation-defined features that are
40026not covered by an ABI.  These options are provided for consistency with
40027other compilers that do not follow the platform's default ABI or the
40028usual behavior of implementation-defined features for the platform.  Be
40029very careful about using such options.
40030
40031 Most platforms have a well-defined ABI that covers C code, but ABIs
40032that cover C++ functionality are not yet common.
40033
40034 Starting with GCC 3.2, GCC binary conventions for C++ are based on a
40035written, vendor-neutral C++ ABI that was designed to be specific to
4003664-bit Itanium but also includes generic specifications that apply to
40037any platform.  This C++ ABI is also implemented by other compiler
40038vendors on some platforms, notably GNU/Linux and BSD systems.  We have
40039tried hard to provide a stable ABI that will be compatible with future
40040GCC releases, but it is possible that we will encounter problems that
40041make this difficult.  Such problems could include different
40042interpretations of the C++ ABI by different vendors, bugs in the ABI, or
40043bugs in the implementation of the ABI in different compilers.  GCC's
40044`-Wabi' switch warns when G++ generates code that is probably not
40045compatible with the C++ ABI.
40046
40047 The C++ library used with a C++ compiler includes the Standard C++
40048Library, with functionality defined in the C++ Standard, plus language
40049runtime support.  The runtime support is included in a C++ ABI, but
40050there is no formal ABI for the Standard C++ Library.  Two
40051implementations of that library are interoperable if one follows the
40052de-facto ABI of the other and if they are both built with the same
40053compiler, or with compilers that conform to the same ABI for C++
40054compiler and runtime support.
40055
40056 When G++ and another C++ compiler conform to the same C++ ABI, but the
40057implementations of the Standard C++ Library that they normally use do
40058not follow the same ABI for the Standard C++ Library, object files
40059built with those compilers can be used in the same program only if they
40060use the same C++ library.  This requires specifying the location of the
40061C++ library header files when invoking the compiler whose usual library
40062is not being used.  The location of GCC's C++ header files depends on
40063how the GCC build was configured, but can be seen by using the G++ `-v'
40064option.  With default configuration options for G++ 3.3 the compile
40065line for a different C++ compiler needs to include
40066
40067         -IGCC_INSTALL_DIRECTORY/include/c++/3.3
40068
40069 Similarly, compiling code with G++ that must use a C++ library other
40070than the GNU C++ library requires specifying the location of the header
40071files for that other library.
40072
40073 The most straightforward way to link a program to use a particular C++
40074library is to use a C++ driver that specifies that C++ library by
40075default.  The `g++' driver, for example, tells the linker where to find
40076GCC's C++ library (`libstdc++') plus the other libraries and startup
40077files it needs, in the proper order.
40078
40079 If a program must use a different C++ library and it's not possible to
40080do the final link using a C++ driver that uses that library by default,
40081it is necessary to tell `g++' the location and name of that library.
40082It might also be necessary to specify different startup files and other
40083runtime support libraries, and to suppress the use of GCC's support
40084libraries with one or more of the options `-nostdlib', `-nostartfiles',
40085and `-nodefaultlibs'.
40086
40087
40088File: gcc.info,  Node: Gcov,  Next: Trouble,  Prev: Compatibility,  Up: Top
40089
4009010 `gcov'--a Test Coverage Program
40091**********************************
40092
40093`gcov' is a tool you can use in conjunction with GCC to test code
40094coverage in your programs.
40095
40096* Menu:
40097
40098* Gcov Intro::                  Introduction to gcov.
40099* Invoking Gcov::               How to use gcov.
40100* Gcov and Optimization::       Using gcov with GCC optimization.
40101* Gcov Data Files::             The files used by gcov.
40102* Cross-profiling::             Data file relocation.
40103
40104
40105File: gcc.info,  Node: Gcov Intro,  Next: Invoking Gcov,  Up: Gcov
40106
4010710.1 Introduction to `gcov'
40108===========================
40109
40110`gcov' is a test coverage program.  Use it in concert with GCC to
40111analyze your programs to help create more efficient, faster running
40112code and to discover untested parts of your program.  You can use
40113`gcov' as a profiling tool to help discover where your optimization
40114efforts will best affect your code.  You can also use `gcov' along with
40115the other profiling tool, `gprof', to assess which parts of your code
40116use the greatest amount of computing time.
40117
40118 Profiling tools help you analyze your code's performance.  Using a
40119profiler such as `gcov' or `gprof', you can find out some basic
40120performance statistics, such as:
40121
40122   * how often each line of code executes
40123
40124   * what lines of code are actually executed
40125
40126   * how much computing time each section of code uses
40127
40128 Once you know these things about how your code works when compiled, you
40129can look at each module to see which modules should be optimized.
40130`gcov' helps you determine where to work on optimization.
40131
40132 Software developers also use coverage testing in concert with
40133testsuites, to make sure software is actually good enough for a release.
40134Testsuites can verify that a program works as expected; a coverage
40135program tests to see how much of the program is exercised by the
40136testsuite.  Developers can then determine what kinds of test cases need
40137to be added to the testsuites to create both better testing and a better
40138final product.
40139
40140 You should compile your code without optimization if you plan to use
40141`gcov' because the optimization, by combining some lines of code into
40142one function, may not give you as much information as you need to look
40143for `hot spots' where the code is using a great deal of computer time.
40144Likewise, because `gcov' accumulates statistics by line (at the lowest
40145resolution), it works best with a programming style that places only
40146one statement on each line.  If you use complicated macros that expand
40147to loops or to other control structures, the statistics are less
40148helpful--they only report on the line where the macro call appears.  If
40149your complex macros behave like functions, you can replace them with
40150inline functions to solve this problem.
40151
40152 `gcov' creates a logfile called `SOURCEFILE.gcov' which indicates how
40153many times each line of a source file `SOURCEFILE.c' has executed.  You
40154can use these logfiles along with `gprof' to aid in fine-tuning the
40155performance of your programs.  `gprof' gives timing information you can
40156use along with the information you get from `gcov'.
40157
40158 `gcov' works only on code compiled with GCC.  It is not compatible
40159with any other profiling or test coverage mechanism.
40160
40161
40162File: gcc.info,  Node: Invoking Gcov,  Next: Gcov and Optimization,  Prev: Gcov Intro,  Up: Gcov
40163
4016410.2 Invoking `gcov'
40165====================
40166
40167     gcov [OPTIONS] SOURCEFILES
40168
40169 `gcov' accepts the following options:
40170
40171`-h'
40172`--help'
40173     Display help about using `gcov' (on the standard output), and exit
40174     without doing any further processing.
40175
40176`-v'
40177`--version'
40178     Display the `gcov' version number (on the standard output), and
40179     exit without doing any further processing.
40180
40181`-a'
40182`--all-blocks'
40183     Write individual execution counts for every basic block.  Normally
40184     gcov outputs execution counts only for the main blocks of a line.
40185     With this option you can determine if blocks within a single line
40186     are not being executed.
40187
40188`-b'
40189`--branch-probabilities'
40190     Write branch frequencies to the output file, and write branch
40191     summary info to the standard output.  This option allows you to
40192     see how often each branch in your program was taken.
40193     Unconditional branches will not be shown, unless the `-u' option
40194     is given.
40195
40196`-c'
40197`--branch-counts'
40198     Write branch frequencies as the number of branches taken, rather
40199     than the percentage of branches taken.
40200
40201`-n'
40202`--no-output'
40203     Do not create the `gcov' output file.
40204
40205`-l'
40206`--long-file-names'
40207     Create long file names for included source files.  For example, if
40208     the header file `x.h' contains code, and was included in the file
40209     `a.c', then running `gcov' on the file `a.c' will produce an
40210     output file called `a.c##x.h.gcov' instead of `x.h.gcov'.  This
40211     can be useful if `x.h' is included in multiple source files.  If
40212     you use the `-p' option, both the including and included file
40213     names will be complete path names.
40214
40215`-p'
40216`--preserve-paths'
40217     Preserve complete path information in the names of generated
40218     `.gcov' files.  Without this option, just the filename component is
40219     used.  With this option, all directories are used, with `/'
40220     characters translated to `#' characters, `.' directory components
40221     removed and `..' components renamed to `^'.  This is useful if
40222     sourcefiles are in several different directories.  It also affects
40223     the `-l' option.
40224
40225`-f'
40226`--function-summaries'
40227     Output summaries for each function in addition to the file level
40228     summary.
40229
40230`-o DIRECTORY|FILE'
40231`--object-directory DIRECTORY'
40232`--object-file FILE'
40233     Specify either the directory containing the gcov data files, or the
40234     object path name.  The `.gcno', and `.gcda' data files are
40235     searched for using this option.  If a directory is specified, the
40236     data files are in that directory and named after the source file
40237     name, without its extension.  If a file is specified here, the
40238     data files are named after that file, without its extension.  If
40239     this option is not supplied, it defaults to the current directory.
40240
40241`-u'
40242`--unconditional-branches'
40243     When branch probabilities are given, include those of
40244     unconditional branches.  Unconditional branches are normally not
40245     interesting.
40246
40247`-d'
40248`--display-progress'
40249     Display the progress on the standard output.
40250
40251
40252 `gcov' should be run with the current directory the same as that when
40253you invoked the compiler.  Otherwise it will not be able to locate the
40254source files.  `gcov' produces files called `MANGLEDNAME.gcov' in the
40255current directory.  These contain the coverage information of the
40256source file they correspond to.  One `.gcov' file is produced for each
40257source file containing code, which was compiled to produce the data
40258files.  The MANGLEDNAME part of the output file name is usually simply
40259the source file name, but can be something more complicated if the `-l'
40260or `-p' options are given.  Refer to those options for details.
40261
40262 The `.gcov' files contain the `:' separated fields along with program
40263source code.  The format is
40264
40265     EXECUTION_COUNT:LINE_NUMBER:SOURCE LINE TEXT
40266
40267 Additional block information may succeed each line, when requested by
40268command line option.  The EXECUTION_COUNT is `-' for lines containing
40269no code and `#####' for lines which were never executed.  Some lines of
40270information at the start have LINE_NUMBER of zero.
40271
40272 The preamble lines are of the form
40273
40274     -:0:TAG:VALUE
40275
40276 The ordering and number of these preamble lines will be augmented as
40277`gcov' development progresses -- do not rely on them remaining
40278unchanged.  Use TAG to locate a particular preamble line.
40279
40280 The additional block information is of the form
40281
40282     TAG INFORMATION
40283
40284 The INFORMATION is human readable, but designed to be simple enough
40285for machine parsing too.
40286
40287 When printing percentages, 0% and 100% are only printed when the values
40288are _exactly_ 0% and 100% respectively.  Other values which would
40289conventionally be rounded to 0% or 100% are instead printed as the
40290nearest non-boundary value.
40291
40292 When using `gcov', you must first compile your program with two
40293special GCC options: `-fprofile-arcs -ftest-coverage'.  This tells the
40294compiler to generate additional information needed by gcov (basically a
40295flow graph of the program) and also includes additional code in the
40296object files for generating the extra profiling information needed by
40297gcov.  These additional files are placed in the directory where the
40298object file is located.
40299
40300 Running the program will cause profile output to be generated.  For
40301each source file compiled with `-fprofile-arcs', an accompanying
40302`.gcda' file will be placed in the object file directory.
40303
40304 Running `gcov' with your program's source file names as arguments will
40305now produce a listing of the code along with frequency of execution for
40306each line.  For example, if your program is called `tmp.c', this is
40307what you see when you use the basic `gcov' facility:
40308
40309     $ gcc -fprofile-arcs -ftest-coverage tmp.c
40310     $ a.out
40311     $ gcov tmp.c
40312     90.00% of 10 source lines executed in file tmp.c
40313     Creating tmp.c.gcov.
40314
40315 The file `tmp.c.gcov' contains output from `gcov'.  Here is a sample:
40316
40317             -:    0:Source:tmp.c
40318             -:    0:Graph:tmp.gcno
40319             -:    0:Data:tmp.gcda
40320             -:    0:Runs:1
40321             -:    0:Programs:1
40322             -:    1:#include <stdio.h>
40323             -:    2:
40324             -:    3:int main (void)
40325             1:    4:{
40326             1:    5:  int i, total;
40327             -:    6:
40328             1:    7:  total = 0;
40329             -:    8:
40330            11:    9:  for (i = 0; i < 10; i++)
40331            10:   10:    total += i;
40332             -:   11:
40333             1:   12:  if (total != 45)
40334         #####:   13:    printf ("Failure\n");
40335             -:   14:  else
40336             1:   15:    printf ("Success\n");
40337             1:   16:  return 0;
40338             -:   17:}
40339
40340 When you use the `-a' option, you will get individual block counts,
40341and the output looks like this:
40342
40343             -:    0:Source:tmp.c
40344             -:    0:Graph:tmp.gcno
40345             -:    0:Data:tmp.gcda
40346             -:    0:Runs:1
40347             -:    0:Programs:1
40348             -:    1:#include <stdio.h>
40349             -:    2:
40350             -:    3:int main (void)
40351             1:    4:{
40352             1:    4-block  0
40353             1:    5:  int i, total;
40354             -:    6:
40355             1:    7:  total = 0;
40356             -:    8:
40357            11:    9:  for (i = 0; i < 10; i++)
40358            11:    9-block  0
40359            10:   10:    total += i;
40360            10:   10-block  0
40361             -:   11:
40362             1:   12:  if (total != 45)
40363             1:   12-block  0
40364         #####:   13:    printf ("Failure\n");
40365         $$$$$:   13-block  0
40366             -:   14:  else
40367             1:   15:    printf ("Success\n");
40368             1:   15-block  0
40369             1:   16:  return 0;
40370             1:   16-block  0
40371             -:   17:}
40372
40373 In this mode, each basic block is only shown on one line - the last
40374line of the block.  A multi-line block will only contribute to the
40375execution count of that last line, and other lines will not be shown to
40376contain code, unless previous blocks end on those lines.  The total
40377execution count of a line is shown and subsequent lines show the
40378execution counts for individual blocks that end on that line.  After
40379each block, the branch and call counts of the block will be shown, if
40380the `-b' option is given.
40381
40382 Because of the way GCC instruments calls, a call count can be shown
40383after a line with no individual blocks.  As you can see, line 13
40384contains a basic block that was not executed.
40385
40386 When you use the `-b' option, your output looks like this:
40387
40388     $ gcov -b tmp.c
40389     90.00% of 10 source lines executed in file tmp.c
40390     80.00% of 5 branches executed in file tmp.c
40391     80.00% of 5 branches taken at least once in file tmp.c
40392     50.00% of 2 calls executed in file tmp.c
40393     Creating tmp.c.gcov.
40394
40395 Here is a sample of a resulting `tmp.c.gcov' file:
40396
40397             -:    0:Source:tmp.c
40398             -:    0:Graph:tmp.gcno
40399             -:    0:Data:tmp.gcda
40400             -:    0:Runs:1
40401             -:    0:Programs:1
40402             -:    1:#include <stdio.h>
40403             -:    2:
40404             -:    3:int main (void)
40405     function main called 1 returned 1 blocks executed 75%
40406             1:    4:{
40407             1:    5:  int i, total;
40408             -:    6:
40409             1:    7:  total = 0;
40410             -:    8:
40411            11:    9:  for (i = 0; i < 10; i++)
40412     branch  0 taken 91% (fallthrough)
40413     branch  1 taken 9%
40414            10:   10:    total += i;
40415             -:   11:
40416             1:   12:  if (total != 45)
40417     branch  0 taken 0% (fallthrough)
40418     branch  1 taken 100%
40419         #####:   13:    printf ("Failure\n");
40420     call    0 never executed
40421             -:   14:  else
40422             1:   15:    printf ("Success\n");
40423     call    0 called 1 returned 100%
40424             1:   16:  return 0;
40425             -:   17:}
40426
40427 For each function, a line is printed showing how many times the
40428function is called, how many times it returns and what percentage of the
40429function's blocks were executed.
40430
40431 For each basic block, a line is printed after the last line of the
40432basic block describing the branch or call that ends the basic block.
40433There can be multiple branches and calls listed for a single source
40434line if there are multiple basic blocks that end on that line.  In this
40435case, the branches and calls are each given a number.  There is no
40436simple way to map these branches and calls back to source constructs.
40437In general, though, the lowest numbered branch or call will correspond
40438to the leftmost construct on the source line.
40439
40440 For a branch, if it was executed at least once, then a percentage
40441indicating the number of times the branch was taken divided by the
40442number of times the branch was executed will be printed.  Otherwise, the
40443message "never executed" is printed.
40444
40445 For a call, if it was executed at least once, then a percentage
40446indicating the number of times the call returned divided by the number
40447of times the call was executed will be printed.  This will usually be
40448100%, but may be less for functions that call `exit' or `longjmp', and
40449thus may not return every time they are called.
40450
40451 The execution counts are cumulative.  If the example program were
40452executed again without removing the `.gcda' file, the count for the
40453number of times each line in the source was executed would be added to
40454the results of the previous run(s).  This is potentially useful in
40455several ways.  For example, it could be used to accumulate data over a
40456number of program runs as part of a test verification suite, or to
40457provide more accurate long-term information over a large number of
40458program runs.
40459
40460 The data in the `.gcda' files is saved immediately before the program
40461exits.  For each source file compiled with `-fprofile-arcs', the
40462profiling code first attempts to read in an existing `.gcda' file; if
40463the file doesn't match the executable (differing number of basic block
40464counts) it will ignore the contents of the file.  It then adds in the
40465new execution counts and finally writes the data to the file.
40466
40467
40468File: gcc.info,  Node: Gcov and Optimization,  Next: Gcov Data Files,  Prev: Invoking Gcov,  Up: Gcov
40469
4047010.3 Using `gcov' with GCC Optimization
40471=======================================
40472
40473If you plan to use `gcov' to help optimize your code, you must first
40474compile your program with two special GCC options: `-fprofile-arcs
40475-ftest-coverage'.  Aside from that, you can use any other GCC options;
40476but if you want to prove that every single line in your program was
40477executed, you should not compile with optimization at the same time.
40478On some machines the optimizer can eliminate some simple code lines by
40479combining them with other lines.  For example, code like this:
40480
40481     if (a != b)
40482       c = 1;
40483     else
40484       c = 0;
40485
40486can be compiled into one instruction on some machines.  In this case,
40487there is no way for `gcov' to calculate separate execution counts for
40488each line because there isn't separate code for each line.  Hence the
40489`gcov' output looks like this if you compiled the program with
40490optimization:
40491
40492           100:   12:if (a != b)
40493           100:   13:  c = 1;
40494           100:   14:else
40495           100:   15:  c = 0;
40496
40497 The output shows that this block of code, combined by optimization,
40498executed 100 times.  In one sense this result is correct, because there
40499was only one instruction representing all four of these lines.  However,
40500the output does not indicate how many times the result was 0 and how
40501many times the result was 1.
40502
40503 Inlineable functions can create unexpected line counts.  Line counts
40504are shown for the source code of the inlineable function, but what is
40505shown depends on where the function is inlined, or if it is not inlined
40506at all.
40507
40508 If the function is not inlined, the compiler must emit an out of line
40509copy of the function, in any object file that needs it.  If `fileA.o'
40510and `fileB.o' both contain out of line bodies of a particular
40511inlineable function, they will also both contain coverage counts for
40512that function.  When `fileA.o' and `fileB.o' are linked together, the
40513linker will, on many systems, select one of those out of line bodies
40514for all calls to that function, and remove or ignore the other.
40515Unfortunately, it will not remove the coverage counters for the unused
40516function body.  Hence when instrumented, all but one use of that
40517function will show zero counts.
40518
40519 If the function is inlined in several places, the block structure in
40520each location might not be the same.  For instance, a condition might
40521now be calculable at compile time in some instances.  Because the
40522coverage of all the uses of the inline function will be shown for the
40523same source lines, the line counts themselves might seem inconsistent.
40524
40525
40526File: gcc.info,  Node: Gcov Data Files,  Next: Cross-profiling,  Prev: Gcov and Optimization,  Up: Gcov
40527
4052810.4 Brief description of `gcov' data files
40529===========================================
40530
40531`gcov' uses two files for profiling.  The names of these files are
40532derived from the original _object_ file by substituting the file suffix
40533with either `.gcno', or `.gcda'.  All of these files are placed in the
40534same directory as the object file, and contain data stored in a
40535platform-independent format.
40536
40537 The `.gcno' file is generated when the source file is compiled with
40538the GCC `-ftest-coverage' option.  It contains information to
40539reconstruct the basic block graphs and assign source line numbers to
40540blocks.
40541
40542 The `.gcda' file is generated when a program containing object files
40543built with the GCC `-fprofile-arcs' option is executed.  A separate
40544`.gcda' file is created for each object file compiled with this option.
40545It contains arc transition counts, and some summary information.
40546
40547 The full details of the file format is specified in `gcov-io.h', and
40548functions provided in that header file should be used to access the
40549coverage files.
40550
40551
40552File: gcc.info,  Node: Cross-profiling,  Prev: Gcov Data Files,  Up: Gcov
40553
4055410.5 Data file relocation to support cross-profiling
40555====================================================
40556
40557Running the program will cause profile output to be generated.  For each
40558source file compiled with `-fprofile-arcs', an accompanying `.gcda'
40559file will be placed in the object file directory. That implicitly
40560requires running the program on the same system as it was built or
40561having the same absolute directory structure on the target system. The
40562program will try to create the needed directory structure, if it is not
40563already present.
40564
40565 To support cross-profiling, a program compiled with `-fprofile-arcs'
40566can relocate the data files based on two environment variables:
40567
40568   * GCOV_PREFIX contains the prefix to add to the absolute paths in
40569     the object file. Prefix can be absolute, or relative.  The default
40570     is no prefix.
40571
40572   * GCOV_PREFIX_STRIP indicates the how many initial directory names
40573     to strip off the hardwired absolute paths. Default value is 0.
40574
40575     _Note:_ If GCOV_PREFIX_STRIP is set without GCOV_PREFIX is
40576     undefined,  then a relative path is made out of the hardwired
40577     absolute paths.
40578
40579 For example, if the object file `/user/build/foo.o' was built with
40580`-fprofile-arcs', the final executable will try to create the data file
40581`/user/build/foo.gcda' when running on the target system.  This will
40582fail if the corresponding directory does not exist and it is unable to
40583create it.  This can be overcome by, for example, setting the
40584environment as `GCOV_PREFIX=/target/run' and `GCOV_PREFIX_STRIP=1'.
40585Such a setting will name the data file `/target/run/build/foo.gcda'.
40586
40587 You must move the data files to the expected directory tree in order to
40588use them for profile directed optimizations (`--use-profile'), or to
40589use the `gcov' tool.
40590
40591
40592File: gcc.info,  Node: Trouble,  Next: Bugs,  Prev: Gcov,  Up: Top
40593
4059411 Known Causes of Trouble with GCC
40595***********************************
40596
40597This section describes known problems that affect users of GCC.  Most
40598of these are not GCC bugs per se--if they were, we would fix them.  But
40599the result for a user may be like the result of a bug.
40600
40601 Some of these problems are due to bugs in other software, some are
40602missing features that are too much work to add, and some are places
40603where people's opinions differ as to what is best.
40604
40605* Menu:
40606
40607* Actual Bugs::         Bugs we will fix later.
40608* Cross-Compiler Problems:: Common problems of cross compiling with GCC.
40609* Interoperation::      Problems using GCC with other compilers,
40610                        and with certain linkers, assemblers and debuggers.
40611* Incompatibilities::   GCC is incompatible with traditional C.
40612* Fixed Headers::       GCC uses corrected versions of system header files.
40613                        This is necessary, but doesn't always work smoothly.
40614* Standard Libraries::  GCC uses the system C library, which might not be
40615                        compliant with the ISO C standard.
40616* Disappointments::     Regrettable things we can't change, but not quite bugs.
40617* C++ Misunderstandings:: Common misunderstandings with GNU C++.
40618* Non-bugs::            Things we think are right, but some others disagree.
40619* Warnings and Errors:: Which problems in your code get warnings,
40620                        and which get errors.
40621
40622
40623File: gcc.info,  Node: Actual Bugs,  Next: Cross-Compiler Problems,  Up: Trouble
40624
4062511.1 Actual Bugs We Haven't Fixed Yet
40626=====================================
40627
40628   * The `fixincludes' script interacts badly with automounters; if the
40629     directory of system header files is automounted, it tends to be
40630     unmounted while `fixincludes' is running.  This would seem to be a
40631     bug in the automounter.  We don't know any good way to work around
40632     it.
40633
40634
40635File: gcc.info,  Node: Cross-Compiler Problems,  Next: Interoperation,  Prev: Actual Bugs,  Up: Trouble
40636
4063711.2 Cross-Compiler Problems
40638============================
40639
40640You may run into problems with cross compilation on certain machines,
40641for several reasons.
40642
40643   * At present, the program `mips-tfile' which adds debug support to
40644     object files on MIPS systems does not work in a cross compile
40645     environment.
40646
40647
40648File: gcc.info,  Node: Interoperation,  Next: Incompatibilities,  Prev: Cross-Compiler Problems,  Up: Trouble
40649
4065011.3 Interoperation
40651===================
40652
40653This section lists various difficulties encountered in using GCC
40654together with other compilers or with the assemblers, linkers,
40655libraries and debuggers on certain systems.
40656
40657   * On many platforms, GCC supports a different ABI for C++ than do
40658     other compilers, so the object files compiled by GCC cannot be
40659     used with object files generated by another C++ compiler.
40660
40661     An area where the difference is most apparent is name mangling.
40662     The use of different name mangling is intentional, to protect you
40663     from more subtle problems.  Compilers differ as to many internal
40664     details of C++ implementation, including: how class instances are
40665     laid out, how multiple inheritance is implemented, and how virtual
40666     function calls are handled.  If the name encoding were made the
40667     same, your programs would link against libraries provided from
40668     other compilers--but the programs would then crash when run.
40669     Incompatible libraries are then detected at link time, rather than
40670     at run time.
40671
40672   * On some BSD systems, including some versions of Ultrix, use of
40673     profiling causes static variable destructors (currently used only
40674     in C++) not to be run.
40675
40676   * On some SGI systems, when you use `-lgl_s' as an option, it gets
40677     translated magically to `-lgl_s -lX11_s -lc_s'.  Naturally, this
40678     does not happen when you use GCC.  You must specify all three
40679     options explicitly.
40680
40681   * On a SPARC, GCC aligns all values of type `double' on an 8-byte
40682     boundary, and it expects every `double' to be so aligned.  The Sun
40683     compiler usually gives `double' values 8-byte alignment, with one
40684     exception: function arguments of type `double' may not be aligned.
40685
40686     As a result, if a function compiled with Sun CC takes the address
40687     of an argument of type `double' and passes this pointer of type
40688     `double *' to a function compiled with GCC, dereferencing the
40689     pointer may cause a fatal signal.
40690
40691     One way to solve this problem is to compile your entire program
40692     with GCC.  Another solution is to modify the function that is
40693     compiled with Sun CC to copy the argument into a local variable;
40694     local variables are always properly aligned.  A third solution is
40695     to modify the function that uses the pointer to dereference it via
40696     the following function `access_double' instead of directly with
40697     `*':
40698
40699          inline double
40700          access_double (double *unaligned_ptr)
40701          {
40702            union d2i { double d; int i[2]; };
40703
40704            union d2i *p = (union d2i *) unaligned_ptr;
40705            union d2i u;
40706
40707            u.i[0] = p->i[0];
40708            u.i[1] = p->i[1];
40709
40710            return u.d;
40711          }
40712
40713     Storing into the pointer can be done likewise with the same union.
40714
40715   * On Solaris, the `malloc' function in the `libmalloc.a' library may
40716     allocate memory that is only 4 byte aligned.  Since GCC on the
40717     SPARC assumes that doubles are 8 byte aligned, this may result in a
40718     fatal signal if doubles are stored in memory allocated by the
40719     `libmalloc.a' library.
40720
40721     The solution is to not use the `libmalloc.a' library.  Use instead
40722     `malloc' and related functions from `libc.a'; they do not have
40723     this problem.
40724
40725   * On the HP PA machine, ADB sometimes fails to work on functions
40726     compiled with GCC.  Specifically, it fails to work on functions
40727     that use `alloca' or variable-size arrays.  This is because GCC
40728     doesn't generate HP-UX unwind descriptors for such functions.  It
40729     may even be impossible to generate them.
40730
40731   * Debugging (`-g') is not supported on the HP PA machine, unless you
40732     use the preliminary GNU tools.
40733
40734   * Taking the address of a label may generate errors from the HP-UX
40735     PA assembler.  GAS for the PA does not have this problem.
40736
40737   * Using floating point parameters for indirect calls to static
40738     functions will not work when using the HP assembler.  There simply
40739     is no way for GCC to specify what registers hold arguments for
40740     static functions when using the HP assembler.  GAS for the PA does
40741     not have this problem.
40742
40743   * In extremely rare cases involving some very large functions you may
40744     receive errors from the HP linker complaining about an out of
40745     bounds unconditional branch offset.  This used to occur more often
40746     in previous versions of GCC, but is now exceptionally rare.  If
40747     you should run into it, you can work around by making your
40748     function smaller.
40749
40750   * GCC compiled code sometimes emits warnings from the HP-UX
40751     assembler of the form:
40752
40753          (warning) Use of GR3 when
40754            frame >= 8192 may cause conflict.
40755
40756     These warnings are harmless and can be safely ignored.
40757
40758   * In extremely rare cases involving some very large functions you may
40759     receive errors from the AIX Assembler complaining about a
40760     displacement that is too large.  If you should run into it, you
40761     can work around by making your function smaller.
40762
40763   * The `libstdc++.a' library in GCC relies on the SVR4 dynamic linker
40764     semantics which merges global symbols between libraries and
40765     applications, especially necessary for C++ streams functionality.
40766     This is not the default behavior of AIX shared libraries and
40767     dynamic linking.  `libstdc++.a' is built on AIX with
40768     "runtime-linking" enabled so that symbol merging can occur.  To
40769     utilize this feature, the application linked with `libstdc++.a'
40770     must include the `-Wl,-brtl' flag on the link line.  G++ cannot
40771     impose this because this option may interfere with the semantics
40772     of the user program and users may not always use `g++' to link his
40773     or her application.  Applications are not required to use the
40774     `-Wl,-brtl' flag on the link line--the rest of the `libstdc++.a'
40775     library which is not dependent on the symbol merging semantics
40776     will continue to function correctly.
40777
40778   * An application can interpose its own definition of functions for
40779     functions invoked by `libstdc++.a' with "runtime-linking" enabled
40780     on AIX.  To accomplish this the application must be linked with
40781     "runtime-linking" option and the functions explicitly must be
40782     exported by the application (`-Wl,-brtl,-bE:exportfile').
40783
40784   * AIX on the RS/6000 provides support (NLS) for environments outside
40785     of the United States.  Compilers and assemblers use NLS to support
40786     locale-specific representations of various objects including
40787     floating-point numbers (`.' vs `,' for separating decimal
40788     fractions).  There have been problems reported where the library
40789     linked with GCC does not produce the same floating-point formats
40790     that the assembler accepts.  If you have this problem, set the
40791     `LANG' environment variable to `C' or `En_US'.
40792
40793   * Even if you specify `-fdollars-in-identifiers', you cannot
40794     successfully use `$' in identifiers on the RS/6000 due to a
40795     restriction in the IBM assembler.  GAS supports these identifiers.
40796
40797
40798
40799File: gcc.info,  Node: Incompatibilities,  Next: Fixed Headers,  Prev: Interoperation,  Up: Trouble
40800
4080111.4 Incompatibilities of GCC
40802=============================
40803
40804There are several noteworthy incompatibilities between GNU C and K&R
40805(non-ISO) versions of C.
40806
40807   * GCC normally makes string constants read-only.  If several
40808     identical-looking string constants are used, GCC stores only one
40809     copy of the string.
40810
40811     One consequence is that you cannot call `mktemp' with a string
40812     constant argument.  The function `mktemp' always alters the string
40813     its argument points to.
40814
40815     Another consequence is that `sscanf' does not work on some very
40816     old systems when passed a string constant as its format control
40817     string or input.  This is because `sscanf' incorrectly tries to
40818     write into the string constant.  Likewise `fscanf' and `scanf'.
40819
40820     The solution to these problems is to change the program to use
40821     `char'-array variables with initialization strings for these
40822     purposes instead of string constants.
40823
40824   * `-2147483648' is positive.
40825
40826     This is because 2147483648 cannot fit in the type `int', so
40827     (following the ISO C rules) its data type is `unsigned long int'.
40828     Negating this value yields 2147483648 again.
40829
40830   * GCC does not substitute macro arguments when they appear inside of
40831     string constants.  For example, the following macro in GCC
40832
40833          #define foo(a) "a"
40834
40835     will produce output `"a"' regardless of what the argument A is.
40836
40837   * When you use `setjmp' and `longjmp', the only automatic variables
40838     guaranteed to remain valid are those declared `volatile'.  This is
40839     a consequence of automatic register allocation.  Consider this
40840     function:
40841
40842          jmp_buf j;
40843
40844          foo ()
40845          {
40846            int a, b;
40847
40848            a = fun1 ();
40849            if (setjmp (j))
40850              return a;
40851
40852            a = fun2 ();
40853            /* `longjmp (j)' may occur in `fun3'. */
40854            return a + fun3 ();
40855          }
40856
40857     Here `a' may or may not be restored to its first value when the
40858     `longjmp' occurs.  If `a' is allocated in a register, then its
40859     first value is restored; otherwise, it keeps the last value stored
40860     in it.
40861
40862     If you use the `-W' option with the `-O' option, you will get a
40863     warning when GCC thinks such a problem might be possible.
40864
40865   * Programs that use preprocessing directives in the middle of macro
40866     arguments do not work with GCC.  For example, a program like this
40867     will not work:
40868
40869          foobar (
40870          #define luser
40871                  hack)
40872
40873     ISO C does not permit such a construct.
40874
40875   * K&R compilers allow comments to cross over an inclusion boundary
40876     (i.e. started in an include file and ended in the including file).
40877
40878   * Declarations of external variables and functions within a block
40879     apply only to the block containing the declaration.  In other
40880     words, they have the same scope as any other declaration in the
40881     same place.
40882
40883     In some other C compilers, an `extern' declaration affects all the
40884     rest of the file even if it happens within a block.
40885
40886   * In traditional C, you can combine `long', etc., with a typedef
40887     name, as shown here:
40888
40889          typedef int foo;
40890          typedef long foo bar;
40891
40892     In ISO C, this is not allowed: `long' and other type modifiers
40893     require an explicit `int'.
40894
40895   * PCC allows typedef names to be used as function parameters.
40896
40897   * Traditional C allows the following erroneous pair of declarations
40898     to appear together in a given scope:
40899
40900          typedef int foo;
40901          typedef foo foo;
40902
40903   * GCC treats all characters of identifiers as significant.
40904     According to K&R-1 (2.2), "No more than the first eight characters
40905     are significant, although more may be used.".  Also according to
40906     K&R-1 (2.2), "An identifier is a sequence of letters and digits;
40907     the first character must be a letter.  The underscore _ counts as
40908     a letter.", but GCC also allows dollar signs in identifiers.
40909
40910   * PCC allows whitespace in the middle of compound assignment
40911     operators such as `+='.  GCC, following the ISO standard, does not
40912     allow this.
40913
40914   * GCC complains about unterminated character constants inside of
40915     preprocessing conditionals that fail.  Some programs have English
40916     comments enclosed in conditionals that are guaranteed to fail; if
40917     these comments contain apostrophes, GCC will probably report an
40918     error.  For example, this code would produce an error:
40919
40920          #if 0
40921          You can't expect this to work.
40922          #endif
40923
40924     The best solution to such a problem is to put the text into an
40925     actual C comment delimited by `/*...*/'.
40926
40927   * Many user programs contain the declaration `long time ();'.  In the
40928     past, the system header files on many systems did not actually
40929     declare `time', so it did not matter what type your program
40930     declared it to return.  But in systems with ISO C headers, `time'
40931     is declared to return `time_t', and if that is not the same as
40932     `long', then `long time ();' is erroneous.
40933
40934     The solution is to change your program to use appropriate system
40935     headers (`<time.h>' on systems with ISO C headers) and not to
40936     declare `time' if the system header files declare it, or failing
40937     that to use `time_t' as the return type of `time'.
40938
40939   * When compiling functions that return `float', PCC converts it to a
40940     double.  GCC actually returns a `float'.  If you are concerned
40941     with PCC compatibility, you should declare your functions to return
40942     `double'; you might as well say what you mean.
40943
40944   * When compiling functions that return structures or unions, GCC
40945     output code normally uses a method different from that used on most
40946     versions of Unix.  As a result, code compiled with GCC cannot call
40947     a structure-returning function compiled with PCC, and vice versa.
40948
40949     The method used by GCC is as follows: a structure or union which is
40950     1, 2, 4 or 8 bytes long is returned like a scalar.  A structure or
40951     union with any other size is stored into an address supplied by
40952     the caller (usually in a special, fixed register, but on some
40953     machines it is passed on the stack).  The target hook
40954     `TARGET_STRUCT_VALUE_RTX' tells GCC where to pass this address.
40955
40956     By contrast, PCC on most target machines returns structures and
40957     unions of any size by copying the data into an area of static
40958     storage, and then returning the address of that storage as if it
40959     were a pointer value.  The caller must copy the data from that
40960     memory area to the place where the value is wanted.  GCC does not
40961     use this method because it is slower and nonreentrant.
40962
40963     On some newer machines, PCC uses a reentrant convention for all
40964     structure and union returning.  GCC on most of these machines uses
40965     a compatible convention when returning structures and unions in
40966     memory, but still returns small structures and unions in registers.
40967
40968     You can tell GCC to use a compatible convention for all structure
40969     and union returning with the option `-fpcc-struct-return'.
40970
40971   * GCC complains about program fragments such as `0x74ae-0x4000'
40972     which appear to be two hexadecimal constants separated by the minus
40973     operator.  Actually, this string is a single "preprocessing token".
40974     Each such token must correspond to one token in C.  Since this
40975     does not, GCC prints an error message.  Although it may appear
40976     obvious that what is meant is an operator and two values, the ISO
40977     C standard specifically requires that this be treated as erroneous.
40978
40979     A "preprocessing token" is a "preprocessing number" if it begins
40980     with a digit and is followed by letters, underscores, digits,
40981     periods and `e+', `e-', `E+', `E-', `p+', `p-', `P+', or `P-'
40982     character sequences.  (In strict C90 mode, the sequences `p+',
40983     `p-', `P+' and `P-' cannot appear in preprocessing numbers.)
40984
40985     To make the above program fragment valid, place whitespace in
40986     front of the minus sign.  This whitespace will end the
40987     preprocessing number.
40988
40989
40990File: gcc.info,  Node: Fixed Headers,  Next: Standard Libraries,  Prev: Incompatibilities,  Up: Trouble
40991
4099211.5 Fixed Header Files
40993=======================
40994
40995GCC needs to install corrected versions of some system header files.
40996This is because most target systems have some header files that won't
40997work with GCC unless they are changed.  Some have bugs, some are
40998incompatible with ISO C, and some depend on special features of other
40999compilers.
41000
41001 Installing GCC automatically creates and installs the fixed header
41002files, by running a program called `fixincludes'.  Normally, you don't
41003need to pay attention to this.  But there are cases where it doesn't do
41004the right thing automatically.
41005
41006   * If you update the system's header files, such as by installing a
41007     new system version, the fixed header files of GCC are not
41008     automatically updated.  They can be updated using the `mkheaders'
41009     script installed in `LIBEXECDIR/gcc/TARGET/VERSION/install-tools/'.
41010
41011   * On some systems, header file directories contain machine-specific
41012     symbolic links in certain places.  This makes it possible to share
41013     most of the header files among hosts running the same version of
41014     the system on different machine models.
41015
41016     The programs that fix the header files do not understand this
41017     special way of using symbolic links; therefore, the directory of
41018     fixed header files is good only for the machine model used to
41019     build it.
41020
41021     It is possible to make separate sets of fixed header files for the
41022     different machine models, and arrange a structure of symbolic
41023     links so as to use the proper set, but you'll have to do this by
41024     hand.
41025
41026
41027File: gcc.info,  Node: Standard Libraries,  Next: Disappointments,  Prev: Fixed Headers,  Up: Trouble
41028
4102911.6 Standard Libraries
41030=======================
41031
41032GCC by itself attempts to be a conforming freestanding implementation.
41033*Note Language Standards Supported by GCC: Standards, for details of
41034what this means.  Beyond the library facilities required of such an
41035implementation, the rest of the C library is supplied by the vendor of
41036the operating system.  If that C library doesn't conform to the C
41037standards, then your programs might get warnings (especially when using
41038`-Wall') that you don't expect.
41039
41040 For example, the `sprintf' function on SunOS 4.1.3 returns `char *'
41041while the C standard says that `sprintf' returns an `int'.  The
41042`fixincludes' program could make the prototype for this function match
41043the Standard, but that would be wrong, since the function will still
41044return `char *'.
41045
41046 If you need a Standard compliant library, then you need to find one, as
41047GCC does not provide one.  The GNU C library (called `glibc') provides
41048ISO C, POSIX, BSD, SystemV and X/Open compatibility for GNU/Linux and
41049HURD-based GNU systems; no recent version of it supports other systems,
41050though some very old versions did.  Version 2.2 of the GNU C library
41051includes nearly complete C99 support.  You could also ask your
41052operating system vendor if newer libraries are available.
41053
41054
41055File: gcc.info,  Node: Disappointments,  Next: C++ Misunderstandings,  Prev: Standard Libraries,  Up: Trouble
41056
4105711.7 Disappointments and Misunderstandings
41058==========================================
41059
41060These problems are perhaps regrettable, but we don't know any practical
41061way around them.
41062
41063   * Certain local variables aren't recognized by debuggers when you
41064     compile with optimization.
41065
41066     This occurs because sometimes GCC optimizes the variable out of
41067     existence.  There is no way to tell the debugger how to compute the
41068     value such a variable "would have had", and it is not clear that
41069     would be desirable anyway.  So GCC simply does not mention the
41070     eliminated variable when it writes debugging information.
41071
41072     You have to expect a certain amount of disagreement between the
41073     executable and your source code, when you use optimization.
41074
41075   * Users often think it is a bug when GCC reports an error for code
41076     like this:
41077
41078          int foo (struct mumble *);
41079
41080          struct mumble { ... };
41081
41082          int foo (struct mumble *x)
41083          { ... }
41084
41085     This code really is erroneous, because the scope of `struct
41086     mumble' in the prototype is limited to the argument list
41087     containing it.  It does not refer to the `struct mumble' defined
41088     with file scope immediately below--they are two unrelated types
41089     with similar names in different scopes.
41090
41091     But in the definition of `foo', the file-scope type is used
41092     because that is available to be inherited.  Thus, the definition
41093     and the prototype do not match, and you get an error.
41094
41095     This behavior may seem silly, but it's what the ISO standard
41096     specifies.  It is easy enough for you to make your code work by
41097     moving the definition of `struct mumble' above the prototype.
41098     It's not worth being incompatible with ISO C just to avoid an
41099     error for the example shown above.
41100
41101   * Accesses to bit-fields even in volatile objects works by accessing
41102     larger objects, such as a byte or a word.  You cannot rely on what
41103     size of object is accessed in order to read or write the
41104     bit-field; it may even vary for a given bit-field according to the
41105     precise usage.
41106
41107     If you care about controlling the amount of memory that is
41108     accessed, use volatile but do not use bit-fields.
41109
41110   * GCC comes with shell scripts to fix certain known problems in
41111     system header files.  They install corrected copies of various
41112     header files in a special directory where only GCC will normally
41113     look for them.  The scripts adapt to various systems by searching
41114     all the system header files for the problem cases that we know
41115     about.
41116
41117     If new system header files are installed, nothing automatically
41118     arranges to update the corrected header files.  They can be
41119     updated using the `mkheaders' script installed in
41120     `LIBEXECDIR/gcc/TARGET/VERSION/install-tools/'.
41121
41122   * On 68000 and x86 systems, for instance, you can get paradoxical
41123     results if you test the precise values of floating point numbers.
41124     For example, you can find that a floating point value which is not
41125     a NaN is not equal to itself.  This results from the fact that the
41126     floating point registers hold a few more bits of precision than
41127     fit in a `double' in memory.  Compiled code moves values between
41128     memory and floating point registers at its convenience, and moving
41129     them into memory truncates them.
41130
41131     You can partially avoid this problem by using the `-ffloat-store'
41132     option (*note Optimize Options::).
41133
41134   * On AIX and other platforms without weak symbol support, templates
41135     need to be instantiated explicitly and symbols for static members
41136     of templates will not be generated.
41137
41138   * On AIX, GCC scans object files and library archives for static
41139     constructors and destructors when linking an application before the
41140     linker prunes unreferenced symbols.  This is necessary to prevent
41141     the AIX linker from mistakenly assuming that static constructor or
41142     destructor are unused and removing them before the scanning can
41143     occur.  All static constructors and destructors found will be
41144     referenced even though the modules in which they occur may not be
41145     used by the program.  This may lead to both increased executable
41146     size and unexpected symbol references.
41147
41148
41149File: gcc.info,  Node: C++ Misunderstandings,  Next: Non-bugs,  Prev: Disappointments,  Up: Trouble
41150
4115111.8 Common Misunderstandings with GNU C++
41152==========================================
41153
41154C++ is a complex language and an evolving one, and its standard
41155definition (the ISO C++ standard) was only recently completed.  As a
41156result, your C++ compiler may occasionally surprise you, even when its
41157behavior is correct.  This section discusses some areas that frequently
41158give rise to questions of this sort.
41159
41160* Menu:
41161
41162* Static Definitions::  Static member declarations are not definitions
41163* Name lookup::         Name lookup, templates, and accessing members of base classes
41164* Temporaries::         Temporaries may vanish before you expect
41165* Copy Assignment::     Copy Assignment operators copy virtual bases twice
41166
41167
41168File: gcc.info,  Node: Static Definitions,  Next: Name lookup,  Up: C++ Misunderstandings
41169
4117011.8.1 Declare _and_ Define Static Members
41171------------------------------------------
41172
41173When a class has static data members, it is not enough to _declare_ the
41174static member; you must also _define_ it.  For example:
41175
41176     class Foo
41177     {
41178       ...
41179       void method();
41180       static int bar;
41181     };
41182
41183 This declaration only establishes that the class `Foo' has an `int'
41184named `Foo::bar', and a member function named `Foo::method'.  But you
41185still need to define _both_ `method' and `bar' elsewhere.  According to
41186the ISO standard, you must supply an initializer in one (and only one)
41187source file, such as:
41188
41189     int Foo::bar = 0;
41190
41191 Other C++ compilers may not correctly implement the standard behavior.
41192As a result, when you switch to `g++' from one of these compilers, you
41193may discover that a program that appeared to work correctly in fact
41194does not conform to the standard: `g++' reports as undefined symbols
41195any static data members that lack definitions.
41196
41197
41198File: gcc.info,  Node: Name lookup,  Next: Temporaries,  Prev: Static Definitions,  Up: C++ Misunderstandings
41199
4120011.8.2 Name lookup, templates, and accessing members of base classes
41201--------------------------------------------------------------------
41202
41203The C++ standard prescribes that all names that are not dependent on
41204template parameters are bound to their present definitions when parsing
41205a template function or class.(1)  Only names that are dependent are
41206looked up at the point of instantiation.  For example, consider
41207
41208       void foo(double);
41209
41210       struct A {
41211         template <typename T>
41212         void f () {
41213           foo (1);        // 1
41214           int i = N;      // 2
41215           T t;
41216           t.bar();        // 3
41217           foo (t);        // 4
41218         }
41219
41220         static const int N;
41221       };
41222
41223 Here, the names `foo' and `N' appear in a context that does not depend
41224on the type of `T'.  The compiler will thus require that they are
41225defined in the context of use in the template, not only before the
41226point of instantiation, and will here use `::foo(double)' and `A::N',
41227respectively.  In particular, it will convert the integer value to a
41228`double' when passing it to `::foo(double)'.
41229
41230 Conversely, `bar' and the call to `foo' in the fourth marked line are
41231used in contexts that do depend on the type of `T', so they are only
41232looked up at the point of instantiation, and you can provide
41233declarations for them after declaring the template, but before
41234instantiating it.  In particular, if you instantiate `A::f<int>', the
41235last line will call an overloaded `::foo(int)' if one was provided,
41236even if after the declaration of `struct A'.
41237
41238 This distinction between lookup of dependent and non-dependent names is
41239called two-stage (or dependent) name lookup.  G++ implements it since
41240version 3.4.
41241
41242 Two-stage name lookup sometimes leads to situations with behavior
41243different from non-template codes.  The most common is probably this:
41244
41245       template <typename T> struct Base {
41246         int i;
41247       };
41248
41249       template <typename T> struct Derived : public Base<T> {
41250         int get_i() { return i; }
41251       };
41252
41253 In `get_i()', `i' is not used in a dependent context, so the compiler
41254will look for a name declared at the enclosing namespace scope (which
41255is the global scope here).  It will not look into the base class, since
41256that is dependent and you may declare specializations of `Base' even
41257after declaring `Derived', so the compiler can't really know what `i'
41258would refer to.  If there is no global variable `i', then you will get
41259an error message.
41260
41261 In order to make it clear that you want the member of the base class,
41262you need to defer lookup until instantiation time, at which the base
41263class is known.  For this, you need to access `i' in a dependent
41264context, by either using `this->i' (remember that `this' is of type
41265`Derived<T>*', so is obviously dependent), or using `Base<T>::i'.
41266Alternatively, `Base<T>::i' might be brought into scope by a
41267`using'-declaration.
41268
41269 Another, similar example involves calling member functions of a base
41270class:
41271
41272       template <typename T> struct Base {
41273           int f();
41274       };
41275
41276       template <typename T> struct Derived : Base<T> {
41277           int g() { return f(); };
41278       };
41279
41280 Again, the call to `f()' is not dependent on template arguments (there
41281are no arguments that depend on the type `T', and it is also not
41282otherwise specified that the call should be in a dependent context).
41283Thus a global declaration of such a function must be available, since
41284the one in the base class is not visible until instantiation time.  The
41285compiler will consequently produce the following error message:
41286
41287       x.cc: In member function `int Derived<T>::g()':
41288       x.cc:6: error: there are no arguments to `f' that depend on a template
41289          parameter, so a declaration of `f' must be available
41290       x.cc:6: error: (if you use `-fpermissive', G++ will accept your code, but
41291          allowing the use of an undeclared name is deprecated)
41292
41293 To make the code valid either use `this->f()', or `Base<T>::f()'.
41294Using the `-fpermissive' flag will also let the compiler accept the
41295code, by marking all function calls for which no declaration is visible
41296at the time of definition of the template for later lookup at
41297instantiation time, as if it were a dependent call.  We do not
41298recommend using `-fpermissive' to work around invalid code, and it will
41299also only catch cases where functions in base classes are called, not
41300where variables in base classes are used (as in the example above).
41301
41302 Note that some compilers (including G++ versions prior to 3.4) get
41303these examples wrong and accept above code without an error.  Those
41304compilers do not implement two-stage name lookup correctly.
41305
41306 ---------- Footnotes ----------
41307
41308 (1) The C++ standard just uses the term "dependent" for names that
41309depend on the type or value of template parameters.  This shorter term
41310will also be used in the rest of this section.
41311
41312
41313File: gcc.info,  Node: Temporaries,  Next: Copy Assignment,  Prev: Name lookup,  Up: C++ Misunderstandings
41314
4131511.8.3 Temporaries May Vanish Before You Expect
41316-----------------------------------------------
41317
41318It is dangerous to use pointers or references to _portions_ of a
41319temporary object.  The compiler may very well delete the object before
41320you expect it to, leaving a pointer to garbage.  The most common place
41321where this problem crops up is in classes like string classes,
41322especially ones that define a conversion function to type `char *' or
41323`const char *'--which is one reason why the standard `string' class
41324requires you to call the `c_str' member function.  However, any class
41325that returns a pointer to some internal structure is potentially
41326subject to this problem.
41327
41328 For example, a program may use a function `strfunc' that returns
41329`string' objects, and another function `charfunc' that operates on
41330pointers to `char':
41331
41332     string strfunc ();
41333     void charfunc (const char *);
41334
41335     void
41336     f ()
41337     {
41338       const char *p = strfunc().c_str();
41339       ...
41340       charfunc (p);
41341       ...
41342       charfunc (p);
41343     }
41344
41345In this situation, it may seem reasonable to save a pointer to the C
41346string returned by the `c_str' member function and use that rather than
41347call `c_str' repeatedly.  However, the temporary string created by the
41348call to `strfunc' is destroyed after `p' is initialized, at which point
41349`p' is left pointing to freed memory.
41350
41351 Code like this may run successfully under some other compilers,
41352particularly obsolete cfront-based compilers that delete temporaries
41353along with normal local variables.  However, the GNU C++ behavior is
41354standard-conforming, so if your program depends on late destruction of
41355temporaries it is not portable.
41356
41357 The safe way to write such code is to give the temporary a name, which
41358forces it to remain until the end of the scope of the name.  For
41359example:
41360
41361     const string& tmp = strfunc ();
41362     charfunc (tmp.c_str ());
41363
41364
41365File: gcc.info,  Node: Copy Assignment,  Prev: Temporaries,  Up: C++ Misunderstandings
41366
4136711.8.4 Implicit Copy-Assignment for Virtual Bases
41368-------------------------------------------------
41369
41370When a base class is virtual, only one subobject of the base class
41371belongs to each full object.  Also, the constructors and destructors are
41372invoked only once, and called from the most-derived class.  However,
41373such objects behave unspecified when being assigned.  For example:
41374
41375     struct Base{
41376       char *name;
41377       Base(char *n) : name(strdup(n)){}
41378       Base& operator= (const Base& other){
41379        free (name);
41380        name = strdup (other.name);
41381       }
41382     };
41383
41384     struct A:virtual Base{
41385       int val;
41386       A():Base("A"){}
41387     };
41388
41389     struct B:virtual Base{
41390       int bval;
41391       B():Base("B"){}
41392     };
41393
41394     struct Derived:public A, public B{
41395       Derived():Base("Derived"){}
41396     };
41397
41398     void func(Derived &d1, Derived &d2)
41399     {
41400       d1 = d2;
41401     }
41402
41403 The C++ standard specifies that `Base::Base' is only called once when
41404constructing or copy-constructing a Derived object.  It is unspecified
41405whether `Base::operator=' is called more than once when the implicit
41406copy-assignment for Derived objects is invoked (as it is inside `func'
41407in the example).
41408
41409 G++ implements the "intuitive" algorithm for copy-assignment: assign
41410all direct bases, then assign all members.  In that algorithm, the
41411virtual base subobject can be encountered more than once.  In the
41412example, copying proceeds in the following order: `val', `name' (via
41413`strdup'), `bval', and `name' again.
41414
41415 If application code relies on copy-assignment, a user-defined
41416copy-assignment operator removes any uncertainties.  With such an
41417operator, the application can define whether and how the virtual base
41418subobject is assigned.
41419
41420
41421File: gcc.info,  Node: Non-bugs,  Next: Warnings and Errors,  Prev: C++ Misunderstandings,  Up: Trouble
41422
4142311.9 Certain Changes We Don't Want to Make
41424==========================================
41425
41426This section lists changes that people frequently request, but which we
41427do not make because we think GCC is better without them.
41428
41429   * Checking the number and type of arguments to a function which has
41430     an old-fashioned definition and no prototype.
41431
41432     Such a feature would work only occasionally--only for calls that
41433     appear in the same file as the called function, following the
41434     definition.  The only way to check all calls reliably is to add a
41435     prototype for the function.  But adding a prototype eliminates the
41436     motivation for this feature.  So the feature is not worthwhile.
41437
41438   * Warning about using an expression whose type is signed as a shift
41439     count.
41440
41441     Shift count operands are probably signed more often than unsigned.
41442     Warning about this would cause far more annoyance than good.
41443
41444   * Warning about assigning a signed value to an unsigned variable.
41445
41446     Such assignments must be very common; warning about them would
41447     cause more annoyance than good.
41448
41449   * Warning when a non-void function value is ignored.
41450
41451     C contains many standard functions that return a value that most
41452     programs choose to ignore.  One obvious example is `printf'.
41453     Warning about this practice only leads the defensive programmer to
41454     clutter programs with dozens of casts to `void'.  Such casts are
41455     required so frequently that they become visual noise.  Writing
41456     those casts becomes so automatic that they no longer convey useful
41457     information about the intentions of the programmer.  For functions
41458     where the return value should never be ignored, use the
41459     `warn_unused_result' function attribute (*note Function
41460     Attributes::).
41461
41462   * Making `-fshort-enums' the default.
41463
41464     This would cause storage layout to be incompatible with most other
41465     C compilers.  And it doesn't seem very important, given that you
41466     can get the same result in other ways.  The case where it matters
41467     most is when the enumeration-valued object is inside a structure,
41468     and in that case you can specify a field width explicitly.
41469
41470   * Making bit-fields unsigned by default on particular machines where
41471     "the ABI standard" says to do so.
41472
41473     The ISO C standard leaves it up to the implementation whether a
41474     bit-field declared plain `int' is signed or not.  This in effect
41475     creates two alternative dialects of C.
41476
41477     The GNU C compiler supports both dialects; you can specify the
41478     signed dialect with `-fsigned-bitfields' and the unsigned dialect
41479     with `-funsigned-bitfields'.  However, this leaves open the
41480     question of which dialect to use by default.
41481
41482     Currently, the preferred dialect makes plain bit-fields signed,
41483     because this is simplest.  Since `int' is the same as `signed int'
41484     in every other context, it is cleanest for them to be the same in
41485     bit-fields as well.
41486
41487     Some computer manufacturers have published Application Binary
41488     Interface standards which specify that plain bit-fields should be
41489     unsigned.  It is a mistake, however, to say anything about this
41490     issue in an ABI.  This is because the handling of plain bit-fields
41491     distinguishes two dialects of C.  Both dialects are meaningful on
41492     every type of machine.  Whether a particular object file was
41493     compiled using signed bit-fields or unsigned is of no concern to
41494     other object files, even if they access the same bit-fields in the
41495     same data structures.
41496
41497     A given program is written in one or the other of these two
41498     dialects.  The program stands a chance to work on most any machine
41499     if it is compiled with the proper dialect.  It is unlikely to work
41500     at all if compiled with the wrong dialect.
41501
41502     Many users appreciate the GNU C compiler because it provides an
41503     environment that is uniform across machines.  These users would be
41504     inconvenienced if the compiler treated plain bit-fields
41505     differently on certain machines.
41506
41507     Occasionally users write programs intended only for a particular
41508     machine type.  On these occasions, the users would benefit if the
41509     GNU C compiler were to support by default the same dialect as the
41510     other compilers on that machine.  But such applications are rare.
41511     And users writing a program to run on more than one type of
41512     machine cannot possibly benefit from this kind of compatibility.
41513
41514     This is why GCC does and will treat plain bit-fields in the same
41515     fashion on all types of machines (by default).
41516
41517     There are some arguments for making bit-fields unsigned by default
41518     on all machines.  If, for example, this becomes a universal de
41519     facto standard, it would make sense for GCC to go along with it.
41520     This is something to be considered in the future.
41521
41522     (Of course, users strongly concerned about portability should
41523     indicate explicitly in each bit-field whether it is signed or not.
41524     In this way, they write programs which have the same meaning in
41525     both C dialects.)
41526
41527   * Undefining `__STDC__' when `-ansi' is not used.
41528
41529     Currently, GCC defines `__STDC__' unconditionally.  This provides
41530     good results in practice.
41531
41532     Programmers normally use conditionals on `__STDC__' to ask whether
41533     it is safe to use certain features of ISO C, such as function
41534     prototypes or ISO token concatenation.  Since plain `gcc' supports
41535     all the features of ISO C, the correct answer to these questions is
41536     "yes".
41537
41538     Some users try to use `__STDC__' to check for the availability of
41539     certain library facilities.  This is actually incorrect usage in
41540     an ISO C program, because the ISO C standard says that a conforming
41541     freestanding implementation should define `__STDC__' even though it
41542     does not have the library facilities.  `gcc -ansi -pedantic' is a
41543     conforming freestanding implementation, and it is therefore
41544     required to define `__STDC__', even though it does not come with
41545     an ISO C library.
41546
41547     Sometimes people say that defining `__STDC__' in a compiler that
41548     does not completely conform to the ISO C standard somehow violates
41549     the standard.  This is illogical.  The standard is a standard for
41550     compilers that claim to support ISO C, such as `gcc -ansi'--not
41551     for other compilers such as plain `gcc'.  Whatever the ISO C
41552     standard says is relevant to the design of plain `gcc' without
41553     `-ansi' only for pragmatic reasons, not as a requirement.
41554
41555     GCC normally defines `__STDC__' to be 1, and in addition defines
41556     `__STRICT_ANSI__' if you specify the `-ansi' option, or a `-std'
41557     option for strict conformance to some version of ISO C.  On some
41558     hosts, system include files use a different convention, where
41559     `__STDC__' is normally 0, but is 1 if the user specifies strict
41560     conformance to the C Standard.  GCC follows the host convention
41561     when processing system include files, but when processing user
41562     files it follows the usual GNU C convention.
41563
41564   * Undefining `__STDC__' in C++.
41565
41566     Programs written to compile with C++-to-C translators get the
41567     value of `__STDC__' that goes with the C compiler that is
41568     subsequently used.  These programs must test `__STDC__' to
41569     determine what kind of C preprocessor that compiler uses: whether
41570     they should concatenate tokens in the ISO C fashion or in the
41571     traditional fashion.
41572
41573     These programs work properly with GNU C++ if `__STDC__' is defined.
41574     They would not work otherwise.
41575
41576     In addition, many header files are written to provide prototypes
41577     in ISO C but not in traditional C.  Many of these header files can
41578     work without change in C++ provided `__STDC__' is defined.  If
41579     `__STDC__' is not defined, they will all fail, and will all need
41580     to be changed to test explicitly for C++ as well.
41581
41582   * Deleting "empty" loops.
41583
41584     Historically, GCC has not deleted "empty" loops under the
41585     assumption that the most likely reason you would put one in a
41586     program is to have a delay, so deleting them will not make real
41587     programs run any faster.
41588
41589     However, the rationale here is that optimization of a nonempty loop
41590     cannot produce an empty one. This held for carefully written C
41591     compiled with less powerful optimizers but is not always the case
41592     for carefully written C++ or with more powerful optimizers.  Thus
41593     GCC will remove operations from loops whenever it can determine
41594     those operations are not externally visible (apart from the time
41595     taken to execute them, of course).  In case the loop can be proved
41596     to be finite, GCC will also remove the loop itself.
41597
41598     Be aware of this when performing timing tests, for instance the
41599     following loop can be completely removed, provided
41600     `some_expression' can provably not change any global state.
41601
41602          {
41603             int sum = 0;
41604             int ix;
41605
41606             for (ix = 0; ix != 10000; ix++)
41607                sum += some_expression;
41608          }
41609
41610     Even though `sum' is accumulated in the loop, no use is made of
41611     that summation, so the accumulation can be removed.
41612
41613   * Making side effects happen in the same order as in some other
41614     compiler.
41615
41616     It is never safe to depend on the order of evaluation of side
41617     effects.  For example, a function call like this may very well
41618     behave differently from one compiler to another:
41619
41620          void func (int, int);
41621
41622          int i = 2;
41623          func (i++, i++);
41624
41625     There is no guarantee (in either the C or the C++ standard language
41626     definitions) that the increments will be evaluated in any
41627     particular order.  Either increment might happen first.  `func'
41628     might get the arguments `2, 3', or it might get `3, 2', or even
41629     `2, 2'.
41630
41631   * Making certain warnings into errors by default.
41632
41633     Some ISO C testsuites report failure when the compiler does not
41634     produce an error message for a certain program.
41635
41636     ISO C requires a "diagnostic" message for certain kinds of invalid
41637     programs, but a warning is defined by GCC to count as a
41638     diagnostic.  If GCC produces a warning but not an error, that is
41639     correct ISO C support.  If testsuites call this "failure", they
41640     should be run with the GCC option `-pedantic-errors', which will
41641     turn these warnings into errors.
41642
41643
41644
41645File: gcc.info,  Node: Warnings and Errors,  Prev: Non-bugs,  Up: Trouble
41646
4164711.10 Warning Messages and Error Messages
41648=========================================
41649
41650The GNU compiler can produce two kinds of diagnostics: errors and
41651warnings.  Each kind has a different purpose:
41652
41653     "Errors" report problems that make it impossible to compile your
41654     program.  GCC reports errors with the source file name and line
41655     number where the problem is apparent.
41656
41657     "Warnings" report other unusual conditions in your code that _may_
41658     indicate a problem, although compilation can (and does) proceed.
41659     Warning messages also report the source file name and line number,
41660     but include the text `warning:' to distinguish them from error
41661     messages.
41662
41663 Warnings may indicate danger points where you should check to make sure
41664that your program really does what you intend; or the use of obsolete
41665features; or the use of nonstandard features of GNU C or C++.  Many
41666warnings are issued only if you ask for them, with one of the `-W'
41667options (for instance, `-Wall' requests a variety of useful warnings).
41668
41669 GCC always tries to compile your program if possible; it never
41670gratuitously rejects a program whose meaning is clear merely because
41671(for instance) it fails to conform to a standard.  In some cases,
41672however, the C and C++ standards specify that certain extensions are
41673forbidden, and a diagnostic _must_ be issued by a conforming compiler.
41674The `-pedantic' option tells GCC to issue warnings in such cases;
41675`-pedantic-errors' says to make them errors instead.  This does not
41676mean that _all_ non-ISO constructs get warnings or errors.
41677
41678 *Note Options to Request or Suppress Warnings: Warning Options, for
41679more detail on these and related command-line options.
41680
41681
41682File: gcc.info,  Node: Bugs,  Next: Service,  Prev: Trouble,  Up: Top
41683
4168412 Reporting Bugs
41685*****************
41686
41687Your bug reports play an essential role in making GCC reliable.
41688
41689 When you encounter a problem, the first thing to do is to see if it is
41690already known.  *Note Trouble::.  If it isn't known, then you should
41691report the problem.
41692
41693* Menu:
41694
41695* Criteria:  Bug Criteria.   Have you really found a bug?
41696* Reporting: Bug Reporting.  How to report a bug effectively.
41697* Known: Trouble.            Known problems.
41698* Help: Service.             Where to ask for help.
41699
41700
41701File: gcc.info,  Node: Bug Criteria,  Next: Bug Reporting,  Up: Bugs
41702
4170312.1 Have You Found a Bug?
41704==========================
41705
41706If you are not sure whether you have found a bug, here are some
41707guidelines:
41708
41709   * If the compiler gets a fatal signal, for any input whatever, that
41710     is a compiler bug.  Reliable compilers never crash.
41711
41712   * If the compiler produces invalid assembly code, for any input
41713     whatever (except an `asm' statement), that is a compiler bug,
41714     unless the compiler reports errors (not just warnings) which would
41715     ordinarily prevent the assembler from being run.
41716
41717   * If the compiler produces valid assembly code that does not
41718     correctly execute the input source code, that is a compiler bug.
41719
41720     However, you must double-check to make sure, because you may have a
41721     program whose behavior is undefined, which happened by chance to
41722     give the desired results with another C or C++ compiler.
41723
41724     For example, in many nonoptimizing compilers, you can write `x;'
41725     at the end of a function instead of `return x;', with the same
41726     results.  But the value of the function is undefined if `return'
41727     is omitted; it is not a bug when GCC produces different results.
41728
41729     Problems often result from expressions with two increment
41730     operators, as in `f (*p++, *p++)'.  Your previous compiler might
41731     have interpreted that expression the way you intended; GCC might
41732     interpret it another way.  Neither compiler is wrong.  The bug is
41733     in your code.
41734
41735     After you have localized the error to a single source line, it
41736     should be easy to check for these things.  If your program is
41737     correct and well defined, you have found a compiler bug.
41738
41739   * If the compiler produces an error message for valid input, that is
41740     a compiler bug.
41741
41742   * If the compiler does not produce an error message for invalid
41743     input, that is a compiler bug.  However, you should note that your
41744     idea of "invalid input" might be someone else's idea of "an
41745     extension" or "support for traditional practice".
41746
41747   * If you are an experienced user of one of the languages GCC
41748     supports, your suggestions for improvement of GCC are welcome in
41749     any case.
41750
41751
41752File: gcc.info,  Node: Bug Reporting,  Prev: Bug Criteria,  Up: Bugs
41753
4175412.2 How and where to Report Bugs
41755=================================
41756
41757Bugs should be reported to the bug database at
41758`https://support.codesourcery.com/GNUToolchain/'.
41759
41760
41761File: gcc.info,  Node: Service,  Next: Contributing,  Prev: Bugs,  Up: Top
41762
4176313 How To Get Help with GCC
41764***************************
41765
41766If you need help installing, using or changing GCC, there are two ways
41767to find it:
41768
41769   * Send a message to a suitable network mailing list.  First try
41770     <gcc-help@gcc.gnu.org> (for help installing or using GCC), and if
41771     that brings no response, try <gcc@gcc.gnu.org>.  For help changing
41772     GCC, ask <gcc@gcc.gnu.org>.  If you think you have found a bug in
41773     GCC, please report it following the instructions at *note Bug
41774     Reporting::.
41775
41776   * Look in the service directory for someone who might help you for a
41777     fee.  The service directory is found at
41778     `http://www.fsf.org/resources/service'.
41779
41780 For further information, see `http://gcc.gnu.org/faq.html#support'.
41781
41782
41783File: gcc.info,  Node: Contributing,  Next: Funding,  Prev: Service,  Up: Top
41784
4178514 Contributing to GCC Development
41786**********************************
41787
41788If you would like to help pretest GCC releases to assure they work well,
41789current development sources are available by SVN (see
41790`http://gcc.gnu.org/svn.html').  Source and binary snapshots are also
41791available for FTP; see `http://gcc.gnu.org/snapshots.html'.
41792
41793 If you would like to work on improvements to GCC, please read the
41794advice at these URLs:
41795
41796     `http://gcc.gnu.org/contribute.html'
41797     `http://gcc.gnu.org/contributewhy.html'
41798
41799for information on how to make useful contributions and avoid
41800duplication of effort.  Suggested projects are listed at
41801`http://gcc.gnu.org/projects/'.
41802
41803
41804File: gcc.info,  Node: Funding,  Next: GNU Project,  Prev: Contributing,  Up: Top
41805
41806Funding Free Software
41807*********************
41808
41809If you want to have more free software a few years from now, it makes
41810sense for you to help encourage people to contribute funds for its
41811development.  The most effective approach known is to encourage
41812commercial redistributors to donate.
41813
41814 Users of free software systems can boost the pace of development by
41815encouraging for-a-fee distributors to donate part of their selling price
41816to free software developers--the Free Software Foundation, and others.
41817
41818 The way to convince distributors to do this is to demand it and expect
41819it from them.  So when you compare distributors, judge them partly by
41820how much they give to free software development.  Show distributors
41821they must compete to be the one who gives the most.
41822
41823 To make this approach work, you must insist on numbers that you can
41824compare, such as, "We will donate ten dollars to the Frobnitz project
41825for each disk sold."  Don't be satisfied with a vague promise, such as
41826"A portion of the profits are donated," since it doesn't give a basis
41827for comparison.
41828
41829 Even a precise fraction "of the profits from this disk" is not very
41830meaningful, since creative accounting and unrelated business decisions
41831can greatly alter what fraction of the sales price counts as profit.
41832If the price you pay is $50, ten percent of the profit is probably less
41833than a dollar; it might be a few cents, or nothing at all.
41834
41835 Some redistributors do development work themselves.  This is useful
41836too; but to keep everyone honest, you need to inquire how much they do,
41837and what kind.  Some kinds of development make much more long-term
41838difference than others.  For example, maintaining a separate version of
41839a program contributes very little; maintaining the standard version of a
41840program for the whole community contributes much.  Easy new ports
41841contribute little, since someone else would surely do them; difficult
41842ports such as adding a new CPU to the GNU Compiler Collection
41843contribute more; major new features or packages contribute the most.
41844
41845 By establishing the idea that supporting further development is "the
41846proper thing to do" when distributing free software for a fee, we can
41847assure a steady flow of resources into making more free software.
41848
41849     Copyright (C) 1994 Free Software Foundation, Inc.
41850     Verbatim copying and redistribution of this section is permitted
41851     without royalty; alteration is not permitted.
41852
41853
41854File: gcc.info,  Node: GNU Project,  Next: Copying,  Prev: Funding,  Up: Top
41855
41856The GNU Project and GNU/Linux
41857*****************************
41858
41859The GNU Project was launched in 1984 to develop a complete Unix-like
41860operating system which is free software: the GNU system.  (GNU is a
41861recursive acronym for "GNU's Not Unix"; it is pronounced "guh-NEW".)
41862Variants of the GNU operating system, which use the kernel Linux, are
41863now widely used; though these systems are often referred to as "Linux",
41864they are more accurately called GNU/Linux systems.
41865
41866 For more information, see:
41867     `http://www.gnu.org/'
41868     `http://www.gnu.org/gnu/linux-and-gnu.html'
41869
41870
41871File: gcc.info,  Node: Copying,  Next: GNU Free Documentation License,  Prev: GNU Project,  Up: Top
41872
41873GNU General Public License
41874**************************
41875
41876                        Version 3, 29 June 2007
41877
41878     Copyright (C) 2007 Free Software Foundation, Inc. `http://fsf.org/'
41879
41880     Everyone is permitted to copy and distribute verbatim copies of this
41881     license document, but changing it is not allowed.
41882
41883Preamble
41884========
41885
41886The GNU General Public License is a free, copyleft license for software
41887and other kinds of works.
41888
41889 The licenses for most software and other practical works are designed
41890to take away your freedom to share and change the works.  By contrast,
41891the GNU General Public License is intended to guarantee your freedom to
41892share and change all versions of a program-to make sure it remains free
41893software for all its users.  We, the Free Software Foundation, use the
41894GNU General Public License for most of our software; it applies also to
41895any other work released this way by its authors.  You can apply it to
41896your programs, too.
41897
41898 When we speak of free software, we are referring to freedom, not
41899price.  Our General Public Licenses are designed to make sure that you
41900have the freedom to distribute copies of free software (and charge for
41901them if you wish), that you receive source code or can get it if you
41902want it, that you can change the software or use pieces of it in new
41903free programs, and that you know you can do these things.
41904
41905 To protect your rights, we need to prevent others from denying you
41906these rights or asking you to surrender the rights.  Therefore, you
41907have certain responsibilities if you distribute copies of the software,
41908or if you modify it: responsibilities to respect the freedom of others.
41909
41910 For example, if you distribute copies of such a program, whether
41911gratis or for a fee, you must pass on to the recipients the same
41912freedoms that you received.  You must make sure that they, too, receive
41913or can get the source code.  And you must show them these terms so they
41914know their rights.
41915
41916 Developers that use the GNU GPL protect your rights with two steps:
41917(1) assert copyright on the software, and (2) offer you this License
41918giving you legal permission to copy, distribute and/or modify it.
41919
41920 For the developers' and authors' protection, the GPL clearly explains
41921that there is no warranty for this free software.  For both users' and
41922authors' sake, the GPL requires that modified versions be marked as
41923changed, so that their problems will not be attributed erroneously to
41924authors of previous versions.
41925
41926 Some devices are designed to deny users access to install or run
41927modified versions of the software inside them, although the
41928manufacturer can do so.  This is fundamentally incompatible with the
41929aim of protecting users' freedom to change the software.  The
41930systematic pattern of such abuse occurs in the area of products for
41931individuals to use, which is precisely where it is most unacceptable.
41932Therefore, we have designed this version of the GPL to prohibit the
41933practice for those products.  If such problems arise substantially in
41934other domains, we stand ready to extend this provision to those domains
41935in future versions of the GPL, as needed to protect the freedom of
41936users.
41937
41938 Finally, every program is threatened constantly by software patents.
41939States should not allow patents to restrict development and use of
41940software on general-purpose computers, but in those that do, we wish to
41941avoid the special danger that patents applied to a free program could
41942make it effectively proprietary.  To prevent this, the GPL assures that
41943patents cannot be used to render the program non-free.
41944
41945 The precise terms and conditions for copying, distribution and
41946modification follow.
41947
41948TERMS AND CONDITIONS
41949====================
41950
41951  0. Definitions.
41952
41953     "This License" refers to version 3 of the GNU General Public
41954     License.
41955
41956     "Copyright" also means copyright-like laws that apply to other
41957     kinds of works, such as semiconductor masks.
41958
41959     "The Program" refers to any copyrightable work licensed under this
41960     License.  Each licensee is addressed as "you".  "Licensees" and
41961     "recipients" may be individuals or organizations.
41962
41963     To "modify" a work means to copy from or adapt all or part of the
41964     work in a fashion requiring copyright permission, other than the
41965     making of an exact copy.  The resulting work is called a "modified
41966     version" of the earlier work or a work "based on" the earlier work.
41967
41968     A "covered work" means either the unmodified Program or a work
41969     based on the Program.
41970
41971     To "propagate" a work means to do anything with it that, without
41972     permission, would make you directly or secondarily liable for
41973     infringement under applicable copyright law, except executing it
41974     on a computer or modifying a private copy.  Propagation includes
41975     copying, distribution (with or without modification), making
41976     available to the public, and in some countries other activities as
41977     well.
41978
41979     To "convey" a work means any kind of propagation that enables other
41980     parties to make or receive copies.  Mere interaction with a user
41981     through a computer network, with no transfer of a copy, is not
41982     conveying.
41983
41984     An interactive user interface displays "Appropriate Legal Notices"
41985     to the extent that it includes a convenient and prominently visible
41986     feature that (1) displays an appropriate copyright notice, and (2)
41987     tells the user that there is no warranty for the work (except to
41988     the extent that warranties are provided), that licensees may
41989     convey the work under this License, and how to view a copy of this
41990     License.  If the interface presents a list of user commands or
41991     options, such as a menu, a prominent item in the list meets this
41992     criterion.
41993
41994  1. Source Code.
41995
41996     The "source code" for a work means the preferred form of the work
41997     for making modifications to it.  "Object code" means any
41998     non-source form of a work.
41999
42000     A "Standard Interface" means an interface that either is an
42001     official standard defined by a recognized standards body, or, in
42002     the case of interfaces specified for a particular programming
42003     language, one that is widely used among developers working in that
42004     language.
42005
42006     The "System Libraries" of an executable work include anything,
42007     other than the work as a whole, that (a) is included in the normal
42008     form of packaging a Major Component, but which is not part of that
42009     Major Component, and (b) serves only to enable use of the work
42010     with that Major Component, or to implement a Standard Interface
42011     for which an implementation is available to the public in source
42012     code form.  A "Major Component", in this context, means a major
42013     essential component (kernel, window system, and so on) of the
42014     specific operating system (if any) on which the executable work
42015     runs, or a compiler used to produce the work, or an object code
42016     interpreter used to run it.
42017
42018     The "Corresponding Source" for a work in object code form means all
42019     the source code needed to generate, install, and (for an executable
42020     work) run the object code and to modify the work, including
42021     scripts to control those activities.  However, it does not include
42022     the work's System Libraries, or general-purpose tools or generally
42023     available free programs which are used unmodified in performing
42024     those activities but which are not part of the work.  For example,
42025     Corresponding Source includes interface definition files
42026     associated with source files for the work, and the source code for
42027     shared libraries and dynamically linked subprograms that the work
42028     is specifically designed to require, such as by intimate data
42029     communication or control flow between those subprograms and other
42030     parts of the work.
42031
42032     The Corresponding Source need not include anything that users can
42033     regenerate automatically from other parts of the Corresponding
42034     Source.
42035
42036     The Corresponding Source for a work in source code form is that
42037     same work.
42038
42039  2. Basic Permissions.
42040
42041     All rights granted under this License are granted for the term of
42042     copyright on the Program, and are irrevocable provided the stated
42043     conditions are met.  This License explicitly affirms your unlimited
42044     permission to run the unmodified Program.  The output from running
42045     a covered work is covered by this License only if the output,
42046     given its content, constitutes a covered work.  This License
42047     acknowledges your rights of fair use or other equivalent, as
42048     provided by copyright law.
42049
42050     You may make, run and propagate covered works that you do not
42051     convey, without conditions so long as your license otherwise
42052     remains in force.  You may convey covered works to others for the
42053     sole purpose of having them make modifications exclusively for
42054     you, or provide you with facilities for running those works,
42055     provided that you comply with the terms of this License in
42056     conveying all material for which you do not control copyright.
42057     Those thus making or running the covered works for you must do so
42058     exclusively on your behalf, under your direction and control, on
42059     terms that prohibit them from making any copies of your
42060     copyrighted material outside their relationship with you.
42061
42062     Conveying under any other circumstances is permitted solely under
42063     the conditions stated below.  Sublicensing is not allowed; section
42064     10 makes it unnecessary.
42065
42066  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
42067
42068     No covered work shall be deemed part of an effective technological
42069     measure under any applicable law fulfilling obligations under
42070     article 11 of the WIPO copyright treaty adopted on 20 December
42071     1996, or similar laws prohibiting or restricting circumvention of
42072     such measures.
42073
42074     When you convey a covered work, you waive any legal power to forbid
42075     circumvention of technological measures to the extent such
42076     circumvention is effected by exercising rights under this License
42077     with respect to the covered work, and you disclaim any intention
42078     to limit operation or modification of the work as a means of
42079     enforcing, against the work's users, your or third parties' legal
42080     rights to forbid circumvention of technological measures.
42081
42082  4. Conveying Verbatim Copies.
42083
42084     You may convey verbatim copies of the Program's source code as you
42085     receive it, in any medium, provided that you conspicuously and
42086     appropriately publish on each copy an appropriate copyright notice;
42087     keep intact all notices stating that this License and any
42088     non-permissive terms added in accord with section 7 apply to the
42089     code; keep intact all notices of the absence of any warranty; and
42090     give all recipients a copy of this License along with the Program.
42091
42092     You may charge any price or no price for each copy that you convey,
42093     and you may offer support or warranty protection for a fee.
42094
42095  5. Conveying Modified Source Versions.
42096
42097     You may convey a work based on the Program, or the modifications to
42098     produce it from the Program, in the form of source code under the
42099     terms of section 4, provided that you also meet all of these
42100     conditions:
42101
42102       a. The work must carry prominent notices stating that you
42103          modified it, and giving a relevant date.
42104
42105       b. The work must carry prominent notices stating that it is
42106          released under this License and any conditions added under
42107          section 7.  This requirement modifies the requirement in
42108          section 4 to "keep intact all notices".
42109
42110       c. You must license the entire work, as a whole, under this
42111          License to anyone who comes into possession of a copy.  This
42112          License will therefore apply, along with any applicable
42113          section 7 additional terms, to the whole of the work, and all
42114          its parts, regardless of how they are packaged.  This License
42115          gives no permission to license the work in any other way, but
42116          it does not invalidate such permission if you have separately
42117          received it.
42118
42119       d. If the work has interactive user interfaces, each must display
42120          Appropriate Legal Notices; however, if the Program has
42121          interactive interfaces that do not display Appropriate Legal
42122          Notices, your work need not make them do so.
42123
42124     A compilation of a covered work with other separate and independent
42125     works, which are not by their nature extensions of the covered
42126     work, and which are not combined with it such as to form a larger
42127     program, in or on a volume of a storage or distribution medium, is
42128     called an "aggregate" if the compilation and its resulting
42129     copyright are not used to limit the access or legal rights of the
42130     compilation's users beyond what the individual works permit.
42131     Inclusion of a covered work in an aggregate does not cause this
42132     License to apply to the other parts of the aggregate.
42133
42134  6. Conveying Non-Source Forms.
42135
42136     You may convey a covered work in object code form under the terms
42137     of sections 4 and 5, provided that you also convey the
42138     machine-readable Corresponding Source under the terms of this
42139     License, in one of these ways:
42140
42141       a. Convey the object code in, or embodied in, a physical product
42142          (including a physical distribution medium), accompanied by the
42143          Corresponding Source fixed on a durable physical medium
42144          customarily used for software interchange.
42145
42146       b. Convey the object code in, or embodied in, a physical product
42147          (including a physical distribution medium), accompanied by a
42148          written offer, valid for at least three years and valid for
42149          as long as you offer spare parts or customer support for that
42150          product model, to give anyone who possesses the object code
42151          either (1) a copy of the Corresponding Source for all the
42152          software in the product that is covered by this License, on a
42153          durable physical medium customarily used for software
42154          interchange, for a price no more than your reasonable cost of
42155          physically performing this conveying of source, or (2) access
42156          to copy the Corresponding Source from a network server at no
42157          charge.
42158
42159       c. Convey individual copies of the object code with a copy of
42160          the written offer to provide the Corresponding Source.  This
42161          alternative is allowed only occasionally and noncommercially,
42162          and only if you received the object code with such an offer,
42163          in accord with subsection 6b.
42164
42165       d. Convey the object code by offering access from a designated
42166          place (gratis or for a charge), and offer equivalent access
42167          to the Corresponding Source in the same way through the same
42168          place at no further charge.  You need not require recipients
42169          to copy the Corresponding Source along with the object code.
42170          If the place to copy the object code is a network server, the
42171          Corresponding Source may be on a different server (operated
42172          by you or a third party) that supports equivalent copying
42173          facilities, provided you maintain clear directions next to
42174          the object code saying where to find the Corresponding Source.
42175          Regardless of what server hosts the Corresponding Source, you
42176          remain obligated to ensure that it is available for as long
42177          as needed to satisfy these requirements.
42178
42179       e. Convey the object code using peer-to-peer transmission,
42180          provided you inform other peers where the object code and
42181          Corresponding Source of the work are being offered to the
42182          general public at no charge under subsection 6d.
42183
42184
42185     A separable portion of the object code, whose source code is
42186     excluded from the Corresponding Source as a System Library, need
42187     not be included in conveying the object code work.
42188
42189     A "User Product" is either (1) a "consumer product", which means
42190     any tangible personal property which is normally used for personal,
42191     family, or household purposes, or (2) anything designed or sold for
42192     incorporation into a dwelling.  In determining whether a product
42193     is a consumer product, doubtful cases shall be resolved in favor of
42194     coverage.  For a particular product received by a particular user,
42195     "normally used" refers to a typical or common use of that class of
42196     product, regardless of the status of the particular user or of the
42197     way in which the particular user actually uses, or expects or is
42198     expected to use, the product.  A product is a consumer product
42199     regardless of whether the product has substantial commercial,
42200     industrial or non-consumer uses, unless such uses represent the
42201     only significant mode of use of the product.
42202
42203     "Installation Information" for a User Product means any methods,
42204     procedures, authorization keys, or other information required to
42205     install and execute modified versions of a covered work in that
42206     User Product from a modified version of its Corresponding Source.
42207     The information must suffice to ensure that the continued
42208     functioning of the modified object code is in no case prevented or
42209     interfered with solely because modification has been made.
42210
42211     If you convey an object code work under this section in, or with,
42212     or specifically for use in, a User Product, and the conveying
42213     occurs as part of a transaction in which the right of possession
42214     and use of the User Product is transferred to the recipient in
42215     perpetuity or for a fixed term (regardless of how the transaction
42216     is characterized), the Corresponding Source conveyed under this
42217     section must be accompanied by the Installation Information.  But
42218     this requirement does not apply if neither you nor any third party
42219     retains the ability to install modified object code on the User
42220     Product (for example, the work has been installed in ROM).
42221
42222     The requirement to provide Installation Information does not
42223     include a requirement to continue to provide support service,
42224     warranty, or updates for a work that has been modified or
42225     installed by the recipient, or for the User Product in which it
42226     has been modified or installed.  Access to a network may be denied
42227     when the modification itself materially and adversely affects the
42228     operation of the network or violates the rules and protocols for
42229     communication across the network.
42230
42231     Corresponding Source conveyed, and Installation Information
42232     provided, in accord with this section must be in a format that is
42233     publicly documented (and with an implementation available to the
42234     public in source code form), and must require no special password
42235     or key for unpacking, reading or copying.
42236
42237  7. Additional Terms.
42238
42239     "Additional permissions" are terms that supplement the terms of
42240     this License by making exceptions from one or more of its
42241     conditions.  Additional permissions that are applicable to the
42242     entire Program shall be treated as though they were included in
42243     this License, to the extent that they are valid under applicable
42244     law.  If additional permissions apply only to part of the Program,
42245     that part may be used separately under those permissions, but the
42246     entire Program remains governed by this License without regard to
42247     the additional permissions.
42248
42249     When you convey a copy of a covered work, you may at your option
42250     remove any additional permissions from that copy, or from any part
42251     of it.  (Additional permissions may be written to require their own
42252     removal in certain cases when you modify the work.)  You may place
42253     additional permissions on material, added by you to a covered work,
42254     for which you have or can give appropriate copyright permission.
42255
42256     Notwithstanding any other provision of this License, for material
42257     you add to a covered work, you may (if authorized by the copyright
42258     holders of that material) supplement the terms of this License
42259     with terms:
42260
42261       a. Disclaiming warranty or limiting liability differently from
42262          the terms of sections 15 and 16 of this License; or
42263
42264       b. Requiring preservation of specified reasonable legal notices
42265          or author attributions in that material or in the Appropriate
42266          Legal Notices displayed by works containing it; or
42267
42268       c. Prohibiting misrepresentation of the origin of that material,
42269          or requiring that modified versions of such material be
42270          marked in reasonable ways as different from the original
42271          version; or
42272
42273       d. Limiting the use for publicity purposes of names of licensors
42274          or authors of the material; or
42275
42276       e. Declining to grant rights under trademark law for use of some
42277          trade names, trademarks, or service marks; or
42278
42279       f. Requiring indemnification of licensors and authors of that
42280          material by anyone who conveys the material (or modified
42281          versions of it) with contractual assumptions of liability to
42282          the recipient, for any liability that these contractual
42283          assumptions directly impose on those licensors and authors.
42284
42285     All other non-permissive additional terms are considered "further
42286     restrictions" within the meaning of section 10.  If the Program as
42287     you received it, or any part of it, contains a notice stating that
42288     it is governed by this License along with a term that is a further
42289     restriction, you may remove that term.  If a license document
42290     contains a further restriction but permits relicensing or
42291     conveying under this License, you may add to a covered work
42292     material governed by the terms of that license document, provided
42293     that the further restriction does not survive such relicensing or
42294     conveying.
42295
42296     If you add terms to a covered work in accord with this section, you
42297     must place, in the relevant source files, a statement of the
42298     additional terms that apply to those files, or a notice indicating
42299     where to find the applicable terms.
42300
42301     Additional terms, permissive or non-permissive, may be stated in
42302     the form of a separately written license, or stated as exceptions;
42303     the above requirements apply either way.
42304
42305  8. Termination.
42306
42307     You may not propagate or modify a covered work except as expressly
42308     provided under this License.  Any attempt otherwise to propagate or
42309     modify it is void, and will automatically terminate your rights
42310     under this License (including any patent licenses granted under
42311     the third paragraph of section 11).
42312
42313     However, if you cease all violation of this License, then your
42314     license from a particular copyright holder is reinstated (a)
42315     provisionally, unless and until the copyright holder explicitly
42316     and finally terminates your license, and (b) permanently, if the
42317     copyright holder fails to notify you of the violation by some
42318     reasonable means prior to 60 days after the cessation.
42319
42320     Moreover, your license from a particular copyright holder is
42321     reinstated permanently if the copyright holder notifies you of the
42322     violation by some reasonable means, this is the first time you have
42323     received notice of violation of this License (for any work) from
42324     that copyright holder, and you cure the violation prior to 30 days
42325     after your receipt of the notice.
42326
42327     Termination of your rights under this section does not terminate
42328     the licenses of parties who have received copies or rights from
42329     you under this License.  If your rights have been terminated and
42330     not permanently reinstated, you do not qualify to receive new
42331     licenses for the same material under section 10.
42332
42333  9. Acceptance Not Required for Having Copies.
42334
42335     You are not required to accept this License in order to receive or
42336     run a copy of the Program.  Ancillary propagation of a covered work
42337     occurring solely as a consequence of using peer-to-peer
42338     transmission to receive a copy likewise does not require
42339     acceptance.  However, nothing other than this License grants you
42340     permission to propagate or modify any covered work.  These actions
42341     infringe copyright if you do not accept this License.  Therefore,
42342     by modifying or propagating a covered work, you indicate your
42343     acceptance of this License to do so.
42344
42345 10. Automatic Licensing of Downstream Recipients.
42346
42347     Each time you convey a covered work, the recipient automatically
42348     receives a license from the original licensors, to run, modify and
42349     propagate that work, subject to this License.  You are not
42350     responsible for enforcing compliance by third parties with this
42351     License.
42352
42353     An "entity transaction" is a transaction transferring control of an
42354     organization, or substantially all assets of one, or subdividing an
42355     organization, or merging organizations.  If propagation of a
42356     covered work results from an entity transaction, each party to that
42357     transaction who receives a copy of the work also receives whatever
42358     licenses to the work the party's predecessor in interest had or
42359     could give under the previous paragraph, plus a right to
42360     possession of the Corresponding Source of the work from the
42361     predecessor in interest, if the predecessor has it or can get it
42362     with reasonable efforts.
42363
42364     You may not impose any further restrictions on the exercise of the
42365     rights granted or affirmed under this License.  For example, you
42366     may not impose a license fee, royalty, or other charge for
42367     exercise of rights granted under this License, and you may not
42368     initiate litigation (including a cross-claim or counterclaim in a
42369     lawsuit) alleging that any patent claim is infringed by making,
42370     using, selling, offering for sale, or importing the Program or any
42371     portion of it.
42372
42373 11. Patents.
42374
42375     A "contributor" is a copyright holder who authorizes use under this
42376     License of the Program or a work on which the Program is based.
42377     The work thus licensed is called the contributor's "contributor
42378     version".
42379
42380     A contributor's "essential patent claims" are all patent claims
42381     owned or controlled by the contributor, whether already acquired or
42382     hereafter acquired, that would be infringed by some manner,
42383     permitted by this License, of making, using, or selling its
42384     contributor version, but do not include claims that would be
42385     infringed only as a consequence of further modification of the
42386     contributor version.  For purposes of this definition, "control"
42387     includes the right to grant patent sublicenses in a manner
42388     consistent with the requirements of this License.
42389
42390     Each contributor grants you a non-exclusive, worldwide,
42391     royalty-free patent license under the contributor's essential
42392     patent claims, to make, use, sell, offer for sale, import and
42393     otherwise run, modify and propagate the contents of its
42394     contributor version.
42395
42396     In the following three paragraphs, a "patent license" is any
42397     express agreement or commitment, however denominated, not to
42398     enforce a patent (such as an express permission to practice a
42399     patent or covenant not to sue for patent infringement).  To
42400     "grant" such a patent license to a party means to make such an
42401     agreement or commitment not to enforce a patent against the party.
42402
42403     If you convey a covered work, knowingly relying on a patent
42404     license, and the Corresponding Source of the work is not available
42405     for anyone to copy, free of charge and under the terms of this
42406     License, through a publicly available network server or other
42407     readily accessible means, then you must either (1) cause the
42408     Corresponding Source to be so available, or (2) arrange to deprive
42409     yourself of the benefit of the patent license for this particular
42410     work, or (3) arrange, in a manner consistent with the requirements
42411     of this License, to extend the patent license to downstream
42412     recipients.  "Knowingly relying" means you have actual knowledge
42413     that, but for the patent license, your conveying the covered work
42414     in a country, or your recipient's use of the covered work in a
42415     country, would infringe one or more identifiable patents in that
42416     country that you have reason to believe are valid.
42417
42418     If, pursuant to or in connection with a single transaction or
42419     arrangement, you convey, or propagate by procuring conveyance of, a
42420     covered work, and grant a patent license to some of the parties
42421     receiving the covered work authorizing them to use, propagate,
42422     modify or convey a specific copy of the covered work, then the
42423     patent license you grant is automatically extended to all
42424     recipients of the covered work and works based on it.
42425
42426     A patent license is "discriminatory" if it does not include within
42427     the scope of its coverage, prohibits the exercise of, or is
42428     conditioned on the non-exercise of one or more of the rights that
42429     are specifically granted under this License.  You may not convey a
42430     covered work if you are a party to an arrangement with a third
42431     party that is in the business of distributing software, under
42432     which you make payment to the third party based on the extent of
42433     your activity of conveying the work, and under which the third
42434     party grants, to any of the parties who would receive the covered
42435     work from you, a discriminatory patent license (a) in connection
42436     with copies of the covered work conveyed by you (or copies made
42437     from those copies), or (b) primarily for and in connection with
42438     specific products or compilations that contain the covered work,
42439     unless you entered into that arrangement, or that patent license
42440     was granted, prior to 28 March 2007.
42441
42442     Nothing in this License shall be construed as excluding or limiting
42443     any implied license or other defenses to infringement that may
42444     otherwise be available to you under applicable patent law.
42445
42446 12. No Surrender of Others' Freedom.
42447
42448     If conditions are imposed on you (whether by court order,
42449     agreement or otherwise) that contradict the conditions of this
42450     License, they do not excuse you from the conditions of this
42451     License.  If you cannot convey a covered work so as to satisfy
42452     simultaneously your obligations under this License and any other
42453     pertinent obligations, then as a consequence you may not convey it
42454     at all.  For example, if you agree to terms that obligate you to
42455     collect a royalty for further conveying from those to whom you
42456     convey the Program, the only way you could satisfy both those
42457     terms and this License would be to refrain entirely from conveying
42458     the Program.
42459
42460 13. Use with the GNU Affero General Public License.
42461
42462     Notwithstanding any other provision of this License, you have
42463     permission to link or combine any covered work with a work licensed
42464     under version 3 of the GNU Affero General Public License into a
42465     single combined work, and to convey the resulting work.  The terms
42466     of this License will continue to apply to the part which is the
42467     covered work, but the special requirements of the GNU Affero
42468     General Public License, section 13, concerning interaction through
42469     a network will apply to the combination as such.
42470
42471 14. Revised Versions of this License.
42472
42473     The Free Software Foundation may publish revised and/or new
42474     versions of the GNU General Public License from time to time.
42475     Such new versions will be similar in spirit to the present
42476     version, but may differ in detail to address new problems or
42477     concerns.
42478
42479     Each version is given a distinguishing version number.  If the
42480     Program specifies that a certain numbered version of the GNU
42481     General Public License "or any later version" applies to it, you
42482     have the option of following the terms and conditions either of
42483     that numbered version or of any later version published by the
42484     Free Software Foundation.  If the Program does not specify a
42485     version number of the GNU General Public License, you may choose
42486     any version ever published by the Free Software Foundation.
42487
42488     If the Program specifies that a proxy can decide which future
42489     versions of the GNU General Public License can be used, that
42490     proxy's public statement of acceptance of a version permanently
42491     authorizes you to choose that version for the Program.
42492
42493     Later license versions may give you additional or different
42494     permissions.  However, no additional obligations are imposed on any
42495     author or copyright holder as a result of your choosing to follow a
42496     later version.
42497
42498 15. Disclaimer of Warranty.
42499
42500     THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
42501     APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE
42502     COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS"
42503     WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED,
42504     INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
42505     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE
42506     RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.
42507     SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL
42508     NECESSARY SERVICING, REPAIR OR CORRECTION.
42509
42510 16. Limitation of Liability.
42511
42512     IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
42513     WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES
42514     AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU
42515     FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
42516     CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE
42517     THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA
42518     BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
42519     PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
42520     PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF
42521     THE POSSIBILITY OF SUCH DAMAGES.
42522
42523 17. Interpretation of Sections 15 and 16.
42524
42525     If the disclaimer of warranty and limitation of liability provided
42526     above cannot be given local legal effect according to their terms,
42527     reviewing courts shall apply local law that most closely
42528     approximates an absolute waiver of all civil liability in
42529     connection with the Program, unless a warranty or assumption of
42530     liability accompanies a copy of the Program in return for a fee.
42531
42532
42533END OF TERMS AND CONDITIONS
42534===========================
42535
42536How to Apply These Terms to Your New Programs
42537=============================================
42538
42539If you develop a new program, and you want it to be of the greatest
42540possible use to the public, the best way to achieve this is to make it
42541free software which everyone can redistribute and change under these
42542terms.
42543
42544 To do so, attach the following notices to the program.  It is safest
42545to attach them to the start of each source file to most effectively
42546state the exclusion of warranty; and each file should have at least the
42547"copyright" line and a pointer to where the full notice is found.
42548
42549     ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES.
42550     Copyright (C) YEAR NAME OF AUTHOR
42551
42552     This program is free software: you can redistribute it and/or modify
42553     it under the terms of the GNU General Public License as published by
42554     the Free Software Foundation, either version 3 of the License, or (at
42555     your option) any later version.
42556
42557     This program is distributed in the hope that it will be useful, but
42558     WITHOUT ANY WARRANTY; without even the implied warranty of
42559     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
42560     General Public License for more details.
42561
42562     You should have received a copy of the GNU General Public License
42563     along with this program.  If not, see `http://www.gnu.org/licenses/'.
42564
42565 Also add information on how to contact you by electronic and paper
42566mail.
42567
42568 If the program does terminal interaction, make it output a short
42569notice like this when it starts in an interactive mode:
42570
42571     PROGRAM Copyright (C) YEAR NAME OF AUTHOR
42572     This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
42573     This is free software, and you are welcome to redistribute it
42574     under certain conditions; type `show c' for details.
42575
42576 The hypothetical commands `show w' and `show c' should show the
42577appropriate parts of the General Public License.  Of course, your
42578program's commands might be different; for a GUI interface, you would
42579use an "about box".
42580
42581 You should also get your employer (if you work as a programmer) or
42582school, if any, to sign a "copyright disclaimer" for the program, if
42583necessary.  For more information on this, and how to apply and follow
42584the GNU GPL, see `http://www.gnu.org/licenses/'.
42585
42586 The GNU General Public License does not permit incorporating your
42587program into proprietary programs.  If your program is a subroutine
42588library, you may consider it more useful to permit linking proprietary
42589applications with the library.  If this is what you want to do, use the
42590GNU Lesser General Public License instead of this License.  But first,
42591please read `http://www.gnu.org/philosophy/why-not-lgpl.html'.
42592
42593
42594File: gcc.info,  Node: GNU Free Documentation License,  Next: Contributors,  Prev: Copying,  Up: Top
42595
42596GNU Free Documentation License
42597******************************
42598
42599                     Version 1.3, 3 November 2008
42600
42601     Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
42602     `http://fsf.org/'
42603
42604     Everyone is permitted to copy and distribute verbatim copies
42605     of this license document, but changing it is not allowed.
42606
42607  0. PREAMBLE
42608
42609     The purpose of this License is to make a manual, textbook, or other
42610     functional and useful document "free" in the sense of freedom: to
42611     assure everyone the effective freedom to copy and redistribute it,
42612     with or without modifying it, either commercially or
42613     noncommercially.  Secondarily, this License preserves for the
42614     author and publisher a way to get credit for their work, while not
42615     being considered responsible for modifications made by others.
42616
42617     This License is a kind of "copyleft", which means that derivative
42618     works of the document must themselves be free in the same sense.
42619     It complements the GNU General Public License, which is a copyleft
42620     license designed for free software.
42621
42622     We have designed this License in order to use it for manuals for
42623     free software, because free software needs free documentation: a
42624     free program should come with manuals providing the same freedoms
42625     that the software does.  But this License is not limited to
42626     software manuals; it can be used for any textual work, regardless
42627     of subject matter or whether it is published as a printed book.
42628     We recommend this License principally for works whose purpose is
42629     instruction or reference.
42630
42631  1. APPLICABILITY AND DEFINITIONS
42632
42633     This License applies to any manual or other work, in any medium,
42634     that contains a notice placed by the copyright holder saying it
42635     can be distributed under the terms of this License.  Such a notice
42636     grants a world-wide, royalty-free license, unlimited in duration,
42637     to use that work under the conditions stated herein.  The
42638     "Document", below, refers to any such manual or work.  Any member
42639     of the public is a licensee, and is addressed as "you".  You
42640     accept the license if you copy, modify or distribute the work in a
42641     way requiring permission under copyright law.
42642
42643     A "Modified Version" of the Document means any work containing the
42644     Document or a portion of it, either copied verbatim, or with
42645     modifications and/or translated into another language.
42646
42647     A "Secondary Section" is a named appendix or a front-matter section
42648     of the Document that deals exclusively with the relationship of the
42649     publishers or authors of the Document to the Document's overall
42650     subject (or to related matters) and contains nothing that could
42651     fall directly within that overall subject.  (Thus, if the Document
42652     is in part a textbook of mathematics, a Secondary Section may not
42653     explain any mathematics.)  The relationship could be a matter of
42654     historical connection with the subject or with related matters, or
42655     of legal, commercial, philosophical, ethical or political position
42656     regarding them.
42657
42658     The "Invariant Sections" are certain Secondary Sections whose
42659     titles are designated, as being those of Invariant Sections, in
42660     the notice that says that the Document is released under this
42661     License.  If a section does not fit the above definition of
42662     Secondary then it is not allowed to be designated as Invariant.
42663     The Document may contain zero Invariant Sections.  If the Document
42664     does not identify any Invariant Sections then there are none.
42665
42666     The "Cover Texts" are certain short passages of text that are
42667     listed, as Front-Cover Texts or Back-Cover Texts, in the notice
42668     that says that the Document is released under this License.  A
42669     Front-Cover Text may be at most 5 words, and a Back-Cover Text may
42670     be at most 25 words.
42671
42672     A "Transparent" copy of the Document means a machine-readable copy,
42673     represented in a format whose specification is available to the
42674     general public, that is suitable for revising the document
42675     straightforwardly with generic text editors or (for images
42676     composed of pixels) generic paint programs or (for drawings) some
42677     widely available drawing editor, and that is suitable for input to
42678     text formatters or for automatic translation to a variety of
42679     formats suitable for input to text formatters.  A copy made in an
42680     otherwise Transparent file format whose markup, or absence of
42681     markup, has been arranged to thwart or discourage subsequent
42682     modification by readers is not Transparent.  An image format is
42683     not Transparent if used for any substantial amount of text.  A
42684     copy that is not "Transparent" is called "Opaque".
42685
42686     Examples of suitable formats for Transparent copies include plain
42687     ASCII without markup, Texinfo input format, LaTeX input format,
42688     SGML or XML using a publicly available DTD, and
42689     standard-conforming simple HTML, PostScript or PDF designed for
42690     human modification.  Examples of transparent image formats include
42691     PNG, XCF and JPG.  Opaque formats include proprietary formats that
42692     can be read and edited only by proprietary word processors, SGML or
42693     XML for which the DTD and/or processing tools are not generally
42694     available, and the machine-generated HTML, PostScript or PDF
42695     produced by some word processors for output purposes only.
42696
42697     The "Title Page" means, for a printed book, the title page itself,
42698     plus such following pages as are needed to hold, legibly, the
42699     material this License requires to appear in the title page.  For
42700     works in formats which do not have any title page as such, "Title
42701     Page" means the text near the most prominent appearance of the
42702     work's title, preceding the beginning of the body of the text.
42703
42704     The "publisher" means any person or entity that distributes copies
42705     of the Document to the public.
42706
42707     A section "Entitled XYZ" means a named subunit of the Document
42708     whose title either is precisely XYZ or contains XYZ in parentheses
42709     following text that translates XYZ in another language.  (Here XYZ
42710     stands for a specific section name mentioned below, such as
42711     "Acknowledgements", "Dedications", "Endorsements", or "History".)
42712     To "Preserve the Title" of such a section when you modify the
42713     Document means that it remains a section "Entitled XYZ" according
42714     to this definition.
42715
42716     The Document may include Warranty Disclaimers next to the notice
42717     which states that this License applies to the Document.  These
42718     Warranty Disclaimers are considered to be included by reference in
42719     this License, but only as regards disclaiming warranties: any other
42720     implication that these Warranty Disclaimers may have is void and
42721     has no effect on the meaning of this License.
42722
42723  2. VERBATIM COPYING
42724
42725     You may copy and distribute the Document in any medium, either
42726     commercially or noncommercially, provided that this License, the
42727     copyright notices, and the license notice saying this License
42728     applies to the Document are reproduced in all copies, and that you
42729     add no other conditions whatsoever to those of this License.  You
42730     may not use technical measures to obstruct or control the reading
42731     or further copying of the copies you make or distribute.  However,
42732     you may accept compensation in exchange for copies.  If you
42733     distribute a large enough number of copies you must also follow
42734     the conditions in section 3.
42735
42736     You may also lend copies, under the same conditions stated above,
42737     and you may publicly display copies.
42738
42739  3. COPYING IN QUANTITY
42740
42741     If you publish printed copies (or copies in media that commonly
42742     have printed covers) of the Document, numbering more than 100, and
42743     the Document's license notice requires Cover Texts, you must
42744     enclose the copies in covers that carry, clearly and legibly, all
42745     these Cover Texts: Front-Cover Texts on the front cover, and
42746     Back-Cover Texts on the back cover.  Both covers must also clearly
42747     and legibly identify you as the publisher of these copies.  The
42748     front cover must present the full title with all words of the
42749     title equally prominent and visible.  You may add other material
42750     on the covers in addition.  Copying with changes limited to the
42751     covers, as long as they preserve the title of the Document and
42752     satisfy these conditions, can be treated as verbatim copying in
42753     other respects.
42754
42755     If the required texts for either cover are too voluminous to fit
42756     legibly, you should put the first ones listed (as many as fit
42757     reasonably) on the actual cover, and continue the rest onto
42758     adjacent pages.
42759
42760     If you publish or distribute Opaque copies of the Document
42761     numbering more than 100, you must either include a
42762     machine-readable Transparent copy along with each Opaque copy, or
42763     state in or with each Opaque copy a computer-network location from
42764     which the general network-using public has access to download
42765     using public-standard network protocols a complete Transparent
42766     copy of the Document, free of added material.  If you use the
42767     latter option, you must take reasonably prudent steps, when you
42768     begin distribution of Opaque copies in quantity, to ensure that
42769     this Transparent copy will remain thus accessible at the stated
42770     location until at least one year after the last time you
42771     distribute an Opaque copy (directly or through your agents or
42772     retailers) of that edition to the public.
42773
42774     It is requested, but not required, that you contact the authors of
42775     the Document well before redistributing any large number of
42776     copies, to give them a chance to provide you with an updated
42777     version of the Document.
42778
42779  4. MODIFICATIONS
42780
42781     You may copy and distribute a Modified Version of the Document
42782     under the conditions of sections 2 and 3 above, provided that you
42783     release the Modified Version under precisely this License, with
42784     the Modified Version filling the role of the Document, thus
42785     licensing distribution and modification of the Modified Version to
42786     whoever possesses a copy of it.  In addition, you must do these
42787     things in the Modified Version:
42788
42789       A. Use in the Title Page (and on the covers, if any) a title
42790          distinct from that of the Document, and from those of
42791          previous versions (which should, if there were any, be listed
42792          in the History section of the Document).  You may use the
42793          same title as a previous version if the original publisher of
42794          that version gives permission.
42795
42796       B. List on the Title Page, as authors, one or more persons or
42797          entities responsible for authorship of the modifications in
42798          the Modified Version, together with at least five of the
42799          principal authors of the Document (all of its principal
42800          authors, if it has fewer than five), unless they release you
42801          from this requirement.
42802
42803       C. State on the Title page the name of the publisher of the
42804          Modified Version, as the publisher.
42805
42806       D. Preserve all the copyright notices of the Document.
42807
42808       E. Add an appropriate copyright notice for your modifications
42809          adjacent to the other copyright notices.
42810
42811       F. Include, immediately after the copyright notices, a license
42812          notice giving the public permission to use the Modified
42813          Version under the terms of this License, in the form shown in
42814          the Addendum below.
42815
42816       G. Preserve in that license notice the full lists of Invariant
42817          Sections and required Cover Texts given in the Document's
42818          license notice.
42819
42820       H. Include an unaltered copy of this License.
42821
42822       I. Preserve the section Entitled "History", Preserve its Title,
42823          and add to it an item stating at least the title, year, new
42824          authors, and publisher of the Modified Version as given on
42825          the Title Page.  If there is no section Entitled "History" in
42826          the Document, create one stating the title, year, authors,
42827          and publisher of the Document as given on its Title Page,
42828          then add an item describing the Modified Version as stated in
42829          the previous sentence.
42830
42831       J. Preserve the network location, if any, given in the Document
42832          for public access to a Transparent copy of the Document, and
42833          likewise the network locations given in the Document for
42834          previous versions it was based on.  These may be placed in
42835          the "History" section.  You may omit a network location for a
42836          work that was published at least four years before the
42837          Document itself, or if the original publisher of the version
42838          it refers to gives permission.
42839
42840       K. For any section Entitled "Acknowledgements" or "Dedications",
42841          Preserve the Title of the section, and preserve in the
42842          section all the substance and tone of each of the contributor
42843          acknowledgements and/or dedications given therein.
42844
42845       L. Preserve all the Invariant Sections of the Document,
42846          unaltered in their text and in their titles.  Section numbers
42847          or the equivalent are not considered part of the section
42848          titles.
42849
42850       M. Delete any section Entitled "Endorsements".  Such a section
42851          may not be included in the Modified Version.
42852
42853       N. Do not retitle any existing section to be Entitled
42854          "Endorsements" or to conflict in title with any Invariant
42855          Section.
42856
42857       O. Preserve any Warranty Disclaimers.
42858
42859     If the Modified Version includes new front-matter sections or
42860     appendices that qualify as Secondary Sections and contain no
42861     material copied from the Document, you may at your option
42862     designate some or all of these sections as invariant.  To do this,
42863     add their titles to the list of Invariant Sections in the Modified
42864     Version's license notice.  These titles must be distinct from any
42865     other section titles.
42866
42867     You may add a section Entitled "Endorsements", provided it contains
42868     nothing but endorsements of your Modified Version by various
42869     parties--for example, statements of peer review or that the text
42870     has been approved by an organization as the authoritative
42871     definition of a standard.
42872
42873     You may add a passage of up to five words as a Front-Cover Text,
42874     and a passage of up to 25 words as a Back-Cover Text, to the end
42875     of the list of Cover Texts in the Modified Version.  Only one
42876     passage of Front-Cover Text and one of Back-Cover Text may be
42877     added by (or through arrangements made by) any one entity.  If the
42878     Document already includes a cover text for the same cover,
42879     previously added by you or by arrangement made by the same entity
42880     you are acting on behalf of, you may not add another; but you may
42881     replace the old one, on explicit permission from the previous
42882     publisher that added the old one.
42883
42884     The author(s) and publisher(s) of the Document do not by this
42885     License give permission to use their names for publicity for or to
42886     assert or imply endorsement of any Modified Version.
42887
42888  5. COMBINING DOCUMENTS
42889
42890     You may combine the Document with other documents released under
42891     this License, under the terms defined in section 4 above for
42892     modified versions, provided that you include in the combination
42893     all of the Invariant Sections of all of the original documents,
42894     unmodified, and list them all as Invariant Sections of your
42895     combined work in its license notice, and that you preserve all
42896     their Warranty Disclaimers.
42897
42898     The combined work need only contain one copy of this License, and
42899     multiple identical Invariant Sections may be replaced with a single
42900     copy.  If there are multiple Invariant Sections with the same name
42901     but different contents, make the title of each such section unique
42902     by adding at the end of it, in parentheses, the name of the
42903     original author or publisher of that section if known, or else a
42904     unique number.  Make the same adjustment to the section titles in
42905     the list of Invariant Sections in the license notice of the
42906     combined work.
42907
42908     In the combination, you must combine any sections Entitled
42909     "History" in the various original documents, forming one section
42910     Entitled "History"; likewise combine any sections Entitled
42911     "Acknowledgements", and any sections Entitled "Dedications".  You
42912     must delete all sections Entitled "Endorsements."
42913
42914  6. COLLECTIONS OF DOCUMENTS
42915
42916     You may make a collection consisting of the Document and other
42917     documents released under this License, and replace the individual
42918     copies of this License in the various documents with a single copy
42919     that is included in the collection, provided that you follow the
42920     rules of this License for verbatim copying of each of the
42921     documents in all other respects.
42922
42923     You may extract a single document from such a collection, and
42924     distribute it individually under this License, provided you insert
42925     a copy of this License into the extracted document, and follow
42926     this License in all other respects regarding verbatim copying of
42927     that document.
42928
42929  7. AGGREGATION WITH INDEPENDENT WORKS
42930
42931     A compilation of the Document or its derivatives with other
42932     separate and independent documents or works, in or on a volume of
42933     a storage or distribution medium, is called an "aggregate" if the
42934     copyright resulting from the compilation is not used to limit the
42935     legal rights of the compilation's users beyond what the individual
42936     works permit.  When the Document is included in an aggregate, this
42937     License does not apply to the other works in the aggregate which
42938     are not themselves derivative works of the Document.
42939
42940     If the Cover Text requirement of section 3 is applicable to these
42941     copies of the Document, then if the Document is less than one half
42942     of the entire aggregate, the Document's Cover Texts may be placed
42943     on covers that bracket the Document within the aggregate, or the
42944     electronic equivalent of covers if the Document is in electronic
42945     form.  Otherwise they must appear on printed covers that bracket
42946     the whole aggregate.
42947
42948  8. TRANSLATION
42949
42950     Translation is considered a kind of modification, so you may
42951     distribute translations of the Document under the terms of section
42952     4.  Replacing Invariant Sections with translations requires special
42953     permission from their copyright holders, but you may include
42954     translations of some or all Invariant Sections in addition to the
42955     original versions of these Invariant Sections.  You may include a
42956     translation of this License, and all the license notices in the
42957     Document, and any Warranty Disclaimers, provided that you also
42958     include the original English version of this License and the
42959     original versions of those notices and disclaimers.  In case of a
42960     disagreement between the translation and the original version of
42961     this License or a notice or disclaimer, the original version will
42962     prevail.
42963
42964     If a section in the Document is Entitled "Acknowledgements",
42965     "Dedications", or "History", the requirement (section 4) to
42966     Preserve its Title (section 1) will typically require changing the
42967     actual title.
42968
42969  9. TERMINATION
42970
42971     You may not copy, modify, sublicense, or distribute the Document
42972     except as expressly provided under this License.  Any attempt
42973     otherwise to copy, modify, sublicense, or distribute it is void,
42974     and will automatically terminate your rights under this License.
42975
42976     However, if you cease all violation of this License, then your
42977     license from a particular copyright holder is reinstated (a)
42978     provisionally, unless and until the copyright holder explicitly
42979     and finally terminates your license, and (b) permanently, if the
42980     copyright holder fails to notify you of the violation by some
42981     reasonable means prior to 60 days after the cessation.
42982
42983     Moreover, your license from a particular copyright holder is
42984     reinstated permanently if the copyright holder notifies you of the
42985     violation by some reasonable means, this is the first time you have
42986     received notice of violation of this License (for any work) from
42987     that copyright holder, and you cure the violation prior to 30 days
42988     after your receipt of the notice.
42989
42990     Termination of your rights under this section does not terminate
42991     the licenses of parties who have received copies or rights from
42992     you under this License.  If your rights have been terminated and
42993     not permanently reinstated, receipt of a copy of some or all of
42994     the same material does not give you any rights to use it.
42995
42996 10. FUTURE REVISIONS OF THIS LICENSE
42997
42998     The Free Software Foundation may publish new, revised versions of
42999     the GNU Free Documentation License from time to time.  Such new
43000     versions will be similar in spirit to the present version, but may
43001     differ in detail to address new problems or concerns.  See
43002     `http://www.gnu.org/copyleft/'.
43003
43004     Each version of the License is given a distinguishing version
43005     number.  If the Document specifies that a particular numbered
43006     version of this License "or any later version" applies to it, you
43007     have the option of following the terms and conditions either of
43008     that specified version or of any later version that has been
43009     published (not as a draft) by the Free Software Foundation.  If
43010     the Document does not specify a version number of this License,
43011     you may choose any version ever published (not as a draft) by the
43012     Free Software Foundation.  If the Document specifies that a proxy
43013     can decide which future versions of this License can be used, that
43014     proxy's public statement of acceptance of a version permanently
43015     authorizes you to choose that version for the Document.
43016
43017 11. RELICENSING
43018
43019     "Massive Multiauthor Collaboration Site" (or "MMC Site") means any
43020     World Wide Web server that publishes copyrightable works and also
43021     provides prominent facilities for anybody to edit those works.  A
43022     public wiki that anybody can edit is an example of such a server.
43023     A "Massive Multiauthor Collaboration" (or "MMC") contained in the
43024     site means any set of copyrightable works thus published on the MMC
43025     site.
43026
43027     "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0
43028     license published by Creative Commons Corporation, a not-for-profit
43029     corporation with a principal place of business in San Francisco,
43030     California, as well as future copyleft versions of that license
43031     published by that same organization.
43032
43033     "Incorporate" means to publish or republish a Document, in whole or
43034     in part, as part of another Document.
43035
43036     An MMC is "eligible for relicensing" if it is licensed under this
43037     License, and if all works that were first published under this
43038     License somewhere other than this MMC, and subsequently
43039     incorporated in whole or in part into the MMC, (1) had no cover
43040     texts or invariant sections, and (2) were thus incorporated prior
43041     to November 1, 2008.
43042
43043     The operator of an MMC Site may republish an MMC contained in the
43044     site under CC-BY-SA on the same site at any time before August 1,
43045     2009, provided the MMC is eligible for relicensing.
43046
43047
43048ADDENDUM: How to use this License for your documents
43049====================================================
43050
43051To use this License in a document you have written, include a copy of
43052the License in the document and put the following copyright and license
43053notices just after the title page:
43054
43055       Copyright (C)  YEAR  YOUR NAME.
43056       Permission is granted to copy, distribute and/or modify this document
43057       under the terms of the GNU Free Documentation License, Version 1.3
43058       or any later version published by the Free Software Foundation;
43059       with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
43060       Texts.  A copy of the license is included in the section entitled ``GNU
43061       Free Documentation License''.
43062
43063 If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
43064replace the "with...Texts." line with this:
43065
43066         with the Invariant Sections being LIST THEIR TITLES, with
43067         the Front-Cover Texts being LIST, and with the Back-Cover Texts
43068         being LIST.
43069
43070 If you have Invariant Sections without Cover Texts, or some other
43071combination of the three, merge those two alternatives to suit the
43072situation.
43073
43074 If your document contains nontrivial examples of program code, we
43075recommend releasing these examples in parallel under your choice of
43076free software license, such as the GNU General Public License, to
43077permit their use in free software.
43078
43079
43080File: gcc.info,  Node: Contributors,  Next: Option Index,  Prev: GNU Free Documentation License,  Up: Top
43081
43082Contributors to GCC
43083*******************
43084
43085The GCC project would like to thank its many contributors.  Without
43086them the project would not have been nearly as successful as it has
43087been.  Any omissions in this list are accidental.  Feel free to contact
43088<law@redhat.com> or <gerald@pfeifer.com> if you have been left out or
43089some of your contributions are not listed.  Please keep this list in
43090alphabetical order.
43091
43092   * Analog Devices helped implement the support for complex data types
43093     and iterators.
43094
43095   * John David Anglin for threading-related fixes and improvements to
43096     libstdc++-v3, and the HP-UX port.
43097
43098   * James van Artsdalen wrote the code that makes efficient use of the
43099     Intel 80387 register stack.
43100
43101   * Abramo and Roberto Bagnara for the SysV68 Motorola 3300 Delta
43102     Series port.
43103
43104   * Alasdair Baird for various bug fixes.
43105
43106   * Giovanni Bajo for analyzing lots of complicated C++ problem
43107     reports.
43108
43109   * Peter Barada for his work to improve code generation for new
43110     ColdFire cores.
43111
43112   * Gerald Baumgartner added the signature extension to the C++ front
43113     end.
43114
43115   * Godmar Back for his Java improvements and encouragement.
43116
43117   * Scott Bambrough for help porting the Java compiler.
43118
43119   * Wolfgang Bangerth for processing tons of bug reports.
43120
43121   * Jon Beniston for his Microsoft Windows port of Java and port to
43122     Lattice Mico32.
43123
43124   * Daniel Berlin for better DWARF2 support, faster/better
43125     optimizations, improved alias analysis, plus migrating GCC to
43126     Bugzilla.
43127
43128   * Geoff Berry for his Java object serialization work and various
43129     patches.
43130
43131   * Uros Bizjak for the implementation of x87 math built-in functions
43132     and for various middle end and i386 back end improvements and bug
43133     fixes.
43134
43135   * Eric Blake for helping to make GCJ and libgcj conform to the
43136     specifications.
43137
43138   * Janne Blomqvist for contributions to GNU Fortran.
43139
43140   * Segher Boessenkool for various fixes.
43141
43142   * Hans-J. Boehm for his garbage collector, IA-64 libffi port, and
43143     other Java work.
43144
43145   * Neil Booth for work on cpplib, lang hooks, debug hooks and other
43146     miscellaneous clean-ups.
43147
43148   * Steven Bosscher for integrating the GNU Fortran front end into GCC
43149     and for contributing to the tree-ssa branch.
43150
43151   * Eric Botcazou for fixing middle- and backend bugs left and right.
43152
43153   * Per Bothner for his direction via the steering committee and
43154     various improvements to the infrastructure for supporting new
43155     languages.  Chill front end implementation.  Initial
43156     implementations of cpplib, fix-header, config.guess, libio, and
43157     past C++ library (libg++) maintainer.  Dreaming up, designing and
43158     implementing much of GCJ.
43159
43160   * Devon Bowen helped port GCC to the Tahoe.
43161
43162   * Don Bowman for mips-vxworks contributions.
43163
43164   * Dave Brolley for work on cpplib and Chill.
43165
43166   * Paul Brook for work on the ARM architecture and maintaining GNU
43167     Fortran.
43168
43169   * Robert Brown implemented the support for Encore 32000 systems.
43170
43171   * Christian Bruel for improvements to local store elimination.
43172
43173   * Herman A.J. ten Brugge for various fixes.
43174
43175   * Joerg Brunsmann for Java compiler hacking and help with the GCJ
43176     FAQ.
43177
43178   * Joe Buck for his direction via the steering committee.
43179
43180   * Craig Burley for leadership of the G77 Fortran effort.
43181
43182   * Stephan Buys for contributing Doxygen notes for libstdc++.
43183
43184   * Paolo Carlini for libstdc++ work: lots of efficiency improvements
43185     to the C++ strings, streambufs and formatted I/O, hard detective
43186     work on the frustrating localization issues, and keeping up with
43187     the problem reports.
43188
43189   * John Carr for his alias work, SPARC hacking, infrastructure
43190     improvements, previous contributions to the steering committee,
43191     loop optimizations, etc.
43192
43193   * Stephane Carrez for 68HC11 and 68HC12 ports.
43194
43195   * Steve Chamberlain for support for the Renesas SH and H8 processors
43196     and the PicoJava processor, and for GCJ config fixes.
43197
43198   * Glenn Chambers for help with the GCJ FAQ.
43199
43200   * John-Marc Chandonia for various libgcj patches.
43201
43202   * Denis Chertykov for contributing and maintaining the AVR port, the
43203     first GCC port for an 8-bit architecture.
43204
43205   * Scott Christley for his Objective-C contributions.
43206
43207   * Eric Christopher for his Java porting help and clean-ups.
43208
43209   * Branko Cibej for more warning contributions.
43210
43211   * The GNU Classpath project for all of their merged runtime code.
43212
43213   * Nick Clifton for arm, mcore, fr30, v850, m32r, rx work, `--help',
43214     and other random hacking.
43215
43216   * Michael Cook for libstdc++ cleanup patches to reduce warnings.
43217
43218   * R. Kelley Cook for making GCC buildable from a read-only directory
43219     as well as other miscellaneous build process and documentation
43220     clean-ups.
43221
43222   * Ralf Corsepius for SH testing and minor bug fixing.
43223
43224   * Stan Cox for care and feeding of the x86 port and lots of behind
43225     the scenes hacking.
43226
43227   * Alex Crain provided changes for the 3b1.
43228
43229   * Ian Dall for major improvements to the NS32k port.
43230
43231   * Paul Dale for his work to add uClinux platform support to the m68k
43232     backend.
43233
43234   * Dario Dariol contributed the four varieties of sample programs
43235     that print a copy of their source.
43236
43237   * Russell Davidson for fstream and stringstream fixes in libstdc++.
43238
43239   * Bud Davis for work on the G77 and GNU Fortran compilers.
43240
43241   * Mo DeJong for GCJ and libgcj bug fixes.
43242
43243   * DJ Delorie for the DJGPP port, build and libiberty maintenance,
43244     various bug fixes, and the M32C and MeP ports.
43245
43246   * Arnaud Desitter for helping to debug GNU Fortran.
43247
43248   * Gabriel Dos Reis for contributions to G++, contributions and
43249     maintenance of GCC diagnostics infrastructure, libstdc++-v3,
43250     including `valarray<>', `complex<>', maintaining the numerics
43251     library (including that pesky `<limits>' :-) and keeping
43252     up-to-date anything to do with numbers.
43253
43254   * Ulrich Drepper for his work on glibc, testing of GCC using glibc,
43255     ISO C99 support, CFG dumping support, etc., plus support of the
43256     C++ runtime libraries including for all kinds of C interface
43257     issues, contributing and maintaining `complex<>', sanity checking
43258     and disbursement, configuration architecture, libio maintenance,
43259     and early math work.
43260
43261   * Zdenek Dvorak for a new loop unroller and various fixes.
43262
43263   * Michael Eager for his work on the Xilinx MicroBlaze port.
43264
43265   * Richard Earnshaw for his ongoing work with the ARM.
43266
43267   * David Edelsohn for his direction via the steering committee,
43268     ongoing work with the RS6000/PowerPC port, help cleaning up Haifa
43269     loop changes, doing the entire AIX port of libstdc++ with his bare
43270     hands, and for ensuring GCC properly keeps working on AIX.
43271
43272   * Kevin Ediger for the floating point formatting of num_put::do_put
43273     in libstdc++.
43274
43275   * Phil Edwards for libstdc++ work including configuration hackery,
43276     documentation maintainer, chief breaker of the web pages, the
43277     occasional iostream bug fix, and work on shared library symbol
43278     versioning.
43279
43280   * Paul Eggert for random hacking all over GCC.
43281
43282   * Mark Elbrecht for various DJGPP improvements, and for libstdc++
43283     configuration support for locales and fstream-related fixes.
43284
43285   * Vadim Egorov for libstdc++ fixes in strings, streambufs, and
43286     iostreams.
43287
43288   * Christian Ehrhardt for dealing with bug reports.
43289
43290   * Ben Elliston for his work to move the Objective-C runtime into its
43291     own subdirectory and for his work on autoconf.
43292
43293   * Revital Eres for work on the PowerPC 750CL port.
43294
43295   * Marc Espie for OpenBSD support.
43296
43297   * Doug Evans for much of the global optimization framework, arc,
43298     m32r, and SPARC work.
43299
43300   * Christopher Faylor for his work on the Cygwin port and for caring
43301     and feeding the gcc.gnu.org box and saving its users tons of spam.
43302
43303   * Fred Fish for BeOS support and Ada fixes.
43304
43305   * Ivan Fontes Garcia for the Portuguese translation of the GCJ FAQ.
43306
43307   * Peter Gerwinski for various bug fixes and the Pascal front end.
43308
43309   * Kaveh R. Ghazi for his direction via the steering committee,
43310     amazing work to make `-W -Wall -W* -Werror' useful, and
43311     continuously testing GCC on a plethora of platforms.  Kaveh
43312     extends his gratitude to the CAIP Center at Rutgers University for
43313     providing him with computing resources to work on Free Software
43314     since the late 1980s.
43315
43316   * John Gilmore for a donation to the FSF earmarked improving GNU
43317     Java.
43318
43319   * Judy Goldberg for c++ contributions.
43320
43321   * Torbjorn Granlund for various fixes and the c-torture testsuite,
43322     multiply- and divide-by-constant optimization, improved long long
43323     support, improved leaf function register allocation, and his
43324     direction via the steering committee.
43325
43326   * Anthony Green for his `-Os' contributions, the moxie port, and
43327     Java front end work.
43328
43329   * Stu Grossman for gdb hacking, allowing GCJ developers to debug
43330     Java code.
43331
43332   * Michael K. Gschwind contributed the port to the PDP-11.
43333
43334   * Richard Guenther for his ongoing middle-end contributions and bug
43335     fixes and for release management.
43336
43337   * Ron Guilmette implemented the `protoize' and `unprotoize' tools,
43338     the support for Dwarf symbolic debugging information, and much of
43339     the support for System V Release 4.  He has also worked heavily on
43340     the Intel 386 and 860 support.
43341
43342   * Mostafa Hagog for Swing Modulo Scheduling (SMS) and post reload
43343     GCSE.
43344
43345   * Bruno Haible for improvements in the runtime overhead for EH, new
43346     warnings and assorted bug fixes.
43347
43348   * Andrew Haley for his amazing Java compiler and library efforts.
43349
43350   * Chris Hanson assisted in making GCC work on HP-UX for the 9000
43351     series 300.
43352
43353   * Michael Hayes for various thankless work he's done trying to get
43354     the c30/c40 ports functional.  Lots of loop and unroll
43355     improvements and fixes.
43356
43357   * Dara Hazeghi for wading through myriads of target-specific bug
43358     reports.
43359
43360   * Kate Hedstrom for staking the G77 folks with an initial testsuite.
43361
43362   * Richard Henderson for his ongoing SPARC, alpha, ia32, and ia64
43363     work, loop opts, and generally fixing lots of old problems we've
43364     ignored for years, flow rewrite and lots of further stuff,
43365     including reviewing tons of patches.
43366
43367   * Aldy Hernandez for working on the PowerPC port, SIMD support, and
43368     various fixes.
43369
43370   * Nobuyuki Hikichi of Software Research Associates, Tokyo,
43371     contributed the support for the Sony NEWS machine.
43372
43373   * Kazu Hirata for caring and feeding the Renesas H8/300 port and
43374     various fixes.
43375
43376   * Katherine Holcomb for work on GNU Fortran.
43377
43378   * Manfred Hollstein for his ongoing work to keep the m88k alive, lots
43379     of testing and bug fixing, particularly of GCC configury code.
43380
43381   * Steve Holmgren for MachTen patches.
43382
43383   * Jan Hubicka for his x86 port improvements.
43384
43385   * Falk Hueffner for working on C and optimization bug reports.
43386
43387   * Bernardo Innocenti for his m68k work, including merging of
43388     ColdFire improvements and uClinux support.
43389
43390   * Christian Iseli for various bug fixes.
43391
43392   * Kamil Iskra for general m68k hacking.
43393
43394   * Lee Iverson for random fixes and MIPS testing.
43395
43396   * Andreas Jaeger for testing and benchmarking of GCC and various bug
43397     fixes.
43398
43399   * Jakub Jelinek for his SPARC work and sibling call optimizations as
43400     well as lots of bug fixes and test cases, and for improving the
43401     Java build system.
43402
43403   * Janis Johnson for ia64 testing and fixes, her quality improvement
43404     sidetracks, and web page maintenance.
43405
43406   * Kean Johnston for SCO OpenServer support and various fixes.
43407
43408   * Tim Josling for the sample language treelang based originally on
43409     Richard Kenner's "toy" language.
43410
43411   * Nicolai Josuttis for additional libstdc++ documentation.
43412
43413   * Klaus Kaempf for his ongoing work to make alpha-vms a viable
43414     target.
43415
43416   * Steven G. Kargl for work on GNU Fortran.
43417
43418   * David Kashtan of SRI adapted GCC to VMS.
43419
43420   * Ryszard Kabatek for many, many libstdc++ bug fixes and
43421     optimizations of strings, especially member functions, and for
43422     auto_ptr fixes.
43423
43424   * Geoffrey Keating for his ongoing work to make the PPC work for
43425     GNU/Linux and his automatic regression tester.
43426
43427   * Brendan Kehoe for his ongoing work with G++ and for a lot of early
43428     work in just about every part of libstdc++.
43429
43430   * Oliver M. Kellogg of Deutsche Aerospace contributed the port to the
43431     MIL-STD-1750A.
43432
43433   * Richard Kenner of the New York University Ultracomputer Research
43434     Laboratory wrote the machine descriptions for the AMD 29000, the
43435     DEC Alpha, the IBM RT PC, and the IBM RS/6000 as well as the
43436     support for instruction attributes.  He also made changes to
43437     better support RISC processors including changes to common
43438     subexpression elimination, strength reduction, function calling
43439     sequence handling, and condition code support, in addition to
43440     generalizing the code for frame pointer elimination and delay slot
43441     scheduling.  Richard Kenner was also the head maintainer of GCC
43442     for several years.
43443
43444   * Mumit Khan for various contributions to the Cygwin and Mingw32
43445     ports and maintaining binary releases for Microsoft Windows hosts,
43446     and for massive libstdc++ porting work to Cygwin/Mingw32.
43447
43448   * Robin Kirkham for cpu32 support.
43449
43450   * Mark Klein for PA improvements.
43451
43452   * Thomas Koenig for various bug fixes.
43453
43454   * Bruce Korb for the new and improved fixincludes code.
43455
43456   * Benjamin Kosnik for his G++ work and for leading the libstdc++-v3
43457     effort.
43458
43459   * Charles LaBrec contributed the support for the Integrated Solutions
43460     68020 system.
43461
43462   * Asher Langton and Mike Kumbera for contributing Cray pointer
43463     support to GNU Fortran, and for other GNU Fortran improvements.
43464
43465   * Jeff Law for his direction via the steering committee,
43466     coordinating the entire egcs project and GCC 2.95, rolling out
43467     snapshots and releases, handling merges from GCC2, reviewing tons
43468     of patches that might have fallen through the cracks else, and
43469     random but extensive hacking.
43470
43471   * Marc Lehmann for his direction via the steering committee and
43472     helping with analysis and improvements of x86 performance.
43473
43474   * Victor Leikehman for work on GNU Fortran.
43475
43476   * Ted Lemon wrote parts of the RTL reader and printer.
43477
43478   * Kriang Lerdsuwanakij for C++ improvements including template as
43479     template parameter support, and many C++ fixes.
43480
43481   * Warren Levy for tremendous work on libgcj (Java Runtime Library)
43482     and random work on the Java front end.
43483
43484   * Alain Lichnewsky ported GCC to the MIPS CPU.
43485
43486   * Oskar Liljeblad for hacking on AWT and his many Java bug reports
43487     and patches.
43488
43489   * Robert Lipe for OpenServer support, new testsuites, testing, etc.
43490
43491   * Chen Liqin for various S+core related fixes/improvement, and for
43492     maintaining the S+core port.
43493
43494   * Weiwen Liu for testing and various bug fixes.
43495
43496   * Manuel Lo'pez-Iba'n~ez for improving `-Wconversion' and many other
43497     diagnostics fixes and improvements.
43498
43499   * Dave Love for his ongoing work with the Fortran front end and
43500     runtime libraries.
43501
43502   * Martin von Lo"wis for internal consistency checking infrastructure,
43503     various C++ improvements including namespace support, and tons of
43504     assistance with libstdc++/compiler merges.
43505
43506   * H.J. Lu for his previous contributions to the steering committee,
43507     many x86 bug reports, prototype patches, and keeping the GNU/Linux
43508     ports working.
43509
43510   * Greg McGary for random fixes and (someday) bounded pointers.
43511
43512   * Andrew MacLeod for his ongoing work in building a real EH system,
43513     various code generation improvements, work on the global
43514     optimizer, etc.
43515
43516   * Vladimir Makarov for hacking some ugly i960 problems, PowerPC
43517     hacking improvements to compile-time performance, overall
43518     knowledge and direction in the area of instruction scheduling, and
43519     design and implementation of the automaton based instruction
43520     scheduler.
43521
43522   * Bob Manson for his behind the scenes work on dejagnu.
43523
43524   * Philip Martin for lots of libstdc++ string and vector iterator
43525     fixes and improvements, and string clean up and testsuites.
43526
43527   * All of the Mauve project contributors, for Java test code.
43528
43529   * Bryce McKinlay for numerous GCJ and libgcj fixes and improvements.
43530
43531   * Adam Megacz for his work on the Microsoft Windows port of GCJ.
43532
43533   * Michael Meissner for LRS framework, ia32, m32r, v850, m88k, MIPS,
43534     powerpc, haifa, ECOFF debug support, and other assorted hacking.
43535
43536   * Jason Merrill for his direction via the steering committee and
43537     leading the G++ effort.
43538
43539   * Martin Michlmayr for testing GCC on several architectures using the
43540     entire Debian archive.
43541
43542   * David Miller for his direction via the steering committee, lots of
43543     SPARC work, improvements in jump.c and interfacing with the Linux
43544     kernel developers.
43545
43546   * Gary Miller ported GCC to Charles River Data Systems machines.
43547
43548   * Alfred Minarik for libstdc++ string and ios bug fixes, and turning
43549     the entire libstdc++ testsuite namespace-compatible.
43550
43551   * Mark Mitchell for his direction via the steering committee,
43552     mountains of C++ work, load/store hoisting out of loops, alias
43553     analysis improvements, ISO C `restrict' support, and serving as
43554     release manager for GCC 3.x.
43555
43556   * Alan Modra for various GNU/Linux bits and testing.
43557
43558   * Toon Moene for his direction via the steering committee, Fortran
43559     maintenance, and his ongoing work to make us make Fortran run fast.
43560
43561   * Jason Molenda for major help in the care and feeding of all the
43562     services on the gcc.gnu.org (formerly egcs.cygnus.com)
43563     machine--mail, web services, ftp services, etc etc.  Doing all
43564     this work on scrap paper and the backs of envelopes would have
43565     been... difficult.
43566
43567   * Catherine Moore for fixing various ugly problems we have sent her
43568     way, including the haifa bug which was killing the Alpha & PowerPC
43569     Linux kernels.
43570
43571   * Mike Moreton for his various Java patches.
43572
43573   * David Mosberger-Tang for various Alpha improvements, and for the
43574     initial IA-64 port.
43575
43576   * Stephen Moshier contributed the floating point emulator that
43577     assists in cross-compilation and permits support for floating
43578     point numbers wider than 64 bits and for ISO C99 support.
43579
43580   * Bill Moyer for his behind the scenes work on various issues.
43581
43582   * Philippe De Muyter for his work on the m68k port.
43583
43584   * Joseph S. Myers for his work on the PDP-11 port, format checking
43585     and ISO C99 support, and continuous emphasis on (and contributions
43586     to) documentation.
43587
43588   * Nathan Myers for his work on libstdc++-v3: architecture and
43589     authorship through the first three snapshots, including
43590     implementation of locale infrastructure, string, shadow C headers,
43591     and the initial project documentation (DESIGN, CHECKLIST, and so
43592     forth).  Later, more work on MT-safe string and shadow headers.
43593
43594   * Felix Natter for documentation on porting libstdc++.
43595
43596   * Nathanael Nerode for cleaning up the configuration/build process.
43597
43598   * NeXT, Inc. donated the front end that supports the Objective-C
43599     language.
43600
43601   * Hans-Peter Nilsson for the CRIS and MMIX ports, improvements to
43602     the search engine setup, various documentation fixes and other
43603     small fixes.
43604
43605   * Geoff Noer for his work on getting cygwin native builds working.
43606
43607   * Diego Novillo for his work on Tree SSA, OpenMP, SPEC performance
43608     tracking web pages, GIMPLE tuples, and assorted fixes.
43609
43610   * David O'Brien for the FreeBSD/alpha, FreeBSD/AMD x86-64,
43611     FreeBSD/ARM, FreeBSD/PowerPC, and FreeBSD/SPARC64 ports and
43612     related infrastructure improvements.
43613
43614   * Alexandre Oliva for various build infrastructure improvements,
43615     scripts and amazing testing work, including keeping libtool issues
43616     sane and happy.
43617
43618   * Stefan Olsson for work on mt_alloc.
43619
43620   * Melissa O'Neill for various NeXT fixes.
43621
43622   * Rainer Orth for random MIPS work, including improvements to GCC's
43623     o32 ABI support, improvements to dejagnu's MIPS support, Java
43624     configuration clean-ups and porting work, and maintaining the
43625     IRIX, Solaris 2, and Tru64 UNIX ports.
43626
43627   * Hartmut Penner for work on the s390 port.
43628
43629   * Paul Petersen wrote the machine description for the Alliant FX/8.
43630
43631   * Alexandre Petit-Bianco for implementing much of the Java compiler
43632     and continued Java maintainership.
43633
43634   * Matthias Pfaller for major improvements to the NS32k port.
43635
43636   * Gerald Pfeifer for his direction via the steering committee,
43637     pointing out lots of problems we need to solve, maintenance of the
43638     web pages, and taking care of documentation maintenance in general.
43639
43640   * Andrew Pinski for processing bug reports by the dozen.
43641
43642   * Ovidiu Predescu for his work on the Objective-C front end and
43643     runtime libraries.
43644
43645   * Jerry Quinn for major performance improvements in C++ formatted
43646     I/O.
43647
43648   * Ken Raeburn for various improvements to checker, MIPS ports and
43649     various cleanups in the compiler.
43650
43651   * Rolf W. Rasmussen for hacking on AWT.
43652
43653   * David Reese of Sun Microsystems contributed to the Solaris on
43654     PowerPC port.
43655
43656   * Volker Reichelt for keeping up with the problem reports.
43657
43658   * Joern Rennecke for maintaining the sh port, loop, regmove & reload
43659     hacking.
43660
43661   * Loren J. Rittle for improvements to libstdc++-v3 including the
43662     FreeBSD port, threading fixes, thread-related configury changes,
43663     critical threading documentation, and solutions to really tricky
43664     I/O problems, as well as keeping GCC properly working on FreeBSD
43665     and continuous testing.
43666
43667   * Craig Rodrigues for processing tons of bug reports.
43668
43669   * Ola Ro"nnerup for work on mt_alloc.
43670
43671   * Gavin Romig-Koch for lots of behind the scenes MIPS work.
43672
43673   * David Ronis inspired and encouraged Craig to rewrite the G77
43674     documentation in texinfo format by contributing a first pass at a
43675     translation of the old `g77-0.5.16/f/DOC' file.
43676
43677   * Ken Rose for fixes to GCC's delay slot filling code.
43678
43679   * Paul Rubin wrote most of the preprocessor.
43680
43681   * Pe'tur Runo'lfsson for major performance improvements in C++
43682     formatted I/O and large file support in C++ filebuf.
43683
43684   * Chip Salzenberg for libstdc++ patches and improvements to locales,
43685     traits, Makefiles, libio, libtool hackery, and "long long" support.
43686
43687   * Juha Sarlin for improvements to the H8 code generator.
43688
43689   * Greg Satz assisted in making GCC work on HP-UX for the 9000 series
43690     300.
43691
43692   * Roger Sayle for improvements to constant folding and GCC's RTL
43693     optimizers as well as for fixing numerous bugs.
43694
43695   * Bradley Schatz for his work on the GCJ FAQ.
43696
43697   * Peter Schauer wrote the code to allow debugging to work on the
43698     Alpha.
43699
43700   * William Schelter did most of the work on the Intel 80386 support.
43701
43702   * Tobias Schlu"ter for work on GNU Fortran.
43703
43704   * Bernd Schmidt for various code generation improvements and major
43705     work in the reload pass as well a serving as release manager for
43706     GCC 2.95.3.
43707
43708   * Peter Schmid for constant testing of libstdc++--especially
43709     application testing, going above and beyond what was requested for
43710     the release criteria--and libstdc++ header file tweaks.
43711
43712   * Jason Schroeder for jcf-dump patches.
43713
43714   * Andreas Schwab for his work on the m68k port.
43715
43716   * Lars Segerlund for work on GNU Fortran.
43717
43718   * Dodji Seketeli for numerous C++ bug fixes and debug info
43719     improvements.
43720
43721   * Joel Sherrill for his direction via the steering committee, RTEMS
43722     contributions and RTEMS testing.
43723
43724   * Nathan Sidwell for many C++ fixes/improvements.
43725
43726   * Jeffrey Siegal for helping RMS with the original design of GCC,
43727     some code which handles the parse tree and RTL data structures,
43728     constant folding and help with the original VAX & m68k ports.
43729
43730   * Kenny Simpson for prompting libstdc++ fixes due to defect reports
43731     from the LWG (thereby keeping GCC in line with updates from the
43732     ISO).
43733
43734   * Franz Sirl for his ongoing work with making the PPC port stable
43735     for GNU/Linux.
43736
43737   * Andrey Slepuhin for assorted AIX hacking.
43738
43739   * Trevor Smigiel for contributing the SPU port.
43740
43741   * Christopher Smith did the port for Convex machines.
43742
43743   * Danny Smith for his major efforts on the Mingw (and Cygwin) ports.
43744
43745   * Randy Smith finished the Sun FPA support.
43746
43747   * Scott Snyder for queue, iterator, istream, and string fixes and
43748     libstdc++ testsuite entries.  Also for providing the patch to G77
43749     to add rudimentary support for `INTEGER*1', `INTEGER*2', and
43750     `LOGICAL*1'.
43751
43752   * Brad Spencer for contributions to the GLIBCPP_FORCE_NEW technique.
43753
43754   * Richard Stallman, for writing the original GCC and launching the
43755     GNU project.
43756
43757   * Jan Stein of the Chalmers Computer Society provided support for
43758     Genix, as well as part of the 32000 machine description.
43759
43760   * Nigel Stephens for various mips16 related fixes/improvements.
43761
43762   * Jonathan Stone wrote the machine description for the Pyramid
43763     computer.
43764
43765   * Graham Stott for various infrastructure improvements.
43766
43767   * John Stracke for his Java HTTP protocol fixes.
43768
43769   * Mike Stump for his Elxsi port, G++ contributions over the years
43770     and more recently his vxworks contributions
43771
43772   * Jeff Sturm for Java porting help, bug fixes, and encouragement.
43773
43774   * Shigeya Suzuki for this fixes for the bsdi platforms.
43775
43776   * Ian Lance Taylor for the Go frontend, the initial mips16 and mips64
43777     support, general configury hacking, fixincludes, etc.
43778
43779   * Holger Teutsch provided the support for the Clipper CPU.
43780
43781   * Gary Thomas for his ongoing work to make the PPC work for
43782     GNU/Linux.
43783
43784   * Philipp Thomas for random bug fixes throughout the compiler
43785
43786   * Jason Thorpe for thread support in libstdc++ on NetBSD.
43787
43788   * Kresten Krab Thorup wrote the run time support for the Objective-C
43789     language and the fantastic Java bytecode interpreter.
43790
43791   * Michael Tiemann for random bug fixes, the first instruction
43792     scheduler, initial C++ support, function integration, NS32k, SPARC
43793     and M88k machine description work, delay slot scheduling.
43794
43795   * Andreas Tobler for his work porting libgcj to Darwin.
43796
43797   * Teemu Torma for thread safe exception handling support.
43798
43799   * Leonard Tower wrote parts of the parser, RTL generator, and RTL
43800     definitions, and of the VAX machine description.
43801
43802   * Daniel Towner and Hariharan Sandanagobalane contributed and
43803     maintain the picoChip port.
43804
43805   * Tom Tromey for internationalization support and for his many Java
43806     contributions and libgcj maintainership.
43807
43808   * Lassi Tuura for improvements to config.guess to determine HP
43809     processor types.
43810
43811   * Petter Urkedal for libstdc++ CXXFLAGS, math, and algorithms fixes.
43812
43813   * Andy Vaught for the design and initial implementation of the GNU
43814     Fortran front end.
43815
43816   * Brent Verner for work with the libstdc++ cshadow files and their
43817     associated configure steps.
43818
43819   * Todd Vierling for contributions for NetBSD ports.
43820
43821   * Jonathan Wakely for contributing libstdc++ Doxygen notes and XHTML
43822     guidance.
43823
43824   * Dean Wakerley for converting the install documentation from HTML
43825     to texinfo in time for GCC 3.0.
43826
43827   * Krister Walfridsson for random bug fixes.
43828
43829   * Feng Wang for contributions to GNU Fortran.
43830
43831   * Stephen M. Webb for time and effort on making libstdc++ shadow
43832     files work with the tricky Solaris 8+ headers, and for pushing the
43833     build-time header tree.
43834
43835   * John Wehle for various improvements for the x86 code generator,
43836     related infrastructure improvements to help x86 code generation,
43837     value range propagation and other work, WE32k port.
43838
43839   * Ulrich Weigand for work on the s390 port.
43840
43841   * Zack Weinberg for major work on cpplib and various other bug fixes.
43842
43843   * Matt Welsh for help with Linux Threads support in GCJ.
43844
43845   * Urban Widmark for help fixing java.io.
43846
43847   * Mark Wielaard for new Java library code and his work integrating
43848     with Classpath.
43849
43850   * Dale Wiles helped port GCC to the Tahoe.
43851
43852   * Bob Wilson from Tensilica, Inc. for the Xtensa port.
43853
43854   * Jim Wilson for his direction via the steering committee, tackling
43855     hard problems in various places that nobody else wanted to work
43856     on, strength reduction and other loop optimizations.
43857
43858   * Paul Woegerer and Tal Agmon for the CRX port.
43859
43860   * Carlo Wood for various fixes.
43861
43862   * Tom Wood for work on the m88k port.
43863
43864   * Canqun Yang for work on GNU Fortran.
43865
43866   * Masanobu Yuhara of Fujitsu Laboratories implemented the machine
43867     description for the Tron architecture (specifically, the Gmicro).
43868
43869   * Kevin Zachmann helped port GCC to the Tahoe.
43870
43871   * Ayal Zaks for Swing Modulo Scheduling (SMS).
43872
43873   * Xiaoqiang Zhang for work on GNU Fortran.
43874
43875   * Gilles Zunino for help porting Java to Irix.
43876
43877
43878 The following people are recognized for their contributions to GNAT,
43879the Ada front end of GCC:
43880   * Bernard Banner
43881
43882   * Romain Berrendonner
43883
43884   * Geert Bosch
43885
43886   * Emmanuel Briot
43887
43888   * Joel Brobecker
43889
43890   * Ben Brosgol
43891
43892   * Vincent Celier
43893
43894   * Arnaud Charlet
43895
43896   * Chien Chieng
43897
43898   * Cyrille Comar
43899
43900   * Cyrille Crozes
43901
43902   * Robert Dewar
43903
43904   * Gary Dismukes
43905
43906   * Robert Duff
43907
43908   * Ed Falis
43909
43910   * Ramon Fernandez
43911
43912   * Sam Figueroa
43913
43914   * Vasiliy Fofanov
43915
43916   * Michael Friess
43917
43918   * Franco Gasperoni
43919
43920   * Ted Giering
43921
43922   * Matthew Gingell
43923
43924   * Laurent Guerby
43925
43926   * Jerome Guitton
43927
43928   * Olivier Hainque
43929
43930   * Jerome Hugues
43931
43932   * Hristian Kirtchev
43933
43934   * Jerome Lambourg
43935
43936   * Bruno Leclerc
43937
43938   * Albert Lee
43939
43940   * Sean McNeil
43941
43942   * Javier Miranda
43943
43944   * Laurent Nana
43945
43946   * Pascal Obry
43947
43948   * Dong-Ik Oh
43949
43950   * Laurent Pautet
43951
43952   * Brett Porter
43953
43954   * Thomas Quinot
43955
43956   * Nicolas Roche
43957
43958   * Pat Rogers
43959
43960   * Jose Ruiz
43961
43962   * Douglas Rupp
43963
43964   * Sergey Rybin
43965
43966   * Gail Schenker
43967
43968   * Ed Schonberg
43969
43970   * Nicolas Setton
43971
43972   * Samuel Tardieu
43973
43974
43975 The following people are recognized for their contributions of new
43976features, bug reports, testing and integration of classpath/libgcj for
43977GCC version 4.1:
43978   * Lillian Angel for `JTree' implementation and lots Free Swing
43979     additions and bug fixes.
43980
43981   * Wolfgang Baer for `GapContent' bug fixes.
43982
43983   * Anthony Balkissoon for `JList', Free Swing 1.5 updates and mouse
43984     event fixes, lots of Free Swing work including `JTable' editing.
43985
43986   * Stuart Ballard for RMI constant fixes.
43987
43988   * Goffredo Baroncelli for `HTTPURLConnection' fixes.
43989
43990   * Gary Benson for `MessageFormat' fixes.
43991
43992   * Daniel Bonniot for `Serialization' fixes.
43993
43994   * Chris Burdess for lots of gnu.xml and http protocol fixes, `StAX'
43995     and `DOM xml:id' support.
43996
43997   * Ka-Hing Cheung for `TreePath' and `TreeSelection' fixes.
43998
43999   * Archie Cobbs for build fixes, VM interface updates,
44000     `URLClassLoader' updates.
44001
44002   * Kelley Cook for build fixes.
44003
44004   * Martin Cordova for Suggestions for better `SocketTimeoutException'.
44005
44006   * David Daney for `BitSet' bug fixes, `HttpURLConnection' rewrite
44007     and improvements.
44008
44009   * Thomas Fitzsimmons for lots of upgrades to the gtk+ AWT and Cairo
44010     2D support. Lots of imageio framework additions, lots of AWT and
44011     Free Swing bug fixes.
44012
44013   * Jeroen Frijters for `ClassLoader' and nio cleanups, serialization
44014     fixes, better `Proxy' support, bug fixes and IKVM integration.
44015
44016   * Santiago Gala for `AccessControlContext' fixes.
44017
44018   * Nicolas Geoffray for `VMClassLoader' and `AccessController'
44019     improvements.
44020
44021   * David Gilbert for `basic' and `metal' icon and plaf support and
44022     lots of documenting, Lots of Free Swing and metal theme additions.
44023     `MetalIconFactory' implementation.
44024
44025   * Anthony Green for `MIDI' framework, `ALSA' and `DSSI' providers.
44026
44027   * Andrew Haley for `Serialization' and `URLClassLoader' fixes, gcj
44028     build speedups.
44029
44030   * Kim Ho for `JFileChooser' implementation.
44031
44032   * Andrew John Hughes for `Locale' and net fixes, URI RFC2986
44033     updates, `Serialization' fixes, `Properties' XML support and
44034     generic branch work, VMIntegration guide update.
44035
44036   * Bastiaan Huisman for `TimeZone' bug fixing.
44037
44038   * Andreas Jaeger for mprec updates.
44039
44040   * Paul Jenner for better `-Werror' support.
44041
44042   * Ito Kazumitsu for `NetworkInterface' implementation and updates.
44043
44044   * Roman Kennke for `BoxLayout', `GrayFilter' and `SplitPane', plus
44045     bug fixes all over. Lots of Free Swing work including styled text.
44046
44047   * Simon Kitching for `String' cleanups and optimization suggestions.
44048
44049   * Michael Koch for configuration fixes, `Locale' updates, bug and
44050     build fixes.
44051
44052   * Guilhem Lavaux for configuration, thread and channel fixes and
44053     Kaffe integration. JCL native `Pointer' updates. Logger bug fixes.
44054
44055   * David Lichteblau for JCL support library global/local reference
44056     cleanups.
44057
44058   * Aaron Luchko for JDWP updates and documentation fixes.
44059
44060   * Ziga Mahkovec for `Graphics2D' upgraded to Cairo 0.5 and new regex
44061     features.
44062
44063   * Sven de Marothy for BMP imageio support, CSS and `TextLayout'
44064     fixes. `GtkImage' rewrite, 2D, awt, free swing and date/time fixes
44065     and implementing the Qt4 peers.
44066
44067   * Casey Marshall for crypto algorithm fixes, `FileChannel' lock,
44068     `SystemLogger' and `FileHandler' rotate implementations, NIO
44069     `FileChannel.map' support, security and policy updates.
44070
44071   * Bryce McKinlay for RMI work.
44072
44073   * Audrius Meskauskas for lots of Free Corba, RMI and HTML work plus
44074     testing and documenting.
44075
44076   * Kalle Olavi Niemitalo for build fixes.
44077
44078   * Rainer Orth for build fixes.
44079
44080   * Andrew Overholt for `File' locking fixes.
44081
44082   * Ingo Proetel for `Image', `Logger' and `URLClassLoader' updates.
44083
44084   * Olga Rodimina for `MenuSelectionManager' implementation.
44085
44086   * Jan Roehrich for `BasicTreeUI' and `JTree' fixes.
44087
44088   * Julian Scheid for documentation updates and gjdoc support.
44089
44090   * Christian Schlichtherle for zip fixes and cleanups.
44091
44092   * Robert Schuster for documentation updates and beans fixes,
44093     `TreeNode' enumerations and `ActionCommand' and various fixes, XML
44094     and URL, AWT and Free Swing bug fixes.
44095
44096   * Keith Seitz for lots of JDWP work.
44097
44098   * Christian Thalinger for 64-bit cleanups, Configuration and VM
44099     interface fixes and `CACAO' integration, `fdlibm' updates.
44100
44101   * Gael Thomas for `VMClassLoader' boot packages support suggestions.
44102
44103   * Andreas Tobler for Darwin and Solaris testing and fixing, `Qt4'
44104     support for Darwin/OS X, `Graphics2D' support, `gtk+' updates.
44105
44106   * Dalibor Topic for better `DEBUG' support, build cleanups and Kaffe
44107     integration. `Qt4' build infrastructure, `SHA1PRNG' and
44108     `GdkPixbugDecoder' updates.
44109
44110   * Tom Tromey for Eclipse integration, generics work, lots of bug
44111     fixes and gcj integration including coordinating The Big Merge.
44112
44113   * Mark Wielaard for bug fixes, packaging and release management,
44114     `Clipboard' implementation, system call interrupts and network
44115     timeouts and `GdkPixpufDecoder' fixes.
44116
44117
44118 In addition to the above, all of which also contributed time and
44119energy in testing GCC, we would like to thank the following for their
44120contributions to testing:
44121
44122   * Michael Abd-El-Malek
44123
44124   * Thomas Arend
44125
44126   * Bonzo Armstrong
44127
44128   * Steven Ashe
44129
44130   * Chris Baldwin
44131
44132   * David Billinghurst
44133
44134   * Jim Blandy
44135
44136   * Stephane Bortzmeyer
44137
44138   * Horst von Brand
44139
44140   * Frank Braun
44141
44142   * Rodney Brown
44143
44144   * Sidney Cadot
44145
44146   * Bradford Castalia
44147
44148   * Robert Clark
44149
44150   * Jonathan Corbet
44151
44152   * Ralph Doncaster
44153
44154   * Richard Emberson
44155
44156   * Levente Farkas
44157
44158   * Graham Fawcett
44159
44160   * Mark Fernyhough
44161
44162   * Robert A. French
44163
44164   * Jo"rgen Freyh
44165
44166   * Mark K. Gardner
44167
44168   * Charles-Antoine Gauthier
44169
44170   * Yung Shing Gene
44171
44172   * David Gilbert
44173
44174   * Simon Gornall
44175
44176   * Fred Gray
44177
44178   * John Griffin
44179
44180   * Patrik Hagglund
44181
44182   * Phil Hargett
44183
44184   * Amancio Hasty
44185
44186   * Takafumi Hayashi
44187
44188   * Bryan W. Headley
44189
44190   * Kevin B. Hendricks
44191
44192   * Joep Jansen
44193
44194   * Christian Joensson
44195
44196   * Michel Kern
44197
44198   * David Kidd
44199
44200   * Tobias Kuipers
44201
44202   * Anand Krishnaswamy
44203
44204   * A. O. V. Le Blanc
44205
44206   * llewelly
44207
44208   * Damon Love
44209
44210   * Brad Lucier
44211
44212   * Matthias Klose
44213
44214   * Martin Knoblauch
44215
44216   * Rick Lutowski
44217
44218   * Jesse Macnish
44219
44220   * Stefan Morrell
44221
44222   * Anon A. Mous
44223
44224   * Matthias Mueller
44225
44226   * Pekka Nikander
44227
44228   * Rick Niles
44229
44230   * Jon Olson
44231
44232   * Magnus Persson
44233
44234   * Chris Pollard
44235
44236   * Richard Polton
44237
44238   * Derk Reefman
44239
44240   * David Rees
44241
44242   * Paul Reilly
44243
44244   * Tom Reilly
44245
44246   * Torsten Rueger
44247
44248   * Danny Sadinoff
44249
44250   * Marc Schifer
44251
44252   * Erik Schnetter
44253
44254   * Wayne K. Schroll
44255
44256   * David Schuler
44257
44258   * Vin Shelton
44259
44260   * Tim Souder
44261
44262   * Adam Sulmicki
44263
44264   * Bill Thorson
44265
44266   * George Talbot
44267
44268   * Pedro A. M. Vazquez
44269
44270   * Gregory Warnes
44271
44272   * Ian Watson
44273
44274   * David E. Young
44275
44276   * And many others
44277
44278 And finally we'd like to thank everyone who uses the compiler, provides
44279feedback and generally reminds us why we're doing this work in the first
44280place.
44281
44282
44283File: gcc.info,  Node: Option Index,  Next: Keyword Index,  Prev: Contributors,  Up: Top
44284
44285Option Index
44286************
44287
44288GCC's command line options are indexed here without any initial `-' or
44289`--'.  Where an option has both positive and negative forms (such as
44290`-fOPTION' and `-fno-OPTION'), relevant entries in the manual are
44291indexed under the most appropriate form; it may sometimes be useful to
44292look up both forms.
44293
44294[index]
44295* Menu:
44296
44297* ###:                                   Overall Options.    (line  209)
44298* -fno-keep-inline-dllexport:            Optimize Options.   (line  306)
44299* -mcpu:                                 RX Options.         (line   30)
44300* 8bit-idiv:                             i386 and x86-64 Options.
44301                                                             (line  675)
44302* A:                                     Preprocessor Options.
44303                                                             (line  551)
44304* all_load:                              Darwin Options.     (line  112)
44305* allowable_client:                      Darwin Options.     (line  199)
44306* ansi <1>:                              Non-bugs.           (line  107)
44307* ansi <2>:                              Other Builtins.     (line   22)
44308* ansi <3>:                              Preprocessor Options.
44309                                                             (line  326)
44310* ansi <4>:                              C Dialect Options.  (line   11)
44311* ansi:                                  Standards.          (line   16)
44312* arch_errors_fatal:                     Darwin Options.     (line  116)
44313* aux-info:                              C Dialect Options.  (line  154)
44314* B:                                     Directory Options.  (line   46)
44315* Bdynamic:                              VxWorks Options.    (line   22)
44316* bind_at_load:                          Darwin Options.     (line  120)
44317* Bstatic:                               VxWorks Options.    (line   22)
44318* bundle:                                Darwin Options.     (line  125)
44319* bundle_loader:                         Darwin Options.     (line  129)
44320* c:                                     Link Options.       (line   20)
44321* C:                                     Preprocessor Options.
44322                                                             (line  609)
44323* c:                                     Overall Options.    (line  164)
44324* client_name:                           Darwin Options.     (line  199)
44325* compatibility_version:                 Darwin Options.     (line  199)
44326* coverage:                              Debugging Options.  (line  367)
44327* current_version:                       Darwin Options.     (line  199)
44328* D:                                     Preprocessor Options.
44329                                                             (line   34)
44330* d:                                     Debugging Options.  (line  431)
44331* dA:                                    Debugging Options.  (line  638)
44332* dD <1>:                                Preprocessor Options.
44333                                                             (line  583)
44334* dD:                                    Debugging Options.  (line  642)
44335* dead_strip:                            Darwin Options.     (line  199)
44336* dependency-file:                       Darwin Options.     (line  199)
44337* dH:                                    Debugging Options.  (line  646)
44338* dI:                                    Preprocessor Options.
44339                                                             (line  592)
44340* dM:                                    Preprocessor Options.
44341                                                             (line  567)
44342* dm:                                    Debugging Options.  (line  649)
44343* dN:                                    Preprocessor Options.
44344                                                             (line  589)
44345* dP:                                    Debugging Options.  (line  658)
44346* dp:                                    Debugging Options.  (line  653)
44347* dU:                                    Preprocessor Options.
44348                                                             (line  596)
44349* dumpmachine:                           Debugging Options.  (line 1133)
44350* dumpspecs:                             Debugging Options.  (line 1141)
44351* dumpversion:                           Debugging Options.  (line 1137)
44352* dv:                                    Debugging Options.  (line  662)
44353* dx:                                    Debugging Options.  (line  667)
44354* dylib_file:                            Darwin Options.     (line  199)
44355* dylinker_install_name:                 Darwin Options.     (line  199)
44356* dynamic:                               Darwin Options.     (line  199)
44357* dynamiclib:                            Darwin Options.     (line  133)
44358* E <1>:                                 Link Options.       (line   20)
44359* E:                                     Overall Options.    (line  185)
44360* EB <1>:                                MIPS Options.       (line    7)
44361* EB:                                    ARC Options.        (line   12)
44362* EL <1>:                                MIPS Options.       (line   10)
44363* EL:                                    ARC Options.        (line    9)
44364* exported_symbols_list:                 Darwin Options.     (line  199)
44365* F:                                     Darwin Options.     (line   32)
44366* fabi-version:                          C++ Dialect Options.
44367                                                             (line   20)
44368* falign-arrays:                         Optimize Options.   (line 1402)
44369* falign-functions:                      Optimize Options.   (line 1411)
44370* falign-jumps:                          Optimize Options.   (line 1461)
44371* falign-labels:                         Optimize Options.   (line 1429)
44372* falign-loops:                          Optimize Options.   (line 1447)
44373* fassociative-math:                     Optimize Options.   (line 1892)
44374* fasynchronous-unwind-tables:           Code Gen Options.   (line   64)
44375* fauto-inc-dec:                         Optimize Options.   (line  511)
44376* fbounds-check:                         Code Gen Options.   (line   15)
44377* fbranch-probabilities:                 Optimize Options.   (line 2020)
44378* fbranch-target-load-optimize:          Optimize Options.   (line 2127)
44379* fbranch-target-load-optimize2:         Optimize Options.   (line 2133)
44380* fbtr-bb-exclusive:                     Optimize Options.   (line 2137)
44381* fcall-saved:                           Code Gen Options.   (line  262)
44382* fcall-used:                            Code Gen Options.   (line  248)
44383* fcaller-saves:                         Optimize Options.   (line  784)
44384* fcheck-data-deps:                      Optimize Options.   (line 1061)
44385* fcheck-new:                            C++ Dialect Options.
44386                                                             (line   45)
44387* fcombine-stack-adjustments:            Optimize Options.   (line  797)
44388* fcommon:                               Variable Attributes.
44389                                                             (line  105)
44390* fcompare-debug:                        Debugging Options.  (line  156)
44391* fcompare-debug-second:                 Debugging Options.  (line  182)
44392* fcompare-elim:                         Optimize Options.   (line 1738)
44393* fcond-mismatch:                        C Dialect Options.  (line  290)
44394* fconserve-space:                       C++ Dialect Options.
44395                                                             (line   55)
44396* fconserve-stack:                       Optimize Options.   (line  803)
44397* fconstant-string-class:                Objective-C and Objective-C++ Dialect Options.
44398                                                             (line   30)
44399* fconstexpr-depth:                      C++ Dialect Options.
44400                                                             (line   67)
44401* fcprop-registers:                      Optimize Options.   (line 1750)
44402* fcrossjumping:                         Optimize Options.   (line  504)
44403* fcse-follow-jumps:                     Optimize Options.   (line  432)
44404* fcse-skip-blocks:                      Optimize Options.   (line  441)
44405* fcx-fortran-rules:                     Optimize Options.   (line 2006)
44406* fcx-limited-range:                     Optimize Options.   (line 1994)
44407* fdata-sections:                        Optimize Options.   (line 2108)
44408* fdbg-cnt:                              Debugging Options.  (line  420)
44409* fdbg-cnt-list:                         Debugging Options.  (line  417)
44410* fdce:                                  Optimize Options.   (line  517)
44411* fdebug-prefix-map:                     Debugging Options.  (line  283)
44412* fdelayed-branch:                       Optimize Options.   (line  629)
44413* fdelete-null-pointer-checks:           Optimize Options.   (line  540)
44414* fdevirtualize:                         Optimize Options.   (line  558)
44415* fdiagnostics-show-location:            Language Independent Options.
44416                                                             (line   21)
44417* fdiagnostics-show-option:              Language Independent Options.
44418                                                             (line   36)
44419* fdirectives-only:                      Preprocessor Options.
44420                                                             (line  459)
44421* fdollars-in-identifiers <1>:           Interoperation.     (line  146)
44422* fdollars-in-identifiers:               Preprocessor Options.
44423                                                             (line  481)
44424* fdse:                                  Optimize Options.   (line  521)
44425* fdump-class-hierarchy:                 Debugging Options.  (line  698)
44426* fdump-final-insns:                     Debugging Options.  (line  150)
44427* fdump-ipa:                             Debugging Options.  (line  706)
44428* fdump-noaddr:                          Debugging Options.  (line  671)
44429* fdump-rtl-alignments:                  Debugging Options.  (line  450)
44430* fdump-rtl-all:                         Debugging Options.  (line  635)
44431* fdump-rtl-asmcons:                     Debugging Options.  (line  453)
44432* fdump-rtl-auto_inc_dec:                Debugging Options.  (line  457)
44433* fdump-rtl-barriers:                    Debugging Options.  (line  461)
44434* fdump-rtl-bbpart:                      Debugging Options.  (line  464)
44435* fdump-rtl-bbro:                        Debugging Options.  (line  467)
44436* fdump-rtl-btl2:                        Debugging Options.  (line  471)
44437* fdump-rtl-bypass:                      Debugging Options.  (line  475)
44438* fdump-rtl-ce1:                         Debugging Options.  (line  486)
44439* fdump-rtl-ce2:                         Debugging Options.  (line  486)
44440* fdump-rtl-ce3:                         Debugging Options.  (line  486)
44441* fdump-rtl-combine:                     Debugging Options.  (line  478)
44442* fdump-rtl-compgotos:                   Debugging Options.  (line  481)
44443* fdump-rtl-cprop_hardreg:               Debugging Options.  (line  490)
44444* fdump-rtl-csa:                         Debugging Options.  (line  493)
44445* fdump-rtl-cse1:                        Debugging Options.  (line  497)
44446* fdump-rtl-cse2:                        Debugging Options.  (line  497)
44447* fdump-rtl-dbr:                         Debugging Options.  (line  504)
44448* fdump-rtl-dce:                         Debugging Options.  (line  501)
44449* fdump-rtl-dce1:                        Debugging Options.  (line  508)
44450* fdump-rtl-dce2:                        Debugging Options.  (line  508)
44451* fdump-rtl-dfinish:                     Debugging Options.  (line  632)
44452* fdump-rtl-dfinit:                      Debugging Options.  (line  632)
44453* fdump-rtl-eh:                          Debugging Options.  (line  512)
44454* fdump-rtl-eh_ranges:                   Debugging Options.  (line  515)
44455* fdump-rtl-expand:                      Debugging Options.  (line  518)
44456* fdump-rtl-fwprop1:                     Debugging Options.  (line  522)
44457* fdump-rtl-fwprop2:                     Debugging Options.  (line  522)
44458* fdump-rtl-gcse1:                       Debugging Options.  (line  527)
44459* fdump-rtl-gcse2:                       Debugging Options.  (line  527)
44460* fdump-rtl-init-regs:                   Debugging Options.  (line  531)
44461* fdump-rtl-initvals:                    Debugging Options.  (line  534)
44462* fdump-rtl-into_cfglayout:              Debugging Options.  (line  537)
44463* fdump-rtl-ira:                         Debugging Options.  (line  540)
44464* fdump-rtl-jump:                        Debugging Options.  (line  543)
44465* fdump-rtl-loop2:                       Debugging Options.  (line  546)
44466* fdump-rtl-mach:                        Debugging Options.  (line  550)
44467* fdump-rtl-mode_sw:                     Debugging Options.  (line  554)
44468* fdump-rtl-outof_cfglayout:             Debugging Options.  (line  560)
44469* fdump-rtl-peephole2:                   Debugging Options.  (line  563)
44470* fdump-rtl-postreload:                  Debugging Options.  (line  566)
44471* fdump-rtl-pro_and_epilogue:            Debugging Options.  (line  569)
44472* fdump-rtl-regclass:                    Debugging Options.  (line  632)
44473* fdump-rtl-regmove:                     Debugging Options.  (line  572)
44474* fdump-rtl-rnreg:                       Debugging Options.  (line  557)
44475* fdump-rtl-sched1:                      Debugging Options.  (line  576)
44476* fdump-rtl-sched2:                      Debugging Options.  (line  576)
44477* fdump-rtl-see:                         Debugging Options.  (line  580)
44478* fdump-rtl-seqabstr:                    Debugging Options.  (line  583)
44479* fdump-rtl-shorten:                     Debugging Options.  (line  586)
44480* fdump-rtl-sibling:                     Debugging Options.  (line  589)
44481* fdump-rtl-sms:                         Debugging Options.  (line  602)
44482* fdump-rtl-split1:                      Debugging Options.  (line  596)
44483* fdump-rtl-split2:                      Debugging Options.  (line  596)
44484* fdump-rtl-split3:                      Debugging Options.  (line  596)
44485* fdump-rtl-split4:                      Debugging Options.  (line  596)
44486* fdump-rtl-split5:                      Debugging Options.  (line  596)
44487* fdump-rtl-stack:                       Debugging Options.  (line  606)
44488* fdump-rtl-subreg1:                     Debugging Options.  (line  612)
44489* fdump-rtl-subreg2:                     Debugging Options.  (line  612)
44490* fdump-rtl-subregs_of_mode_finish:      Debugging Options.  (line  632)
44491* fdump-rtl-subregs_of_mode_init:        Debugging Options.  (line  632)
44492* fdump-rtl-unshare:                     Debugging Options.  (line  616)
44493* fdump-rtl-vartrack:                    Debugging Options.  (line  619)
44494* fdump-rtl-vregs:                       Debugging Options.  (line  622)
44495* fdump-rtl-web:                         Debugging Options.  (line  625)
44496* fdump-statistics:                      Debugging Options.  (line  724)
44497* fdump-translation-unit:                Debugging Options.  (line  689)
44498* fdump-tree:                            Debugging Options.  (line  735)
44499* fdump-tree-alias:                      Debugging Options.  (line  829)
44500* fdump-tree-all:                        Debugging Options.  (line  919)
44501* fdump-tree-ccp:                        Debugging Options.  (line  833)
44502* fdump-tree-cfg:                        Debugging Options.  (line  809)
44503* fdump-tree-ch:                         Debugging Options.  (line  821)
44504* fdump-tree-copyprop:                   Debugging Options.  (line  849)
44505* fdump-tree-copyrename:                 Debugging Options.  (line  895)
44506* fdump-tree-dce:                        Debugging Options.  (line  857)
44507* fdump-tree-dom:                        Debugging Options.  (line  875)
44508* fdump-tree-dse:                        Debugging Options.  (line  880)
44509* fdump-tree-forwprop:                   Debugging Options.  (line  890)
44510* fdump-tree-fre:                        Debugging Options.  (line  845)
44511* fdump-tree-gimple:                     Debugging Options.  (line  804)
44512* fdump-tree-mudflap:                    Debugging Options.  (line  861)
44513* fdump-tree-nrv:                        Debugging Options.  (line  900)
44514* fdump-tree-optimized:                  Debugging Options.  (line  801)
44515* fdump-tree-original:                   Debugging Options.  (line  798)
44516* fdump-tree-phiopt:                     Debugging Options.  (line  885)
44517* fdump-tree-pre:                        Debugging Options.  (line  841)
44518* fdump-tree-sink:                       Debugging Options.  (line  871)
44519* fdump-tree-slp:                        Debugging Options.  (line  910)
44520* fdump-tree-sra:                        Debugging Options.  (line  866)
44521* fdump-tree-ssa:                        Debugging Options.  (line  825)
44522* fdump-tree-store_copyprop:             Debugging Options.  (line  853)
44523* fdump-tree-storeccp:                   Debugging Options.  (line  837)
44524* fdump-tree-vcg:                        Debugging Options.  (line  813)
44525* fdump-tree-vect:                       Debugging Options.  (line  905)
44526* fdump-tree-vrp:                        Debugging Options.  (line  915)
44527* fdump-unnumbered:                      Debugging Options.  (line  677)
44528* fdump-unnumbered-links:                Debugging Options.  (line  683)
44529* fdwarf2-cfi-asm:                       Debugging Options.  (line  287)
44530* fearly-inlining:                       Optimize Options.   (line  263)
44531* feliminate-dwarf2-dups:                Debugging Options.  (line  195)
44532* feliminate-unused-debug-symbols:       Debugging Options.  (line   52)
44533* feliminate-unused-debug-types:         Debugging Options.  (line 1145)
44534* fenable-icf-debug:                     Debugging Options.  (line  270)
44535* fexceptions:                           Code Gen Options.   (line   34)
44536* fexcess-precision:                     Optimize Options.   (line 1820)
44537* fexec-charset:                         Preprocessor Options.
44538                                                             (line  508)
44539* fexpensive-optimizations:              Optimize Options.   (line  565)
44540* fextended-identifiers:                 Preprocessor Options.
44541                                                             (line  484)
44542* ffast-math:                            Optimize Options.   (line 1843)
44543* ffinite-math-only:                     Optimize Options.   (line 1918)
44544* ffix-and-continue:                     Darwin Options.     (line  106)
44545* ffixed:                                Code Gen Options.   (line  236)
44546* ffloat-store <1>:                      Disappointments.    (line   77)
44547* ffloat-store:                          Optimize Options.   (line 1806)
44548* ffor-scope:                            C++ Dialect Options.
44549                                                             (line  121)
44550* fforward-propagate:                    Optimize Options.   (line  175)
44551* ffp-contract:                          Optimize Options.   (line  184)
44552* ffreestanding <1>:                     Function Attributes.
44553                                                             (line  459)
44554* ffreestanding <2>:                     Warning Options.    (line  238)
44555* ffreestanding <3>:                     C Dialect Options.  (line  225)
44556* ffreestanding:                         Standards.          (line   88)
44557* ffriend-injection:                     C++ Dialect Options.
44558                                                             (line   91)
44559* ffunction-sections:                    Optimize Options.   (line 2108)
44560* fgcse:                                 Optimize Options.   (line  455)
44561* fgcse-after-reload:                    Optimize Options.   (line  491)
44562* fgcse-las:                             Optimize Options.   (line  484)
44563* fgcse-lm:                              Optimize Options.   (line  466)
44564* fgcse-sm:                              Optimize Options.   (line  475)
44565* fgnu-runtime:                          Objective-C and Objective-C++ Dialect Options.
44566                                                             (line   39)
44567* fgnu89-inline:                         C Dialect Options.  (line  133)
44568* fgraphite-identity:                    Optimize Options.   (line 1042)
44569* fhosted:                               C Dialect Options.  (line  218)
44570* fif-conversion:                        Optimize Options.   (line  525)
44571* fif-conversion2:                       Optimize Options.   (line  534)
44572* filelist:                              Darwin Options.     (line  199)
44573* findirect-data:                        Darwin Options.     (line  106)
44574* findirect-inlining:                    Optimize Options.   (line  236)
44575* finhibit-size-directive:               Code Gen Options.   (line  158)
44576* finline-functions:                     Optimize Options.   (line  244)
44577* finline-functions-called-once:         Optimize Options.   (line  255)
44578* finline-limit:                         Optimize Options.   (line  280)
44579* finline-small-functions:               Optimize Options.   (line  228)
44580* finput-charset:                        Preprocessor Options.
44581                                                             (line  521)
44582* finstrument-function-calls:            Code Gen Options.   (line  361)
44583* finstrument-functions <1>:             Function Attributes.
44584                                                             (line  899)
44585* finstrument-functions:                 Code Gen Options.   (line  292)
44586* finstrument-functions-exclude-file-list: Code Gen Options. (line  329)
44587* finstrument-functions-exclude-function-list: Code Gen Options.
44588                                                             (line  349)
44589* fipa-cp:                               Optimize Options.   (line  873)
44590* fipa-cp-clone:                         Optimize Options.   (line  881)
44591* fipa-matrix-reorg:                     Optimize Options.   (line  891)
44592* fipa-profile:                          Optimize Options.   (line  865)
44593* fipa-pta:                              Optimize Options.   (line  859)
44594* fipa-pure-const:                       Optimize Options.   (line  837)
44595* fipa-reference:                        Optimize Options.   (line  841)
44596* fipa-sra:                              Optimize Options.   (line  273)
44597* fipa-struct-reorg:                     Optimize Options.   (line  845)
44598* fira-loop-pressure:                    Optimize Options.   (line  604)
44599* fira-verbose:                          Optimize Options.   (line  624)
44600* fivopts:                               Optimize Options.   (line 1137)
44601* fkeep-inline-functions <1>:            Inline.             (line   51)
44602* fkeep-inline-functions:                Optimize Options.   (line  312)
44603* fkeep-static-consts:                   Optimize Options.   (line  319)
44604* flat_namespace:                        Darwin Options.     (line  199)
44605* flax-vector-conversions:               C Dialect Options.  (line  295)
44606* fleading-underscore:                   Code Gen Options.   (line  455)
44607* floop-block:                           Optimize Options.   (line 1013)
44608* floop-flatten:                         Optimize Options.   (line 1050)
44609* floop-interchange:                     Optimize Options.   (line  966)
44610* floop-parallelize-all:                 Optimize Options.   (line 1055)
44611* floop-strip-mine:                      Optimize Options.   (line  991)
44612* flto:                                  Optimize Options.   (line 1525)
44613* flto-partition:                        Optimize Options.   (line 1696)
44614* fmax-errors:                           Warning Options.    (line   18)
44615* fmem-report:                           Debugging Options.  (line  311)
44616* fmerge-all-constants:                  Optimize Options.   (line  338)
44617* fmerge-constants:                      Optimize Options.   (line  328)
44618* fmerge-debug-strings:                  Debugging Options.  (line  275)
44619* fmessage-length:                       Language Independent Options.
44620                                                             (line   15)
44621* fmodulo-sched:                         Optimize Options.   (line  349)
44622* fmodulo-sched-allow-regmoves:          Optimize Options.   (line  354)
44623* fmove-loop-invariants:                 Optimize Options.   (line 2098)
44624* fms-extensions <1>:                    Unnamed Fields.     (line   36)
44625* fms-extensions <2>:                    C++ Dialect Options.
44626                                                             (line  156)
44627* fms-extensions:                        C Dialect Options.  (line  243)
44628* fmudflap:                              Optimize Options.   (line  394)
44629* fmudflapir:                            Optimize Options.   (line  394)
44630* fmudflapth:                            Optimize Options.   (line  394)
44631* fnext-runtime:                         Objective-C and Objective-C++ Dialect Options.
44632                                                             (line   43)
44633* fno-access-control:                    C++ Dialect Options.
44634                                                             (line   41)
44635* fno-asm:                               C Dialect Options.  (line  170)
44636* fno-branch-count-reg:                  Optimize Options.   (line  361)
44637* fno-builtin <1>:                       Other Builtins.     (line   14)
44638* fno-builtin <2>:                       Function Attributes.
44639                                                             (line  459)
44640* fno-builtin <3>:                       Warning Options.    (line  238)
44641* fno-builtin:                           C Dialect Options.  (line  184)
44642* fno-common <1>:                        Variable Attributes.
44643                                                             (line  105)
44644* fno-common:                            Code Gen Options.   (line  135)
44645* fno-compare-debug:                     Debugging Options.  (line  156)
44646* fno-deduce-init-list:                  C++ Dialect Options.
44647                                                             (line   73)
44648* fno-default-inline <1>:                Inline.             (line   71)
44649* fno-default-inline <2>:                Optimize Options.   (line  160)
44650* fno-default-inline:                    C++ Dialect Options.
44651                                                             (line  330)
44652* fno-defer-pop:                         Optimize Options.   (line  167)
44653* fno-diagnostics-show-option:           Language Independent Options.
44654                                                             (line   36)
44655* fno-dwarf2-cfi-asm:                    Debugging Options.  (line  287)
44656* fno-elide-constructors:                C++ Dialect Options.
44657                                                             (line  104)
44658* fno-enforce-eh-specs:                  C++ Dialect Options.
44659                                                             (line  110)
44660* fno-for-scope:                         C++ Dialect Options.
44661                                                             (line  121)
44662* fno-function-cse:                      Optimize Options.   (line  371)
44663* fno-gnu-keywords:                      C++ Dialect Options.
44664                                                             (line  133)
44665* fno-guess-branch-probability:          Optimize Options.   (line 1275)
44666* fno-ident:                             Code Gen Options.   (line  155)
44667* fno-implement-inlines <1>:             C++ Interface.      (line   75)
44668* fno-implement-inlines:                 C++ Dialect Options.
44669                                                             (line  150)
44670* fno-implicit-inline-templates:         C++ Dialect Options.
44671                                                             (line  144)
44672* fno-implicit-templates <1>:            Template Instantiation.
44673                                                             (line   87)
44674* fno-implicit-templates:                C++ Dialect Options.
44675                                                             (line  138)
44676* fno-inline:                            Optimize Options.   (line  222)
44677* fno-ira-share-save-slots:              Optimize Options.   (line  612)
44678* fno-ira-share-spill-slots:             Optimize Options.   (line  618)
44679* fno-jump-tables:                       Code Gen Options.   (line  228)
44680* fno-math-errno:                        Optimize Options.   (line 1857)
44681* fno-merge-debug-strings:               Debugging Options.  (line  275)
44682* fno-nil-receivers:                     Objective-C and Objective-C++ Dialect Options.
44683                                                             (line   49)
44684* fno-nonansi-builtins:                  C++ Dialect Options.
44685                                                             (line  161)
44686* fno-operator-names:                    C++ Dialect Options.
44687                                                             (line  177)
44688* fno-optional-diags:                    C++ Dialect Options.
44689                                                             (line  181)
44690* fno-peephole:                          Optimize Options.   (line 1266)
44691* fno-peephole2:                         Optimize Options.   (line 1266)
44692* fno-pretty-templates:                  C++ Dialect Options.
44693                                                             (line  191)
44694* fno-rtti:                              C++ Dialect Options.
44695                                                             (line  209)
44696* fno-sched-interblock:                  Optimize Options.   (line  655)
44697* fno-sched-spec:                        Optimize Options.   (line  660)
44698* fno-set-stack-executable:              i386 and x86-64 Windows Options.
44699                                                             (line   46)
44700* fno-show-column:                       Preprocessor Options.
44701                                                             (line  546)
44702* fno-signed-bitfields:                  C Dialect Options.  (line  328)
44703* fno-signed-zeros:                      Optimize Options.   (line 1930)
44704* fno-stack-limit:                       Code Gen Options.   (line  423)
44705* fno-threadsafe-statics:                C++ Dialect Options.
44706                                                             (line  240)
44707* fno-toplevel-reorder:                  Optimize Options.   (line 1481)
44708* fno-trapping-math:                     Optimize Options.   (line 1940)
44709* fno-unsigned-bitfields:                C Dialect Options.  (line  328)
44710* fno-use-cxa-get-exception-ptr:         C++ Dialect Options.
44711                                                             (line  253)
44712* fno-var-tracking-assignments:          Debugging Options.  (line 1056)
44713* fno-var-tracking-assignments-toggle:   Debugging Options.  (line 1066)
44714* fno-weak:                              C++ Dialect Options.
44715                                                             (line  315)
44716* fno-working-directory:                 Preprocessor Options.
44717                                                             (line  531)
44718* fno-zero-initialized-in-bss:           Optimize Options.   (line  382)
44719* fnon-call-exceptions:                  Code Gen Options.   (line   48)
44720* fnothrow-opt:                          C++ Dialect Options.
44721                                                             (line  166)
44722* fobjc-abi-version:                     Objective-C and Objective-C++ Dialect Options.
44723                                                             (line   56)
44724* fobjc-call-cxx-cdtors:                 Objective-C and Objective-C++ Dialect Options.
44725                                                             (line   67)
44726* fobjc-direct-dispatch:                 Objective-C and Objective-C++ Dialect Options.
44727                                                             (line   92)
44728* fobjc-exceptions:                      Objective-C and Objective-C++ Dialect Options.
44729                                                             (line   96)
44730* fobjc-gc:                              Objective-C and Objective-C++ Dialect Options.
44731                                                             (line  105)
44732* fobjc-nilcheck:                        Objective-C and Objective-C++ Dialect Options.
44733                                                             (line  111)
44734* fobjc-std:                             Objective-C and Objective-C++ Dialect Options.
44735                                                             (line  120)
44736* fomit-frame-pointer:                   Optimize Options.   (line  195)
44737* fopenmp:                               C Dialect Options.  (line  235)
44738* foptimize-register-move:               Optimize Options.   (line  572)
44739* foptimize-sibling-calls:               Optimize Options.   (line  217)
44740* force_cpusubtype_ALL:                  Darwin Options.     (line  138)
44741* force_flat_namespace:                  Darwin Options.     (line  199)
44742* fpack-struct:                          Code Gen Options.   (line  279)
44743* fpartial-inlining:                     Optimize Options.   (line 1241)
44744* fpcc-struct-return <1>:                Incompatibilities.  (line  170)
44745* fpcc-struct-return:                    Code Gen Options.   (line   70)
44746* fpch-deps:                             Preprocessor Options.
44747                                                             (line  282)
44748* fpch-preprocess:                       Preprocessor Options.
44749                                                             (line  290)
44750* fpeel-loops:                           Optimize Options.   (line 2090)
44751* fpermissive:                           C++ Dialect Options.
44752                                                             (line  186)
44753* fPIC:                                  Code Gen Options.   (line  205)
44754* fpic:                                  Code Gen Options.   (line  184)
44755* fPIE:                                  Code Gen Options.   (line  218)
44756* fpie:                                  Code Gen Options.   (line  218)
44757* fplan9-extensions:                     Unnamed Fields.     (line   44)
44758* fpost-ipa-mem-report:                  Debugging Options.  (line  317)
44759* fpre-ipa-mem-report:                   Debugging Options.  (line  315)
44760* fpredictive-commoning:                 Optimize Options.   (line 1248)
44761* fprefetch-loop-arrays:                 Optimize Options.   (line 1255)
44762* fpreprocessed:                         Preprocessor Options.
44763                                                             (line  489)
44764* fprofile-arcs <1>:                     Other Builtins.     (line  247)
44765* fprofile-arcs:                         Debugging Options.  (line  352)
44766* fprofile-correction:                   Optimize Options.   (line 1757)
44767* fprofile-dir:                          Optimize Options.   (line 1764)
44768* fprofile-generate:                     Optimize Options.   (line 1774)
44769* fprofile-use:                          Optimize Options.   (line 1787)
44770* fprofile-values:                       Optimize Options.   (line 2039)
44771* fpromote-loop-indices:                 Optimize Options.   (line 2183)
44772* fpu:                                   RX Options.         (line   17)
44773* frandom-seed:                          Debugging Options.  (line  950)
44774* freciprocal-math:                      Optimize Options.   (line 1909)
44775* frecord-gcc-switches:                  Code Gen Options.   (line  174)
44776* freg-struct-return:                    Code Gen Options.   (line   88)
44777* fregmove:                              Optimize Options.   (line  572)
44778* fremove-local-statics:                 Optimize Options.   (line 2177)
44779* frename-registers:                     Optimize Options.   (line 2057)
44780* freorder-blocks:                       Optimize Options.   (line 1292)
44781* freorder-blocks-and-partition:         Optimize Options.   (line 1298)
44782* freorder-functions:                    Optimize Options.   (line 1309)
44783* freplace-objc-classes:                 Objective-C and Objective-C++ Dialect Options.
44784                                                             (line  131)
44785* frepo <1>:                             Template Instantiation.
44786                                                             (line   62)
44787* frepo:                                 C++ Dialect Options.
44788                                                             (line  204)
44789* frerun-cse-after-loop:                 Optimize Options.   (line  449)
44790* freschedule-modulo-scheduled-loops:    Optimize Options.   (line  756)
44791* frounding-math:                        Optimize Options.   (line 1955)
44792* fsched-critical-path-heuristic:        Optimize Options.   (line  722)
44793* fsched-dep-count-heuristic:            Optimize Options.   (line  749)
44794* fsched-group-heuristic:                Optimize Options.   (line  716)
44795* fsched-last-insn-heuristic:            Optimize Options.   (line  742)
44796* fsched-pressure:                       Optimize Options.   (line  665)
44797* fsched-rank-heuristic:                 Optimize Options.   (line  735)
44798* fsched-spec-insn-heuristic:            Optimize Options.   (line  728)
44799* fsched-spec-load:                      Optimize Options.   (line  674)
44800* fsched-spec-load-dangerous:            Optimize Options.   (line  679)
44801* fsched-stalled-insns:                  Optimize Options.   (line  685)
44802* fsched-stalled-insns-dep:              Optimize Options.   (line  695)
44803* fsched-verbose:                        Debugging Options.  (line  960)
44804* fsched2-use-superblocks:               Optimize Options.   (line  705)
44805* fschedule-insns:                       Optimize Options.   (line  636)
44806* fschedule-insns2:                      Optimize Options.   (line  646)
44807* fsection-anchors:                      Optimize Options.   (line 2153)
44808* fsel-sched-pipelining:                 Optimize Options.   (line  770)
44809* fsel-sched-pipelining-outer-loops:     Optimize Options.   (line  775)
44810* fselective-scheduling:                 Optimize Options.   (line  762)
44811* fselective-scheduling2:                Optimize Options.   (line  766)
44812* fshort-double:                         Code Gen Options.   (line  117)
44813* fshort-enums <1>:                      Non-bugs.           (line   42)
44814* fshort-enums <2>:                      Type Attributes.    (line  113)
44815* fshort-enums <3>:                      Structures unions enumerations and bit-fields implementation.
44816                                                             (line   43)
44817* fshort-enums:                          Code Gen Options.   (line  106)
44818* fshort-wchar:                          Code Gen Options.   (line  125)
44819* fshrink-wrap:                          Optimize Options.   (line  780)
44820* fsignaling-nans:                       Optimize Options.   (line 1975)
44821* fsigned-bitfields <1>:                 Non-bugs.           (line   57)
44822* fsigned-bitfields:                     C Dialect Options.  (line  328)
44823* fsigned-char <1>:                      Characters implementation.
44824                                                             (line   31)
44825* fsigned-char:                          C Dialect Options.  (line  318)
44826* fsingle-precision-constant:            Optimize Options.   (line 1990)
44827* fsplit-ivs-in-unroller:                Optimize Options.   (line 1222)
44828* fsplit-stack <1>:                      Function Attributes.
44829                                                             (line  904)
44830* fsplit-stack:                          Code Gen Options.   (line  437)
44831* fsplit-wide-types:                     Optimize Options.   (line  424)
44832* fstack-check:                          Code Gen Options.   (line  384)
44833* fstack-limit-register:                 Code Gen Options.   (line  423)
44834* fstack-limit-symbol:                   Code Gen Options.   (line  423)
44835* fstack-protector:                      Optimize Options.   (line 2141)
44836* fstack-protector-all:                  Optimize Options.   (line 2150)
44837* fstack-usage:                          Debugging Options.  (line  321)
44838* fstats:                                C++ Dialect Options.
44839                                                             (line  219)
44840* fstrict-aliasing:                      Optimize Options.   (line 1322)
44841* fstrict-enums:                         C++ Dialect Options.
44842                                                             (line  224)
44843* fstrict-overflow:                      Optimize Options.   (line 1368)
44844* fstrict-volatile-bitfields:            Code Gen Options.   (line  540)
44845* fsyntax-only:                          Warning Options.    (line   14)
44846* ftabstop:                              Preprocessor Options.
44847                                                             (line  502)
44848* ftemplate-depth:                       C++ Dialect Options.
44849                                                             (line  233)
44850* ftest-coverage:                        Debugging Options.  (line  408)
44851* fthread-jumps:                         Optimize Options.   (line  415)
44852* ftime-report:                          Debugging Options.  (line  307)
44853* ftls-model:                            Code Gen Options.   (line  466)
44854* ftracer:                               Optimize Options.   (line 1205)
44855* ftrapv:                                Code Gen Options.   (line   22)
44856* ftree-bit-ccp:                         Optimize Options.   (line  905)
44857* ftree-builtin-call-dce:                Optimize Options.   (line  929)
44858* ftree-ccp:                             Optimize Options.   (line  911)
44859* ftree-ch:                              Optimize Options.   (line  949)
44860* ftree-copy-prop:                       Optimize Options.   (line  832)
44861* ftree-copyrename:                      Optimize Options.   (line 1161)
44862* ftree-dce:                             Optimize Options.   (line  925)
44863* ftree-dominator-opts:                  Optimize Options.   (line  935)
44864* ftree-dse:                             Optimize Options.   (line  942)
44865* ftree-forwprop:                        Optimize Options.   (line  817)
44866* ftree-fre:                             Optimize Options.   (line  821)
44867* ftree-loop-im:                         Optimize Options.   (line 1122)
44868* ftree-loop-ivcanon:                    Optimize Options.   (line 1131)
44869* ftree-loop-linear:                     Optimize Options.   (line  960)
44870* ftree-loop-optimize:                   Optimize Options.   (line  956)
44871* ftree-parallelize-loops:               Optimize Options.   (line 1142)
44872* ftree-phiprop:                         Optimize Options.   (line  828)
44873* ftree-pre:                             Optimize Options.   (line  813)
44874* ftree-pta:                             Optimize Options.   (line 1151)
44875* ftree-reassoc:                         Optimize Options.   (line  809)
44876* ftree-sink:                            Optimize Options.   (line  901)
44877* ftree-slp-vectorize:                   Optimize Options.   (line 1180)
44878* ftree-sra:                             Optimize Options.   (line 1155)
44879* ftree-ter:                             Optimize Options.   (line 1168)
44880* ftree-vect-loop-version:               Optimize Options.   (line 1184)
44881* ftree-vectorize:                       Optimize Options.   (line 1176)
44882* ftree-vectorizer-verbose:              Debugging Options.  (line  923)
44883* ftree-vrp:                             Optimize Options.   (line 1196)
44884* funit-at-a-time:                       Optimize Options.   (line 1474)
44885* funroll-all-loops:                     Optimize Options.   (line 1216)
44886* funroll-loops:                         Optimize Options.   (line 1210)
44887* funsafe-loop-optimizations:            Optimize Options.   (line  496)
44888* funsafe-math-optimizations:            Optimize Options.   (line 1875)
44889* funsigned-bitfields <1>:               Non-bugs.           (line   57)
44890* funsigned-bitfields <2>:               Structures unions enumerations and bit-fields implementation.
44891                                                             (line   17)
44892* funsigned-bitfields:                   C Dialect Options.  (line  328)
44893* funsigned-char <1>:                    Characters implementation.
44894                                                             (line   31)
44895* funsigned-char:                        C Dialect Options.  (line  300)
44896* funswitch-loops:                       Optimize Options.   (line 2102)
44897* funwind-tables:                        Code Gen Options.   (line   57)
44898* fuse-cxa-atexit:                       C++ Dialect Options.
44899                                                             (line  246)
44900* fvar-tracking:                         Debugging Options.  (line 1046)
44901* fvar-tracking-assignments:             Debugging Options.  (line 1056)
44902* fvar-tracking-assignments-toggle:      Debugging Options.  (line 1066)
44903* fvariable-expansion-in-unroller:       Optimize Options.   (line 1236)
44904* fvect-cost-model:                      Optimize Options.   (line 1193)
44905* fverbose-asm:                          Code Gen Options.   (line  165)
44906* fvisibility:                           Code Gen Options.   (line  474)
44907* fvisibility-inlines-hidden:            C++ Dialect Options.
44908                                                             (line  258)
44909* fvisibility-ms-compat:                 C++ Dialect Options.
44910                                                             (line  286)
44911* fvpt:                                  Optimize Options.   (line 2048)
44912* fweb:                                  Optimize Options.   (line 1493)
44913* fwhole-program:                        Optimize Options.   (line 1504)
44914* fwide-exec-charset:                    Preprocessor Options.
44915                                                             (line  513)
44916* fworking-directory:                    Preprocessor Options.
44917                                                             (line  531)
44918* fwrapv:                                Code Gen Options.   (line   26)
44919* fzero-link:                            Objective-C and Objective-C++ Dialect Options.
44920                                                             (line  141)
44921* G <1>:                                 System V Options.   (line   10)
44922* G <2>:                                 RS/6000 and PowerPC Options.
44923                                                             (line  701)
44924* G <3>:                                 MIPS Options.       (line  317)
44925* G:                                     M32R/D Options.     (line   57)
44926* g:                                     Debugging Options.  (line   10)
44927* gcoff:                                 Debugging Options.  (line   70)
44928* gdwarf-VERSION:                        Debugging Options.  (line   88)
44929* gen-decls:                             Objective-C and Objective-C++ Dialect Options.
44930                                                             (line  153)
44931* gfull:                                 Darwin Options.     (line   71)
44932* ggdb:                                  Debugging Options.  (line   38)
44933* gno-strict-dwarf:                      Debugging Options.  (line  105)
44934* gstabs:                                Debugging Options.  (line   44)
44935* gstabs+:                               Debugging Options.  (line   64)
44936* gstrict-dwarf:                         Debugging Options.  (line   99)
44937* gtoggle:                               Debugging Options.  (line  142)
44938* gused:                                 Darwin Options.     (line   66)
44939* gvms:                                  Debugging Options.  (line  109)
44940* gxcoff:                                Debugging Options.  (line   75)
44941* gxcoff+:                               Debugging Options.  (line   80)
44942* H:                                     Preprocessor Options.
44943                                                             (line  664)
44944* headerpad_max_install_names:           Darwin Options.     (line  199)
44945* help <1>:                              Preprocessor Options.
44946                                                             (line  656)
44947* help:                                  Overall Options.    (line  221)
44948* I <1>:                                 Directory Options.  (line   10)
44949* I:                                     Preprocessor Options.
44950                                                             (line   65)
44951* I- <1>:                                Directory Options.  (line  112)
44952* I-:                                    Preprocessor Options.
44953                                                             (line  373)
44954* idirafter:                             Preprocessor Options.
44955                                                             (line  415)
44956* iframework:                            Darwin Options.     (line   59)
44957* imacros:                               Preprocessor Options.
44958                                                             (line  406)
44959* image_base:                            Darwin Options.     (line  199)
44960* imultilib:                             Preprocessor Options.
44961                                                             (line  440)
44962* include:                               Preprocessor Options.
44963                                                             (line  395)
44964* init:                                  Darwin Options.     (line  199)
44965* install_name:                          Darwin Options.     (line  199)
44966* iprefix:                               Preprocessor Options.
44967                                                             (line  422)
44968* iquote <1>:                            Directory Options.  (line   36)
44969* iquote:                                Preprocessor Options.
44970                                                             (line  452)
44971* isysroot:                              Preprocessor Options.
44972                                                             (line  434)
44973* isystem:                               Preprocessor Options.
44974                                                             (line  444)
44975* iwithprefix:                           Preprocessor Options.
44976                                                             (line  428)
44977* iwithprefixbefore:                     Preprocessor Options.
44978                                                             (line  428)
44979* keep_private_externs:                  Darwin Options.     (line  199)
44980* L:                                     Directory Options.  (line   42)
44981* l:                                     Link Options.       (line   26)
44982* lobjc:                                 Link Options.       (line   53)
44983* m:                                     RS/6000 and PowerPC Options.
44984                                                             (line  552)
44985* M:                                     Preprocessor Options.
44986                                                             (line  173)
44987* m1:                                    SH Options.         (line    9)
44988* m10:                                   PDP-11 Options.     (line   29)
44989* m128bit-long-double:                   i386 and x86-64 Options.
44990                                                             (line  278)
44991* m16-bit:                               CRIS Options.       (line   64)
44992* m2:                                    SH Options.         (line   12)
44993* m210:                                  MCore Options.      (line   43)
44994* m2a:                                   SH Options.         (line   30)
44995* m2a-nofpu:                             SH Options.         (line   18)
44996* m2a-single:                            SH Options.         (line   26)
44997* m2a-single-only:                       SH Options.         (line   22)
44998* m3:                                    SH Options.         (line   34)
44999* m31:                                   S/390 and zSeries Options.
45000                                                             (line   87)
45001* m32 <1>:                               SPARC Options.      (line  177)
45002* m32 <2>:                               RS/6000 and PowerPC Options.
45003                                                             (line  266)
45004* m32:                                   i386 and x86-64 Options.
45005                                                             (line  687)
45006* m32-bit:                               CRIS Options.       (line   64)
45007* m32bit-doubles:                        RX Options.         (line   10)
45008* m32r:                                  M32R/D Options.     (line   15)
45009* m32r2:                                 M32R/D Options.     (line    9)
45010* m32rx:                                 M32R/D Options.     (line   12)
45011* m340:                                  MCore Options.      (line   43)
45012* m3dnow:                                i386 and x86-64 Options.
45013                                                             (line  472)
45014* m3e:                                   SH Options.         (line   37)
45015* m4:                                    SH Options.         (line   51)
45016* m4-nofpu:                              SH Options.         (line   40)
45017* m4-single:                             SH Options.         (line   47)
45018* m4-single-only:                        SH Options.         (line   43)
45019* m40:                                   PDP-11 Options.     (line   23)
45020* m45:                                   PDP-11 Options.     (line   26)
45021* m4a:                                   SH Options.         (line   66)
45022* m4a-nofpu:                             SH Options.         (line   54)
45023* m4a-single:                            SH Options.         (line   62)
45024* m4a-single-only:                       SH Options.         (line   58)
45025* m4al:                                  SH Options.         (line   69)
45026* m4byte-functions:                      MCore Options.      (line   27)
45027* m5200:                                 M680x0 Options.     (line  147)
45028* m5206e:                                M680x0 Options.     (line  156)
45029* m528x:                                 M680x0 Options.     (line  160)
45030* m5307:                                 M680x0 Options.     (line  164)
45031* m5407:                                 M680x0 Options.     (line  168)
45032* m64 <1>:                               SPARC Options.      (line  177)
45033* m64 <2>:                               S/390 and zSeries Options.
45034                                                             (line   87)
45035* m64 <3>:                               RS/6000 and PowerPC Options.
45036                                                             (line  266)
45037* m64:                                   i386 and x86-64 Options.
45038                                                             (line  687)
45039* m64bit-doubles:                        RX Options.         (line   10)
45040* m68000:                                M680x0 Options.     (line   95)
45041* m68010:                                M680x0 Options.     (line  103)
45042* m68020:                                M680x0 Options.     (line  109)
45043* m68020-40:                             M680x0 Options.     (line  178)
45044* m68020-60:                             M680x0 Options.     (line  187)
45045* m68030:                                M680x0 Options.     (line  114)
45046* m68040:                                M680x0 Options.     (line  119)
45047* m68060:                                M680x0 Options.     (line  128)
45048* m6811:                                 M68hc1x Options.    (line   13)
45049* m6812:                                 M68hc1x Options.    (line   18)
45050* m68881:                                M680x0 Options.     (line  197)
45051* m68hc11:                               M68hc1x Options.    (line   13)
45052* m68hc12:                               M68hc1x Options.    (line   18)
45053* m68hcs12:                              M68hc1x Options.    (line   23)
45054* m68S12:                                M68hc1x Options.    (line   23)
45055* m8-bit:                                CRIS Options.       (line   64)
45056* m96bit-long-double:                    i386 and x86-64 Options.
45057                                                             (line  278)
45058* mabi <1>:                              RS/6000 and PowerPC Options.
45059                                                             (line  583)
45060* mabi <2>:                              i386 and x86-64 Options.
45061                                                             (line  587)
45062* mabi:                                  ARM Options.        (line   10)
45063* mabi=32:                               MIPS Options.       (line  132)
45064* mabi=64:                               MIPS Options.       (line  132)
45065* mabi=eabi:                             MIPS Options.       (line  132)
45066* mabi=gnu:                              MMIX Options.       (line   20)
45067* mabi=ibmlongdouble:                    RS/6000 and PowerPC Options.
45068                                                             (line  596)
45069* mabi=ieeelongdouble:                   RS/6000 and PowerPC Options.
45070                                                             (line  600)
45071* mabi=mmixware:                         MMIX Options.       (line   20)
45072* mabi=n32:                              MIPS Options.       (line  132)
45073* mabi=no-spe:                           RS/6000 and PowerPC Options.
45074                                                             (line  593)
45075* mabi=o64:                              MIPS Options.       (line  132)
45076* mabi=spe:                              RS/6000 and PowerPC Options.
45077                                                             (line  588)
45078* mabicalls:                             MIPS Options.       (line  156)
45079* mabort-on-noreturn:                    ARM Options.        (line  162)
45080* mabsdiff:                              MeP Options.        (line    7)
45081* mabshi:                                PDP-11 Options.     (line   55)
45082* mac0:                                  PDP-11 Options.     (line   16)
45083* macc-4:                                FRV Options.        (line  113)
45084* macc-8:                                FRV Options.        (line  116)
45085* maccumulate-outgoing-args <1>:         SH Options.         (line  199)
45086* maccumulate-outgoing-args:             i386 and x86-64 Options.
45087                                                             (line  604)
45088* maddress-space-conversion:             SPU Options.        (line   63)
45089* madjust-unroll:                        SH Options.         (line  219)
45090* mads:                                  RS/6000 and PowerPC Options.
45091                                                             (line  626)
45092* maix-struct-return:                    RS/6000 and PowerPC Options.
45093                                                             (line  576)
45094* maix32:                                RS/6000 and PowerPC Options.
45095                                                             (line  304)
45096* maix64:                                RS/6000 and PowerPC Options.
45097                                                             (line  304)
45098* malign-300:                            H8/300 Options.     (line   31)
45099* malign-double:                         i386 and x86-64 Options.
45100                                                             (line  262)
45101* malign-int:                            M680x0 Options.     (line  267)
45102* malign-labels:                         FRV Options.        (line  104)
45103* malign-loops:                          M32R/D Options.     (line   73)
45104* malign-natural:                        RS/6000 and PowerPC Options.
45105                                                             (line  343)
45106* malign-power:                          RS/6000 and PowerPC Options.
45107                                                             (line  343)
45108* mall-opts:                             MeP Options.        (line   11)
45109* malloc-cc:                             FRV Options.        (line   25)
45110* malpha-as:                             DEC Alpha Options.  (line  159)
45111* maltivec:                              RS/6000 and PowerPC Options.
45112                                                             (line  191)
45113* mam33:                                 MN10300 Options.    (line   17)
45114* mam33-2:                               MN10300 Options.    (line   24)
45115* mam34:                                 MN10300 Options.    (line   28)
45116* mandroid:                              GNU/Linux Options.  (line   21)
45117* mapcs:                                 ARM Options.        (line   22)
45118* mapcs-frame:                           ARM Options.        (line   14)
45119* mapp-regs <1>:                         V850 Options.       (line   57)
45120* mapp-regs:                             SPARC Options.      (line   10)
45121* march <1>:                             S/390 and zSeries Options.
45122                                                             (line  116)
45123* march <2>:                             MIPS Options.       (line   14)
45124* march <3>:                             M680x0 Options.     (line   12)
45125* march <4>:                             i386 and x86-64 Options.
45126                                                             (line  161)
45127* march <5>:                             HPPA Options.       (line    9)
45128* march <6>:                             CRIS Options.       (line   10)
45129* march:                                 ARM Options.        (line  108)
45130* mas100-syntax:                         RX Options.         (line   75)
45131* masm=DIALECT:                          i386 and x86-64 Options.
45132                                                             (line  218)
45133* matomic-updates:                       SPU Options.        (line   78)
45134* mauto-incdec:                          M68hc1x Options.    (line   26)
45135* mauto-pic:                             IA-64 Options.      (line   50)
45136* maverage:                              MeP Options.        (line   16)
45137* mavoid-indexed-addresses:              RS/6000 and PowerPC Options.
45138                                                             (line  412)
45139* mb:                                    SH Options.         (line   74)
45140* mbackchain:                            S/390 and zSeries Options.
45141                                                             (line   35)
45142* mbarrel-shift-enabled:                 LM32 Options.       (line    9)
45143* mbase-addresses:                       MMIX Options.       (line   54)
45144* mbased=:                               MeP Options.        (line   20)
45145* mbcopy:                                PDP-11 Options.     (line   36)
45146* mbcopy-builtin:                        PDP-11 Options.     (line   32)
45147* mbig:                                  RS/6000 and PowerPC Options.
45148                                                             (line  493)
45149* mbig-endian <1>:                       RS/6000 and PowerPC Options.
45150                                                             (line  493)
45151* mbig-endian <2>:                       MCore Options.      (line   39)
45152* mbig-endian <3>:                       IA-64 Options.      (line    9)
45153* mbig-endian:                           ARM Options.        (line   67)
45154* mbig-endian-data:                      RX Options.         (line   42)
45155* mbig-switch <1>:                       V850 Options.       (line   52)
45156* mbig-switch:                           HPPA Options.       (line   23)
45157* mbigtable:                             SH Options.         (line   90)
45158* mbionic:                               GNU/Linux Options.  (line   17)
45159* mbit-align:                            RS/6000 and PowerPC Options.
45160                                                             (line  444)
45161* mbitfield:                             M680x0 Options.     (line  235)
45162* mbitops <1>:                           SH Options.         (line   94)
45163* mbitops:                               MeP Options.        (line   26)
45164* mblock-move-inline-limit:              RS/6000 and PowerPC Options.
45165                                                             (line  695)
45166* mbranch-cheap:                         PDP-11 Options.     (line   65)
45167* mbranch-cost:                          MIPS Options.       (line  622)
45168* mbranch-cost=NUMBER:                   M32R/D Options.     (line   82)
45169* mbranch-expensive:                     PDP-11 Options.     (line   61)
45170* mbranch-hints:                         SPU Options.        (line   27)
45171* mbranch-likely:                        MIPS Options.       (line  629)
45172* mbranch-predict:                       MMIX Options.       (line   49)
45173* mbss-plt:                              RS/6000 and PowerPC Options.
45174                                                             (line  214)
45175* mbuild-constants:                      DEC Alpha Options.  (line  142)
45176* mbwx:                                  DEC Alpha Options.  (line  171)
45177* mc68000:                               M680x0 Options.     (line   95)
45178* mc68020:                               M680x0 Options.     (line  109)
45179* mc=:                                   MeP Options.        (line   31)
45180* mcache-size:                           SPU Options.        (line   70)
45181* mcall-eabi:                            RS/6000 and PowerPC Options.
45182                                                             (line  546)
45183* mcall-freebsd:                         RS/6000 and PowerPC Options.
45184                                                             (line  564)
45185* mcall-gnu:                             RS/6000 and PowerPC Options.
45186                                                             (line  560)
45187* mcall-linux:                           RS/6000 and PowerPC Options.
45188                                                             (line  556)
45189* mcall-netbsd:                          RS/6000 and PowerPC Options.
45190                                                             (line  568)
45191* mcall-prologues:                       AVR Options.        (line   36)
45192* mcall-sysv:                            RS/6000 and PowerPC Options.
45193                                                             (line  538)
45194* mcall-sysv-eabi:                       RS/6000 and PowerPC Options.
45195                                                             (line  546)
45196* mcall-sysv-noeabi:                     RS/6000 and PowerPC Options.
45197                                                             (line  549)
45198* mcallee-super-interworking:            ARM Options.        (line  255)
45199* mcaller-super-interworking:            ARM Options.        (line  262)
45200* mcallgraph-data:                       MCore Options.      (line   31)
45201* mcc-init:                              CRIS Options.       (line   41)
45202* mcfv4e:                                M680x0 Options.     (line  172)
45203* mcheck-zero-division:                  MIPS Options.       (line  428)
45204* mcirrus-fix-invalid-insns:             ARM Options.        (line  202)
45205* mcix:                                  DEC Alpha Options.  (line  171)
45206* mcld:                                  i386 and x86-64 Options.
45207                                                             (line  501)
45208* mclip:                                 MeP Options.        (line   35)
45209* mcmodel=embmedany:                     SPARC Options.      (line  199)
45210* mcmodel=kernel:                        i386 and x86-64 Options.
45211                                                             (line  709)
45212* mcmodel=large <1>:                     RS/6000 and PowerPC Options.
45213                                                             (line  185)
45214* mcmodel=large:                         i386 and x86-64 Options.
45215                                                             (line  721)
45216* mcmodel=medany:                        SPARC Options.      (line  193)
45217* mcmodel=medium <1>:                    RS/6000 and PowerPC Options.
45218                                                             (line  181)
45219* mcmodel=medium:                        i386 and x86-64 Options.
45220                                                             (line  714)
45221* mcmodel=medlow:                        SPARC Options.      (line  182)
45222* mcmodel=medmid:                        SPARC Options.      (line  187)
45223* mcmodel=small <1>:                     RS/6000 and PowerPC Options.
45224                                                             (line  177)
45225* mcmodel=small:                         i386 and x86-64 Options.
45226                                                             (line  703)
45227* mcmpb:                                 RS/6000 and PowerPC Options.
45228                                                             (line   33)
45229* mcode-readable:                        MIPS Options.       (line  388)
45230* mcond-exec:                            FRV Options.        (line  152)
45231* mcond-move:                            FRV Options.        (line  128)
45232* mconfig=:                              MeP Options.        (line   39)
45233* mconsole:                              i386 and x86-64 Windows Options.
45234                                                             (line    9)
45235* mconst-align:                          CRIS Options.       (line   55)
45236* mconst16:                              Xtensa Options.     (line   10)
45237* mconstant-gp:                          IA-64 Options.      (line   46)
45238* mcop:                                  MeP Options.        (line   48)
45239* mcop32:                                MeP Options.        (line   53)
45240* mcop64:                                MeP Options.        (line   56)
45241* mcorea:                                Blackfin Options.   (line  150)
45242* mcoreb:                                Blackfin Options.   (line  156)
45243* mcpu <1>:                              SPARC Options.      (line   81)
45244* mcpu <2>:                              RS/6000 and PowerPC Options.
45245                                                             (line  119)
45246* mcpu <3>:                              picoChip Options.   (line    9)
45247* mcpu <4>:                              M680x0 Options.     (line   28)
45248* mcpu <5>:                              i386 and x86-64 Options.
45249                                                             (line  166)
45250* mcpu <6>:                              FRV Options.        (line  212)
45251* mcpu <7>:                              DEC Alpha Options.  (line  223)
45252* mcpu <8>:                              CRIS Options.       (line   10)
45253* mcpu <9>:                              ARM Options.        (line   79)
45254* mcpu:                                  ARC Options.        (line   23)
45255* mcpu32:                                M680x0 Options.     (line  138)
45256* mcpu= <1>:                             MicroBlaze Options. (line   20)
45257* mcpu= <2>:                             M32C Options.       (line    7)
45258* mcpu=:                                 Blackfin Options.   (line    7)
45259* mcrc32:                                i386 and x86-64 Options.
45260                                                             (line  543)
45261* mcsync-anomaly:                        Blackfin Options.   (line   56)
45262* mcx16:                                 i386 and x86-64 Options.
45263                                                             (line  521)
45264* MD:                                    Preprocessor Options.
45265                                                             (line  262)
45266* mdalign:                               SH Options.         (line   80)
45267* mdata:                                 ARC Options.        (line   30)
45268* mdata-align:                           CRIS Options.       (line   55)
45269* mdc:                                   MeP Options.        (line   62)
45270* mdebug <1>:                            S/390 and zSeries Options.
45271                                                             (line  112)
45272* mdebug:                                M32R/D Options.     (line   69)
45273* mdebug-main=PREFIX <1>:                IA-64/VMS Options.  (line   13)
45274* mdebug-main=PREFIX:                    DEC Alpha/VMS Options.
45275                                                             (line   13)
45276* mdec-asm:                              PDP-11 Options.     (line   72)
45277* mdisable-callt:                        V850 Options.       (line   93)
45278* mdisable-fpregs:                       HPPA Options.       (line   33)
45279* mdisable-indexing:                     HPPA Options.       (line   40)
45280* mdiv <1>:                              MeP Options.        (line   65)
45281* mdiv <2>:                              MCore Options.      (line   15)
45282* mdiv:                                  M680x0 Options.     (line  209)
45283* mdiv=STRATEGY:                         SH Options.         (line  158)
45284* mdivide-breaks:                        MIPS Options.       (line  434)
45285* mdivide-enabled:                       LM32 Options.       (line   12)
45286* mdivide-traps:                         MIPS Options.       (line  434)
45287* mdivsi3_libfunc=NAME:                  SH Options.         (line  205)
45288* mdll:                                  i386 and x86-64 Windows Options.
45289                                                             (line   16)
45290* mdlmzb:                                RS/6000 and PowerPC Options.
45291                                                             (line  437)
45292* mdmx:                                  MIPS Options.       (line  281)
45293* mdouble:                               FRV Options.        (line   38)
45294* mdouble-float <1>:                     RS/6000 and PowerPC Options.
45295                                                             (line  361)
45296* mdouble-float:                         MIPS Options.       (line  239)
45297* mdsp:                                  MIPS Options.       (line  258)
45298* mdspr2:                                MIPS Options.       (line  264)
45299* mdual-nops:                            SPU Options.        (line   90)
45300* mdwarf2-asm:                           IA-64 Options.      (line   94)
45301* mdword:                                FRV Options.        (line   32)
45302* mdynamic-no-pic:                       RS/6000 and PowerPC Options.
45303                                                             (line  498)
45304* mea32:                                 SPU Options.        (line   55)
45305* mea64:                                 SPU Options.        (line   55)
45306* meabi:                                 RS/6000 and PowerPC Options.
45307                                                             (line  645)
45308* mearly-stop-bits:                      IA-64 Options.      (line  100)
45309* meb <1>:                               Score Options.      (line    9)
45310* meb:                                   MeP Options.        (line   68)
45311* mel <1>:                               Score Options.      (line   12)
45312* mel:                                   MeP Options.        (line   71)
45313* melf <1>:                              MMIX Options.       (line   44)
45314* melf:                                  CRIS Options.       (line   87)
45315* memb:                                  RS/6000 and PowerPC Options.
45316                                                             (line  640)
45317* membedded-data:                        MIPS Options.       (line  375)
45318* memregs=:                              M32C Options.       (line   21)
45319* mep:                                   V850 Options.       (line   16)
45320* mepsilon:                              MMIX Options.       (line   15)
45321* merror-reloc:                          SPU Options.        (line   10)
45322* mesa:                                  S/390 and zSeries Options.
45323                                                             (line   95)
45324* metrax100:                             CRIS Options.       (line   26)
45325* metrax4:                               CRIS Options.       (line   26)
45326* mexplicit-relocs <1>:                  MIPS Options.       (line  419)
45327* mexplicit-relocs:                      DEC Alpha Options.  (line  184)
45328* mextern-sdata:                         MIPS Options.       (line  337)
45329* MF:                                    Preprocessor Options.
45330                                                             (line  208)
45331* mfast-fp:                              Blackfin Options.   (line  129)
45332* mfast-indirect-calls:                  HPPA Options.       (line   52)
45333* mfaster-structs:                       SPARC Options.      (line   71)
45334* mfdpic:                                FRV Options.        (line   56)
45335* mfentry:                               i386 and x86-64 Options.
45336                                                             (line  668)
45337* mfix:                                  DEC Alpha Options.  (line  171)
45338* mfix-24k:                              MIPS Options.       (line  487)
45339* mfix-and-continue:                     Darwin Options.     (line  106)
45340* mfix-cortex-m3-ldrd:                   ARM Options.        (line  295)
45341* mfix-r10000:                           MIPS Options.       (line  514)
45342* mfix-r4000:                            MIPS Options.       (line  493)
45343* mfix-r4400:                            MIPS Options.       (line  507)
45344* mfix-sb1:                              MIPS Options.       (line  546)
45345* mfix-vr4120:                           MIPS Options.       (line  525)
45346* mfix-vr4130:                           MIPS Options.       (line  539)
45347* mfixed-cc:                             FRV Options.        (line   28)
45348* mfixed-range <1>:                      SPU Options.        (line   47)
45349* mfixed-range <2>:                      SH Options.         (line  212)
45350* mfixed-range <3>:                      IA-64 Options.      (line  105)
45351* mfixed-range:                          HPPA Options.       (line   59)
45352* mflip-mips16:                          MIPS Options.       (line  112)
45353* mfloat-abi:                            ARM Options.        (line   41)
45354* mfloat-gprs:                           RS/6000 and PowerPC Options.
45355                                                             (line  249)
45356* mfloat-ieee:                           DEC Alpha Options.  (line  179)
45357* mfloat-vax:                            DEC Alpha Options.  (line  179)
45358* mfloat32:                              PDP-11 Options.     (line   52)
45359* mfloat64:                              PDP-11 Options.     (line   48)
45360* mflush-func:                           MIPS Options.       (line  613)
45361* mflush-func=NAME:                      M32R/D Options.     (line   94)
45362* mflush-trap=NUMBER:                    M32R/D Options.     (line   87)
45363* mfmovd:                                SH Options.         (line   97)
45364* mforce-no-pic:                         Xtensa Options.     (line   41)
45365* mfp:                                   ARM Options.        (line  120)
45366* mfp-exceptions:                        MIPS Options.       (line  640)
45367* mfp-reg:                               DEC Alpha Options.  (line   25)
45368* mfp-rounding-mode:                     DEC Alpha Options.  (line   85)
45369* mfp-trap-mode:                         DEC Alpha Options.  (line   63)
45370* mfp16-format:                          ARM Options.        (line  141)
45371* mfp32:                                 MIPS Options.       (line  222)
45372* mfp64:                                 MIPS Options.       (line  225)
45373* mfpe:                                  ARM Options.        (line  120)
45374* mfpmath <1>:                           i386 and x86-64 Options.
45375                                                             (line  169)
45376* mfpmath:                               Optimize Options.   (line 1835)
45377* mfpr-32:                               FRV Options.        (line   13)
45378* mfpr-64:                               FRV Options.        (line   16)
45379* mfprnd:                                RS/6000 and PowerPC Options.
45380                                                             (line   33)
45381* mfpu <1>:                              SPARC Options.      (line   20)
45382* mfpu <2>:                              RS/6000 and PowerPC Options.
45383                                                             (line  369)
45384* mfpu <3>:                              PDP-11 Options.     (line    9)
45385* mfpu:                                  ARM Options.        (line  120)
45386* mfriz:                                 RS/6000 and PowerPC Options.
45387                                                             (line  825)
45388* mfull-toc:                             RS/6000 and PowerPC Options.
45389                                                             (line  277)
45390* mfused-madd <1>:                       Xtensa Options.     (line   19)
45391* mfused-madd <2>:                       S/390 and zSeries Options.
45392                                                             (line  137)
45393* mfused-madd <3>:                       RS/6000 and PowerPC Options.
45394                                                             (line  421)
45395* mfused-madd <4>:                       MIPS Options.       (line  469)
45396* mfused-madd <5>:                       IA-64 Options.      (line   88)
45397* mfused-madd:                           i386 and x86-64 Options.
45398                                                             (line  496)
45399* mg:                                    VAX Options.        (line   17)
45400* MG:                                    Preprocessor Options.
45401                                                             (line  217)
45402* mgas <1>:                              HPPA Options.       (line   75)
45403* mgas:                                  DEC Alpha Options.  (line  159)
45404* mgen-cell-microcode:                   RS/6000 and PowerPC Options.
45405                                                             (line  202)
45406* mgettrcost=NUMBER:                     SH Options.         (line  234)
45407* mglibc:                                GNU/Linux Options.  (line    9)
45408* mgnu:                                  VAX Options.        (line   13)
45409* mgnu-as:                               IA-64 Options.      (line   18)
45410* mgnu-ld <1>:                           IA-64 Options.      (line   23)
45411* mgnu-ld:                               HPPA Options.       (line  111)
45412* mgotplt:                               CRIS Options.       (line   81)
45413* mgp32:                                 MIPS Options.       (line  216)
45414* mgp64:                                 MIPS Options.       (line  219)
45415* mgpopt:                                MIPS Options.       (line  360)
45416* mgpr-32:                               FRV Options.        (line    7)
45417* mgpr-64:                               FRV Options.        (line   10)
45418* mgprel-ro:                             FRV Options.        (line   79)
45419* mh:                                    H8/300 Options.     (line   14)
45420* mhard-dfp <1>:                         S/390 and zSeries Options.
45421                                                             (line   20)
45422* mhard-dfp:                             RS/6000 and PowerPC Options.
45423                                                             (line   33)
45424* mhard-float <1>:                       SPARC Options.      (line   20)
45425* mhard-float <2>:                       S/390 and zSeries Options.
45426                                                             (line   11)
45427* mhard-float <3>:                       RS/6000 and PowerPC Options.
45428                                                             (line  355)
45429* mhard-float <4>:                       MIPS Options.       (line  228)
45430* mhard-float <5>:                       MicroBlaze Options. (line   10)
45431* mhard-float <6>:                       M680x0 Options.     (line  197)
45432* mhard-float <7>:                       FRV Options.        (line   19)
45433* mhard-float:                           ARM Options.        (line   57)
45434* mhard-quad-float:                      SPARC Options.      (line   41)
45435* mhardlit:                              MCore Options.      (line   10)
45436* mhint-max-distance:                    SPU Options.        (line  102)
45437* mhint-max-nops:                        SPU Options.        (line   96)
45438* mhitachi:                              SH Options.         (line  101)
45439* mhp-ld:                                HPPA Options.       (line  123)
45440* micplb:                                Blackfin Options.   (line  169)
45441* mid-shared-library:                    Blackfin Options.   (line   77)
45442* mieee <1>:                             SH Options.         (line  116)
45443* mieee:                                 DEC Alpha Options.  (line   39)
45444* mieee-conformant:                      DEC Alpha Options.  (line  134)
45445* mieee-fp:                              i386 and x86-64 Options.
45446                                                             (line  224)
45447* mieee-with-inexact:                    DEC Alpha Options.  (line   52)
45448* milp32:                                IA-64 Options.      (line  121)
45449* mimpure-text:                          Solaris 2 Options.  (line    9)
45450* mincoming-stack-boundary:              i386 and x86-64 Options.
45451                                                             (line  402)
45452* mindexed-addressing:                   SH Options.         (line  224)
45453* minline-all-stringops:                 i386 and x86-64 Options.
45454                                                             (line  625)
45455* minline-float-divide-max-throughput:   IA-64 Options.      (line   58)
45456* minline-float-divide-min-latency:      IA-64 Options.      (line   54)
45457* minline-ic_invalidate:                 SH Options.         (line  123)
45458* minline-int-divide-max-throughput:     IA-64 Options.      (line   69)
45459* minline-int-divide-min-latency:        IA-64 Options.      (line   65)
45460* minline-plt <1>:                       FRV Options.        (line   64)
45461* minline-plt:                           Blackfin Options.   (line  134)
45462* minline-sqrt-max-throughput:           IA-64 Options.      (line   80)
45463* minline-sqrt-min-latency:              IA-64 Options.      (line   76)
45464* minline-stringops-dynamically:         i386 and x86-64 Options.
45465                                                             (line  632)
45466* minmax:                                M68hc1x Options.    (line   31)
45467* minsert-sched-nops:                    RS/6000 and PowerPC Options.
45468                                                             (line  526)
45469* mint-register:                         RX Options.         (line   99)
45470* mint16:                                PDP-11 Options.     (line   40)
45471* mint32 <1>:                            PDP-11 Options.     (line   44)
45472* mint32:                                H8/300 Options.     (line   28)
45473* mint8:                                 AVR Options.        (line   43)
45474* minterlink-mips16:                     MIPS Options.       (line  119)
45475* minvalid-symbols:                      SH Options.         (line  257)
45476* mio-volatile:                          MeP Options.        (line   74)
45477* mips1:                                 MIPS Options.       (line   77)
45478* mips16:                                MIPS Options.       (line  103)
45479* mips16e:                               MIPS Options.       (line  103)
45480* mips2:                                 MIPS Options.       (line   80)
45481* mips3:                                 MIPS Options.       (line   83)
45482* mips32:                                MIPS Options.       (line   89)
45483* mips32r2:                              MIPS Options.       (line   92)
45484* mips3d:                                MIPS Options.       (line  287)
45485* mips4:                                 MIPS Options.       (line   86)
45486* mips64:                                MIPS Options.       (line   95)
45487* mips64r2:                              MIPS Options.       (line   98)
45488* misel:                                 RS/6000 and PowerPC Options.
45489                                                             (line  220)
45490* misize:                                SH Options.         (line  135)
45491* missue-rate=NUMBER:                    M32R/D Options.     (line   79)
45492* mivc2:                                 MeP Options.        (line   59)
45493* mjump-in-delay:                        HPPA Options.       (line   28)
45494* mkernel:                               Darwin Options.     (line   84)
45495* mknuthdiv:                             MMIX Options.       (line   33)
45496* ml <1>:                                SH Options.         (line   77)
45497* ml:                                    MeP Options.        (line   78)
45498* mlarge-data:                           DEC Alpha Options.  (line  195)
45499* mlarge-data-threshold=NUMBER:          i386 and x86-64 Options.
45500                                                             (line  304)
45501* mlarge-mem:                            SPU Options.        (line   35)
45502* mlarge-text:                           DEC Alpha Options.  (line  213)
45503* mleadz:                                MeP Options.        (line   81)
45504* mleaf-id-shared-library:               Blackfin Options.   (line   88)
45505* mlibfuncs:                             MMIX Options.       (line   10)
45506* mlibrary-pic:                          FRV Options.        (line  110)
45507* mlinked-fp:                            FRV Options.        (line   94)
45508* mlinker-opt:                           HPPA Options.       (line   85)
45509* mlinux:                                CRIS Options.       (line   91)
45510* mlittle:                               RS/6000 and PowerPC Options.
45511                                                             (line  487)
45512* mlittle-endian <1>:                    SPARC Options.      (line  171)
45513* mlittle-endian <2>:                    RS/6000 and PowerPC Options.
45514                                                             (line  487)
45515* mlittle-endian <3>:                    MCore Options.      (line   39)
45516* mlittle-endian <4>:                    IA-64 Options.      (line   13)
45517* mlittle-endian:                        ARM Options.        (line   63)
45518* mlittle-endian-data:                   RX Options.         (line   42)
45519* mliw:                                  MN10300 Options.    (line   55)
45520* mllsc:                                 MIPS Options.       (line  244)
45521* mlocal-sdata:                          MIPS Options.       (line  325)
45522* mlong-calls <1>:                       V850 Options.       (line   10)
45523* mlong-calls <2>:                       MIPS Options.       (line  455)
45524* mlong-calls <3>:                       M68hc1x Options.    (line   35)
45525* mlong-calls <4>:                       FRV Options.        (line   99)
45526* mlong-calls <5>:                       Blackfin Options.   (line  117)
45527* mlong-calls:                           ARM Options.        (line  167)
45528* mlong-double-128:                      S/390 and zSeries Options.
45529                                                             (line   29)
45530* mlong-double-64:                       S/390 and zSeries Options.
45531                                                             (line   29)
45532* mlong-load-store:                      HPPA Options.       (line   66)
45533* mlong32:                               MIPS Options.       (line  300)
45534* mlong64:                               MIPS Options.       (line  295)
45535* mlongcall:                             RS/6000 and PowerPC Options.
45536                                                             (line  715)
45537* mlongcalls:                            Xtensa Options.     (line   72)
45538* mlow-64k:                              Blackfin Options.   (line   66)
45539* mlp64:                                 IA-64 Options.      (line  121)
45540* mm:                                    MeP Options.        (line   84)
45541* MM:                                    Preprocessor Options.
45542                                                             (line  198)
45543* mmac <1>:                              Score Options.      (line   21)
45544* mmac:                                  CRX Options.        (line    9)
45545* mmad:                                  MIPS Options.       (line  464)
45546* mmalloc64 <1>:                         IA-64/VMS Options.  (line   17)
45547* mmalloc64:                             DEC Alpha/VMS Options.
45548                                                             (line   17)
45549* mmangle-cpu:                           ARC Options.        (line   15)
45550* mmax:                                  DEC Alpha Options.  (line  171)
45551* mmax-constant-size:                    RX Options.         (line   81)
45552* mmax-stack-frame:                      CRIS Options.       (line   22)
45553* mmcount-ra-address:                    MIPS Options.       (line  689)
45554* mmcu:                                  AVR Options.        (line    9)
45555* MMD:                                   Preprocessor Options.
45556                                                             (line  278)
45557* mmedia:                                FRV Options.        (line   44)
45558* mmemcpy <1>:                           MIPS Options.       (line  449)
45559* mmemcpy:                               MicroBlaze Options. (line   13)
45560* mmemory-latency:                       DEC Alpha Options.  (line  276)
45561* mmfcrf:                                RS/6000 and PowerPC Options.
45562                                                             (line   33)
45563* mmfpgpr:                               RS/6000 and PowerPC Options.
45564                                                             (line   33)
45565* mminimal-toc:                          RS/6000 and PowerPC Options.
45566                                                             (line  277)
45567* mminmax:                               MeP Options.        (line   87)
45568* mmmx:                                  i386 and x86-64 Options.
45569                                                             (line  472)
45570* mmodel=large:                          M32R/D Options.     (line   33)
45571* mmodel=medium:                         M32R/D Options.     (line   27)
45572* mmodel=small:                          M32R/D Options.     (line   18)
45573* mmovbe:                                i386 and x86-64 Options.
45574                                                             (line  539)
45575* mmt:                                   MIPS Options.       (line  292)
45576* mmul-bug-workaround:                   CRIS Options.       (line   31)
45577* mmuladd:                               FRV Options.        (line   50)
45578* mmulhw:                                RS/6000 and PowerPC Options.
45579                                                             (line  430)
45580* mmult:                                 MeP Options.        (line   90)
45581* mmult-bug:                             MN10300 Options.    (line    9)
45582* mmulti-cond-exec:                      FRV Options.        (line  176)
45583* mmulticore:                            Blackfin Options.   (line  138)
45584* mmultiple:                             RS/6000 and PowerPC Options.
45585                                                             (line  380)
45586* mmvcle:                                S/390 and zSeries Options.
45587                                                             (line  105)
45588* mmvme:                                 RS/6000 and PowerPC Options.
45589                                                             (line  621)
45590* mn:                                    H8/300 Options.     (line   20)
45591* mnested-cond-exec:                     FRV Options.        (line  189)
45592* mnew-mnemonics:                        RS/6000 and PowerPC Options.
45593                                                             (line  104)
45594* mnhwloop:                              Score Options.      (line   15)
45595* mno-3dnow:                             i386 and x86-64 Options.
45596                                                             (line  472)
45597* mno-4byte-functions:                   MCore Options.      (line   27)
45598* mno-abicalls:                          MIPS Options.       (line  156)
45599* mno-abshi:                             PDP-11 Options.     (line   58)
45600* mno-ac0:                               PDP-11 Options.     (line   20)
45601* mno-address-space-conversion:          SPU Options.        (line   63)
45602* mno-align-double:                      i386 and x86-64 Options.
45603                                                             (line  262)
45604* mno-align-int:                         M680x0 Options.     (line  267)
45605* mno-align-loops:                       M32R/D Options.     (line   76)
45606* mno-align-stringops:                   i386 and x86-64 Options.
45607                                                             (line  620)
45608* mno-altivec:                           RS/6000 and PowerPC Options.
45609                                                             (line  191)
45610* mno-am33:                              MN10300 Options.    (line   20)
45611* mno-app-regs <1>:                      V850 Options.       (line   61)
45612* mno-app-regs:                          SPARC Options.      (line   10)
45613* mno-as100-syntax:                      RX Options.         (line   75)
45614* mno-atomic-updates:                    SPU Options.        (line   78)
45615* mno-avoid-indexed-addresses:           RS/6000 and PowerPC Options.
45616                                                             (line  412)
45617* mno-backchain:                         S/390 and zSeries Options.
45618                                                             (line   35)
45619* mno-base-addresses:                    MMIX Options.       (line   54)
45620* mno-bit-align:                         RS/6000 and PowerPC Options.
45621                                                             (line  444)
45622* mno-bitfield:                          M680x0 Options.     (line  231)
45623* mno-branch-likely:                     MIPS Options.       (line  629)
45624* mno-branch-predict:                    MMIX Options.       (line   49)
45625* mno-bwx:                               DEC Alpha Options.  (line  171)
45626* mno-callgraph-data:                    MCore Options.      (line   31)
45627* mno-check-zero-division:               MIPS Options.       (line  428)
45628* mno-cirrus-fix-invalid-insns:          ARM Options.        (line  202)
45629* mno-cix:                               DEC Alpha Options.  (line  171)
45630* mno-clearbss:                          MicroBlaze Options. (line   16)
45631* mno-cmpb:                              RS/6000 and PowerPC Options.
45632                                                             (line   33)
45633* mno-cond-exec:                         FRV Options.        (line  158)
45634* mno-cond-move:                         FRV Options.        (line  134)
45635* mno-const-align:                       CRIS Options.       (line   55)
45636* mno-const16:                           Xtensa Options.     (line   10)
45637* mno-crt0:                              MN10300 Options.    (line   44)
45638* mno-csync-anomaly:                     Blackfin Options.   (line   62)
45639* mno-data-align:                        CRIS Options.       (line   55)
45640* mno-debug:                             S/390 and zSeries Options.
45641                                                             (line  112)
45642* mno-div <1>:                           MCore Options.      (line   15)
45643* mno-div:                               M680x0 Options.     (line  209)
45644* mno-dlmzb:                             RS/6000 and PowerPC Options.
45645                                                             (line  437)
45646* mno-double:                            FRV Options.        (line   41)
45647* mno-dsp:                               MIPS Options.       (line  258)
45648* mno-dspr2:                             MIPS Options.       (line  264)
45649* mno-dwarf2-asm:                        IA-64 Options.      (line   94)
45650* mno-dword:                             FRV Options.        (line   35)
45651* mno-eabi:                              RS/6000 and PowerPC Options.
45652                                                             (line  645)
45653* mno-early-stop-bits:                   IA-64 Options.      (line  100)
45654* mno-eflags:                            FRV Options.        (line  125)
45655* mno-embedded-data:                     MIPS Options.       (line  375)
45656* mno-ep:                                V850 Options.       (line   16)
45657* mno-epsilon:                           MMIX Options.       (line   15)
45658* mno-explicit-relocs <1>:               MIPS Options.       (line  419)
45659* mno-explicit-relocs:                   DEC Alpha Options.  (line  184)
45660* mno-extern-sdata:                      MIPS Options.       (line  337)
45661* mno-fancy-math-387:                    i386 and x86-64 Options.
45662                                                             (line  251)
45663* mno-faster-structs:                    SPARC Options.      (line   71)
45664* mno-fix:                               DEC Alpha Options.  (line  171)
45665* mno-fix-24k:                           MIPS Options.       (line  487)
45666* mno-fix-r10000:                        MIPS Options.       (line  514)
45667* mno-fix-r4000:                         MIPS Options.       (line  493)
45668* mno-fix-r4400:                         MIPS Options.       (line  507)
45669* mno-float32:                           PDP-11 Options.     (line   48)
45670* mno-float64:                           PDP-11 Options.     (line   52)
45671* mno-flush-func:                        M32R/D Options.     (line   99)
45672* mno-flush-trap:                        M32R/D Options.     (line   91)
45673* mno-fp-in-toc:                         RS/6000 and PowerPC Options.
45674                                                             (line  277)
45675* mno-fp-regs:                           DEC Alpha Options.  (line   25)
45676* mno-fp-ret-in-387:                     i386 and x86-64 Options.
45677                                                             (line  241)
45678* mno-fprnd:                             RS/6000 and PowerPC Options.
45679                                                             (line   33)
45680* mno-fpu:                               SPARC Options.      (line   25)
45681* mno-fused-madd <1>:                    Xtensa Options.     (line   19)
45682* mno-fused-madd <2>:                    S/390 and zSeries Options.
45683                                                             (line  137)
45684* mno-fused-madd <3>:                    RS/6000 and PowerPC Options.
45685                                                             (line  421)
45686* mno-fused-madd <4>:                    MIPS Options.       (line  469)
45687* mno-fused-madd <5>:                    IA-64 Options.      (line   88)
45688* mno-fused-madd:                        i386 and x86-64 Options.
45689                                                             (line  496)
45690* mno-gnu-as:                            IA-64 Options.      (line   18)
45691* mno-gnu-ld:                            IA-64 Options.      (line   23)
45692* mno-gotplt:                            CRIS Options.       (line   81)
45693* mno-gpopt:                             MIPS Options.       (line  360)
45694* mno-hard-dfp <1>:                      S/390 and zSeries Options.
45695                                                             (line   20)
45696* mno-hard-dfp:                          RS/6000 and PowerPC Options.
45697                                                             (line   33)
45698* mno-hardlit:                           MCore Options.      (line   10)
45699* mno-id-shared-library:                 Blackfin Options.   (line   84)
45700* mno-ieee-fp:                           i386 and x86-64 Options.
45701                                                             (line  224)
45702* mno-inline-float-divide:               IA-64 Options.      (line   62)
45703* mno-inline-int-divide:                 IA-64 Options.      (line   73)
45704* mno-inline-sqrt:                       IA-64 Options.      (line   84)
45705* mno-int16:                             PDP-11 Options.     (line   44)
45706* mno-int32:                             PDP-11 Options.     (line   40)
45707* mno-interlink-mips16:                  MIPS Options.       (line  119)
45708* mno-interrupts:                        AVR Options.        (line   32)
45709* mno-isel:                              RS/6000 and PowerPC Options.
45710                                                             (line  220)
45711* mno-knuthdiv:                          MMIX Options.       (line   33)
45712* mno-leaf-id-shared-library:            Blackfin Options.   (line   94)
45713* mno-libfuncs:                          MMIX Options.       (line   10)
45714* mno-llsc:                              MIPS Options.       (line  244)
45715* mno-local-sdata:                       MIPS Options.       (line  325)
45716* mno-long-calls <1>:                    V850 Options.       (line   10)
45717* mno-long-calls <2>:                    MIPS Options.       (line  455)
45718* mno-long-calls <3>:                    M68hc1x Options.    (line   35)
45719* mno-long-calls <4>:                    HPPA Options.       (line  136)
45720* mno-long-calls <5>:                    Blackfin Options.   (line  117)
45721* mno-long-calls:                        ARM Options.        (line  167)
45722* mno-longcall:                          RS/6000 and PowerPC Options.
45723                                                             (line  715)
45724* mno-longcalls:                         Xtensa Options.     (line   72)
45725* mno-low-64k:                           Blackfin Options.   (line   70)
45726* mno-lsim <1>:                          MCore Options.      (line   46)
45727* mno-lsim:                              FR30 Options.       (line   14)
45728* mno-mad:                               MIPS Options.       (line  464)
45729* mno-max:                               DEC Alpha Options.  (line  171)
45730* mno-mcount-ra-address:                 MIPS Options.       (line  689)
45731* mno-mdmx:                              MIPS Options.       (line  281)
45732* mno-media:                             FRV Options.        (line   47)
45733* mno-memcpy:                            MIPS Options.       (line  449)
45734* mno-mfcrf:                             RS/6000 and PowerPC Options.
45735                                                             (line   33)
45736* mno-mfpgpr:                            RS/6000 and PowerPC Options.
45737                                                             (line   33)
45738* mno-mips16:                            MIPS Options.       (line  103)
45739* mno-mips3d:                            MIPS Options.       (line  287)
45740* mno-mmx:                               i386 and x86-64 Options.
45741                                                             (line  472)
45742* mno-mt:                                MIPS Options.       (line  292)
45743* mno-mul-bug-workaround:                CRIS Options.       (line   31)
45744* mno-muladd:                            FRV Options.        (line   53)
45745* mno-mulhw:                             RS/6000 and PowerPC Options.
45746                                                             (line  430)
45747* mno-mult-bug:                          MN10300 Options.    (line   13)
45748* mno-multi-cond-exec:                   FRV Options.        (line  183)
45749* mno-multiple:                          RS/6000 and PowerPC Options.
45750                                                             (line  380)
45751* mno-mvcle:                             S/390 and zSeries Options.
45752                                                             (line  105)
45753* mno-nested-cond-exec:                  FRV Options.        (line  195)
45754* mno-optimize-membar:                   FRV Options.        (line  205)
45755* mno-opts:                              MeP Options.        (line   93)
45756* mno-pack:                              FRV Options.        (line  122)
45757* mno-packed-stack:                      S/390 and zSeries Options.
45758                                                             (line   54)
45759* mno-paired:                            RS/6000 and PowerPC Options.
45760                                                             (line  234)
45761* mno-paired-single:                     MIPS Options.       (line  275)
45762* mno-pic:                               IA-64 Options.      (line   26)
45763* mno-plt:                               MIPS Options.       (line  183)
45764* mno-popcntb:                           RS/6000 and PowerPC Options.
45765                                                             (line   33)
45766* mno-popcntd:                           RS/6000 and PowerPC Options.
45767                                                             (line   33)
45768* mno-power:                             RS/6000 and PowerPC Options.
45769                                                             (line   33)
45770* mno-power2:                            RS/6000 and PowerPC Options.
45771                                                             (line   33)
45772* mno-powerpc:                           RS/6000 and PowerPC Options.
45773                                                             (line   33)
45774* mno-powerpc-gfxopt:                    RS/6000 and PowerPC Options.
45775                                                             (line   33)
45776* mno-powerpc-gpopt:                     RS/6000 and PowerPC Options.
45777                                                             (line   33)
45778* mno-powerpc64:                         RS/6000 and PowerPC Options.
45779                                                             (line   33)
45780* mno-prolog-function:                   V850 Options.       (line   23)
45781* mno-prologue-epilogue:                 CRIS Options.       (line   71)
45782* mno-prototype:                         RS/6000 and PowerPC Options.
45783                                                             (line  605)
45784* mno-push-args:                         i386 and x86-64 Options.
45785                                                             (line  597)
45786* mno-red-zone:                          i386 and x86-64 Options.
45787                                                             (line  695)
45788* mno-register-names:                    IA-64 Options.      (line   37)
45789* mno-regnames:                          RS/6000 and PowerPC Options.
45790                                                             (line  709)
45791* mno-relax-immediate:                   MCore Options.      (line   19)
45792* mno-relocatable:                       RS/6000 and PowerPC Options.
45793                                                             (line  461)
45794* mno-relocatable-lib:                   RS/6000 and PowerPC Options.
45795                                                             (line  472)
45796* mno-rtd:                               M680x0 Options.     (line  262)
45797* mno-scc:                               FRV Options.        (line  146)
45798* mno-sched-ar-data-spec:                IA-64 Options.      (line  135)
45799* mno-sched-ar-in-data-spec:             IA-64 Options.      (line  156)
45800* mno-sched-br-data-spec:                IA-64 Options.      (line  128)
45801* mno-sched-br-in-data-spec:             IA-64 Options.      (line  149)
45802* mno-sched-control-spec:                IA-64 Options.      (line  142)
45803* mno-sched-count-spec-in-critical-path: IA-64 Options.      (line  183)
45804* mno-sched-in-control-spec:             IA-64 Options.      (line  163)
45805* mno-sched-prefer-non-control-spec-insns: IA-64 Options.    (line  176)
45806* mno-sched-prefer-non-data-spec-insns:  IA-64 Options.      (line  169)
45807* mno-sched-prolog:                      ARM Options.        (line   32)
45808* mno-sdata <1>:                         RS/6000 and PowerPC Options.
45809                                                             (line  690)
45810* mno-sdata:                             IA-64 Options.      (line   42)
45811* mno-sep-data:                          Blackfin Options.   (line  112)
45812* mno-serialize-volatile:                Xtensa Options.     (line   35)
45813* mno-short:                             M680x0 Options.     (line  226)
45814* mno-side-effects:                      CRIS Options.       (line   46)
45815* mno-sim:                               RX Options.         (line   70)
45816* mno-single-exit:                       MMIX Options.       (line   66)
45817* mno-slow-bytes:                        MCore Options.      (line   35)
45818* mno-small-exec:                        S/390 and zSeries Options.
45819                                                             (line   80)
45820* mno-smartmips:                         MIPS Options.       (line  271)
45821* mno-soft-float:                        DEC Alpha Options.  (line   10)
45822* mno-space-regs:                        HPPA Options.       (line   45)
45823* mno-spe:                               RS/6000 and PowerPC Options.
45824                                                             (line  229)
45825* mno-specld-anomaly:                    Blackfin Options.   (line   52)
45826* mno-split-addresses:                   MIPS Options.       (line  413)
45827* mno-sse:                               i386 and x86-64 Options.
45828                                                             (line  472)
45829* mno-stack-align:                       CRIS Options.       (line   55)
45830* mno-stack-bias:                        SPARC Options.      (line  208)
45831* mno-strict-align <1>:                  RS/6000 and PowerPC Options.
45832                                                             (line  456)
45833* mno-strict-align:                      M680x0 Options.     (line  287)
45834* mno-string:                            RS/6000 and PowerPC Options.
45835                                                             (line  391)
45836* mno-sum-in-toc:                        RS/6000 and PowerPC Options.
45837                                                             (line  277)
45838* mno-sym32:                             MIPS Options.       (line  310)
45839* mno-target-align:                      Xtensa Options.     (line   59)
45840* mno-text-section-literals:             Xtensa Options.     (line   47)
45841* mno-tls-markers:                       RS/6000 and PowerPC Options.
45842                                                             (line  748)
45843* mno-toc:                               RS/6000 and PowerPC Options.
45844                                                             (line  481)
45845* mno-toplevel-symbols:                  MMIX Options.       (line   40)
45846* mno-tpf-trace:                         S/390 and zSeries Options.
45847                                                             (line  131)
45848* mno-unaligned-doubles:                 SPARC Options.      (line   59)
45849* mno-uninit-const-in-rodata:            MIPS Options.       (line  383)
45850* mno-update:                            RS/6000 and PowerPC Options.
45851                                                             (line  402)
45852* mno-v8plus:                            SPARC Options.      (line  156)
45853* mno-vis:                               SPARC Options.      (line  163)
45854* mno-vliw-branch:                       FRV Options.        (line  170)
45855* mno-volatile-asm-stop:                 IA-64 Options.      (line   32)
45856* mno-vrsave:                            RS/6000 and PowerPC Options.
45857                                                             (line  199)
45858* mno-vsx:                               RS/6000 and PowerPC Options.
45859                                                             (line  243)
45860* mno-wide-bitfields:                    MCore Options.      (line   23)
45861* mno-xgot <1>:                          MIPS Options.       (line  193)
45862* mno-xgot:                              M680x0 Options.     (line  319)
45863* mno-xl-compat:                         RS/6000 and PowerPC Options.
45864                                                             (line  312)
45865* mno-zero-extend:                       MMIX Options.       (line   27)
45866* mnobitfield:                           M680x0 Options.     (line  231)
45867* mnoliw:                                MN10300 Options.    (line   60)
45868* mnomacsave:                            SH Options.         (line  112)
45869* mnominmax:                             M68hc1x Options.    (line   31)
45870* mnop-fun-dllimport:                    i386 and x86-64 Windows Options.
45871                                                             (line   22)
45872* mold-mnemonics:                        RS/6000 and PowerPC Options.
45873                                                             (line  104)
45874* momit-leaf-frame-pointer <1>:          i386 and x86-64 Options.
45875                                                             (line  645)
45876* momit-leaf-frame-pointer:              Blackfin Options.   (line   40)
45877* mone-byte-bool:                        Darwin Options.     (line   92)
45878* moptimize-membar:                      FRV Options.        (line  201)
45879* MP:                                    Preprocessor Options.
45880                                                             (line  227)
45881* mpa-risc-1-0:                          HPPA Options.       (line   19)
45882* mpa-risc-1-1:                          HPPA Options.       (line   19)
45883* mpa-risc-2-0:                          HPPA Options.       (line   19)
45884* mpack:                                 FRV Options.        (line  119)
45885* mpacked-stack:                         S/390 and zSeries Options.
45886                                                             (line   54)
45887* mpadstruct:                            SH Options.         (line  138)
45888* mpaired:                               RS/6000 and PowerPC Options.
45889                                                             (line  234)
45890* mpaired-single:                        MIPS Options.       (line  275)
45891* mpc32:                                 i386 and x86-64 Options.
45892                                                             (line  367)
45893* mpc64:                                 i386 and x86-64 Options.
45894                                                             (line  367)
45895* mpc80:                                 i386 and x86-64 Options.
45896                                                             (line  367)
45897* mpcrel:                                M680x0 Options.     (line  279)
45898* mpdebug:                               CRIS Options.       (line   35)
45899* mpe:                                   RS/6000 and PowerPC Options.
45900                                                             (line  332)
45901* mpe-aligned-commons:                   i386 and x86-64 Windows Options.
45902                                                             (line   53)
45903* mpic-register:                         ARM Options.        (line  198)
45904* mplt:                                  MIPS Options.       (line  183)
45905* mpoke-function-name:                   ARM Options.        (line  212)
45906* mpopcntb:                              RS/6000 and PowerPC Options.
45907                                                             (line   33)
45908* mpopcntd:                              RS/6000 and PowerPC Options.
45909                                                             (line   33)
45910* mportable-runtime:                     HPPA Options.       (line   71)
45911* mpower:                                RS/6000 and PowerPC Options.
45912                                                             (line   33)
45913* mpower2:                               RS/6000 and PowerPC Options.
45914                                                             (line   33)
45915* mpowerpc:                              RS/6000 and PowerPC Options.
45916                                                             (line   33)
45917* mpowerpc-gfxopt:                       RS/6000 and PowerPC Options.
45918                                                             (line   33)
45919* mpowerpc-gpopt:                        RS/6000 and PowerPC Options.
45920                                                             (line   33)
45921* mpowerpc64:                            RS/6000 and PowerPC Options.
45922                                                             (line   33)
45923* mprefergot:                            SH Options.         (line  145)
45924* mpreferred-stack-boundary:             i386 and x86-64 Options.
45925                                                             (line  397)
45926* mprioritize-restricted-insns:          RS/6000 and PowerPC Options.
45927                                                             (line  510)
45928* mprolog-function:                      V850 Options.       (line   23)
45929* mprologue-epilogue:                    CRIS Options.       (line   71)
45930* mprototype:                            RS/6000 and PowerPC Options.
45931                                                             (line  605)
45932* mpt-fixed:                             SH Options.         (line  238)
45933* mpush-args <1>:                        i386 and x86-64 Options.
45934                                                             (line  597)
45935* mpush-args:                            CRX Options.        (line   13)
45936* MQ:                                    Preprocessor Options.
45937                                                             (line  253)
45938* mr10k-cache-barrier:                   MIPS Options.       (line  551)
45939* mrecip <1>:                            RS/6000 and PowerPC Options.
45940                                                             (line  760)
45941* mrecip:                                i386 and x86-64 Options.
45942                                                             (line  549)
45943* mrecip-precision:                      RS/6000 and PowerPC Options.
45944                                                             (line  796)
45945* mrecip=opt:                            RS/6000 and PowerPC Options.
45946                                                             (line  773)
45947* mregister-names:                       IA-64 Options.      (line   37)
45948* mregnames:                             RS/6000 and PowerPC Options.
45949                                                             (line  709)
45950* mregparm:                              i386 and x86-64 Options.
45951                                                             (line  334)
45952* mrelax <1>:                            SH Options.         (line   86)
45953* mrelax <2>:                            RX Options.         (line   94)
45954* mrelax <3>:                            MN10300 Options.    (line   47)
45955* mrelax:                                H8/300 Options.     (line    9)
45956* mrelax-immediate:                      MCore Options.      (line   19)
45957* mrelax-pic-calls:                      MIPS Options.       (line  676)
45958* mrelocatable:                          RS/6000 and PowerPC Options.
45959                                                             (line  461)
45960* mrelocatable-lib:                      RS/6000 and PowerPC Options.
45961                                                             (line  472)
45962* mrepeat:                               MeP Options.        (line   96)
45963* mreturn-pointer-on-d0:                 MN10300 Options.    (line   37)
45964* mrodata:                               ARC Options.        (line   30)
45965* mrtd <1>:                              Function Attributes.
45966                                                             (line  177)
45967* mrtd <2>:                              M680x0 Options.     (line  240)
45968* mrtd:                                  i386 and x86-64 Options.
45969                                                             (line  310)
45970* mrtp:                                  VxWorks Options.    (line   11)
45971* ms <1>:                                MeP Options.        (line  100)
45972* ms:                                    H8/300 Options.     (line   17)
45973* ms2600:                                H8/300 Options.     (line   24)
45974* msafe-dma:                             SPU Options.        (line   17)
45975* msafe-hints:                           SPU Options.        (line  107)
45976* msahf:                                 i386 and x86-64 Options.
45977                                                             (line  529)
45978* msatur:                                MeP Options.        (line  105)
45979* msave-acc-in-interrupts:               RX Options.         (line  108)
45980* mscc:                                  FRV Options.        (line  140)
45981* msched-ar-data-spec:                   IA-64 Options.      (line  135)
45982* msched-ar-in-data-spec:                IA-64 Options.      (line  156)
45983* msched-br-data-spec:                   IA-64 Options.      (line  128)
45984* msched-br-in-data-spec:                IA-64 Options.      (line  149)
45985* msched-control-spec:                   IA-64 Options.      (line  142)
45986* msched-costly-dep:                     RS/6000 and PowerPC Options.
45987                                                             (line  517)
45988* msched-count-spec-in-critical-path:    IA-64 Options.      (line  183)
45989* msched-fp-mem-deps-zero-cost:          IA-64 Options.      (line  200)
45990* msched-in-control-spec:                IA-64 Options.      (line  163)
45991* msched-max-memory-insns:               IA-64 Options.      (line  209)
45992* msched-max-memory-insns-hard-limit:    IA-64 Options.      (line  215)
45993* msched-prefer-non-control-spec-insns:  IA-64 Options.      (line  176)
45994* msched-prefer-non-data-spec-insns:     IA-64 Options.      (line  169)
45995* msched-spec-ldc:                       IA-64 Options.      (line  189)
45996* msched-stop-bits-after-every-cycle:    IA-64 Options.      (line  196)
45997* mschedule:                             HPPA Options.       (line   78)
45998* mscore5:                               Score Options.      (line   25)
45999* mscore5u:                              Score Options.      (line   28)
46000* mscore7:                               Score Options.      (line   31)
46001* mscore7d:                              Score Options.      (line   34)
46002* msda:                                  V850 Options.       (line   40)
46003* msdata <1>:                            RS/6000 and PowerPC Options.
46004                                                             (line  677)
46005* msdata:                                IA-64 Options.      (line   42)
46006* msdata=data:                           RS/6000 and PowerPC Options.
46007                                                             (line  682)
46008* msdata=default:                        RS/6000 and PowerPC Options.
46009                                                             (line  677)
46010* msdata=eabi:                           RS/6000 and PowerPC Options.
46011                                                             (line  657)
46012* msdata=none <1>:                       RS/6000 and PowerPC Options.
46013                                                             (line  690)
46014* msdata=none:                           M32R/D Options.     (line   40)
46015* msdata=sdata:                          M32R/D Options.     (line   49)
46016* msdata=sysv:                           RS/6000 and PowerPC Options.
46017                                                             (line  668)
46018* msdata=use:                            M32R/D Options.     (line   53)
46019* msdram <1>:                            MeP Options.        (line  110)
46020* msdram:                                Blackfin Options.   (line  163)
46021* msecure-plt:                           RS/6000 and PowerPC Options.
46022                                                             (line  209)
46023* msel-sched-dont-check-control-spec:    IA-64 Options.      (line  205)
46024* msep-data:                             Blackfin Options.   (line  106)
46025* mserialize-volatile:                   Xtensa Options.     (line   35)
46026* mshared-library-id:                    Blackfin Options.   (line   99)
46027* mshort <1>:                            M68hc1x Options.    (line   40)
46028* mshort:                                M680x0 Options.     (line  220)
46029* msign-extend-enabled:                  LM32 Options.       (line   18)
46030* msim <1>:                              Xstormy16 Options.  (line    9)
46031* msim <2>:                              RX Options.         (line   70)
46032* msim <3>:                              RS/6000 and PowerPC Options.
46033                                                             (line  615)
46034* msim <4>:                              MeP Options.        (line  114)
46035* msim <5>:                              M32C Options.       (line   13)
46036* msim:                                  Blackfin Options.   (line   33)
46037* msimnovec:                             MeP Options.        (line  117)
46038* msimple-fpu:                           RS/6000 and PowerPC Options.
46039                                                             (line  365)
46040* msingle-exit:                          MMIX Options.       (line   66)
46041* msingle-float <1>:                     RS/6000 and PowerPC Options.
46042                                                             (line  361)
46043* msingle-float:                         MIPS Options.       (line  235)
46044* msingle-pic-base <1>:                  RS/6000 and PowerPC Options.
46045                                                             (line  504)
46046* msingle-pic-base:                      ARM Options.        (line  192)
46047* msio:                                  HPPA Options.       (line  105)
46048* mslow-bytes:                           MCore Options.      (line   35)
46049* msmall-data:                           DEC Alpha Options.  (line  195)
46050* msmall-data-limit:                     RX Options.         (line   47)
46051* msmall-divides:                        MicroBlaze Options. (line   38)
46052* msmall-exec:                           S/390 and zSeries Options.
46053                                                             (line   80)
46054* msmall-mem:                            SPU Options.        (line   35)
46055* msmall-model:                          FR30 Options.       (line    9)
46056* msmall-text:                           DEC Alpha Options.  (line  213)
46057* msmartmips:                            MIPS Options.       (line  271)
46058* msoft-float <1>:                       SPARC Options.      (line   25)
46059* msoft-float <2>:                       S/390 and zSeries Options.
46060                                                             (line   11)
46061* msoft-float <3>:                       RS/6000 and PowerPC Options.
46062                                                             (line  355)
46063* msoft-float <4>:                       PDP-11 Options.     (line   13)
46064* msoft-float <5>:                       MIPS Options.       (line  231)
46065* msoft-float <6>:                       MicroBlaze Options. (line    7)
46066* msoft-float <7>:                       M680x0 Options.     (line  203)
46067* msoft-float <8>:                       i386 and x86-64 Options.
46068                                                             (line  229)
46069* msoft-float <9>:                       HPPA Options.       (line   91)
46070* msoft-float <10>:                      FRV Options.        (line   22)
46071* msoft-float <11>:                      DEC Alpha Options.  (line   10)
46072* msoft-float:                           ARM Options.        (line   60)
46073* msoft-quad-float:                      SPARC Options.      (line   45)
46074* msoft-reg-count:                       M68hc1x Options.    (line   43)
46075* mspace <1>:                            V850 Options.       (line   30)
46076* mspace:                                SH Options.         (line  142)
46077* mspe:                                  RS/6000 and PowerPC Options.
46078                                                             (line  229)
46079* mspecld-anomaly:                       Blackfin Options.   (line   47)
46080* msplit-addresses:                      MIPS Options.       (line  413)
46081* msse:                                  i386 and x86-64 Options.
46082                                                             (line  472)
46083* msse2avx:                              i386 and x86-64 Options.
46084                                                             (line  663)
46085* msseregparm:                           i386 and x86-64 Options.
46086                                                             (line  345)
46087* mstack-align:                          CRIS Options.       (line   55)
46088* mstack-bias:                           SPARC Options.      (line  208)
46089* mstack-check-l1:                       Blackfin Options.   (line   73)
46090* mstack-guard:                          S/390 and zSeries Options.
46091                                                             (line  156)
46092* mstack-increment:                      MCore Options.      (line   50)
46093* mstack-size:                           S/390 and zSeries Options.
46094                                                             (line  156)
46095* mstackrealign:                         i386 and x86-64 Options.
46096                                                             (line  388)
46097* mstdmain:                              SPU Options.        (line   40)
46098* mstrict-align <1>:                     RS/6000 and PowerPC Options.
46099                                                             (line  456)
46100* mstrict-align:                         M680x0 Options.     (line  287)
46101* mstring:                               RS/6000 and PowerPC Options.
46102                                                             (line  391)
46103* mstringop-strategy=ALG:                i386 and x86-64 Options.
46104                                                             (line  637)
46105* mstructure-size-boundary:              ARM Options.        (line  147)
46106* msvr4-struct-return:                   RS/6000 and PowerPC Options.
46107                                                             (line  579)
46108* msym32:                                MIPS Options.       (line  310)
46109* msynci:                                MIPS Options.       (line  661)
46110* MT:                                    Preprocessor Options.
46111                                                             (line  239)
46112* mtarget-align:                         Xtensa Options.     (line   59)
46113* mtda:                                  V850 Options.       (line   34)
46114* mtext:                                 ARC Options.        (line   30)
46115* mtext-section-literals:                Xtensa Options.     (line   47)
46116* mtf:                                   MeP Options.        (line  121)
46117* mthread:                               i386 and x86-64 Windows Options.
46118                                                             (line   26)
46119* mthreads:                              i386 and x86-64 Options.
46120                                                             (line  612)
46121* mthumb:                                ARM Options.        (line  233)
46122* mthumb-interwork:                      ARM Options.        (line   25)
46123* mtiny-stack:                           AVR Options.        (line   40)
46124* mtiny=:                                MeP Options.        (line  125)
46125* mtls:                                  FRV Options.        (line   75)
46126* mTLS:                                  FRV Options.        (line   72)
46127* mtls-dialect:                          ARM Options.        (line  278)
46128* mtls-direct-seg-refs:                  i386 and x86-64 Options.
46129                                                             (line  653)
46130* mtls-markers:                          RS/6000 and PowerPC Options.
46131                                                             (line  748)
46132* mtls-size:                             IA-64 Options.      (line  112)
46133* mtoc:                                  RS/6000 and PowerPC Options.
46134                                                             (line  481)
46135* mtomcat-stats:                         FRV Options.        (line  209)
46136* mtoplevel-symbols:                     MMIX Options.       (line   40)
46137* mtp:                                   ARM Options.        (line  270)
46138* mtpcs-frame:                           ARM Options.        (line  243)
46139* mtpcs-leaf-frame:                      ARM Options.        (line  249)
46140* mtpf-trace:                            S/390 and zSeries Options.
46141                                                             (line  131)
46142* mtrap-precision:                       DEC Alpha Options.  (line  109)
46143* mtune <1>:                             SPARC Options.      (line  143)
46144* mtune <2>:                             S/390 and zSeries Options.
46145                                                             (line  124)
46146* mtune <3>:                             RS/6000 and PowerPC Options.
46147                                                             (line  168)
46148* mtune <4>:                             MN10300 Options.    (line   31)
46149* mtune <5>:                             MIPS Options.       (line   62)
46150* mtune <6>:                             M680x0 Options.     (line   70)
46151* mtune <7>:                             IA-64 Options.      (line  116)
46152* mtune <8>:                             i386 and x86-64 Options.
46153                                                             (line   10)
46154* mtune <9>:                             DEC Alpha Options.  (line  267)
46155* mtune <10>:                            CRIS Options.       (line   16)
46156* mtune:                                 ARM Options.        (line   98)
46157* muclibc:                               GNU/Linux Options.  (line   13)
46158* muls:                                  Score Options.      (line   18)
46159* multcost=NUMBER:                       SH Options.         (line  155)
46160* multi_module:                          Darwin Options.     (line  199)
46161* multilib-library-pic:                  FRV Options.        (line   89)
46162* multiply-enabled:                      LM32 Options.       (line   15)
46163* multiply_defined:                      Darwin Options.     (line  199)
46164* multiply_defined_unused:               Darwin Options.     (line  199)
46165* munaligned-doubles:                    SPARC Options.      (line   59)
46166* municode:                              i386 and x86-64 Windows Options.
46167                                                             (line   30)
46168* muninit-const-in-rodata:               MIPS Options.       (line  383)
46169* munix:                                 VAX Options.        (line    9)
46170* munix-asm:                             PDP-11 Options.     (line   68)
46171* munsafe-dma:                           SPU Options.        (line   17)
46172* mupdate:                               RS/6000 and PowerPC Options.
46173                                                             (line  402)
46174* muser-enabled:                         LM32 Options.       (line   21)
46175* musermode:                             SH Options.         (line  150)
46176* mv850:                                 V850 Options.       (line   49)
46177* mv850e:                                V850 Options.       (line   81)
46178* mv850e1:                               V850 Options.       (line   73)
46179* mv850e2:                               V850 Options.       (line   69)
46180* mv850e2v3:                             V850 Options.       (line   64)
46181* mv850es:                               V850 Options.       (line   77)
46182* mv8plus:                               SPARC Options.      (line  156)
46183* mveclibabi <1>:                        RS/6000 and PowerPC Options.
46184                                                             (line  805)
46185* mveclibabi:                            i386 and x86-64 Options.
46186                                                             (line  566)
46187* mvect8-ret-in-mem:                     i386 and x86-64 Options.
46188                                                             (line  355)
46189* mvis:                                  SPARC Options.      (line  163)
46190* mvliw-branch:                          FRV Options.        (line  164)
46191* mvms-return-codes <1>:                 IA-64/VMS Options.  (line    9)
46192* mvms-return-codes:                     DEC Alpha/VMS Options.
46193                                                             (line    9)
46194* mvolatile-asm-stop:                    IA-64 Options.      (line   32)
46195* mvr4130-align:                         MIPS Options.       (line  650)
46196* mvrsave:                               RS/6000 and PowerPC Options.
46197                                                             (line  199)
46198* mvsx:                                  RS/6000 and PowerPC Options.
46199                                                             (line  243)
46200* mvxworks:                              RS/6000 and PowerPC Options.
46201                                                             (line  636)
46202* mvzeroupper:                           i386 and x86-64 Options.
46203                                                             (line  515)
46204* mwarn-cell-microcode:                  RS/6000 and PowerPC Options.
46205                                                             (line  205)
46206* mwarn-dynamicstack:                    S/390 and zSeries Options.
46207                                                             (line  150)
46208* mwarn-framesize:                       S/390 and zSeries Options.
46209                                                             (line  142)
46210* mwarn-reloc:                           SPU Options.        (line   10)
46211* mwide-bitfields:                       MCore Options.      (line   23)
46212* mwin32:                                i386 and x86-64 Windows Options.
46213                                                             (line   35)
46214* mwindows:                              i386 and x86-64 Windows Options.
46215                                                             (line   41)
46216* mword-relocations:                     ARM Options.        (line  289)
46217* mwords-little-endian:                  ARM Options.        (line   71)
46218* mxgot <1>:                             MIPS Options.       (line  193)
46219* mxgot:                                 M680x0 Options.     (line  319)
46220* mxilinx-fpu:                           RS/6000 and PowerPC Options.
46221                                                             (line  375)
46222* mxl-barrel-shift:                      MicroBlaze Options. (line   32)
46223* mxl-compat:                            RS/6000 and PowerPC Options.
46224                                                             (line  312)
46225* mxl-float-convert:                     MicroBlaze Options. (line   50)
46226* mxl-float-sqrt:                        MicroBlaze Options. (line   53)
46227* mxl-gp-opt:                            MicroBlaze Options. (line   44)
46228* mxl-multiply-high:                     MicroBlaze Options. (line   47)
46229* mxl-pattern-compare:                   MicroBlaze Options. (line   35)
46230* mxl-soft-div:                          MicroBlaze Options. (line   29)
46231* mxl-soft-mul:                          MicroBlaze Options. (line   26)
46232* mxl-stack-check:                       MicroBlaze Options. (line   41)
46233* myellowknife:                          RS/6000 and PowerPC Options.
46234                                                             (line  631)
46235* mzarch:                                S/390 and zSeries Options.
46236                                                             (line   95)
46237* mzda:                                  V850 Options.       (line   45)
46238* mzero-extend:                          MMIX Options.       (line   27)
46239* no-canonical-prefixes:                 Overall Options.    (line  338)
46240* no-integrated-cpp:                     C Dialect Options.  (line  272)
46241* no_dead_strip_inits_and_terms:         Darwin Options.     (line  199)
46242* noall_load:                            Darwin Options.     (line  199)
46243* nocpp:                                 MIPS Options.       (line  481)
46244* nodefaultlibs:                         Link Options.       (line   62)
46245* nofixprebinding:                       Darwin Options.     (line  199)
46246* nofpu:                                 RX Options.         (line   17)
46247* nolibdld:                              HPPA Options.       (line  188)
46248* nomultidefs:                           Darwin Options.     (line  199)
46249* non-static:                            VxWorks Options.    (line   16)
46250* noprebind:                             Darwin Options.     (line  199)
46251* noseglinkedit:                         Darwin Options.     (line  199)
46252* nostartfiles:                          Link Options.       (line   57)
46253* nostdinc:                              Preprocessor Options.
46254                                                             (line  385)
46255* nostdinc++ <1>:                        Preprocessor Options.
46256                                                             (line  390)
46257* nostdinc++:                            C++ Dialect Options.
46258                                                             (line  322)
46259* nostdlib:                              Link Options.       (line   73)
46260* o:                                     Preprocessor Options.
46261                                                             (line   75)
46262* O:                                     Optimize Options.   (line   39)
46263* o:                                     Overall Options.    (line  192)
46264* O0:                                    Optimize Options.   (line  127)
46265* O1:                                    Optimize Options.   (line   39)
46266* O2:                                    Optimize Options.   (line   82)
46267* O3:                                    Optimize Options.   (line  120)
46268* Ofast:                                 Optimize Options.   (line  141)
46269* Os:                                    Optimize Options.   (line  131)
46270* P:                                     Preprocessor Options.
46271                                                             (line  603)
46272* p:                                     Debugging Options.  (line  291)
46273* pagezero_size:                         Darwin Options.     (line  199)
46274* param:                                 Optimize Options.   (line 2190)
46275* pass-exit-codes:                       Overall Options.    (line  150)
46276* pedantic <1>:                          Warnings and Errors.
46277                                                             (line   25)
46278* pedantic <2>:                          Alternate Keywords. (line   30)
46279* pedantic <3>:                          C Extensions.       (line    6)
46280* pedantic <4>:                          Preprocessor Options.
46281                                                             (line  163)
46282* pedantic <5>:                          Warning Options.    (line   72)
46283* pedantic:                              Standards.          (line   16)
46284* pedantic-errors <1>:                   Warnings and Errors.
46285                                                             (line   25)
46286* pedantic-errors <2>:                   Non-bugs.           (line  216)
46287* pedantic-errors <3>:                   Preprocessor Options.
46288                                                             (line  168)
46289* pedantic-errors <4>:                   Warning Options.    (line  114)
46290* pedantic-errors:                       Standards.          (line   16)
46291* pg:                                    Debugging Options.  (line  297)
46292* pie:                                   Link Options.       (line   95)
46293* pipe:                                  Overall Options.    (line  215)
46294* prebind:                               Darwin Options.     (line  199)
46295* prebind_all_twolevel_modules:          Darwin Options.     (line  199)
46296* print-file-name:                       Debugging Options.  (line 1070)
46297* print-libgcc-file-name:                Debugging Options.  (line 1100)
46298* print-multi-directory:                 Debugging Options.  (line 1076)
46299* print-multi-lib:                       Debugging Options.  (line 1081)
46300* print-multi-os-directory:              Debugging Options.  (line 1088)
46301* print-objc-runtime-info:               Objective-C and Objective-C++ Dialect Options.
46302                                                             (line  203)
46303* print-prog-name:                       Debugging Options.  (line 1097)
46304* print-search-dirs:                     Debugging Options.  (line 1108)
46305* print-sysroot:                         Debugging Options.  (line 1121)
46306* print-sysroot-headers-suffix:          Debugging Options.  (line 1128)
46307* private_bundle:                        Darwin Options.     (line  199)
46308* pthread <1>:                           Solaris 2 Options.  (line   37)
46309* pthread:                               RS/6000 and PowerPC Options.
46310                                                             (line  755)
46311* pthreads:                              Solaris 2 Options.  (line   31)
46312* Q:                                     Debugging Options.  (line  303)
46313* Qn:                                    System V Options.   (line   18)
46314* Qy:                                    System V Options.   (line   14)
46315* rdynamic:                              Link Options.       (line  101)
46316* read_only_relocs:                      Darwin Options.     (line  199)
46317* remap:                                 Preprocessor Options.
46318                                                             (line  651)
46319* s:                                     Link Options.       (line  108)
46320* S <1>:                                 Link Options.       (line   20)
46321* S:                                     Overall Options.    (line  175)
46322* save-temps:                            Debugging Options.  (line  978)
46323* save-temps=obj:                        Debugging Options.  (line 1004)
46324* sectalign:                             Darwin Options.     (line  199)
46325* sectcreate:                            Darwin Options.     (line  199)
46326* sectobjectsymbols:                     Darwin Options.     (line  199)
46327* sectorder:                             Darwin Options.     (line  199)
46328* seg1addr:                              Darwin Options.     (line  199)
46329* seg_addr_table:                        Darwin Options.     (line  199)
46330* seg_addr_table_filename:               Darwin Options.     (line  199)
46331* segaddr:                               Darwin Options.     (line  199)
46332* seglinkedit:                           Darwin Options.     (line  199)
46333* segprot:                               Darwin Options.     (line  199)
46334* segs_read_only_addr:                   Darwin Options.     (line  199)
46335* segs_read_write_addr:                  Darwin Options.     (line  199)
46336* shared:                                Link Options.       (line  117)
46337* shared-libgcc:                         Link Options.       (line  125)
46338* sim:                                   CRIS Options.       (line   95)
46339* sim2:                                  CRIS Options.       (line  101)
46340* single_module:                         Darwin Options.     (line  199)
46341* specs:                                 Directory Options.  (line   89)
46342* static <1>:                            HPPA Options.       (line  192)
46343* static <2>:                            Darwin Options.     (line  199)
46344* static:                                Link Options.       (line  112)
46345* static-libgcc:                         Link Options.       (line  125)
46346* std <1>:                               Non-bugs.           (line  107)
46347* std <2>:                               Other Builtins.     (line   22)
46348* std <3>:                               C Dialect Options.  (line   47)
46349* std:                                   Standards.          (line   16)
46350* std=:                                  Preprocessor Options.
46351                                                             (line  326)
46352* sub_library:                           Darwin Options.     (line  199)
46353* sub_umbrella:                          Darwin Options.     (line  199)
46354* symbolic:                              Link Options.       (line  172)
46355* sysroot:                               Directory Options.  (line   97)
46356* T:                                     Link Options.       (line  178)
46357* target-help <1>:                       Preprocessor Options.
46358                                                             (line  656)
46359* target-help:                           Overall Options.    (line  230)
46360* threads <1>:                           Solaris 2 Options.  (line   25)
46361* threads:                               HPPA Options.       (line  205)
46362* time:                                  Debugging Options.  (line 1019)
46363* tno-android-cc:                        GNU/Linux Options.  (line   31)
46364* tno-android-ld:                        GNU/Linux Options.  (line   35)
46365* traditional <1>:                       Incompatibilities.  (line    6)
46366* traditional:                           C Dialect Options.  (line  284)
46367* traditional-cpp <1>:                   Preprocessor Options.
46368                                                             (line  634)
46369* traditional-cpp:                       C Dialect Options.  (line  284)
46370* trigraphs <1>:                         Preprocessor Options.
46371                                                             (line  638)
46372* trigraphs:                             C Dialect Options.  (line  268)
46373* twolevel_namespace:                    Darwin Options.     (line  199)
46374* u:                                     Link Options.       (line  211)
46375* U:                                     Preprocessor Options.
46376                                                             (line   57)
46377* umbrella:                              Darwin Options.     (line  199)
46378* undef:                                 Preprocessor Options.
46379                                                             (line   61)
46380* undefined:                             Darwin Options.     (line  199)
46381* unexported_symbols_list:               Darwin Options.     (line  199)
46382* v <1>:                                 Preprocessor Options.
46383                                                             (line  660)
46384* v:                                     Overall Options.    (line  203)
46385* version <1>:                           Preprocessor Options.
46386                                                             (line  673)
46387* version:                               Overall Options.    (line  342)
46388* W:                                     Incompatibilities.  (line   64)
46389* w:                                     Preprocessor Options.
46390                                                             (line  159)
46391* W:                                     Warning Options.    (line  166)
46392* w:                                     Warning Options.    (line   25)
46393* Wa:                                    Assembler Options.  (line    9)
46394* Wabi:                                  C++ Dialect Options.
46395                                                             (line  336)
46396* Waddress:                              Warning Options.    (line 1094)
46397* Waggregate-return:                     Warning Options.    (line 1112)
46398* Wall <1>:                              Standard Libraries. (line    6)
46399* Wall <2>:                              Preprocessor Options.
46400                                                             (line   81)
46401* Wall:                                  Warning Options.    (line  118)
46402* Warray-bounds:                         Warning Options.    (line  786)
46403* Wassign-intercept:                     Objective-C and Objective-C++ Dialect Options.
46404                                                             (line  157)
46405* Wattributes:                           Warning Options.    (line 1117)
46406* Wbad-function-cast:                    Warning Options.    (line  984)
46407* Wbuiltin-macro-redefined:              Warning Options.    (line 1123)
46408* Wcast-align:                           Warning Options.    (line 1015)
46409* Wcast-qual:                            Warning Options.    (line  999)
46410* Wchar-subscripts:                      Warning Options.    (line  205)
46411* Wclobbered:                            Warning Options.    (line 1035)
46412* Wcomment <1>:                          Preprocessor Options.
46413                                                             (line   89)
46414* Wcomment:                              Warning Options.    (line  210)
46415* Wcomments:                             Preprocessor Options.
46416                                                             (line   89)
46417* Wconversion:                           Warning Options.    (line 1039)
46418* Wconversion-null:                      Warning Options.    (line 1057)
46419* Wcoverage-mismatch:                    Language Independent Options.
46420                                                             (line   42)
46421* Wctor-dtor-privacy:                    C++ Dialect Options.
46422                                                             (line  446)
46423* Wdeclaration-after-statement:          Warning Options.    (line  925)
46424* Wdeprecated:                           Warning Options.    (line 1252)
46425* Wdeprecated-declarations:              Warning Options.    (line 1256)
46426* Wdisabled-optimization:                Warning Options.    (line 1383)
46427* Wdiv-by-zero:                          Warning Options.    (line  791)
46428* Wdouble-promotion:                     Warning Options.    (line  220)
46429* weak_reference_mismatches:             Darwin Options.     (line  199)
46430* Weffc++:                               C++ Dialect Options.
46431                                                             (line  479)
46432* Wempty-body:                           Warning Options.    (line 1061)
46433* Wendif-labels <1>:                     Preprocessor Options.
46434                                                             (line  136)
46435* Wendif-labels:                         Warning Options.    (line  935)
46436* Wenum-compare:                         Warning Options.    (line 1065)
46437* Werror <1>:                            Preprocessor Options.
46438                                                             (line  149)
46439* Werror:                                Warning Options.    (line   28)
46440* Werror=:                               Warning Options.    (line   31)
46441* Wextra:                                Warning Options.    (line  166)
46442* Wfatal-errors:                         Warning Options.    (line   48)
46443* Wfloat-equal:                          Warning Options.    (line  825)
46444* Wformat <1>:                           Function Attributes.
46445                                                             (line  420)
46446* Wformat:                               Warning Options.    (line  238)
46447* Wformat-contains-nul:                  Warning Options.    (line  277)
46448* Wformat-extra-args:                    Warning Options.    (line  281)
46449* Wformat-nonliteral <1>:                Function Attributes.
46450                                                             (line  485)
46451* Wformat-nonliteral:                    Warning Options.    (line  299)
46452* Wformat-security:                      Warning Options.    (line  304)
46453* Wformat-y2k:                           Warning Options.    (line  273)
46454* Wformat-zero-length:                   Warning Options.    (line  295)
46455* Wformat=2:                             Warning Options.    (line  315)
46456* Wframe-larger-than:                    Warning Options.    (line  949)
46457* whatsloaded:                           Darwin Options.     (line  199)
46458* whyload:                               Darwin Options.     (line  199)
46459* Wignored-qualifiers:                   Warning Options.    (line  354)
46460* Wimplicit:                             Warning Options.    (line  350)
46461* Wimplicit-function-declaration:        Warning Options.    (line  344)
46462* Wimplicit-int:                         Warning Options.    (line  340)
46463* Winit-self:                            Warning Options.    (line  327)
46464* Winline <1>:                           Inline.             (line   63)
46465* Winline:                               Warning Options.    (line 1322)
46466* Wint-to-pointer-cast:                  Warning Options.    (line 1349)
46467* Winvalid-offsetof:                     Warning Options.    (line 1335)
46468* Winvalid-pch:                          Warning Options.    (line 1358)
46469* Wjump-misses-init:                     Warning Options.    (line 1070)
46470* Wl:                                    Link Options.       (line  203)
46471* Wlarger-than-LEN:                      Warning Options.    (line  946)
46472* Wlarger-than=LEN:                      Warning Options.    (line  946)
46473* Wlogical-op:                           Warning Options.    (line 1107)
46474* Wlong-long:                            Warning Options.    (line 1362)
46475* Wmain:                                 Warning Options.    (line  365)
46476* Wmissing-braces:                       Warning Options.    (line  372)
46477* Wmissing-declarations:                 Warning Options.    (line 1158)
46478* Wmissing-field-initializers:           Warning Options.    (line 1166)
46479* Wmissing-format-attribute:             Warning Options.    (line 1184)
46480* Wmissing-include-dirs:                 Warning Options.    (line  382)
46481* Wmissing-parameter-type:               Warning Options.    (line 1144)
46482* Wmissing-prototypes:                   Warning Options.    (line 1152)
46483* Wmultichar:                            Warning Options.    (line 1203)
46484* Wnested-externs:                       Warning Options.    (line 1319)
46485* Wno-abi:                               C++ Dialect Options.
46486                                                             (line  336)
46487* Wno-address:                           Warning Options.    (line 1094)
46488* Wno-aggregate-return:                  Warning Options.    (line 1112)
46489* Wno-all:                               Warning Options.    (line  118)
46490* Wno-array-bounds:                      Warning Options.    (line  786)
46491* Wno-assign-intercept:                  Objective-C and Objective-C++ Dialect Options.
46492                                                             (line  157)
46493* Wno-attributes:                        Warning Options.    (line 1117)
46494* Wno-bad-function-cast:                 Warning Options.    (line  984)
46495* Wno-builtin-macro-redefined:           Warning Options.    (line 1123)
46496* Wno-cast-align:                        Warning Options.    (line 1015)
46497* Wno-cast-qual:                         Warning Options.    (line  999)
46498* Wno-char-subscripts:                   Warning Options.    (line  205)
46499* Wno-clobbered:                         Warning Options.    (line 1035)
46500* Wno-comment:                           Warning Options.    (line  210)
46501* Wno-conversion:                        Warning Options.    (line 1039)
46502* Wno-conversion-null:                   Warning Options.    (line 1057)
46503* Wno-ctor-dtor-privacy:                 C++ Dialect Options.
46504                                                             (line  446)
46505* Wno-declaration-after-statement:       Warning Options.    (line  925)
46506* Wno-deprecated:                        Warning Options.    (line 1252)
46507* Wno-deprecated-declarations:           Warning Options.    (line 1256)
46508* Wno-disabled-optimization:             Warning Options.    (line 1383)
46509* Wno-div-by-zero:                       Warning Options.    (line  791)
46510* Wno-double-promotion:                  Warning Options.    (line  220)
46511* Wno-effc++:                            C++ Dialect Options.
46512                                                             (line  479)
46513* Wno-empty-body:                        Warning Options.    (line 1061)
46514* Wno-endif-labels:                      Warning Options.    (line  935)
46515* Wno-enum-compare:                      Warning Options.    (line 1065)
46516* Wno-error:                             Warning Options.    (line   28)
46517* Wno-error=:                            Warning Options.    (line   31)
46518* Wno-extra:                             Warning Options.    (line  166)
46519* Wno-fatal-errors:                      Warning Options.    (line   48)
46520* Wno-float-equal:                       Warning Options.    (line  825)
46521* Wno-format:                            Warning Options.    (line  238)
46522* Wno-format-contains-nul:               Warning Options.    (line  277)
46523* Wno-format-extra-args:                 Warning Options.    (line  281)
46524* Wno-format-nonliteral:                 Warning Options.    (line  299)
46525* Wno-format-security:                   Warning Options.    (line  304)
46526* Wno-format-y2k:                        Warning Options.    (line  273)
46527* Wno-format-zero-length:                Warning Options.    (line  295)
46528* Wno-format=2:                          Warning Options.    (line  315)
46529* Wno-ignored-qualifiers:                Warning Options.    (line  354)
46530* Wno-implicit:                          Warning Options.    (line  350)
46531* Wno-implicit-function-declaration:     Warning Options.    (line  344)
46532* Wno-implicit-int:                      Warning Options.    (line  340)
46533* Wno-init-self:                         Warning Options.    (line  327)
46534* Wno-inline:                            Warning Options.    (line 1322)
46535* Wno-int-to-pointer-cast:               Warning Options.    (line 1349)
46536* Wno-invalid-offsetof:                  Warning Options.    (line 1335)
46537* Wno-invalid-pch:                       Warning Options.    (line 1358)
46538* Wno-jump-misses-init:                  Warning Options.    (line 1070)
46539* Wno-logical-op:                        Warning Options.    (line 1107)
46540* Wno-long-long:                         Warning Options.    (line 1362)
46541* Wno-main:                              Warning Options.    (line  365)
46542* Wno-missing-braces:                    Warning Options.    (line  372)
46543* Wno-missing-declarations:              Warning Options.    (line 1158)
46544* Wno-missing-field-initializers:        Warning Options.    (line 1166)
46545* Wno-missing-format-attribute:          Warning Options.    (line 1184)
46546* Wno-missing-include-dirs:              Warning Options.    (line  382)
46547* Wno-missing-parameter-type:            Warning Options.    (line 1144)
46548* Wno-missing-prototypes:                Warning Options.    (line 1152)
46549* Wno-mudflap:                           Warning Options.    (line 1403)
46550* Wno-multichar:                         Warning Options.    (line 1203)
46551* Wno-nested-externs:                    Warning Options.    (line 1319)
46552* Wno-noexcept:                          C++ Dialect Options.
46553                                                             (line  451)
46554* Wno-non-template-friend:               C++ Dialect Options.
46555                                                             (line  516)
46556* Wno-non-virtual-dtor:                  C++ Dialect Options.
46557                                                             (line  457)
46558* Wno-nonnull:                           Warning Options.    (line  320)
46559* Wno-old-style-cast:                    C++ Dialect Options.
46560                                                             (line  532)
46561* Wno-old-style-declaration:             Warning Options.    (line 1134)
46562* Wno-old-style-definition:              Warning Options.    (line 1140)
46563* Wno-overflow:                          Warning Options.    (line 1262)
46564* Wno-overlength-strings:                Warning Options.    (line 1407)
46565* Wno-overloaded-virtual:                C++ Dialect Options.
46566                                                             (line  538)
46567* Wno-override-init:                     Warning Options.    (line 1265)
46568* Wno-packed:                            Warning Options.    (line 1273)
46569* Wno-packed-bitfield-compat:            Warning Options.    (line 1290)
46570* Wno-padded:                            Warning Options.    (line 1307)
46571* Wno-parentheses:                       Warning Options.    (line  385)
46572* Wno-pedantic-ms-format:                Warning Options.    (line  964)
46573* Wno-pmf-conversions <1>:               Bound member functions.
46574                                                             (line   35)
46575* Wno-pmf-conversions:                   C++ Dialect Options.
46576                                                             (line  557)
46577* Wno-pointer-arith:                     Warning Options.    (line  970)
46578* Wno-pointer-sign:                      Warning Options.    (line 1392)
46579* Wno-pointer-to-int-cast:               Warning Options.    (line 1354)
46580* Wno-poison-system-directories:         Warning Options.    (line  818)
46581* Wno-pragmas:                           Warning Options.    (line  671)
46582* Wno-protocol:                          Objective-C and Objective-C++ Dialect Options.
46583                                                             (line  161)
46584* Wno-redundant-decls:                   Warning Options.    (line 1314)
46585* Wno-reorder:                           C++ Dialect Options.
46586                                                             (line  463)
46587* Wno-return-type:                       Warning Options.    (line  481)
46588* Wno-selector:                          Objective-C and Objective-C++ Dialect Options.
46589                                                             (line  171)
46590* Wno-sequence-point:                    Warning Options.    (line  435)
46591* Wno-shadow:                            Warning Options.    (line  939)
46592* Wno-sign-compare:                      Warning Options.    (line 1081)
46593* Wno-sign-conversion:                   Warning Options.    (line 1088)
46594* Wno-sign-promo:                        C++ Dialect Options.
46595                                                             (line  561)
46596* Wno-stack-protector:                   Warning Options.    (line 1398)
46597* Wno-strict-aliasing:                   Warning Options.    (line  676)
46598* Wno-strict-aliasing=n:                 Warning Options.    (line  684)
46599* Wno-strict-null-sentinel:              C++ Dialect Options.
46600                                                             (line  509)
46601* Wno-strict-overflow:                   Warning Options.    (line  717)
46602* Wno-strict-prototypes:                 Warning Options.    (line 1128)
46603* Wno-strict-selector-match:             Objective-C and Objective-C++ Dialect Options.
46604                                                             (line  183)
46605* Wno-suggest-attribute=:                Warning Options.    (line  768)
46606* Wno-suggest-attribute=const:           Warning Options.    (line  774)
46607* Wno-suggest-attribute=noreturn:        Warning Options.    (line  774)
46608* Wno-suggest-attribute=pure:            Warning Options.    (line  774)
46609* Wno-switch:                            Warning Options.    (line  496)
46610* Wno-switch-default:                    Warning Options.    (line  504)
46611* Wno-switch-enum:                       Warning Options.    (line  507)
46612* Wno-sync-nand:                         Warning Options.    (line  516)
46613* Wno-system-headers:                    Warning Options.    (line  796)
46614* Wno-traditional:                       Warning Options.    (line  840)
46615* Wno-traditional-conversion:            Warning Options.    (line  917)
46616* Wno-trampolines:                       Warning Options.    (line  807)
46617* Wno-trigraphs:                         Warning Options.    (line  521)
46618* Wno-type-limits:                       Warning Options.    (line  977)
46619* Wno-undeclared-selector:               Objective-C and Objective-C++ Dialect Options.
46620                                                             (line  191)
46621* Wno-undef:                             Warning Options.    (line  932)
46622* Wno-uninitialized:                     Warning Options.    (line  594)
46623* Wno-unknown-pragmas:                   Warning Options.    (line  664)
46624* Wno-unsafe-loop-optimizations:         Warning Options.    (line  958)
46625* Wno-unused:                            Warning Options.    (line  587)
46626* Wno-unused-but-set-parameter:          Warning Options.    (line  526)
46627* Wno-unused-but-set-variable:           Warning Options.    (line  535)
46628* Wno-unused-function:                   Warning Options.    (line  545)
46629* Wno-unused-label:                      Warning Options.    (line  550)
46630* Wno-unused-parameter:                  Warning Options.    (line  557)
46631* Wno-unused-result:                     Warning Options.    (line  564)
46632* Wno-unused-value:                      Warning Options.    (line  577)
46633* Wno-unused-variable:                   Warning Options.    (line  569)
46634* Wno-variadic-macros:                   Warning Options.    (line 1367)
46635* Wno-vla:                               Warning Options.    (line 1373)
46636* Wno-volatile-register-var:             Warning Options.    (line 1377)
46637* Wno-write-strings:                     Warning Options.    (line 1021)
46638* Wnoexcept:                             C++ Dialect Options.
46639                                                             (line  451)
46640* Wnon-template-friend:                  C++ Dialect Options.
46641                                                             (line  516)
46642* Wnon-virtual-dtor:                     C++ Dialect Options.
46643                                                             (line  457)
46644* Wnonnull:                              Warning Options.    (line  320)
46645* Wnormalized=:                          Warning Options.    (line 1209)
46646* Wold-style-cast:                       C++ Dialect Options.
46647                                                             (line  532)
46648* Wold-style-declaration:                Warning Options.    (line 1134)
46649* Wold-style-definition:                 Warning Options.    (line 1140)
46650* Woverflow:                             Warning Options.    (line 1262)
46651* Woverlength-strings:                   Warning Options.    (line 1407)
46652* Woverloaded-virtual:                   C++ Dialect Options.
46653                                                             (line  538)
46654* Woverride-init:                        Warning Options.    (line 1265)
46655* Wp:                                    Preprocessor Options.
46656                                                             (line   14)
46657* Wpacked:                               Warning Options.    (line 1273)
46658* Wpacked-bitfield-compat:               Warning Options.    (line 1290)
46659* Wpadded:                               Warning Options.    (line 1307)
46660* Wparentheses:                          Warning Options.    (line  385)
46661* Wpedantic-ms-format:                   Warning Options.    (line  964)
46662* Wpmf-conversions:                      C++ Dialect Options.
46663                                                             (line  557)
46664* Wpointer-arith <1>:                    Pointer Arith.      (line   13)
46665* Wpointer-arith:                        Warning Options.    (line  970)
46666* Wpointer-sign:                         Warning Options.    (line 1392)
46667* Wpointer-to-int-cast:                  Warning Options.    (line 1354)
46668* Wpragmas:                              Warning Options.    (line  671)
46669* Wprotocol:                             Objective-C and Objective-C++ Dialect Options.
46670                                                             (line  161)
46671* wrapper:                               Overall Options.    (line  345)
46672* Wredundant-decls:                      Warning Options.    (line 1314)
46673* Wreorder:                              C++ Dialect Options.
46674                                                             (line  463)
46675* Wreturn-type:                          Warning Options.    (line  481)
46676* Wselector:                             Objective-C and Objective-C++ Dialect Options.
46677                                                             (line  171)
46678* Wsequence-point:                       Warning Options.    (line  435)
46679* Wshadow:                               Warning Options.    (line  939)
46680* Wsign-compare:                         Warning Options.    (line 1081)
46681* Wsign-conversion:                      Warning Options.    (line 1088)
46682* Wsign-promo:                           C++ Dialect Options.
46683                                                             (line  561)
46684* Wstack-protector:                      Warning Options.    (line 1398)
46685* Wstrict-aliasing:                      Warning Options.    (line  676)
46686* Wstrict-aliasing=n:                    Warning Options.    (line  684)
46687* Wstrict-null-sentinel:                 C++ Dialect Options.
46688                                                             (line  509)
46689* Wstrict-overflow:                      Warning Options.    (line  717)
46690* Wstrict-prototypes:                    Warning Options.    (line 1128)
46691* Wstrict-selector-match:                Objective-C and Objective-C++ Dialect Options.
46692                                                             (line  183)
46693* Wsuggest-attribute=:                   Warning Options.    (line  768)
46694* Wsuggest-attribute=const:              Warning Options.    (line  774)
46695* Wsuggest-attribute=noreturn:           Warning Options.    (line  774)
46696* Wsuggest-attribute=pure:               Warning Options.    (line  774)
46697* Wswitch:                               Warning Options.    (line  496)
46698* Wswitch-default:                       Warning Options.    (line  504)
46699* Wswitch-enum:                          Warning Options.    (line  507)
46700* Wsync-nand:                            Warning Options.    (line  516)
46701* Wsystem-headers <1>:                   Preprocessor Options.
46702                                                             (line  153)
46703* Wsystem-headers:                       Warning Options.    (line  796)
46704* Wtraditional <1>:                      Preprocessor Options.
46705                                                             (line  106)
46706* Wtraditional:                          Warning Options.    (line  840)
46707* Wtraditional-conversion:               Warning Options.    (line  917)
46708* Wtrampolines:                          Warning Options.    (line  807)
46709* Wtrigraphs <1>:                        Preprocessor Options.
46710                                                             (line   94)
46711* Wtrigraphs:                            Warning Options.    (line  521)
46712* Wtype-limits:                          Warning Options.    (line  977)
46713* Wundeclared-selector:                  Objective-C and Objective-C++ Dialect Options.
46714                                                             (line  191)
46715* Wundef <1>:                            Preprocessor Options.
46716                                                             (line  112)
46717* Wundef:                                Warning Options.    (line  932)
46718* Wuninitialized:                        Warning Options.    (line  594)
46719* Wunknown-pragmas:                      Warning Options.    (line  664)
46720* Wunsafe-loop-optimizations:            Warning Options.    (line  958)
46721* Wunsuffixed-float-constants:           Warning Options.    (line 1422)
46722* Wunused:                               Warning Options.    (line  587)
46723* Wunused-but-set-parameter:             Warning Options.    (line  526)
46724* Wunused-but-set-variable:              Warning Options.    (line  535)
46725* Wunused-function:                      Warning Options.    (line  545)
46726* Wunused-label:                         Warning Options.    (line  550)
46727* Wunused-macros:                        Preprocessor Options.
46728                                                             (line  117)
46729* Wunused-parameter:                     Warning Options.    (line  557)
46730* Wunused-result:                        Warning Options.    (line  564)
46731* Wunused-value:                         Warning Options.    (line  577)
46732* Wunused-variable:                      Warning Options.    (line  569)
46733* Wvariadic-macros:                      Warning Options.    (line 1367)
46734* Wvla:                                  Warning Options.    (line 1373)
46735* Wvolatile-register-var:                Warning Options.    (line 1377)
46736* Wwrite-strings:                        Warning Options.    (line 1021)
46737* x <1>:                                 Preprocessor Options.
46738                                                             (line  310)
46739* x:                                     Overall Options.    (line  126)
46740* Xassembler:                            Assembler Options.  (line   13)
46741* Xbind-lazy:                            VxWorks Options.    (line   26)
46742* Xbind-now:                             VxWorks Options.    (line   30)
46743* Xlinker:                               Link Options.       (line  184)
46744* Xpreprocessor:                         Preprocessor Options.
46745                                                             (line   25)
46746* Ym:                                    System V Options.   (line   26)
46747* YP:                                    System V Options.   (line   22)
46748
46749
46750File: gcc.info,  Node: Keyword Index,  Prev: Option Index,  Up: Top
46751
46752Keyword Index
46753*************
46754
46755[index]
46756* Menu:
46757
46758* ! in constraint:                       Multi-Alternative.  (line   33)
46759* # in constraint:                       Modifiers.          (line   57)
46760* #pragma:                               Pragmas.            (line    6)
46761* #pragma implementation:                C++ Interface.      (line   39)
46762* #pragma implementation, implied:       C++ Interface.      (line   46)
46763* #pragma interface:                     C++ Interface.      (line   20)
46764* #pragma, reason for not using:         Function Attributes.
46765                                                             (line 1738)
46766* $:                                     Dollar Signs.       (line    6)
46767* % in constraint:                       Modifiers.          (line   45)
46768* %include:                              Spec Files.         (line   27)
46769* %include_noerr:                        Spec Files.         (line   31)
46770* %rename:                               Spec Files.         (line   35)
46771* & in constraint:                       Modifiers.          (line   25)
46772* ':                                     Incompatibilities.  (line  116)
46773* * in constraint:                       Modifiers.          (line   62)
46774* + in constraint:                       Modifiers.          (line   12)
46775* -lgcc, use with -nodefaultlibs:        Link Options.       (line   82)
46776* -lgcc, use with -nostdlib:             Link Options.       (line   82)
46777* -nodefaultlibs and unresolved references: Link Options.    (line   82)
46778* -nostdlib and unresolved references:   Link Options.       (line   82)
46779* .sdata/.sdata2 references (PowerPC):   RS/6000 and PowerPC Options.
46780                                                             (line  701)
46781* //:                                    C++ Comments.       (line    6)
46782* 0 in constraint:                       Simple Constraints. (line  127)
46783* < in constraint:                       Simple Constraints. (line   48)
46784* = in constraint:                       Modifiers.          (line    8)
46785* > in constraint:                       Simple Constraints. (line   61)
46786* ? in constraint:                       Multi-Alternative.  (line   27)
46787* ?: extensions:                         Conditionals.       (line    6)
46788* ?: side effect:                        Conditionals.       (line   20)
46789* _ in variables in macros:              Typeof.             (line   46)
46790* __builtin___clear_cache:               Other Builtins.     (line  329)
46791* __builtin___fprintf_chk:               Object Size Checking.
46792                                                             (line    6)
46793* __builtin___memcpy_chk:                Object Size Checking.
46794                                                             (line    6)
46795* __builtin___memmove_chk:               Object Size Checking.
46796                                                             (line    6)
46797* __builtin___mempcpy_chk:               Object Size Checking.
46798                                                             (line    6)
46799* __builtin___memset_chk:                Object Size Checking.
46800                                                             (line    6)
46801* __builtin___printf_chk:                Object Size Checking.
46802                                                             (line    6)
46803* __builtin___snprintf_chk:              Object Size Checking.
46804                                                             (line    6)
46805* __builtin___sprintf_chk:               Object Size Checking.
46806                                                             (line    6)
46807* __builtin___stpcpy_chk:                Object Size Checking.
46808                                                             (line    6)
46809* __builtin___strcat_chk:                Object Size Checking.
46810                                                             (line    6)
46811* __builtin___strcpy_chk:                Object Size Checking.
46812                                                             (line    6)
46813* __builtin___strncat_chk:               Object Size Checking.
46814                                                             (line    6)
46815* __builtin___strncpy_chk:               Object Size Checking.
46816                                                             (line    6)
46817* __builtin___vfprintf_chk:              Object Size Checking.
46818                                                             (line    6)
46819* __builtin___vprintf_chk:               Object Size Checking.
46820                                                             (line    6)
46821* __builtin___vsnprintf_chk:             Object Size Checking.
46822                                                             (line    6)
46823* __builtin___vsprintf_chk:              Object Size Checking.
46824                                                             (line    6)
46825* __builtin_apply:                       Constructing Calls. (line   31)
46826* __builtin_apply_args:                  Constructing Calls. (line   20)
46827* __builtin_bswap32:                     Other Builtins.     (line  548)
46828* __builtin_bswap64:                     Other Builtins.     (line  553)
46829* __builtin_choose_expr:                 Other Builtins.     (line  157)
46830* __builtin_clz:                         Other Builtins.     (line  481)
46831* __builtin_clzl:                        Other Builtins.     (line  499)
46832* __builtin_clzll:                       Other Builtins.     (line  519)
46833* __builtin_constant_p:                  Other Builtins.     (line  197)
46834* __builtin_ctz:                         Other Builtins.     (line  485)
46835* __builtin_ctzl:                        Other Builtins.     (line  503)
46836* __builtin_ctzll:                       Other Builtins.     (line  523)
46837* __builtin_expect:                      Other Builtins.     (line  247)
46838* __builtin_extract_return_address:      Return Address.     (line   37)
46839* __builtin_ffs:                         Other Builtins.     (line  477)
46840* __builtin_ffsl:                        Other Builtins.     (line  495)
46841* __builtin_ffsll:                       Other Builtins.     (line  515)
46842* __builtin_fpclassify:                  Other Builtins.     (line    6)
46843* __builtin_frame_address:               Return Address.     (line   51)
46844* __builtin_frob_return_address:         Return Address.     (line   46)
46845* __builtin_huge_val:                    Other Builtins.     (line  380)
46846* __builtin_huge_valf:                   Other Builtins.     (line  385)
46847* __builtin_huge_vall:                   Other Builtins.     (line  388)
46848* __builtin_huge_valq:                   X86 Built-in Functions.
46849                                                             (line   51)
46850* __builtin_inf:                         Other Builtins.     (line  403)
46851* __builtin_infd128:                     Other Builtins.     (line  413)
46852* __builtin_infd32:                      Other Builtins.     (line  407)
46853* __builtin_infd64:                      Other Builtins.     (line  410)
46854* __builtin_inff:                        Other Builtins.     (line  417)
46855* __builtin_infl:                        Other Builtins.     (line  422)
46856* __builtin_infq:                        X86 Built-in Functions.
46857                                                             (line   47)
46858* __builtin_isfinite:                    Other Builtins.     (line    6)
46859* __builtin_isgreater:                   Other Builtins.     (line    6)
46860* __builtin_isgreaterequal:              Other Builtins.     (line    6)
46861* __builtin_isinf_sign:                  Other Builtins.     (line    6)
46862* __builtin_isless:                      Other Builtins.     (line    6)
46863* __builtin_islessequal:                 Other Builtins.     (line    6)
46864* __builtin_islessgreater:               Other Builtins.     (line    6)
46865* __builtin_isnormal:                    Other Builtins.     (line    6)
46866* __builtin_isunordered:                 Other Builtins.     (line    6)
46867* __builtin_nan:                         Other Builtins.     (line  433)
46868* __builtin_nand128:                     Other Builtins.     (line  455)
46869* __builtin_nand32:                      Other Builtins.     (line  449)
46870* __builtin_nand64:                      Other Builtins.     (line  452)
46871* __builtin_nanf:                        Other Builtins.     (line  459)
46872* __builtin_nanl:                        Other Builtins.     (line  462)
46873* __builtin_nans:                        Other Builtins.     (line  466)
46874* __builtin_nansf:                       Other Builtins.     (line  470)
46875* __builtin_nansl:                       Other Builtins.     (line  473)
46876* __builtin_object_size:                 Object Size Checking.
46877                                                             (line    6)
46878* __builtin_offsetof:                    Offsetof.           (line    6)
46879* __builtin_parity:                      Other Builtins.     (line  492)
46880* __builtin_parityl:                     Other Builtins.     (line  511)
46881* __builtin_parityll:                    Other Builtins.     (line  531)
46882* __builtin_popcount:                    Other Builtins.     (line  489)
46883* __builtin_popcountl:                   Other Builtins.     (line  507)
46884* __builtin_popcountll:                  Other Builtins.     (line  527)
46885* __builtin_powi:                        Other Builtins.     (line    6)
46886* __builtin_powif:                       Other Builtins.     (line    6)
46887* __builtin_powil:                       Other Builtins.     (line    6)
46888* __builtin_prefetch:                    Other Builtins.     (line  341)
46889* __builtin_return:                      Constructing Calls. (line   48)
46890* __builtin_return_address:              Return Address.     (line   11)
46891* __builtin_rx_brk:                      RX Built-in Functions.
46892                                                             (line   11)
46893* __builtin_rx_clrpsw:                   RX Built-in Functions.
46894                                                             (line   14)
46895* __builtin_rx_int:                      RX Built-in Functions.
46896                                                             (line   18)
46897* __builtin_rx_machi:                    RX Built-in Functions.
46898                                                             (line   22)
46899* __builtin_rx_maclo:                    RX Built-in Functions.
46900                                                             (line   27)
46901* __builtin_rx_mulhi:                    RX Built-in Functions.
46902                                                             (line   32)
46903* __builtin_rx_mullo:                    RX Built-in Functions.
46904                                                             (line   37)
46905* __builtin_rx_mvfachi:                  RX Built-in Functions.
46906                                                             (line   42)
46907* __builtin_rx_mvfacmi:                  RX Built-in Functions.
46908                                                             (line   46)
46909* __builtin_rx_mvfc:                     RX Built-in Functions.
46910                                                             (line   50)
46911* __builtin_rx_mvtachi:                  RX Built-in Functions.
46912                                                             (line   54)
46913* __builtin_rx_mvtaclo:                  RX Built-in Functions.
46914                                                             (line   58)
46915* __builtin_rx_mvtc:                     RX Built-in Functions.
46916                                                             (line   62)
46917* __builtin_rx_mvtipl:                   RX Built-in Functions.
46918                                                             (line   66)
46919* __builtin_rx_racw:                     RX Built-in Functions.
46920                                                             (line   70)
46921* __builtin_rx_revw:                     RX Built-in Functions.
46922                                                             (line   74)
46923* __builtin_rx_rmpa:                     RX Built-in Functions.
46924                                                             (line   79)
46925* __builtin_rx_round:                    RX Built-in Functions.
46926                                                             (line   83)
46927* __builtin_rx_sat:                      RX Built-in Functions.
46928                                                             (line   88)
46929* __builtin_rx_setpsw:                   RX Built-in Functions.
46930                                                             (line   92)
46931* __builtin_rx_wait:                     RX Built-in Functions.
46932                                                             (line   96)
46933* __builtin_trap:                        Other Builtins.     (line  271)
46934* __builtin_types_compatible_p:          Other Builtins.     (line  111)
46935* __builtin_unreachable:                 Other Builtins.     (line  278)
46936* __builtin_va_arg_pack:                 Constructing Calls. (line   53)
46937* __builtin_va_arg_pack_len:             Constructing Calls. (line   76)
46938* __complex__ keyword:                   Complex.            (line    6)
46939* __declspec(dllexport):                 Function Attributes.
46940                                                             (line  259)
46941* __declspec(dllimport):                 Function Attributes.
46942                                                             (line  294)
46943* __extension__:                         Alternate Keywords. (line   30)
46944* __float128 data type:                  Floating Types.     (line    6)
46945* __float80 data type:                   Floating Types.     (line    6)
46946* __fp16 data type:                      Half-Precision.     (line    6)
46947* __func__ identifier:                   Function Names.     (line    6)
46948* __FUNCTION__ identifier:               Function Names.     (line    6)
46949* __imag__ keyword:                      Complex.            (line   27)
46950* __int128 data types:                   __int128.           (line    6)
46951* __PRETTY_FUNCTION__ identifier:        Function Names.     (line    6)
46952* __real__ keyword:                      Complex.            (line   27)
46953* __STDC_HOSTED__:                       Standards.          (line   13)
46954* __sync_add_and_fetch:                  Atomic Builtins.    (line   61)
46955* __sync_and_and_fetch:                  Atomic Builtins.    (line   61)
46956* __sync_bool_compare_and_swap:          Atomic Builtins.    (line   73)
46957* __sync_fetch_and_add:                  Atomic Builtins.    (line   45)
46958* __sync_fetch_and_and:                  Atomic Builtins.    (line   45)
46959* __sync_fetch_and_nand:                 Atomic Builtins.    (line   45)
46960* __sync_fetch_and_or:                   Atomic Builtins.    (line   45)
46961* __sync_fetch_and_sub:                  Atomic Builtins.    (line   45)
46962* __sync_fetch_and_xor:                  Atomic Builtins.    (line   45)
46963* __sync_lock_release:                   Atomic Builtins.    (line  103)
46964* __sync_lock_test_and_set:              Atomic Builtins.    (line   85)
46965* __sync_nand_and_fetch:                 Atomic Builtins.    (line   61)
46966* __sync_or_and_fetch:                   Atomic Builtins.    (line   61)
46967* __sync_sub_and_fetch:                  Atomic Builtins.    (line   61)
46968* __sync_synchronize:                    Atomic Builtins.    (line   82)
46969* __sync_val_compare_and_swap:           Atomic Builtins.    (line   73)
46970* __sync_xor_and_fetch:                  Atomic Builtins.    (line   61)
46971* __thread:                              Thread-Local.       (line    6)
46972* _Accum data type:                      Fixed-Point.        (line    6)
46973* _Complex keyword:                      Complex.            (line    6)
46974* _Decimal128 data type:                 Decimal Float.      (line    6)
46975* _Decimal32 data type:                  Decimal Float.      (line    6)
46976* _Decimal64 data type:                  Decimal Float.      (line    6)
46977* _exit:                                 Other Builtins.     (line    6)
46978* _Exit:                                 Other Builtins.     (line    6)
46979* _Fract data type:                      Fixed-Point.        (line    6)
46980* _Sat data type:                        Fixed-Point.        (line    6)
46981* ABI:                                   Compatibility.      (line    6)
46982* abort:                                 Other Builtins.     (line    6)
46983* abs:                                   Other Builtins.     (line    6)
46984* accessing volatiles <1>:               C++ Volatiles.      (line    6)
46985* accessing volatiles:                   Volatiles.          (line    6)
46986* acos:                                  Other Builtins.     (line    6)
46987* acosf:                                 Other Builtins.     (line    6)
46988* acosh:                                 Other Builtins.     (line    6)
46989* acoshf:                                Other Builtins.     (line    6)
46990* acoshl:                                Other Builtins.     (line    6)
46991* acosl:                                 Other Builtins.     (line    6)
46992* Ada:                                   G++ and GCC.        (line    6)
46993* additional floating types:             Floating Types.     (line    6)
46994* address constraints:                   Simple Constraints. (line  154)
46995* address of a label:                    Labels as Values.   (line    6)
46996* address_operand:                       Simple Constraints. (line  158)
46997* alias attribute:                       Function Attributes.
46998                                                             (line   36)
46999* aligned attribute <1>:                 Type Attributes.    (line   31)
47000* aligned attribute <2>:                 Variable Attributes.
47001                                                             (line   23)
47002* aligned attribute:                     Function Attributes.
47003                                                             (line   49)
47004* alignment:                             Alignment.          (line    6)
47005* alloc_size attribute:                  Function Attributes.
47006                                                             (line   69)
47007* alloca:                                Other Builtins.     (line    6)
47008* alloca vs variable-length arrays:      Variable Length.    (line   26)
47009* Allow nesting in an interrupt handler on the Blackfin processor.: Function Attributes.
47010                                                             (line  888)
47011* alternate keywords:                    Alternate Keywords. (line    6)
47012* always_inline function attribute:      Function Attributes.
47013                                                             (line   90)
47014* AMD x86-64 Options:                    i386 and x86-64 Options.
47015                                                             (line    6)
47016* AMD1:                                  Standards.          (line   13)
47017* ANSI C:                                Standards.          (line   13)
47018* ANSI C standard:                       Standards.          (line   13)
47019* ANSI C89:                              Standards.          (line   13)
47020* ANSI support:                          C Dialect Options.  (line   10)
47021* ANSI X3.159-1989:                      Standards.          (line   13)
47022* apostrophes:                           Incompatibilities.  (line  116)
47023* application binary interface:          Compatibility.      (line    6)
47024* ARC Options:                           ARC Options.        (line    6)
47025* ARM [Annotated C++ Reference Manual]:  Backwards Compatibility.
47026                                                             (line    6)
47027* ARM options:                           ARM Options.        (line    6)
47028* arrays of length zero:                 Zero Length.        (line    6)
47029* arrays of variable length:             Variable Length.    (line    6)
47030* arrays, non-lvalue:                    Subscripting.       (line    6)
47031* artificial function attribute:         Function Attributes.
47032                                                             (line  133)
47033* asin:                                  Other Builtins.     (line    6)
47034* asinf:                                 Other Builtins.     (line    6)
47035* asinh:                                 Other Builtins.     (line    6)
47036* asinhf:                                Other Builtins.     (line    6)
47037* asinhl:                                Other Builtins.     (line    6)
47038* asinl:                                 Other Builtins.     (line    6)
47039* asm constraints:                       Constraints.        (line    6)
47040* asm expressions:                       Extended Asm.       (line    6)
47041* assembler instructions:                Extended Asm.       (line    6)
47042* assembler names for identifiers:       Asm Labels.         (line    6)
47043* assembly code, invalid:                Bug Criteria.       (line   12)
47044* atan:                                  Other Builtins.     (line    6)
47045* atan2:                                 Other Builtins.     (line    6)
47046* atan2f:                                Other Builtins.     (line    6)
47047* atan2l:                                Other Builtins.     (line    6)
47048* atanf:                                 Other Builtins.     (line    6)
47049* atanh:                                 Other Builtins.     (line    6)
47050* atanhf:                                Other Builtins.     (line    6)
47051* atanhl:                                Other Builtins.     (line    6)
47052* atanl:                                 Other Builtins.     (line    6)
47053* attribute of types:                    Type Attributes.    (line    6)
47054* attribute of variables:                Variable Attributes.
47055                                                             (line    6)
47056* attribute syntax:                      Attribute Syntax.   (line    6)
47057* autoincrement/decrement addressing:    Simple Constraints. (line   30)
47058* automatic inline for C++ member fns:   Inline.             (line   71)
47059* AVR Options:                           AVR Options.        (line    6)
47060* Backwards Compatibility:               Backwards Compatibility.
47061                                                             (line    6)
47062* base class members:                    Name lookup.        (line    6)
47063* bcmp:                                  Other Builtins.     (line    6)
47064* below100 attribute:                    Variable Attributes.
47065                                                             (line  550)
47066* binary compatibility:                  Compatibility.      (line    6)
47067* Binary constants using the 0b prefix:  Binary constants.   (line    6)
47068* Blackfin Options:                      Blackfin Options.   (line    6)
47069* bound pointer to member function:      Bound member functions.
47070                                                             (line    6)
47071* bounds checking:                       Optimize Options.   (line  394)
47072* bug criteria:                          Bug Criteria.       (line    6)
47073* bugs:                                  Bugs.               (line    6)
47074* bugs, known:                           Trouble.            (line    6)
47075* built-in functions <1>:                Other Builtins.     (line    6)
47076* built-in functions:                    C Dialect Options.  (line  184)
47077* bzero:                                 Other Builtins.     (line    6)
47078* C compilation options:                 Invoking GCC.       (line   17)
47079* C intermediate output, nonexistent:    G++ and GCC.        (line   35)
47080* C language extensions:                 C Extensions.       (line    6)
47081* C language, traditional:               C Dialect Options.  (line  282)
47082* C standard:                            Standards.          (line   13)
47083* C standards:                           Standards.          (line   13)
47084* c++:                                   Invoking G++.       (line   14)
47085* C++:                                   G++ and GCC.        (line   30)
47086* C++ comments:                          C++ Comments.       (line    6)
47087* C++ compilation options:               Invoking GCC.       (line   23)
47088* C++ interface and implementation headers: C++ Interface.   (line    6)
47089* C++ language extensions:               C++ Extensions.     (line    6)
47090* C++ member fns, automatically inline:  Inline.             (line   71)
47091* C++ misunderstandings:                 C++ Misunderstandings.
47092                                                             (line    6)
47093* C++ options, command line:             C++ Dialect Options.
47094                                                             (line    6)
47095* C++ pragmas, effect on inlining:       C++ Interface.      (line   66)
47096* C++ source file suffixes:              Invoking G++.       (line    6)
47097* C++ static data, declaring and defining: Static Definitions.
47098                                                             (line    6)
47099* C1X:                                   Standards.          (line   13)
47100* C89:                                   Standards.          (line   13)
47101* C90:                                   Standards.          (line   13)
47102* C94:                                   Standards.          (line   13)
47103* C95:                                   Standards.          (line   13)
47104* C99:                                   Standards.          (line   13)
47105* C9X:                                   Standards.          (line   13)
47106* C_INCLUDE_PATH:                        Environment Variables.
47107                                                             (line  127)
47108* cabs:                                  Other Builtins.     (line    6)
47109* cabsf:                                 Other Builtins.     (line    6)
47110* cabsl:                                 Other Builtins.     (line    6)
47111* cacos:                                 Other Builtins.     (line    6)
47112* cacosf:                                Other Builtins.     (line    6)
47113* cacosh:                                Other Builtins.     (line    6)
47114* cacoshf:                               Other Builtins.     (line    6)
47115* cacoshl:                               Other Builtins.     (line    6)
47116* cacosl:                                Other Builtins.     (line    6)
47117* callee_pop_aggregate_return attribute: Function Attributes.
47118                                                             (line  847)
47119* calling functions through the function vector on H8/300, M16C, M32C and SH2A processors: Function Attributes.
47120                                                             (line  532)
47121* calloc:                                Other Builtins.     (line    6)
47122* carg:                                  Other Builtins.     (line    6)
47123* cargf:                                 Other Builtins.     (line    6)
47124* cargl:                                 Other Builtins.     (line    6)
47125* case labels in initializers:           Designated Inits.   (line    6)
47126* case ranges:                           Case Ranges.        (line    6)
47127* casin:                                 Other Builtins.     (line    6)
47128* casinf:                                Other Builtins.     (line    6)
47129* casinh:                                Other Builtins.     (line    6)
47130* casinhf:                               Other Builtins.     (line    6)
47131* casinhl:                               Other Builtins.     (line    6)
47132* casinl:                                Other Builtins.     (line    6)
47133* cast to a union:                       Cast to Union.      (line    6)
47134* catan:                                 Other Builtins.     (line    6)
47135* catanf:                                Other Builtins.     (line    6)
47136* catanh:                                Other Builtins.     (line    6)
47137* catanhf:                               Other Builtins.     (line    6)
47138* catanhl:                               Other Builtins.     (line    6)
47139* catanl:                                Other Builtins.     (line    6)
47140* cbrt:                                  Other Builtins.     (line    6)
47141* cbrtf:                                 Other Builtins.     (line    6)
47142* cbrtl:                                 Other Builtins.     (line    6)
47143* ccos:                                  Other Builtins.     (line    6)
47144* ccosf:                                 Other Builtins.     (line    6)
47145* ccosh:                                 Other Builtins.     (line    6)
47146* ccoshf:                                Other Builtins.     (line    6)
47147* ccoshl:                                Other Builtins.     (line    6)
47148* ccosl:                                 Other Builtins.     (line    6)
47149* ceil:                                  Other Builtins.     (line    6)
47150* ceilf:                                 Other Builtins.     (line    6)
47151* ceill:                                 Other Builtins.     (line    6)
47152* cexp:                                  Other Builtins.     (line    6)
47153* cexpf:                                 Other Builtins.     (line    6)
47154* cexpl:                                 Other Builtins.     (line    6)
47155* character set, execution:              Preprocessor Options.
47156                                                             (line  508)
47157* character set, input:                  Preprocessor Options.
47158                                                             (line  521)
47159* character set, input normalization:    Warning Options.    (line 1209)
47160* character set, wide execution:         Preprocessor Options.
47161                                                             (line  513)
47162* cimag:                                 Other Builtins.     (line    6)
47163* cimagf:                                Other Builtins.     (line    6)
47164* cimagl:                                Other Builtins.     (line    6)
47165* cleanup attribute:                     Variable Attributes.
47166                                                             (line   89)
47167* clog:                                  Other Builtins.     (line    6)
47168* clogf:                                 Other Builtins.     (line    6)
47169* clogl:                                 Other Builtins.     (line    6)
47170* COBOL:                                 G++ and GCC.        (line   23)
47171* code generation conventions:           Code Gen Options.   (line    6)
47172* code, mixed with declarations:         Mixed Declarations. (line    6)
47173* cold function attribute:               Function Attributes.
47174                                                             (line 1069)
47175* command options:                       Invoking GCC.       (line    6)
47176* comments, C++ style:                   C++ Comments.       (line    6)
47177* common attribute:                      Variable Attributes.
47178                                                             (line  105)
47179* comparison of signed and unsigned values, warning: Warning Options.
47180                                                             (line 1081)
47181* compiler bugs, reporting:              Bug Reporting.      (line    6)
47182* compiler compared to C++ preprocessor: G++ and GCC.        (line   35)
47183* compiler options, C++:                 C++ Dialect Options.
47184                                                             (line    6)
47185* compiler options, Objective-C and Objective-C++: Objective-C and Objective-C++ Dialect Options.
47186                                                             (line    6)
47187* compiler version, specifying:          Target Options.     (line    6)
47188* COMPILER_PATH:                         Environment Variables.
47189                                                             (line   88)
47190* complex conjugation:                   Complex.            (line   34)
47191* complex numbers:                       Complex.            (line    6)
47192* compound literals:                     Compound Literals.  (line    6)
47193* computed gotos:                        Labels as Values.   (line    6)
47194* conditional expressions, extensions:   Conditionals.       (line    6)
47195* conflicting types:                     Disappointments.    (line   21)
47196* conj:                                  Other Builtins.     (line    6)
47197* conjf:                                 Other Builtins.     (line    6)
47198* conjl:                                 Other Builtins.     (line    6)
47199* const applied to function:             Function Attributes.
47200                                                             (line    6)
47201* const function attribute:              Function Attributes.
47202                                                             (line  183)
47203* constants in constraints:              Simple Constraints. (line   70)
47204* constraint modifier characters:        Modifiers.          (line    6)
47205* constraint, matching:                  Simple Constraints. (line  139)
47206* constraints, asm:                      Constraints.        (line    6)
47207* constraints, machine specific:         Machine Constraints.
47208                                                             (line    6)
47209* constructing calls:                    Constructing Calls. (line    6)
47210* constructor expressions:               Compound Literals.  (line    6)
47211* constructor function attribute:        Function Attributes.
47212                                                             (line  211)
47213* contributors:                          Contributors.       (line    6)
47214* copysign:                              Other Builtins.     (line    6)
47215* copysignf:                             Other Builtins.     (line    6)
47216* copysignl:                             Other Builtins.     (line    6)
47217* core dump:                             Bug Criteria.       (line    9)
47218* cos:                                   Other Builtins.     (line    6)
47219* cosf:                                  Other Builtins.     (line    6)
47220* cosh:                                  Other Builtins.     (line    6)
47221* coshf:                                 Other Builtins.     (line    6)
47222* coshl:                                 Other Builtins.     (line    6)
47223* cosl:                                  Other Builtins.     (line    6)
47224* CPATH:                                 Environment Variables.
47225                                                             (line  126)
47226* CPLUS_INCLUDE_PATH:                    Environment Variables.
47227                                                             (line  128)
47228* cpow:                                  Other Builtins.     (line    6)
47229* cpowf:                                 Other Builtins.     (line    6)
47230* cpowl:                                 Other Builtins.     (line    6)
47231* cproj:                                 Other Builtins.     (line    6)
47232* cprojf:                                Other Builtins.     (line    6)
47233* cprojl:                                Other Builtins.     (line    6)
47234* creal:                                 Other Builtins.     (line    6)
47235* crealf:                                Other Builtins.     (line    6)
47236* creall:                                Other Builtins.     (line    6)
47237* CRIS Options:                          CRIS Options.       (line    6)
47238* cross compiling:                       Target Options.     (line    6)
47239* CRX Options:                           CRX Options.        (line    6)
47240* csin:                                  Other Builtins.     (line    6)
47241* csinf:                                 Other Builtins.     (line    6)
47242* csinh:                                 Other Builtins.     (line    6)
47243* csinhf:                                Other Builtins.     (line    6)
47244* csinhl:                                Other Builtins.     (line    6)
47245* csinl:                                 Other Builtins.     (line    6)
47246* csqrt:                                 Other Builtins.     (line    6)
47247* csqrtf:                                Other Builtins.     (line    6)
47248* csqrtl:                                Other Builtins.     (line    6)
47249* ctan:                                  Other Builtins.     (line    6)
47250* ctanf:                                 Other Builtins.     (line    6)
47251* ctanh:                                 Other Builtins.     (line    6)
47252* ctanhf:                                Other Builtins.     (line    6)
47253* ctanhl:                                Other Builtins.     (line    6)
47254* ctanl:                                 Other Builtins.     (line    6)
47255* Darwin options:                        Darwin Options.     (line    6)
47256* dcgettext:                             Other Builtins.     (line    6)
47257* DD integer suffix:                     Decimal Float.      (line    6)
47258* dd integer suffix:                     Decimal Float.      (line    6)
47259* deallocating variable length arrays:   Variable Length.    (line   22)
47260* debugging information options:         Debugging Options.  (line    6)
47261* decimal floating types:                Decimal Float.      (line    6)
47262* declaration scope:                     Incompatibilities.  (line   80)
47263* declarations inside expressions:       Statement Exprs.    (line    6)
47264* declarations, mixed with code:         Mixed Declarations. (line    6)
47265* declaring attributes of functions:     Function Attributes.
47266                                                             (line    6)
47267* declaring static data in C++:          Static Definitions. (line    6)
47268* defining static data in C++:           Static Definitions. (line    6)
47269* dependencies for make as output:       Environment Variables.
47270                                                             (line  154)
47271* dependencies, make:                    Preprocessor Options.
47272                                                             (line  173)
47273* DEPENDENCIES_OUTPUT:                   Environment Variables.
47274                                                             (line  153)
47275* dependent name lookup:                 Name lookup.        (line    6)
47276* deprecated attribute:                  Variable Attributes.
47277                                                             (line  114)
47278* deprecated attribute.:                 Function Attributes.
47279                                                             (line  234)
47280* designated initializers:               Designated Inits.   (line    6)
47281* designator lists:                      Designated Inits.   (line   94)
47282* designators:                           Designated Inits.   (line   61)
47283* destructor function attribute:         Function Attributes.
47284                                                             (line  211)
47285* DF integer suffix:                     Decimal Float.      (line    6)
47286* df integer suffix:                     Decimal Float.      (line    6)
47287* dgettext:                              Other Builtins.     (line    6)
47288* diagnostic messages:                   Language Independent Options.
47289                                                             (line    6)
47290* dialect options:                       C Dialect Options.  (line    6)
47291* digits in constraint:                  Simple Constraints. (line  127)
47292* directory options:                     Directory Options.  (line    6)
47293* disinterrupt attribute:                Function Attributes.
47294                                                             (line  254)
47295* DL integer suffix:                     Decimal Float.      (line    6)
47296* dl integer suffix:                     Decimal Float.      (line    6)
47297* dollar signs in identifier names:      Dollar Signs.       (line    6)
47298* double-word arithmetic:                Long Long.          (line    6)
47299* downward funargs:                      Nested Functions.   (line    6)
47300* drem:                                  Other Builtins.     (line    6)
47301* dremf:                                 Other Builtins.     (line    6)
47302* dreml:                                 Other Builtins.     (line    6)
47303* E in constraint:                       Simple Constraints. (line   89)
47304* earlyclobber operand:                  Modifiers.          (line   25)
47305* eight bit data on the H8/300, H8/300H, and H8S: Function Attributes.
47306                                                             (line  347)
47307* empty structures:                      Empty Structures.   (line    6)
47308* environment variables:                 Environment Variables.
47309                                                             (line    6)
47310* erf:                                   Other Builtins.     (line    6)
47311* erfc:                                  Other Builtins.     (line    6)
47312* erfcf:                                 Other Builtins.     (line    6)
47313* erfcl:                                 Other Builtins.     (line    6)
47314* erff:                                  Other Builtins.     (line    6)
47315* erfl:                                  Other Builtins.     (line    6)
47316* error function attribute:              Function Attributes.
47317                                                             (line  152)
47318* error messages:                        Warnings and Errors.
47319                                                             (line    6)
47320* escaped newlines:                      Escaped Newlines.   (line    6)
47321* exception handler functions on the Blackfin processor: Function Attributes.
47322                                                             (line  357)
47323* exclamation point:                     Multi-Alternative.  (line   33)
47324* exit:                                  Other Builtins.     (line    6)
47325* exp:                                   Other Builtins.     (line    6)
47326* exp10:                                 Other Builtins.     (line    6)
47327* exp10f:                                Other Builtins.     (line    6)
47328* exp10l:                                Other Builtins.     (line    6)
47329* exp2:                                  Other Builtins.     (line    6)
47330* exp2f:                                 Other Builtins.     (line    6)
47331* exp2l:                                 Other Builtins.     (line    6)
47332* expf:                                  Other Builtins.     (line    6)
47333* expl:                                  Other Builtins.     (line    6)
47334* explicit register variables:           Explicit Reg Vars.  (line    6)
47335* expm1:                                 Other Builtins.     (line    6)
47336* expm1f:                                Other Builtins.     (line    6)
47337* expm1l:                                Other Builtins.     (line    6)
47338* expressions containing statements:     Statement Exprs.    (line    6)
47339* expressions, constructor:              Compound Literals.  (line    6)
47340* extended asm:                          Extended Asm.       (line    6)
47341* extensible constraints:                Simple Constraints. (line  163)
47342* extensions, ?::                        Conditionals.       (line    6)
47343* extensions, C language:                C Extensions.       (line    6)
47344* extensions, C++ language:              C++ Extensions.     (line    6)
47345* external declaration scope:            Incompatibilities.  (line   80)
47346* externally_visible attribute.:         Function Attributes.
47347                                                             (line  363)
47348* F in constraint:                       Simple Constraints. (line   94)
47349* fabs:                                  Other Builtins.     (line    6)
47350* fabsf:                                 Other Builtins.     (line    6)
47351* fabsl:                                 Other Builtins.     (line    6)
47352* fatal signal:                          Bug Criteria.       (line    9)
47353* fdim:                                  Other Builtins.     (line    6)
47354* fdimf:                                 Other Builtins.     (line    6)
47355* fdiml:                                 Other Builtins.     (line    6)
47356* FDL, GNU Free Documentation License:   GNU Free Documentation License.
47357                                                             (line    6)
47358* ffs:                                   Other Builtins.     (line    6)
47359* file name suffix:                      Overall Options.    (line   14)
47360* file names:                            Link Options.       (line   10)
47361* fixed-point types:                     Fixed-Point.        (line    6)
47362* flatten function attribute:            Function Attributes.
47363                                                             (line  145)
47364* flexible array members:                Zero Length.        (line    6)
47365* float as function value type:          Incompatibilities.  (line  141)
47366* floating point precision <1>:          Disappointments.    (line   68)
47367* floating point precision:              Optimize Options.   (line 1810)
47368* floor:                                 Other Builtins.     (line    6)
47369* floorf:                                Other Builtins.     (line    6)
47370* floorl:                                Other Builtins.     (line    6)
47371* fma:                                   Other Builtins.     (line    6)
47372* fmaf:                                  Other Builtins.     (line    6)
47373* fmal:                                  Other Builtins.     (line    6)
47374* fmax:                                  Other Builtins.     (line    6)
47375* fmaxf:                                 Other Builtins.     (line    6)
47376* fmaxl:                                 Other Builtins.     (line    6)
47377* fmin:                                  Other Builtins.     (line    6)
47378* fminf:                                 Other Builtins.     (line    6)
47379* fminl:                                 Other Builtins.     (line    6)
47380* fmod:                                  Other Builtins.     (line    6)
47381* fmodf:                                 Other Builtins.     (line    6)
47382* fmodl:                                 Other Builtins.     (line    6)
47383* force_align_arg_pointer attribute:     Function Attributes.
47384                                                             (line 1111)
47385* format function attribute:             Function Attributes.
47386                                                             (line  420)
47387* format_arg function attribute:         Function Attributes.
47388                                                             (line  485)
47389* Fortran:                               G++ and GCC.        (line    6)
47390* forwarding calls:                      Constructing Calls. (line    6)
47391* fprintf:                               Other Builtins.     (line    6)
47392* fprintf_unlocked:                      Other Builtins.     (line    6)
47393* fputs:                                 Other Builtins.     (line    6)
47394* fputs_unlocked:                        Other Builtins.     (line    6)
47395* FR30 Options:                          FR30 Options.       (line    6)
47396* freestanding environment:              Standards.          (line   13)
47397* freestanding implementation:           Standards.          (line   13)
47398* frexp:                                 Other Builtins.     (line    6)
47399* frexpf:                                Other Builtins.     (line    6)
47400* frexpl:                                Other Builtins.     (line    6)
47401* FRV Options:                           FRV Options.        (line    6)
47402* fscanf:                                Other Builtins.     (line    6)
47403* fscanf, and constant strings:          Incompatibilities.  (line   17)
47404* function addressability on the M32R/D: Function Attributes.
47405                                                             (line  807)
47406* function attributes:                   Function Attributes.
47407                                                             (line    6)
47408* function pointers, arithmetic:         Pointer Arith.      (line    6)
47409* function prototype declarations:       Function Prototypes.
47410                                                             (line    6)
47411* function without a prologue/epilogue code: Function Attributes.
47412                                                             (line  865)
47413* function, size of pointer to:          Pointer Arith.      (line    6)
47414* functions called via pointer on the RS/6000 and PowerPC: Function Attributes.
47415                                                             (line  761)
47416* functions in arbitrary sections:       Function Attributes.
47417                                                             (line    6)
47418* functions that are dynamically resolved: Function Attributes.
47419                                                             (line    6)
47420* functions that are passed arguments in registers on the 386: Function Attributes.
47421                                                             (line    6)
47422* functions that behave like malloc:     Function Attributes.
47423                                                             (line    6)
47424* functions that do not pop the argument stack on the 386: Function Attributes.
47425                                                             (line    6)
47426* functions that do pop the argument stack on the 386: Function Attributes.
47427                                                             (line  177)
47428* functions that have different compilation options on the 386: Function Attributes.
47429                                                             (line    6)
47430* functions that have different optimization options: Function Attributes.
47431                                                             (line    6)
47432* functions that have no side effects:   Function Attributes.
47433                                                             (line    6)
47434* functions that never return:           Function Attributes.
47435                                                             (line    6)
47436* functions that pop the argument stack on the 386: Function Attributes.
47437                                                             (line    6)
47438* functions that return more than once:  Function Attributes.
47439                                                             (line    6)
47440* functions which do not handle memory bank switching on 68HC11/68HC12: Function Attributes.
47441                                                             (line  878)
47442* functions which handle memory bank switching: Function Attributes.
47443                                                             (line  375)
47444* functions with non-null pointer arguments: Function Attributes.
47445                                                             (line    6)
47446* functions with printf, scanf, strftime or strfmon style arguments: Function Attributes.
47447                                                             (line    6)
47448* g in constraint:                       Simple Constraints. (line  120)
47449* G in constraint:                       Simple Constraints. (line   98)
47450* g++:                                   Invoking G++.       (line   14)
47451* G++:                                   G++ and GCC.        (line   30)
47452* gamma:                                 Other Builtins.     (line    6)
47453* gamma_r:                               Other Builtins.     (line    6)
47454* gammaf:                                Other Builtins.     (line    6)
47455* gammaf_r:                              Other Builtins.     (line    6)
47456* gammal:                                Other Builtins.     (line    6)
47457* gammal_r:                              Other Builtins.     (line    6)
47458* GCC:                                   G++ and GCC.        (line    6)
47459* GCC command options:                   Invoking GCC.       (line    6)
47460* GCC_EXEC_PREFIX:                       Environment Variables.
47461                                                             (line   52)
47462* gcc_struct:                            Type Attributes.    (line  319)
47463* gcc_struct attribute:                  Variable Attributes.
47464                                                             (line  407)
47465* gcov:                                  Debugging Options.  (line  366)
47466* gettext:                               Other Builtins.     (line    6)
47467* global offset table:                   Code Gen Options.   (line  184)
47468* global register after longjmp:         Global Reg Vars.    (line   66)
47469* global register variables:             Global Reg Vars.    (line    6)
47470* GNAT:                                  G++ and GCC.        (line   30)
47471* GNU C Compiler:                        G++ and GCC.        (line    6)
47472* GNU Compiler Collection:               G++ and GCC.        (line    6)
47473* gnu_inline function attribute:         Function Attributes.
47474                                                             (line   95)
47475* Go:                                    G++ and GCC.        (line    6)
47476* goto with computed label:              Labels as Values.   (line    6)
47477* gprof:                                 Debugging Options.  (line  296)
47478* grouping options:                      Invoking GCC.       (line   26)
47479* H in constraint:                       Simple Constraints. (line   98)
47480* half-precision floating point:         Half-Precision.     (line    6)
47481* hardware models and configurations, specifying: Submodel Options.
47482                                                             (line    6)
47483* hex floats:                            Hex Floats.         (line    6)
47484* HK fixed-suffix:                       Fixed-Point.        (line    6)
47485* hk fixed-suffix:                       Fixed-Point.        (line    6)
47486* hosted environment <1>:                C Dialect Options.  (line  218)
47487* hosted environment:                    Standards.          (line   13)
47488* hosted implementation:                 Standards.          (line   13)
47489* hot function attribute:                Function Attributes.
47490                                                             (line 1056)
47491* HPPA Options:                          HPPA Options.       (line    6)
47492* HR fixed-suffix:                       Fixed-Point.        (line    6)
47493* hr fixed-suffix:                       Fixed-Point.        (line    6)
47494* hypot:                                 Other Builtins.     (line    6)
47495* hypotf:                                Other Builtins.     (line    6)
47496* hypotl:                                Other Builtins.     (line    6)
47497* I in constraint:                       Simple Constraints. (line   81)
47498* i in constraint:                       Simple Constraints. (line   70)
47499* i386 and x86-64 Windows Options:       i386 and x86-64 Windows Options.
47500                                                             (line    6)
47501* i386 Options:                          i386 and x86-64 Options.
47502                                                             (line    6)
47503* IA-64 Options:                         IA-64 Options.      (line    6)
47504* IBM RS/6000 and PowerPC Options:       RS/6000 and PowerPC Options.
47505                                                             (line    6)
47506* identifier names, dollar signs in:     Dollar Signs.       (line    6)
47507* identifiers, names in assembler code:  Asm Labels.         (line    6)
47508* ifunc attribute:                       Function Attributes.
47509                                                             (line  648)
47510* ilogb:                                 Other Builtins.     (line    6)
47511* ilogbf:                                Other Builtins.     (line    6)
47512* ilogbl:                                Other Builtins.     (line    6)
47513* imaxabs:                               Other Builtins.     (line    6)
47514* implementation-defined behavior, C language: C Implementation.
47515                                                             (line    6)
47516* implementation-defined behavior, C++ language: C++ Implementation.
47517                                                             (line    6)
47518* implied #pragma implementation:        C++ Interface.      (line   46)
47519* incompatibilities of GCC:              Incompatibilities.  (line    6)
47520* increment operators:                   Bug Criteria.       (line   17)
47521* index:                                 Other Builtins.     (line    6)
47522* indirect calls on ARM:                 Function Attributes.
47523                                                             (line  751)
47524* indirect calls on MIPS:                Function Attributes.
47525                                                             (line  773)
47526* init_priority attribute:               C++ Attributes.     (line    9)
47527* initializations in expressions:        Compound Literals.  (line    6)
47528* initializers with labeled elements:    Designated Inits.   (line    6)
47529* initializers, non-constant:            Initializers.       (line    6)
47530* inline automatic for C++ member fns:   Inline.             (line   71)
47531* inline functions:                      Inline.             (line    6)
47532* inline functions, omission of:         Inline.             (line   51)
47533* inlining and C++ pragmas:              C++ Interface.      (line   66)
47534* installation trouble:                  Trouble.            (line    6)
47535* integrating function code:             Inline.             (line    6)
47536* Intel 386 Options:                     i386 and x86-64 Options.
47537                                                             (line    6)
47538* interface and implementation headers, C++: C++ Interface.  (line    6)
47539* intermediate C version, nonexistent:   G++ and GCC.        (line   35)
47540* interrupt handler functions:           Function Attributes.
47541                                                             (line  140)
47542* interrupt handler functions on the Blackfin, m68k, H8/300 and SH processors: Function Attributes.
47543                                                             (line  688)
47544* interrupt service routines on ARM:     Function Attributes.
47545                                                             (line  703)
47546* interrupt thread functions on fido:    Function Attributes.
47547                                                             (line  695)
47548* introduction:                          Top.                (line    6)
47549* invalid assembly code:                 Bug Criteria.       (line   12)
47550* invalid input:                         Bug Criteria.       (line   42)
47551* invoking g++:                          Invoking G++.       (line   22)
47552* isalnum:                               Other Builtins.     (line    6)
47553* isalpha:                               Other Builtins.     (line    6)
47554* isascii:                               Other Builtins.     (line    6)
47555* isblank:                               Other Builtins.     (line    6)
47556* iscntrl:                               Other Builtins.     (line    6)
47557* isdigit:                               Other Builtins.     (line    6)
47558* isgraph:                               Other Builtins.     (line    6)
47559* islower:                               Other Builtins.     (line    6)
47560* ISO 9899:                              Standards.          (line   13)
47561* ISO C:                                 Standards.          (line   13)
47562* ISO C standard:                        Standards.          (line   13)
47563* ISO C1X:                               Standards.          (line   13)
47564* ISO C90:                               Standards.          (line   13)
47565* ISO C94:                               Standards.          (line   13)
47566* ISO C95:                               Standards.          (line   13)
47567* ISO C99:                               Standards.          (line   13)
47568* ISO C9X:                               Standards.          (line   13)
47569* ISO support:                           C Dialect Options.  (line   10)
47570* ISO/IEC 9899:                          Standards.          (line   13)
47571* isprint:                               Other Builtins.     (line    6)
47572* ispunct:                               Other Builtins.     (line    6)
47573* isspace:                               Other Builtins.     (line    6)
47574* isupper:                               Other Builtins.     (line    6)
47575* iswalnum:                              Other Builtins.     (line    6)
47576* iswalpha:                              Other Builtins.     (line    6)
47577* iswblank:                              Other Builtins.     (line    6)
47578* iswcntrl:                              Other Builtins.     (line    6)
47579* iswdigit:                              Other Builtins.     (line    6)
47580* iswgraph:                              Other Builtins.     (line    6)
47581* iswlower:                              Other Builtins.     (line    6)
47582* iswprint:                              Other Builtins.     (line    6)
47583* iswpunct:                              Other Builtins.     (line    6)
47584* iswspace:                              Other Builtins.     (line    6)
47585* iswupper:                              Other Builtins.     (line    6)
47586* iswxdigit:                             Other Builtins.     (line    6)
47587* isxdigit:                              Other Builtins.     (line    6)
47588* j0:                                    Other Builtins.     (line    6)
47589* j0f:                                   Other Builtins.     (line    6)
47590* j0l:                                   Other Builtins.     (line    6)
47591* j1:                                    Other Builtins.     (line    6)
47592* j1f:                                   Other Builtins.     (line    6)
47593* j1l:                                   Other Builtins.     (line    6)
47594* Java:                                  G++ and GCC.        (line    6)
47595* java_interface attribute:              C++ Attributes.     (line   29)
47596* jn:                                    Other Builtins.     (line    6)
47597* jnf:                                   Other Builtins.     (line    6)
47598* jnl:                                   Other Builtins.     (line    6)
47599* K fixed-suffix:                        Fixed-Point.        (line    6)
47600* k fixed-suffix:                        Fixed-Point.        (line    6)
47601* keep_interrupts_masked attribute:      Function Attributes.
47602                                                             (line  624)
47603* keywords, alternate:                   Alternate Keywords. (line    6)
47604* known causes of trouble:               Trouble.            (line    6)
47605* l1_data variable attribute:            Variable Attributes.
47606                                                             (line  318)
47607* l1_data_A variable attribute:          Variable Attributes.
47608                                                             (line  318)
47609* l1_data_B variable attribute:          Variable Attributes.
47610                                                             (line  318)
47611* l1_text function attribute:            Function Attributes.
47612                                                             (line  712)
47613* l2 function attribute:                 Function Attributes.
47614                                                             (line  718)
47615* l2 variable attribute:                 Variable Attributes.
47616                                                             (line  326)
47617* labeled elements in initializers:      Designated Inits.   (line    6)
47618* labels as values:                      Labels as Values.   (line    6)
47619* labs:                                  Other Builtins.     (line    6)
47620* LANG:                                  Environment Variables.
47621                                                             (line   21)
47622* language dialect options:              C Dialect Options.  (line    6)
47623* LC_ALL:                                Environment Variables.
47624                                                             (line   21)
47625* LC_CTYPE:                              Environment Variables.
47626                                                             (line   21)
47627* LC_MESSAGES:                           Environment Variables.
47628                                                             (line   21)
47629* ldexp:                                 Other Builtins.     (line    6)
47630* ldexpf:                                Other Builtins.     (line    6)
47631* ldexpl:                                Other Builtins.     (line    6)
47632* leaf function attribute:               Function Attributes.
47633                                                             (line  724)
47634* length-zero arrays:                    Zero Length.        (line    6)
47635* lgamma:                                Other Builtins.     (line    6)
47636* lgamma_r:                              Other Builtins.     (line    6)
47637* lgammaf:                               Other Builtins.     (line    6)
47638* lgammaf_r:                             Other Builtins.     (line    6)
47639* lgammal:                               Other Builtins.     (line    6)
47640* lgammal_r:                             Other Builtins.     (line    6)
47641* Libraries:                             Link Options.       (line   24)
47642* LIBRARY_PATH:                          Environment Variables.
47643                                                             (line   94)
47644* link options:                          Link Options.       (line    6)
47645* linker script:                         Link Options.       (line  178)
47646* LK fixed-suffix:                       Fixed-Point.        (line    6)
47647* lk fixed-suffix:                       Fixed-Point.        (line    6)
47648* LL integer suffix:                     Long Long.          (line    6)
47649* llabs:                                 Other Builtins.     (line    6)
47650* LLK fixed-suffix:                      Fixed-Point.        (line    6)
47651* llk fixed-suffix:                      Fixed-Point.        (line    6)
47652* LLR fixed-suffix:                      Fixed-Point.        (line    6)
47653* llr fixed-suffix:                      Fixed-Point.        (line    6)
47654* llrint:                                Other Builtins.     (line    6)
47655* llrintf:                               Other Builtins.     (line    6)
47656* llrintl:                               Other Builtins.     (line    6)
47657* llround:                               Other Builtins.     (line    6)
47658* llroundf:                              Other Builtins.     (line    6)
47659* llroundl:                              Other Builtins.     (line    6)
47660* LM32 options:                          LM32 Options.       (line    6)
47661* load address instruction:              Simple Constraints. (line  154)
47662* local labels:                          Local Labels.       (line    6)
47663* local variables in macros:             Typeof.             (line   46)
47664* local variables, specifying registers: Local Reg Vars.     (line    6)
47665* locale:                                Environment Variables.
47666                                                             (line   21)
47667* locale definition:                     Environment Variables.
47668                                                             (line  103)
47669* log:                                   Other Builtins.     (line    6)
47670* log10:                                 Other Builtins.     (line    6)
47671* log10f:                                Other Builtins.     (line    6)
47672* log10l:                                Other Builtins.     (line    6)
47673* log1p:                                 Other Builtins.     (line    6)
47674* log1pf:                                Other Builtins.     (line    6)
47675* log1pl:                                Other Builtins.     (line    6)
47676* log2:                                  Other Builtins.     (line    6)
47677* log2f:                                 Other Builtins.     (line    6)
47678* log2l:                                 Other Builtins.     (line    6)
47679* logb:                                  Other Builtins.     (line    6)
47680* logbf:                                 Other Builtins.     (line    6)
47681* logbl:                                 Other Builtins.     (line    6)
47682* logf:                                  Other Builtins.     (line    6)
47683* logl:                                  Other Builtins.     (line    6)
47684* long long data types:                  Long Long.          (line    6)
47685* longjmp:                               Global Reg Vars.    (line   66)
47686* longjmp incompatibilities:             Incompatibilities.  (line   39)
47687* longjmp warnings:                      Warning Options.    (line  647)
47688* LR fixed-suffix:                       Fixed-Point.        (line    6)
47689* lr fixed-suffix:                       Fixed-Point.        (line    6)
47690* lrint:                                 Other Builtins.     (line    6)
47691* lrintf:                                Other Builtins.     (line    6)
47692* lrintl:                                Other Builtins.     (line    6)
47693* lround:                                Other Builtins.     (line    6)
47694* lroundf:                               Other Builtins.     (line    6)
47695* lroundl:                               Other Builtins.     (line    6)
47696* m in constraint:                       Simple Constraints. (line   17)
47697* M32C options:                          M32C Options.       (line    6)
47698* M32R/D options:                        M32R/D Options.     (line    6)
47699* M680x0 options:                        M680x0 Options.     (line    6)
47700* M68hc1x options:                       M68hc1x Options.    (line    6)
47701* machine dependent options:             Submodel Options.   (line    6)
47702* machine specific constraints:          Machine Constraints.
47703                                                             (line    6)
47704* macro with variable arguments:         Variadic Macros.    (line    6)
47705* macros containing asm:                 Extended Asm.       (line  242)
47706* macros, inline alternative:            Inline.             (line    6)
47707* macros, local labels:                  Local Labels.       (line    6)
47708* macros, local variables in:            Typeof.             (line   46)
47709* macros, statements in expressions:     Statement Exprs.    (line    6)
47710* macros, types of arguments:            Typeof.             (line    6)
47711* make:                                  Preprocessor Options.
47712                                                             (line  173)
47713* malloc:                                Other Builtins.     (line    6)
47714* malloc attribute:                      Function Attributes.
47715                                                             (line  783)
47716* matching constraint:                   Simple Constraints. (line  139)
47717* MCore options:                         MCore Options.      (line    6)
47718* member fns, automatically inline:      Inline.             (line   71)
47719* memchr:                                Other Builtins.     (line    6)
47720* memcmp:                                Other Builtins.     (line    6)
47721* memcpy:                                Other Builtins.     (line    6)
47722* memory references in constraints:      Simple Constraints. (line   17)
47723* mempcpy:                               Other Builtins.     (line    6)
47724* memset:                                Other Builtins.     (line    6)
47725* MeP options:                           MeP Options.        (line    6)
47726* Mercury:                               G++ and GCC.        (line   23)
47727* message formatting:                    Language Independent Options.
47728                                                             (line    6)
47729* messages, warning:                     Warning Options.    (line    6)
47730* messages, warning and error:           Warnings and Errors.
47731                                                             (line    6)
47732* MicroBlaze Options:                    MicroBlaze Options. (line    6)
47733* middle-operands, omitted:              Conditionals.       (line    6)
47734* MIPS options:                          MIPS Options.       (line    6)
47735* mips16 attribute:                      Function Attributes.
47736                                                             (line  793)
47737* misunderstandings in C++:              C++ Misunderstandings.
47738                                                             (line    6)
47739* mixed declarations and code:           Mixed Declarations. (line    6)
47740* mktemp, and constant strings:          Incompatibilities.  (line   13)
47741* MMIX Options:                          MMIX Options.       (line    6)
47742* MN10300 options:                       MN10300 Options.    (line    6)
47743* mode attribute:                        Variable Attributes.
47744                                                             (line  134)
47745* modf:                                  Other Builtins.     (line    6)
47746* modff:                                 Other Builtins.     (line    6)
47747* modfl:                                 Other Builtins.     (line    6)
47748* modifiers in constraints:              Modifiers.          (line    6)
47749* ms_abi attribute:                      Function Attributes.
47750                                                             (line  835)
47751* ms_hook_prologue attribute:            Function Attributes.
47752                                                             (line  859)
47753* ms_struct:                             Type Attributes.    (line  319)
47754* ms_struct attribute:                   Variable Attributes.
47755                                                             (line  407)
47756* mudflap:                               Optimize Options.   (line  394)
47757* multiple alternative constraints:      Multi-Alternative.  (line    6)
47758* multiprecision arithmetic:             Long Long.          (line    6)
47759* n in constraint:                       Simple Constraints. (line   75)
47760* named address spaces:                  Named Address Spaces.
47761                                                             (line    6)
47762* names used in assembler code:          Asm Labels.         (line    6)
47763* naming convention, implementation headers: C++ Interface.  (line   46)
47764* nearbyint:                             Other Builtins.     (line    6)
47765* nearbyintf:                            Other Builtins.     (line    6)
47766* nearbyintl:                            Other Builtins.     (line    6)
47767* nested functions:                      Nested Functions.   (line    6)
47768* newlines (escaped):                    Escaped Newlines.   (line    6)
47769* nextafter:                             Other Builtins.     (line    6)
47770* nextafterf:                            Other Builtins.     (line    6)
47771* nextafterl:                            Other Builtins.     (line    6)
47772* nexttoward:                            Other Builtins.     (line    6)
47773* nexttowardf:                           Other Builtins.     (line    6)
47774* nexttowardl:                           Other Builtins.     (line    6)
47775* NFC:                                   Warning Options.    (line 1209)
47776* NFKC:                                  Warning Options.    (line 1209)
47777* NMI handler functions on the Blackfin processor: Function Attributes.
47778                                                             (line  893)
47779* no_instrument_function function attribute: Function Attributes.
47780                                                             (line  899)
47781* no_split_stack function attribute:     Function Attributes.
47782                                                             (line  904)
47783* noclone function attribute:            Function Attributes.
47784                                                             (line  920)
47785* nocommon attribute:                    Variable Attributes.
47786                                                             (line  105)
47787* noinline function attribute:           Function Attributes.
47788                                                             (line  910)
47789* nomips16 attribute:                    Function Attributes.
47790                                                             (line  793)
47791* non-constant initializers:             Initializers.       (line    6)
47792* non-static inline function:            Inline.             (line   85)
47793* nonnull function attribute:            Function Attributes.
47794                                                             (line  926)
47795* noreturn function attribute:           Function Attributes.
47796                                                             (line  949)
47797* nothrow function attribute:            Function Attributes.
47798                                                             (line  991)
47799* o in constraint:                       Simple Constraints. (line   23)
47800* OBJC_INCLUDE_PATH:                     Environment Variables.
47801                                                             (line  129)
47802* Objective-C <1>:                       Standards.          (line  157)
47803* Objective-C:                           G++ and GCC.        (line    6)
47804* Objective-C and Objective-C++ options, command line: Objective-C and Objective-C++ Dialect Options.
47805                                                             (line    6)
47806* Objective-C++ <1>:                     Standards.          (line  157)
47807* Objective-C++:                         G++ and GCC.        (line    6)
47808* offsettable address:                   Simple Constraints. (line   23)
47809* old-style function definitions:        Function Prototypes.
47810                                                             (line    6)
47811* omitted middle-operands:               Conditionals.       (line    6)
47812* open coding:                           Inline.             (line    6)
47813* OpenMP parallel:                       C Dialect Options.  (line  235)
47814* operand constraints, asm:              Constraints.        (line    6)
47815* optimize function attribute:           Function Attributes.
47816                                                             (line  999)
47817* optimize options:                      Optimize Options.   (line    6)
47818* options to control diagnostics formatting: Language Independent Options.
47819                                                             (line    6)
47820* options to control warnings:           Warning Options.    (line    6)
47821* options, C++:                          C++ Dialect Options.
47822                                                             (line    6)
47823* options, code generation:              Code Gen Options.   (line    6)
47824* options, debugging:                    Debugging Options.  (line    6)
47825* options, dialect:                      C Dialect Options.  (line    6)
47826* options, directory search:             Directory Options.  (line    6)
47827* options, GCC command:                  Invoking GCC.       (line    6)
47828* options, grouping:                     Invoking GCC.       (line   26)
47829* options, linking:                      Link Options.       (line    6)
47830* options, Objective-C and Objective-C++: Objective-C and Objective-C++ Dialect Options.
47831                                                             (line    6)
47832* options, optimization:                 Optimize Options.   (line    6)
47833* options, order:                        Invoking GCC.       (line   30)
47834* options, preprocessor:                 Preprocessor Options.
47835                                                             (line    6)
47836* order of evaluation, side effects:     Non-bugs.           (line  196)
47837* order of options:                      Invoking GCC.       (line   30)
47838* other register constraints:            Simple Constraints. (line  163)
47839* output file option:                    Overall Options.    (line  191)
47840* overloaded virtual function, warning:  C++ Dialect Options.
47841                                                             (line  538)
47842* p in constraint:                       Simple Constraints. (line  154)
47843* packed attribute:                      Variable Attributes.
47844                                                             (line  145)
47845* parameter forward declaration:         Variable Length.    (line   59)
47846* Pascal:                                G++ and GCC.        (line   23)
47847* pcs function attribute:                Function Attributes.
47848                                                             (line 1016)
47849* PDP-11 Options:                        PDP-11 Options.     (line    6)
47850* PIC:                                   Code Gen Options.   (line  184)
47851* picoChip options:                      picoChip Options.   (line    6)
47852* pmf:                                   Bound member functions.
47853                                                             (line    6)
47854* pointer arguments:                     Function Attributes.
47855                                                             (line  188)
47856* pointer to member function:            Bound member functions.
47857                                                             (line    6)
47858* portions of temporary objects, pointers to: Temporaries.   (line    6)
47859* pow:                                   Other Builtins.     (line    6)
47860* pow10:                                 Other Builtins.     (line    6)
47861* pow10f:                                Other Builtins.     (line    6)
47862* pow10l:                                Other Builtins.     (line    6)
47863* PowerPC options:                       PowerPC Options.    (line    6)
47864* powf:                                  Other Builtins.     (line    6)
47865* powl:                                  Other Builtins.     (line    6)
47866* pragma GCC optimize:                   Function Specific Option Pragmas.
47867                                                             (line   21)
47868* pragma GCC pop_options:                Function Specific Option Pragmas.
47869                                                             (line   34)
47870* pragma GCC push_options:               Function Specific Option Pragmas.
47871                                                             (line   34)
47872* pragma GCC reset_options:              Function Specific Option Pragmas.
47873                                                             (line   44)
47874* pragma GCC target:                     Function Specific Option Pragmas.
47875                                                             (line    7)
47876* pragma, address:                       M32C Pragmas.       (line   15)
47877* pragma, align:                         Solaris Pragmas.    (line   11)
47878* pragma, call:                          MeP Pragmas.        (line   48)
47879* pragma, coprocessor available:         MeP Pragmas.        (line   13)
47880* pragma, coprocessor call_saved:        MeP Pragmas.        (line   20)
47881* pragma, coprocessor subclass:          MeP Pragmas.        (line   28)
47882* pragma, custom io_volatile:            MeP Pragmas.        (line    7)
47883* pragma, diagnostic:                    Diagnostic Pragmas. (line   14)
47884* pragma, disinterrupt:                  MeP Pragmas.        (line   38)
47885* pragma, extern_prefix:                 Symbol-Renaming Pragmas.
47886                                                             (line   20)
47887* pragma, fini:                          Solaris Pragmas.    (line   19)
47888* pragma, init:                          Solaris Pragmas.    (line   24)
47889* pragma, long_calls:                    ARM Pragmas.        (line   11)
47890* pragma, long_calls_off:                ARM Pragmas.        (line   17)
47891* pragma, longcall:                      RS/6000 and PowerPC Pragmas.
47892                                                             (line   14)
47893* pragma, mark:                          Darwin Pragmas.     (line   11)
47894* pragma, memregs:                       M32C Pragmas.       (line    7)
47895* pragma, no_long_calls:                 ARM Pragmas.        (line   14)
47896* pragma, options align:                 Darwin Pragmas.     (line   14)
47897* pragma, pop_macro:                     Push/Pop Macro Pragmas.
47898                                                             (line   15)
47899* pragma, push_macro:                    Push/Pop Macro Pragmas.
47900                                                             (line   11)
47901* pragma, reason for not using:          Function Attributes.
47902                                                             (line 1738)
47903* pragma, redefine_extname:              Symbol-Renaming Pragmas.
47904                                                             (line   14)
47905* pragma, segment:                       Darwin Pragmas.     (line   21)
47906* pragma, unused:                        Darwin Pragmas.     (line   24)
47907* pragma, visibility:                    Visibility Pragmas. (line    8)
47908* pragma, weak:                          Weak Pragmas.       (line   10)
47909* pragmas:                               Pragmas.            (line    6)
47910* pragmas in C++, effect on inlining:    C++ Interface.      (line   66)
47911* pragmas, interface and implementation: C++ Interface.      (line    6)
47912* pragmas, warning of unknown:           Warning Options.    (line  664)
47913* precompiled headers:                   Precompiled Headers.
47914                                                             (line    6)
47915* preprocessing numbers:                 Incompatibilities.  (line  173)
47916* preprocessing tokens:                  Incompatibilities.  (line  173)
47917* preprocessor options:                  Preprocessor Options.
47918                                                             (line    6)
47919* printf:                                Other Builtins.     (line    6)
47920* printf_unlocked:                       Other Builtins.     (line    6)
47921* prof:                                  Debugging Options.  (line  290)
47922* progmem variable attribute:            Variable Attributes.
47923                                                             (line  561)
47924* promotion of formal parameters:        Function Prototypes.
47925                                                             (line    6)
47926* pure function attribute:               Function Attributes.
47927                                                             (line 1034)
47928* push address instruction:              Simple Constraints. (line  154)
47929* putchar:                               Other Builtins.     (line    6)
47930* puts:                                  Other Builtins.     (line    6)
47931* Q floating point suffix:               Floating Types.     (line    6)
47932* q floating point suffix:               Floating Types.     (line    6)
47933* qsort, and global register variables:  Global Reg Vars.    (line   42)
47934* question mark:                         Multi-Alternative.  (line   27)
47935* R fixed-suffix:                        Fixed-Point.        (line    6)
47936* r fixed-suffix:                        Fixed-Point.        (line    6)
47937* r in constraint:                       Simple Constraints. (line   66)
47938* ranges in case statements:             Case Ranges.        (line    6)
47939* read-only strings:                     Incompatibilities.  (line    9)
47940* register variable after longjmp:       Global Reg Vars.    (line   66)
47941* registers:                             Extended Asm.       (line    6)
47942* registers for local variables:         Local Reg Vars.     (line    6)
47943* registers in constraints:              Simple Constraints. (line   66)
47944* registers, global allocation:          Explicit Reg Vars.  (line    6)
47945* registers, global variables in:        Global Reg Vars.    (line    6)
47946* regparm attribute:                     Function Attributes.
47947                                                             (line 1087)
47948* relocation truncated to fit (ColdFire): M680x0 Options.    (line  329)
47949* relocation truncated to fit (MIPS):    MIPS Options.       (line  201)
47950* remainder:                             Other Builtins.     (line    6)
47951* remainderf:                            Other Builtins.     (line    6)
47952* remainderl:                            Other Builtins.     (line    6)
47953* remquo:                                Other Builtins.     (line    6)
47954* remquof:                               Other Builtins.     (line    6)
47955* remquol:                               Other Builtins.     (line    6)
47956* reordering, warning:                   C++ Dialect Options.
47957                                                             (line  463)
47958* reporting bugs:                        Bugs.               (line    6)
47959* resbank attribute:                     Function Attributes.
47960                                                             (line 1119)
47961* rest argument (in macro):              Variadic Macros.    (line    6)
47962* restricted pointers:                   Restricted Pointers.
47963                                                             (line    6)
47964* restricted references:                 Restricted Pointers.
47965                                                             (line    6)
47966* restricted this pointer:               Restricted Pointers.
47967                                                             (line    6)
47968* returns_twice attribute:               Function Attributes.
47969                                                             (line 1133)
47970* rindex:                                Other Builtins.     (line    6)
47971* rint:                                  Other Builtins.     (line    6)
47972* rintf:                                 Other Builtins.     (line    6)
47973* rintl:                                 Other Builtins.     (line    6)
47974* round:                                 Other Builtins.     (line    6)
47975* roundf:                                Other Builtins.     (line    6)
47976* roundl:                                Other Builtins.     (line    6)
47977* RS/6000 and PowerPC Options:           RS/6000 and PowerPC Options.
47978                                                             (line    6)
47979* RTTI:                                  Vague Linkage.      (line   43)
47980* run-time options:                      Code Gen Options.   (line    6)
47981* RX Options:                            RX Options.         (line    6)
47982* s in constraint:                       Simple Constraints. (line  102)
47983* S/390 and zSeries Options:             S/390 and zSeries Options.
47984                                                             (line    6)
47985* save all registers on the Blackfin, H8/300, H8/300H, and H8S: Function Attributes.
47986                                                             (line 1142)
47987* save volatile registers on the MicroBlaze: Function Attributes.
47988                                                             (line 1147)
47989* scalb:                                 Other Builtins.     (line    6)
47990* scalbf:                                Other Builtins.     (line    6)
47991* scalbl:                                Other Builtins.     (line    6)
47992* scalbln:                               Other Builtins.     (line    6)
47993* scalblnf:                              Other Builtins.     (line    6)
47994* scalbn:                                Other Builtins.     (line    6)
47995* scalbnf:                               Other Builtins.     (line    6)
47996* scanf, and constant strings:           Incompatibilities.  (line   17)
47997* scanfnl:                               Other Builtins.     (line    6)
47998* scope of a variable length array:      Variable Length.    (line   22)
47999* scope of declaration:                  Disappointments.    (line   21)
48000* scope of external declarations:        Incompatibilities.  (line   80)
48001* Score Options:                         Score Options.      (line    6)
48002* search path:                           Directory Options.  (line    6)
48003* section function attribute:            Function Attributes.
48004                                                             (line 1155)
48005* section variable attribute:            Variable Attributes.
48006                                                             (line  166)
48007* sentinel function attribute:           Function Attributes.
48008                                                             (line 1171)
48009* setjmp:                                Global Reg Vars.    (line   66)
48010* setjmp incompatibilities:              Incompatibilities.  (line   39)
48011* shared strings:                        Incompatibilities.  (line    9)
48012* shared variable attribute:             Variable Attributes.
48013                                                             (line  211)
48014* side effect in ?::                     Conditionals.       (line   20)
48015* side effects, macro argument:          Statement Exprs.    (line   35)
48016* side effects, order of evaluation:     Non-bugs.           (line  196)
48017* signal handler functions on the AVR processors: Function Attributes.
48018                                                             (line 1202)
48019* signbit:                               Other Builtins.     (line    6)
48020* signbitd128:                           Other Builtins.     (line    6)
48021* signbitd32:                            Other Builtins.     (line    6)
48022* signbitd64:                            Other Builtins.     (line    6)
48023* signbitf:                              Other Builtins.     (line    6)
48024* signbitl:                              Other Builtins.     (line    6)
48025* signed and unsigned values, comparison warning: Warning Options.
48026                                                             (line 1081)
48027* significand:                           Other Builtins.     (line    6)
48028* significandf:                          Other Builtins.     (line    6)
48029* significandl:                          Other Builtins.     (line    6)
48030* simple constraints:                    Simple Constraints. (line    6)
48031* sin:                                   Other Builtins.     (line    6)
48032* sincos:                                Other Builtins.     (line    6)
48033* sincosf:                               Other Builtins.     (line    6)
48034* sincosl:                               Other Builtins.     (line    6)
48035* sinf:                                  Other Builtins.     (line    6)
48036* sinh:                                  Other Builtins.     (line    6)
48037* sinhf:                                 Other Builtins.     (line    6)
48038* sinhl:                                 Other Builtins.     (line    6)
48039* sinl:                                  Other Builtins.     (line    6)
48040* sizeof:                                Typeof.             (line    6)
48041* smaller data references:               M32R/D Options.     (line   57)
48042* smaller data references (PowerPC):     RS/6000 and PowerPC Options.
48043                                                             (line  701)
48044* snprintf:                              Other Builtins.     (line    6)
48045* Solaris 2 options:                     Solaris 2 Options.  (line    6)
48046* SPARC options:                         SPARC Options.      (line    6)
48047* Spec Files:                            Spec Files.         (line    6)
48048* specified registers:                   Explicit Reg Vars.  (line    6)
48049* specifying compiler version and target machine: Target Options.
48050                                                             (line    6)
48051* specifying hardware config:            Submodel Options.   (line    6)
48052* specifying machine version:            Target Options.     (line    6)
48053* specifying registers for local variables: Local Reg Vars.  (line    6)
48054* speed of compilation:                  Precompiled Headers.
48055                                                             (line    6)
48056* sprintf:                               Other Builtins.     (line    6)
48057* SPU options:                           SPU Options.        (line    6)
48058* sqrt:                                  Other Builtins.     (line    6)
48059* sqrtf:                                 Other Builtins.     (line    6)
48060* sqrtl:                                 Other Builtins.     (line    6)
48061* sscanf:                                Other Builtins.     (line    6)
48062* sscanf, and constant strings:          Incompatibilities.  (line   17)
48063* sseregparm attribute:                  Function Attributes.
48064                                                             (line 1104)
48065* statements inside expressions:         Statement Exprs.    (line    6)
48066* static data in C++, declaring and defining: Static Definitions.
48067                                                             (line    6)
48068* stpcpy:                                Other Builtins.     (line    6)
48069* stpncpy:                               Other Builtins.     (line    6)
48070* strcasecmp:                            Other Builtins.     (line    6)
48071* strcat:                                Other Builtins.     (line    6)
48072* strchr:                                Other Builtins.     (line    6)
48073* strcmp:                                Other Builtins.     (line    6)
48074* strcpy:                                Other Builtins.     (line    6)
48075* strcspn:                               Other Builtins.     (line    6)
48076* strdup:                                Other Builtins.     (line    6)
48077* strfmon:                               Other Builtins.     (line    6)
48078* strftime:                              Other Builtins.     (line    6)
48079* string constants:                      Incompatibilities.  (line    9)
48080* strlen:                                Other Builtins.     (line    6)
48081* strncasecmp:                           Other Builtins.     (line    6)
48082* strncat:                               Other Builtins.     (line    6)
48083* strncmp:                               Other Builtins.     (line    6)
48084* strncpy:                               Other Builtins.     (line    6)
48085* strndup:                               Other Builtins.     (line    6)
48086* strpbrk:                               Other Builtins.     (line    6)
48087* strrchr:                               Other Builtins.     (line    6)
48088* strspn:                                Other Builtins.     (line    6)
48089* strstr:                                Other Builtins.     (line    6)
48090* struct:                                Unnamed Fields.     (line    6)
48091* structures:                            Incompatibilities.  (line  146)
48092* structures, constructor expression:    Compound Literals.  (line    6)
48093* submodel options:                      Submodel Options.   (line    6)
48094* subscripting:                          Subscripting.       (line    6)
48095* subscripting and function values:      Subscripting.       (line    6)
48096* suffixes for C++ source:               Invoking G++.       (line    6)
48097* SUNPRO_DEPENDENCIES:                   Environment Variables.
48098                                                             (line  169)
48099* suppressing warnings:                  Warning Options.    (line    6)
48100* surprises in C++:                      C++ Misunderstandings.
48101                                                             (line    6)
48102* syntax checking:                       Warning Options.    (line   13)
48103* syscall_linkage attribute:             Function Attributes.
48104                                                             (line 1224)
48105* system headers, warnings from:         Warning Options.    (line  796)
48106* sysv_abi attribute:                    Function Attributes.
48107                                                             (line  835)
48108* tan:                                   Other Builtins.     (line    6)
48109* tanf:                                  Other Builtins.     (line    6)
48110* tanh:                                  Other Builtins.     (line    6)
48111* tanhf:                                 Other Builtins.     (line    6)
48112* tanhl:                                 Other Builtins.     (line    6)
48113* tanl:                                  Other Builtins.     (line    6)
48114* target function attribute:             Function Attributes.
48115                                                             (line 1231)
48116* target machine, specifying:            Target Options.     (line    6)
48117* target options:                        Target Options.     (line    6)
48118* target("abm") attribute:               Function Attributes.
48119                                                             (line 1258)
48120* target("aes") attribute:               Function Attributes.
48121                                                             (line 1263)
48122* target("align-stringops") attribute:   Function Attributes.
48123                                                             (line 1353)
48124* target("altivec") attribute:           Function Attributes.
48125                                                             (line 1379)
48126* target("arch=ARCH") attribute:         Function Attributes.
48127                                                             (line 1362)
48128* target("avoid-indexed-addresses") attribute: Function Attributes.
48129                                                             (line 1499)
48130* target("cld") attribute:               Function Attributes.
48131                                                             (line 1324)
48132* target("cmpb") attribute:              Function Attributes.
48133                                                             (line 1385)
48134* target("cpu=CPU") attribute:           Function Attributes.
48135                                                             (line 1514)
48136* target("dlmzb") attribute:             Function Attributes.
48137                                                             (line 1391)
48138* target("fancy-math-387") attribute:    Function Attributes.
48139                                                             (line 1328)
48140* target("fma4") attribute:              Function Attributes.
48141                                                             (line 1308)
48142* target("fpmath=FPMATH") attribute:     Function Attributes.
48143                                                             (line 1370)
48144* target("fprnd") attribute:             Function Attributes.
48145                                                             (line 1398)
48146* target("friz") attribute:              Function Attributes.
48147                                                             (line 1490)
48148* target("fused-madd") attribute:        Function Attributes.
48149                                                             (line 1333)
48150* target("hard-dfp") attribute:          Function Attributes.
48151                                                             (line 1404)
48152* target("ieee-fp") attribute:           Function Attributes.
48153                                                             (line 1338)
48154* target("inline-all-stringops") attribute: Function Attributes.
48155                                                             (line 1343)
48156* target("inline-stringops-dynamically") attribute: Function Attributes.
48157                                                             (line 1347)
48158* target("isel") attribute:              Function Attributes.
48159                                                             (line 1409)
48160* target("longcall") attribute:          Function Attributes.
48161                                                             (line 1509)
48162* target("lwp") attribute:               Function Attributes.
48163                                                             (line 1316)
48164* target("mfcrf") attribute:             Function Attributes.
48165                                                             (line 1413)
48166* target("mfpgpr") attribute:            Function Attributes.
48167                                                             (line 1420)
48168* target("mmx") attribute:               Function Attributes.
48169                                                             (line 1267)
48170* target("mulhw") attribute:             Function Attributes.
48171                                                             (line 1427)
48172* target("multiple") attribute:          Function Attributes.
48173                                                             (line 1434)
48174* target("paired") attribute:            Function Attributes.
48175                                                             (line 1504)
48176* target("pclmul") attribute:            Function Attributes.
48177                                                             (line 1271)
48178* target("popcnt") attribute:            Function Attributes.
48179                                                             (line 1275)
48180* target("popcntb") attribute:           Function Attributes.
48181                                                             (line 1445)
48182* target("popcntd") attribute:           Function Attributes.
48183                                                             (line 1452)
48184* target("powerpc-gfxopt") attribute:    Function Attributes.
48185                                                             (line 1458)
48186* target("powerpc-gpopt") attribute:     Function Attributes.
48187                                                             (line 1464)
48188* target("recip") attribute:             Function Attributes.
48189                                                             (line 1357)
48190* target("recip-precision") attribute:   Function Attributes.
48191                                                             (line 1470)
48192* target("sse") attribute:               Function Attributes.
48193                                                             (line 1279)
48194* target("sse2") attribute:              Function Attributes.
48195                                                             (line 1283)
48196* target("sse3") attribute:              Function Attributes.
48197                                                             (line 1287)
48198* target("sse4") attribute:              Function Attributes.
48199                                                             (line 1291)
48200* target("sse4.1") attribute:            Function Attributes.
48201                                                             (line 1296)
48202* target("sse4.2") attribute:            Function Attributes.
48203                                                             (line 1300)
48204* target("sse4a") attribute:             Function Attributes.
48205                                                             (line 1304)
48206* target("ssse3") attribute:             Function Attributes.
48207                                                             (line 1320)
48208* target("string") attribute:            Function Attributes.
48209                                                             (line 1476)
48210* target("tune=TUNE") attribute:         Function Attributes.
48211                                                             (line 1366)
48212* target("update") attribute:            Function Attributes.
48213                                                             (line 1439)
48214* target("vsx") attribute:               Function Attributes.
48215                                                             (line 1482)
48216* target("xop") attribute:               Function Attributes.
48217                                                             (line 1312)
48218* TC1:                                   Standards.          (line   13)
48219* TC2:                                   Standards.          (line   13)
48220* TC3:                                   Standards.          (line   13)
48221* Technical Corrigenda:                  Standards.          (line   13)
48222* Technical Corrigendum 1:               Standards.          (line   13)
48223* Technical Corrigendum 2:               Standards.          (line   13)
48224* Technical Corrigendum 3:               Standards.          (line   13)
48225* template instantiation:                Template Instantiation.
48226                                                             (line    6)
48227* temporaries, lifetime of:              Temporaries.        (line    6)
48228* tgamma:                                Other Builtins.     (line    6)
48229* tgammaf:                               Other Builtins.     (line    6)
48230* tgammal:                               Other Builtins.     (line    6)
48231* Thread-Local Storage:                  Thread-Local.       (line    6)
48232* thunks:                                Nested Functions.   (line    6)
48233* tiny data section on the H8/300H and H8S: Function Attributes.
48234                                                             (line 1543)
48235* TLS:                                   Thread-Local.       (line    6)
48236* tls_model attribute:                   Variable Attributes.
48237                                                             (line  235)
48238* TMPDIR:                                Environment Variables.
48239                                                             (line   45)
48240* toascii:                               Other Builtins.     (line    6)
48241* tolower:                               Other Builtins.     (line    6)
48242* toupper:                               Other Builtins.     (line    6)
48243* towlower:                              Other Builtins.     (line    6)
48244* towupper:                              Other Builtins.     (line    6)
48245* traditional C language:                C Dialect Options.  (line  282)
48246* trunc:                                 Other Builtins.     (line    6)
48247* truncf:                                Other Builtins.     (line    6)
48248* truncl:                                Other Builtins.     (line    6)
48249* two-stage name lookup:                 Name lookup.        (line    6)
48250* type alignment:                        Alignment.          (line    6)
48251* type attributes:                       Type Attributes.    (line    6)
48252* type_info:                             Vague Linkage.      (line   43)
48253* typedef names as function parameters:  Incompatibilities.  (line   97)
48254* typeof:                                Typeof.             (line    6)
48255* UHK fixed-suffix:                      Fixed-Point.        (line    6)
48256* uhk fixed-suffix:                      Fixed-Point.        (line    6)
48257* UHR fixed-suffix:                      Fixed-Point.        (line    6)
48258* uhr fixed-suffix:                      Fixed-Point.        (line    6)
48259* UK fixed-suffix:                       Fixed-Point.        (line    6)
48260* uk fixed-suffix:                       Fixed-Point.        (line    6)
48261* ULK fixed-suffix:                      Fixed-Point.        (line    6)
48262* ulk fixed-suffix:                      Fixed-Point.        (line    6)
48263* ULL integer suffix:                    Long Long.          (line    6)
48264* ULLK fixed-suffix:                     Fixed-Point.        (line    6)
48265* ullk fixed-suffix:                     Fixed-Point.        (line    6)
48266* ULLR fixed-suffix:                     Fixed-Point.        (line    6)
48267* ullr fixed-suffix:                     Fixed-Point.        (line    6)
48268* ULR fixed-suffix:                      Fixed-Point.        (line    6)
48269* ulr fixed-suffix:                      Fixed-Point.        (line    6)
48270* undefined behavior:                    Bug Criteria.       (line   17)
48271* undefined function value:              Bug Criteria.       (line   17)
48272* underscores in variables in macros:    Typeof.             (line   46)
48273* union:                                 Unnamed Fields.     (line    6)
48274* union, casting to a:                   Cast to Union.      (line    6)
48275* unions:                                Incompatibilities.  (line  146)
48276* unknown pragmas, warning:              Warning Options.    (line  664)
48277* unresolved references and -nodefaultlibs: Link Options.    (line   82)
48278* unresolved references and -nostdlib:   Link Options.       (line   82)
48279* unused attribute.:                     Function Attributes.
48280                                                             (line 1555)
48281* UR fixed-suffix:                       Fixed-Point.        (line    6)
48282* ur fixed-suffix:                       Fixed-Point.        (line    6)
48283* use_debug_exception_return attribute:  Function Attributes.
48284                                                             (line  629)
48285* use_shadow_register_set attribute:     Function Attributes.
48286                                                             (line  620)
48287* used attribute.:                       Function Attributes.
48288                                                             (line 1560)
48289* User stack pointer in interrupts on the Blackfin: Function Attributes.
48290                                                             (line  707)
48291* V in constraint:                       Simple Constraints. (line   43)
48292* V850 Options:                          V850 Options.       (line    6)
48293* vague linkage:                         Vague Linkage.      (line    6)
48294* value after longjmp:                   Global Reg Vars.    (line   66)
48295* variable addressability on the IA-64:  Function Attributes.
48296                                                             (line  807)
48297* variable addressability on the M32R/D: Variable Attributes.
48298                                                             (line  336)
48299* variable alignment:                    Alignment.          (line    6)
48300* variable attributes:                   Variable Attributes.
48301                                                             (line    6)
48302* variable number of arguments:          Variadic Macros.    (line    6)
48303* variable-length array scope:           Variable Length.    (line   22)
48304* variable-length arrays:                Variable Length.    (line    6)
48305* variables in specified registers:      Explicit Reg Vars.  (line    6)
48306* variables, local, in macros:           Typeof.             (line   46)
48307* variadic macros:                       Variadic Macros.    (line    6)
48308* VAX options:                           VAX Options.        (line    6)
48309* version_id attribute:                  Function Attributes.
48310                                                             (line 1566)
48311* vfprintf:                              Other Builtins.     (line    6)
48312* vfscanf:                               Other Builtins.     (line    6)
48313* visibility attribute:                  Function Attributes.
48314                                                             (line 1576)
48315* VLAs:                                  Variable Length.    (line    6)
48316* vliw attribute:                        Function Attributes.
48317                                                             (line 1670)
48318* void pointers, arithmetic:             Pointer Arith.      (line    6)
48319* void, size of pointer to:              Pointer Arith.      (line    6)
48320* volatile access <1>:                   C++ Volatiles.      (line    6)
48321* volatile access:                       Volatiles.          (line    6)
48322* volatile applied to function:          Function Attributes.
48323                                                             (line    6)
48324* volatile read <1>:                     C++ Volatiles.      (line    6)
48325* volatile read:                         Volatiles.          (line    6)
48326* volatile write <1>:                    C++ Volatiles.      (line    6)
48327* volatile write:                        Volatiles.          (line    6)
48328* vprintf:                               Other Builtins.     (line    6)
48329* vscanf:                                Other Builtins.     (line    6)
48330* vsnprintf:                             Other Builtins.     (line    6)
48331* vsprintf:                              Other Builtins.     (line    6)
48332* vsscanf:                               Other Builtins.     (line    6)
48333* vtable:                                Vague Linkage.      (line   28)
48334* VxWorks Options:                       VxWorks Options.    (line    6)
48335* W floating point suffix:               Floating Types.     (line    6)
48336* w floating point suffix:               Floating Types.     (line    6)
48337* warn_unused_result attribute:          Function Attributes.
48338                                                             (line 1676)
48339* warning for comparison of signed and unsigned values: Warning Options.
48340                                                             (line 1081)
48341* warning for overloaded virtual function: C++ Dialect Options.
48342                                                             (line  538)
48343* warning for reordering of member initializers: C++ Dialect Options.
48344                                                             (line  463)
48345* warning for unknown pragmas:           Warning Options.    (line  664)
48346* warning function attribute:            Function Attributes.
48347                                                             (line  165)
48348* warning messages:                      Warning Options.    (line    6)
48349* warnings from system headers:          Warning Options.    (line  796)
48350* warnings vs errors:                    Warnings and Errors.
48351                                                             (line    6)
48352* weak attribute:                        Function Attributes.
48353                                                             (line 1693)
48354* weakref attribute:                     Function Attributes.
48355                                                             (line 1702)
48356* whitespace:                            Incompatibilities.  (line  112)
48357* X in constraint:                       Simple Constraints. (line  124)
48358* X3.159-1989:                           Standards.          (line   13)
48359* x86-64 options:                        x86-64 Options.     (line    6)
48360* x86-64 Options:                        i386 and x86-64 Options.
48361                                                             (line    6)
48362* Xstormy16 Options:                     Xstormy16 Options.  (line    6)
48363* Xtensa Options:                        Xtensa Options.     (line    6)
48364* y0:                                    Other Builtins.     (line    6)
48365* y0f:                                   Other Builtins.     (line    6)
48366* y0l:                                   Other Builtins.     (line    6)
48367* y1:                                    Other Builtins.     (line    6)
48368* y1f:                                   Other Builtins.     (line    6)
48369* y1l:                                   Other Builtins.     (line    6)
48370* yn:                                    Other Builtins.     (line    6)
48371* ynf:                                   Other Builtins.     (line    6)
48372* ynl:                                   Other Builtins.     (line    6)
48373* zero-length arrays:                    Zero Length.        (line    6)
48374* zero-size structures:                  Empty Structures.   (line    6)
48375* zSeries options:                       zSeries Options.    (line    6)
48376
48377
48378
48379Tag Table:
48380Node: Top2122
48381Node: G++ and GCC3919
48382Node: Standards5988
48383Node: Invoking GCC18155
48384Node: Option Summary21906
48385Node: Overall Options58727
48386Node: Invoking G++73063
48387Node: C Dialect Options74586
48388Node: C++ Dialect Options89666
48389Node: Objective-C and Objective-C++ Dialect Options114666
48390Node: Language Independent Options125205
48391Node: Warning Options128129
48392Node: Debugging Options192125
48393Node: Optimize Options239905
48394Ref: Type-punning296272
48395Node: Preprocessor Options370342
48396Ref: Wtrigraphs374440
48397Ref: dashMF379188
48398Ref: fdollars-in-identifiers390032
48399Node: Assembler Options398593
48400Node: Link Options399298
48401Ref: Link Options-Footnote-1409656
48402Node: Directory Options409990
48403Node: Spec Files416279
48404Node: Target Options437875
48405Node: Submodel Options438274
48406Node: ARC Options439893
48407Node: ARM Options441083
48408Node: AVR Options455448
48409Node: Blackfin Options457303
48410Node: CRIS Options465251
48411Node: CRX Options468992
48412Node: Darwin Options469417
48413Node: DEC Alpha Options476909
48414Node: DEC Alpha/VMS Options488825
48415Node: FR30 Options489399
48416Node: FRV Options489974
48417Node: GNU/Linux Options496691
48418Node: H8/300 Options497952
48419Node: HPPA Options499019
48420Node: i386 and x86-64 Options508519
48421Node: i386 and x86-64 Windows Options539363
48422Node: IA-64 Options541911
48423Node: IA-64/VMS Options549929
48424Node: LM32 Options550484
48425Node: M32C Options551013
48426Node: M32R/D Options552303
48427Node: M680x0 Options555890
48428Node: M68hc1x Options569965
48429Node: MCore Options571534
48430Node: MeP Options573041
48431Node: MicroBlaze Options577014
48432Node: MIPS Options579585
48433Node: MMIX Options607947
48434Node: MN10300 Options610429
48435Node: PDP-11 Options612637
48436Node: picoChip Options614331
48437Node: PowerPC Options616530
48438Node: RS/6000 and PowerPC Options616766
48439Node: RX Options653369
48440Node: S/390 and zSeries Options658941
48441Node: Score Options666872
48442Node: SH Options667700
48443Node: Solaris 2 Options678839
48444Node: SPARC Options680359
48445Node: SPU Options690000
48446Node: System V Options695004
48447Node: V850 Options695827
48448Node: VAX Options699406
48449Node: VxWorks Options699954
48450Node: x86-64 Options701109
48451Node: Xstormy16 Options701327
48452Node: Xtensa Options701616
48453Node: zSeries Options705950
48454Node: Code Gen Options706146
48455Node: Environment Variables733626
48456Node: Precompiled Headers741522
48457Node: C Implementation747721
48458Node: Translation implementation749384
48459Node: Environment implementation749958
48460Node: Identifiers implementation750508
48461Node: Characters implementation751562
48462Node: Integers implementation754368
48463Node: Floating point implementation756193
48464Node: Arrays and pointers implementation759122
48465Ref: Arrays and pointers implementation-Footnote-1760557
48466Node: Hints implementation760681
48467Node: Structures unions enumerations and bit-fields implementation762147
48468Node: Qualifiers implementation764133
48469Node: Declarators implementation765905
48470Node: Statements implementation766247
48471Node: Preprocessing directives implementation766574
48472Node: Library functions implementation768679
48473Node: Architecture implementation769319
48474Node: Locale-specific behavior implementation770022
48475Node: C++ Implementation770327
48476Node: Conditionally-supported behavior771607
48477Node: Exception handling772117
48478Node: C Extensions772526
48479Node: Statement Exprs777361
48480Node: Local Labels781874
48481Node: Labels as Values784853
48482Ref: Labels as Values-Footnote-1787262
48483Node: Nested Functions787445
48484Node: Constructing Calls791378
48485Node: Typeof796109
48486Node: Conditionals799424
48487Node: __int128800315
48488Node: Long Long800835
48489Node: Complex802337
48490Node: Floating Types804908
48491Node: Half-Precision806046
48492Node: Decimal Float808228
48493Node: Hex Floats810095
48494Node: Fixed-Point811136
48495Node: Named Address Spaces814430
48496Node: Zero Length815729
48497Node: Empty Structures819016
48498Node: Variable Length819432
48499Node: Variadic Macros822085
48500Node: Escaped Newlines824467
48501Node: Subscripting825306
48502Node: Pointer Arith826029
48503Node: Initializers826597
48504Node: Compound Literals827093
48505Node: Designated Inits829268
48506Node: Case Ranges832923
48507Node: Cast to Union833606
48508Node: Mixed Declarations834702
48509Node: Function Attributes835208
48510Node: Attribute Syntax915014
48511Node: Function Prototypes925460
48512Node: C++ Comments927241
48513Node: Dollar Signs927760
48514Node: Character Escapes928225
48515Node: Variable Attributes928519
48516Ref: MeP Variable Attributes943410
48517Ref: i386 Variable Attributes945371
48518Node: Type Attributes951356
48519Ref: MeP Type Attributes965097
48520Ref: i386 Type Attributes965371
48521Ref: PowerPC Type Attributes966211
48522Ref: SPU Type Attributes967073
48523Node: Alignment967364
48524Node: Inline968738
48525Node: Volatiles973722
48526Node: Extended Asm976617
48527Ref: Example of asm with clobbered asm reg982706
48528Ref: Extended asm with goto992473
48529Node: Constraints1000208
48530Node: Simple Constraints1001292
48531Node: Multi-Alternative1008613
48532Node: Modifiers1010330
48533Node: Machine Constraints1013224
48534Node: Asm Labels1051868
48535Node: Explicit Reg Vars1053544
48536Node: Global Reg Vars1055152
48537Node: Local Reg Vars1059702
48538Node: Alternate Keywords1062143
48539Node: Incomplete Enums1063629
48540Node: Function Names1064386
48541Node: Return Address1066548
48542Node: Vector Extensions1070101
48543Node: Offsetof1074507
48544Node: Atomic Builtins1075321
48545Node: Object Size Checking1080699
48546Node: Other Builtins1086127
48547Node: Target Builtins1112807
48548Node: Alpha Built-in Functions1113731
48549Node: ARM iWMMXt Built-in Functions1116730
48550Node: ARM NEON Intrinsics1123449
48551Node: Blackfin Built-in Functions1329649
48552Node: FR-V Built-in Functions1330263
48553Node: Argument Types1331122
48554Node: Directly-mapped Integer Functions1332878
48555Node: Directly-mapped Media Functions1333960
48556Node: Raw read/write Functions1340992
48557Node: Other Built-in Functions1341904
48558Node: X86 Built-in Functions1343093
48559Node: MIPS DSP Built-in Functions1388229
48560Node: MIPS Paired-Single Support1400676
48561Node: MIPS Loongson Built-in Functions1402177
48562Node: Paired-Single Arithmetic1408695
48563Node: Paired-Single Built-in Functions1409641
48564Node: MIPS-3D Built-in Functions1412311
48565Node: picoChip Built-in Functions1417686
48566Node: Other MIPS Built-in Functions1419052
48567Node: PowerPC AltiVec/VSX Built-in Functions1419576
48568Node: RX Built-in Functions1535772
48569Node: SPARC VIS Built-in Functions1539782
48570Node: SPU Built-in Functions1541461
48571Node: Target Format Checks1543243
48572Node: Solaris Format Checks1543675
48573Node: Darwin Format Checks1544101
48574Node: Pragmas1544928
48575Node: ARM Pragmas1545638
48576Node: M32C Pragmas1546241
48577Node: MeP Pragmas1547315
48578Node: RS/6000 and PowerPC Pragmas1549384
48579Node: Darwin Pragmas1550125
48580Node: Solaris Pragmas1551192
48581Node: Symbol-Renaming Pragmas1552353
48582Node: Structure-Packing Pragmas1554987
48583Node: Weak Pragmas1556637
48584Node: Diagnostic Pragmas1557371
48585Node: Visibility Pragmas1560399
48586Node: Push/Pop Macro Pragmas1561151
48587Node: Function Specific Option Pragmas1562124
48588Node: Unnamed Fields1564388
48589Node: Thread-Local1566626
48590Node: C99 Thread-Local Edits1568733
48591Node: C++98 Thread-Local Edits1570745
48592Node: Binary constants1574190
48593Node: C++ Extensions1574861
48594Node: C++ Volatiles1576509
48595Node: Restricted Pointers1578869
48596Node: Vague Linkage1580467
48597Node: C++ Interface1584129
48598Ref: C++ Interface-Footnote-11588426
48599Node: Template Instantiation1588563
48600Node: Bound member functions1595575
48601Node: C++ Attributes1597118
48602Node: Namespace Association1598776
48603Node: Type Traits1600190
48604Node: Java Exceptions1606545
48605Node: Deprecated Features1607942
48606Node: Backwards Compatibility1610907
48607Node: Objective-C1612265
48608Node: GNU Objective-C runtime API1612874
48609Node: Modern GNU Objective-C runtime API1613881
48610Node: Traditional GNU Objective-C runtime API1616318
48611Node: Executing code before main1617940
48612Node: What you can and what you cannot do in +load1620678
48613Node: Type encoding1623068
48614Node: Legacy type encoding1628144
48615Node: @encode1629235
48616Node: Method signatures1629776
48617Node: Garbage Collection1631771
48618Node: Constant string objects1634405
48619Node: compatibility_alias1636913
48620Node: Exceptions1637635
48621Node: Synchronization1640346
48622Node: Fast enumeration1641530
48623Node: Using fast enumeration1641842
48624Node: c99-like fast enumeration syntax1643053
48625Node: Fast enumeration details1643756
48626Node: Fast enumeration protocol1646097
48627Node: Messaging with the GNU Objective-C runtime1649249
48628Node: Dynamically registering methods1650620
48629Node: Forwarding hook1652311
48630Node: Compatibility1655350
48631Node: Gcov1661917
48632Node: Gcov Intro1662450
48633Node: Invoking Gcov1665168
48634Node: Gcov and Optimization1677108
48635Node: Gcov Data Files1679763
48636Node: Cross-profiling1680903
48637Node: Trouble1682754
48638Node: Actual Bugs1684239
48639Node: Cross-Compiler Problems1684695
48640Node: Interoperation1685109
48641Node: Incompatibilities1692246
48642Node: Fixed Headers1700397
48643Node: Standard Libraries1702060
48644Node: Disappointments1703432
48645Node: C++ Misunderstandings1707790
48646Node: Static Definitions1708601
48647Node: Name lookup1709654
48648Ref: Name lookup-Footnote-11714432
48649Node: Temporaries1714619
48650Node: Copy Assignment1716595
48651Node: Non-bugs1718402
48652Node: Warnings and Errors1728909
48653Node: Bugs1730673
48654Node: Bug Criteria1731237
48655Node: Bug Reporting1733447
48656Node: Service1733686
48657Node: Contributing1734505
48658Node: Funding1735245
48659Node: GNU Project1737734
48660Node: Copying1738380
48661Node: GNU Free Documentation License1775908
48662Node: Contributors1801045
48663Node: Option Index1837914
48664Node: Keyword Index2015097
48665
48666End Tag Table
48667